(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_);