Don't recreate audio receive streams on header extension update. Bug: webrtc:11993 Change-Id: Ibf45cb846713a6dd991a73bc72b4c5f59e3e26e5 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/222041 Commit-Queue: Tommi <tommi@webrtc.org> Reviewed-by: Markus Handell <handellm@webrtc.org> Cr-Commit-Position: refs/heads/master@{#34287}
diff --git a/audio/audio_receive_stream.cc b/audio/audio_receive_stream.cc index 7476e08..623cb26 100644 --- a/audio/audio_receive_stream.cc +++ b/audio/audio_receive_stream.cc
@@ -254,6 +254,14 @@ channel_receive_->SetFrameDecryptor(std::move(frame_decryptor)); } +void AudioReceiveStream::SetRtpExtensions( + std::vector<RtpExtension> extensions) { + // TODO(bugs.webrtc.org/11993): This is called via WebRtcAudioReceiveStream, + // expect to be called on the network thread. + RTC_DCHECK_RUN_ON(&worker_thread_checker_); + config_.rtp.extensions = std::move(extensions); +} + webrtc::AudioReceiveStream::Stats AudioReceiveStream::GetStats( bool get_and_clear_legacy_stats) const { RTC_DCHECK_RUN_ON(&worker_thread_checker_);
diff --git a/audio/audio_receive_stream.h b/audio/audio_receive_stream.h index 27e99f0..b038aff 100644 --- a/audio/audio_receive_stream.h +++ b/audio/audio_receive_stream.h
@@ -94,6 +94,7 @@ int history_ms) override; void SetFrameDecryptor(rtc::scoped_refptr<webrtc::FrameDecryptorInterface> frame_decryptor) override; + void SetRtpExtensions(std::vector<RtpExtension> extensions) override; webrtc::AudioReceiveStream::Stats GetStats( bool get_and_clear_legacy_stats) const override;
diff --git a/call/audio_receive_stream.h b/call/audio_receive_stream.h index 55e3fdb..54729d0 100644 --- a/call/audio_receive_stream.h +++ b/call/audio_receive_stream.h
@@ -156,6 +156,9 @@ virtual void SetDecoderMap(std::map<int, SdpAudioFormat> decoder_map) = 0; virtual void SetUseTransportCcAndNackHistory(bool use_transport_cc, int history_ms) = 0; + // Set/change the rtp header extensions. Must be called on the packet + // delivery thread. + virtual void SetRtpExtensions(std::vector<RtpExtension> extensions) = 0; // Returns true if the stream has been started. virtual bool IsRunning() const = 0;
diff --git a/media/engine/fake_webrtc_call.cc b/media/engine/fake_webrtc_call.cc index 0190d88..fa5125f 100644 --- a/media/engine/fake_webrtc_call.cc +++ b/media/engine/fake_webrtc_call.cc
@@ -118,6 +118,11 @@ config_.frame_decryptor = std::move(frame_decryptor); } +void FakeAudioReceiveStream::SetRtpExtensions( + std::vector<webrtc::RtpExtension> extensions) { + config_.rtp.extensions = std::move(extensions); +} + webrtc::AudioReceiveStream::Stats FakeAudioReceiveStream::GetStats( bool get_and_clear_legacy_stats) const { return stats_;
diff --git a/media/engine/fake_webrtc_call.h b/media/engine/fake_webrtc_call.h index 5a14157..874f971 100644 --- a/media/engine/fake_webrtc_call.h +++ b/media/engine/fake_webrtc_call.h
@@ -116,6 +116,7 @@ int history_ms) override; void SetFrameDecryptor(rtc::scoped_refptr<webrtc::FrameDecryptorInterface> frame_decryptor) override; + void SetRtpExtensions(std::vector<webrtc::RtpExtension> extensions) override; webrtc::AudioReceiveStream::Stats GetStats( bool get_and_clear_legacy_stats) const override;
diff --git a/media/engine/webrtc_voice_engine.cc b/media/engine/webrtc_voice_engine.cc index 575e232..f38474b 100644 --- a/media/engine/webrtc_voice_engine.cc +++ b/media/engine/webrtc_voice_engine.cc
@@ -1238,11 +1238,10 @@ config_.rtp.nack.rtp_history_ms); } - void SetRtpExtensionsAndRecreateStream( - const std::vector<webrtc::RtpExtension>& extensions) { + void SetRtpExtensions(const std::vector<webrtc::RtpExtension>& extensions) { RTC_DCHECK_RUN_ON(&worker_thread_checker_); config_.rtp.extensions = extensions; - RecreateAudioReceiveStream(); + stream_->SetRtpExtensions(extensions); } // Set a new payload type -> decoder map. @@ -1472,7 +1471,7 @@ if (recv_rtp_extensions_ != filtered_extensions) { recv_rtp_extensions_.swap(filtered_extensions); for (auto& it : recv_streams_) { - it.second->SetRtpExtensionsAndRecreateStream(recv_rtp_extensions_); + it.second->SetRtpExtensions(recv_rtp_extensions_); } } return true;