(Auto)update libjingle 63503990-> 63547048

git-svn-id: http://webrtc.googlecode.com/svn/trunk@5751 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/talk/media/webrtc/webrtcvideoengine.cc b/talk/media/webrtc/webrtcvideoengine.cc
index 0fe39cb..21c844e 100644
--- a/talk/media/webrtc/webrtcvideoengine.cc
+++ b/talk/media/webrtc/webrtcvideoengine.cc
@@ -1843,6 +1843,10 @@
 
   send_channel->set_stream_params(sp);
 
+  if (IsSimulcastStream(sp)) {
+    DisableAllExternalEncoders(send_channel, channel_id);
+  }
+
   // Reset send codec after stream parameters changed.
   if (send_codec_) {
     if (!SetSendCodec(send_channel, *send_codec_, send_min_bitrate_,
@@ -3908,6 +3912,24 @@
   }
 }
 
+void WebRtcVideoMediaChannel::DisableAllExternalEncoders(
+    WebRtcVideoChannelSendInfo* send_channel,
+    int channel_id) {
+  const WebRtcVideoChannelSendInfo::EncoderMap& encoder_map =
+      send_channel->registered_encoders();
+  for (WebRtcVideoChannelSendInfo::EncoderMap::const_iterator it =
+      encoder_map.begin(); it != encoder_map.end(); ++it) {
+    if (engine()->vie()->ext_codec()->DeRegisterExternalSendCodec(
+        channel_id, it->first) != 0) {
+      LOG_RTCERR1(DeregisterEncoderObserver, channel_id);
+    }
+    engine()->DestroyExternalEncoder(it->second);
+  }
+  send_channel->ClearRegisteredEncoders();
+
+  engine()->SetExternalEncoderFactory(NULL);
+}
+
 }  // namespace cricket
 
 #endif  // HAVE_WEBRTC_VIDEO
diff --git a/talk/media/webrtc/webrtcvideoengine.h b/talk/media/webrtc/webrtcvideoengine.h
index b818b0d..ecacf1f 100644
--- a/talk/media/webrtc/webrtcvideoengine.h
+++ b/talk/media/webrtc/webrtcvideoengine.h
@@ -414,6 +414,11 @@
   // to one send channel, i.e. the last send channel.
   void MaybeDisconnectCapturer(VideoCapturer* capturer);
 
+  // Deregister and free all the external encoders previously register to
+  // |send_channel|. Also disable the external encoder factory.
+  void DisableAllExternalEncoders(WebRtcVideoChannelSendInfo* send_channel,
+                                  int channel_id);
+
   // Global state.
   WebRtcVideoEngine* engine_;
   VoiceMediaChannel* voice_channel_;
diff --git a/talk/media/webrtc/webrtcvideoengine_unittest.cc b/talk/media/webrtc/webrtcvideoengine_unittest.cc
index 9860a84..371fb74 100644
--- a/talk/media/webrtc/webrtcvideoengine_unittest.cc
+++ b/talk/media/webrtc/webrtcvideoengine_unittest.cc
@@ -1585,6 +1585,7 @@
   EXPECT_TRUE(channel_->RemoveSendStream(kSsrc));
 }
 
+
 TEST_F(WebRtcVideoEngineTestFake, DontRegisterEncoderMultipleTimes) {
   encoder_factory_.AddSupportedVideoCodecType(webrtc::kVideoCodecVP8, "VP8");
   engine_.SetExternalEncoderFactory(&encoder_factory_);