Add getter for rtp header extensions for receiver classes.

This is to avoid accessing the array via the config struct.
Moving forward we might want to consider using the RtpHeaderExtensionMap
instead of a std::vector of RtpExtension.

Bug: webrtc:11993
Change-Id: I8469dbbd9bb95a69f87b5912bfc4bf8b8f603beb
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/261317
Reviewed-by: Niels Moller <nisse@webrtc.org>
Commit-Queue: Tomas Gunnarsson <tommi@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#36820}
This commit is contained in:
Tommi 2022-05-09 15:20:24 +00:00 committed by WebRTC LUCI CQ
parent 853a407273
commit 6be3e788f5
11 changed files with 54 additions and 12 deletions

View file

@ -265,6 +265,11 @@ void AudioReceiveStream::SetRtpExtensions(
config_.rtp.extensions = std::move(extensions); config_.rtp.extensions = std::move(extensions);
} }
const std::vector<RtpExtension>& AudioReceiveStream::GetRtpExtensions() const {
RTC_DCHECK_RUN_ON(&worker_thread_checker_);
return config_.rtp.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

@ -95,6 +95,7 @@ class AudioReceiveStream final : public webrtc::AudioReceiveStream,
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; void SetRtpExtensions(std::vector<RtpExtension> extensions) override;
const std::vector<RtpExtension>& GetRtpExtensions() const 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

@ -79,10 +79,10 @@ bool SendPeriodicFeedback(const std::vector<RtpExtension>& extensions) {
return true; return true;
} }
bool UseSendSideBwe(const ReceiveStream::RtpConfig& rtp) { bool UseSendSideBwe(const ReceiveStream* stream) {
if (!rtp.transport_cc) if (!stream->rtp_config().transport_cc)
return false; return false;
for (const auto& extension : rtp.extensions) { for (const auto& extension : stream->GetRtpExtensions()) {
if (extension.uri == RtpExtension::kTransportSequenceNumberUri || if (extension.uri == RtpExtension::kTransportSequenceNumberUri ||
extension.uri == RtpExtension::kTransportSequenceNumberV2Uri) extension.uri == RtpExtension::kTransportSequenceNumberV2Uri)
return true; return true;
@ -1010,8 +1010,7 @@ void Call::DestroyAudioReceiveStream(
uint32_t ssrc = audio_receive_stream->remote_ssrc(); uint32_t ssrc = audio_receive_stream->remote_ssrc();
receive_side_cc_ receive_side_cc_
.GetRemoteBitrateEstimator( .GetRemoteBitrateEstimator(UseSendSideBwe(audio_receive_stream))
UseSendSideBwe(audio_receive_stream->rtp_config()))
->RemoveStream(ssrc); ->RemoveStream(ssrc);
audio_receive_streams_.erase(audio_receive_stream); audio_receive_streams_.erase(audio_receive_stream);
@ -1189,6 +1188,7 @@ void Call::DestroyVideoReceiveStream(
// TODO(bugs.webrtc.org/11993): Unregister on the network thread. // TODO(bugs.webrtc.org/11993): Unregister on the network thread.
receive_stream_impl->UnregisterFromTransport(); receive_stream_impl->UnregisterFromTransport();
// TODO(tommi): Remove `rtp()` accessor.
const webrtc::VideoReceiveStream::Config::Rtp& rtp = const webrtc::VideoReceiveStream::Config::Rtp& rtp =
receive_stream_impl->rtp(); receive_stream_impl->rtp();
@ -1201,7 +1201,8 @@ void Call::DestroyVideoReceiveStream(
video_receive_streams_.erase(receive_stream_impl); video_receive_streams_.erase(receive_stream_impl);
ConfigureSync(receive_stream_impl->sync_group()); ConfigureSync(receive_stream_impl->sync_group());
receive_side_cc_.GetRemoteBitrateEstimator(UseSendSideBwe(rtp)) receive_side_cc_
.GetRemoteBitrateEstimator(UseSendSideBwe(receive_stream_impl))
->RemoveStream(rtp.remote_ssrc); ->RemoveStream(rtp.remote_ssrc);
UpdateAggregateNetworkState(); UpdateAggregateNetworkState();
@ -1251,8 +1252,7 @@ void Call::DestroyFlexfecReceiveStream(FlexfecReceiveStream* receive_stream) {
// Remove all SSRCs pointing to the FlexfecReceiveStreamImpl to be // Remove all SSRCs pointing to the FlexfecReceiveStreamImpl to be
// destroyed. // destroyed.
receive_side_cc_ receive_side_cc_
.GetRemoteBitrateEstimator( .GetRemoteBitrateEstimator(UseSendSideBwe(receive_stream_impl))
UseSendSideBwe(receive_stream_impl->rtp_config()))
->RemoveStream(ssrc); ->RemoveStream(ssrc);
delete receive_stream_impl; delete receive_stream_impl;
@ -1694,10 +1694,10 @@ bool Call::IdentifyReceivedPacket(RtpPacketReceived& packet,
} }
packet.IdentifyExtensions( packet.IdentifyExtensions(
RtpHeaderExtensionMap(it->second->rtp_config().extensions)); RtpHeaderExtensionMap(it->second->GetRtpExtensions()));
if (use_send_side_bwe) { if (use_send_side_bwe) {
*use_send_side_bwe = UseSendSideBwe(it->second->rtp_config()); *use_send_side_bwe = UseSendSideBwe(it->second);
} }
return true; return true;

View file

@ -210,4 +210,10 @@ void FlexfecReceiveStreamImpl::SetRtpExtensions(
std::move(extensions); std::move(extensions);
} }
const std::vector<RtpExtension>& FlexfecReceiveStreamImpl::GetRtpExtensions()
const {
RTC_DCHECK_RUN_ON(&packet_sequence_checker_);
return config_.rtp.extensions;
}
} // namespace webrtc } // namespace webrtc

View file

@ -60,6 +60,7 @@ class FlexfecReceiveStreamImpl : public FlexfecReceiveStream {
// ReceiveStream impl. // ReceiveStream impl.
void SetRtpExtensions(std::vector<RtpExtension> extensions) override; void SetRtpExtensions(std::vector<RtpExtension> extensions) override;
const std::vector<RtpExtension>& GetRtpExtensions() const override;
const RtpConfig& rtp_config() const override { return config_.rtp; } const RtpConfig& rtp_config() const override { return config_.rtp; }
uint32_t remote_ssrc() const { return config_.rtp.remote_ssrc; } uint32_t remote_ssrc() const { return config_.rtp.remote_ssrc; }

View file

@ -55,6 +55,11 @@ class ReceiveStream {
// delivery thread. // delivery thread.
virtual void SetRtpExtensions(std::vector<RtpExtension> extensions) = 0; virtual void SetRtpExtensions(std::vector<RtpExtension> extensions) = 0;
// Access the currently set rtp extensions. Must be called on the packet
// delivery thread.
// TODO(tommi): Consider using `RtpHeaderExtensionMap` instead.
virtual const std::vector<RtpExtension>& GetRtpExtensions() const = 0;
// Called on the packet delivery thread since some members of the config may // Called on the packet delivery thread since some members of the config may
// change mid-stream (e.g. the local ssrc). All mutation must also happen on // change mid-stream (e.g. the local ssrc). All mutation must also happen on
// the packet delivery thread. Return value can be assumed to // the packet delivery thread. Return value can be assumed to

View file

@ -130,6 +130,11 @@ void FakeAudioReceiveStream::SetRtpExtensions(
config_.rtp.extensions = std::move(extensions); config_.rtp.extensions = std::move(extensions);
} }
const std::vector<webrtc::RtpExtension>&
FakeAudioReceiveStream::GetRtpExtensions() const {
return config_.rtp.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_;
@ -380,6 +385,11 @@ void FakeVideoReceiveStream::SetRtpExtensions(
config_.rtp.extensions = std::move(extensions); config_.rtp.extensions = std::move(extensions);
} }
const std::vector<webrtc::RtpExtension>&
FakeVideoReceiveStream::GetRtpExtensions() const {
return config_.rtp.extensions;
}
void FakeVideoReceiveStream::Start() { void FakeVideoReceiveStream::Start() {
receiving_ = true; receiving_ = true;
} }
@ -402,6 +412,11 @@ void FakeFlexfecReceiveStream::SetRtpExtensions(
config_.rtp.extensions = std::move(extensions); config_.rtp.extensions = std::move(extensions);
} }
const std::vector<webrtc::RtpExtension>&
FakeFlexfecReceiveStream::GetRtpExtensions() const {
return config_.rtp.extensions;
}
const webrtc::FlexfecReceiveStream::Config& const webrtc::FlexfecReceiveStream::Config&
FakeFlexfecReceiveStream::GetConfig() const { FakeFlexfecReceiveStream::GetConfig() const {
return config_; return config_;

View file

@ -128,6 +128,7 @@ class FakeAudioReceiveStream final : public webrtc::AudioReceiveStream {
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; void SetRtpExtensions(std::vector<webrtc::RtpExtension> extensions) override;
const std::vector<webrtc::RtpExtension>& GetRtpExtensions() const 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;
@ -266,6 +267,7 @@ class FakeVideoReceiveStream final : public webrtc::VideoReceiveStream {
private: private:
// webrtc::VideoReceiveStream implementation. // webrtc::VideoReceiveStream implementation.
void SetRtpExtensions(std::vector<webrtc::RtpExtension> extensions) override; void SetRtpExtensions(std::vector<webrtc::RtpExtension> extensions) override;
const std::vector<webrtc::RtpExtension>& GetRtpExtensions() const override;
const webrtc::ReceiveStream::RtpConfig& rtp_config() const override { const webrtc::ReceiveStream::RtpConfig& rtp_config() const override {
return config_.rtp; return config_.rtp;
@ -298,6 +300,7 @@ class FakeFlexfecReceiveStream final : public webrtc::FlexfecReceiveStream {
const webrtc::FlexfecReceiveStream::Config& config); const webrtc::FlexfecReceiveStream::Config& config);
void SetRtpExtensions(std::vector<webrtc::RtpExtension> extensions) override; void SetRtpExtensions(std::vector<webrtc::RtpExtension> extensions) override;
const std::vector<webrtc::RtpExtension>& GetRtpExtensions() const override;
const webrtc::ReceiveStream::RtpConfig& rtp_config() const override { const webrtc::ReceiveStream::RtpConfig& rtp_config() const override {
return config_.rtp; return config_.rtp;

View file

@ -1262,9 +1262,8 @@ class WebRtcVoiceMediaChannel::WebRtcAudioReceiveStream {
webrtc::RtpParameters GetRtpParameters() const { webrtc::RtpParameters GetRtpParameters() const {
webrtc::RtpParameters rtp_parameters; webrtc::RtpParameters rtp_parameters;
rtp_parameters.encodings.emplace_back(); rtp_parameters.encodings.emplace_back();
const auto& config = stream_->rtp_config();
rtp_parameters.encodings[0].ssrc = stream_->remote_ssrc(); rtp_parameters.encodings[0].ssrc = stream_->remote_ssrc();
rtp_parameters.header_extensions = config.extensions; rtp_parameters.header_extensions = stream_->GetRtpExtensions();
return rtp_parameters; return rtp_parameters;
} }

View file

@ -487,6 +487,12 @@ void VideoReceiveStream2::SetRtpExtensions(
c.rtp.extensions = std::move(extensions); c.rtp.extensions = std::move(extensions);
} }
const std::vector<RtpExtension>& VideoReceiveStream2::GetRtpExtensions() const {
RTC_DCHECK_RUN_ON(&packet_sequence_checker_);
// TODO(tommi): return the state held by `rtp_video_stream_receiver_`.
return config_.rtp.extensions;
}
void VideoReceiveStream2::CreateAndRegisterExternalDecoder( void VideoReceiveStream2::CreateAndRegisterExternalDecoder(
const Decoder& decoder) { const Decoder& decoder) {
TRACE_EVENT0("webrtc", TRACE_EVENT0("webrtc",

View file

@ -135,6 +135,7 @@ class VideoReceiveStream2
void Stop() override; void Stop() override;
void SetRtpExtensions(std::vector<RtpExtension> extensions) override; void SetRtpExtensions(std::vector<RtpExtension> extensions) override;
const std::vector<RtpExtension>& GetRtpExtensions() const override;
const RtpConfig& rtp_config() const override { return rtp(); } const RtpConfig& rtp_config() const override { return rtp(); }