Index: webrtc/media/engine/webrtcvideoengine.cc |
diff --git a/webrtc/media/engine/webrtcvideoengine.cc b/webrtc/media/engine/webrtcvideoengine.cc |
index b6447329e265519da1f19d29f1227006feeff8c0..2651a9a3bb6e7521ea7f9dd6d0c59d6d8d10242b 100644 |
--- a/webrtc/media/engine/webrtcvideoengine.cc |
+++ b/webrtc/media/engine/webrtcvideoengine.cc |
@@ -2154,6 +2154,7 @@ WebRtcVideoChannel::WebRtcVideoReceiveStream::AllocatedDecoder:: |
WebRtcVideoChannel::WebRtcVideoReceiveStream::~WebRtcVideoReceiveStream() { |
if (flexfec_stream_) { |
+ MaybeDissociateFlexfecFromVideo(); |
call_->DestroyFlexfecReceiveStream(flexfec_stream_); |
} |
call_->DestroyVideoReceiveStream(stream_); |
@@ -2334,24 +2335,42 @@ void WebRtcVideoChannel::WebRtcVideoReceiveStream::SetRecvParameters( |
void WebRtcVideoChannel::WebRtcVideoReceiveStream:: |
RecreateWebRtcVideoStream() { |
if (stream_) { |
+ MaybeDissociateFlexfecFromVideo(); |
call_->DestroyVideoReceiveStream(stream_); |
stream_ = nullptr; |
} |
webrtc::VideoReceiveStream::Config config = config_.Copy(); |
config.rtp.protected_by_flexfec = (flexfec_stream_ != nullptr); |
stream_ = call_->CreateVideoReceiveStream(std::move(config)); |
+ MaybeAssociateFlexfecWithVideo(); |
stream_->Start(); |
} |
void WebRtcVideoChannel::WebRtcVideoReceiveStream:: |
MaybeRecreateWebRtcFlexfecStream() { |
if (flexfec_stream_) { |
+ MaybeDissociateFlexfecFromVideo(); |
call_->DestroyFlexfecReceiveStream(flexfec_stream_); |
flexfec_stream_ = nullptr; |
} |
if (flexfec_config_.IsCompleteAndEnabled()) { |
flexfec_stream_ = call_->CreateFlexfecReceiveStream(flexfec_config_); |
flexfec_stream_->Start(); |
+ MaybeAssociateFlexfecWithVideo(); |
+ } |
+} |
+ |
+void WebRtcVideoChannel::WebRtcVideoReceiveStream:: |
+ MaybeAssociateFlexfecWithVideo() { |
+ if (stream_ && flexfec_stream_) { |
+ stream_->AddSecondarySink(flexfec_stream_); |
+ } |
+} |
+ |
+void WebRtcVideoChannel::WebRtcVideoReceiveStream:: |
+ MaybeDissociateFlexfecFromVideo() { |
+ if (stream_ && flexfec_stream_) { |
+ stream_->RemoveSecondarySink(flexfec_stream_); |
} |
} |