(Auto)update libjingle 78822708-> 78823675

git-svn-id: http://webrtc.googlecode.com/svn/trunk@7567 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/talk/media/webrtc/webrtcvoiceengine.cc b/talk/media/webrtc/webrtcvoiceengine.cc
index cf3a56f..95e16e4 100644
--- a/talk/media/webrtc/webrtcvoiceengine.cc
+++ b/talk/media/webrtc/webrtcvoiceengine.cc
@@ -117,6 +117,15 @@
 
 // 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 @@
 // 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 @@
     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 @@
   // 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() {