From a5ba250c262704441668fe89e439e89f3f41de5c Mon Sep 17 00:00:00 2001 From: Lennart Grahl Date: Thu, 6 Oct 2022 14:34:39 +0200 Subject: [PATCH] Fix apply frame transformer to MID demuxed audio streams Manually tested with libwebrtc built for Android and a solution running into the same problem as the linked repro in chromium:1348132. Bug: chromium:1348132 Change-Id: I88260b9ac72c67f1a6ad927e075d1490ac06ce91 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/278241 Commit-Queue: Harald Alvestrand Reviewed-by: Harald Alvestrand Cr-Commit-Position: refs/heads/main@{#38335} --- media/engine/webrtc_voice_engine.cc | 9 ++++++++- media/engine/webrtc_voice_engine.h | 2 ++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/media/engine/webrtc_voice_engine.cc b/media/engine/webrtc_voice_engine.cc index d36c5985e5..e090fcf62f 100644 --- a/media/engine/webrtc_voice_engine.cc +++ b/media/engine/webrtc_voice_engine.cc @@ -1935,7 +1935,7 @@ bool WebRtcVoiceMediaChannel::AddRecvStream(const StreamParams& sp) { codec_pair_id_, engine()->audio_jitter_buffer_max_packets_, engine()->audio_jitter_buffer_fast_accelerate_, engine()->audio_jitter_buffer_min_delay_ms_, unsignaled_frame_decryptor_, - crypto_options_, nullptr); + crypto_options_, unsignaled_frame_transformer_); recv_streams_.insert(std::make_pair( ssrc, new WebRtcAudioReceiveStream(std::move(config), call_))); @@ -2481,6 +2481,13 @@ void WebRtcVoiceMediaChannel::SetDepacketizerToDecoderFrameTransformer( uint32_t ssrc, rtc::scoped_refptr frame_transformer) { RTC_DCHECK_RUN_ON(worker_thread_); + if (ssrc == 0) { + // If the receiver is unsignaled, save the frame transformer and set it when + // the stream is associated with an ssrc. + unsignaled_frame_transformer_ = std::move(frame_transformer); + return; + } + auto matching_stream = recv_streams_.find(ssrc); if (matching_stream == recv_streams_.end()) { RTC_LOG(LS_INFO) << "Attempting to set frame transformer for SSRC:" << ssrc diff --git a/media/engine/webrtc_voice_engine.h b/media/engine/webrtc_voice_engine.h index 9cb7ec82eb..0a501bea0a 100644 --- a/media/engine/webrtc_voice_engine.h +++ b/media/engine/webrtc_voice_engine.h @@ -321,6 +321,8 @@ class WebRtcVoiceMediaChannel final : public VoiceMediaChannel, // Unsignaled streams have an option to have a frame decryptor set on them. rtc::scoped_refptr unsignaled_frame_decryptor_; + rtc::scoped_refptr + unsignaled_frame_transformer_; }; } // namespace cricket