From 9cf9f758fc73bd4dde477cf02c7beeee669b8a39 Mon Sep 17 00:00:00 2001 From: Rasmus Brandt Date: Thu, 28 Sep 2017 13:02:58 +0200 Subject: [PATCH] Detach SequencedTaskChecker in MediaCodecVideoEncoder::Release. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit If this is not done, the RTC_DCHECK_CALLED_SEQUENTIALLY might fire if the encoder is used on a new VideoStreamEncoder. This happens after VideoSendStream recreations due to changes in the SDP. BUG=b/66590444 Change-Id: I086370526afbbe2ba629805f97f89e512ba3f472 Reviewed-on: https://webrtc-review.googlesource.com/4360 Reviewed-by: Erik Språng Reviewed-by: Sami Kalliomäki Reviewed-by: Magnus Jedvert Commit-Queue: Rasmus Brandt Cr-Commit-Position: refs/heads/master@{#20020} --- media/engine/simulcast_encoder_adapter.cc | 6 +++--- sdk/android/src/jni/androidmediaencoder_jni.cc | 2 ++ 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/media/engine/simulcast_encoder_adapter.cc b/media/engine/simulcast_encoder_adapter.cc index ecd415dd9d..c931aba62f 100644 --- a/media/engine/simulcast_encoder_adapter.cc +++ b/media/engine/simulcast_encoder_adapter.cc @@ -151,11 +151,11 @@ int SimulcastEncoderAdapter::Release() { while (!streaminfos_.empty()) { std::unique_ptr encoder = std::move(streaminfos_.back().encoder); - encoder->Release(); // Even though it seems very unlikely, there are no guarantees that the - // encoder will not call back after being Release()'d. Therefore, we disable - // the callbacks here. + // encoder will not call back after being Release()'d. Therefore, we first + // disable the callbacks here. encoder->RegisterEncodeCompleteCallback(nullptr); + encoder->Release(); streaminfos_.pop_back(); // Deletes callback adapter. stored_encoders_.push(std::move(encoder)); } diff --git a/sdk/android/src/jni/androidmediaencoder_jni.cc b/sdk/android/src/jni/androidmediaencoder_jni.cc index 1891539c7f..07a6339f1f 100644 --- a/sdk/android/src/jni/androidmediaencoder_jni.cc +++ b/sdk/android/src/jni/androidmediaencoder_jni.cc @@ -1018,6 +1018,8 @@ int32_t MediaCodecVideoEncoder::Release() { } use_surface_ = false; ALOGD << "EncoderRelease done."; + // It's legal to move the encoder to another queue now. + encoder_queue_checker_.Detach(); return WEBRTC_VIDEO_CODEC_OK; }