From eb166972591504a230baae416bc37b674bb20c2a Mon Sep 17 00:00:00 2001 From: Karl Wiberg Date: Thu, 16 May 2019 15:14:01 +0200 Subject: [PATCH] AudioEncoderOpus: Don't mix up sample rate and RTP timestamp rate A later change will allow them to differ. Bug: webrtc:10631 Change-Id: I4e13f41980261990b3bbbc6897cd754369265ca0 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/137046 Reviewed-by: Minyue Li Commit-Queue: Karl Wiberg Cr-Commit-Position: refs/heads/master@{#27991} --- .../codecs/opus/audio_encoder_opus.cc | 20 +++++++++++++------ .../codecs/opus/audio_encoder_opus.h | 1 + 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/modules/audio_coding/codecs/opus/audio_encoder_opus.cc b/modules/audio_coding/codecs/opus/audio_encoder_opus.cc index 97ae343eb6..18b9ac585e 100644 --- a/modules/audio_coding/codecs/opus/audio_encoder_opus.cc +++ b/modules/audio_coding/codecs/opus/audio_encoder_opus.cc @@ -51,6 +51,7 @@ constexpr int kOpusBitrateWbBps = 20000; constexpr int kOpusBitrateFbBps = 32000; constexpr int kSampleRateHz = 48000; +constexpr int kRtpTimestampRateHz = 48000; constexpr int kDefaultMaxPlaybackRate = 48000; // These two lists must be sorted from low to high @@ -276,8 +277,10 @@ float AudioEncoderOpusImpl::NewPacketLossRateOptimizer::OptimizePacketLossRate( void AudioEncoderOpusImpl::AppendSupportedEncoders( std::vector* specs) { - const SdpAudioFormat fmt = { - "opus", 48000, 2, {{"minptime", "10"}, {"useinbandfec", "1"}}}; + const SdpAudioFormat fmt = {"opus", + kRtpTimestampRateHz, + 2, + {{"minptime", "10"}, {"useinbandfec", "1"}}}; const AudioCodecInfo info = QueryAudioEncoder(*SdpToConfig(fmt)); specs->push_back({fmt, info}); } @@ -285,7 +288,8 @@ void AudioEncoderOpusImpl::AppendSupportedEncoders( AudioCodecInfo AudioEncoderOpusImpl::QueryAudioEncoder( const AudioEncoderOpusConfig& config) { RTC_DCHECK(config.IsOk()); - AudioCodecInfo info(48000, config.num_channels, *config.bitrate_bps, + AudioCodecInfo info(kRtpTimestampRateHz, config.num_channels, + *config.bitrate_bps, AudioEncoderOpusConfig::kMinBitrateBps, AudioEncoderOpusConfig::kMaxBitrateBps); info.allow_comfort_noise = false; @@ -303,12 +307,12 @@ std::unique_ptr AudioEncoderOpusImpl::MakeAudioEncoder( absl::optional AudioEncoderOpusImpl::QueryAudioEncoder( const SdpAudioFormat& format) { if (absl::EqualsIgnoreCase(format.name, GetPayloadName()) && - format.clockrate_hz == 48000 && format.num_channels == 2) { + format.clockrate_hz == kRtpTimestampRateHz && format.num_channels == 2) { const size_t num_channels = GetChannelCount(format); const int bitrate = CalculateBitrate(GetMaxPlaybackRate(format), num_channels, GetFormatParameter(format, "maxaveragebitrate")); - AudioCodecInfo info(48000, num_channels, bitrate, + AudioCodecInfo info(kRtpTimestampRateHz, num_channels, bitrate, AudioEncoderOpusConfig::kMinBitrateBps, AudioEncoderOpusConfig::kMaxBitrateBps); info.allow_comfort_noise = false; @@ -322,7 +326,7 @@ absl::optional AudioEncoderOpusImpl::QueryAudioEncoder( absl::optional AudioEncoderOpusImpl::SdpToConfig( const SdpAudioFormat& format) { if (!absl::EqualsIgnoreCase(format.name, "opus") || - format.clockrate_hz != 48000 || format.num_channels != 2) { + format.clockrate_hz != kRtpTimestampRateHz || format.num_channels != 2) { return absl::nullopt; } @@ -482,6 +486,10 @@ size_t AudioEncoderOpusImpl::NumChannels() const { return config_.num_channels; } +int AudioEncoderOpusImpl::RtpTimestampRateHz() const { + return kRtpTimestampRateHz; +} + size_t AudioEncoderOpusImpl::Num10MsFramesInNextPacket() const { return Num10msFramesPerPacket(); } diff --git a/modules/audio_coding/codecs/opus/audio_encoder_opus.h b/modules/audio_coding/codecs/opus/audio_encoder_opus.h index dc14620860..5b92a18940 100644 --- a/modules/audio_coding/codecs/opus/audio_encoder_opus.h +++ b/modules/audio_coding/codecs/opus/audio_encoder_opus.h @@ -88,6 +88,7 @@ class AudioEncoderOpusImpl final : public AudioEncoder { int SampleRateHz() const override; size_t NumChannels() const override; + int RtpTimestampRateHz() const override; size_t Num10MsFramesInNextPacket() const override; size_t Max10MsFramesInAPacket() const override; int GetTargetBitrate() const override;