| Index: webrtc/video/video_receive_stream.cc
|
| diff --git a/webrtc/video/video_receive_stream.cc b/webrtc/video/video_receive_stream.cc
|
| index 2b4a3c2b7b0f131a662255a33af24f69dfc4c0aa..7d77751db3cd8c69c6d3b9f51f92ee96e69e9b3a 100644
|
| --- a/webrtc/video/video_receive_stream.cc
|
| +++ b/webrtc/video/video_receive_stream.cc
|
| @@ -246,13 +246,6 @@ VideoReceiveStream::~VideoReceiveStream() {
|
| process_thread_->DeRegisterModule(&rtp_stream_sync_);
|
| process_thread_->DeRegisterModule(&video_receiver_);
|
|
|
| - // Deregister external decoders so they are no longer running during
|
| - // destruction. This effectively stops the VCM since the decoder thread is
|
| - // stopped, the VCM is deregistered and no asynchronous decoder threads are
|
| - // running.
|
| - for (const Decoder& decoder : config_.decoders)
|
| - video_receiver_.RegisterExternalDecoder(nullptr, decoder.payload_type);
|
| -
|
| congestion_controller_->GetRemoteBitrateEstimator(UseSendSideBwe(config_))
|
| ->RemoveStream(rtp_stream_receiver_.GetRemoteSsrc());
|
| }
|
| @@ -307,7 +300,15 @@ void VideoReceiveStream::Stop() {
|
| // stop immediately, instead of waiting for a timeout. Needs to be called
|
| // before joining the decoder thread thread.
|
| video_receiver_.TriggerDecoderShutdown();
|
| - decode_thread_.Stop();
|
| + if (decode_thread_.IsRunning()) {
|
| + decode_thread_.Stop();
|
| + // Deregister external decoders so they are no longer running during
|
| + // destruction. This effectively stops the VCM since the decoder thread is
|
| + // stopped, the VCM is deregistered and no asynchronous decoder threads are
|
| + // running.
|
| + for (const Decoder& decoder : config_.decoders)
|
| + video_receiver_.RegisterExternalDecoder(nullptr, decoder.payload_type);
|
| + }
|
| call_stats_->DeregisterStatsObserver(video_stream_decoder_.get());
|
| video_stream_decoder_.reset();
|
| incoming_video_stream_.reset();
|
|
|