| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2004 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2004 The WebRTC project authors. All Rights Reserved. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
| 5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
| 6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ | 9 */ |
| 10 | 10 |
| 11 #include <algorithm> | 11 #include <algorithm> |
| 12 #include <map> | 12 #include <map> |
| 13 #include <memory> | 13 #include <memory> |
| 14 #include <vector> | 14 #include <vector> |
| 15 | 15 |
| 16 #include "webrtc/base/arraysize.h" | 16 #include "webrtc/base/arraysize.h" |
| 17 #include "webrtc/base/gunit.h" | 17 #include "webrtc/base/gunit.h" |
| 18 #include "webrtc/base/stringutils.h" | 18 #include "webrtc/base/stringutils.h" |
| 19 #include "webrtc/media/base/testutils.h" | 19 #include "webrtc/media/base/testutils.h" |
| 20 #include "webrtc/media/base/videoengine_unittest.h" | 20 #include "webrtc/media/base/videoengine_unittest.h" |
| 21 #include "webrtc/media/engine/fakewebrtccall.h" | 21 #include "webrtc/media/engine/fakewebrtccall.h" |
| 22 #include "webrtc/media/engine/fakewebrtcvideoengine.h" | 22 #include "webrtc/media/engine/fakewebrtcvideoengine.h" |
| 23 #include "webrtc/media/engine/simulcast.h" | 23 #include "webrtc/media/engine/simulcast.h" |
| 24 #include "webrtc/media/engine/webrtcvideochannelfactory.h" | 24 #include "webrtc/media/engine/webrtcvideochannelfactory.h" |
| 25 #include "webrtc/media/engine/webrtcvideoengine2.h" | 25 #include "webrtc/media/engine/webrtcvideoengine2.h" |
| 26 #include "webrtc/media/engine/webrtcvoiceengine.h" | 26 #include "webrtc/media/engine/webrtcvoiceengine.h" |
| 27 #include "webrtc/test/field_trial.h" | 27 #include "webrtc/test/field_trial.h" |
| 28 #include "webrtc/video_encoder.h" | 28 #include "webrtc/video_encoder.h" |
| 29 | 29 |
| 30 using webrtc::RtpExtension; |
| 31 |
| 30 namespace { | 32 namespace { |
| 31 static const int kDefaultQpMax = 56; | 33 static const int kDefaultQpMax = 56; |
| 32 static const int kDefaultFramerate = 30; | 34 static const int kDefaultFramerate = 30; |
| 33 | 35 |
| 34 static const cricket::VideoCodec kVp8Codec720p(100, "VP8", 1280, 720, 30); | 36 static const cricket::VideoCodec kVp8Codec720p(100, "VP8", 1280, 720, 30); |
| 35 static const cricket::VideoCodec kVp8Codec360p(100, "VP8", 640, 360, 30); | 37 static const cricket::VideoCodec kVp8Codec360p(100, "VP8", 640, 360, 30); |
| 36 static const cricket::VideoCodec kVp8Codec270p(100, "VP8", 480, 270, 30); | 38 static const cricket::VideoCodec kVp8Codec270p(100, "VP8", 480, 270, 30); |
| 37 | 39 |
| 38 static const cricket::VideoCodec kVp8Codec(100, "VP8", 640, 400, 30); | 40 static const cricket::VideoCodec kVp8Codec(100, "VP8", 640, 400, 30); |
| 39 static const cricket::VideoCodec kVp9Codec(101, "VP9", 640, 400, 30); | 41 static const cricket::VideoCodec kVp9Codec(101, "VP9", 640, 400, 30); |
| (...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 175 &associated_payload_type)); | 177 &associated_payload_type)); |
| 176 EXPECT_EQ(default_codec_.id, associated_payload_type); | 178 EXPECT_EQ(default_codec_.id, associated_payload_type); |
| 177 return; | 179 return; |
| 178 } | 180 } |
| 179 FAIL() << "No RTX codec found among default codecs."; | 181 FAIL() << "No RTX codec found among default codecs."; |
| 180 } | 182 } |
| 181 | 183 |
| 182 TEST_F(WebRtcVideoEngine2Test, SupportsTimestampOffsetHeaderExtension) { | 184 TEST_F(WebRtcVideoEngine2Test, SupportsTimestampOffsetHeaderExtension) { |
| 183 RtpCapabilities capabilities = engine_.GetCapabilities(); | 185 RtpCapabilities capabilities = engine_.GetCapabilities(); |
| 184 ASSERT_FALSE(capabilities.header_extensions.empty()); | 186 ASSERT_FALSE(capabilities.header_extensions.empty()); |
| 185 for (const RtpHeaderExtension& extension : capabilities.header_extensions) { | 187 for (const RtpExtension& extension : capabilities.header_extensions) { |
| 186 if (extension.uri == kRtpTimestampOffsetHeaderExtension) { | 188 if (extension.uri == RtpExtension::kTimestampOffsetUri) { |
| 187 EXPECT_EQ(kRtpTimestampOffsetHeaderExtensionDefaultId, extension.id); | 189 EXPECT_EQ(RtpExtension::kTimestampOffsetDefaultId, extension.id); |
| 188 return; | 190 return; |
| 189 } | 191 } |
| 190 } | 192 } |
| 191 FAIL() << "Timestamp offset extension not in header-extension list."; | 193 FAIL() << "Timestamp offset extension not in header-extension list."; |
| 192 } | 194 } |
| 193 | 195 |
| 194 TEST_F(WebRtcVideoEngine2Test, SupportsAbsoluteSenderTimeHeaderExtension) { | 196 TEST_F(WebRtcVideoEngine2Test, SupportsAbsoluteSenderTimeHeaderExtension) { |
| 195 RtpCapabilities capabilities = engine_.GetCapabilities(); | 197 RtpCapabilities capabilities = engine_.GetCapabilities(); |
| 196 ASSERT_FALSE(capabilities.header_extensions.empty()); | 198 ASSERT_FALSE(capabilities.header_extensions.empty()); |
| 197 for (const RtpHeaderExtension& extension : capabilities.header_extensions) { | 199 for (const RtpExtension& extension : capabilities.header_extensions) { |
| 198 if (extension.uri == kRtpAbsoluteSenderTimeHeaderExtension) { | 200 if (extension.uri == RtpExtension::kAbsSendTimeUri) { |
| 199 EXPECT_EQ(kRtpAbsoluteSenderTimeHeaderExtensionDefaultId, extension.id); | 201 EXPECT_EQ(RtpExtension::kAbsSendTimeDefaultId, extension.id); |
| 200 return; | 202 return; |
| 201 } | 203 } |
| 202 } | 204 } |
| 203 FAIL() << "Absolute Sender Time extension not in header-extension list."; | 205 FAIL() << "Absolute Sender Time extension not in header-extension list."; |
| 204 } | 206 } |
| 205 | 207 |
| 206 class WebRtcVideoEngine2WithSendSideBweTest : public WebRtcVideoEngine2Test { | 208 class WebRtcVideoEngine2WithSendSideBweTest : public WebRtcVideoEngine2Test { |
| 207 public: | 209 public: |
| 208 WebRtcVideoEngine2WithSendSideBweTest() | 210 WebRtcVideoEngine2WithSendSideBweTest() |
| 209 : WebRtcVideoEngine2Test("WebRTC-SendSideBwe/Enabled/") {} | 211 : WebRtcVideoEngine2Test("WebRTC-SendSideBwe/Enabled/") {} |
| 210 }; | 212 }; |
| 211 | 213 |
| 212 TEST_F(WebRtcVideoEngine2WithSendSideBweTest, | 214 TEST_F(WebRtcVideoEngine2WithSendSideBweTest, |
| 213 SupportsTransportSequenceNumberHeaderExtension) { | 215 SupportsTransportSequenceNumberHeaderExtension) { |
| 214 RtpCapabilities capabilities = engine_.GetCapabilities(); | 216 RtpCapabilities capabilities = engine_.GetCapabilities(); |
| 215 ASSERT_FALSE(capabilities.header_extensions.empty()); | 217 ASSERT_FALSE(capabilities.header_extensions.empty()); |
| 216 for (const RtpHeaderExtension& extension : capabilities.header_extensions) { | 218 for (const RtpExtension& extension : capabilities.header_extensions) { |
| 217 if (extension.uri == kRtpTransportSequenceNumberHeaderExtension) { | 219 if (extension.uri == RtpExtension::kTransportSequenceNumberUri) { |
| 218 EXPECT_EQ(kRtpTransportSequenceNumberHeaderExtensionDefaultId, | 220 EXPECT_EQ(RtpExtension::kTransportSequenceNumberDefaultId, extension.id); |
| 219 extension.id); | |
| 220 return; | 221 return; |
| 221 } | 222 } |
| 222 } | 223 } |
| 223 FAIL() << "Transport sequence number extension not in header-extension list."; | 224 FAIL() << "Transport sequence number extension not in header-extension list."; |
| 224 } | 225 } |
| 225 | 226 |
| 226 TEST_F(WebRtcVideoEngine2Test, SupportsVideoRotationHeaderExtension) { | 227 TEST_F(WebRtcVideoEngine2Test, SupportsVideoRotationHeaderExtension) { |
| 227 RtpCapabilities capabilities = engine_.GetCapabilities(); | 228 RtpCapabilities capabilities = engine_.GetCapabilities(); |
| 228 ASSERT_FALSE(capabilities.header_extensions.empty()); | 229 ASSERT_FALSE(capabilities.header_extensions.empty()); |
| 229 for (const RtpHeaderExtension& extension : capabilities.header_extensions) { | 230 for (const RtpExtension& extension : capabilities.header_extensions) { |
| 230 if (extension.uri == kRtpVideoRotationHeaderExtension) { | 231 if (extension.uri == RtpExtension::kVideoRotationUri) { |
| 231 EXPECT_EQ(kRtpVideoRotationHeaderExtensionDefaultId, extension.id); | 232 EXPECT_EQ(RtpExtension::kVideoRotationDefaultId, extension.id); |
| 232 return; | 233 return; |
| 233 } | 234 } |
| 234 } | 235 } |
| 235 FAIL() << "Video Rotation extension not in header-extension list."; | 236 FAIL() << "Video Rotation extension not in header-extension list."; |
| 236 } | 237 } |
| 237 | 238 |
| 238 TEST_F(WebRtcVideoEngine2Test, CVOSetHeaderExtensionBeforeCapturer) { | 239 TEST_F(WebRtcVideoEngine2Test, CVOSetHeaderExtensionBeforeCapturer) { |
| 239 // Allocate the capturer first to prevent early destruction before channel's | 240 // Allocate the capturer first to prevent early destruction before channel's |
| 240 // dtor is called. | 241 // dtor is called. |
| 241 cricket::FakeVideoCapturer capturer; | 242 cricket::FakeVideoCapturer capturer; |
| 242 | 243 |
| 243 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; | 244 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; |
| 244 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecVP8, "VP8"); | 245 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecVP8, "VP8"); |
| 245 cricket::VideoSendParameters parameters; | 246 cricket::VideoSendParameters parameters; |
| 246 parameters.codecs.push_back(kVp8Codec); | 247 parameters.codecs.push_back(kVp8Codec); |
| 247 | 248 |
| 248 std::unique_ptr<VideoMediaChannel> channel( | 249 std::unique_ptr<VideoMediaChannel> channel( |
| 249 SetUpForExternalEncoderFactory(&encoder_factory, parameters.codecs)); | 250 SetUpForExternalEncoderFactory(&encoder_factory, parameters.codecs)); |
| 250 EXPECT_TRUE(channel->AddSendStream(StreamParams::CreateLegacy(kSsrc))); | 251 EXPECT_TRUE(channel->AddSendStream(StreamParams::CreateLegacy(kSsrc))); |
| 251 | 252 |
| 252 // Add CVO extension. | 253 // Add CVO extension. |
| 253 const int id = 1; | 254 const int id = 1; |
| 254 parameters.extensions.push_back( | 255 parameters.extensions.push_back( |
| 255 cricket::RtpHeaderExtension(kRtpVideoRotationHeaderExtension, id)); | 256 RtpExtension(RtpExtension::kVideoRotationUri, id)); |
| 256 EXPECT_TRUE(channel->SetSendParameters(parameters)); | 257 EXPECT_TRUE(channel->SetSendParameters(parameters)); |
| 257 | 258 |
| 258 // Set capturer. | 259 // Set capturer. |
| 259 channel->SetSource(kSsrc, &capturer); | 260 channel->SetSource(kSsrc, &capturer); |
| 260 | 261 |
| 261 // Verify capturer has turned off applying rotation. | 262 // Verify capturer has turned off applying rotation. |
| 262 EXPECT_FALSE(capturer.GetApplyRotation()); | 263 EXPECT_FALSE(capturer.GetApplyRotation()); |
| 263 | 264 |
| 264 // Verify removing header extension turns on applying rotation. | 265 // Verify removing header extension turns on applying rotation. |
| 265 parameters.extensions.clear(); | 266 parameters.extensions.clear(); |
| 266 EXPECT_TRUE(channel->SetSendParameters(parameters)); | 267 EXPECT_TRUE(channel->SetSendParameters(parameters)); |
| 267 EXPECT_TRUE(capturer.GetApplyRotation()); | 268 EXPECT_TRUE(capturer.GetApplyRotation()); |
| 268 } | 269 } |
| 269 | 270 |
| 270 TEST_F(WebRtcVideoEngine2Test, CVOSetHeaderExtensionBeforeAddSendStream) { | 271 TEST_F(WebRtcVideoEngine2Test, CVOSetHeaderExtensionBeforeAddSendStream) { |
| 271 // Allocate the capturer first to prevent early destruction before channel's | 272 // Allocate the capturer first to prevent early destruction before channel's |
| 272 // dtor is called. | 273 // dtor is called. |
| 273 cricket::FakeVideoCapturer capturer; | 274 cricket::FakeVideoCapturer capturer; |
| 274 | 275 |
| 275 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; | 276 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; |
| 276 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecVP8, "VP8"); | 277 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecVP8, "VP8"); |
| 277 cricket::VideoSendParameters parameters; | 278 cricket::VideoSendParameters parameters; |
| 278 parameters.codecs.push_back(kVp8Codec); | 279 parameters.codecs.push_back(kVp8Codec); |
| 279 | 280 |
| 280 std::unique_ptr<VideoMediaChannel> channel( | 281 std::unique_ptr<VideoMediaChannel> channel( |
| 281 SetUpForExternalEncoderFactory(&encoder_factory, parameters.codecs)); | 282 SetUpForExternalEncoderFactory(&encoder_factory, parameters.codecs)); |
| 282 // Add CVO extension. | 283 // Add CVO extension. |
| 283 const int id = 1; | 284 const int id = 1; |
| 284 parameters.extensions.push_back( | 285 parameters.extensions.push_back( |
| 285 cricket::RtpHeaderExtension(kRtpVideoRotationHeaderExtension, id)); | 286 RtpExtension(RtpExtension::kVideoRotationUri, id)); |
| 286 EXPECT_TRUE(channel->SetSendParameters(parameters)); | 287 EXPECT_TRUE(channel->SetSendParameters(parameters)); |
| 287 EXPECT_TRUE(channel->AddSendStream(StreamParams::CreateLegacy(kSsrc))); | 288 EXPECT_TRUE(channel->AddSendStream(StreamParams::CreateLegacy(kSsrc))); |
| 288 | 289 |
| 289 // Set capturer. | 290 // Set capturer. |
| 290 channel->SetSource(kSsrc, &capturer); | 291 channel->SetSource(kSsrc, &capturer); |
| 291 | 292 |
| 292 // Verify capturer has turned off applying rotation. | 293 // Verify capturer has turned off applying rotation. |
| 293 EXPECT_FALSE(capturer.GetApplyRotation()); | 294 EXPECT_FALSE(capturer.GetApplyRotation()); |
| 294 } | 295 } |
| 295 | 296 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 309 | 310 |
| 310 // Set capturer. | 311 // Set capturer. |
| 311 channel->SetSource(kSsrc, &capturer); | 312 channel->SetSource(kSsrc, &capturer); |
| 312 | 313 |
| 313 // Verify capturer has turned on applying rotation. | 314 // Verify capturer has turned on applying rotation. |
| 314 EXPECT_TRUE(capturer.GetApplyRotation()); | 315 EXPECT_TRUE(capturer.GetApplyRotation()); |
| 315 | 316 |
| 316 // Add CVO extension. | 317 // Add CVO extension. |
| 317 const int id = 1; | 318 const int id = 1; |
| 318 parameters.extensions.push_back( | 319 parameters.extensions.push_back( |
| 319 cricket::RtpHeaderExtension(kRtpVideoRotationHeaderExtension, id)); | 320 RtpExtension(RtpExtension::kVideoRotationUri, id)); |
| 320 // Also remove the first codec to trigger a codec change as well. | 321 // Also remove the first codec to trigger a codec change as well. |
| 321 parameters.codecs.erase(parameters.codecs.begin()); | 322 parameters.codecs.erase(parameters.codecs.begin()); |
| 322 EXPECT_TRUE(channel->SetSendParameters(parameters)); | 323 EXPECT_TRUE(channel->SetSendParameters(parameters)); |
| 323 | 324 |
| 324 // Verify capturer has turned off applying rotation. | 325 // Verify capturer has turned off applying rotation. |
| 325 EXPECT_FALSE(capturer.GetApplyRotation()); | 326 EXPECT_FALSE(capturer.GetApplyRotation()); |
| 326 | 327 |
| 327 // Verify removing header extension turns on applying rotation. | 328 // Verify removing header extension turns on applying rotation. |
| 328 parameters.extensions.clear(); | 329 parameters.extensions.clear(); |
| 329 EXPECT_TRUE(channel->SetSendParameters(parameters)); | 330 EXPECT_TRUE(channel->SetSendParameters(parameters)); |
| (...skipping 630 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 960 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_)); | 961 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_)); |
| 961 | 962 |
| 962 EXPECT_EQ(expected_min_bitrate_bps, | 963 EXPECT_EQ(expected_min_bitrate_bps, |
| 963 fake_call_->GetConfig().bitrate_config.min_bitrate_bps); | 964 fake_call_->GetConfig().bitrate_config.min_bitrate_bps); |
| 964 EXPECT_EQ(expected_start_bitrate_bps, | 965 EXPECT_EQ(expected_start_bitrate_bps, |
| 965 fake_call_->GetConfig().bitrate_config.start_bitrate_bps); | 966 fake_call_->GetConfig().bitrate_config.start_bitrate_bps); |
| 966 EXPECT_EQ(expected_max_bitrate_bps, | 967 EXPECT_EQ(expected_max_bitrate_bps, |
| 967 fake_call_->GetConfig().bitrate_config.max_bitrate_bps); | 968 fake_call_->GetConfig().bitrate_config.max_bitrate_bps); |
| 968 } | 969 } |
| 969 | 970 |
| 970 void TestSetSendRtpHeaderExtensions(const std::string& cricket_ext, | 971 void TestSetSendRtpHeaderExtensions(const std::string& ext_uri) { |
| 971 const std::string& webrtc_ext) { | |
| 972 // Enable extension. | 972 // Enable extension. |
| 973 const int id = 1; | 973 const int id = 1; |
| 974 cricket::VideoSendParameters parameters = send_parameters_; | 974 cricket::VideoSendParameters parameters = send_parameters_; |
| 975 parameters.extensions.push_back( | 975 parameters.extensions.push_back(RtpExtension(ext_uri, id)); |
| 976 cricket::RtpHeaderExtension(cricket_ext, id)); | |
| 977 EXPECT_TRUE(channel_->SetSendParameters(parameters)); | 976 EXPECT_TRUE(channel_->SetSendParameters(parameters)); |
| 978 FakeVideoSendStream* send_stream = | 977 FakeVideoSendStream* send_stream = |
| 979 AddSendStream(cricket::StreamParams::CreateLegacy(123)); | 978 AddSendStream(cricket::StreamParams::CreateLegacy(123)); |
| 980 | 979 |
| 981 // Verify the send extension id. | 980 // Verify the send extension id. |
| 982 ASSERT_EQ(1u, send_stream->GetConfig().rtp.extensions.size()); | 981 ASSERT_EQ(1u, send_stream->GetConfig().rtp.extensions.size()); |
| 983 EXPECT_EQ(id, send_stream->GetConfig().rtp.extensions[0].id); | 982 EXPECT_EQ(id, send_stream->GetConfig().rtp.extensions[0].id); |
| 984 EXPECT_EQ(webrtc_ext, send_stream->GetConfig().rtp.extensions[0].name); | 983 EXPECT_EQ(ext_uri, send_stream->GetConfig().rtp.extensions[0].uri); |
| 985 // Verify call with same set of extensions returns true. | 984 // Verify call with same set of extensions returns true. |
| 986 EXPECT_TRUE(channel_->SetSendParameters(parameters)); | 985 EXPECT_TRUE(channel_->SetSendParameters(parameters)); |
| 987 // Verify that SetSendRtpHeaderExtensions doesn't implicitly add them for | 986 // Verify that SetSendRtpHeaderExtensions doesn't implicitly add them for |
| 988 // receivers. | 987 // receivers. |
| 989 EXPECT_TRUE(AddRecvStream(cricket::StreamParams::CreateLegacy(123)) | 988 EXPECT_TRUE(AddRecvStream(cricket::StreamParams::CreateLegacy(123)) |
| 990 ->GetConfig() | 989 ->GetConfig() |
| 991 .rtp.extensions.empty()); | 990 .rtp.extensions.empty()); |
| 992 | 991 |
| 993 // Verify that existing RTP header extensions can be removed. | 992 // Verify that existing RTP header extensions can be removed. |
| 994 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_)); | 993 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_)); |
| 995 ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size()); | 994 ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size()); |
| 996 send_stream = fake_call_->GetVideoSendStreams()[0]; | 995 send_stream = fake_call_->GetVideoSendStreams()[0]; |
| 997 EXPECT_TRUE(send_stream->GetConfig().rtp.extensions.empty()); | 996 EXPECT_TRUE(send_stream->GetConfig().rtp.extensions.empty()); |
| 998 | 997 |
| 999 // Verify that adding receive RTP header extensions adds them for existing | 998 // Verify that adding receive RTP header extensions adds them for existing |
| 1000 // streams. | 999 // streams. |
| 1001 EXPECT_TRUE(channel_->SetSendParameters(parameters)); | 1000 EXPECT_TRUE(channel_->SetSendParameters(parameters)); |
| 1002 send_stream = fake_call_->GetVideoSendStreams()[0]; | 1001 send_stream = fake_call_->GetVideoSendStreams()[0]; |
| 1003 ASSERT_EQ(1u, send_stream->GetConfig().rtp.extensions.size()); | 1002 ASSERT_EQ(1u, send_stream->GetConfig().rtp.extensions.size()); |
| 1004 EXPECT_EQ(id, send_stream->GetConfig().rtp.extensions[0].id); | 1003 EXPECT_EQ(id, send_stream->GetConfig().rtp.extensions[0].id); |
| 1005 EXPECT_EQ(webrtc_ext, send_stream->GetConfig().rtp.extensions[0].name); | 1004 EXPECT_EQ(ext_uri, send_stream->GetConfig().rtp.extensions[0].uri); |
| 1006 } | 1005 } |
| 1007 | 1006 |
| 1008 void TestSetRecvRtpHeaderExtensions(const std::string& cricket_ext, | 1007 void TestSetRecvRtpHeaderExtensions(const std::string& ext_uri) { |
| 1009 const std::string& webrtc_ext) { | |
| 1010 // Enable extension. | 1008 // Enable extension. |
| 1011 const int id = 1; | 1009 const int id = 1; |
| 1012 cricket::VideoRecvParameters parameters = recv_parameters_; | 1010 cricket::VideoRecvParameters parameters = recv_parameters_; |
| 1013 parameters.extensions.push_back( | 1011 parameters.extensions.push_back(RtpExtension(ext_uri, id)); |
| 1014 cricket::RtpHeaderExtension(cricket_ext, id)); | |
| 1015 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); | 1012 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); |
| 1016 | 1013 |
| 1017 FakeVideoReceiveStream* recv_stream = | 1014 FakeVideoReceiveStream* recv_stream = |
| 1018 AddRecvStream(cricket::StreamParams::CreateLegacy(123)); | 1015 AddRecvStream(cricket::StreamParams::CreateLegacy(123)); |
| 1019 | 1016 |
| 1020 // Verify the recv extension id. | 1017 // Verify the recv extension id. |
| 1021 ASSERT_EQ(1u, recv_stream->GetConfig().rtp.extensions.size()); | 1018 ASSERT_EQ(1u, recv_stream->GetConfig().rtp.extensions.size()); |
| 1022 EXPECT_EQ(id, recv_stream->GetConfig().rtp.extensions[0].id); | 1019 EXPECT_EQ(id, recv_stream->GetConfig().rtp.extensions[0].id); |
| 1023 EXPECT_EQ(webrtc_ext, recv_stream->GetConfig().rtp.extensions[0].name); | 1020 EXPECT_EQ(ext_uri, recv_stream->GetConfig().rtp.extensions[0].uri); |
| 1024 // Verify call with same set of extensions returns true. | 1021 // Verify call with same set of extensions returns true. |
| 1025 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); | 1022 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); |
| 1026 | 1023 |
| 1027 // Verify that SetRecvRtpHeaderExtensions doesn't implicitly add them for | 1024 // Verify that SetRecvRtpHeaderExtensions doesn't implicitly add them for |
| 1028 // senders. | 1025 // senders. |
| 1029 EXPECT_TRUE(AddSendStream(cricket::StreamParams::CreateLegacy(123)) | 1026 EXPECT_TRUE(AddSendStream(cricket::StreamParams::CreateLegacy(123)) |
| 1030 ->GetConfig() | 1027 ->GetConfig() |
| 1031 .rtp.extensions.empty()); | 1028 .rtp.extensions.empty()); |
| 1032 | 1029 |
| 1033 // Verify that existing RTP header extensions can be removed. | 1030 // Verify that existing RTP header extensions can be removed. |
| 1034 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters_)); | 1031 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters_)); |
| 1035 ASSERT_EQ(1u, fake_call_->GetVideoReceiveStreams().size()); | 1032 ASSERT_EQ(1u, fake_call_->GetVideoReceiveStreams().size()); |
| 1036 recv_stream = fake_call_->GetVideoReceiveStreams()[0]; | 1033 recv_stream = fake_call_->GetVideoReceiveStreams()[0]; |
| 1037 EXPECT_TRUE(recv_stream->GetConfig().rtp.extensions.empty()); | 1034 EXPECT_TRUE(recv_stream->GetConfig().rtp.extensions.empty()); |
| 1038 | 1035 |
| 1039 // Verify that adding receive RTP header extensions adds them for existing | 1036 // Verify that adding receive RTP header extensions adds them for existing |
| 1040 // streams. | 1037 // streams. |
| 1041 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); | 1038 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); |
| 1042 recv_stream = fake_call_->GetVideoReceiveStreams()[0]; | 1039 recv_stream = fake_call_->GetVideoReceiveStreams()[0]; |
| 1043 ASSERT_EQ(1u, recv_stream->GetConfig().rtp.extensions.size()); | 1040 ASSERT_EQ(1u, recv_stream->GetConfig().rtp.extensions.size()); |
| 1044 EXPECT_EQ(id, recv_stream->GetConfig().rtp.extensions[0].id); | 1041 EXPECT_EQ(id, recv_stream->GetConfig().rtp.extensions[0].id); |
| 1045 EXPECT_EQ(webrtc_ext, recv_stream->GetConfig().rtp.extensions[0].name); | 1042 EXPECT_EQ(ext_uri, recv_stream->GetConfig().rtp.extensions[0].uri); |
| 1046 } | 1043 } |
| 1047 | 1044 |
| 1048 void TestExtensionFilter(const std::vector<std::string>& extensions, | 1045 void TestExtensionFilter(const std::vector<std::string>& extensions, |
| 1049 const std::string& expected_extension) { | 1046 const std::string& expected_extension) { |
| 1050 cricket::VideoSendParameters parameters = send_parameters_; | 1047 cricket::VideoSendParameters parameters = send_parameters_; |
| 1051 int expected_id = -1; | 1048 int expected_id = -1; |
| 1052 int id = 1; | 1049 int id = 1; |
| 1053 for (const std::string& extension : extensions) { | 1050 for (const std::string& extension : extensions) { |
| 1054 if (extension == expected_extension) | 1051 if (extension == expected_extension) |
| 1055 expected_id = id; | 1052 expected_id = id; |
| 1056 parameters.extensions.push_back( | 1053 parameters.extensions.push_back(RtpExtension(extension, id++)); |
| 1057 cricket::RtpHeaderExtension(extension, id++)); | |
| 1058 } | 1054 } |
| 1059 EXPECT_TRUE(channel_->SetSendParameters(parameters)); | 1055 EXPECT_TRUE(channel_->SetSendParameters(parameters)); |
| 1060 FakeVideoSendStream* send_stream = | 1056 FakeVideoSendStream* send_stream = |
| 1061 AddSendStream(cricket::StreamParams::CreateLegacy(123)); | 1057 AddSendStream(cricket::StreamParams::CreateLegacy(123)); |
| 1062 | 1058 |
| 1063 // Verify that only one of them has been set, and that it is the one with | 1059 // Verify that only one of them has been set, and that it is the one with |
| 1064 // highest priority (transport sequence number). | 1060 // highest priority (transport sequence number). |
| 1065 ASSERT_EQ(1u, send_stream->GetConfig().rtp.extensions.size()); | 1061 ASSERT_EQ(1u, send_stream->GetConfig().rtp.extensions.size()); |
| 1066 EXPECT_EQ(expected_id, send_stream->GetConfig().rtp.extensions[0].id); | 1062 EXPECT_EQ(expected_id, send_stream->GetConfig().rtp.extensions[0].id); |
| 1067 EXPECT_EQ(expected_extension, | 1063 EXPECT_EQ(expected_extension, |
| 1068 send_stream->GetConfig().rtp.extensions[0].name); | 1064 send_stream->GetConfig().rtp.extensions[0].uri); |
| 1069 } | 1065 } |
| 1070 | 1066 |
| 1071 void TestCpuAdaptation(bool enable_overuse, bool is_screenshare); | 1067 void TestCpuAdaptation(bool enable_overuse, bool is_screenshare); |
| 1072 void TestReceiverLocalSsrcConfiguration(bool receiver_first); | 1068 void TestReceiverLocalSsrcConfiguration(bool receiver_first); |
| 1073 void TestReceiveUnsignalledSsrcPacket(uint8_t payload_type, | 1069 void TestReceiveUnsignalledSsrcPacket(uint8_t payload_type, |
| 1074 bool expect_created_receive_stream); | 1070 bool expect_created_receive_stream); |
| 1075 | 1071 |
| 1076 FakeVideoSendStream* SetDenoisingOption( | 1072 FakeVideoSendStream* SetDenoisingOption( |
| 1077 uint32_t ssrc, | 1073 uint32_t ssrc, |
| 1078 cricket::FakeVideoCapturer* capturer, | 1074 cricket::FakeVideoCapturer* capturer, |
| (...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1212 AddSendStream(cricket::StreamParams::CreateLegacy(kSsrcs1[0])); | 1208 AddSendStream(cricket::StreamParams::CreateLegacy(kSsrcs1[0])); |
| 1213 ASSERT_TRUE(send_stream->GetConfig().rtp.extensions.empty()); | 1209 ASSERT_TRUE(send_stream->GetConfig().rtp.extensions.empty()); |
| 1214 | 1210 |
| 1215 FakeVideoReceiveStream* recv_stream = | 1211 FakeVideoReceiveStream* recv_stream = |
| 1216 AddRecvStream(cricket::StreamParams::CreateLegacy(kSsrcs1[0])); | 1212 AddRecvStream(cricket::StreamParams::CreateLegacy(kSsrcs1[0])); |
| 1217 ASSERT_TRUE(recv_stream->GetConfig().rtp.extensions.empty()); | 1213 ASSERT_TRUE(recv_stream->GetConfig().rtp.extensions.empty()); |
| 1218 } | 1214 } |
| 1219 | 1215 |
| 1220 // Test support for RTP timestamp offset header extension. | 1216 // Test support for RTP timestamp offset header extension. |
| 1221 TEST_F(WebRtcVideoChannel2Test, SendRtpTimestampOffsetHeaderExtensions) { | 1217 TEST_F(WebRtcVideoChannel2Test, SendRtpTimestampOffsetHeaderExtensions) { |
| 1222 TestSetSendRtpHeaderExtensions(kRtpTimestampOffsetHeaderExtension, | 1218 TestSetSendRtpHeaderExtensions(RtpExtension::kTimestampOffsetUri); |
| 1223 webrtc::RtpExtension::kTOffset); | |
| 1224 } | 1219 } |
| 1220 |
| 1225 TEST_F(WebRtcVideoChannel2Test, RecvRtpTimestampOffsetHeaderExtensions) { | 1221 TEST_F(WebRtcVideoChannel2Test, RecvRtpTimestampOffsetHeaderExtensions) { |
| 1226 TestSetRecvRtpHeaderExtensions(kRtpTimestampOffsetHeaderExtension, | 1222 TestSetRecvRtpHeaderExtensions(RtpExtension::kTimestampOffsetUri); |
| 1227 webrtc::RtpExtension::kTOffset); | |
| 1228 } | 1223 } |
| 1229 | 1224 |
| 1230 // Test support for absolute send time header extension. | 1225 // Test support for absolute send time header extension. |
| 1231 TEST_F(WebRtcVideoChannel2Test, SendAbsoluteSendTimeHeaderExtensions) { | 1226 TEST_F(WebRtcVideoChannel2Test, SendAbsoluteSendTimeHeaderExtensions) { |
| 1232 TestSetSendRtpHeaderExtensions(kRtpAbsoluteSenderTimeHeaderExtension, | 1227 TestSetSendRtpHeaderExtensions(RtpExtension::kAbsSendTimeUri); |
| 1233 webrtc::RtpExtension::kAbsSendTime); | |
| 1234 } | 1228 } |
| 1229 |
| 1235 TEST_F(WebRtcVideoChannel2Test, RecvAbsoluteSendTimeHeaderExtensions) { | 1230 TEST_F(WebRtcVideoChannel2Test, RecvAbsoluteSendTimeHeaderExtensions) { |
| 1236 TestSetRecvRtpHeaderExtensions(kRtpAbsoluteSenderTimeHeaderExtension, | 1231 TestSetRecvRtpHeaderExtensions(RtpExtension::kAbsSendTimeUri); |
| 1237 webrtc::RtpExtension::kAbsSendTime); | |
| 1238 } | 1232 } |
| 1239 | 1233 |
| 1240 TEST_F(WebRtcVideoChannel2Test, FiltersExtensionsPicksTransportSeqNum) { | 1234 TEST_F(WebRtcVideoChannel2Test, FiltersExtensionsPicksTransportSeqNum) { |
| 1241 // Enable three redundant extensions. | 1235 // Enable three redundant extensions. |
| 1242 std::vector<std::string> extensions; | 1236 std::vector<std::string> extensions; |
| 1243 extensions.push_back(kRtpAbsoluteSenderTimeHeaderExtension); | 1237 extensions.push_back(RtpExtension::kAbsSendTimeUri); |
| 1244 extensions.push_back(kRtpTimestampOffsetHeaderExtension); | 1238 extensions.push_back(RtpExtension::kTimestampOffsetUri); |
| 1245 extensions.push_back(kRtpTransportSequenceNumberHeaderExtension); | 1239 extensions.push_back(RtpExtension::kTransportSequenceNumberUri); |
| 1246 TestExtensionFilter(extensions, kRtpTransportSequenceNumberHeaderExtension); | 1240 TestExtensionFilter(extensions, RtpExtension::kTransportSequenceNumberUri); |
| 1247 } | 1241 } |
| 1248 | 1242 |
| 1249 TEST_F(WebRtcVideoChannel2Test, FiltersExtensionsPicksAbsSendTime) { | 1243 TEST_F(WebRtcVideoChannel2Test, FiltersExtensionsPicksAbsSendTime) { |
| 1250 // Enable two redundant extensions. | 1244 // Enable two redundant extensions. |
| 1251 std::vector<std::string> extensions; | 1245 std::vector<std::string> extensions; |
| 1252 extensions.push_back(kRtpAbsoluteSenderTimeHeaderExtension); | 1246 extensions.push_back(RtpExtension::kAbsSendTimeUri); |
| 1253 extensions.push_back(kRtpTimestampOffsetHeaderExtension); | 1247 extensions.push_back(RtpExtension::kTimestampOffsetUri); |
| 1254 TestExtensionFilter(extensions, kRtpAbsoluteSenderTimeHeaderExtension); | 1248 TestExtensionFilter(extensions, RtpExtension::kAbsSendTimeUri); |
| 1255 } | 1249 } |
| 1256 | 1250 |
| 1257 class WebRtcVideoChannel2WithSendSideBweTest : public WebRtcVideoChannel2Test { | 1251 class WebRtcVideoChannel2WithSendSideBweTest : public WebRtcVideoChannel2Test { |
| 1258 public: | 1252 public: |
| 1259 WebRtcVideoChannel2WithSendSideBweTest() | 1253 WebRtcVideoChannel2WithSendSideBweTest() |
| 1260 : WebRtcVideoChannel2Test("WebRTC-SendSideBwe/Enabled/") {} | 1254 : WebRtcVideoChannel2Test("WebRTC-SendSideBwe/Enabled/") {} |
| 1261 }; | 1255 }; |
| 1262 | 1256 |
| 1263 // Test support for transport sequence number header extension. | 1257 // Test support for transport sequence number header extension. |
| 1264 TEST_F(WebRtcVideoChannel2WithSendSideBweTest, | 1258 TEST_F(WebRtcVideoChannel2WithSendSideBweTest, |
| 1265 SendTransportSequenceNumberHeaderExtensions) { | 1259 SendTransportSequenceNumberHeaderExtensions) { |
| 1266 TestSetSendRtpHeaderExtensions( | 1260 TestSetSendRtpHeaderExtensions(RtpExtension::kTransportSequenceNumberUri); |
| 1267 kRtpTransportSequenceNumberHeaderExtension, | |
| 1268 webrtc::RtpExtension::kTransportSequenceNumber); | |
| 1269 } | 1261 } |
| 1270 TEST_F(WebRtcVideoChannel2WithSendSideBweTest, | 1262 TEST_F(WebRtcVideoChannel2WithSendSideBweTest, |
| 1271 RecvTransportSequenceNumberHeaderExtensions) { | 1263 RecvTransportSequenceNumberHeaderExtensions) { |
| 1272 TestSetRecvRtpHeaderExtensions( | 1264 TestSetRecvRtpHeaderExtensions(RtpExtension::kTransportSequenceNumberUri); |
| 1273 kRtpTransportSequenceNumberHeaderExtension, | |
| 1274 webrtc::RtpExtension::kTransportSequenceNumber); | |
| 1275 } | 1265 } |
| 1276 | 1266 |
| 1277 // Test support for video rotation header extension. | 1267 // Test support for video rotation header extension. |
| 1278 TEST_F(WebRtcVideoChannel2Test, SendVideoRotationHeaderExtensions) { | 1268 TEST_F(WebRtcVideoChannel2Test, SendVideoRotationHeaderExtensions) { |
| 1279 TestSetSendRtpHeaderExtensions(kRtpVideoRotationHeaderExtension, | 1269 TestSetSendRtpHeaderExtensions(RtpExtension::kVideoRotationUri); |
| 1280 webrtc::RtpExtension::kVideoRotation); | |
| 1281 } | 1270 } |
| 1282 TEST_F(WebRtcVideoChannel2Test, RecvVideoRotationHeaderExtensions) { | 1271 TEST_F(WebRtcVideoChannel2Test, RecvVideoRotationHeaderExtensions) { |
| 1283 TestSetRecvRtpHeaderExtensions(kRtpVideoRotationHeaderExtension, | 1272 TestSetRecvRtpHeaderExtensions(RtpExtension::kVideoRotationUri); |
| 1284 webrtc::RtpExtension::kVideoRotation); | |
| 1285 } | 1273 } |
| 1286 | 1274 |
| 1287 TEST_F(WebRtcVideoChannel2Test, IdenticalSendExtensionsDoesntRecreateStream) { | 1275 TEST_F(WebRtcVideoChannel2Test, IdenticalSendExtensionsDoesntRecreateStream) { |
| 1288 const int kAbsSendTimeId = 1; | 1276 const int kAbsSendTimeId = 1; |
| 1289 const int kVideoRotationId = 2; | 1277 const int kVideoRotationId = 2; |
| 1290 send_parameters_.extensions.push_back(cricket::RtpHeaderExtension( | 1278 send_parameters_.extensions.push_back( |
| 1291 kRtpAbsoluteSenderTimeHeaderExtension, kAbsSendTimeId)); | 1279 RtpExtension(RtpExtension::kAbsSendTimeUri, kAbsSendTimeId)); |
| 1292 send_parameters_.extensions.push_back(cricket::RtpHeaderExtension( | 1280 send_parameters_.extensions.push_back( |
| 1293 kRtpVideoRotationHeaderExtension, kVideoRotationId)); | 1281 RtpExtension(RtpExtension::kVideoRotationUri, kVideoRotationId)); |
| 1294 | 1282 |
| 1295 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_)); | 1283 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_)); |
| 1296 FakeVideoSendStream* send_stream = | 1284 FakeVideoSendStream* send_stream = |
| 1297 AddSendStream(cricket::StreamParams::CreateLegacy(123)); | 1285 AddSendStream(cricket::StreamParams::CreateLegacy(123)); |
| 1298 | 1286 |
| 1299 EXPECT_EQ(1, fake_call_->GetNumCreatedSendStreams()); | 1287 EXPECT_EQ(1, fake_call_->GetNumCreatedSendStreams()); |
| 1300 ASSERT_EQ(2u, send_stream->GetConfig().rtp.extensions.size()); | 1288 ASSERT_EQ(2u, send_stream->GetConfig().rtp.extensions.size()); |
| 1301 | 1289 |
| 1302 // Setting the same extensions (even if in different order) shouldn't | 1290 // Setting the same extensions (even if in different order) shouldn't |
| 1303 // reallocate the stream. | 1291 // reallocate the stream. |
| 1304 std::reverse(send_parameters_.extensions.begin(), | 1292 std::reverse(send_parameters_.extensions.begin(), |
| 1305 send_parameters_.extensions.end()); | 1293 send_parameters_.extensions.end()); |
| 1306 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_)); | 1294 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_)); |
| 1307 | 1295 |
| 1308 EXPECT_EQ(1, fake_call_->GetNumCreatedSendStreams()); | 1296 EXPECT_EQ(1, fake_call_->GetNumCreatedSendStreams()); |
| 1309 | 1297 |
| 1310 // Setting different extensions should recreate the stream. | 1298 // Setting different extensions should recreate the stream. |
| 1311 send_parameters_.extensions.resize(1); | 1299 send_parameters_.extensions.resize(1); |
| 1312 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_)); | 1300 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_)); |
| 1313 | 1301 |
| 1314 EXPECT_EQ(2, fake_call_->GetNumCreatedSendStreams()); | 1302 EXPECT_EQ(2, fake_call_->GetNumCreatedSendStreams()); |
| 1315 } | 1303 } |
| 1316 | 1304 |
| 1317 TEST_F(WebRtcVideoChannel2Test, IdenticalRecvExtensionsDoesntRecreateStream) { | 1305 TEST_F(WebRtcVideoChannel2Test, IdenticalRecvExtensionsDoesntRecreateStream) { |
| 1318 const int kTOffsetId = 1; | 1306 const int kTOffsetId = 1; |
| 1319 const int kAbsSendTimeId = 2; | 1307 const int kAbsSendTimeId = 2; |
| 1320 const int kVideoRotationId = 3; | 1308 const int kVideoRotationId = 3; |
| 1321 recv_parameters_.extensions.push_back(cricket::RtpHeaderExtension( | 1309 recv_parameters_.extensions.push_back( |
| 1322 kRtpAbsoluteSenderTimeHeaderExtension, kAbsSendTimeId)); | 1310 RtpExtension(RtpExtension::kAbsSendTimeUri, kAbsSendTimeId)); |
| 1323 recv_parameters_.extensions.push_back(cricket::RtpHeaderExtension( | 1311 recv_parameters_.extensions.push_back( |
| 1324 kRtpTimestampOffsetHeaderExtension, kTOffsetId)); | 1312 RtpExtension(RtpExtension::kTimestampOffsetUri, kTOffsetId)); |
| 1325 recv_parameters_.extensions.push_back(cricket::RtpHeaderExtension( | 1313 recv_parameters_.extensions.push_back( |
| 1326 kRtpVideoRotationHeaderExtension, kVideoRotationId)); | 1314 RtpExtension(RtpExtension::kVideoRotationUri, kVideoRotationId)); |
| 1327 | 1315 |
| 1328 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters_)); | 1316 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters_)); |
| 1329 FakeVideoReceiveStream* recv_stream = | 1317 FakeVideoReceiveStream* recv_stream = |
| 1330 AddRecvStream(cricket::StreamParams::CreateLegacy(123)); | 1318 AddRecvStream(cricket::StreamParams::CreateLegacy(123)); |
| 1331 | 1319 |
| 1332 EXPECT_EQ(1, fake_call_->GetNumCreatedReceiveStreams()); | 1320 EXPECT_EQ(1, fake_call_->GetNumCreatedReceiveStreams()); |
| 1333 ASSERT_EQ(3u, recv_stream->GetConfig().rtp.extensions.size()); | 1321 ASSERT_EQ(3u, recv_stream->GetConfig().rtp.extensions.size()); |
| 1334 | 1322 |
| 1335 // Setting the same extensions (even if in different order) shouldn't | 1323 // Setting the same extensions (even if in different order) shouldn't |
| 1336 // reallocate the stream. | 1324 // reallocate the stream. |
| 1337 std::reverse(recv_parameters_.extensions.begin(), | 1325 std::reverse(recv_parameters_.extensions.begin(), |
| 1338 recv_parameters_.extensions.end()); | 1326 recv_parameters_.extensions.end()); |
| 1339 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters_)); | 1327 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters_)); |
| 1340 | 1328 |
| 1341 EXPECT_EQ(1, fake_call_->GetNumCreatedReceiveStreams()); | 1329 EXPECT_EQ(1, fake_call_->GetNumCreatedReceiveStreams()); |
| 1342 | 1330 |
| 1343 // Setting different extensions should recreate the stream. | 1331 // Setting different extensions should recreate the stream. |
| 1344 recv_parameters_.extensions.resize(1); | 1332 recv_parameters_.extensions.resize(1); |
| 1345 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters_)); | 1333 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters_)); |
| 1346 | 1334 |
| 1347 EXPECT_EQ(2, fake_call_->GetNumCreatedReceiveStreams()); | 1335 EXPECT_EQ(2, fake_call_->GetNumCreatedReceiveStreams()); |
| 1348 } | 1336 } |
| 1349 | 1337 |
| 1350 TEST_F(WebRtcVideoChannel2Test, | 1338 TEST_F(WebRtcVideoChannel2Test, |
| 1351 SetSendRtpHeaderExtensionsExcludeUnsupportedExtensions) { | 1339 SetSendRtpHeaderExtensionsExcludeUnsupportedExtensions) { |
| 1352 const int kUnsupportedId = 1; | 1340 const int kUnsupportedId = 1; |
| 1353 const int kTOffsetId = 2; | 1341 const int kTOffsetId = 2; |
| 1354 | 1342 |
| 1355 send_parameters_.extensions.push_back( | 1343 send_parameters_.extensions.push_back( |
| 1356 cricket::RtpHeaderExtension(kUnsupportedExtensionName, kUnsupportedId)); | 1344 RtpExtension(kUnsupportedExtensionName, kUnsupportedId)); |
| 1357 send_parameters_.extensions.push_back( | 1345 send_parameters_.extensions.push_back( |
| 1358 cricket::RtpHeaderExtension(webrtc::RtpExtension::kTOffset, kTOffsetId)); | 1346 RtpExtension(RtpExtension::kTimestampOffsetUri, kTOffsetId)); |
| 1359 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_)); | 1347 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_)); |
| 1360 FakeVideoSendStream* send_stream = | 1348 FakeVideoSendStream* send_stream = |
| 1361 AddSendStream(cricket::StreamParams::CreateLegacy(123)); | 1349 AddSendStream(cricket::StreamParams::CreateLegacy(123)); |
| 1362 | 1350 |
| 1363 // Only timestamp offset extension is set to send stream, | 1351 // Only timestamp offset extension is set to send stream, |
| 1364 // unsupported rtp extension is ignored. | 1352 // unsupported rtp extension is ignored. |
| 1365 ASSERT_EQ(1u, send_stream->GetConfig().rtp.extensions.size()); | 1353 ASSERT_EQ(1u, send_stream->GetConfig().rtp.extensions.size()); |
| 1366 EXPECT_STREQ(webrtc::RtpExtension::kTOffset, | 1354 EXPECT_STREQ(RtpExtension::kTimestampOffsetUri, |
| 1367 send_stream->GetConfig().rtp.extensions[0].name.c_str()); | 1355 send_stream->GetConfig().rtp.extensions[0].uri.c_str()); |
| 1368 } | 1356 } |
| 1369 | 1357 |
| 1370 TEST_F(WebRtcVideoChannel2Test, | 1358 TEST_F(WebRtcVideoChannel2Test, |
| 1371 SetRecvRtpHeaderExtensionsExcludeUnsupportedExtensions) { | 1359 SetRecvRtpHeaderExtensionsExcludeUnsupportedExtensions) { |
| 1372 const int kUnsupportedId = 1; | 1360 const int kUnsupportedId = 1; |
| 1373 const int kTOffsetId = 2; | 1361 const int kTOffsetId = 2; |
| 1374 | 1362 |
| 1375 recv_parameters_.extensions.push_back( | 1363 recv_parameters_.extensions.push_back( |
| 1376 cricket::RtpHeaderExtension(kUnsupportedExtensionName, kUnsupportedId)); | 1364 RtpExtension(kUnsupportedExtensionName, kUnsupportedId)); |
| 1377 recv_parameters_.extensions.push_back( | 1365 recv_parameters_.extensions.push_back( |
| 1378 cricket::RtpHeaderExtension(webrtc::RtpExtension::kTOffset, kTOffsetId)); | 1366 RtpExtension(RtpExtension::kTimestampOffsetUri, kTOffsetId)); |
| 1379 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters_)); | 1367 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters_)); |
| 1380 FakeVideoReceiveStream* recv_stream = | 1368 FakeVideoReceiveStream* recv_stream = |
| 1381 AddRecvStream(cricket::StreamParams::CreateLegacy(123)); | 1369 AddRecvStream(cricket::StreamParams::CreateLegacy(123)); |
| 1382 | 1370 |
| 1383 // Only timestamp offset extension is set to receive stream, | 1371 // Only timestamp offset extension is set to receive stream, |
| 1384 // unsupported rtp extension is ignored. | 1372 // unsupported rtp extension is ignored. |
| 1385 ASSERT_EQ(1u, recv_stream->GetConfig().rtp.extensions.size()); | 1373 ASSERT_EQ(1u, recv_stream->GetConfig().rtp.extensions.size()); |
| 1386 EXPECT_STREQ(webrtc::RtpExtension::kTOffset, | 1374 EXPECT_STREQ(RtpExtension::kTimestampOffsetUri, |
| 1387 recv_stream->GetConfig().rtp.extensions[0].name.c_str()); | 1375 recv_stream->GetConfig().rtp.extensions[0].uri.c_str()); |
| 1388 } | 1376 } |
| 1389 | 1377 |
| 1390 TEST_F(WebRtcVideoChannel2Test, SetSendRtpHeaderExtensionsRejectsIncorrectIds) { | 1378 TEST_F(WebRtcVideoChannel2Test, SetSendRtpHeaderExtensionsRejectsIncorrectIds) { |
| 1391 const int kIncorrectIds[] = {-2, -1, 0, 15, 16}; | 1379 const int kIncorrectIds[] = {-2, -1, 0, 15, 16}; |
| 1392 for (size_t i = 0; i < arraysize(kIncorrectIds); ++i) { | 1380 for (size_t i = 0; i < arraysize(kIncorrectIds); ++i) { |
| 1393 send_parameters_.extensions.push_back(cricket::RtpHeaderExtension( | 1381 send_parameters_.extensions.push_back( |
| 1394 webrtc::RtpExtension::kTOffset, kIncorrectIds[i])); | 1382 RtpExtension(RtpExtension::kTimestampOffsetUri, kIncorrectIds[i])); |
| 1395 EXPECT_FALSE(channel_->SetSendParameters(send_parameters_)) | 1383 EXPECT_FALSE(channel_->SetSendParameters(send_parameters_)) |
| 1396 << "Bad extension id '" << kIncorrectIds[i] << "' accepted."; | 1384 << "Bad extension id '" << kIncorrectIds[i] << "' accepted."; |
| 1397 } | 1385 } |
| 1398 } | 1386 } |
| 1399 | 1387 |
| 1400 TEST_F(WebRtcVideoChannel2Test, SetRecvRtpHeaderExtensionsRejectsIncorrectIds) { | 1388 TEST_F(WebRtcVideoChannel2Test, SetRecvRtpHeaderExtensionsRejectsIncorrectIds) { |
| 1401 const int kIncorrectIds[] = {-2, -1, 0, 15, 16}; | 1389 const int kIncorrectIds[] = {-2, -1, 0, 15, 16}; |
| 1402 for (size_t i = 0; i < arraysize(kIncorrectIds); ++i) { | 1390 for (size_t i = 0; i < arraysize(kIncorrectIds); ++i) { |
| 1403 recv_parameters_.extensions.push_back(cricket::RtpHeaderExtension( | 1391 recv_parameters_.extensions.push_back( |
| 1404 webrtc::RtpExtension::kTOffset, kIncorrectIds[i])); | 1392 RtpExtension(RtpExtension::kTimestampOffsetUri, kIncorrectIds[i])); |
| 1405 EXPECT_FALSE(channel_->SetRecvParameters(recv_parameters_)) | 1393 EXPECT_FALSE(channel_->SetRecvParameters(recv_parameters_)) |
| 1406 << "Bad extension id '" << kIncorrectIds[i] << "' accepted."; | 1394 << "Bad extension id '" << kIncorrectIds[i] << "' accepted."; |
| 1407 } | 1395 } |
| 1408 } | 1396 } |
| 1409 | 1397 |
| 1410 TEST_F(WebRtcVideoChannel2Test, SetSendRtpHeaderExtensionsRejectsDuplicateIds) { | 1398 TEST_F(WebRtcVideoChannel2Test, SetSendRtpHeaderExtensionsRejectsDuplicateIds) { |
| 1411 const int id = 1; | 1399 const int id = 1; |
| 1412 send_parameters_.extensions.push_back( | 1400 send_parameters_.extensions.push_back( |
| 1413 cricket::RtpHeaderExtension(webrtc::RtpExtension::kTOffset, id)); | 1401 RtpExtension(RtpExtension::kTimestampOffsetUri, id)); |
| 1414 send_parameters_.extensions.push_back( | 1402 send_parameters_.extensions.push_back( |
| 1415 cricket::RtpHeaderExtension(kRtpAbsoluteSenderTimeHeaderExtension, id)); | 1403 RtpExtension(RtpExtension::kAbsSendTimeUri, id)); |
| 1416 EXPECT_FALSE(channel_->SetSendParameters(send_parameters_)); | 1404 EXPECT_FALSE(channel_->SetSendParameters(send_parameters_)); |
| 1417 | 1405 |
| 1418 // Duplicate entries are also not supported. | 1406 // Duplicate entries are also not supported. |
| 1419 send_parameters_.extensions.clear(); | 1407 send_parameters_.extensions.clear(); |
| 1420 send_parameters_.extensions.push_back( | 1408 send_parameters_.extensions.push_back( |
| 1421 cricket::RtpHeaderExtension(webrtc::RtpExtension::kTOffset, id)); | 1409 RtpExtension(RtpExtension::kTimestampOffsetUri, id)); |
| 1422 send_parameters_.extensions.push_back(send_parameters_.extensions.back()); | 1410 send_parameters_.extensions.push_back(send_parameters_.extensions.back()); |
| 1423 EXPECT_FALSE(channel_->SetSendParameters(send_parameters_)); | 1411 EXPECT_FALSE(channel_->SetSendParameters(send_parameters_)); |
| 1424 } | 1412 } |
| 1425 | 1413 |
| 1426 TEST_F(WebRtcVideoChannel2Test, SetRecvRtpHeaderExtensionsRejectsDuplicateIds) { | 1414 TEST_F(WebRtcVideoChannel2Test, SetRecvRtpHeaderExtensionsRejectsDuplicateIds) { |
| 1427 const int id = 1; | 1415 const int id = 1; |
| 1428 recv_parameters_.extensions.push_back( | 1416 recv_parameters_.extensions.push_back( |
| 1429 cricket::RtpHeaderExtension(webrtc::RtpExtension::kTOffset, id)); | 1417 RtpExtension(RtpExtension::kTimestampOffsetUri, id)); |
| 1430 recv_parameters_.extensions.push_back( | 1418 recv_parameters_.extensions.push_back( |
| 1431 cricket::RtpHeaderExtension(kRtpAbsoluteSenderTimeHeaderExtension, id)); | 1419 RtpExtension(RtpExtension::kAbsSendTimeUri, id)); |
| 1432 EXPECT_FALSE(channel_->SetRecvParameters(recv_parameters_)); | 1420 EXPECT_FALSE(channel_->SetRecvParameters(recv_parameters_)); |
| 1433 | 1421 |
| 1434 // Duplicate entries are also not supported. | 1422 // Duplicate entries are also not supported. |
| 1435 recv_parameters_.extensions.clear(); | 1423 recv_parameters_.extensions.clear(); |
| 1436 recv_parameters_.extensions.push_back( | 1424 recv_parameters_.extensions.push_back( |
| 1437 cricket::RtpHeaderExtension(webrtc::RtpExtension::kTOffset, id)); | 1425 RtpExtension(RtpExtension::kTimestampOffsetUri, id)); |
| 1438 recv_parameters_.extensions.push_back(recv_parameters_.extensions.back()); | 1426 recv_parameters_.extensions.push_back(recv_parameters_.extensions.back()); |
| 1439 EXPECT_FALSE(channel_->SetRecvParameters(recv_parameters_)); | 1427 EXPECT_FALSE(channel_->SetRecvParameters(recv_parameters_)); |
| 1440 } | 1428 } |
| 1441 | 1429 |
| 1442 TEST_F(WebRtcVideoChannel2Test, AddRecvStreamOnlyUsesOneReceiveStream) { | 1430 TEST_F(WebRtcVideoChannel2Test, AddRecvStreamOnlyUsesOneReceiveStream) { |
| 1443 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(1))); | 1431 EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(1))); |
| 1444 EXPECT_EQ(1u, fake_call_->GetVideoReceiveStreams().size()); | 1432 EXPECT_EQ(1u, fake_call_->GetVideoReceiveStreams().size()); |
| 1445 } | 1433 } |
| 1446 | 1434 |
| 1447 TEST_F(WebRtcVideoChannel2Test, RtcpIsCompoundByDefault) { | 1435 TEST_F(WebRtcVideoChannel2Test, RtcpIsCompoundByDefault) { |
| (...skipping 2262 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3710 } | 3698 } |
| 3711 | 3699 |
| 3712 // Test that we normalize send codec format size in simulcast. | 3700 // Test that we normalize send codec format size in simulcast. |
| 3713 TEST_F(WebRtcVideoChannel2SimulcastTest, SetSendCodecsWithOddSizeInSimulcast) { | 3701 TEST_F(WebRtcVideoChannel2SimulcastTest, SetSendCodecsWithOddSizeInSimulcast) { |
| 3714 cricket::VideoCodec codec(kVp8Codec270p); | 3702 cricket::VideoCodec codec(kVp8Codec270p); |
| 3715 codec.width += 1; | 3703 codec.width += 1; |
| 3716 codec.height += 1; | 3704 codec.height += 1; |
| 3717 VerifySimulcastSettings(codec, 2, 2); | 3705 VerifySimulcastSettings(codec, 2, 2); |
| 3718 } | 3706 } |
| 3719 } // namespace cricket | 3707 } // namespace cricket |
| OLD | NEW |