diff --git a/webrtc/video_engine/vie_channel_manager.cc b/webrtc/video_engine/vie_channel_manager.cc index 9fabd8d41..13be55c8a 100644 --- a/webrtc/video_engine/vie_channel_manager.cc +++ b/webrtc/video_engine/vie_channel_manager.cc @@ -229,7 +229,11 @@ int ViEChannelManager::DeleteChannel(int channel_id) { group = FindGroup(channel_id); group->SetChannelRembStatus(channel_id, false, false, vie_channel, vie_encoder); - group->GetEncoderStateFeedback()->RemoveEncoder(vie_encoder); + + // Remove the feedback if we're owning the encoder. + if (vie_encoder->channel_id() == channel_id) { + group->GetEncoderStateFeedback()->RemoveEncoder(vie_encoder); + } unsigned int remote_ssrc = 0; vie_channel->GetRemoteSSRC(&remote_ssrc); diff --git a/webrtc/video_engine/vie_encoder.h b/webrtc/video_engine/vie_encoder.h index 339390f23..ea552bf06 100644 --- a/webrtc/video_engine/vie_encoder.h +++ b/webrtc/video_engine/vie_encoder.h @@ -152,6 +152,7 @@ class ViEEncoder // Disables recording of debugging information. virtual int StopDebugRecording(); + int channel_id() const { return channel_id_; } protected: // Called by BitrateObserver. void OnNetworkChanged(const uint32_t bitrate_bps,