OLD | NEW |
1 /* | 1 /* |
2 * libjingle | 2 * libjingle |
3 * Copyright 2004 Google Inc. | 3 * Copyright 2004 Google Inc. |
4 * | 4 * |
5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
6 * modification, are permitted provided that the following conditions are met: | 6 * modification, are permitted provided that the following conditions are met: |
7 * | 7 * |
8 * 1. Redistributions of source code must retain the above copyright notice, | 8 * 1. Redistributions of source code must retain the above copyright notice, |
9 * this list of conditions and the following disclaimer. | 9 * this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright notice, | 10 * 2. Redistributions in binary form must reproduce the above copyright notice, |
(...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
283 FAIL() << "Video Rotation extension not in header-extension list."; | 283 FAIL() << "Video Rotation extension not in header-extension list."; |
284 } | 284 } |
285 | 285 |
286 TEST_F(WebRtcVideoEngine2Test, CVOSetHeaderExtensionBeforeCapturer) { | 286 TEST_F(WebRtcVideoEngine2Test, CVOSetHeaderExtensionBeforeCapturer) { |
287 // Allocate the capturer first to prevent early destruction before channel's | 287 // Allocate the capturer first to prevent early destruction before channel's |
288 // dtor is called. | 288 // dtor is called. |
289 cricket::FakeVideoCapturer capturer; | 289 cricket::FakeVideoCapturer capturer; |
290 | 290 |
291 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; | 291 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; |
292 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecVP8, "VP8"); | 292 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecVP8, "VP8"); |
293 std::vector<cricket::VideoCodec> codecs; | 293 cricket::VideoSendParameters parameters; |
294 codecs.push_back(kVp8Codec); | 294 parameters.codecs.push_back(kVp8Codec); |
295 | 295 |
296 rtc::scoped_ptr<VideoMediaChannel> channel( | 296 rtc::scoped_ptr<VideoMediaChannel> channel( |
297 SetUpForExternalEncoderFactory(&encoder_factory, codecs)); | 297 SetUpForExternalEncoderFactory(&encoder_factory, parameters.codecs)); |
298 EXPECT_TRUE(channel->AddSendStream(StreamParams::CreateLegacy(kSsrc))); | 298 EXPECT_TRUE(channel->AddSendStream(StreamParams::CreateLegacy(kSsrc))); |
299 | 299 |
300 // Add CVO extension. | 300 // Add CVO extension. |
301 const int id = 1; | 301 const int id = 1; |
302 std::vector<cricket::RtpHeaderExtension> extensions; | 302 parameters.extensions.push_back( |
303 extensions.push_back( | |
304 cricket::RtpHeaderExtension(kRtpVideoRotationHeaderExtension, id)); | 303 cricket::RtpHeaderExtension(kRtpVideoRotationHeaderExtension, id)); |
305 EXPECT_TRUE(channel->SetSendRtpHeaderExtensions(extensions)); | 304 EXPECT_TRUE(channel->SetSendParameters(parameters)); |
306 | 305 |
307 // Set capturer. | 306 // Set capturer. |
308 EXPECT_TRUE(channel->SetCapturer(kSsrc, &capturer)); | 307 EXPECT_TRUE(channel->SetCapturer(kSsrc, &capturer)); |
309 | 308 |
310 // Verify capturer has turned off applying rotation. | 309 // Verify capturer has turned off applying rotation. |
311 EXPECT_FALSE(capturer.GetApplyRotation()); | 310 EXPECT_FALSE(capturer.GetApplyRotation()); |
312 | 311 |
313 // Verify removing header extension turns on applying rotation. | 312 // Verify removing header extension turns on applying rotation. |
314 extensions.clear(); | 313 parameters.extensions.clear(); |
315 EXPECT_TRUE(channel->SetSendRtpHeaderExtensions(extensions)); | 314 EXPECT_TRUE(channel->SetSendParameters(parameters)); |
316 EXPECT_TRUE(capturer.GetApplyRotation()); | 315 EXPECT_TRUE(capturer.GetApplyRotation()); |
317 } | 316 } |
318 | 317 |
319 TEST_F(WebRtcVideoEngine2Test, CVOSetHeaderExtensionAfterCapturer) { | 318 TEST_F(WebRtcVideoEngine2Test, CVOSetHeaderExtensionAfterCapturer) { |
320 cricket::FakeVideoCapturer capturer; | 319 cricket::FakeVideoCapturer capturer; |
321 | 320 |
322 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; | 321 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; |
323 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecVP8, "VP8"); | 322 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecVP8, "VP8"); |
324 std::vector<cricket::VideoCodec> codecs; | 323 cricket::VideoSendParameters parameters; |
325 codecs.push_back(kVp8Codec); | 324 parameters.codecs.push_back(kVp8Codec); |
326 | 325 |
327 rtc::scoped_ptr<VideoMediaChannel> channel( | 326 rtc::scoped_ptr<VideoMediaChannel> channel( |
328 SetUpForExternalEncoderFactory(&encoder_factory, codecs)); | 327 SetUpForExternalEncoderFactory(&encoder_factory, parameters.codecs)); |
329 EXPECT_TRUE(channel->AddSendStream(StreamParams::CreateLegacy(kSsrc))); | 328 EXPECT_TRUE(channel->AddSendStream(StreamParams::CreateLegacy(kSsrc))); |
330 | 329 |
331 // Set capturer. | 330 // Set capturer. |
332 EXPECT_TRUE(channel->SetCapturer(kSsrc, &capturer)); | 331 EXPECT_TRUE(channel->SetCapturer(kSsrc, &capturer)); |
333 | 332 |
334 // Add CVO extension. | 333 // Add CVO extension. |
335 const int id = 1; | 334 const int id = 1; |
336 std::vector<cricket::RtpHeaderExtension> extensions; | 335 parameters.extensions.push_back( |
337 extensions.push_back( | |
338 cricket::RtpHeaderExtension(kRtpVideoRotationHeaderExtension, id)); | 336 cricket::RtpHeaderExtension(kRtpVideoRotationHeaderExtension, id)); |
339 EXPECT_TRUE(channel->SetSendRtpHeaderExtensions(extensions)); | 337 EXPECT_TRUE(channel->SetSendParameters(parameters)); |
340 | 338 |
341 // Verify capturer has turned off applying rotation. | 339 // Verify capturer has turned off applying rotation. |
342 EXPECT_FALSE(capturer.GetApplyRotation()); | 340 EXPECT_FALSE(capturer.GetApplyRotation()); |
343 | 341 |
344 // Verify removing header extension turns on applying rotation. | 342 // Verify removing header extension turns on applying rotation. |
345 extensions.clear(); | 343 parameters.extensions.clear(); |
346 EXPECT_TRUE(channel->SetSendRtpHeaderExtensions(extensions)); | 344 EXPECT_TRUE(channel->SetSendParameters(parameters)); |
347 EXPECT_TRUE(capturer.GetApplyRotation()); | 345 EXPECT_TRUE(capturer.GetApplyRotation()); |
348 } | 346 } |
349 | 347 |
350 TEST_F(WebRtcVideoEngine2Test, SetSendFailsBeforeSettingCodecs) { | 348 TEST_F(WebRtcVideoEngine2Test, SetSendFailsBeforeSettingCodecs) { |
351 engine_.Init(); | 349 engine_.Init(); |
352 rtc::scoped_ptr<VideoMediaChannel> channel( | 350 rtc::scoped_ptr<VideoMediaChannel> channel( |
353 engine_.CreateChannel(cricket::VideoOptions(), NULL)); | 351 engine_.CreateChannel(cricket::VideoOptions(), NULL)); |
354 | 352 |
355 EXPECT_TRUE(channel->AddSendStream(StreamParams::CreateLegacy(123))); | 353 EXPECT_TRUE(channel->AddSendStream(StreamParams::CreateLegacy(123))); |
356 | 354 |
357 EXPECT_FALSE(channel->SetSend(true)) | 355 EXPECT_FALSE(channel->SetSend(true)) |
358 << "Channel should not start without codecs."; | 356 << "Channel should not start without codecs."; |
359 EXPECT_TRUE(channel->SetSend(false)) | 357 EXPECT_TRUE(channel->SetSend(false)) |
360 << "Channel should be stoppable even without set codecs."; | 358 << "Channel should be stoppable even without set codecs."; |
361 } | 359 } |
362 | 360 |
363 TEST_F(WebRtcVideoEngine2Test, GetStatsWithoutSendCodecsSetDoesNotCrash) { | 361 TEST_F(WebRtcVideoEngine2Test, GetStatsWithoutSendCodecsSetDoesNotCrash) { |
364 engine_.Init(); | 362 engine_.Init(); |
365 rtc::scoped_ptr<VideoMediaChannel> channel( | 363 rtc::scoped_ptr<VideoMediaChannel> channel( |
366 engine_.CreateChannel(cricket::VideoOptions(), NULL)); | 364 engine_.CreateChannel(cricket::VideoOptions(), NULL)); |
367 EXPECT_TRUE(channel->AddSendStream(StreamParams::CreateLegacy(123))); | 365 EXPECT_TRUE(channel->AddSendStream(StreamParams::CreateLegacy(123))); |
368 VideoMediaInfo info; | 366 VideoMediaInfo info; |
369 channel->GetStats(&info); | 367 channel->GetStats(&info); |
370 } | 368 } |
371 | 369 |
372 TEST_F(WebRtcVideoEngine2Test, UseExternalFactoryForVp8WhenSupported) { | 370 TEST_F(WebRtcVideoEngine2Test, UseExternalFactoryForVp8WhenSupported) { |
373 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; | 371 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; |
374 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecVP8, "VP8"); | 372 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecVP8, "VP8"); |
375 std::vector<cricket::VideoCodec> codecs; | 373 cricket::VideoSendParameters parameters; |
376 codecs.push_back(kVp8Codec); | 374 parameters.codecs.push_back(kVp8Codec); |
377 | 375 |
378 rtc::scoped_ptr<VideoMediaChannel> channel( | 376 rtc::scoped_ptr<VideoMediaChannel> channel( |
379 SetUpForExternalEncoderFactory(&encoder_factory, codecs)); | 377 SetUpForExternalEncoderFactory(&encoder_factory, parameters.codecs)); |
380 | 378 |
381 EXPECT_TRUE( | 379 EXPECT_TRUE( |
382 channel->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc))); | 380 channel->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc))); |
383 ASSERT_EQ(1u, encoder_factory.encoders().size()); | 381 ASSERT_EQ(1u, encoder_factory.encoders().size()); |
384 EXPECT_TRUE(channel->SetSend(true)); | 382 EXPECT_TRUE(channel->SetSend(true)); |
385 | 383 |
386 cricket::FakeVideoCapturer capturer; | 384 cricket::FakeVideoCapturer capturer; |
387 EXPECT_TRUE(channel->SetCapturer(kSsrc, &capturer)); | 385 EXPECT_TRUE(channel->SetCapturer(kSsrc, &capturer)); |
388 EXPECT_EQ(cricket::CS_RUNNING, | 386 EXPECT_EQ(cricket::CS_RUNNING, |
389 capturer.Start(capturer.GetSupportedFormats()->front())); | 387 capturer.Start(capturer.GetSupportedFormats()->front())); |
390 EXPECT_TRUE(capturer.CaptureFrame()); | 388 EXPECT_TRUE(capturer.CaptureFrame()); |
391 EXPECT_TRUE_WAIT(encoder_factory.encoders()[0]->GetNumEncodedFrames() > 0, | 389 EXPECT_TRUE_WAIT(encoder_factory.encoders()[0]->GetNumEncodedFrames() > 0, |
392 kTimeout); | 390 kTimeout); |
393 | 391 |
394 // Sending one frame will have reallocated the encoder since input size | 392 // Sending one frame will have reallocated the encoder since input size |
395 // changes from a small default to the actual frame width/height. | 393 // changes from a small default to the actual frame width/height. |
396 int num_created_encoders = encoder_factory.GetNumCreatedEncoders(); | 394 int num_created_encoders = encoder_factory.GetNumCreatedEncoders(); |
397 EXPECT_EQ(num_created_encoders, 2); | 395 EXPECT_EQ(num_created_encoders, 2); |
398 | 396 |
399 // Setting codecs of the same type should not reallocate any encoders | 397 // Setting codecs of the same type should not reallocate any encoders |
400 // (expecting a no-op). | 398 // (expecting a no-op). |
401 EXPECT_TRUE(channel->SetSendCodecs(codecs)); | 399 EXPECT_TRUE(channel->SetSendParameters(parameters)); |
402 EXPECT_EQ(num_created_encoders, encoder_factory.GetNumCreatedEncoders()); | 400 EXPECT_EQ(num_created_encoders, encoder_factory.GetNumCreatedEncoders()); |
403 | 401 |
404 // Remove stream previously added to free the external encoder instance. | 402 // Remove stream previously added to free the external encoder instance. |
405 EXPECT_TRUE(channel->RemoveSendStream(kSsrc)); | 403 EXPECT_TRUE(channel->RemoveSendStream(kSsrc)); |
406 EXPECT_EQ(0u, encoder_factory.encoders().size()); | 404 EXPECT_EQ(0u, encoder_factory.encoders().size()); |
407 } | 405 } |
408 | 406 |
409 TEST_F(WebRtcVideoEngine2Test, CanConstructDecoderForVp9EncoderFactory) { | 407 TEST_F(WebRtcVideoEngine2Test, CanConstructDecoderForVp9EncoderFactory) { |
410 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; | 408 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; |
411 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecVP9, "VP9"); | 409 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecVP9, "VP9"); |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
484 } | 482 } |
485 | 483 |
486 VideoMediaChannel* WebRtcVideoEngine2Test::SetUpForExternalEncoderFactory( | 484 VideoMediaChannel* WebRtcVideoEngine2Test::SetUpForExternalEncoderFactory( |
487 cricket::WebRtcVideoEncoderFactory* encoder_factory, | 485 cricket::WebRtcVideoEncoderFactory* encoder_factory, |
488 const std::vector<VideoCodec>& codecs) { | 486 const std::vector<VideoCodec>& codecs) { |
489 engine_.SetExternalEncoderFactory(encoder_factory); | 487 engine_.SetExternalEncoderFactory(encoder_factory); |
490 engine_.Init(); | 488 engine_.Init(); |
491 | 489 |
492 VideoMediaChannel* channel = | 490 VideoMediaChannel* channel = |
493 engine_.CreateChannel(cricket::VideoOptions(), NULL); | 491 engine_.CreateChannel(cricket::VideoOptions(), NULL); |
494 EXPECT_TRUE(channel->SetSendCodecs(codecs)); | 492 cricket::VideoSendParameters parameters; |
495 | 493 parameters.codecs = codecs; |
| 494 EXPECT_TRUE(channel->SetSendParameters(parameters)); |
496 return channel; | 495 return channel; |
497 } | 496 } |
498 | 497 |
499 VideoMediaChannel* WebRtcVideoEngine2Test::SetUpForExternalDecoderFactory( | 498 VideoMediaChannel* WebRtcVideoEngine2Test::SetUpForExternalDecoderFactory( |
500 cricket::WebRtcVideoDecoderFactory* decoder_factory, | 499 cricket::WebRtcVideoDecoderFactory* decoder_factory, |
501 const std::vector<VideoCodec>& codecs) { | 500 const std::vector<VideoCodec>& codecs) { |
502 engine_.SetExternalDecoderFactory(decoder_factory); | 501 engine_.SetExternalDecoderFactory(decoder_factory); |
503 engine_.Init(); | 502 engine_.Init(); |
504 | 503 |
505 VideoMediaChannel* channel = | 504 VideoMediaChannel* channel = |
506 engine_.CreateChannel(cricket::VideoOptions(), NULL); | 505 engine_.CreateChannel(cricket::VideoOptions(), NULL); |
507 EXPECT_TRUE(channel->SetRecvCodecs(codecs)); | 506 cricket::VideoRecvParameters parameters; |
508 | 507 parameters.codecs = codecs; |
| 508 EXPECT_TRUE(channel->SetRecvParameters(parameters)); |
509 return channel; | 509 return channel; |
510 } | 510 } |
511 | 511 |
512 TEST_F(WebRtcVideoEngine2Test, UsesSimulcastAdapterForVp8Factories) { | 512 TEST_F(WebRtcVideoEngine2Test, UsesSimulcastAdapterForVp8Factories) { |
513 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; | 513 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; |
514 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecVP8, "VP8"); | 514 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecVP8, "VP8"); |
515 std::vector<cricket::VideoCodec> codecs; | 515 std::vector<cricket::VideoCodec> codecs; |
516 codecs.push_back(kVp8Codec); | 516 codecs.push_back(kVp8Codec); |
517 | 517 |
518 rtc::scoped_ptr<VideoMediaChannel> channel( | 518 rtc::scoped_ptr<VideoMediaChannel> channel( |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
555 std::vector<cricket::VideoCodec> codecs; | 555 std::vector<cricket::VideoCodec> codecs; |
556 codecs.push_back(kH264Codec); | 556 codecs.push_back(kH264Codec); |
557 | 557 |
558 rtc::scoped_ptr<VideoMediaChannel> channel( | 558 rtc::scoped_ptr<VideoMediaChannel> channel( |
559 SetUpForExternalEncoderFactory(&encoder_factory, codecs)); | 559 SetUpForExternalEncoderFactory(&encoder_factory, codecs)); |
560 | 560 |
561 EXPECT_TRUE( | 561 EXPECT_TRUE( |
562 channel->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc))); | 562 channel->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc))); |
563 ASSERT_EQ(1u, encoder_factory.encoders().size()); | 563 ASSERT_EQ(1u, encoder_factory.encoders().size()); |
564 | 564 |
565 codecs.clear(); | 565 cricket::VideoSendParameters parameters; |
566 codecs.push_back(kVp8Codec); | 566 parameters.codecs.push_back(kVp8Codec); |
567 EXPECT_TRUE(channel->SetSendCodecs(codecs)); | 567 EXPECT_TRUE(channel->SetSendParameters(parameters)); |
568 | |
569 ASSERT_EQ(0u, encoder_factory.encoders().size()); | 568 ASSERT_EQ(0u, encoder_factory.encoders().size()); |
570 } | 569 } |
571 | 570 |
572 TEST_F(WebRtcVideoEngine2Test, | 571 TEST_F(WebRtcVideoEngine2Test, |
573 DontUseExternalEncoderFactoryForUnsupportedCodecs) { | 572 DontUseExternalEncoderFactoryForUnsupportedCodecs) { |
574 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; | 573 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; |
575 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecH264, "H264"); | 574 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecH264, "H264"); |
576 std::vector<cricket::VideoCodec> codecs; | 575 std::vector<cricket::VideoCodec> codecs; |
577 codecs.push_back(kVp8Codec); | 576 codecs.push_back(kVp8Codec); |
578 | 577 |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
680 cricket::VideoCodec external_codec = codecs.back(); | 679 cricket::VideoCodec external_codec = codecs.back(); |
681 | 680 |
682 // The external codec will appear at last. | 681 // The external codec will appear at last. |
683 EXPECT_EQ("VP8", internal_codec.name); | 682 EXPECT_EQ("VP8", internal_codec.name); |
684 EXPECT_EQ("H264", external_codec.name); | 683 EXPECT_EQ("H264", external_codec.name); |
685 } | 684 } |
686 | 685 |
687 TEST_F(WebRtcVideoEngine2Test, RegisterExternalDecodersIfSupported) { | 686 TEST_F(WebRtcVideoEngine2Test, RegisterExternalDecodersIfSupported) { |
688 cricket::FakeWebRtcVideoDecoderFactory decoder_factory; | 687 cricket::FakeWebRtcVideoDecoderFactory decoder_factory; |
689 decoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecVP8); | 688 decoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecVP8); |
690 std::vector<cricket::VideoCodec> codecs; | 689 cricket::VideoRecvParameters parameters; |
691 codecs.push_back(kVp8Codec); | 690 parameters.codecs.push_back(kVp8Codec); |
692 | 691 |
693 rtc::scoped_ptr<VideoMediaChannel> channel( | 692 rtc::scoped_ptr<VideoMediaChannel> channel( |
694 SetUpForExternalDecoderFactory(&decoder_factory, codecs)); | 693 SetUpForExternalDecoderFactory(&decoder_factory, parameters.codecs)); |
695 | 694 |
696 EXPECT_TRUE( | 695 EXPECT_TRUE( |
697 channel->AddRecvStream(cricket::StreamParams::CreateLegacy(kSsrc))); | 696 channel->AddRecvStream(cricket::StreamParams::CreateLegacy(kSsrc))); |
698 ASSERT_EQ(1u, decoder_factory.decoders().size()); | 697 ASSERT_EQ(1u, decoder_factory.decoders().size()); |
699 | 698 |
700 // Setting codecs of the same type should not reallocate the decoder. | 699 // Setting codecs of the same type should not reallocate the decoder. |
701 EXPECT_TRUE(channel->SetRecvCodecs(codecs)); | 700 EXPECT_TRUE(channel->SetRecvParameters(parameters)); |
702 EXPECT_EQ(1, decoder_factory.GetNumCreatedDecoders()); | 701 EXPECT_EQ(1, decoder_factory.GetNumCreatedDecoders()); |
703 | 702 |
704 // Remove stream previously added to free the external decoder instance. | 703 // Remove stream previously added to free the external decoder instance. |
705 EXPECT_TRUE(channel->RemoveRecvStream(kSsrc)); | 704 EXPECT_TRUE(channel->RemoveRecvStream(kSsrc)); |
706 EXPECT_EQ(0u, decoder_factory.decoders().size()); | 705 EXPECT_EQ(0u, decoder_factory.decoders().size()); |
707 } | 706 } |
708 | 707 |
709 // Verifies that we can set up decoders that are not internally supported. | 708 // Verifies that we can set up decoders that are not internally supported. |
710 TEST_F(WebRtcVideoEngine2Test, RegisterExternalH264DecoderIfSupported) { | 709 TEST_F(WebRtcVideoEngine2Test, RegisterExternalH264DecoderIfSupported) { |
711 // TODO(pbos): Do not assume that encoder/decoder support is symmetric. We | 710 // TODO(pbos): Do not assume that encoder/decoder support is symmetric. We |
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
857 class WebRtcVideoChannel2Test : public WebRtcVideoEngine2Test, | 856 class WebRtcVideoChannel2Test : public WebRtcVideoEngine2Test, |
858 public WebRtcCallFactory { | 857 public WebRtcCallFactory { |
859 public: | 858 public: |
860 WebRtcVideoChannel2Test() : fake_call_(NULL), last_ssrc_(0) {} | 859 WebRtcVideoChannel2Test() : fake_call_(NULL), last_ssrc_(0) {} |
861 void SetUp() override { | 860 void SetUp() override { |
862 engine_.SetCallFactory(this); | 861 engine_.SetCallFactory(this); |
863 engine_.Init(); | 862 engine_.Init(); |
864 channel_.reset(engine_.CreateChannel(cricket::VideoOptions(), NULL)); | 863 channel_.reset(engine_.CreateChannel(cricket::VideoOptions(), NULL)); |
865 ASSERT_TRUE(fake_call_ != NULL) << "Call not created through factory."; | 864 ASSERT_TRUE(fake_call_ != NULL) << "Call not created through factory."; |
866 last_ssrc_ = 123; | 865 last_ssrc_ = 123; |
867 ASSERT_TRUE(channel_->SetSendCodecs(engine_.codecs())); | 866 cricket::VideoSendParameters parameters; |
| 867 parameters.codecs = engine_.codecs(); |
| 868 ASSERT_TRUE(channel_->SetSendParameters(parameters)); |
868 } | 869 } |
869 | 870 |
870 protected: | 871 protected: |
871 virtual std::vector<cricket::VideoCodec> GetCodecs() { | 872 virtual std::vector<cricket::VideoCodec> GetCodecs() { |
872 return engine_.codecs(); | 873 return engine_.codecs(); |
873 } | 874 } |
874 | 875 |
875 webrtc::Call* CreateCall(const webrtc::Call::Config& config) override { | 876 webrtc::Call* CreateCall(const webrtc::Call::Config& config) override { |
876 DCHECK(fake_call_ == NULL); | 877 DCHECK(fake_call_ == NULL); |
877 fake_call_ = new FakeCall(config); | 878 fake_call_ = new FakeCall(config); |
(...skipping 29 matching lines...) Expand all Loading... |
907 EXPECT_EQ(num_streams + 1, streams.size()); | 908 EXPECT_EQ(num_streams + 1, streams.size()); |
908 return streams[streams.size() - 1]; | 909 return streams[streams.size() - 1]; |
909 } | 910 } |
910 | 911 |
911 void SetSendCodecsShouldWorkForBitrates(const char* min_bitrate_kbps, | 912 void SetSendCodecsShouldWorkForBitrates(const char* min_bitrate_kbps, |
912 int expected_min_bitrate_bps, | 913 int expected_min_bitrate_bps, |
913 const char* start_bitrate_kbps, | 914 const char* start_bitrate_kbps, |
914 int expected_start_bitrate_bps, | 915 int expected_start_bitrate_bps, |
915 const char* max_bitrate_kbps, | 916 const char* max_bitrate_kbps, |
916 int expected_max_bitrate_bps) { | 917 int expected_max_bitrate_bps) { |
917 std::vector<VideoCodec> codecs; | 918 VideoSendParameters parameters; |
918 codecs.push_back(kVp8Codec); | 919 parameters.codecs.push_back(kVp8Codec); |
919 codecs[0].params[kCodecParamMinBitrate] = min_bitrate_kbps; | 920 parameters.codecs[0].params[kCodecParamMinBitrate] = min_bitrate_kbps; |
920 codecs[0].params[kCodecParamStartBitrate] = start_bitrate_kbps; | 921 parameters.codecs[0].params[kCodecParamStartBitrate] = start_bitrate_kbps; |
921 codecs[0].params[kCodecParamMaxBitrate] = max_bitrate_kbps; | 922 parameters.codecs[0].params[kCodecParamMaxBitrate] = max_bitrate_kbps; |
922 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); | 923 EXPECT_TRUE(channel_->SetSendParameters(parameters)); |
923 | 924 |
924 EXPECT_EQ(expected_min_bitrate_bps, | 925 EXPECT_EQ(expected_min_bitrate_bps, |
925 fake_call_->GetConfig().bitrate_config.min_bitrate_bps); | 926 fake_call_->GetConfig().bitrate_config.min_bitrate_bps); |
926 EXPECT_EQ(expected_start_bitrate_bps, | 927 EXPECT_EQ(expected_start_bitrate_bps, |
927 fake_call_->GetConfig().bitrate_config.start_bitrate_bps); | 928 fake_call_->GetConfig().bitrate_config.start_bitrate_bps); |
928 EXPECT_EQ(expected_max_bitrate_bps, | 929 EXPECT_EQ(expected_max_bitrate_bps, |
929 fake_call_->GetConfig().bitrate_config.max_bitrate_bps); | 930 fake_call_->GetConfig().bitrate_config.max_bitrate_bps); |
930 } | 931 } |
931 | 932 |
932 void TestSetSendRtpHeaderExtensions(const std::string& cricket_ext, | 933 void TestSetSendRtpHeaderExtensions(const std::string& cricket_ext, |
933 const std::string& webrtc_ext) { | 934 const std::string& webrtc_ext) { |
934 FakeCall* call = fake_call_; | 935 FakeCall* call = fake_call_; |
935 // Enable extension. | 936 // Enable extension. |
936 const int id = 1; | 937 const int id = 1; |
937 std::vector<cricket::RtpHeaderExtension> extensions; | 938 cricket::VideoSendParameters parameters; |
938 extensions.push_back(cricket::RtpHeaderExtension(cricket_ext, id)); | 939 parameters.extensions.push_back( |
939 EXPECT_TRUE(channel_->SetSendRtpHeaderExtensions(extensions)); | 940 cricket::RtpHeaderExtension(cricket_ext, id)); |
940 | 941 EXPECT_TRUE(channel_->SetSendParameters(parameters)); |
941 FakeVideoSendStream* send_stream = | 942 FakeVideoSendStream* send_stream = |
942 AddSendStream(cricket::StreamParams::CreateLegacy(123)); | 943 AddSendStream(cricket::StreamParams::CreateLegacy(123)); |
943 | 944 |
944 // Verify the send extension id. | 945 // Verify the send extension id. |
945 ASSERT_EQ(1u, send_stream->GetConfig().rtp.extensions.size()); | 946 ASSERT_EQ(1u, send_stream->GetConfig().rtp.extensions.size()); |
946 EXPECT_EQ(id, send_stream->GetConfig().rtp.extensions[0].id); | 947 EXPECT_EQ(id, send_stream->GetConfig().rtp.extensions[0].id); |
947 EXPECT_EQ(webrtc_ext, send_stream->GetConfig().rtp.extensions[0].name); | 948 EXPECT_EQ(webrtc_ext, send_stream->GetConfig().rtp.extensions[0].name); |
948 // Verify call with same set of extensions returns true. | 949 // Verify call with same set of extensions returns true. |
949 EXPECT_TRUE(channel_->SetSendRtpHeaderExtensions(extensions)); | 950 EXPECT_TRUE(channel_->SetSendParameters(parameters)); |
950 // Verify that SetSendRtpHeaderExtensions doesn't implicitly add them for | 951 // Verify that SetSendRtpHeaderExtensions doesn't implicitly add them for |
951 // receivers. | 952 // receivers. |
952 EXPECT_TRUE(AddRecvStream(cricket::StreamParams::CreateLegacy(123)) | 953 EXPECT_TRUE(AddRecvStream(cricket::StreamParams::CreateLegacy(123)) |
953 ->GetConfig() | 954 ->GetConfig() |
954 .rtp.extensions.empty()); | 955 .rtp.extensions.empty()); |
955 | 956 |
956 // Verify that existing RTP header extensions can be removed. | 957 // Verify that existing RTP header extensions can be removed. |
957 std::vector<cricket::RtpHeaderExtension> empty_extensions; | 958 EXPECT_TRUE(channel_->SetSendParameters(cricket::VideoSendParameters())); |
958 EXPECT_TRUE(channel_->SetSendRtpHeaderExtensions(empty_extensions)); | |
959 ASSERT_EQ(1u, call->GetVideoSendStreams().size()); | 959 ASSERT_EQ(1u, call->GetVideoSendStreams().size()); |
960 send_stream = call->GetVideoSendStreams()[0]; | 960 send_stream = call->GetVideoSendStreams()[0]; |
961 EXPECT_TRUE(send_stream->GetConfig().rtp.extensions.empty()); | 961 EXPECT_TRUE(send_stream->GetConfig().rtp.extensions.empty()); |
962 | 962 |
963 // Verify that adding receive RTP header extensions adds them for existing | 963 // Verify that adding receive RTP header extensions adds them for existing |
964 // streams. | 964 // streams. |
965 EXPECT_TRUE(channel_->SetSendRtpHeaderExtensions(extensions)); | 965 EXPECT_TRUE(channel_->SetSendParameters(parameters)); |
966 send_stream = call->GetVideoSendStreams()[0]; | 966 send_stream = call->GetVideoSendStreams()[0]; |
967 ASSERT_EQ(1u, send_stream->GetConfig().rtp.extensions.size()); | 967 ASSERT_EQ(1u, send_stream->GetConfig().rtp.extensions.size()); |
968 EXPECT_EQ(id, send_stream->GetConfig().rtp.extensions[0].id); | 968 EXPECT_EQ(id, send_stream->GetConfig().rtp.extensions[0].id); |
969 EXPECT_EQ(webrtc_ext, send_stream->GetConfig().rtp.extensions[0].name); | 969 EXPECT_EQ(webrtc_ext, send_stream->GetConfig().rtp.extensions[0].name); |
970 } | 970 } |
971 | 971 |
972 void TestSetRecvRtpHeaderExtensions(const std::string& cricket_ext, | 972 void TestSetRecvRtpHeaderExtensions(const std::string& cricket_ext, |
973 const std::string& webrtc_ext) { | 973 const std::string& webrtc_ext) { |
974 FakeCall* call = fake_call_; | 974 FakeCall* call = fake_call_; |
975 // Enable extension. | 975 // Enable extension. |
976 const int id = 1; | 976 const int id = 1; |
977 std::vector<cricket::RtpHeaderExtension> extensions; | 977 cricket::VideoRecvParameters parameters; |
978 extensions.push_back(cricket::RtpHeaderExtension(cricket_ext, id)); | 978 parameters.extensions.push_back( |
979 EXPECT_TRUE(channel_->SetRecvRtpHeaderExtensions(extensions)); | 979 cricket::RtpHeaderExtension(cricket_ext, id)); |
| 980 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); |
980 | 981 |
981 FakeVideoReceiveStream* recv_stream = | 982 FakeVideoReceiveStream* recv_stream = |
982 AddRecvStream(cricket::StreamParams::CreateLegacy(123)); | 983 AddRecvStream(cricket::StreamParams::CreateLegacy(123)); |
983 | 984 |
984 // Verify the recv extension id. | 985 // Verify the recv extension id. |
985 ASSERT_EQ(1u, recv_stream->GetConfig().rtp.extensions.size()); | 986 ASSERT_EQ(1u, recv_stream->GetConfig().rtp.extensions.size()); |
986 EXPECT_EQ(id, recv_stream->GetConfig().rtp.extensions[0].id); | 987 EXPECT_EQ(id, recv_stream->GetConfig().rtp.extensions[0].id); |
987 EXPECT_EQ(webrtc_ext, recv_stream->GetConfig().rtp.extensions[0].name); | 988 EXPECT_EQ(webrtc_ext, recv_stream->GetConfig().rtp.extensions[0].name); |
988 // Verify call with same set of extensions returns true. | 989 // Verify call with same set of extensions returns true. |
989 EXPECT_TRUE(channel_->SetRecvRtpHeaderExtensions(extensions)); | 990 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); |
990 | 991 |
991 // Verify that SetRecvRtpHeaderExtensions doesn't implicitly add them for | 992 // Verify that SetRecvRtpHeaderExtensions doesn't implicitly add them for |
992 // senders. | 993 // senders. |
993 EXPECT_TRUE(AddSendStream(cricket::StreamParams::CreateLegacy(123)) | 994 EXPECT_TRUE(AddSendStream(cricket::StreamParams::CreateLegacy(123)) |
994 ->GetConfig() | 995 ->GetConfig() |
995 .rtp.extensions.empty()); | 996 .rtp.extensions.empty()); |
996 | 997 |
997 // Verify that existing RTP header extensions can be removed. | 998 // Verify that existing RTP header extensions can be removed. |
998 std::vector<cricket::RtpHeaderExtension> empty_extensions; | 999 EXPECT_TRUE(channel_->SetRecvParameters(cricket::VideoRecvParameters())); |
999 EXPECT_TRUE(channel_->SetRecvRtpHeaderExtensions(empty_extensions)); | |
1000 ASSERT_EQ(1u, call->GetVideoReceiveStreams().size()); | 1000 ASSERT_EQ(1u, call->GetVideoReceiveStreams().size()); |
1001 recv_stream = call->GetVideoReceiveStreams()[0]; | 1001 recv_stream = call->GetVideoReceiveStreams()[0]; |
1002 EXPECT_TRUE(recv_stream->GetConfig().rtp.extensions.empty()); | 1002 EXPECT_TRUE(recv_stream->GetConfig().rtp.extensions.empty()); |
1003 | 1003 |
1004 // Verify that adding receive RTP header extensions adds them for existing | 1004 // Verify that adding receive RTP header extensions adds them for existing |
1005 // streams. | 1005 // streams. |
1006 EXPECT_TRUE(channel_->SetRecvRtpHeaderExtensions(extensions)); | 1006 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); |
1007 recv_stream = call->GetVideoReceiveStreams()[0]; | 1007 recv_stream = call->GetVideoReceiveStreams()[0]; |
1008 ASSERT_EQ(1u, recv_stream->GetConfig().rtp.extensions.size()); | 1008 ASSERT_EQ(1u, recv_stream->GetConfig().rtp.extensions.size()); |
1009 EXPECT_EQ(id, recv_stream->GetConfig().rtp.extensions[0].id); | 1009 EXPECT_EQ(id, recv_stream->GetConfig().rtp.extensions[0].id); |
1010 EXPECT_EQ(webrtc_ext, recv_stream->GetConfig().rtp.extensions[0].name); | 1010 EXPECT_EQ(webrtc_ext, recv_stream->GetConfig().rtp.extensions[0].name); |
1011 } | 1011 } |
1012 | 1012 |
1013 void TestCpuAdaptation(bool enable_overuse, bool is_screenshare); | 1013 void TestCpuAdaptation(bool enable_overuse, bool is_screenshare); |
1014 void TestReceiverLocalSsrcConfiguration(bool receiver_first); | 1014 void TestReceiverLocalSsrcConfiguration(bool receiver_first); |
1015 void TestReceiveUnsignalledSsrcPacket(uint8_t payload_type, | 1015 void TestReceiveUnsignalledSsrcPacket(uint8_t payload_type, |
1016 bool expect_created_receive_stream); | 1016 bool expect_created_receive_stream); |
1017 | 1017 |
1018 FakeVideoSendStream* SetDenoisingOption(bool enabled) { | 1018 FakeVideoSendStream* SetDenoisingOption( |
1019 VideoOptions options; | 1019 const cricket::VideoSendParameters& parameters, bool enabled) { |
1020 options.video_noise_reduction.Set(enabled); | 1020 cricket::VideoSendParameters params = parameters; |
1021 channel_->SetOptions(options); | 1021 params.options.video_noise_reduction.Set(enabled); |
| 1022 channel_->SetSendParameters(params); |
1022 return fake_call_->GetVideoSendStreams().back(); | 1023 return fake_call_->GetVideoSendStreams().back(); |
1023 } | 1024 } |
1024 | 1025 |
1025 FakeVideoSendStream* SetUpSimulcast(bool enabled, bool with_rtx) { | 1026 FakeVideoSendStream* SetUpSimulcast(bool enabled, bool with_rtx) { |
1026 const int kRtxSsrcOffset = 0xDEADBEEF; | 1027 const int kRtxSsrcOffset = 0xDEADBEEF; |
1027 last_ssrc_ += 3; | 1028 last_ssrc_ += 3; |
1028 std::vector<uint32_t> ssrcs; | 1029 std::vector<uint32_t> ssrcs; |
1029 std::vector<uint32_t> rtx_ssrcs; | 1030 std::vector<uint32_t> rtx_ssrcs; |
1030 uint32_t num_streams = enabled ? 3 : 1; | 1031 uint32_t num_streams = enabled ? 3 : 1; |
1031 for (uint32_t i = 0; i < num_streams; ++i) { | 1032 for (uint32_t i = 0; i < num_streams; ++i) { |
(...skipping 23 matching lines...) Expand all Loading... |
1055 sp.sync_label = kSyncLabel; | 1056 sp.sync_label = kSyncLabel; |
1056 EXPECT_TRUE(channel_->AddRecvStream(sp)); | 1057 EXPECT_TRUE(channel_->AddRecvStream(sp)); |
1057 | 1058 |
1058 EXPECT_EQ(1, fake_call_->GetVideoReceiveStreams().size()); | 1059 EXPECT_EQ(1, fake_call_->GetVideoReceiveStreams().size()); |
1059 EXPECT_EQ(kSyncLabel, | 1060 EXPECT_EQ(kSyncLabel, |
1060 fake_call_->GetVideoReceiveStreams()[0]->GetConfig().sync_group) | 1061 fake_call_->GetVideoReceiveStreams()[0]->GetConfig().sync_group) |
1061 << "SyncGroup should be set based on sync_label"; | 1062 << "SyncGroup should be set based on sync_label"; |
1062 } | 1063 } |
1063 | 1064 |
1064 TEST_F(WebRtcVideoChannel2Test, RecvStreamWithSimAndRtx) { | 1065 TEST_F(WebRtcVideoChannel2Test, RecvStreamWithSimAndRtx) { |
1065 EXPECT_TRUE(channel_->SetSendCodecs(engine_.codecs())); | 1066 cricket::VideoSendParameters parameters; |
| 1067 parameters.codecs = engine_.codecs(); |
| 1068 EXPECT_TRUE(channel_->SetSendParameters(parameters)); |
1066 EXPECT_TRUE(channel_->SetSend(true)); | 1069 EXPECT_TRUE(channel_->SetSend(true)); |
1067 cricket::VideoOptions options; | 1070 parameters.options.conference_mode.Set(true); |
1068 options.conference_mode.Set(true); | 1071 EXPECT_TRUE(channel_->SetSendParameters(parameters)); |
1069 EXPECT_TRUE(channel_->SetOptions(options)); | |
1070 | 1072 |
1071 // Send side. | 1073 // Send side. |
1072 const std::vector<uint32> ssrcs = MAKE_VECTOR(kSsrcs1); | 1074 const std::vector<uint32> ssrcs = MAKE_VECTOR(kSsrcs1); |
1073 const std::vector<uint32> rtx_ssrcs = MAKE_VECTOR(kRtxSsrcs1); | 1075 const std::vector<uint32> rtx_ssrcs = MAKE_VECTOR(kRtxSsrcs1); |
1074 FakeVideoSendStream* send_stream = AddSendStream( | 1076 FakeVideoSendStream* send_stream = AddSendStream( |
1075 cricket::CreateSimWithRtxStreamParams("cname", ssrcs, rtx_ssrcs)); | 1077 cricket::CreateSimWithRtxStreamParams("cname", ssrcs, rtx_ssrcs)); |
1076 | 1078 |
1077 ASSERT_EQ(rtx_ssrcs.size(), send_stream->GetConfig().rtp.rtx.ssrcs.size()); | 1079 ASSERT_EQ(rtx_ssrcs.size(), send_stream->GetConfig().rtp.rtx.ssrcs.size()); |
1078 for (size_t i = 0; i < rtx_ssrcs.size(); ++i) | 1080 for (size_t i = 0; i < rtx_ssrcs.size(); ++i) |
1079 EXPECT_EQ(rtx_ssrcs[i], send_stream->GetConfig().rtp.rtx.ssrcs[i]); | 1081 EXPECT_EQ(rtx_ssrcs[i], send_stream->GetConfig().rtp.rtx.ssrcs[i]); |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1146 } | 1148 } |
1147 TEST_F(WebRtcVideoChannel2Test, RecvVideoRotationHeaderExtensions) { | 1149 TEST_F(WebRtcVideoChannel2Test, RecvVideoRotationHeaderExtensions) { |
1148 TestSetRecvRtpHeaderExtensions(kRtpVideoRotationHeaderExtension, | 1150 TestSetRecvRtpHeaderExtensions(kRtpVideoRotationHeaderExtension, |
1149 webrtc::RtpExtension::kVideoRotation); | 1151 webrtc::RtpExtension::kVideoRotation); |
1150 } | 1152 } |
1151 | 1153 |
1152 TEST_F(WebRtcVideoChannel2Test, IdenticalSendExtensionsDoesntRecreateStream) { | 1154 TEST_F(WebRtcVideoChannel2Test, IdenticalSendExtensionsDoesntRecreateStream) { |
1153 const int kTOffsetId = 1; | 1155 const int kTOffsetId = 1; |
1154 const int kAbsSendTimeId = 2; | 1156 const int kAbsSendTimeId = 2; |
1155 const int kVideoRotationId = 3; | 1157 const int kVideoRotationId = 3; |
1156 std::vector<cricket::RtpHeaderExtension> extensions; | 1158 cricket::VideoSendParameters parameters; |
1157 extensions.push_back(cricket::RtpHeaderExtension( | 1159 parameters.extensions.push_back(cricket::RtpHeaderExtension( |
1158 kRtpAbsoluteSenderTimeHeaderExtension, kAbsSendTimeId)); | 1160 kRtpAbsoluteSenderTimeHeaderExtension, kAbsSendTimeId)); |
1159 extensions.push_back(cricket::RtpHeaderExtension( | 1161 parameters.extensions.push_back(cricket::RtpHeaderExtension( |
1160 kRtpTimestampOffsetHeaderExtension, kTOffsetId)); | 1162 kRtpTimestampOffsetHeaderExtension, kTOffsetId)); |
1161 extensions.push_back(cricket::RtpHeaderExtension( | 1163 parameters.extensions.push_back(cricket::RtpHeaderExtension( |
1162 kRtpVideoRotationHeaderExtension, kVideoRotationId)); | 1164 kRtpVideoRotationHeaderExtension, kVideoRotationId)); |
1163 | 1165 |
1164 EXPECT_TRUE(channel_->SetSendRtpHeaderExtensions(extensions)); | 1166 EXPECT_TRUE(channel_->SetSendParameters(parameters)); |
1165 FakeVideoSendStream* send_stream = | 1167 FakeVideoSendStream* send_stream = |
1166 AddSendStream(cricket::StreamParams::CreateLegacy(123)); | 1168 AddSendStream(cricket::StreamParams::CreateLegacy(123)); |
1167 | 1169 |
1168 EXPECT_EQ(1, fake_call_->GetNumCreatedSendStreams()); | 1170 EXPECT_EQ(1, fake_call_->GetNumCreatedSendStreams()); |
1169 ASSERT_EQ(3u, send_stream->GetConfig().rtp.extensions.size()); | 1171 ASSERT_EQ(3u, send_stream->GetConfig().rtp.extensions.size()); |
1170 | 1172 |
1171 // Setting the same extensions (even if in different order) shouldn't | 1173 // Setting the same extensions (even if in different order) shouldn't |
1172 // reallocate the stream. | 1174 // reallocate the stream. |
1173 std::reverse(extensions.begin(), extensions.end()); | 1175 std::reverse(parameters.extensions.begin(), parameters.extensions.end()); |
1174 EXPECT_TRUE(channel_->SetSendRtpHeaderExtensions(extensions)); | 1176 EXPECT_TRUE(channel_->SetSendParameters(parameters)); |
1175 | 1177 |
1176 EXPECT_EQ(1, fake_call_->GetNumCreatedSendStreams()); | 1178 EXPECT_EQ(1, fake_call_->GetNumCreatedSendStreams()); |
1177 | 1179 |
1178 // Setting different extensions should recreate the stream. | 1180 // Setting different extensions should recreate the stream. |
1179 extensions.resize(1); | 1181 parameters.extensions.resize(1); |
1180 EXPECT_TRUE(channel_->SetSendRtpHeaderExtensions(extensions)); | 1182 EXPECT_TRUE(channel_->SetSendParameters(parameters)); |
1181 | 1183 |
1182 EXPECT_EQ(2, fake_call_->GetNumCreatedSendStreams()); | 1184 EXPECT_EQ(2, fake_call_->GetNumCreatedSendStreams()); |
1183 } | 1185 } |
1184 | 1186 |
1185 TEST_F(WebRtcVideoChannel2Test, IdenticalRecvExtensionsDoesntRecreateStream) { | 1187 TEST_F(WebRtcVideoChannel2Test, IdenticalRecvExtensionsDoesntRecreateStream) { |
1186 const int kTOffsetId = 1; | 1188 const int kTOffsetId = 1; |
1187 const int kAbsSendTimeId = 2; | 1189 const int kAbsSendTimeId = 2; |
1188 const int kVideoRotationId = 3; | 1190 const int kVideoRotationId = 3; |
1189 std::vector<cricket::RtpHeaderExtension> extensions; | 1191 cricket::VideoRecvParameters parameters; |
1190 extensions.push_back(cricket::RtpHeaderExtension( | 1192 parameters.extensions.push_back(cricket::RtpHeaderExtension( |
1191 kRtpAbsoluteSenderTimeHeaderExtension, kAbsSendTimeId)); | 1193 kRtpAbsoluteSenderTimeHeaderExtension, kAbsSendTimeId)); |
1192 extensions.push_back(cricket::RtpHeaderExtension( | 1194 parameters.extensions.push_back(cricket::RtpHeaderExtension( |
1193 kRtpTimestampOffsetHeaderExtension, kTOffsetId)); | 1195 kRtpTimestampOffsetHeaderExtension, kTOffsetId)); |
1194 extensions.push_back(cricket::RtpHeaderExtension( | 1196 parameters.extensions.push_back(cricket::RtpHeaderExtension( |
1195 kRtpVideoRotationHeaderExtension, kVideoRotationId)); | 1197 kRtpVideoRotationHeaderExtension, kVideoRotationId)); |
1196 | 1198 |
1197 EXPECT_TRUE(channel_->SetRecvRtpHeaderExtensions(extensions)); | 1199 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); |
1198 FakeVideoReceiveStream* recv_stream = | 1200 FakeVideoReceiveStream* recv_stream = |
1199 AddRecvStream(cricket::StreamParams::CreateLegacy(123)); | 1201 AddRecvStream(cricket::StreamParams::CreateLegacy(123)); |
1200 | 1202 |
1201 EXPECT_EQ(1, fake_call_->GetNumCreatedReceiveStreams()); | 1203 EXPECT_EQ(1, fake_call_->GetNumCreatedReceiveStreams()); |
1202 ASSERT_EQ(3u, recv_stream->GetConfig().rtp.extensions.size()); | 1204 ASSERT_EQ(3u, recv_stream->GetConfig().rtp.extensions.size()); |
1203 | 1205 |
1204 // Setting the same extensions (even if in different order) shouldn't | 1206 // Setting the same extensions (even if in different order) shouldn't |
1205 // reallocate the stream. | 1207 // reallocate the stream. |
1206 std::reverse(extensions.begin(), extensions.end()); | 1208 std::reverse(parameters.extensions.begin(), parameters.extensions.end()); |
1207 EXPECT_TRUE(channel_->SetRecvRtpHeaderExtensions(extensions)); | 1209 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); |
1208 | 1210 |
1209 EXPECT_EQ(1, fake_call_->GetNumCreatedReceiveStreams()); | 1211 EXPECT_EQ(1, fake_call_->GetNumCreatedReceiveStreams()); |
1210 | 1212 |
1211 // Setting different extensions should recreate the stream. | 1213 // Setting different extensions should recreate the stream. |
1212 extensions.resize(1); | 1214 parameters.extensions.resize(1); |
1213 EXPECT_TRUE(channel_->SetRecvRtpHeaderExtensions(extensions)); | 1215 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); |
1214 | 1216 |
1215 EXPECT_EQ(2, fake_call_->GetNumCreatedReceiveStreams()); | 1217 EXPECT_EQ(2, fake_call_->GetNumCreatedReceiveStreams()); |
1216 } | 1218 } |
1217 | 1219 |
1218 TEST_F(WebRtcVideoChannel2Test, | 1220 TEST_F(WebRtcVideoChannel2Test, |
1219 SetSendRtpHeaderExtensionsExcludeUnsupportedExtensions) { | 1221 SetSendRtpHeaderExtensionsExcludeUnsupportedExtensions) { |
1220 const int kUnsupportedId = 1; | 1222 const int kUnsupportedId = 1; |
1221 const int kTOffsetId = 2; | 1223 const int kTOffsetId = 2; |
1222 | 1224 |
1223 std::vector<cricket::RtpHeaderExtension> extensions; | 1225 cricket::VideoSendParameters parameters; |
1224 extensions.push_back( | 1226 parameters.extensions.push_back( |
1225 cricket::RtpHeaderExtension(kUnsupportedExtensionName, kUnsupportedId)); | 1227 cricket::RtpHeaderExtension(kUnsupportedExtensionName, kUnsupportedId)); |
1226 extensions.push_back( | 1228 parameters.extensions.push_back( |
1227 cricket::RtpHeaderExtension(webrtc::RtpExtension::kTOffset, kTOffsetId)); | 1229 cricket::RtpHeaderExtension(webrtc::RtpExtension::kTOffset, kTOffsetId)); |
1228 EXPECT_TRUE(channel_->SetSendRtpHeaderExtensions(extensions)); | 1230 EXPECT_TRUE(channel_->SetSendParameters(parameters)); |
1229 FakeVideoSendStream* send_stream = | 1231 FakeVideoSendStream* send_stream = |
1230 AddSendStream(cricket::StreamParams::CreateLegacy(123)); | 1232 AddSendStream(cricket::StreamParams::CreateLegacy(123)); |
1231 | 1233 |
1232 // Only timestamp offset extension is set to send stream, | 1234 // Only timestamp offset extension is set to send stream, |
1233 // unsupported rtp extension is ignored. | 1235 // unsupported rtp extension is ignored. |
1234 ASSERT_EQ(1u, send_stream->GetConfig().rtp.extensions.size()); | 1236 ASSERT_EQ(1u, send_stream->GetConfig().rtp.extensions.size()); |
1235 EXPECT_STREQ(webrtc::RtpExtension::kTOffset, | 1237 EXPECT_STREQ(webrtc::RtpExtension::kTOffset, |
1236 send_stream->GetConfig().rtp.extensions[0].name.c_str()); | 1238 send_stream->GetConfig().rtp.extensions[0].name.c_str()); |
1237 } | 1239 } |
1238 | 1240 |
1239 TEST_F(WebRtcVideoChannel2Test, | 1241 TEST_F(WebRtcVideoChannel2Test, |
1240 SetRecvRtpHeaderExtensionsExcludeUnsupportedExtensions) { | 1242 SetRecvRtpHeaderExtensionsExcludeUnsupportedExtensions) { |
1241 const int kUnsupportedId = 1; | 1243 const int kUnsupportedId = 1; |
1242 const int kTOffsetId = 2; | 1244 const int kTOffsetId = 2; |
1243 | 1245 |
1244 std::vector<cricket::RtpHeaderExtension> extensions; | 1246 cricket::VideoRecvParameters parameters; |
1245 extensions.push_back( | 1247 parameters.extensions.push_back( |
1246 cricket::RtpHeaderExtension(kUnsupportedExtensionName, kUnsupportedId)); | 1248 cricket::RtpHeaderExtension(kUnsupportedExtensionName, kUnsupportedId)); |
1247 extensions.push_back( | 1249 parameters.extensions.push_back( |
1248 cricket::RtpHeaderExtension(webrtc::RtpExtension::kTOffset, kTOffsetId)); | 1250 cricket::RtpHeaderExtension(webrtc::RtpExtension::kTOffset, kTOffsetId)); |
1249 EXPECT_TRUE(channel_->SetRecvRtpHeaderExtensions(extensions)); | 1251 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); |
1250 FakeVideoReceiveStream* recv_stream = | 1252 FakeVideoReceiveStream* recv_stream = |
1251 AddRecvStream(cricket::StreamParams::CreateLegacy(123)); | 1253 AddRecvStream(cricket::StreamParams::CreateLegacy(123)); |
1252 | 1254 |
1253 // Only timestamp offset extension is set to receive stream, | 1255 // Only timestamp offset extension is set to receive stream, |
1254 // unsupported rtp extension is ignored. | 1256 // unsupported rtp extension is ignored. |
1255 ASSERT_EQ(1u, recv_stream->GetConfig().rtp.extensions.size()); | 1257 ASSERT_EQ(1u, recv_stream->GetConfig().rtp.extensions.size()); |
1256 EXPECT_STREQ(webrtc::RtpExtension::kTOffset, | 1258 EXPECT_STREQ(webrtc::RtpExtension::kTOffset, |
1257 recv_stream->GetConfig().rtp.extensions[0].name.c_str()); | 1259 recv_stream->GetConfig().rtp.extensions[0].name.c_str()); |
1258 } | 1260 } |
1259 | 1261 |
1260 TEST_F(WebRtcVideoChannel2Test, SetSendRtpHeaderExtensionsRejectsIncorrectIds) { | 1262 TEST_F(WebRtcVideoChannel2Test, SetSendRtpHeaderExtensionsRejectsIncorrectIds) { |
1261 const int kIncorrectIds[] = {-2, -1, 0, 15, 16}; | 1263 const int kIncorrectIds[] = {-2, -1, 0, 15, 16}; |
1262 for (size_t i = 0; i < arraysize(kIncorrectIds); ++i) { | 1264 for (size_t i = 0; i < arraysize(kIncorrectIds); ++i) { |
1263 std::vector<cricket::RtpHeaderExtension> extensions; | 1265 cricket::VideoSendParameters parameters; |
1264 extensions.push_back(cricket::RtpHeaderExtension( | 1266 parameters.extensions.push_back(cricket::RtpHeaderExtension( |
1265 webrtc::RtpExtension::kTOffset, kIncorrectIds[i])); | 1267 webrtc::RtpExtension::kTOffset, kIncorrectIds[i])); |
1266 EXPECT_FALSE(channel_->SetSendRtpHeaderExtensions(extensions)) | 1268 EXPECT_FALSE(channel_->SetSendParameters(parameters)) |
1267 << "Bad extension id '" << kIncorrectIds[i] << "' accepted."; | 1269 << "Bad extension id '" << kIncorrectIds[i] << "' accepted."; |
1268 } | 1270 } |
1269 } | 1271 } |
1270 | 1272 |
1271 TEST_F(WebRtcVideoChannel2Test, SetRecvRtpHeaderExtensionsRejectsIncorrectIds) { | 1273 TEST_F(WebRtcVideoChannel2Test, SetRecvRtpHeaderExtensionsRejectsIncorrectIds) { |
1272 const int kIncorrectIds[] = {-2, -1, 0, 15, 16}; | 1274 const int kIncorrectIds[] = {-2, -1, 0, 15, 16}; |
1273 for (size_t i = 0; i < arraysize(kIncorrectIds); ++i) { | 1275 for (size_t i = 0; i < arraysize(kIncorrectIds); ++i) { |
1274 std::vector<cricket::RtpHeaderExtension> extensions; | 1276 cricket::VideoRecvParameters parameters; |
1275 extensions.push_back(cricket::RtpHeaderExtension( | 1277 parameters.extensions.push_back(cricket::RtpHeaderExtension( |
1276 webrtc::RtpExtension::kTOffset, kIncorrectIds[i])); | 1278 webrtc::RtpExtension::kTOffset, kIncorrectIds[i])); |
1277 EXPECT_FALSE(channel_->SetRecvRtpHeaderExtensions(extensions)) | 1279 EXPECT_FALSE(channel_->SetRecvParameters(parameters)) |
1278 << "Bad extension id '" << kIncorrectIds[i] << "' accepted."; | 1280 << "Bad extension id '" << kIncorrectIds[i] << "' accepted."; |
1279 } | 1281 } |
1280 } | 1282 } |
1281 | 1283 |
1282 TEST_F(WebRtcVideoChannel2Test, SetSendRtpHeaderExtensionsRejectsDuplicateIds) { | 1284 TEST_F(WebRtcVideoChannel2Test, SetSendRtpHeaderExtensionsRejectsDuplicateIds) { |
1283 const int id = 1; | 1285 const int id = 1; |
1284 std::vector<cricket::RtpHeaderExtension> extensions; | 1286 cricket::VideoSendParameters parameters; |
1285 extensions.push_back( | 1287 parameters.extensions.push_back( |
1286 cricket::RtpHeaderExtension(webrtc::RtpExtension::kTOffset, id)); | 1288 cricket::RtpHeaderExtension(webrtc::RtpExtension::kTOffset, id)); |
1287 extensions.push_back( | 1289 parameters.extensions.push_back( |
1288 cricket::RtpHeaderExtension(kRtpAbsoluteSenderTimeHeaderExtension, id)); | 1290 cricket::RtpHeaderExtension(kRtpAbsoluteSenderTimeHeaderExtension, id)); |
1289 EXPECT_FALSE(channel_->SetSendRtpHeaderExtensions(extensions)); | 1291 EXPECT_FALSE(channel_->SetSendParameters(parameters)); |
1290 | 1292 |
1291 // Duplicate entries are also not supported. | 1293 // Duplicate entries are also not supported. |
1292 extensions.clear(); | 1294 parameters.extensions.clear(); |
1293 extensions.push_back( | 1295 parameters.extensions.push_back( |
1294 cricket::RtpHeaderExtension(webrtc::RtpExtension::kTOffset, id)); | 1296 cricket::RtpHeaderExtension(webrtc::RtpExtension::kTOffset, id)); |
1295 extensions.push_back(extensions.back()); | 1297 parameters.extensions.push_back(parameters.extensions.back()); |
1296 EXPECT_FALSE(channel_->SetSendRtpHeaderExtensions(extensions)); | 1298 EXPECT_FALSE(channel_->SetSendParameters(parameters)); |
1297 } | 1299 } |
1298 | 1300 |
1299 TEST_F(WebRtcVideoChannel2Test, SetRecvRtpHeaderExtensionsRejectsDuplicateIds) { | 1301 TEST_F(WebRtcVideoChannel2Test, SetRecvRtpHeaderExtensionsRejectsDuplicateIds) { |
1300 const int id = 1; | 1302 const int id = 1; |
1301 std::vector<cricket::RtpHeaderExtension> extensions; | 1303 cricket::VideoRecvParameters parameters; |
1302 extensions.push_back( | 1304 parameters.extensions.push_back( |
1303 cricket::RtpHeaderExtension(webrtc::RtpExtension::kTOffset, id)); | 1305 cricket::RtpHeaderExtension(webrtc::RtpExtension::kTOffset, id)); |
1304 extensions.push_back( | 1306 parameters.extensions.push_back( |
1305 cricket::RtpHeaderExtension(kRtpAbsoluteSenderTimeHeaderExtension, id)); | 1307 cricket::RtpHeaderExtension(kRtpAbsoluteSenderTimeHeaderExtension, id)); |
1306 EXPECT_FALSE(channel_->SetRecvRtpHeaderExtensions(extensions)); | 1308 EXPECT_FALSE(channel_->SetRecvParameters(parameters)); |
1307 | 1309 |
1308 // Duplicate entries are also not supported. | 1310 // Duplicate entries are also not supported. |
1309 extensions.clear(); | 1311 parameters.extensions.clear(); |
1310 extensions.push_back( | 1312 parameters.extensions.push_back( |
1311 cricket::RtpHeaderExtension(webrtc::RtpExtension::kTOffset, id)); | 1313 cricket::RtpHeaderExtension(webrtc::RtpExtension::kTOffset, id)); |
1312 extensions.push_back(extensions.back()); | 1314 parameters.extensions.push_back(parameters.extensions.back()); |
1313 EXPECT_FALSE(channel_->SetRecvRtpHeaderExtensions(extensions)); | 1315 EXPECT_FALSE(channel_->SetRecvParameters(parameters)); |
1314 } | 1316 } |
1315 | 1317 |
1316 TEST_F(WebRtcVideoChannel2Test, DISABLED_LeakyBucketTest) { | 1318 TEST_F(WebRtcVideoChannel2Test, DISABLED_LeakyBucketTest) { |
1317 FAIL() << "Not implemented."; // TODO(pbos): Implement. | 1319 FAIL() << "Not implemented."; // TODO(pbos): Implement. |
1318 } | 1320 } |
1319 | 1321 |
1320 TEST_F(WebRtcVideoChannel2Test, DISABLED_BufferedModeLatency) { | 1322 TEST_F(WebRtcVideoChannel2Test, DISABLED_BufferedModeLatency) { |
1321 FAIL() << "Not implemented."; // TODO(pbos): Implement. | 1323 FAIL() << "Not implemented."; // TODO(pbos): Implement. |
1322 } | 1324 } |
1323 | 1325 |
(...skipping 14 matching lines...) Expand all Loading... |
1338 TEST_F(WebRtcVideoChannel2Test, RembIsEnabledByDefault) { | 1340 TEST_F(WebRtcVideoChannel2Test, RembIsEnabledByDefault) { |
1339 FakeVideoReceiveStream* stream = AddRecvStream(); | 1341 FakeVideoReceiveStream* stream = AddRecvStream(); |
1340 EXPECT_TRUE(stream->GetConfig().rtp.remb); | 1342 EXPECT_TRUE(stream->GetConfig().rtp.remb); |
1341 } | 1343 } |
1342 | 1344 |
1343 TEST_F(WebRtcVideoChannel2Test, RembCanBeEnabledAndDisabled) { | 1345 TEST_F(WebRtcVideoChannel2Test, RembCanBeEnabledAndDisabled) { |
1344 FakeVideoReceiveStream* stream = AddRecvStream(); | 1346 FakeVideoReceiveStream* stream = AddRecvStream(); |
1345 EXPECT_TRUE(stream->GetConfig().rtp.remb); | 1347 EXPECT_TRUE(stream->GetConfig().rtp.remb); |
1346 | 1348 |
1347 // Verify that REMB is turned off when send(!) codecs without REMB are set. | 1349 // Verify that REMB is turned off when send(!) codecs without REMB are set. |
1348 std::vector<VideoCodec> codecs; | 1350 cricket::VideoSendParameters parameters; |
1349 codecs.push_back(kVp8Codec); | 1351 parameters.codecs.push_back(kVp8Codec); |
1350 EXPECT_TRUE(codecs[0].feedback_params.params().empty()); | 1352 EXPECT_TRUE(parameters.codecs[0].feedback_params.params().empty()); |
1351 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); | 1353 EXPECT_TRUE(channel_->SetSendParameters(parameters)); |
1352 stream = fake_call_->GetVideoReceiveStreams()[0]; | 1354 stream = fake_call_->GetVideoReceiveStreams()[0]; |
1353 EXPECT_FALSE(stream->GetConfig().rtp.remb); | 1355 EXPECT_FALSE(stream->GetConfig().rtp.remb); |
1354 | 1356 |
1355 // Verify that REMB is turned on when setting default codecs since the | 1357 // Verify that REMB is turned on when setting default codecs since the |
1356 // default codecs have REMB enabled. | 1358 // default codecs have REMB enabled. |
1357 EXPECT_TRUE(channel_->SetSendCodecs(engine_.codecs())); | 1359 parameters.codecs = engine_.codecs(); |
| 1360 EXPECT_TRUE(channel_->SetSendParameters(parameters)); |
1358 stream = fake_call_->GetVideoReceiveStreams()[0]; | 1361 stream = fake_call_->GetVideoReceiveStreams()[0]; |
1359 EXPECT_TRUE(stream->GetConfig().rtp.remb); | 1362 EXPECT_TRUE(stream->GetConfig().rtp.remb); |
1360 } | 1363 } |
1361 | 1364 |
1362 TEST_F(WebRtcVideoChannel2Test, NackIsEnabledByDefault) { | 1365 TEST_F(WebRtcVideoChannel2Test, NackIsEnabledByDefault) { |
1363 VerifyCodecHasDefaultFeedbackParams(default_codec_); | 1366 VerifyCodecHasDefaultFeedbackParams(default_codec_); |
1364 | 1367 |
1365 EXPECT_TRUE(channel_->SetSendCodecs(engine_.codecs())); | 1368 cricket::VideoSendParameters parameters; |
| 1369 parameters.codecs = engine_.codecs(); |
| 1370 EXPECT_TRUE(channel_->SetSendParameters(parameters)); |
1366 EXPECT_TRUE(channel_->SetSend(true)); | 1371 EXPECT_TRUE(channel_->SetSend(true)); |
1367 | 1372 |
1368 // Send side. | 1373 // Send side. |
1369 FakeVideoSendStream* send_stream = | 1374 FakeVideoSendStream* send_stream = |
1370 AddSendStream(cricket::StreamParams::CreateLegacy(1)); | 1375 AddSendStream(cricket::StreamParams::CreateLegacy(1)); |
1371 EXPECT_GT(send_stream->GetConfig().rtp.nack.rtp_history_ms, 0); | 1376 EXPECT_GT(send_stream->GetConfig().rtp.nack.rtp_history_ms, 0); |
1372 | 1377 |
1373 // Receiver side. | 1378 // Receiver side. |
1374 FakeVideoReceiveStream* recv_stream = | 1379 FakeVideoReceiveStream* recv_stream = |
1375 AddRecvStream(cricket::StreamParams::CreateLegacy(1)); | 1380 AddRecvStream(cricket::StreamParams::CreateLegacy(1)); |
1376 EXPECT_GT(recv_stream->GetConfig().rtp.nack.rtp_history_ms, 0); | 1381 EXPECT_GT(recv_stream->GetConfig().rtp.nack.rtp_history_ms, 0); |
1377 | 1382 |
1378 // Nack history size should match between sender and receiver. | 1383 // Nack history size should match between sender and receiver. |
1379 EXPECT_EQ(send_stream->GetConfig().rtp.nack.rtp_history_ms, | 1384 EXPECT_EQ(send_stream->GetConfig().rtp.nack.rtp_history_ms, |
1380 recv_stream->GetConfig().rtp.nack.rtp_history_ms); | 1385 recv_stream->GetConfig().rtp.nack.rtp_history_ms); |
1381 } | 1386 } |
1382 | 1387 |
1383 TEST_F(WebRtcVideoChannel2Test, NackCanBeEnabledAndDisabled) { | 1388 TEST_F(WebRtcVideoChannel2Test, NackCanBeEnabledAndDisabled) { |
1384 FakeVideoSendStream* send_stream = AddSendStream(); | 1389 FakeVideoSendStream* send_stream = AddSendStream(); |
1385 FakeVideoReceiveStream* recv_stream = AddRecvStream(); | 1390 FakeVideoReceiveStream* recv_stream = AddRecvStream(); |
1386 | 1391 |
1387 EXPECT_GT(recv_stream->GetConfig().rtp.nack.rtp_history_ms, 0); | 1392 EXPECT_GT(recv_stream->GetConfig().rtp.nack.rtp_history_ms, 0); |
1388 EXPECT_GT(send_stream->GetConfig().rtp.nack.rtp_history_ms, 0); | 1393 EXPECT_GT(send_stream->GetConfig().rtp.nack.rtp_history_ms, 0); |
1389 | 1394 |
1390 // Verify that NACK is turned off when send(!) codecs without NACK are set. | 1395 // Verify that NACK is turned off when send(!) codecs without NACK are set. |
1391 std::vector<VideoCodec> codecs; | 1396 cricket::VideoSendParameters parameters; |
1392 codecs.push_back(kVp8Codec); | 1397 parameters.codecs.push_back(kVp8Codec); |
1393 EXPECT_TRUE(codecs[0].feedback_params.params().empty()); | 1398 EXPECT_TRUE(parameters.codecs[0].feedback_params.params().empty()); |
1394 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); | 1399 EXPECT_TRUE(channel_->SetSendParameters(parameters)); |
1395 recv_stream = fake_call_->GetVideoReceiveStreams()[0]; | 1400 recv_stream = fake_call_->GetVideoReceiveStreams()[0]; |
1396 EXPECT_EQ(0, recv_stream->GetConfig().rtp.nack.rtp_history_ms); | 1401 EXPECT_EQ(0, recv_stream->GetConfig().rtp.nack.rtp_history_ms); |
1397 send_stream = fake_call_->GetVideoSendStreams()[0]; | 1402 send_stream = fake_call_->GetVideoSendStreams()[0]; |
1398 EXPECT_EQ(0, send_stream->GetConfig().rtp.nack.rtp_history_ms); | 1403 EXPECT_EQ(0, send_stream->GetConfig().rtp.nack.rtp_history_ms); |
1399 | 1404 |
1400 // Verify that NACK is turned on when setting default codecs since the | 1405 // Verify that NACK is turned on when setting default codecs since the |
1401 // default codecs have NACK enabled. | 1406 // default codecs have NACK enabled. |
1402 EXPECT_TRUE(channel_->SetSendCodecs(engine_.codecs())); | 1407 parameters.codecs = engine_.codecs(); |
| 1408 EXPECT_TRUE(channel_->SetSendParameters(parameters)); |
1403 recv_stream = fake_call_->GetVideoReceiveStreams()[0]; | 1409 recv_stream = fake_call_->GetVideoReceiveStreams()[0]; |
1404 EXPECT_GT(recv_stream->GetConfig().rtp.nack.rtp_history_ms, 0); | 1410 EXPECT_GT(recv_stream->GetConfig().rtp.nack.rtp_history_ms, 0); |
1405 send_stream = fake_call_->GetVideoSendStreams()[0]; | 1411 send_stream = fake_call_->GetVideoSendStreams()[0]; |
1406 EXPECT_GT(send_stream->GetConfig().rtp.nack.rtp_history_ms, 0); | 1412 EXPECT_GT(send_stream->GetConfig().rtp.nack.rtp_history_ms, 0); |
1407 } | 1413 } |
1408 | 1414 |
1409 TEST_F(WebRtcVideoChannel2Test, DISABLED_VideoProtectionInterop) { | 1415 TEST_F(WebRtcVideoChannel2Test, DISABLED_VideoProtectionInterop) { |
1410 FAIL() << "Not implemented."; // TODO(pbos): Implement. | 1416 FAIL() << "Not implemented."; // TODO(pbos): Implement. |
1411 } | 1417 } |
1412 | 1418 |
(...skipping 25 matching lines...) Expand all Loading... |
1438 FAIL() << "Not implemented."; // TODO(pbos): Implement. | 1444 FAIL() << "Not implemented."; // TODO(pbos): Implement. |
1439 } | 1445 } |
1440 | 1446 |
1441 TEST_F(WebRtcVideoChannel2Test, DISABLED_SetBandwidthInConference) { | 1447 TEST_F(WebRtcVideoChannel2Test, DISABLED_SetBandwidthInConference) { |
1442 FAIL() << "Not implemented."; // TODO(pbos): Implement. | 1448 FAIL() << "Not implemented."; // TODO(pbos): Implement. |
1443 } | 1449 } |
1444 | 1450 |
1445 TEST_F(WebRtcVideoChannel2Test, UsesCorrectSettingsForScreencast) { | 1451 TEST_F(WebRtcVideoChannel2Test, UsesCorrectSettingsForScreencast) { |
1446 static const int kScreenshareMinBitrateKbps = 800; | 1452 static const int kScreenshareMinBitrateKbps = 800; |
1447 cricket::VideoCodec codec = kVp8Codec360p; | 1453 cricket::VideoCodec codec = kVp8Codec360p; |
1448 std::vector<cricket::VideoCodec> codecs; | 1454 cricket::VideoSendParameters parameters; |
1449 codecs.push_back(codec); | 1455 parameters.codecs.push_back(codec); |
1450 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); | 1456 parameters.options.screencast_min_bitrate.Set(kScreenshareMinBitrateKbps); |
1451 VideoOptions options; | 1457 EXPECT_TRUE(channel_->SetSendParameters(parameters)); |
1452 options.screencast_min_bitrate.Set(kScreenshareMinBitrateKbps); | |
1453 channel_->SetOptions(options); | |
1454 | 1458 |
1455 AddSendStream(); | 1459 AddSendStream(); |
1456 | 1460 |
1457 cricket::FakeVideoCapturer capturer; | 1461 cricket::FakeVideoCapturer capturer; |
1458 capturer.SetScreencast(false); | 1462 capturer.SetScreencast(false); |
1459 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, &capturer)); | 1463 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, &capturer)); |
1460 cricket::VideoFormat capture_format_hd = | 1464 cricket::VideoFormat capture_format_hd = |
1461 capturer.GetSupportedFormats()->front(); | 1465 capturer.GetSupportedFormats()->front(); |
1462 EXPECT_EQ(1280, capture_format_hd.width); | 1466 EXPECT_EQ(1280, capture_format_hd.width); |
1463 EXPECT_EQ(720, capture_format_hd.height); | 1467 EXPECT_EQ(720, capture_format_hd.height); |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1496 EXPECT_EQ(capture_format_hd.height, encoder_config.streams.front().height); | 1500 EXPECT_EQ(capture_format_hd.height, encoder_config.streams.front().height); |
1497 EXPECT_TRUE(encoder_config.streams[0].temporal_layer_thresholds_bps.empty()); | 1501 EXPECT_TRUE(encoder_config.streams[0].temporal_layer_thresholds_bps.empty()); |
1498 | 1502 |
1499 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, NULL)); | 1503 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, NULL)); |
1500 } | 1504 } |
1501 | 1505 |
1502 TEST_F(WebRtcVideoChannel2Test, | 1506 TEST_F(WebRtcVideoChannel2Test, |
1503 ConferenceModeScreencastConfiguresTemporalLayer) { | 1507 ConferenceModeScreencastConfiguresTemporalLayer) { |
1504 static const int kConferenceScreencastTemporalBitrateBps = | 1508 static const int kConferenceScreencastTemporalBitrateBps = |
1505 ScreenshareLayerConfig::GetDefault().tl0_bitrate_kbps * 1000; | 1509 ScreenshareLayerConfig::GetDefault().tl0_bitrate_kbps * 1000; |
1506 VideoOptions options; | 1510 cricket::VideoSendParameters parameters; |
1507 options.conference_mode.Set(true); | 1511 parameters.options.conference_mode.Set(true); |
1508 channel_->SetOptions(options); | 1512 channel_->SetSendParameters(parameters); |
1509 | 1513 |
1510 AddSendStream(); | 1514 AddSendStream(); |
1511 | 1515 |
1512 cricket::FakeVideoCapturer capturer; | 1516 cricket::FakeVideoCapturer capturer; |
1513 capturer.SetScreencast(true); | 1517 capturer.SetScreencast(true); |
1514 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, &capturer)); | 1518 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, &capturer)); |
1515 cricket::VideoFormat capture_format_hd = | 1519 cricket::VideoFormat capture_format_hd = |
1516 capturer.GetSupportedFormats()->front(); | 1520 capturer.GetSupportedFormats()->front(); |
1517 EXPECT_EQ(cricket::CS_RUNNING, capturer.Start(capture_format_hd)); | 1521 EXPECT_EQ(cricket::CS_RUNNING, capturer.Start(capture_format_hd)); |
1518 | 1522 |
(...skipping 24 matching lines...) Expand all Loading... |
1543 TEST_F(WebRtcVideoChannel2Test, | 1547 TEST_F(WebRtcVideoChannel2Test, |
1544 DISABLED_SetSendSsrcAfterCreatingReceiveChannel) { | 1548 DISABLED_SetSendSsrcAfterCreatingReceiveChannel) { |
1545 FAIL() << "Not implemented."; // TODO(pbos): Implement. | 1549 FAIL() << "Not implemented."; // TODO(pbos): Implement. |
1546 } | 1550 } |
1547 | 1551 |
1548 TEST_F(WebRtcVideoChannel2Test, SuspendBelowMinBitrateDisabledByDefault) { | 1552 TEST_F(WebRtcVideoChannel2Test, SuspendBelowMinBitrateDisabledByDefault) { |
1549 FakeVideoSendStream* stream = AddSendStream(); | 1553 FakeVideoSendStream* stream = AddSendStream(); |
1550 EXPECT_FALSE(stream->GetConfig().suspend_below_min_bitrate); | 1554 EXPECT_FALSE(stream->GetConfig().suspend_below_min_bitrate); |
1551 } | 1555 } |
1552 | 1556 |
| 1557 |
| 1558 |
| 1559 |
1553 TEST_F(WebRtcVideoChannel2Test, SetOptionsWithSuspendBelowMinBitrate) { | 1560 TEST_F(WebRtcVideoChannel2Test, SetOptionsWithSuspendBelowMinBitrate) { |
1554 VideoOptions options; | 1561 cricket::VideoSendParameters parameters; |
1555 options.suspend_below_min_bitrate.Set(true); | 1562 parameters.options.suspend_below_min_bitrate.Set(true); |
1556 channel_->SetOptions(options); | 1563 channel_->SetSendParameters(parameters); |
1557 | 1564 |
1558 FakeVideoSendStream* stream = AddSendStream(); | 1565 FakeVideoSendStream* stream = AddSendStream(); |
1559 EXPECT_TRUE(stream->GetConfig().suspend_below_min_bitrate); | 1566 EXPECT_TRUE(stream->GetConfig().suspend_below_min_bitrate); |
1560 | 1567 |
1561 options.suspend_below_min_bitrate.Set(false); | 1568 parameters.options.suspend_below_min_bitrate.Set(false); |
1562 channel_->SetOptions(options); | 1569 channel_->SetSendParameters(parameters); |
1563 | 1570 |
1564 stream = fake_call_->GetVideoSendStreams()[0]; | 1571 stream = fake_call_->GetVideoSendStreams()[0]; |
1565 EXPECT_FALSE(stream->GetConfig().suspend_below_min_bitrate); | 1572 EXPECT_FALSE(stream->GetConfig().suspend_below_min_bitrate); |
1566 } | 1573 } |
1567 | 1574 |
1568 TEST_F(WebRtcVideoChannel2Test, Vp8DenoisingEnabledByDefault) { | 1575 TEST_F(WebRtcVideoChannel2Test, Vp8DenoisingEnabledByDefault) { |
1569 FakeVideoSendStream* stream = AddSendStream(); | 1576 FakeVideoSendStream* stream = AddSendStream(); |
1570 webrtc::VideoCodecVP8 vp8_settings; | 1577 webrtc::VideoCodecVP8 vp8_settings; |
1571 ASSERT_TRUE(stream->GetVp8Settings(&vp8_settings)) << "No VP8 config set."; | 1578 ASSERT_TRUE(stream->GetVp8Settings(&vp8_settings)) << "No VP8 config set."; |
1572 EXPECT_TRUE(vp8_settings.denoisingOn); | 1579 EXPECT_TRUE(vp8_settings.denoisingOn); |
1573 } | 1580 } |
1574 | 1581 |
1575 TEST_F(WebRtcVideoChannel2Test, VerifyVp8SpecificSettings) { | 1582 TEST_F(WebRtcVideoChannel2Test, VerifyVp8SpecificSettings) { |
1576 std::vector<cricket::VideoCodec> codecs; | 1583 cricket::VideoSendParameters parameters; |
1577 codecs.push_back(kVp8Codec720p); | 1584 parameters.codecs.push_back(kVp8Codec720p); |
1578 ASSERT_TRUE(channel_->SetSendCodecs(codecs)); | 1585 ASSERT_TRUE(channel_->SetSendParameters(parameters)); |
1579 | 1586 |
1580 // Single-stream settings should apply with RTX as well (verifies that we | 1587 // Single-stream settings should apply with RTX as well (verifies that we |
1581 // check number of regular SSRCs and not StreamParams::ssrcs which contains | 1588 // check number of regular SSRCs and not StreamParams::ssrcs which contains |
1582 // both RTX and regular SSRCs). | 1589 // both RTX and regular SSRCs). |
1583 FakeVideoSendStream* stream = SetUpSimulcast(false, true); | 1590 FakeVideoSendStream* stream = SetUpSimulcast(false, true); |
1584 | 1591 |
1585 cricket::FakeVideoCapturer capturer; | 1592 cricket::FakeVideoCapturer capturer; |
1586 capturer.SetScreencast(false); | 1593 capturer.SetScreencast(false); |
1587 EXPECT_EQ(cricket::CS_RUNNING, | 1594 EXPECT_EQ(cricket::CS_RUNNING, |
1588 capturer.Start(capturer.GetSupportedFormats()->front())); | 1595 capturer.Start(capturer.GetSupportedFormats()->front())); |
1589 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, &capturer)); | 1596 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, &capturer)); |
1590 channel_->SetSend(true); | 1597 channel_->SetSend(true); |
1591 | 1598 |
1592 EXPECT_TRUE(capturer.CaptureFrame()); | 1599 EXPECT_TRUE(capturer.CaptureFrame()); |
1593 | 1600 |
1594 stream = SetDenoisingOption(false); | 1601 stream = SetDenoisingOption(parameters, false); |
1595 | 1602 |
1596 webrtc::VideoCodecVP8 vp8_settings; | 1603 webrtc::VideoCodecVP8 vp8_settings; |
1597 ASSERT_TRUE(stream->GetVp8Settings(&vp8_settings)) << "No VP8 config set."; | 1604 ASSERT_TRUE(stream->GetVp8Settings(&vp8_settings)) << "No VP8 config set."; |
1598 EXPECT_FALSE(vp8_settings.denoisingOn); | 1605 EXPECT_FALSE(vp8_settings.denoisingOn); |
1599 EXPECT_TRUE(vp8_settings.automaticResizeOn); | 1606 EXPECT_TRUE(vp8_settings.automaticResizeOn); |
1600 EXPECT_TRUE(vp8_settings.frameDroppingOn); | 1607 EXPECT_TRUE(vp8_settings.frameDroppingOn); |
1601 | 1608 |
1602 stream = SetDenoisingOption(true); | 1609 stream = SetDenoisingOption(parameters, true); |
1603 | 1610 |
1604 ASSERT_TRUE(stream->GetVp8Settings(&vp8_settings)) << "No VP8 config set."; | 1611 ASSERT_TRUE(stream->GetVp8Settings(&vp8_settings)) << "No VP8 config set."; |
1605 EXPECT_TRUE(vp8_settings.denoisingOn); | 1612 EXPECT_TRUE(vp8_settings.denoisingOn); |
1606 EXPECT_TRUE(vp8_settings.automaticResizeOn); | 1613 EXPECT_TRUE(vp8_settings.automaticResizeOn); |
1607 EXPECT_TRUE(vp8_settings.frameDroppingOn); | 1614 EXPECT_TRUE(vp8_settings.frameDroppingOn); |
1608 | 1615 |
1609 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, NULL)); | 1616 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, NULL)); |
1610 stream = SetUpSimulcast(true, false); | 1617 stream = SetUpSimulcast(true, false); |
1611 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, &capturer)); | 1618 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, &capturer)); |
1612 channel_->SetSend(true); | 1619 channel_->SetSend(true); |
1613 EXPECT_TRUE(capturer.CaptureFrame()); | 1620 EXPECT_TRUE(capturer.CaptureFrame()); |
1614 | 1621 |
1615 EXPECT_EQ(3, stream->GetVideoStreams().size()); | 1622 EXPECT_EQ(3, stream->GetVideoStreams().size()); |
1616 ASSERT_TRUE(stream->GetVp8Settings(&vp8_settings)) << "No VP8 config set."; | 1623 ASSERT_TRUE(stream->GetVp8Settings(&vp8_settings)) << "No VP8 config set."; |
1617 // Autmatic resize off when using simulcast. | 1624 // Autmatic resize off when using simulcast. |
1618 EXPECT_FALSE(vp8_settings.automaticResizeOn); | 1625 EXPECT_FALSE(vp8_settings.automaticResizeOn); |
1619 EXPECT_TRUE(vp8_settings.frameDroppingOn); | 1626 EXPECT_TRUE(vp8_settings.frameDroppingOn); |
1620 | 1627 |
1621 // In screen-share mode, denoising is forced off and simulcast disabled. | 1628 // In screen-share mode, denoising is forced off and simulcast disabled. |
1622 capturer.SetScreencast(true); | 1629 capturer.SetScreencast(true); |
1623 EXPECT_TRUE(capturer.CaptureFrame()); | 1630 EXPECT_TRUE(capturer.CaptureFrame()); |
1624 stream = SetDenoisingOption(false); | 1631 stream = SetDenoisingOption(parameters, false); |
1625 | 1632 |
1626 EXPECT_EQ(1, stream->GetVideoStreams().size()); | 1633 EXPECT_EQ(1, stream->GetVideoStreams().size()); |
1627 ASSERT_TRUE(stream->GetVp8Settings(&vp8_settings)) << "No VP8 config set."; | 1634 ASSERT_TRUE(stream->GetVp8Settings(&vp8_settings)) << "No VP8 config set."; |
1628 EXPECT_FALSE(vp8_settings.denoisingOn); | 1635 EXPECT_FALSE(vp8_settings.denoisingOn); |
1629 // Resizing and frame dropping always off for screen sharing. | 1636 // Resizing and frame dropping always off for screen sharing. |
1630 EXPECT_FALSE(vp8_settings.automaticResizeOn); | 1637 EXPECT_FALSE(vp8_settings.automaticResizeOn); |
1631 EXPECT_FALSE(vp8_settings.frameDroppingOn); | 1638 EXPECT_FALSE(vp8_settings.frameDroppingOn); |
1632 | 1639 |
1633 stream = SetDenoisingOption(true); | 1640 stream = SetDenoisingOption(parameters, true); |
1634 | 1641 |
1635 ASSERT_TRUE(stream->GetVp8Settings(&vp8_settings)) << "No VP8 config set."; | 1642 ASSERT_TRUE(stream->GetVp8Settings(&vp8_settings)) << "No VP8 config set."; |
1636 EXPECT_FALSE(vp8_settings.denoisingOn); | 1643 EXPECT_FALSE(vp8_settings.denoisingOn); |
1637 EXPECT_FALSE(vp8_settings.automaticResizeOn); | 1644 EXPECT_FALSE(vp8_settings.automaticResizeOn); |
1638 EXPECT_FALSE(vp8_settings.frameDroppingOn); | 1645 EXPECT_FALSE(vp8_settings.frameDroppingOn); |
1639 | 1646 |
1640 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, NULL)); | 1647 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, NULL)); |
1641 } | 1648 } |
1642 | 1649 |
1643 class Vp9SettingsTest : public WebRtcVideoChannel2Test { | 1650 class Vp9SettingsTest : public WebRtcVideoChannel2Test { |
1644 public: | 1651 public: |
1645 Vp9SettingsTest() : WebRtcVideoChannel2Test() { | 1652 Vp9SettingsTest() : WebRtcVideoChannel2Test() { |
1646 encoder_factory_.AddSupportedVideoCodecType(webrtc::kVideoCodecVP9, "VP9"); | 1653 encoder_factory_.AddSupportedVideoCodecType(webrtc::kVideoCodecVP9, "VP9"); |
1647 } | 1654 } |
1648 virtual ~Vp9SettingsTest() {} | 1655 virtual ~Vp9SettingsTest() {} |
1649 | 1656 |
1650 protected: | 1657 protected: |
1651 void SetUp() override { | 1658 void SetUp() override { |
1652 engine_.SetExternalEncoderFactory(&encoder_factory_); | 1659 engine_.SetExternalEncoderFactory(&encoder_factory_); |
1653 | 1660 |
1654 WebRtcVideoChannel2Test::SetUp(); | 1661 WebRtcVideoChannel2Test::SetUp(); |
1655 } | 1662 } |
1656 | 1663 |
1657 void TearDown() override { | 1664 void TearDown() override { |
1658 // Remove references to encoder_factory_ since this will be destroyed | 1665 // Remove references to encoder_factory_ since this will be destroyed |
1659 // before channel_ and engine_. | 1666 // before channel_ and engine_. |
1660 ASSERT_TRUE(channel_->SetSendCodecs(engine_.codecs())); | 1667 cricket::VideoSendParameters parameters; |
| 1668 parameters.codecs = engine_.codecs(); |
| 1669 ASSERT_TRUE(channel_->SetSendParameters(parameters)); |
1661 } | 1670 } |
1662 | 1671 |
1663 cricket::FakeWebRtcVideoEncoderFactory encoder_factory_; | 1672 cricket::FakeWebRtcVideoEncoderFactory encoder_factory_; |
1664 }; | 1673 }; |
1665 | 1674 |
1666 TEST_F(Vp9SettingsTest, VerifyVp9SpecificSettings) { | 1675 TEST_F(Vp9SettingsTest, VerifyVp9SpecificSettings) { |
1667 std::vector<cricket::VideoCodec> codecs; | 1676 cricket::VideoSendParameters parameters; |
1668 codecs.push_back(kVp9Codec); | 1677 parameters.codecs.push_back(kVp9Codec); |
1669 ASSERT_TRUE(channel_->SetSendCodecs(codecs)); | 1678 ASSERT_TRUE(channel_->SetSendParameters(parameters)); |
1670 | 1679 |
1671 FakeVideoSendStream* stream = SetUpSimulcast(false, false); | 1680 FakeVideoSendStream* stream = SetUpSimulcast(false, false); |
1672 | 1681 |
1673 cricket::FakeVideoCapturer capturer; | 1682 cricket::FakeVideoCapturer capturer; |
1674 capturer.SetScreencast(false); | 1683 capturer.SetScreencast(false); |
1675 EXPECT_EQ(cricket::CS_RUNNING, | 1684 EXPECT_EQ(cricket::CS_RUNNING, |
1676 capturer.Start(capturer.GetSupportedFormats()->front())); | 1685 capturer.Start(capturer.GetSupportedFormats()->front())); |
1677 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, &capturer)); | 1686 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, &capturer)); |
1678 channel_->SetSend(true); | 1687 channel_->SetSend(true); |
1679 | 1688 |
1680 EXPECT_TRUE(capturer.CaptureFrame()); | 1689 EXPECT_TRUE(capturer.CaptureFrame()); |
1681 | 1690 |
1682 stream = SetDenoisingOption(false); | 1691 stream = SetDenoisingOption(parameters, false); |
1683 | 1692 |
1684 webrtc::VideoCodecVP9 vp9_settings; | 1693 webrtc::VideoCodecVP9 vp9_settings; |
1685 ASSERT_TRUE(stream->GetVp9Settings(&vp9_settings)) << "No VP9 config set."; | 1694 ASSERT_TRUE(stream->GetVp9Settings(&vp9_settings)) << "No VP9 config set."; |
1686 EXPECT_FALSE(vp9_settings.denoisingOn); | 1695 EXPECT_FALSE(vp9_settings.denoisingOn); |
1687 // Frame dropping always on for real time video. | 1696 // Frame dropping always on for real time video. |
1688 EXPECT_TRUE(vp9_settings.frameDroppingOn); | 1697 EXPECT_TRUE(vp9_settings.frameDroppingOn); |
1689 | 1698 |
1690 stream = SetDenoisingOption(true); | 1699 stream = SetDenoisingOption(parameters, true); |
1691 | 1700 |
1692 ASSERT_TRUE(stream->GetVp9Settings(&vp9_settings)) << "No VP9 config set."; | 1701 ASSERT_TRUE(stream->GetVp9Settings(&vp9_settings)) << "No VP9 config set."; |
1693 EXPECT_TRUE(vp9_settings.denoisingOn); | 1702 EXPECT_TRUE(vp9_settings.denoisingOn); |
1694 EXPECT_TRUE(vp9_settings.frameDroppingOn); | 1703 EXPECT_TRUE(vp9_settings.frameDroppingOn); |
1695 | 1704 |
1696 // In screen-share mode, denoising is forced off. | 1705 // In screen-share mode, denoising is forced off. |
1697 capturer.SetScreencast(true); | 1706 capturer.SetScreencast(true); |
1698 EXPECT_TRUE(capturer.CaptureFrame()); | 1707 EXPECT_TRUE(capturer.CaptureFrame()); |
1699 stream = SetDenoisingOption(false); | 1708 stream = SetDenoisingOption(parameters, false); |
1700 | 1709 |
1701 ASSERT_TRUE(stream->GetVp9Settings(&vp9_settings)) << "No VP9 config set."; | 1710 ASSERT_TRUE(stream->GetVp9Settings(&vp9_settings)) << "No VP9 config set."; |
1702 EXPECT_FALSE(vp9_settings.denoisingOn); | 1711 EXPECT_FALSE(vp9_settings.denoisingOn); |
1703 // Frame dropping always off for screen sharing. | 1712 // Frame dropping always off for screen sharing. |
1704 EXPECT_FALSE(vp9_settings.frameDroppingOn); | 1713 EXPECT_FALSE(vp9_settings.frameDroppingOn); |
1705 | 1714 |
1706 stream = SetDenoisingOption(false); | 1715 stream = SetDenoisingOption(parameters, false); |
1707 | 1716 |
1708 ASSERT_TRUE(stream->GetVp9Settings(&vp9_settings)) << "No VP9 config set."; | 1717 ASSERT_TRUE(stream->GetVp9Settings(&vp9_settings)) << "No VP9 config set."; |
1709 EXPECT_FALSE(vp9_settings.denoisingOn); | 1718 EXPECT_FALSE(vp9_settings.denoisingOn); |
1710 EXPECT_FALSE(vp9_settings.frameDroppingOn); | 1719 EXPECT_FALSE(vp9_settings.frameDroppingOn); |
1711 | 1720 |
1712 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, NULL)); | 1721 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, NULL)); |
1713 } | 1722 } |
1714 | 1723 |
1715 TEST_F(WebRtcVideoChannel2Test, DISABLED_MultipleSendStreamsWithOneCapturer) { | 1724 TEST_F(WebRtcVideoChannel2Test, DISABLED_MultipleSendStreamsWithOneCapturer) { |
1716 FAIL() << "Not implemented."; // TODO(pbos): Implement. | 1725 FAIL() << "Not implemented."; // TODO(pbos): Implement. |
(...skipping 11 matching lines...) Expand all Loading... |
1728 TestCpuAdaptation(false, false); | 1737 TestCpuAdaptation(false, false); |
1729 } | 1738 } |
1730 | 1739 |
1731 TEST_F(WebRtcVideoChannel2Test, DoesNotAdaptOnOveruseWhenScreensharing) { | 1740 TEST_F(WebRtcVideoChannel2Test, DoesNotAdaptOnOveruseWhenScreensharing) { |
1732 TestCpuAdaptation(true, true); | 1741 TestCpuAdaptation(true, true); |
1733 } | 1742 } |
1734 | 1743 |
1735 void WebRtcVideoChannel2Test::TestCpuAdaptation(bool enable_overuse, | 1744 void WebRtcVideoChannel2Test::TestCpuAdaptation(bool enable_overuse, |
1736 bool is_screenshare) { | 1745 bool is_screenshare) { |
1737 cricket::VideoCodec codec = kVp8Codec720p; | 1746 cricket::VideoCodec codec = kVp8Codec720p; |
1738 std::vector<cricket::VideoCodec> codecs; | 1747 cricket::VideoSendParameters parameters; |
1739 codecs.push_back(codec); | 1748 parameters.codecs.push_back(codec); |
1740 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); | |
1741 | |
1742 if (!enable_overuse) { | 1749 if (!enable_overuse) { |
1743 VideoOptions options; | 1750 parameters.options.cpu_overuse_detection.Set(false); |
1744 options.cpu_overuse_detection.Set(false); | |
1745 channel_->SetOptions(options); | |
1746 } | 1751 } |
| 1752 EXPECT_TRUE(channel_->SetSendParameters(parameters)); |
1747 | 1753 |
1748 AddSendStream(); | 1754 AddSendStream(); |
1749 | 1755 |
1750 cricket::FakeVideoCapturer capturer; | 1756 cricket::FakeVideoCapturer capturer; |
1751 capturer.SetScreencast(is_screenshare); | 1757 capturer.SetScreencast(is_screenshare); |
1752 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, &capturer)); | 1758 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, &capturer)); |
1753 EXPECT_EQ(cricket::CS_RUNNING, | 1759 EXPECT_EQ(cricket::CS_RUNNING, |
1754 capturer.Start(capturer.GetSupportedFormats()->front())); | 1760 capturer.Start(capturer.GetSupportedFormats()->front())); |
1755 | 1761 |
1756 EXPECT_TRUE(channel_->SetSend(true)); | 1762 EXPECT_TRUE(channel_->SetSend(true)); |
(...skipping 27 matching lines...) Expand all Loading... |
1784 EXPECT_EQ(codec.height, send_stream->GetLastHeight()); | 1790 EXPECT_EQ(codec.height, send_stream->GetLastHeight()); |
1785 | 1791 |
1786 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, NULL)); | 1792 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, NULL)); |
1787 } | 1793 } |
1788 | 1794 |
1789 TEST_F(WebRtcVideoChannel2Test, EstimatesNtpStartTimeAndElapsedTimeCorrectly) { | 1795 TEST_F(WebRtcVideoChannel2Test, EstimatesNtpStartTimeAndElapsedTimeCorrectly) { |
1790 // Start at last timestamp to verify that wraparounds are estimated correctly. | 1796 // Start at last timestamp to verify that wraparounds are estimated correctly. |
1791 static const uint32_t kInitialTimestamp = 0xFFFFFFFFu; | 1797 static const uint32_t kInitialTimestamp = 0xFFFFFFFFu; |
1792 static const int64_t kInitialNtpTimeMs = 1247891230; | 1798 static const int64_t kInitialNtpTimeMs = 1247891230; |
1793 static const int kFrameOffsetMs = 20; | 1799 static const int kFrameOffsetMs = 20; |
1794 EXPECT_TRUE(channel_->SetRecvCodecs(engine_.codecs())); | 1800 cricket::VideoRecvParameters parameters; |
| 1801 parameters.codecs = engine_.codecs(); |
| 1802 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); |
1795 | 1803 |
1796 FakeVideoReceiveStream* stream = AddRecvStream(); | 1804 FakeVideoReceiveStream* stream = AddRecvStream(); |
1797 cricket::FakeVideoRenderer renderer; | 1805 cricket::FakeVideoRenderer renderer; |
1798 EXPECT_TRUE(channel_->SetRenderer(last_ssrc_, &renderer)); | 1806 EXPECT_TRUE(channel_->SetRenderer(last_ssrc_, &renderer)); |
1799 EXPECT_TRUE(channel_->SetRender(true)); | 1807 EXPECT_TRUE(channel_->SetRender(true)); |
1800 | 1808 |
1801 webrtc::VideoFrame video_frame; | 1809 webrtc::VideoFrame video_frame; |
1802 CreateBlackFrame(&video_frame, 4, 4); | 1810 CreateBlackFrame(&video_frame, 4, 4); |
1803 video_frame.set_timestamp(kInitialTimestamp); | 1811 video_frame.set_timestamp(kInitialTimestamp); |
1804 // Initial NTP time is not available on the first frame, but should still be | 1812 // Initial NTP time is not available on the first frame, but should still be |
(...skipping 15 matching lines...) Expand all Loading... |
1820 renderer.last_frame_elapsed_time_ns()); | 1828 renderer.last_frame_elapsed_time_ns()); |
1821 | 1829 |
1822 // Verify that NTP time has been correctly deduced. | 1830 // Verify that NTP time has been correctly deduced. |
1823 cricket::VideoMediaInfo info; | 1831 cricket::VideoMediaInfo info; |
1824 ASSERT_TRUE(channel_->GetStats(&info)); | 1832 ASSERT_TRUE(channel_->GetStats(&info)); |
1825 ASSERT_EQ(1u, info.receivers.size()); | 1833 ASSERT_EQ(1u, info.receivers.size()); |
1826 EXPECT_EQ(kInitialNtpTimeMs, info.receivers[0].capture_start_ntp_time_ms); | 1834 EXPECT_EQ(kInitialNtpTimeMs, info.receivers[0].capture_start_ntp_time_ms); |
1827 } | 1835 } |
1828 | 1836 |
1829 TEST_F(WebRtcVideoChannel2Test, SetDefaultSendCodecs) { | 1837 TEST_F(WebRtcVideoChannel2Test, SetDefaultSendCodecs) { |
1830 ASSERT_TRUE(channel_->SetSendCodecs(engine_.codecs())); | 1838 cricket::VideoSendParameters parameters; |
| 1839 parameters.codecs = engine_.codecs(); |
| 1840 ASSERT_TRUE(channel_->SetSendParameters(parameters)); |
1831 | 1841 |
1832 VideoCodec codec; | 1842 VideoCodec codec; |
1833 EXPECT_TRUE(channel_->GetSendCodec(&codec)); | 1843 EXPECT_TRUE(channel_->GetSendCodec(&codec)); |
1834 EXPECT_TRUE(codec.Matches(engine_.codecs()[0])); | 1844 EXPECT_TRUE(codec.Matches(engine_.codecs()[0])); |
1835 | 1845 |
1836 // Using a RTX setup to verify that the default RTX payload type is good. | 1846 // Using a RTX setup to verify that the default RTX payload type is good. |
1837 const std::vector<uint32> ssrcs = MAKE_VECTOR(kSsrcs1); | 1847 const std::vector<uint32> ssrcs = MAKE_VECTOR(kSsrcs1); |
1838 const std::vector<uint32> rtx_ssrcs = MAKE_VECTOR(kRtxSsrcs1); | 1848 const std::vector<uint32> rtx_ssrcs = MAKE_VECTOR(kRtxSsrcs1); |
1839 FakeVideoSendStream* stream = AddSendStream( | 1849 FakeVideoSendStream* stream = AddSendStream( |
1840 cricket::CreateSimWithRtxStreamParams("cname", ssrcs, rtx_ssrcs)); | 1850 cricket::CreateSimWithRtxStreamParams("cname", ssrcs, rtx_ssrcs)); |
1841 webrtc::VideoSendStream::Config config = stream->GetConfig(); | 1851 webrtc::VideoSendStream::Config config = stream->GetConfig(); |
1842 | 1852 |
1843 // Make sure NACK and FEC are enabled on the correct payload types. | 1853 // Make sure NACK and FEC are enabled on the correct payload types. |
1844 EXPECT_EQ(1000, config.rtp.nack.rtp_history_ms); | 1854 EXPECT_EQ(1000, config.rtp.nack.rtp_history_ms); |
1845 EXPECT_EQ(default_ulpfec_codec_.id, config.rtp.fec.ulpfec_payload_type); | 1855 EXPECT_EQ(default_ulpfec_codec_.id, config.rtp.fec.ulpfec_payload_type); |
1846 EXPECT_EQ(default_red_codec_.id, config.rtp.fec.red_payload_type); | 1856 EXPECT_EQ(default_red_codec_.id, config.rtp.fec.red_payload_type); |
1847 | 1857 |
1848 EXPECT_EQ(1u, config.rtp.rtx.ssrcs.size()); | 1858 EXPECT_EQ(1u, config.rtp.rtx.ssrcs.size()); |
1849 EXPECT_EQ(kRtxSsrcs1[0], config.rtp.rtx.ssrcs[0]); | 1859 EXPECT_EQ(kRtxSsrcs1[0], config.rtp.rtx.ssrcs[0]); |
1850 VerifySendStreamHasRtxTypes(config, default_apt_rtx_types_); | 1860 VerifySendStreamHasRtxTypes(config, default_apt_rtx_types_); |
1851 // TODO(juberti): Check RTCP, PLI, TMMBR. | 1861 // TODO(juberti): Check RTCP, PLI, TMMBR. |
1852 } | 1862 } |
1853 | 1863 |
1854 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsWithoutFec) { | 1864 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsWithoutFec) { |
1855 std::vector<VideoCodec> codecs; | 1865 cricket::VideoSendParameters parameters; |
1856 codecs.push_back(kVp8Codec); | 1866 parameters.codecs.push_back(kVp8Codec); |
1857 ASSERT_TRUE(channel_->SetSendCodecs(codecs)); | 1867 ASSERT_TRUE(channel_->SetSendParameters(parameters)); |
1858 | 1868 |
1859 FakeVideoSendStream* stream = AddSendStream(); | 1869 FakeVideoSendStream* stream = AddSendStream(); |
1860 webrtc::VideoSendStream::Config config = stream->GetConfig(); | 1870 webrtc::VideoSendStream::Config config = stream->GetConfig(); |
1861 | 1871 |
1862 EXPECT_EQ(-1, config.rtp.fec.ulpfec_payload_type); | 1872 EXPECT_EQ(-1, config.rtp.fec.ulpfec_payload_type); |
1863 EXPECT_EQ(-1, config.rtp.fec.red_payload_type); | 1873 EXPECT_EQ(-1, config.rtp.fec.red_payload_type); |
1864 } | 1874 } |
1865 | 1875 |
1866 TEST_F(WebRtcVideoChannel2Test, | 1876 TEST_F(WebRtcVideoChannel2Test, |
1867 SetSendCodecRejectsRtxWithoutAssociatedPayloadType) { | 1877 SetSendCodecRejectsRtxWithoutAssociatedPayloadType) { |
1868 std::vector<VideoCodec> codecs; | 1878 cricket::VideoSendParameters parameters; |
1869 cricket::VideoCodec rtx_codec(96, "rtx", 0, 0, 0, 0); | 1879 cricket::VideoCodec rtx_codec(96, "rtx", 0, 0, 0, 0); |
1870 codecs.push_back(rtx_codec); | 1880 parameters.codecs.push_back(rtx_codec); |
1871 EXPECT_FALSE(channel_->SetSendCodecs(codecs)) | 1881 EXPECT_FALSE(channel_->SetSendParameters(parameters)) |
1872 << "RTX codec without associated payload type should be rejected."; | 1882 << "RTX codec without associated payload type should be rejected."; |
1873 } | 1883 } |
1874 | 1884 |
1875 TEST_F(WebRtcVideoChannel2Test, | 1885 TEST_F(WebRtcVideoChannel2Test, |
1876 SetSendCodecRejectsRtxWithoutMatchingVideoCodec) { | 1886 SetSendCodecRejectsRtxWithoutMatchingVideoCodec) { |
1877 std::vector<VideoCodec> codecs; | 1887 cricket::VideoSendParameters parameters; |
1878 cricket::VideoCodec rtx_codec = | 1888 cricket::VideoCodec rtx_codec = |
1879 cricket::VideoCodec::CreateRtxCodec(96, kVp8Codec.id); | 1889 cricket::VideoCodec::CreateRtxCodec(96, kVp8Codec.id); |
1880 codecs.push_back(kVp8Codec); | 1890 parameters.codecs.push_back(kVp8Codec); |
1881 codecs.push_back(rtx_codec); | 1891 parameters.codecs.push_back(rtx_codec); |
1882 ASSERT_TRUE(channel_->SetSendCodecs(codecs)); | 1892 ASSERT_TRUE(channel_->SetSendParameters(parameters)); |
1883 | 1893 |
1884 cricket::VideoCodec rtx_codec2 = | 1894 cricket::VideoCodec rtx_codec2 = |
1885 cricket::VideoCodec::CreateRtxCodec(96, kVp8Codec.id + 1); | 1895 cricket::VideoCodec::CreateRtxCodec(96, kVp8Codec.id + 1); |
1886 codecs.pop_back(); | 1896 parameters.codecs.pop_back(); |
1887 codecs.push_back(rtx_codec2); | 1897 parameters.codecs.push_back(rtx_codec2); |
1888 EXPECT_FALSE(channel_->SetSendCodecs(codecs)) | 1898 EXPECT_FALSE(channel_->SetSendParameters(parameters)) |
1889 << "RTX without matching video codec should be rejected."; | 1899 << "RTX without matching video codec should be rejected."; |
1890 } | 1900 } |
1891 | 1901 |
1892 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsWithoutFecDisablesFec) { | 1902 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsWithoutFecDisablesFec) { |
1893 std::vector<VideoCodec> codecs; | 1903 cricket::VideoSendParameters parameters; |
1894 codecs.push_back(kVp8Codec); | 1904 parameters.codecs.push_back(kVp8Codec); |
1895 codecs.push_back(kUlpfecCodec); | 1905 parameters.codecs.push_back(kUlpfecCodec); |
1896 ASSERT_TRUE(channel_->SetSendCodecs(codecs)); | 1906 ASSERT_TRUE(channel_->SetSendParameters(parameters)); |
1897 | 1907 |
1898 FakeVideoSendStream* stream = AddSendStream(); | 1908 FakeVideoSendStream* stream = AddSendStream(); |
1899 webrtc::VideoSendStream::Config config = stream->GetConfig(); | 1909 webrtc::VideoSendStream::Config config = stream->GetConfig(); |
1900 | 1910 |
1901 EXPECT_EQ(kUlpfecCodec.id, config.rtp.fec.ulpfec_payload_type); | 1911 EXPECT_EQ(kUlpfecCodec.id, config.rtp.fec.ulpfec_payload_type); |
1902 | 1912 |
1903 codecs.pop_back(); | 1913 parameters.codecs.pop_back(); |
1904 ASSERT_TRUE(channel_->SetSendCodecs(codecs)); | 1914 ASSERT_TRUE(channel_->SetSendParameters(parameters)); |
1905 stream = fake_call_->GetVideoSendStreams()[0]; | 1915 stream = fake_call_->GetVideoSendStreams()[0]; |
1906 ASSERT_TRUE(stream != NULL); | 1916 ASSERT_TRUE(stream != NULL); |
1907 config = stream->GetConfig(); | 1917 config = stream->GetConfig(); |
1908 EXPECT_EQ(-1, config.rtp.fec.ulpfec_payload_type) | 1918 EXPECT_EQ(-1, config.rtp.fec.ulpfec_payload_type) |
1909 << "SetSendCodec without FEC should disable current FEC."; | 1919 << "SetSendCodec without FEC should disable current FEC."; |
1910 } | 1920 } |
1911 | 1921 |
1912 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsChangesExistingStreams) { | 1922 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsChangesExistingStreams) { |
1913 std::vector<VideoCodec> codecs; | 1923 cricket::VideoSendParameters parameters; |
1914 codecs.push_back(kVp8Codec720p); | 1924 parameters.codecs.push_back(kVp8Codec720p); |
1915 ASSERT_TRUE(channel_->SetSendCodecs(codecs)); | 1925 ASSERT_TRUE(channel_->SetSendParameters(parameters)); |
1916 channel_->SetSend(true); | 1926 channel_->SetSend(true); |
1917 | 1927 |
1918 FakeVideoSendStream* stream = AddSendStream(); | 1928 FakeVideoSendStream* stream = AddSendStream(); |
1919 | 1929 |
1920 cricket::FakeVideoCapturer capturer; | 1930 cricket::FakeVideoCapturer capturer; |
1921 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, &capturer)); | 1931 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, &capturer)); |
1922 EXPECT_EQ(cricket::CS_RUNNING, | 1932 EXPECT_EQ(cricket::CS_RUNNING, |
1923 capturer.Start(capturer.GetSupportedFormats()->front())); | 1933 capturer.Start(capturer.GetSupportedFormats()->front())); |
1924 EXPECT_TRUE(capturer.CaptureFrame()); | 1934 EXPECT_TRUE(capturer.CaptureFrame()); |
1925 | 1935 |
1926 std::vector<webrtc::VideoStream> streams = stream->GetVideoStreams(); | 1936 std::vector<webrtc::VideoStream> streams = stream->GetVideoStreams(); |
1927 EXPECT_EQ(kVp8Codec720p.width, streams[0].width); | 1937 EXPECT_EQ(kVp8Codec720p.width, streams[0].width); |
1928 EXPECT_EQ(kVp8Codec720p.height, streams[0].height); | 1938 EXPECT_EQ(kVp8Codec720p.height, streams[0].height); |
1929 | 1939 |
1930 codecs.clear(); | 1940 parameters.codecs.clear(); |
1931 codecs.push_back(kVp8Codec360p); | 1941 parameters.codecs.push_back(kVp8Codec360p); |
1932 ASSERT_TRUE(channel_->SetSendCodecs(codecs)); | 1942 ASSERT_TRUE(channel_->SetSendParameters(parameters)); |
1933 streams = fake_call_->GetVideoSendStreams()[0]->GetVideoStreams(); | 1943 streams = fake_call_->GetVideoSendStreams()[0]->GetVideoStreams(); |
1934 EXPECT_EQ(kVp8Codec360p.width, streams[0].width); | 1944 EXPECT_EQ(kVp8Codec360p.width, streams[0].width); |
1935 EXPECT_EQ(kVp8Codec360p.height, streams[0].height); | 1945 EXPECT_EQ(kVp8Codec360p.height, streams[0].height); |
1936 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, NULL)); | 1946 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, NULL)); |
1937 } | 1947 } |
1938 | 1948 |
1939 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsWithBitrates) { | 1949 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsWithBitrates) { |
1940 SetSendCodecsShouldWorkForBitrates("100", 100000, "150", 150000, "200", | 1950 SetSendCodecsShouldWorkForBitrates("100", 100000, "150", 150000, "200", |
1941 200000); | 1951 200000); |
1942 } | 1952 } |
1943 | 1953 |
1944 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsWithHighMaxBitrate) { | 1954 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsWithHighMaxBitrate) { |
1945 SetSendCodecsShouldWorkForBitrates("", 0, "", -1, "10000", 10000000); | 1955 SetSendCodecsShouldWorkForBitrates("", 0, "", -1, "10000", 10000000); |
1946 std::vector<webrtc::VideoStream> streams = AddSendStream()->GetVideoStreams(); | 1956 std::vector<webrtc::VideoStream> streams = AddSendStream()->GetVideoStreams(); |
1947 ASSERT_EQ(1u, streams.size()); | 1957 ASSERT_EQ(1u, streams.size()); |
1948 EXPECT_EQ(10000000, streams[0].max_bitrate_bps); | 1958 EXPECT_EQ(10000000, streams[0].max_bitrate_bps); |
1949 } | 1959 } |
1950 | 1960 |
1951 TEST_F(WebRtcVideoChannel2Test, | 1961 TEST_F(WebRtcVideoChannel2Test, |
1952 SetSendCodecsWithoutBitratesUsesCorrectDefaults) { | 1962 SetSendCodecsWithoutBitratesUsesCorrectDefaults) { |
1953 SetSendCodecsShouldWorkForBitrates( | 1963 SetSendCodecsShouldWorkForBitrates( |
1954 "", 0, "", -1, "", -1); | 1964 "", 0, "", -1, "", -1); |
1955 } | 1965 } |
1956 | 1966 |
1957 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsCapsMinAndStartBitrate) { | 1967 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsCapsMinAndStartBitrate) { |
1958 SetSendCodecsShouldWorkForBitrates("-1", 0, "-100", -1, "", -1); | 1968 SetSendCodecsShouldWorkForBitrates("-1", 0, "-100", -1, "", -1); |
1959 } | 1969 } |
1960 | 1970 |
1961 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsRejectsMaxLessThanMinBitrate) { | 1971 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsRejectsMaxLessThanMinBitrate) { |
1962 std::vector<VideoCodec> video_codecs = engine_.codecs(); | 1972 cricket::VideoSendParameters parameters; |
1963 video_codecs[0].params[kCodecParamMinBitrate] = "300"; | 1973 parameters.codecs = engine_.codecs(); |
1964 video_codecs[0].params[kCodecParamMaxBitrate] = "200"; | 1974 parameters.codecs[0].params[kCodecParamMinBitrate] = "300"; |
1965 EXPECT_FALSE(channel_->SetSendCodecs(video_codecs)); | 1975 parameters.codecs[0].params[kCodecParamMaxBitrate] = "200"; |
| 1976 EXPECT_FALSE(channel_->SetSendParameters(parameters)); |
1966 } | 1977 } |
1967 | 1978 /* TODO(solenberg): !!!! |
1968 TEST_F(WebRtcVideoChannel2Test, | 1979 TEST_F(WebRtcVideoChannel2Test, |
1969 SetMaxSendBandwidthShouldPreserveOtherBitrates) { | 1980 SetMaxSendBandwidthShouldPreserveOtherBitrates) { |
1970 SetSendCodecsShouldWorkForBitrates("100", 100000, "150", 150000, "200", | 1981 SetSendCodecsShouldWorkForBitrates("100", 100000, "150", 150000, "200", |
1971 200000); | 1982 200000); |
1972 channel_->SetMaxSendBandwidth(300000); | 1983 channel_->SetMaxSendBandwidth(300000); |
1973 EXPECT_EQ(100000, fake_call_->GetConfig().bitrate_config.min_bitrate_bps) | 1984 EXPECT_EQ(100000, fake_call_->GetConfig().bitrate_config.min_bitrate_bps) |
1974 << "Setting max bitrate should keep previous min bitrate."; | 1985 << "Setting max bitrate should keep previous min bitrate."; |
1975 EXPECT_EQ(-1, fake_call_->GetConfig().bitrate_config.start_bitrate_bps) | 1986 EXPECT_EQ(-1, fake_call_->GetConfig().bitrate_config.start_bitrate_bps) |
1976 << "Setting max bitrate should not reset start bitrate."; | 1987 << "Setting max bitrate should not reset start bitrate."; |
1977 EXPECT_EQ(300000, fake_call_->GetConfig().bitrate_config.max_bitrate_bps); | 1988 EXPECT_EQ(300000, fake_call_->GetConfig().bitrate_config.max_bitrate_bps); |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2030 | 2041 |
2031 EXPECT_TRUE(channel_->SetMaxSendBandwidth(initial_max_bitrate_bps * 2)); | 2042 EXPECT_TRUE(channel_->SetMaxSendBandwidth(initial_max_bitrate_bps * 2)); |
2032 streams = stream->GetVideoStreams(); | 2043 streams = stream->GetVideoStreams(); |
2033 int increased_max_bitrate_bps = 0; | 2044 int increased_max_bitrate_bps = 0; |
2034 for (auto& video_stream : streams) | 2045 for (auto& video_stream : streams) |
2035 increased_max_bitrate_bps += video_stream.max_bitrate_bps; | 2046 increased_max_bitrate_bps += video_stream.max_bitrate_bps; |
2036 EXPECT_EQ(initial_max_bitrate_bps * 2, increased_max_bitrate_bps); | 2047 EXPECT_EQ(initial_max_bitrate_bps * 2, increased_max_bitrate_bps); |
2037 | 2048 |
2038 EXPECT_TRUE(channel_->SetCapturer(kSsrcs3[0], nullptr)); | 2049 EXPECT_TRUE(channel_->SetCapturer(kSsrcs3[0], nullptr)); |
2039 } | 2050 } |
| 2051 */ |
2040 | 2052 |
2041 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsWithMaxQuantization) { | 2053 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsWithMaxQuantization) { |
2042 static const char* kMaxQuantization = "21"; | 2054 static const char* kMaxQuantization = "21"; |
2043 std::vector<VideoCodec> codecs; | 2055 cricket::VideoSendParameters parameters; |
2044 codecs.push_back(kVp8Codec); | 2056 parameters.codecs.push_back(kVp8Codec); |
2045 codecs[0].params[kCodecParamMaxQuantization] = kMaxQuantization; | 2057 parameters.codecs[0].params[kCodecParamMaxQuantization] = kMaxQuantization; |
2046 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); | 2058 EXPECT_TRUE(channel_->SetSendParameters(parameters)); |
2047 EXPECT_EQ(static_cast<unsigned int>(atoi(kMaxQuantization)), | 2059 EXPECT_EQ(static_cast<unsigned int>(atoi(kMaxQuantization)), |
2048 AddSendStream()->GetVideoStreams().back().max_qp); | 2060 AddSendStream()->GetVideoStreams().back().max_qp); |
2049 | 2061 |
2050 VideoCodec codec; | 2062 VideoCodec codec; |
2051 EXPECT_TRUE(channel_->GetSendCodec(&codec)); | 2063 EXPECT_TRUE(channel_->GetSendCodec(&codec)); |
2052 EXPECT_EQ(kMaxQuantization, codec.params[kCodecParamMaxQuantization]); | 2064 EXPECT_EQ(kMaxQuantization, codec.params[kCodecParamMaxQuantization]); |
2053 } | 2065 } |
2054 | 2066 |
2055 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsRejectBadDimensions) { | 2067 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsRejectBadDimensions) { |
2056 std::vector<cricket::VideoCodec> codecs; | 2068 cricket::VideoSendParameters parameters; |
2057 codecs.push_back(kVp8Codec); | 2069 parameters.codecs.push_back(kVp8Codec); |
2058 | 2070 |
2059 codecs[0].width = 0; | 2071 parameters.codecs[0].width = 0; |
2060 EXPECT_FALSE(channel_->SetSendCodecs(codecs)) | 2072 EXPECT_FALSE(channel_->SetSendParameters(parameters)) |
2061 << "Codec set though codec width is zero."; | 2073 << "Codec set though codec width is zero."; |
2062 | 2074 |
2063 codecs[0].width = kVp8Codec.width; | 2075 parameters.codecs[0].width = kVp8Codec.width; |
2064 codecs[0].height = 0; | 2076 parameters.codecs[0].height = 0; |
2065 EXPECT_FALSE(channel_->SetSendCodecs(codecs)) | 2077 EXPECT_FALSE(channel_->SetSendParameters(parameters)) |
2066 << "Codec set though codec height is zero."; | 2078 << "Codec set though codec height is zero."; |
2067 } | 2079 } |
2068 | 2080 |
2069 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsRejectBadPayloadTypes) { | 2081 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsRejectBadPayloadTypes) { |
2070 // TODO(pbos): Should we only allow the dynamic range? | 2082 // TODO(pbos): Should we only allow the dynamic range? |
2071 static const int kIncorrectPayloads[] = {-2, -1, 128, 129}; | 2083 static const int kIncorrectPayloads[] = {-2, -1, 128, 129}; |
2072 std::vector<cricket::VideoCodec> codecs; | 2084 cricket::VideoSendParameters parameters; |
2073 codecs.push_back(kVp8Codec); | 2085 parameters.codecs.push_back(kVp8Codec); |
2074 for (size_t i = 0; i < arraysize(kIncorrectPayloads); ++i) { | 2086 for (size_t i = 0; i < arraysize(kIncorrectPayloads); ++i) { |
2075 codecs[0].id = kIncorrectPayloads[i]; | 2087 parameters.codecs[0].id = kIncorrectPayloads[i]; |
2076 EXPECT_FALSE(channel_->SetSendCodecs(codecs)) | 2088 EXPECT_FALSE(channel_->SetSendParameters(parameters)) |
2077 << "Bad payload type '" << kIncorrectPayloads[i] << "' accepted."; | 2089 << "Bad payload type '" << kIncorrectPayloads[i] << "' accepted."; |
2078 } | 2090 } |
2079 } | 2091 } |
2080 | 2092 |
2081 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsAcceptAllValidPayloadTypes) { | 2093 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsAcceptAllValidPayloadTypes) { |
2082 std::vector<cricket::VideoCodec> codecs; | 2094 cricket::VideoSendParameters parameters; |
2083 codecs.push_back(kVp8Codec); | 2095 parameters.codecs.push_back(kVp8Codec); |
2084 for (int payload_type = 0; payload_type <= 127; ++payload_type) { | 2096 for (int payload_type = 0; payload_type <= 127; ++payload_type) { |
2085 codecs[0].id = payload_type; | 2097 parameters.codecs[0].id = payload_type; |
2086 EXPECT_TRUE(channel_->SetSendCodecs(codecs)) | 2098 EXPECT_TRUE(channel_->SetSendParameters(parameters)) |
2087 << "Payload type '" << payload_type << "' rejected."; | 2099 << "Payload type '" << payload_type << "' rejected."; |
2088 } | 2100 } |
2089 } | 2101 } |
2090 | 2102 |
2091 TEST_F(WebRtcVideoChannel2Test, SetRecvCodecsWithOnlyVp8) { | 2103 TEST_F(WebRtcVideoChannel2Test, SetRecvCodecsWithOnlyVp8) { |
2092 std::vector<cricket::VideoCodec> codecs; | 2104 cricket::VideoRecvParameters parameters; |
2093 codecs.push_back(kVp8Codec); | 2105 parameters.codecs.push_back(kVp8Codec); |
2094 EXPECT_TRUE(channel_->SetRecvCodecs(codecs)); | 2106 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); |
2095 } | 2107 } |
2096 | 2108 |
2097 // Test that we set our inbound RTX codecs properly. | 2109 // Test that we set our inbound RTX codecs properly. |
2098 TEST_F(WebRtcVideoChannel2Test, SetRecvCodecsWithRtx) { | 2110 TEST_F(WebRtcVideoChannel2Test, SetRecvCodecsWithRtx) { |
2099 std::vector<cricket::VideoCodec> codecs; | 2111 cricket::VideoRecvParameters parameters; |
2100 codecs.push_back(kVp8Codec); | 2112 parameters.codecs.push_back(kVp8Codec); |
2101 cricket::VideoCodec rtx_codec(96, "rtx", 0, 0, 0, 0); | 2113 cricket::VideoCodec rtx_codec(96, "rtx", 0, 0, 0, 0); |
2102 codecs.push_back(rtx_codec); | 2114 parameters.codecs.push_back(rtx_codec); |
2103 EXPECT_FALSE(channel_->SetRecvCodecs(codecs)) | 2115 EXPECT_FALSE(channel_->SetRecvParameters(parameters)) |
2104 << "RTX codec without associated payload should be rejected."; | 2116 << "RTX codec without associated payload should be rejected."; |
2105 | 2117 |
2106 codecs[1].SetParam("apt", kVp8Codec.id + 1); | 2118 parameters.codecs[1].SetParam("apt", kVp8Codec.id + 1); |
2107 EXPECT_FALSE(channel_->SetRecvCodecs(codecs)) | 2119 EXPECT_FALSE(channel_->SetRecvParameters(parameters)) |
2108 << "RTX codec with invalid associated payload type should be rejected."; | 2120 << "RTX codec with invalid associated payload type should be rejected."; |
2109 | 2121 |
2110 codecs[1].SetParam("apt", kVp8Codec.id); | 2122 parameters.codecs[1].SetParam("apt", kVp8Codec.id); |
2111 EXPECT_TRUE(channel_->SetRecvCodecs(codecs)); | 2123 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); |
2112 | 2124 |
2113 cricket::VideoCodec rtx_codec2(97, "rtx", 0, 0, 0, 0); | 2125 cricket::VideoCodec rtx_codec2(97, "rtx", 0, 0, 0, 0); |
2114 rtx_codec2.SetParam("apt", rtx_codec.id); | 2126 rtx_codec2.SetParam("apt", rtx_codec.id); |
2115 codecs.push_back(rtx_codec2); | 2127 parameters.codecs.push_back(rtx_codec2); |
2116 | 2128 |
2117 EXPECT_FALSE(channel_->SetRecvCodecs(codecs)) << "RTX codec with another RTX " | 2129 EXPECT_FALSE(channel_->SetRecvParameters(parameters)) << |
2118 "as associated payload type " | 2130 "RTX codec with another RTX as associated payload type should be " |
2119 "should be rejected."; | 2131 "rejected."; |
2120 } | 2132 } |
2121 | 2133 |
2122 TEST_F(WebRtcVideoChannel2Test, SetRecvCodecsDifferentPayloadType) { | 2134 TEST_F(WebRtcVideoChannel2Test, SetRecvCodecsDifferentPayloadType) { |
2123 std::vector<cricket::VideoCodec> codecs; | 2135 cricket::VideoRecvParameters parameters; |
2124 codecs.push_back(kVp8Codec); | 2136 parameters.codecs.push_back(kVp8Codec); |
2125 codecs[0].id = 99; | 2137 parameters.codecs[0].id = 99; |
2126 EXPECT_TRUE(channel_->SetRecvCodecs(codecs)); | 2138 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); |
2127 } | 2139 } |
2128 | 2140 |
2129 TEST_F(WebRtcVideoChannel2Test, SetRecvCodecsAcceptDefaultCodecs) { | 2141 TEST_F(WebRtcVideoChannel2Test, SetRecvCodecsAcceptDefaultCodecs) { |
2130 EXPECT_TRUE(channel_->SetRecvCodecs(engine_.codecs())); | 2142 cricket::VideoRecvParameters parameters; |
| 2143 parameters.codecs = engine_.codecs(); |
| 2144 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); |
2131 | 2145 |
2132 FakeVideoReceiveStream* stream = AddRecvStream(); | 2146 FakeVideoReceiveStream* stream = AddRecvStream(); |
2133 webrtc::VideoReceiveStream::Config config = stream->GetConfig(); | 2147 webrtc::VideoReceiveStream::Config config = stream->GetConfig(); |
2134 EXPECT_EQ(engine_.codecs()[0].name, config.decoders[0].payload_name); | 2148 EXPECT_EQ(engine_.codecs()[0].name, config.decoders[0].payload_name); |
2135 EXPECT_EQ(engine_.codecs()[0].id, config.decoders[0].payload_type); | 2149 EXPECT_EQ(engine_.codecs()[0].id, config.decoders[0].payload_type); |
2136 } | 2150 } |
2137 | 2151 |
2138 TEST_F(WebRtcVideoChannel2Test, SetRecvCodecsRejectUnsupportedCodec) { | 2152 TEST_F(WebRtcVideoChannel2Test, SetRecvCodecsRejectUnsupportedCodec) { |
2139 std::vector<VideoCodec> codecs; | 2153 cricket::VideoRecvParameters parameters; |
2140 codecs.push_back(kVp8Codec); | 2154 parameters.codecs.push_back(kVp8Codec); |
2141 codecs.push_back(VideoCodec(101, "WTF3", 640, 400, 30, 0)); | 2155 parameters.codecs.push_back(VideoCodec(101, "WTF3", 640, 400, 30, 0)); |
2142 EXPECT_FALSE(channel_->SetRecvCodecs(codecs)); | 2156 EXPECT_FALSE(channel_->SetRecvParameters(parameters)); |
2143 } | 2157 } |
2144 | 2158 |
2145 // TODO(pbos): Enable VP9 through external codec support | 2159 // TODO(pbos): Enable VP9 through external codec support |
2146 TEST_F(WebRtcVideoChannel2Test, | 2160 TEST_F(WebRtcVideoChannel2Test, |
2147 DISABLED_SetRecvCodecsAcceptsMultipleVideoCodecs) { | 2161 DISABLED_SetRecvCodecsAcceptsMultipleVideoCodecs) { |
2148 std::vector<VideoCodec> codecs; | 2162 cricket::VideoRecvParameters parameters; |
2149 codecs.push_back(kVp8Codec); | 2163 parameters.codecs.push_back(kVp8Codec); |
2150 codecs.push_back(kVp9Codec); | 2164 parameters.codecs.push_back(kVp9Codec); |
2151 EXPECT_TRUE(channel_->SetRecvCodecs(codecs)); | 2165 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); |
2152 } | 2166 } |
2153 | 2167 |
2154 TEST_F(WebRtcVideoChannel2Test, | 2168 TEST_F(WebRtcVideoChannel2Test, |
2155 DISABLED_SetRecvCodecsSetsFecForAllVideoCodecs) { | 2169 DISABLED_SetRecvCodecsSetsFecForAllVideoCodecs) { |
2156 std::vector<VideoCodec> codecs; | 2170 cricket::VideoRecvParameters parameters; |
2157 codecs.push_back(kVp8Codec); | 2171 parameters.codecs.push_back(kVp8Codec); |
2158 codecs.push_back(kVp9Codec); | 2172 parameters.codecs.push_back(kVp9Codec); |
2159 EXPECT_TRUE(channel_->SetRecvCodecs(codecs)); | 2173 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); |
2160 FAIL(); // TODO(pbos): Verify that the FEC parameters are set for all codecs. | 2174 FAIL(); // TODO(pbos): Verify that the FEC parameters are set for all codecs. |
2161 } | 2175 } |
2162 | 2176 |
2163 TEST_F(WebRtcVideoChannel2Test, SetRecvCodecsWithoutFecDisablesFec) { | 2177 TEST_F(WebRtcVideoChannel2Test, SetRecvCodecsWithoutFecDisablesFec) { |
2164 std::vector<VideoCodec> codecs; | 2178 cricket::VideoSendParameters send_parameters; |
2165 codecs.push_back(kVp8Codec); | 2179 send_parameters.codecs.push_back(kVp8Codec); |
2166 codecs.push_back(kUlpfecCodec); | 2180 send_parameters.codecs.push_back(kUlpfecCodec); |
2167 ASSERT_TRUE(channel_->SetSendCodecs(codecs)); | 2181 ASSERT_TRUE(channel_->SetSendParameters(send_parameters)); |
2168 | 2182 |
2169 FakeVideoReceiveStream* stream = AddRecvStream(); | 2183 FakeVideoReceiveStream* stream = AddRecvStream(); |
2170 webrtc::VideoReceiveStream::Config config = stream->GetConfig(); | 2184 webrtc::VideoReceiveStream::Config config = stream->GetConfig(); |
2171 | 2185 |
2172 EXPECT_EQ(kUlpfecCodec.id, config.rtp.fec.ulpfec_payload_type); | 2186 EXPECT_EQ(kUlpfecCodec.id, config.rtp.fec.ulpfec_payload_type); |
2173 | 2187 |
2174 codecs.pop_back(); | 2188 cricket::VideoRecvParameters recv_parameters; |
2175 ASSERT_TRUE(channel_->SetRecvCodecs(codecs)); | 2189 recv_parameters.codecs.push_back(kVp8Codec); |
| 2190 ASSERT_TRUE(channel_->SetRecvParameters(recv_parameters)); |
2176 stream = fake_call_->GetVideoReceiveStreams()[0]; | 2191 stream = fake_call_->GetVideoReceiveStreams()[0]; |
2177 ASSERT_TRUE(stream != NULL); | 2192 ASSERT_TRUE(stream != NULL); |
2178 config = stream->GetConfig(); | 2193 config = stream->GetConfig(); |
2179 EXPECT_EQ(-1, config.rtp.fec.ulpfec_payload_type) | 2194 EXPECT_EQ(-1, config.rtp.fec.ulpfec_payload_type) |
2180 << "SetSendCodec without FEC should disable current FEC."; | 2195 << "SetSendCodec without FEC should disable current FEC."; |
2181 } | 2196 } |
2182 | 2197 |
2183 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsRejectDuplicateFecPayloads) { | 2198 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsRejectDuplicateFecPayloads) { |
2184 std::vector<VideoCodec> codecs; | 2199 cricket::VideoRecvParameters parameters; |
2185 codecs.push_back(kVp8Codec); | 2200 parameters.codecs.push_back(kVp8Codec); |
2186 codecs.push_back(kRedCodec); | 2201 parameters.codecs.push_back(kRedCodec); |
2187 codecs[1].id = codecs[0].id; | 2202 parameters.codecs[1].id = parameters.codecs[0].id; |
2188 EXPECT_FALSE(channel_->SetRecvCodecs(codecs)); | 2203 EXPECT_FALSE(channel_->SetRecvParameters(parameters)); |
2189 } | 2204 } |
2190 | 2205 |
2191 TEST_F(WebRtcVideoChannel2Test, SetRecvCodecsRejectDuplicateCodecPayloads) { | 2206 TEST_F(WebRtcVideoChannel2Test, SetRecvCodecsRejectDuplicateCodecPayloads) { |
2192 std::vector<VideoCodec> codecs; | 2207 cricket::VideoRecvParameters parameters; |
2193 codecs.push_back(kVp8Codec); | 2208 parameters.codecs.push_back(kVp8Codec); |
2194 codecs.push_back(kVp9Codec); | 2209 parameters.codecs.push_back(kVp9Codec); |
2195 codecs[1].id = codecs[0].id; | 2210 parameters.codecs[1].id = parameters.codecs[0].id; |
2196 EXPECT_FALSE(channel_->SetRecvCodecs(codecs)); | 2211 EXPECT_FALSE(channel_->SetRecvParameters(parameters)); |
2197 } | 2212 } |
2198 | 2213 |
2199 TEST_F(WebRtcVideoChannel2Test, | 2214 TEST_F(WebRtcVideoChannel2Test, |
2200 SetRecvCodecsAcceptSameCodecOnMultiplePayloadTypes) { | 2215 SetRecvCodecsAcceptSameCodecOnMultiplePayloadTypes) { |
2201 std::vector<VideoCodec> codecs; | 2216 cricket::VideoRecvParameters parameters; |
2202 codecs.push_back(kVp8Codec); | 2217 parameters.codecs.push_back(kVp8Codec); |
2203 codecs.push_back(kVp8Codec); | 2218 parameters.codecs.push_back(kVp8Codec); |
2204 codecs[1].id += 1; | 2219 parameters.codecs[1].id += 1; |
2205 EXPECT_TRUE(channel_->SetRecvCodecs(codecs)); | 2220 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); |
2206 } | 2221 } |
2207 | 2222 |
2208 // Test that setting the same codecs but with a different order and preference | 2223 // Test that setting the same codecs but with a different order and preference |
2209 // doesn't result in the stream being recreated. | 2224 // doesn't result in the stream being recreated. |
2210 TEST_F(WebRtcVideoChannel2Test, | 2225 TEST_F(WebRtcVideoChannel2Test, |
2211 SetRecvCodecsDifferentOrderAndPreferenceDoesntRecreateStream) { | 2226 SetRecvCodecsDifferentOrderAndPreferenceDoesntRecreateStream) { |
2212 std::vector<VideoCodec> codecs1; | 2227 cricket::VideoRecvParameters parameters1; |
2213 codecs1.push_back(kVp8Codec); | 2228 parameters1.codecs.push_back(kVp8Codec); |
2214 codecs1.push_back(kRedCodec); | 2229 parameters1.codecs.push_back(kRedCodec); |
2215 EXPECT_TRUE(channel_->SetRecvCodecs(codecs1)); | 2230 EXPECT_TRUE(channel_->SetRecvParameters(parameters1)); |
2216 | 2231 |
2217 AddRecvStream(cricket::StreamParams::CreateLegacy(123)); | 2232 AddRecvStream(cricket::StreamParams::CreateLegacy(123)); |
2218 EXPECT_EQ(1, fake_call_->GetNumCreatedReceiveStreams()); | 2233 EXPECT_EQ(1, fake_call_->GetNumCreatedReceiveStreams()); |
2219 | 2234 |
2220 std::vector<VideoCodec> codecs2; | 2235 cricket::VideoRecvParameters parameters2; |
2221 codecs2.push_back(kRedCodec); | 2236 parameters2.codecs.push_back(kRedCodec); |
2222 codecs2.push_back(kVp8Codec); | 2237 parameters2.codecs.push_back(kVp8Codec); |
2223 codecs2[1].preference += 1; | 2238 parameters2.codecs[1].preference += 1; |
2224 EXPECT_TRUE(channel_->SetRecvCodecs(codecs2)); | 2239 EXPECT_TRUE(channel_->SetRecvParameters(parameters2)); |
2225 EXPECT_EQ(1, fake_call_->GetNumCreatedReceiveStreams()); | 2240 EXPECT_EQ(1, fake_call_->GetNumCreatedReceiveStreams()); |
2226 } | 2241 } |
2227 | 2242 |
2228 TEST_F(WebRtcVideoChannel2Test, SendStreamNotSendingByDefault) { | 2243 TEST_F(WebRtcVideoChannel2Test, SendStreamNotSendingByDefault) { |
2229 EXPECT_FALSE(AddSendStream()->IsSending()); | 2244 EXPECT_FALSE(AddSendStream()->IsSending()); |
2230 } | 2245 } |
2231 | 2246 |
2232 TEST_F(WebRtcVideoChannel2Test, ReceiveStreamReceivingByDefault) { | 2247 TEST_F(WebRtcVideoChannel2Test, ReceiveStreamReceivingByDefault) { |
2233 EXPECT_TRUE(AddRecvStream()->IsReceiving()); | 2248 EXPECT_TRUE(AddRecvStream()->IsReceiving()); |
2234 } | 2249 } |
(...skipping 19 matching lines...) Expand all Loading... |
2254 FakeVideoSendStream* new_stream = AddSendStream(); | 2269 FakeVideoSendStream* new_stream = AddSendStream(); |
2255 EXPECT_TRUE(new_stream->IsSending()) | 2270 EXPECT_TRUE(new_stream->IsSending()) |
2256 << "Send stream created after SetSend(true) not sending initially."; | 2271 << "Send stream created after SetSend(true) not sending initially."; |
2257 } | 2272 } |
2258 | 2273 |
2259 // This test verifies DSCP settings are properly applied on video media channel. | 2274 // This test verifies DSCP settings are properly applied on video media channel. |
2260 TEST_F(WebRtcVideoChannel2Test, TestSetDscpOptions) { | 2275 TEST_F(WebRtcVideoChannel2Test, TestSetDscpOptions) { |
2261 rtc::scoped_ptr<cricket::FakeNetworkInterface> network_interface( | 2276 rtc::scoped_ptr<cricket::FakeNetworkInterface> network_interface( |
2262 new cricket::FakeNetworkInterface); | 2277 new cricket::FakeNetworkInterface); |
2263 channel_->SetInterface(network_interface.get()); | 2278 channel_->SetInterface(network_interface.get()); |
2264 cricket::VideoOptions options; | 2279 cricket::VideoSendParameters parameters; |
2265 EXPECT_TRUE(channel_->SetOptions(options)); | 2280 EXPECT_TRUE(channel_->SetSendParameters(parameters)); |
2266 EXPECT_EQ(rtc::DSCP_NO_CHANGE, network_interface->dscp()); | 2281 EXPECT_EQ(rtc::DSCP_NO_CHANGE, network_interface->dscp()); |
2267 options.dscp.Set(true); | 2282 parameters.options.dscp.Set(true); |
2268 EXPECT_TRUE(channel_->SetOptions(options)); | 2283 EXPECT_TRUE(channel_->SetSendParameters(parameters)); |
2269 EXPECT_EQ(rtc::DSCP_AF41, network_interface->dscp()); | 2284 EXPECT_EQ(rtc::DSCP_AF41, network_interface->dscp()); |
2270 // Verify previous value is not modified if dscp option is not set. | 2285 // Verify previous value is not modified if dscp option is not set. |
2271 cricket::VideoOptions options1; | 2286 cricket::VideoSendParameters parameters1; |
2272 EXPECT_TRUE(channel_->SetOptions(options1)); | 2287 EXPECT_TRUE(channel_->SetSendParameters(parameters1)); |
2273 EXPECT_EQ(rtc::DSCP_AF41, network_interface->dscp()); | 2288 EXPECT_EQ(rtc::DSCP_AF41, network_interface->dscp()); |
2274 options.dscp.Set(false); | 2289 parameters1.options.dscp.Set(false); |
2275 EXPECT_TRUE(channel_->SetOptions(options)); | 2290 EXPECT_TRUE(channel_->SetSendParameters(parameters1)); |
2276 EXPECT_EQ(rtc::DSCP_DEFAULT, network_interface->dscp()); | 2291 EXPECT_EQ(rtc::DSCP_DEFAULT, network_interface->dscp()); |
2277 channel_->SetInterface(NULL); | 2292 channel_->SetInterface(NULL); |
2278 } | 2293 } |
2279 | 2294 |
2280 TEST_F(WebRtcVideoChannel2Test, OnReadyToSendSignalsNetworkState) { | 2295 TEST_F(WebRtcVideoChannel2Test, OnReadyToSendSignalsNetworkState) { |
2281 EXPECT_EQ(webrtc::kNetworkUp, fake_call_->GetNetworkState()); | 2296 EXPECT_EQ(webrtc::kNetworkUp, fake_call_->GetNetworkState()); |
2282 | 2297 |
2283 channel_->OnReadyToSend(false); | 2298 channel_->OnReadyToSend(false); |
2284 EXPECT_EQ(webrtc::kNetworkDown, fake_call_->GetNetworkState()); | 2299 EXPECT_EQ(webrtc::kNetworkDown, fake_call_->GetNetworkState()); |
2285 | 2300 |
2286 channel_->OnReadyToSend(true); | 2301 channel_->OnReadyToSend(true); |
2287 EXPECT_EQ(webrtc::kNetworkUp, fake_call_->GetNetworkState()); | 2302 EXPECT_EQ(webrtc::kNetworkUp, fake_call_->GetNetworkState()); |
2288 } | 2303 } |
2289 | 2304 |
2290 TEST_F(WebRtcVideoChannel2Test, GetStatsReportsSentCodecName) { | 2305 TEST_F(WebRtcVideoChannel2Test, GetStatsReportsSentCodecName) { |
2291 std::vector<cricket::VideoCodec> codecs; | 2306 cricket::VideoSendParameters parameters; |
2292 codecs.push_back(kVp8Codec); | 2307 parameters.codecs.push_back(kVp8Codec); |
2293 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); | 2308 EXPECT_TRUE(channel_->SetSendParameters(parameters)); |
2294 | 2309 |
2295 AddSendStream(); | 2310 AddSendStream(); |
2296 | 2311 |
2297 cricket::VideoMediaInfo info; | 2312 cricket::VideoMediaInfo info; |
2298 ASSERT_TRUE(channel_->GetStats(&info)); | 2313 ASSERT_TRUE(channel_->GetStats(&info)); |
2299 EXPECT_EQ(kVp8Codec.name, info.senders[0].codec_name); | 2314 EXPECT_EQ(kVp8Codec.name, info.senders[0].codec_name); |
2300 } | 2315 } |
2301 | 2316 |
2302 TEST_F(WebRtcVideoChannel2Test, GetStatsReportsCpuOveruseMetrics) { | 2317 TEST_F(WebRtcVideoChannel2Test, GetStatsReportsCpuOveruseMetrics) { |
2303 FakeVideoSendStream* stream = AddSendStream(); | 2318 FakeVideoSendStream* stream = AddSendStream(); |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2336 // Capture format VGA. | 2351 // Capture format VGA. |
2337 cricket::FakeVideoCapturer video_capturer_vga; | 2352 cricket::FakeVideoCapturer video_capturer_vga; |
2338 const std::vector<cricket::VideoFormat>* formats = | 2353 const std::vector<cricket::VideoFormat>* formats = |
2339 video_capturer_vga.GetSupportedFormats(); | 2354 video_capturer_vga.GetSupportedFormats(); |
2340 cricket::VideoFormat capture_format_vga = (*formats)[1]; | 2355 cricket::VideoFormat capture_format_vga = (*formats)[1]; |
2341 EXPECT_EQ(cricket::CS_RUNNING, video_capturer_vga.Start(capture_format_vga)); | 2356 EXPECT_EQ(cricket::CS_RUNNING, video_capturer_vga.Start(capture_format_vga)); |
2342 EXPECT_TRUE(channel_->SetCapturer(kSsrcs3[0], &video_capturer_vga)); | 2357 EXPECT_TRUE(channel_->SetCapturer(kSsrcs3[0], &video_capturer_vga)); |
2343 EXPECT_TRUE(video_capturer_vga.CaptureFrame()); | 2358 EXPECT_TRUE(video_capturer_vga.CaptureFrame()); |
2344 | 2359 |
2345 cricket::VideoCodec send_codec(100, "VP8", 640, 480, 30, 0); | 2360 cricket::VideoCodec send_codec(100, "VP8", 640, 480, 30, 0); |
2346 std::vector<cricket::VideoCodec> codecs; | 2361 cricket::VideoSendParameters parameters; |
2347 codecs.push_back(send_codec); | 2362 parameters.codecs.push_back(send_codec); |
2348 EXPECT_TRUE(channel_->SetSendCodecs(codecs)); | 2363 EXPECT_TRUE(channel_->SetSendParameters(parameters)); |
2349 EXPECT_TRUE(channel_->SetSend(true)); | 2364 EXPECT_TRUE(channel_->SetSend(true)); |
2350 | 2365 |
2351 // Verify that the CpuOveruseObserver is registered and trigger downgrade. | 2366 // Verify that the CpuOveruseObserver is registered and trigger downgrade. |
2352 cricket::VideoOptions options; | 2367 parameters.options.cpu_overuse_detection.Set(true); |
2353 options.cpu_overuse_detection.Set(true); | 2368 EXPECT_TRUE(channel_->SetSendParameters(parameters)); |
2354 EXPECT_TRUE(channel_->SetOptions(options)); | |
2355 | 2369 |
2356 // Trigger overuse. | 2370 // Trigger overuse. |
2357 ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size()); | 2371 ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size()); |
2358 webrtc::LoadObserver* overuse_callback = | 2372 webrtc::LoadObserver* overuse_callback = |
2359 fake_call_->GetVideoSendStreams().front()->GetConfig().overuse_callback; | 2373 fake_call_->GetVideoSendStreams().front()->GetConfig().overuse_callback; |
2360 ASSERT_TRUE(overuse_callback != NULL); | 2374 ASSERT_TRUE(overuse_callback != NULL); |
2361 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kOveruse); | 2375 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kOveruse); |
2362 | 2376 |
2363 // Capture format VGA -> adapt (OnCpuResolutionRequest downgrade) -> VGA/2. | 2377 // Capture format VGA -> adapt (OnCpuResolutionRequest downgrade) -> VGA/2. |
2364 EXPECT_TRUE(video_capturer_vga.CaptureFrame()); | 2378 EXPECT_TRUE(video_capturer_vga.CaptureFrame()); |
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2541 info.bw_estimations[0].target_enc_bitrate); | 2555 info.bw_estimations[0].target_enc_bitrate); |
2542 EXPECT_EQ(stats.media_bitrate_bps + stats2.media_bitrate_bps, | 2556 EXPECT_EQ(stats.media_bitrate_bps + stats2.media_bitrate_bps, |
2543 info.bw_estimations[0].actual_enc_bitrate); | 2557 info.bw_estimations[0].actual_enc_bitrate); |
2544 EXPECT_EQ(1 + 3 + 5 + 7, info.bw_estimations[0].transmit_bitrate) | 2558 EXPECT_EQ(1 + 3 + 5 + 7, info.bw_estimations[0].transmit_bitrate) |
2545 << "Bandwidth stats should take all streams into account."; | 2559 << "Bandwidth stats should take all streams into account."; |
2546 EXPECT_EQ(2 + 4 + 6 + 8, info.bw_estimations[0].retransmit_bitrate) | 2560 EXPECT_EQ(2 + 4 + 6 + 8, info.bw_estimations[0].retransmit_bitrate) |
2547 << "Bandwidth stats should take all streams into account."; | 2561 << "Bandwidth stats should take all streams into account."; |
2548 } | 2562 } |
2549 | 2563 |
2550 TEST_F(WebRtcVideoChannel2Test, DefaultReceiveStreamReconfiguresToUseRtx) { | 2564 TEST_F(WebRtcVideoChannel2Test, DefaultReceiveStreamReconfiguresToUseRtx) { |
2551 EXPECT_TRUE(channel_->SetSendCodecs(engine_.codecs())); | 2565 cricket::VideoSendParameters parameters; |
| 2566 parameters.codecs = engine_.codecs(); |
| 2567 EXPECT_TRUE(channel_->SetSendParameters(parameters)); |
2552 | 2568 |
2553 const std::vector<uint32> ssrcs = MAKE_VECTOR(kSsrcs1); | 2569 const std::vector<uint32> ssrcs = MAKE_VECTOR(kSsrcs1); |
2554 const std::vector<uint32> rtx_ssrcs = MAKE_VECTOR(kRtxSsrcs1); | 2570 const std::vector<uint32> rtx_ssrcs = MAKE_VECTOR(kRtxSsrcs1); |
2555 | 2571 |
2556 ASSERT_EQ(0u, fake_call_->GetVideoReceiveStreams().size()); | 2572 ASSERT_EQ(0u, fake_call_->GetVideoReceiveStreams().size()); |
2557 const size_t kDataLength = 12; | 2573 const size_t kDataLength = 12; |
2558 uint8_t data[kDataLength]; | 2574 uint8_t data[kDataLength]; |
2559 memset(data, 0, sizeof(data)); | 2575 memset(data, 0, sizeof(data)); |
2560 rtc::SetBE32(&data[8], ssrcs[0]); | 2576 rtc::SetBE32(&data[8], ssrcs[0]); |
2561 rtc::Buffer packet(data, kDataLength); | 2577 rtc::Buffer packet(data, kDataLength); |
(...skipping 10 matching lines...) Expand all Loading... |
2572 cricket::CreateSimWithRtxStreamParams("cname", ssrcs, rtx_ssrcs))); | 2588 cricket::CreateSimWithRtxStreamParams("cname", ssrcs, rtx_ssrcs))); |
2573 ASSERT_EQ(1u, fake_call_->GetVideoReceiveStreams().size()) | 2589 ASSERT_EQ(1u, fake_call_->GetVideoReceiveStreams().size()) |
2574 << "AddRecvStream should've reconfigured, not added a new receiver."; | 2590 << "AddRecvStream should've reconfigured, not added a new receiver."; |
2575 recv_stream = fake_call_->GetVideoReceiveStreams()[0]; | 2591 recv_stream = fake_call_->GetVideoReceiveStreams()[0]; |
2576 ASSERT_EQ(1u, recv_stream->GetConfig().rtp.rtx.size()); | 2592 ASSERT_EQ(1u, recv_stream->GetConfig().rtp.rtx.size()); |
2577 EXPECT_EQ(rtx_ssrcs[0], | 2593 EXPECT_EQ(rtx_ssrcs[0], |
2578 recv_stream->GetConfig().rtp.rtx.begin()->second.ssrc); | 2594 recv_stream->GetConfig().rtp.rtx.begin()->second.ssrc); |
2579 } | 2595 } |
2580 | 2596 |
2581 TEST_F(WebRtcVideoChannel2Test, RejectsAddingStreamsWithMissingSsrcsForRtx) { | 2597 TEST_F(WebRtcVideoChannel2Test, RejectsAddingStreamsWithMissingSsrcsForRtx) { |
2582 EXPECT_TRUE(channel_->SetSendCodecs(engine_.codecs())); | 2598 cricket::VideoSendParameters parameters; |
| 2599 parameters.codecs = engine_.codecs(); |
| 2600 EXPECT_TRUE(channel_->SetSendParameters(parameters)); |
2583 | 2601 |
2584 const std::vector<uint32> ssrcs = MAKE_VECTOR(kSsrcs1); | 2602 const std::vector<uint32> ssrcs = MAKE_VECTOR(kSsrcs1); |
2585 const std::vector<uint32> rtx_ssrcs = MAKE_VECTOR(kRtxSsrcs1); | 2603 const std::vector<uint32> rtx_ssrcs = MAKE_VECTOR(kRtxSsrcs1); |
2586 | 2604 |
2587 StreamParams sp = | 2605 StreamParams sp = |
2588 cricket::CreateSimWithRtxStreamParams("cname", ssrcs, rtx_ssrcs); | 2606 cricket::CreateSimWithRtxStreamParams("cname", ssrcs, rtx_ssrcs); |
2589 sp.ssrcs = ssrcs; // Without RTXs, this is the important part. | 2607 sp.ssrcs = ssrcs; // Without RTXs, this is the important part. |
2590 | 2608 |
2591 EXPECT_FALSE(channel_->AddSendStream(sp)); | 2609 EXPECT_FALSE(channel_->AddSendStream(sp)); |
2592 EXPECT_FALSE(channel_->AddRecvStream(sp)); | 2610 EXPECT_FALSE(channel_->AddRecvStream(sp)); |
2593 } | 2611 } |
2594 | 2612 |
2595 TEST_F(WebRtcVideoChannel2Test, RejectsAddingStreamsWithOverlappingRtxSsrcs) { | 2613 TEST_F(WebRtcVideoChannel2Test, RejectsAddingStreamsWithOverlappingRtxSsrcs) { |
2596 EXPECT_TRUE(channel_->SetSendCodecs(engine_.codecs())); | 2614 cricket::VideoSendParameters parameters; |
| 2615 parameters.codecs = engine_.codecs(); |
| 2616 EXPECT_TRUE(channel_->SetSendParameters(parameters)); |
2597 | 2617 |
2598 const std::vector<uint32> ssrcs = MAKE_VECTOR(kSsrcs1); | 2618 const std::vector<uint32> ssrcs = MAKE_VECTOR(kSsrcs1); |
2599 const std::vector<uint32> rtx_ssrcs = MAKE_VECTOR(kRtxSsrcs1); | 2619 const std::vector<uint32> rtx_ssrcs = MAKE_VECTOR(kRtxSsrcs1); |
2600 | 2620 |
2601 StreamParams sp = | 2621 StreamParams sp = |
2602 cricket::CreateSimWithRtxStreamParams("cname", ssrcs, rtx_ssrcs); | 2622 cricket::CreateSimWithRtxStreamParams("cname", ssrcs, rtx_ssrcs); |
2603 | 2623 |
2604 EXPECT_TRUE(channel_->AddSendStream(sp)); | 2624 EXPECT_TRUE(channel_->AddSendStream(sp)); |
2605 EXPECT_TRUE(channel_->AddRecvStream(sp)); | 2625 EXPECT_TRUE(channel_->AddRecvStream(sp)); |
2606 | 2626 |
2607 // The RTX SSRC is already used in previous streams, using it should fail. | 2627 // The RTX SSRC is already used in previous streams, using it should fail. |
2608 sp = cricket::StreamParams::CreateLegacy(rtx_ssrcs[0]); | 2628 sp = cricket::StreamParams::CreateLegacy(rtx_ssrcs[0]); |
2609 EXPECT_FALSE(channel_->AddSendStream(sp)); | 2629 EXPECT_FALSE(channel_->AddSendStream(sp)); |
2610 EXPECT_FALSE(channel_->AddRecvStream(sp)); | 2630 EXPECT_FALSE(channel_->AddRecvStream(sp)); |
2611 | 2631 |
2612 // After removing the original stream this should be fine to add (makes sure | 2632 // After removing the original stream this should be fine to add (makes sure |
2613 // that RTX ssrcs are not forever taken). | 2633 // that RTX ssrcs are not forever taken). |
2614 EXPECT_TRUE(channel_->RemoveSendStream(ssrcs[0])); | 2634 EXPECT_TRUE(channel_->RemoveSendStream(ssrcs[0])); |
2615 EXPECT_TRUE(channel_->RemoveRecvStream(ssrcs[0])); | 2635 EXPECT_TRUE(channel_->RemoveRecvStream(ssrcs[0])); |
2616 EXPECT_TRUE(channel_->AddSendStream(sp)); | 2636 EXPECT_TRUE(channel_->AddSendStream(sp)); |
2617 EXPECT_TRUE(channel_->AddRecvStream(sp)); | 2637 EXPECT_TRUE(channel_->AddRecvStream(sp)); |
2618 } | 2638 } |
2619 | 2639 |
2620 TEST_F(WebRtcVideoChannel2Test, | 2640 TEST_F(WebRtcVideoChannel2Test, |
2621 RejectsAddingStreamsWithOverlappingSimulcastSsrcs) { | 2641 RejectsAddingStreamsWithOverlappingSimulcastSsrcs) { |
2622 static const uint32 kFirstStreamSsrcs[] = {1, 2, 3}; | 2642 static const uint32 kFirstStreamSsrcs[] = {1, 2, 3}; |
2623 static const uint32 kOverlappingStreamSsrcs[] = {4, 3, 5}; | 2643 static const uint32 kOverlappingStreamSsrcs[] = {4, 3, 5}; |
2624 EXPECT_TRUE(channel_->SetSendCodecs(engine_.codecs())); | 2644 cricket::VideoSendParameters parameters; |
| 2645 parameters.codecs = engine_.codecs(); |
| 2646 EXPECT_TRUE(channel_->SetSendParameters(parameters)); |
2625 | 2647 |
2626 StreamParams sp = | 2648 StreamParams sp = |
2627 cricket::CreateSimStreamParams("cname", MAKE_VECTOR(kFirstStreamSsrcs)); | 2649 cricket::CreateSimStreamParams("cname", MAKE_VECTOR(kFirstStreamSsrcs)); |
2628 | 2650 |
2629 EXPECT_TRUE(channel_->AddSendStream(sp)); | 2651 EXPECT_TRUE(channel_->AddSendStream(sp)); |
2630 EXPECT_TRUE(channel_->AddRecvStream(sp)); | 2652 EXPECT_TRUE(channel_->AddRecvStream(sp)); |
2631 | 2653 |
2632 // One of the SSRCs is already used in previous streams, using it should fail. | 2654 // One of the SSRCs is already used in previous streams, using it should fail. |
2633 sp = cricket::CreateSimStreamParams("cname", | 2655 sp = cricket::CreateSimStreamParams("cname", |
2634 MAKE_VECTOR(kOverlappingStreamSsrcs)); | 2656 MAKE_VECTOR(kOverlappingStreamSsrcs)); |
2635 EXPECT_FALSE(channel_->AddSendStream(sp)); | 2657 EXPECT_FALSE(channel_->AddSendStream(sp)); |
2636 EXPECT_FALSE(channel_->AddRecvStream(sp)); | 2658 EXPECT_FALSE(channel_->AddRecvStream(sp)); |
2637 | 2659 |
2638 // After removing the original stream this should be fine to add (makes sure | 2660 // After removing the original stream this should be fine to add (makes sure |
2639 // that RTX ssrcs are not forever taken). | 2661 // that RTX ssrcs are not forever taken). |
2640 EXPECT_TRUE(channel_->RemoveSendStream(kFirstStreamSsrcs[0])); | 2662 EXPECT_TRUE(channel_->RemoveSendStream(kFirstStreamSsrcs[0])); |
2641 EXPECT_TRUE(channel_->RemoveRecvStream(kFirstStreamSsrcs[0])); | 2663 EXPECT_TRUE(channel_->RemoveRecvStream(kFirstStreamSsrcs[0])); |
2642 EXPECT_TRUE(channel_->AddSendStream(sp)); | 2664 EXPECT_TRUE(channel_->AddSendStream(sp)); |
2643 EXPECT_TRUE(channel_->AddRecvStream(sp)); | 2665 EXPECT_TRUE(channel_->AddRecvStream(sp)); |
2644 } | 2666 } |
2645 | 2667 |
2646 TEST_F(WebRtcVideoChannel2Test, ReportsSsrcGroupsInStats) { | 2668 TEST_F(WebRtcVideoChannel2Test, ReportsSsrcGroupsInStats) { |
2647 EXPECT_TRUE(channel_->SetSendCodecs(engine_.codecs())); | 2669 cricket::VideoSendParameters parameters; |
| 2670 parameters.codecs = engine_.codecs(); |
| 2671 EXPECT_TRUE(channel_->SetSendParameters(parameters)); |
2648 | 2672 |
2649 static const uint32_t kSenderSsrcs[] = {4, 7, 10}; | 2673 static const uint32_t kSenderSsrcs[] = {4, 7, 10}; |
2650 static const uint32_t kSenderRtxSsrcs[] = {5, 8, 11}; | 2674 static const uint32_t kSenderRtxSsrcs[] = {5, 8, 11}; |
2651 | 2675 |
2652 StreamParams sender_sp = cricket::CreateSimWithRtxStreamParams( | 2676 StreamParams sender_sp = cricket::CreateSimWithRtxStreamParams( |
2653 "cname", MAKE_VECTOR(kSenderSsrcs), MAKE_VECTOR(kSenderRtxSsrcs)); | 2677 "cname", MAKE_VECTOR(kSenderSsrcs), MAKE_VECTOR(kSenderRtxSsrcs)); |
2654 | 2678 |
2655 EXPECT_TRUE(channel_->AddSendStream(sender_sp)); | 2679 EXPECT_TRUE(channel_->AddSendStream(sender_sp)); |
2656 | 2680 |
2657 static const uint32_t kReceiverSsrcs[] = {3}; | 2681 static const uint32_t kReceiverSsrcs[] = {3}; |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2691 // Report no codec name for unknown playload types. | 2715 // Report no codec name for unknown playload types. |
2692 stats.current_payload_type = 3; | 2716 stats.current_payload_type = 3; |
2693 stream->SetStats(stats); | 2717 stream->SetStats(stats); |
2694 ASSERT_TRUE(channel_->GetStats(&info)); | 2718 ASSERT_TRUE(channel_->GetStats(&info)); |
2695 EXPECT_STREQ("", info.receivers[0].codec_name.c_str()); | 2719 EXPECT_STREQ("", info.receivers[0].codec_name.c_str()); |
2696 } | 2720 } |
2697 | 2721 |
2698 void WebRtcVideoChannel2Test::TestReceiveUnsignalledSsrcPacket( | 2722 void WebRtcVideoChannel2Test::TestReceiveUnsignalledSsrcPacket( |
2699 uint8_t payload_type, | 2723 uint8_t payload_type, |
2700 bool expect_created_receive_stream) { | 2724 bool expect_created_receive_stream) { |
2701 std::vector<VideoCodec> codecs(engine_.codecs()); | 2725 cricket::VideoRecvParameters parameters; |
| 2726 parameters.codecs = engine_.codecs(); |
2702 // Add a RED RTX codec. | 2727 // Add a RED RTX codec. |
2703 VideoCodec red_rtx_codec = | 2728 VideoCodec red_rtx_codec = |
2704 VideoCodec::CreateRtxCodec(kRedRtxPayloadType, kDefaultRedPlType); | 2729 VideoCodec::CreateRtxCodec(kRedRtxPayloadType, kDefaultRedPlType); |
2705 codecs.push_back(red_rtx_codec); | 2730 parameters.codecs.push_back(red_rtx_codec); |
2706 EXPECT_TRUE(channel_->SetRecvCodecs(codecs)); | 2731 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); |
2707 | 2732 |
2708 ASSERT_EQ(0u, fake_call_->GetVideoReceiveStreams().size()); | 2733 ASSERT_EQ(0u, fake_call_->GetVideoReceiveStreams().size()); |
2709 const size_t kDataLength = 12; | 2734 const size_t kDataLength = 12; |
2710 uint8_t data[kDataLength]; | 2735 uint8_t data[kDataLength]; |
2711 memset(data, 0, sizeof(data)); | 2736 memset(data, 0, sizeof(data)); |
2712 | 2737 |
2713 rtc::Set8(data, 1, payload_type); | 2738 rtc::Set8(data, 1, payload_type); |
2714 rtc::SetBE32(&data[8], kIncomingUnsignalledSsrc); | 2739 rtc::SetBE32(&data[8], kIncomingUnsignalledSsrc); |
2715 rtc::Buffer packet(data, kDataLength); | 2740 rtc::Buffer packet(data, kDataLength); |
2716 rtc::PacketTime packet_time; | 2741 rtc::PacketTime packet_time; |
(...skipping 25 matching lines...) Expand all Loading... |
2742 TEST_F(WebRtcVideoChannel2Test, UlpfecPacketDoesntCreateUnsignalledStream) { | 2767 TEST_F(WebRtcVideoChannel2Test, UlpfecPacketDoesntCreateUnsignalledStream) { |
2743 TestReceiveUnsignalledSsrcPacket(kDefaultUlpfecType, false); | 2768 TestReceiveUnsignalledSsrcPacket(kDefaultUlpfecType, false); |
2744 } | 2769 } |
2745 | 2770 |
2746 TEST_F(WebRtcVideoChannel2Test, RedRtxPacketDoesntCreateUnsignalledStream) { | 2771 TEST_F(WebRtcVideoChannel2Test, RedRtxPacketDoesntCreateUnsignalledStream) { |
2747 TestReceiveUnsignalledSsrcPacket(kRedRtxPayloadType, false); | 2772 TestReceiveUnsignalledSsrcPacket(kRedRtxPayloadType, false); |
2748 } | 2773 } |
2749 | 2774 |
2750 void WebRtcVideoChannel2Test::TestReceiverLocalSsrcConfiguration( | 2775 void WebRtcVideoChannel2Test::TestReceiverLocalSsrcConfiguration( |
2751 bool receiver_first) { | 2776 bool receiver_first) { |
2752 EXPECT_TRUE(channel_->SetSendCodecs(engine_.codecs())); | 2777 cricket::VideoSendParameters parameters; |
| 2778 parameters.codecs = engine_.codecs(); |
| 2779 EXPECT_TRUE(channel_->SetSendParameters(parameters)); |
2753 | 2780 |
2754 const uint32_t kSenderSsrc = 0xC0FFEE; | 2781 const uint32_t kSenderSsrc = 0xC0FFEE; |
2755 const uint32_t kReceiverSsrc = 0x4711; | 2782 const uint32_t kReceiverSsrc = 0x4711; |
2756 | 2783 |
2757 if (receiver_first) { | 2784 if (receiver_first) { |
2758 AddRecvStream(StreamParams::CreateLegacy(kReceiverSsrc)); | 2785 AddRecvStream(StreamParams::CreateLegacy(kReceiverSsrc)); |
2759 std::vector<FakeVideoReceiveStream*> receive_streams = | 2786 std::vector<FakeVideoReceiveStream*> receive_streams = |
2760 fake_call_->GetVideoReceiveStreams(); | 2787 fake_call_->GetVideoReceiveStreams(); |
2761 ASSERT_EQ(1u, receive_streams.size()); | 2788 ASSERT_EQ(1u, receive_streams.size()); |
2762 // Bogus local SSRC when we have no sender. | 2789 // Bogus local SSRC when we have no sender. |
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2950 DCHECK(fake_call_ == NULL); | 2977 DCHECK(fake_call_ == NULL); |
2951 fake_call_ = new FakeCall(config); | 2978 fake_call_ = new FakeCall(config); |
2952 return fake_call_; | 2979 return fake_call_; |
2953 } | 2980 } |
2954 | 2981 |
2955 void VerifySimulcastSettings(const VideoCodec& codec, | 2982 void VerifySimulcastSettings(const VideoCodec& codec, |
2956 VideoOptions::HighestBitrate bitrate_mode, | 2983 VideoOptions::HighestBitrate bitrate_mode, |
2957 size_t num_configured_streams, | 2984 size_t num_configured_streams, |
2958 size_t expected_num_streams, | 2985 size_t expected_num_streams, |
2959 SimulcastBitrateMode simulcast_bitrate_mode) { | 2986 SimulcastBitrateMode simulcast_bitrate_mode) { |
2960 cricket::VideoOptions options; | 2987 cricket::VideoSendParameters parameters; |
2961 options.video_highest_bitrate.Set(bitrate_mode); | 2988 parameters.options.video_highest_bitrate.Set(bitrate_mode); |
2962 EXPECT_TRUE(channel_->SetOptions(options)); | 2989 parameters.codecs.push_back(codec); |
2963 | 2990 ASSERT_TRUE(channel_->SetSendParameters(parameters)); |
2964 std::vector<VideoCodec> codecs; | |
2965 codecs.push_back(codec); | |
2966 ASSERT_TRUE(channel_->SetSendCodecs(codecs)); | |
2967 | 2991 |
2968 std::vector<uint32> ssrcs = MAKE_VECTOR(kSsrcs3); | 2992 std::vector<uint32> ssrcs = MAKE_VECTOR(kSsrcs3); |
2969 DCHECK(num_configured_streams <= ssrcs.size()); | 2993 DCHECK(num_configured_streams <= ssrcs.size()); |
2970 ssrcs.resize(num_configured_streams); | 2994 ssrcs.resize(num_configured_streams); |
2971 | 2995 |
2972 FakeVideoSendStream* stream = | 2996 FakeVideoSendStream* stream = |
2973 AddSendStream(CreateSimStreamParams("cname", ssrcs)); | 2997 AddSendStream(CreateSimStreamParams("cname", ssrcs)); |
2974 // Send a full-size frame to trigger a stream reconfiguration to use all | 2998 // Send a full-size frame to trigger a stream reconfiguration to use all |
2975 // expected simulcast layers. | 2999 // expected simulcast layers. |
2976 cricket::FakeVideoCapturer capturer; | 3000 cricket::FakeVideoCapturer capturer; |
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3190 // Ensures that the correct settings are applied to the codec when two temporal | 3214 // Ensures that the correct settings are applied to the codec when two temporal |
3191 // layer screencasting is enabled, and that the correct simulcast settings are | 3215 // layer screencasting is enabled, and that the correct simulcast settings are |
3192 // reapplied when disabling screencasting. | 3216 // reapplied when disabling screencasting. |
3193 TEST_F(WebRtcVideoChannel2SimulcastTest, | 3217 TEST_F(WebRtcVideoChannel2SimulcastTest, |
3194 DISABLED_TwoTemporalLayerScreencastSettings) { | 3218 DISABLED_TwoTemporalLayerScreencastSettings) { |
3195 // TODO(pbos): Implement. | 3219 // TODO(pbos): Implement. |
3196 FAIL() << "Not implemented."; | 3220 FAIL() << "Not implemented."; |
3197 } | 3221 } |
3198 | 3222 |
3199 } // namespace cricket | 3223 } // namespace cricket |
OLD | NEW |