From bd27adb714cf16240f8dfb41593c6da9ab01b730 Mon Sep 17 00:00:00 2001 From: Guido Urdaneta Date: Wed, 28 Apr 2021 14:42:10 +0000 Subject: [PATCH] [InsertableStreams] Ensure encoder queue is valid in OnTransformedFrame In RTPSenderVideoFrameTransformerDelegate::TransformFrame(), the encoder queue might still be null when a frame queued by a previous delegate arrives. This could happen in the context of renegotiation that results in a codec reset. In this case, the frame should be dropped. Bug: webrtc:12691 Change-Id: Ib738ce31738cffc7e01053dbc82237f457fc2286 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/216393 Commit-Queue: Guido Urdaneta Reviewed-by: Danil Chapovalov Cr-Commit-Position: refs/heads/master@{#33866} --- .../source/rtp_sender_video_frame_transformer_delegate.cc | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/modules/rtp_rtcp/source/rtp_sender_video_frame_transformer_delegate.cc b/modules/rtp_rtcp/source/rtp_sender_video_frame_transformer_delegate.cc index 074b64086a..23e66bf757 100644 --- a/modules/rtp_rtcp/source/rtp_sender_video_frame_transformer_delegate.cc +++ b/modules/rtp_rtcp/source/rtp_sender_video_frame_transformer_delegate.cc @@ -129,9 +129,10 @@ void RTPSenderVideoFrameTransformerDelegate::OnTransformedFrame( std::unique_ptr frame) { MutexLock lock(&sender_lock_); - // The encoder queue gets destroyed after the sender; as long as the sender is - // alive, it's safe to post. - if (!sender_) + // The encoder queue normally gets destroyed after the sender; + // however, it might still be null by the time a previously queued frame + // arrives. + if (!sender_ || !encoder_queue_) return; rtc::scoped_refptr delegate = this; encoder_queue_->PostTask(ToQueuedTask(