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}
This commit is contained in:
Tommi
2021-06-14 20:00:04 +02:00
committed by WebRTC LUCI CQ
parent 6bbe1a47e1
commit 3008bcd588
6 changed files with 21 additions and 4 deletions

View File

@ -254,6 +254,14 @@ void AudioReceiveStream::SetFrameDecryptor(
channel_receive_->SetFrameDecryptor(std::move(frame_decryptor)); 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( webrtc::AudioReceiveStream::Stats AudioReceiveStream::GetStats(
bool get_and_clear_legacy_stats) const { bool get_and_clear_legacy_stats) const {
RTC_DCHECK_RUN_ON(&worker_thread_checker_); RTC_DCHECK_RUN_ON(&worker_thread_checker_);

View File

@ -94,6 +94,7 @@ class AudioReceiveStream final : public webrtc::AudioReceiveStream,
int history_ms) override; int history_ms) override;
void SetFrameDecryptor(rtc::scoped_refptr<webrtc::FrameDecryptorInterface> void SetFrameDecryptor(rtc::scoped_refptr<webrtc::FrameDecryptorInterface>
frame_decryptor) override; frame_decryptor) override;
void SetRtpExtensions(std::vector<RtpExtension> extensions) override;
webrtc::AudioReceiveStream::Stats GetStats( webrtc::AudioReceiveStream::Stats GetStats(
bool get_and_clear_legacy_stats) const override; bool get_and_clear_legacy_stats) const override;

View File

@ -156,6 +156,9 @@ class AudioReceiveStream : public MediaReceiveStream {
virtual void SetDecoderMap(std::map<int, SdpAudioFormat> decoder_map) = 0; virtual void SetDecoderMap(std::map<int, SdpAudioFormat> decoder_map) = 0;
virtual void SetUseTransportCcAndNackHistory(bool use_transport_cc, virtual void SetUseTransportCcAndNackHistory(bool use_transport_cc,
int history_ms) = 0; 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. // Returns true if the stream has been started.
virtual bool IsRunning() const = 0; virtual bool IsRunning() const = 0;

View File

@ -118,6 +118,11 @@ void FakeAudioReceiveStream::SetFrameDecryptor(
config_.frame_decryptor = std::move(frame_decryptor); 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( webrtc::AudioReceiveStream::Stats FakeAudioReceiveStream::GetStats(
bool get_and_clear_legacy_stats) const { bool get_and_clear_legacy_stats) const {
return stats_; return stats_;

View File

@ -116,6 +116,7 @@ class FakeAudioReceiveStream final : public webrtc::AudioReceiveStream {
int history_ms) override; int history_ms) override;
void SetFrameDecryptor(rtc::scoped_refptr<webrtc::FrameDecryptorInterface> void SetFrameDecryptor(rtc::scoped_refptr<webrtc::FrameDecryptorInterface>
frame_decryptor) override; frame_decryptor) override;
void SetRtpExtensions(std::vector<webrtc::RtpExtension> extensions) override;
webrtc::AudioReceiveStream::Stats GetStats( webrtc::AudioReceiveStream::Stats GetStats(
bool get_and_clear_legacy_stats) const override; bool get_and_clear_legacy_stats) const override;

View File

@ -1238,11 +1238,10 @@ class WebRtcVoiceMediaChannel::WebRtcAudioReceiveStream {
config_.rtp.nack.rtp_history_ms); config_.rtp.nack.rtp_history_ms);
} }
void SetRtpExtensionsAndRecreateStream( void SetRtpExtensions(const std::vector<webrtc::RtpExtension>& extensions) {
const std::vector<webrtc::RtpExtension>& extensions) {
RTC_DCHECK_RUN_ON(&worker_thread_checker_); RTC_DCHECK_RUN_ON(&worker_thread_checker_);
config_.rtp.extensions = extensions; config_.rtp.extensions = extensions;
RecreateAudioReceiveStream(); stream_->SetRtpExtensions(extensions);
} }
// Set a new payload type -> decoder map. // Set a new payload type -> decoder map.
@ -1472,7 +1471,7 @@ bool WebRtcVoiceMediaChannel::SetRecvParameters(
if (recv_rtp_extensions_ != filtered_extensions) { if (recv_rtp_extensions_ != filtered_extensions) {
recv_rtp_extensions_.swap(filtered_extensions); recv_rtp_extensions_.swap(filtered_extensions);
for (auto& it : recv_streams_) { for (auto& it : recv_streams_) {
it.second->SetRtpExtensionsAndRecreateStream(recv_rtp_extensions_); it.second->SetRtpExtensions(recv_rtp_extensions_);
} }
} }
return true; return true;