Index: talk/media/webrtc/webrtcvideoengine2_unittest.cc |
diff --git a/talk/media/webrtc/webrtcvideoengine2_unittest.cc b/talk/media/webrtc/webrtcvideoengine2_unittest.cc |
index 479dd05f553be4b060620f4d645fa420d738ae2f..c0cd2ffa50d403851fa2a9b0c55e64d0122609ca 100644 |
--- a/talk/media/webrtc/webrtcvideoengine2_unittest.cc |
+++ b/talk/media/webrtc/webrtcvideoengine2_unittest.cc |
@@ -1066,6 +1066,29 @@ class WebRtcVideoChannel2Test : public WebRtcVideoEngine2Test { |
EXPECT_EQ(webrtc_ext, recv_stream->GetConfig().rtp.extensions[0].name); |
} |
+ void TestExtensionFilter(const std::vector<std::string>& extensions, |
+ const std::string& expected_extension) { |
+ cricket::VideoSendParameters parameters = send_parameters_; |
+ int expected_id = -1; |
+ int id = 1; |
+ for (const std::string& extension : extensions) { |
+ if (extension == expected_extension) |
+ expected_id = id; |
+ parameters.extensions.push_back( |
+ cricket::RtpHeaderExtension(extension, id++)); |
+ } |
+ EXPECT_TRUE(channel_->SetSendParameters(parameters)); |
+ FakeVideoSendStream* send_stream = |
+ AddSendStream(cricket::StreamParams::CreateLegacy(123)); |
+ |
+ // Verify that only one of them has been set, and that it is the one with |
+ // highest priority (transport sequence number). |
+ ASSERT_EQ(1u, send_stream->GetConfig().rtp.extensions.size()); |
+ EXPECT_EQ(expected_id, send_stream->GetConfig().rtp.extensions[0].id); |
+ EXPECT_EQ(expected_extension, |
+ send_stream->GetConfig().rtp.extensions[0].name); |
+ } |
+ |
void TestCpuAdaptation(bool enable_overuse, bool is_screenshare); |
void TestReceiverLocalSsrcConfiguration(bool receiver_first); |
void TestReceiveUnsignalledSsrcPacket(uint8_t payload_type, |
@@ -1199,6 +1222,23 @@ TEST_F(WebRtcVideoChannel2Test, RecvAbsoluteSendTimeHeaderExtensions) { |
webrtc::RtpExtension::kAbsSendTime); |
} |
+TEST_F(WebRtcVideoChannel2Test, FiltersExtensionsPicksTransportSeqNum) { |
+ // Enable three redundant extensions. |
+ std::vector<std::string> extensions; |
+ extensions.push_back(kRtpAbsoluteSenderTimeHeaderExtension); |
+ extensions.push_back(kRtpTimestampOffsetHeaderExtension); |
+ extensions.push_back(kRtpTransportSequenceNumberHeaderExtension); |
+ TestExtensionFilter(extensions, kRtpTransportSequenceNumberHeaderExtension); |
+} |
+ |
+TEST_F(WebRtcVideoChannel2Test, FiltersExtensionsPicksAbsSendTime) { |
+ // Enable two redundant extensions. |
+ std::vector<std::string> extensions; |
+ extensions.push_back(kRtpAbsoluteSenderTimeHeaderExtension); |
+ extensions.push_back(kRtpTimestampOffsetHeaderExtension); |
+ TestExtensionFilter(extensions, kRtpAbsoluteSenderTimeHeaderExtension); |
+} |
+ |
class WebRtcVideoChannel2WithSendSideBweTest : public WebRtcVideoChannel2Test { |
public: |
WebRtcVideoChannel2WithSendSideBweTest() |
@@ -1230,14 +1270,11 @@ TEST_F(WebRtcVideoChannel2Test, RecvVideoRotationHeaderExtensions) { |
} |
TEST_F(WebRtcVideoChannel2Test, IdenticalSendExtensionsDoesntRecreateStream) { |
- const int kTOffsetId = 1; |
- const int kAbsSendTimeId = 2; |
- const int kVideoRotationId = 3; |
+ const int kAbsSendTimeId = 1; |
+ const int kVideoRotationId = 2; |
send_parameters_.extensions.push_back(cricket::RtpHeaderExtension( |
kRtpAbsoluteSenderTimeHeaderExtension, kAbsSendTimeId)); |
send_parameters_.extensions.push_back(cricket::RtpHeaderExtension( |
- kRtpTimestampOffsetHeaderExtension, kTOffsetId)); |
- send_parameters_.extensions.push_back(cricket::RtpHeaderExtension( |
kRtpVideoRotationHeaderExtension, kVideoRotationId)); |
EXPECT_TRUE(channel_->SetSendParameters(send_parameters_)); |
@@ -1245,7 +1282,7 @@ TEST_F(WebRtcVideoChannel2Test, IdenticalSendExtensionsDoesntRecreateStream) { |
AddSendStream(cricket::StreamParams::CreateLegacy(123)); |
EXPECT_EQ(1, fake_call_->GetNumCreatedSendStreams()); |
- ASSERT_EQ(3u, send_stream->GetConfig().rtp.extensions.size()); |
+ ASSERT_EQ(2u, send_stream->GetConfig().rtp.extensions.size()); |
// Setting the same extensions (even if in different order) shouldn't |
// reallocate the stream. |