summaryrefslogtreecommitdiffstats
path: root/third_party/libwebrtc/pc/rtp_transceiver_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/libwebrtc/pc/rtp_transceiver_unittest.cc')
-rw-r--r--third_party/libwebrtc/pc/rtp_transceiver_unittest.cc75
1 files changed, 75 insertions, 0 deletions
diff --git a/third_party/libwebrtc/pc/rtp_transceiver_unittest.cc b/third_party/libwebrtc/pc/rtp_transceiver_unittest.cc
index d75e964509..b6dc7b2bb9 100644
--- a/third_party/libwebrtc/pc/rtp_transceiver_unittest.cc
+++ b/third_party/libwebrtc/pc/rtp_transceiver_unittest.cc
@@ -481,6 +481,81 @@ TEST_F(RtpTransceiverTestForHeaderExtensions,
RtpTransceiverDirection::kStopped)));
}
+TEST_F(RtpTransceiverTestForHeaderExtensions,
+ SimulcastOrSvcEnablesExtensionsByDefault) {
+ std::vector<RtpHeaderExtensionCapability> extensions = {
+ {RtpExtension::kDependencyDescriptorUri, 1,
+ RtpTransceiverDirection::kStopped},
+ {RtpExtension::kVideoLayersAllocationUri, 2,
+ RtpTransceiverDirection::kStopped},
+ };
+
+ // Default is stopped.
+ auto sender = rtc::make_ref_counted<MockRtpSenderInternal>();
+ auto transceiver = rtc::make_ref_counted<RtpTransceiver>(
+ RtpSenderProxyWithInternal<RtpSenderInternal>::Create(
+ rtc::Thread::Current(), sender),
+ RtpReceiverProxyWithInternal<RtpReceiverInternal>::Create(
+ rtc::Thread::Current(), rtc::Thread::Current(), receiver_),
+ context(), extensions,
+ /* on_negotiation_needed= */ [] {});
+ std::vector<webrtc::RtpHeaderExtensionCapability> header_extensions =
+ transceiver->GetHeaderExtensionsToNegotiate();
+ ASSERT_EQ(header_extensions.size(), 2u);
+ EXPECT_EQ(header_extensions[0].uri, RtpExtension::kDependencyDescriptorUri);
+ EXPECT_EQ(header_extensions[0].direction, RtpTransceiverDirection::kStopped);
+ EXPECT_EQ(header_extensions[1].uri, RtpExtension::kVideoLayersAllocationUri);
+ EXPECT_EQ(header_extensions[1].direction, RtpTransceiverDirection::kStopped);
+
+ // Simulcast, i.e. more than one encoding.
+ RtpParameters simulcast_parameters;
+ simulcast_parameters.encodings.resize(2);
+ auto simulcast_sender = rtc::make_ref_counted<MockRtpSenderInternal>();
+ EXPECT_CALL(*simulcast_sender, GetParametersInternal())
+ .WillRepeatedly(Return(simulcast_parameters));
+ auto simulcast_transceiver = rtc::make_ref_counted<RtpTransceiver>(
+ RtpSenderProxyWithInternal<RtpSenderInternal>::Create(
+ rtc::Thread::Current(), simulcast_sender),
+ RtpReceiverProxyWithInternal<RtpReceiverInternal>::Create(
+ rtc::Thread::Current(), rtc::Thread::Current(), receiver_),
+ context(), extensions,
+ /* on_negotiation_needed= */ [] {});
+ auto simulcast_extensions =
+ simulcast_transceiver->GetHeaderExtensionsToNegotiate();
+ ASSERT_EQ(simulcast_extensions.size(), 2u);
+ EXPECT_EQ(simulcast_extensions[0].uri,
+ RtpExtension::kDependencyDescriptorUri);
+ EXPECT_EQ(simulcast_extensions[0].direction,
+ RtpTransceiverDirection::kSendRecv);
+ EXPECT_EQ(simulcast_extensions[1].uri,
+ RtpExtension::kVideoLayersAllocationUri);
+ EXPECT_EQ(simulcast_extensions[1].direction,
+ RtpTransceiverDirection::kSendRecv);
+
+ // SVC, a single encoding with a scalabilityMode other than L1T1.
+ webrtc::RtpParameters svc_parameters;
+ svc_parameters.encodings.resize(1);
+ svc_parameters.encodings[0].scalability_mode = "L3T3";
+
+ auto svc_sender = rtc::make_ref_counted<MockRtpSenderInternal>();
+ EXPECT_CALL(*svc_sender, GetParametersInternal())
+ .WillRepeatedly(Return(svc_parameters));
+ auto svc_transceiver = rtc::make_ref_counted<RtpTransceiver>(
+ RtpSenderProxyWithInternal<RtpSenderInternal>::Create(
+ rtc::Thread::Current(), svc_sender),
+ RtpReceiverProxyWithInternal<RtpReceiverInternal>::Create(
+ rtc::Thread::Current(), rtc::Thread::Current(), receiver_),
+ context(), extensions,
+ /* on_negotiation_needed= */ [] {});
+ std::vector<webrtc::RtpHeaderExtensionCapability> svc_extensions =
+ svc_transceiver->GetHeaderExtensionsToNegotiate();
+ ASSERT_EQ(svc_extensions.size(), 2u);
+ EXPECT_EQ(svc_extensions[0].uri, RtpExtension::kDependencyDescriptorUri);
+ EXPECT_EQ(svc_extensions[0].direction, RtpTransceiverDirection::kSendRecv);
+ EXPECT_EQ(svc_extensions[1].uri, RtpExtension::kVideoLayersAllocationUri);
+ EXPECT_EQ(svc_extensions[1].direction, RtpTransceiverDirection::kSendRecv);
+}
+
} // namespace
} // namespace webrtc