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:
@ -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_);
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -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_;
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
Reference in New Issue
Block a user