Use std::span in ToRtpCapabilities Make ToRtpCapabilities take std::span<const Codec> and std::span<const RtpHeaderExtensionCapability> instead of vector. Rename GetDefaultEnabledRtpHeaderExtensions to GetDefaultEnabledRtpHeaderCapabilities and make it return std::vector<RtpHeaderExtensionCapability> instead of RtpExtension. Remove the old GetDefaultEnabledRtpHeaderExtensions. Update tests and callers to match the new signatures. In voice engine test, convert capabilities to extensions when needed. Bug: webrtc:514817938 Change-Id: I742abe7c3459ffb48466129dbec914ccb659cbe5 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/479801 Reviewed-by: Danil Chapovalov <danilchap@webrtc.org> Commit-Queue: Harald Alvestrand <hta@webrtc.org> Cr-Commit-Position: refs/heads/main@{#47933}
diff --git a/media/base/media_engine.cc b/media/base/media_engine.cc index 5fa4529..281837e 100644 --- a/media/base/media_engine.cc +++ b/media/base/media_engine.cc
@@ -22,7 +22,6 @@ #include "absl/algorithm/container.h" #include "api/field_trials_view.h" #include "api/rtc_error.h" -#include "api/rtp_header_extension_id.h" #include "api/rtp_headers.h" #include "api/rtp_parameters.h" #include "api/rtp_transceiver_direction.h" @@ -93,18 +92,6 @@ return extensions; } -std::vector<RtpExtension> GetDefaultEnabledRtpHeaderExtensions( - const RtpHeaderExtensionQueryInterface& query_interface, - const FieldTrialsView* field_trials) { - std::vector<RtpExtension> extensions; - for (const RtpHeaderExtensionCapability& entry : - GetDefaultEnabledRtpHeaderCapabilities(query_interface, field_trials)) { - extensions.emplace_back( - entry.uri, entry.preferred_id.value_or(RtpHeaderExtensionId::NotSet())); - } - return extensions; -} - RTCError CheckScalabilityModeValues(const RtpParameters& rtp_parameters, std::span<const Codec> send_codecs, std::optional<Codec> send_codec) {
diff --git a/media/base/media_engine.h b/media/base/media_engine.h index c5abbe3..eca6629 100644 --- a/media/base/media_engine.h +++ b/media/base/media_engine.h
@@ -309,10 +309,6 @@ // GetCapabilities(). The returned vector only shows what will definitely be // offered by default, i.e. the list of extensions returned from // GetRtpHeaderExtensions() that are not kStopped. -std::vector<RtpExtension> GetDefaultEnabledRtpHeaderExtensions( - const RtpHeaderExtensionQueryInterface& query_interface, - const FieldTrialsView* field_trials); - std::vector<RtpHeaderExtensionCapability> GetDefaultEnabledRtpHeaderCapabilities( const RtpHeaderExtensionQueryInterface& query_interface,
diff --git a/media/base/media_engine_unittest.cc b/media/base/media_engine_unittest.cc index e1d8ccd..fa28623 100644 --- a/media/base/media_engine_unittest.cc +++ b/media/base/media_engine_unittest.cc
@@ -62,11 +62,12 @@ RtpHeaderExtensionCapability("uri5", RtpHeaderExtensionId(5), RtpTransceiverDirection::kRecvOnly)}); EXPECT_CALL(mock, GetRtpHeaderExtensions).WillOnce(Return(extensions)); - EXPECT_THAT(GetDefaultEnabledRtpHeaderExtensions(mock, nullptr), - ElementsAre(Field(&RtpExtension::uri, StrEq("uri1")), - Field(&RtpExtension::uri, StrEq("uri2")), - Field(&RtpExtension::uri, StrEq("uri4")), - Field(&RtpExtension::uri, StrEq("uri5")))); + EXPECT_THAT( + GetDefaultEnabledRtpHeaderCapabilities(mock, nullptr), + ElementsAre(Field(&RtpHeaderExtensionCapability::uri, StrEq("uri1")), + Field(&RtpHeaderExtensionCapability::uri, StrEq("uri2")), + Field(&RtpHeaderExtensionCapability::uri, StrEq("uri4")), + Field(&RtpHeaderExtensionCapability::uri, StrEq("uri5")))); } // This class mocks methods declared as pure virtual in the interface.
diff --git a/media/engine/webrtc_video_engine_unittest.cc b/media/engine/webrtc_video_engine_unittest.cc index c6d74b5..6381c81 100644 --- a/media/engine/webrtc_video_engine_unittest.cc +++ b/media/engine/webrtc_video_engine_unittest.cc
@@ -1047,13 +1047,15 @@ void WebRtcVideoEngineTest::ExpectRtpCapabilitySupport(const char* uri, bool supported) const { - const std::vector<RtpExtension> header_extensions = - GetDefaultEnabledRtpHeaderExtensions(*engine_, - /* field_trials= */ nullptr); + const std::vector<RtpHeaderExtensionCapability> header_extensions = + GetDefaultEnabledRtpHeaderCapabilities(*engine_, + /* field_trials= */ nullptr); if (supported) { - EXPECT_THAT(header_extensions, Contains(Field(&RtpExtension::uri, uri))); + EXPECT_THAT(header_extensions, + Contains(Field(&RtpHeaderExtensionCapability::uri, uri))); } else { - EXPECT_THAT(header_extensions, Each(Field(&RtpExtension::uri, StrNe(uri)))); + EXPECT_THAT(header_extensions, + Each(Field(&RtpHeaderExtensionCapability::uri, StrNe(uri)))); } }
diff --git a/media/engine/webrtc_voice_engine_unittest.cc b/media/engine/webrtc_voice_engine_unittest.cc index d41739cd..9c270fa 100644 --- a/media/engine/webrtc_voice_engine_unittest.cc +++ b/media/engine/webrtc_voice_engine_unittest.cc
@@ -2341,12 +2341,12 @@ TEST_P(WebRtcVoiceEngineTestFake, SupportsTransportSequenceNumberHeaderExtension) { - const std::vector<RtpExtension> header_extensions = - GetDefaultEnabledRtpHeaderExtensions(*engine_, - /* field_trials= */ nullptr); + const std::vector<RtpHeaderExtensionCapability> header_extensions = + GetDefaultEnabledRtpHeaderCapabilities(*engine_, + /* field_trials= */ nullptr); EXPECT_THAT( header_extensions, - Contains(::testing::Field("uri", &RtpExtension::uri, + Contains(::testing::Field("uri", &RtpHeaderExtensionCapability::uri, RtpExtension::kTransportSequenceNumberUri))); } @@ -3364,9 +3364,15 @@ } // Set up receive extensions. - const std::vector<RtpExtension> header_extensions = - GetDefaultEnabledRtpHeaderExtensions(*engine_, - /* field_trials= */ nullptr); + const auto header_extensions_caps = + GetDefaultEnabledRtpHeaderCapabilities(*engine_, + /* field_trials= */ nullptr); + std::vector<RtpExtension> header_extensions; + for (const auto& cap : header_extensions_caps) { + header_extensions.emplace_back( + cap.uri, cap.preferred_id.value_or(RtpHeaderExtensionId::NotSet()), + cap.preferred_encrypt); + } AudioReceiverParameters recv_parameters; recv_parameters.extensions = header_extensions; receive_channel_->SetReceiverParameters(recv_parameters);
diff --git a/pc/rtp_parameters_conversion.cc b/pc/rtp_parameters_conversion.cc index 3153b46..22ac23a 100644 --- a/pc/rtp_parameters_conversion.cc +++ b/pc/rtp_parameters_conversion.cc
@@ -102,9 +102,9 @@ return codec; } -namespace { -RtpCapabilities ToRtpCapabilitiesWithoutExtensions( - const std::vector<Codec>& cricket_codecs) { +RtpCapabilities ToRtpCapabilities( + std::span<const Codec> cricket_codecs, + std::span<const RtpHeaderExtensionCapability> extensions) { RtpCapabilities capabilities; bool have_red = false; bool have_ulpfec = false; @@ -138,6 +138,9 @@ } capabilities.codecs.push_back(codec_capability); } + + capabilities.header_extensions.assign(extensions.begin(), extensions.end()); + if (have_red) { capabilities.fec.push_back(FecMechanism::RED); } @@ -149,15 +152,5 @@ } return capabilities; } -} // namespace - -RtpCapabilities ToRtpCapabilities( - const std::vector<Codec>& cricket_codecs, - std::span<const RtpHeaderExtensionCapability> extensions) { - RtpCapabilities capabilities = - ToRtpCapabilitiesWithoutExtensions(cricket_codecs); - capabilities.header_extensions.assign(extensions.begin(), extensions.end()); - return capabilities; -} } // namespace webrtc
diff --git a/pc/rtp_parameters_conversion.h b/pc/rtp_parameters_conversion.h index d81ec3a..3c11c3a 100644 --- a/pc/rtp_parameters_conversion.h +++ b/pc/rtp_parameters_conversion.h
@@ -13,7 +13,6 @@ #include <optional> #include <span> -#include <vector> #include "api/rtp_parameters.h" #include "media/base/codec.h" @@ -38,7 +37,7 @@ RtpCodecCapability ToRtpCodecCapability(const Codec& cricket_codec); RtpCapabilities ToRtpCapabilities( - const std::vector<Codec>& cricket_codecs, + std::span<const Codec> cricket_codecs, std::span<const RtpHeaderExtensionCapability> extensions); } // namespace webrtc
diff --git a/pc/rtp_parameters_conversion_unittest.cc b/pc/rtp_parameters_conversion_unittest.cc index 297bdd2..37ebdb7 100644 --- a/pc/rtp_parameters_conversion_unittest.cc +++ b/pc/rtp_parameters_conversion_unittest.cc
@@ -149,15 +149,12 @@ Codec red2 = CreateVideoCodec(127, "red"); Codec ulpfec = CreateVideoCodec(103, "ulpfec"); Codec flexfec = CreateVideoCodec(102, "flexfec-03"); - Codec rtx = CreateVideoRtxCodec(014, 101); + Codec rtx = CreateVideoRtxCodec(104, 101); Codec rtx2 = CreateVideoRtxCodec(105, 109); - std::vector<RtpHeaderExtensionCapability> header_extension_caps = { - {RtpHeaderExtensionCapability("uri", RtpHeaderExtensionId(1)), - RtpHeaderExtensionCapability("uri2", RtpHeaderExtensionId(3))}}; - - RtpCapabilities capabilities = - ToRtpCapabilities({vp8, ulpfec, rtx, rtx2}, header_extension_caps); + RtpCapabilities capabilities = ToRtpCapabilities( + {{vp8, ulpfec, rtx, rtx2}}, + {{{"uri", RtpHeaderExtensionId(1)}, {"uri2", RtpHeaderExtensionId(3)}}}); ASSERT_EQ(3u, capabilities.codecs.size()); EXPECT_EQ("VP8", capabilities.codecs[0].name); EXPECT_EQ("ulpfec", capabilities.codecs[1].name); @@ -172,13 +169,13 @@ capabilities.header_extensions[1].preferred_id); EXPECT_EQ(0u, capabilities.fec.size()); - capabilities = ToRtpCapabilities({vp8, red, red2, ulpfec, rtx}, {}); + capabilities = ToRtpCapabilities({{vp8, red, red2, ulpfec, rtx}}, {}); EXPECT_EQ(4u, capabilities.codecs.size()); EXPECT_THAT( capabilities.fec, UnorderedElementsAre(FecMechanism::RED, FecMechanism::RED_AND_ULPFEC)); - capabilities = ToRtpCapabilities({vp8, red, flexfec}, {}); + capabilities = ToRtpCapabilities({{vp8, red, flexfec}}, {}); EXPECT_EQ(3u, capabilities.codecs.size()); EXPECT_THAT(capabilities.fec, UnorderedElementsAre(FecMechanism::RED, FecMechanism::FLEXFEC));