From 879fac81d15cca19f1c9edf48833ac27637fe536 Mon Sep 17 00:00:00 2001 From: "buildbot@webrtc.org" Date: Thu, 30 Oct 2014 07:50:13 +0000 Subject: [PATCH] (Auto)update libjingle 78822708-> 78823675 git-svn-id: http://webrtc.googlecode.com/svn/trunk@7567 4adac7df-926f-26a2-2b94-8c16560cd09d --- talk/media/webrtc/webrtcvoiceengine.cc | 29 +++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/talk/media/webrtc/webrtcvoiceengine.cc b/talk/media/webrtc/webrtcvoiceengine.cc index cf3a56fa8..95e16e4ac 100644 --- a/talk/media/webrtc/webrtcvoiceengine.cc +++ b/talk/media/webrtc/webrtcvoiceengine.cc @@ -117,6 +117,15 @@ static const int kNackMaxPackets = 250; // Codec parameters for Opus. // draft-spittka-payload-rtp-opus-03 + +// Recommended bitrates: +// 8-12 kb/s for NB speech, +// 16-20 kb/s for WB speech, +// 28-40 kb/s for FB speech, +// 48-64 kb/s for FB mono music, and +// 64-128 kb/s for FB stereo music. +// The current implementation applies the following values to mono signals, +// and multiplies them by 2 for stereo. static const int kOpusBitrateNb = 12000; static const int kOpusBitrateWb = 20000; static const int kOpusBitrateFb = 32000; @@ -413,7 +422,7 @@ static bool IsOpusStereoEnabled(const AudioCodec& codec) { // otherwise. If the value (either from params or codec.bitrate) <=0, use the // default configuration. If the value is beyond feasible bit rate of Opus, // clamp it. Returns the Opus bit rate for operation. -static int GetOpusBitrate(const AudioCodec& codec) { +static int GetOpusBitrate(const AudioCodec& codec, int max_playback_rate) { int bitrate = 0; bool use_param = true; if (!codec.GetParam(kCodecParamMaxAverageBitrate, &bitrate)) { @@ -421,8 +430,17 @@ static int GetOpusBitrate(const AudioCodec& codec) { use_param = false; } if (bitrate <= 0) { - bitrate = IsOpusStereoEnabled(codec) ? kOpusStereoBitrate : - kOpusMonoBitrate; + if (max_playback_rate <= 8000) { + bitrate = kOpusBitrateNb; + } else if (max_playback_rate <= 16000) { + bitrate = kOpusBitrateWb; + } else { + bitrate = kOpusBitrateFb; + } + + if (IsOpusStereoEnabled(codec)) { + bitrate *= 2; + } } else if (bitrate < kOpusMinBitrate || bitrate > kOpusMaxBitrate) { bitrate = (bitrate < kOpusMinBitrate) ? kOpusMinBitrate : kOpusMaxBitrate; std::string rate_source = @@ -463,11 +481,8 @@ static void GetOpusConfig(const AudioCodec& codec, webrtc::CodecInst* voe_codec, // the bitrate is not specified, i.e. is <= zero, we set it to the // appropriate default value for mono or stereo Opus. - // TODO(minyue): The determination of bit rate might take the maximum playback - // rate into account. - voe_codec->channels = IsOpusStereoEnabled(codec) ? 2 : 1; - voe_codec->rate = GetOpusBitrate(codec); + voe_codec->rate = GetOpusBitrate(codec, *max_playback_rate); } void WebRtcVoiceEngine::ConstructCodecs() {