Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(13)

Side by Side Diff: webrtc/media/engine/webrtcvideoengine2_unittest.cc

Issue 1766653002: Replace SetCapturer and SetCaptureDevice by SetSource. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Make SetSource tolerate unknown ssrc and source == NULL. Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2004 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2004 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after
233 SetUpForExternalEncoderFactory(&encoder_factory, parameters.codecs)); 233 SetUpForExternalEncoderFactory(&encoder_factory, parameters.codecs));
234 EXPECT_TRUE(channel->AddSendStream(StreamParams::CreateLegacy(kSsrc))); 234 EXPECT_TRUE(channel->AddSendStream(StreamParams::CreateLegacy(kSsrc)));
235 235
236 // Add CVO extension. 236 // Add CVO extension.
237 const int id = 1; 237 const int id = 1;
238 parameters.extensions.push_back( 238 parameters.extensions.push_back(
239 cricket::RtpHeaderExtension(kRtpVideoRotationHeaderExtension, id)); 239 cricket::RtpHeaderExtension(kRtpVideoRotationHeaderExtension, id));
240 EXPECT_TRUE(channel->SetSendParameters(parameters)); 240 EXPECT_TRUE(channel->SetSendParameters(parameters));
241 241
242 // Set capturer. 242 // Set capturer.
243 EXPECT_TRUE(channel->SetCapturer(kSsrc, &capturer)); 243 channel->SetSource(kSsrc, &capturer);
244 244
245 // Verify capturer has turned off applying rotation. 245 // Verify capturer has turned off applying rotation.
246 EXPECT_FALSE(capturer.GetApplyRotation()); 246 EXPECT_FALSE(capturer.GetApplyRotation());
247 247
248 // Verify removing header extension turns on applying rotation. 248 // Verify removing header extension turns on applying rotation.
249 parameters.extensions.clear(); 249 parameters.extensions.clear();
250 EXPECT_TRUE(channel->SetSendParameters(parameters)); 250 EXPECT_TRUE(channel->SetSendParameters(parameters));
251 EXPECT_TRUE(capturer.GetApplyRotation()); 251 EXPECT_TRUE(capturer.GetApplyRotation());
252 } 252 }
253 253
(...skipping 10 matching lines...) Expand all
264 std::unique_ptr<VideoMediaChannel> channel( 264 std::unique_ptr<VideoMediaChannel> channel(
265 SetUpForExternalEncoderFactory(&encoder_factory, parameters.codecs)); 265 SetUpForExternalEncoderFactory(&encoder_factory, parameters.codecs));
266 // Add CVO extension. 266 // Add CVO extension.
267 const int id = 1; 267 const int id = 1;
268 parameters.extensions.push_back( 268 parameters.extensions.push_back(
269 cricket::RtpHeaderExtension(kRtpVideoRotationHeaderExtension, id)); 269 cricket::RtpHeaderExtension(kRtpVideoRotationHeaderExtension, id));
270 EXPECT_TRUE(channel->SetSendParameters(parameters)); 270 EXPECT_TRUE(channel->SetSendParameters(parameters));
271 EXPECT_TRUE(channel->AddSendStream(StreamParams::CreateLegacy(kSsrc))); 271 EXPECT_TRUE(channel->AddSendStream(StreamParams::CreateLegacy(kSsrc)));
272 272
273 // Set capturer. 273 // Set capturer.
274 EXPECT_TRUE(channel->SetCapturer(kSsrc, &capturer)); 274 channel->SetSource(kSsrc, &capturer);
275 275
276 // Verify capturer has turned off applying rotation. 276 // Verify capturer has turned off applying rotation.
277 EXPECT_FALSE(capturer.GetApplyRotation()); 277 EXPECT_FALSE(capturer.GetApplyRotation());
278 } 278 }
279 279
280 TEST_F(WebRtcVideoEngine2Test, CVOSetHeaderExtensionAfterCapturer) { 280 TEST_F(WebRtcVideoEngine2Test, CVOSetHeaderExtensionAfterCapturer) {
281 cricket::FakeVideoCapturer capturer; 281 cricket::FakeVideoCapturer capturer;
282 282
283 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; 283 cricket::FakeWebRtcVideoEncoderFactory encoder_factory;
284 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecVP8, "VP8"); 284 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecVP8, "VP8");
285 cricket::VideoSendParameters parameters; 285 cricket::VideoSendParameters parameters;
286 parameters.codecs.push_back(kVp8Codec); 286 parameters.codecs.push_back(kVp8Codec);
287 287
288 std::unique_ptr<VideoMediaChannel> channel( 288 std::unique_ptr<VideoMediaChannel> channel(
289 SetUpForExternalEncoderFactory(&encoder_factory, parameters.codecs)); 289 SetUpForExternalEncoderFactory(&encoder_factory, parameters.codecs));
290 EXPECT_TRUE(channel->AddSendStream(StreamParams::CreateLegacy(kSsrc))); 290 EXPECT_TRUE(channel->AddSendStream(StreamParams::CreateLegacy(kSsrc)));
291 291
292 // Set capturer. 292 // Set capturer.
293 EXPECT_TRUE(channel->SetCapturer(kSsrc, &capturer)); 293 channel->SetSource(kSsrc, &capturer);
294 294
295 // Add CVO extension. 295 // Add CVO extension.
296 const int id = 1; 296 const int id = 1;
297 parameters.extensions.push_back( 297 parameters.extensions.push_back(
298 cricket::RtpHeaderExtension(kRtpVideoRotationHeaderExtension, id)); 298 cricket::RtpHeaderExtension(kRtpVideoRotationHeaderExtension, id));
299 EXPECT_TRUE(channel->SetSendParameters(parameters)); 299 EXPECT_TRUE(channel->SetSendParameters(parameters));
300 300
301 // Verify capturer has turned off applying rotation. 301 // Verify capturer has turned off applying rotation.
302 EXPECT_FALSE(capturer.GetApplyRotation()); 302 EXPECT_FALSE(capturer.GetApplyRotation());
303 303
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
337 337
338 std::unique_ptr<VideoMediaChannel> channel( 338 std::unique_ptr<VideoMediaChannel> channel(
339 SetUpForExternalEncoderFactory(&encoder_factory, parameters.codecs)); 339 SetUpForExternalEncoderFactory(&encoder_factory, parameters.codecs));
340 340
341 EXPECT_TRUE( 341 EXPECT_TRUE(
342 channel->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc))); 342 channel->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc)));
343 ASSERT_EQ(1u, encoder_factory.encoders().size()); 343 ASSERT_EQ(1u, encoder_factory.encoders().size());
344 EXPECT_TRUE(channel->SetSend(true)); 344 EXPECT_TRUE(channel->SetSend(true));
345 345
346 cricket::FakeVideoCapturer capturer; 346 cricket::FakeVideoCapturer capturer;
347 EXPECT_TRUE(channel->SetCapturer(kSsrc, &capturer)); 347 channel->SetSource(kSsrc, &capturer);
348 EXPECT_EQ(cricket::CS_RUNNING, 348 EXPECT_EQ(cricket::CS_RUNNING,
349 capturer.Start(capturer.GetSupportedFormats()->front())); 349 capturer.Start(capturer.GetSupportedFormats()->front()));
350 EXPECT_TRUE(capturer.CaptureFrame()); 350 EXPECT_TRUE(capturer.CaptureFrame());
351 EXPECT_TRUE_WAIT(encoder_factory.encoders()[0]->GetNumEncodedFrames() > 0, 351 EXPECT_TRUE_WAIT(encoder_factory.encoders()[0]->GetNumEncodedFrames() > 0,
352 kTimeout); 352 kTimeout);
353 353
354 // Sending one frame will have reallocated the encoder since input size 354 // Sending one frame will have reallocated the encoder since input size
355 // changes from a small default to the actual frame width/height. 355 // changes from a small default to the actual frame width/height.
356 int num_created_encoders = encoder_factory.GetNumCreatedEncoders(); 356 int num_created_encoders = encoder_factory.GetNumCreatedEncoders();
357 EXPECT_EQ(num_created_encoders, 2); 357 EXPECT_EQ(num_created_encoders, 2);
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
424 424
425 FakeCall* fake_call = new FakeCall(webrtc::Call::Config()); 425 FakeCall* fake_call = new FakeCall(webrtc::Call::Config());
426 call_.reset(fake_call); 426 call_.reset(fake_call);
427 std::unique_ptr<VideoMediaChannel> channel( 427 std::unique_ptr<VideoMediaChannel> channel(
428 SetUpForExternalEncoderFactory(&encoder_factory, codecs)); 428 SetUpForExternalEncoderFactory(&encoder_factory, codecs));
429 429
430 EXPECT_TRUE( 430 EXPECT_TRUE(
431 channel->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc))); 431 channel->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc)));
432 432
433 FakeVideoCapturer capturer; 433 FakeVideoCapturer capturer;
434 EXPECT_TRUE(channel->SetCapturer(kSsrc, &capturer)); 434 channel->SetSource(kSsrc, &capturer);
435 capturer.Start(cricket::VideoFormat(1280, 720, 435 capturer.Start(cricket::VideoFormat(1280, 720,
436 cricket::VideoFormat::FpsToInterval(60), 436 cricket::VideoFormat::FpsToInterval(60),
437 cricket::FOURCC_I420)); 437 cricket::FOURCC_I420));
438 channel->SetSend(true); 438 channel->SetSend(true);
439 439
440 FakeVideoSendStream* stream = fake_call->GetVideoSendStreams()[0]; 440 FakeVideoSendStream* stream = fake_call->GetVideoSendStreams()[0];
441 441
442 EXPECT_TRUE(capturer.CaptureFrame()); 442 EXPECT_TRUE(capturer.CaptureFrame());
443 int64_t last_timestamp = stream->GetLastTimestamp(); 443 int64_t last_timestamp = stream->GetLastTimestamp();
444 for (int i = 0; i < 10; i++) { 444 for (int i = 0; i < 10; i++) {
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
486 call_.reset(fake_call); 486 call_.reset(fake_call);
487 std::unique_ptr<VideoMediaChannel> channel( 487 std::unique_ptr<VideoMediaChannel> channel(
488 SetUpForExternalEncoderFactory(&encoder_factory, codecs)); 488 SetUpForExternalEncoderFactory(&encoder_factory, codecs));
489 489
490 EXPECT_TRUE( 490 EXPECT_TRUE(
491 channel->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc))); 491 channel->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc)));
492 channel->SetSend(true); 492 channel->SetSend(true);
493 FakeVideoSendStream* stream = fake_call->GetVideoSendStreams()[0]; 493 FakeVideoSendStream* stream = fake_call->GetVideoSendStreams()[0];
494 494
495 FakeVideoCapturer capturer1; 495 FakeVideoCapturer capturer1;
496 EXPECT_TRUE(channel->SetCapturer(kSsrc, &capturer1)); 496 channel->SetSource(kSsrc, &capturer1);
497 497
498 cricket::CapturedFrame frame; 498 cricket::CapturedFrame frame;
499 frame.width = 1280; 499 frame.width = 1280;
500 frame.height = 720; 500 frame.height = 720;
501 frame.fourcc = cricket::FOURCC_I420; 501 frame.fourcc = cricket::FOURCC_I420;
502 frame.data_size = frame.width * frame.height + 502 frame.data_size = frame.width * frame.height +
503 2 * ((frame.width + 1) / 2) * ((frame.height + 1) / 2); 503 2 * ((frame.width + 1) / 2) * ((frame.height + 1) / 2);
504 std::unique_ptr<char[]> data(new char[frame.data_size]); 504 std::unique_ptr<char[]> data(new char[frame.data_size]);
505 frame.data = data.get(); 505 frame.data = data.get();
506 memset(frame.data, 1, frame.data_size); 506 memset(frame.data, 1, frame.data_size);
507 const int kInitialTimestamp = 123456; 507 const int kInitialTimestamp = 123456;
508 frame.time_stamp = kInitialTimestamp; 508 frame.time_stamp = kInitialTimestamp;
509 509
510 // Deliver initial frame. 510 // Deliver initial frame.
511 capturer1.SignalCapturedFrame(&frame); 511 capturer1.SignalCapturedFrame(&frame);
512 // Deliver next frame 1 second later. 512 // Deliver next frame 1 second later.
513 frame.time_stamp += rtc::kNumNanosecsPerSec; 513 frame.time_stamp += rtc::kNumNanosecsPerSec;
514 rtc::Thread::Current()->SleepMs(1000); 514 rtc::Thread::Current()->SleepMs(1000);
515 capturer1.SignalCapturedFrame(&frame); 515 capturer1.SignalCapturedFrame(&frame);
516 516
517 int64_t capturer1_last_timestamp = stream->GetLastTimestamp(); 517 int64_t capturer1_last_timestamp = stream->GetLastTimestamp();
518 // Reset input source, should still be continuous even though input-frame 518 // Reset input source, should still be continuous even though input-frame
519 // timestamp is less than before. 519 // timestamp is less than before.
520 FakeVideoCapturer capturer2; 520 FakeVideoCapturer capturer2;
521 EXPECT_TRUE(channel->SetCapturer(kSsrc, &capturer2)); 521 channel->SetSource(kSsrc, &capturer2);
522 522
523 rtc::Thread::Current()->SleepMs(1); 523 rtc::Thread::Current()->SleepMs(1);
524 // Deliver with a timestamp (10 seconds) before the previous initial one, 524 // Deliver with a timestamp (10 seconds) before the previous initial one,
525 // these should not be related at all anymore and it should still work fine. 525 // these should not be related at all anymore and it should still work fine.
526 frame.time_stamp = kInitialTimestamp - 10000; 526 frame.time_stamp = kInitialTimestamp - 10000;
527 capturer2.SignalCapturedFrame(&frame); 527 capturer2.SignalCapturedFrame(&frame);
528 528
529 // New timestamp should be at least 1ms in the future and not old. 529 // New timestamp should be at least 1ms in the future and not old.
530 EXPECT_GT(stream->GetLastTimestamp(), capturer1_last_timestamp); 530 EXPECT_GT(stream->GetLastTimestamp(), capturer1_last_timestamp);
531 531
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
571 std::unique_ptr<VideoMediaChannel> channel( 571 std::unique_ptr<VideoMediaChannel> channel(
572 SetUpForExternalEncoderFactory(&encoder_factory, codecs)); 572 SetUpForExternalEncoderFactory(&encoder_factory, codecs));
573 573
574 std::vector<uint32_t> ssrcs = MAKE_VECTOR(kSsrcs3); 574 std::vector<uint32_t> ssrcs = MAKE_VECTOR(kSsrcs3);
575 575
576 EXPECT_TRUE( 576 EXPECT_TRUE(
577 channel->AddSendStream(CreateSimStreamParams("cname", ssrcs))); 577 channel->AddSendStream(CreateSimStreamParams("cname", ssrcs)));
578 EXPECT_TRUE(channel->SetSend(true)); 578 EXPECT_TRUE(channel->SetSend(true));
579 579
580 cricket::FakeVideoCapturer capturer; 580 cricket::FakeVideoCapturer capturer;
581 EXPECT_TRUE(channel->SetCapturer(ssrcs.front(), &capturer)); 581 channel->SetSource(ssrcs.front(), &capturer);
582 EXPECT_EQ(cricket::CS_RUNNING, 582 EXPECT_EQ(cricket::CS_RUNNING,
583 capturer.Start(capturer.GetSupportedFormats()->front())); 583 capturer.Start(capturer.GetSupportedFormats()->front()));
584 EXPECT_TRUE(capturer.CaptureFrame()); 584 EXPECT_TRUE(capturer.CaptureFrame());
585 585
586 EXPECT_GT(encoder_factory.encoders().size(), 1u); 586 EXPECT_GT(encoder_factory.encoders().size(), 1u);
587 587
588 // Verify that encoders are configured for simulcast through adapter 588 // Verify that encoders are configured for simulcast through adapter
589 // (increasing resolution and only configured to send one stream each). 589 // (increasing resolution and only configured to send one stream each).
590 int prev_width = -1; 590 int prev_width = -1;
591 for (size_t i = 0; i < encoder_factory.encoders().size(); ++i) { 591 for (size_t i = 0; i < encoder_factory.encoders().size(); ++i) {
592 webrtc::VideoCodec codec_settings = 592 webrtc::VideoCodec codec_settings =
593 encoder_factory.encoders()[i]->GetCodecSettings(); 593 encoder_factory.encoders()[i]->GetCodecSettings();
594 EXPECT_EQ(0, codec_settings.numberOfSimulcastStreams); 594 EXPECT_EQ(0, codec_settings.numberOfSimulcastStreams);
595 EXPECT_GT(codec_settings.width, prev_width); 595 EXPECT_GT(codec_settings.width, prev_width);
596 prev_width = codec_settings.width; 596 prev_width = codec_settings.width;
597 } 597 }
598 598
599 EXPECT_TRUE(channel->SetCapturer(ssrcs.front(), NULL)); 599 channel->SetSource(ssrcs.front(), NULL);
600 600
601 channel.reset(); 601 channel.reset();
602 ASSERT_EQ(0u, encoder_factory.encoders().size()); 602 ASSERT_EQ(0u, encoder_factory.encoders().size());
603 } 603 }
604 604
605 TEST_F(WebRtcVideoEngine2Test, ChannelWithExternalH264CanChangeToInternalVp8) { 605 TEST_F(WebRtcVideoEngine2Test, ChannelWithExternalH264CanChangeToInternalVp8) {
606 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; 606 cricket::FakeWebRtcVideoEncoderFactory encoder_factory;
607 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecH264, "H264"); 607 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecH264, "H264");
608 std::vector<cricket::VideoCodec> codecs; 608 std::vector<cricket::VideoCodec> codecs;
609 codecs.push_back(kH264Codec); 609 codecs.push_back(kH264Codec);
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
652 std::vector<uint32_t> ssrcs = MAKE_VECTOR(kSsrcs3); 652 std::vector<uint32_t> ssrcs = MAKE_VECTOR(kSsrcs3);
653 653
654 EXPECT_TRUE( 654 EXPECT_TRUE(
655 channel->AddSendStream(CreateSimStreamParams("cname", ssrcs))); 655 channel->AddSendStream(CreateSimStreamParams("cname", ssrcs)));
656 EXPECT_TRUE(channel->SetSend(true)); 656 EXPECT_TRUE(channel->SetSend(true));
657 657
658 // Send a fake frame, or else the media engine will configure the simulcast 658 // Send a fake frame, or else the media engine will configure the simulcast
659 // encoder adapter at a low-enough size that it'll only create a single 659 // encoder adapter at a low-enough size that it'll only create a single
660 // encoder layer. 660 // encoder layer.
661 cricket::FakeVideoCapturer capturer; 661 cricket::FakeVideoCapturer capturer;
662 EXPECT_TRUE(channel->SetCapturer(ssrcs.front(), &capturer)); 662 channel->SetSource(ssrcs.front(), &capturer);
663 EXPECT_EQ(cricket::CS_RUNNING, 663 EXPECT_EQ(cricket::CS_RUNNING,
664 capturer.Start(capturer.GetSupportedFormats()->front())); 664 capturer.Start(capturer.GetSupportedFormats()->front()));
665 EXPECT_TRUE(capturer.CaptureFrame()); 665 EXPECT_TRUE(capturer.CaptureFrame());
666 666
667 ASSERT_GT(encoder_factory.encoders().size(), 1u); 667 ASSERT_GT(encoder_factory.encoders().size(), 1u);
668 EXPECT_EQ(webrtc::kVideoCodecVP8, 668 EXPECT_EQ(webrtc::kVideoCodecVP8,
669 encoder_factory.encoders()[0]->GetCodecSettings().codecType); 669 encoder_factory.encoders()[0]->GetCodecSettings().codecType);
670 670
671 channel.reset(); 671 channel.reset();
672 // Make sure DestroyVideoEncoder was called on the factory. 672 // Make sure DestroyVideoEncoder was called on the factory.
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
706 SetUpForExternalEncoderFactory(&encoder_factory, codecs)); 706 SetUpForExternalEncoderFactory(&encoder_factory, codecs));
707 707
708 const std::vector<uint32_t> ssrcs = MAKE_VECTOR(kSsrcs3); 708 const std::vector<uint32_t> ssrcs = MAKE_VECTOR(kSsrcs3);
709 EXPECT_TRUE( 709 EXPECT_TRUE(
710 channel->AddSendStream(cricket::CreateSimStreamParams("cname", ssrcs))); 710 channel->AddSendStream(cricket::CreateSimStreamParams("cname", ssrcs)));
711 711
712 // Send a frame of 720p. This should trigger a "real" encoder initialization. 712 // Send a frame of 720p. This should trigger a "real" encoder initialization.
713 cricket::VideoFormat format( 713 cricket::VideoFormat format(
714 1280, 720, cricket::VideoFormat::FpsToInterval(30), cricket::FOURCC_I420); 714 1280, 720, cricket::VideoFormat::FpsToInterval(30), cricket::FOURCC_I420);
715 cricket::FakeVideoCapturer capturer; 715 cricket::FakeVideoCapturer capturer;
716 EXPECT_TRUE(channel->SetCapturer(ssrcs[0], &capturer)); 716 channel->SetSource(ssrcs[0], &capturer);
717 EXPECT_EQ(cricket::CS_RUNNING, capturer.Start(format)); 717 EXPECT_EQ(cricket::CS_RUNNING, capturer.Start(format));
718 EXPECT_TRUE(capturer.CaptureFrame()); 718 EXPECT_TRUE(capturer.CaptureFrame());
719 719
720 ASSERT_EQ(1u, encoder_factory.encoders().size()); 720 ASSERT_EQ(1u, encoder_factory.encoders().size());
721 FakeWebRtcVideoEncoder* encoder = encoder_factory.encoders()[0]; 721 FakeWebRtcVideoEncoder* encoder = encoder_factory.encoders()[0];
722 EXPECT_EQ(webrtc::kVideoCodecH264, encoder->GetCodecSettings().codecType); 722 EXPECT_EQ(webrtc::kVideoCodecH264, encoder->GetCodecSettings().codecType);
723 EXPECT_EQ(1u, encoder->GetCodecSettings().numberOfSimulcastStreams); 723 EXPECT_EQ(1u, encoder->GetCodecSettings().numberOfSimulcastStreams);
724 EXPECT_TRUE(channel->SetCapturer(ssrcs[0], nullptr)); 724 channel->SetSource(ssrcs[0], nullptr);
725 } 725 }
726 726
727 // Test that external codecs are added to the end of the supported codec list. 727 // Test that external codecs are added to the end of the supported codec list.
728 TEST_F(WebRtcVideoEngine2Test, ReportSupportedExternalCodecs) { 728 TEST_F(WebRtcVideoEngine2Test, ReportSupportedExternalCodecs) {
729 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; 729 cricket::FakeWebRtcVideoEncoderFactory encoder_factory;
730 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecUnknown, 730 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecUnknown,
731 "FakeExternalCodec"); 731 "FakeExternalCodec");
732 engine_.SetExternalEncoderFactory(&encoder_factory); 732 engine_.SetExternalEncoderFactory(&encoder_factory);
733 engine_.Init(); 733 engine_.Init();
734 734
(...skipping 754 matching lines...) Expand 10 before | Expand all | Expand 10 after
1489 cricket::VideoCodec codec = kVp8Codec360p; 1489 cricket::VideoCodec codec = kVp8Codec360p;
1490 cricket::VideoSendParameters parameters; 1490 cricket::VideoSendParameters parameters;
1491 parameters.codecs.push_back(codec); 1491 parameters.codecs.push_back(codec);
1492 parameters.options.screencast_min_bitrate_kbps = 1492 parameters.options.screencast_min_bitrate_kbps =
1493 rtc::Optional<int>(kScreenshareMinBitrateKbps); 1493 rtc::Optional<int>(kScreenshareMinBitrateKbps);
1494 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1494 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1495 1495
1496 AddSendStream(); 1496 AddSendStream();
1497 1497
1498 cricket::FakeVideoCapturer capturer; 1498 cricket::FakeVideoCapturer capturer;
1499 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, &capturer)); 1499 channel_->SetSource(last_ssrc_, &capturer);
1500 cricket::VideoFormat capture_format_hd = 1500 cricket::VideoFormat capture_format_hd =
1501 capturer.GetSupportedFormats()->front(); 1501 capturer.GetSupportedFormats()->front();
1502 EXPECT_EQ(1280, capture_format_hd.width); 1502 EXPECT_EQ(1280, capture_format_hd.width);
1503 EXPECT_EQ(720, capture_format_hd.height); 1503 EXPECT_EQ(720, capture_format_hd.height);
1504 EXPECT_EQ(cricket::CS_RUNNING, capturer.Start(capture_format_hd)); 1504 EXPECT_EQ(cricket::CS_RUNNING, capturer.Start(capture_format_hd));
1505 1505
1506 EXPECT_TRUE(channel_->SetSend(true)); 1506 EXPECT_TRUE(channel_->SetSend(true));
1507 1507
1508 EXPECT_TRUE(capturer.CaptureFrame()); 1508 EXPECT_TRUE(capturer.CaptureFrame());
1509 ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size()); 1509 ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size());
1510 FakeVideoSendStream* send_stream = fake_call_->GetVideoSendStreams().front(); 1510 FakeVideoSendStream* send_stream = fake_call_->GetVideoSendStreams().front();
1511 1511
1512 EXPECT_EQ(1, send_stream->GetNumberOfSwappedFrames()); 1512 EXPECT_EQ(1, send_stream->GetNumberOfSwappedFrames());
1513 1513
1514 // Verify non-screencast settings. 1514 // Verify non-screencast settings.
1515 webrtc::VideoEncoderConfig encoder_config = send_stream->GetEncoderConfig(); 1515 webrtc::VideoEncoderConfig encoder_config = send_stream->GetEncoderConfig();
1516 EXPECT_EQ(webrtc::VideoEncoderConfig::ContentType::kRealtimeVideo, 1516 EXPECT_EQ(webrtc::VideoEncoderConfig::ContentType::kRealtimeVideo,
1517 encoder_config.content_type); 1517 encoder_config.content_type);
1518 EXPECT_EQ(codec.width, encoder_config.streams.front().width); 1518 EXPECT_EQ(codec.width, encoder_config.streams.front().width);
1519 EXPECT_EQ(codec.height, encoder_config.streams.front().height); 1519 EXPECT_EQ(codec.height, encoder_config.streams.front().height);
1520 EXPECT_EQ(0, encoder_config.min_transmit_bitrate_bps) 1520 EXPECT_EQ(0, encoder_config.min_transmit_bitrate_bps)
1521 << "Non-screenshare shouldn't use min-transmit bitrate."; 1521 << "Non-screenshare shouldn't use min-transmit bitrate.";
1522 1522
1523 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, nullptr)); 1523 channel_->SetSource(last_ssrc_, nullptr);
1524 // Removing a capturer triggers a black frame to be sent. 1524 // Removing a capturer triggers a black frame to be sent.
1525 EXPECT_EQ(2, send_stream->GetNumberOfSwappedFrames()); 1525 EXPECT_EQ(2, send_stream->GetNumberOfSwappedFrames());
1526 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, &capturer)); 1526 channel_->SetSource(last_ssrc_, &capturer);
1527 parameters.options.is_screencast = rtc::Optional<bool>(true); 1527 parameters.options.is_screencast = rtc::Optional<bool>(true);
1528 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1528 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1529 EXPECT_TRUE(capturer.CaptureFrame()); 1529 EXPECT_TRUE(capturer.CaptureFrame());
1530 // Send stream not recreated after option change. 1530 // Send stream not recreated after option change.
1531 ASSERT_EQ(send_stream, fake_call_->GetVideoSendStreams().front()); 1531 ASSERT_EQ(send_stream, fake_call_->GetVideoSendStreams().front());
1532 EXPECT_EQ(3, send_stream->GetNumberOfSwappedFrames()); 1532 EXPECT_EQ(3, send_stream->GetNumberOfSwappedFrames());
1533 1533
1534 // Verify screencast settings. 1534 // Verify screencast settings.
1535 encoder_config = send_stream->GetEncoderConfig(); 1535 encoder_config = send_stream->GetEncoderConfig();
1536 EXPECT_EQ(webrtc::VideoEncoderConfig::ContentType::kScreen, 1536 EXPECT_EQ(webrtc::VideoEncoderConfig::ContentType::kScreen,
1537 encoder_config.content_type); 1537 encoder_config.content_type);
1538 EXPECT_EQ(kScreenshareMinBitrateKbps * 1000, 1538 EXPECT_EQ(kScreenshareMinBitrateKbps * 1000,
1539 encoder_config.min_transmit_bitrate_bps); 1539 encoder_config.min_transmit_bitrate_bps);
1540 1540
1541 EXPECT_EQ(capture_format_hd.width, encoder_config.streams.front().width); 1541 EXPECT_EQ(capture_format_hd.width, encoder_config.streams.front().width);
1542 EXPECT_EQ(capture_format_hd.height, encoder_config.streams.front().height); 1542 EXPECT_EQ(capture_format_hd.height, encoder_config.streams.front().height);
1543 EXPECT_TRUE(encoder_config.streams[0].temporal_layer_thresholds_bps.empty()); 1543 EXPECT_TRUE(encoder_config.streams[0].temporal_layer_thresholds_bps.empty());
1544 1544
1545 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, NULL)); 1545 channel_->SetSource(last_ssrc_, NULL);
1546 } 1546 }
1547 1547
1548 TEST_F(WebRtcVideoChannel2Test, NoRecreateStreamForScreencast) { 1548 TEST_F(WebRtcVideoChannel2Test, NoRecreateStreamForScreencast) {
1549 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_)); 1549 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_));
1550 ASSERT_TRUE( 1550 ASSERT_TRUE(
1551 channel_->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc))); 1551 channel_->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc)));
1552 EXPECT_TRUE(channel_->SetSend(true)); 1552 EXPECT_TRUE(channel_->SetSend(true));
1553 1553
1554 cricket::FakeVideoCapturer capturer; 1554 cricket::FakeVideoCapturer capturer;
1555 EXPECT_TRUE(channel_->SetCapturer(kSsrc, &capturer)); 1555 channel_->SetSource(kSsrc, &capturer);
1556 EXPECT_EQ(cricket::CS_RUNNING, 1556 EXPECT_EQ(cricket::CS_RUNNING,
1557 capturer.Start(capturer.GetSupportedFormats()->front())); 1557 capturer.Start(capturer.GetSupportedFormats()->front()));
1558 EXPECT_TRUE(capturer.CaptureFrame()); 1558 EXPECT_TRUE(capturer.CaptureFrame());
1559 1559
1560 ASSERT_EQ(1, fake_call_->GetNumCreatedSendStreams()); 1560 ASSERT_EQ(1, fake_call_->GetNumCreatedSendStreams());
1561 FakeVideoSendStream* stream = fake_call_->GetVideoSendStreams().front(); 1561 FakeVideoSendStream* stream = fake_call_->GetVideoSendStreams().front();
1562 webrtc::VideoEncoderConfig encoder_config = stream->GetEncoderConfig(); 1562 webrtc::VideoEncoderConfig encoder_config = stream->GetEncoderConfig();
1563 EXPECT_EQ(webrtc::VideoEncoderConfig::ContentType::kRealtimeVideo, 1563 EXPECT_EQ(webrtc::VideoEncoderConfig::ContentType::kRealtimeVideo,
1564 encoder_config.content_type); 1564 encoder_config.content_type);
1565 1565
(...skipping 20 matching lines...) Expand all
1586 1586
1587 EXPECT_TRUE(capturer.CaptureFrame()); 1587 EXPECT_TRUE(capturer.CaptureFrame());
1588 ASSERT_EQ(1, fake_call_->GetNumCreatedSendStreams()); 1588 ASSERT_EQ(1, fake_call_->GetNumCreatedSendStreams());
1589 ASSERT_EQ(stream, fake_call_->GetVideoSendStreams().front()); 1589 ASSERT_EQ(stream, fake_call_->GetVideoSendStreams().front());
1590 EXPECT_EQ(3, stream->GetNumberOfSwappedFrames()); 1590 EXPECT_EQ(3, stream->GetNumberOfSwappedFrames());
1591 1591
1592 encoder_config = stream->GetEncoderConfig(); 1592 encoder_config = stream->GetEncoderConfig();
1593 EXPECT_EQ(webrtc::VideoEncoderConfig::ContentType::kRealtimeVideo, 1593 EXPECT_EQ(webrtc::VideoEncoderConfig::ContentType::kRealtimeVideo,
1594 encoder_config.content_type); 1594 encoder_config.content_type);
1595 1595
1596 EXPECT_TRUE(channel_->SetCapturer(kSsrc, NULL)); 1596 channel_->SetSource(kSsrc, NULL);
1597 } 1597 }
1598 1598
1599 TEST_F(WebRtcVideoChannel2Test, 1599 TEST_F(WebRtcVideoChannel2Test,
1600 ConferenceModeScreencastConfiguresTemporalLayer) { 1600 ConferenceModeScreencastConfiguresTemporalLayer) {
1601 static const int kConferenceScreencastTemporalBitrateBps = 1601 static const int kConferenceScreencastTemporalBitrateBps =
1602 ScreenshareLayerConfig::GetDefault().tl0_bitrate_kbps * 1000; 1602 ScreenshareLayerConfig::GetDefault().tl0_bitrate_kbps * 1000;
1603 send_parameters_.conference_mode = true; 1603 send_parameters_.conference_mode = true;
1604 send_parameters_.options.is_screencast = rtc::Optional<bool>(true); 1604 send_parameters_.options.is_screencast = rtc::Optional<bool>(true);
1605 channel_->SetSendParameters(send_parameters_); 1605 channel_->SetSendParameters(send_parameters_);
1606 1606
1607 AddSendStream(); 1607 AddSendStream();
1608 1608
1609 cricket::FakeVideoCapturer capturer; 1609 cricket::FakeVideoCapturer capturer;
1610 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, &capturer)); 1610 channel_->SetSource(last_ssrc_, &capturer);
1611 cricket::VideoFormat capture_format_hd = 1611 cricket::VideoFormat capture_format_hd =
1612 capturer.GetSupportedFormats()->front(); 1612 capturer.GetSupportedFormats()->front();
1613 EXPECT_EQ(cricket::CS_RUNNING, capturer.Start(capture_format_hd)); 1613 EXPECT_EQ(cricket::CS_RUNNING, capturer.Start(capture_format_hd));
1614 1614
1615 EXPECT_TRUE(channel_->SetSend(true)); 1615 EXPECT_TRUE(channel_->SetSend(true));
1616 1616
1617 EXPECT_TRUE(capturer.CaptureFrame()); 1617 EXPECT_TRUE(capturer.CaptureFrame());
1618 ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size()); 1618 ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size());
1619 FakeVideoSendStream* send_stream = fake_call_->GetVideoSendStreams().front(); 1619 FakeVideoSendStream* send_stream = fake_call_->GetVideoSendStreams().front();
1620 1620
1621 webrtc::VideoEncoderConfig encoder_config = send_stream->GetEncoderConfig(); 1621 webrtc::VideoEncoderConfig encoder_config = send_stream->GetEncoderConfig();
1622 1622
1623 // Verify screencast settings. 1623 // Verify screencast settings.
1624 encoder_config = send_stream->GetEncoderConfig(); 1624 encoder_config = send_stream->GetEncoderConfig();
1625 EXPECT_EQ(webrtc::VideoEncoderConfig::ContentType::kScreen, 1625 EXPECT_EQ(webrtc::VideoEncoderConfig::ContentType::kScreen,
1626 encoder_config.content_type); 1626 encoder_config.content_type);
1627 ASSERT_EQ(1u, encoder_config.streams.size()); 1627 ASSERT_EQ(1u, encoder_config.streams.size());
1628 ASSERT_EQ(1u, encoder_config.streams[0].temporal_layer_thresholds_bps.size()); 1628 ASSERT_EQ(1u, encoder_config.streams[0].temporal_layer_thresholds_bps.size());
1629 EXPECT_EQ(kConferenceScreencastTemporalBitrateBps, 1629 EXPECT_EQ(kConferenceScreencastTemporalBitrateBps,
1630 encoder_config.streams[0].temporal_layer_thresholds_bps[0]); 1630 encoder_config.streams[0].temporal_layer_thresholds_bps[0]);
1631 1631
1632 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, NULL)); 1632 channel_->SetSource(last_ssrc_, NULL);
1633 } 1633 }
1634 1634
1635 TEST_F(WebRtcVideoChannel2Test, SuspendBelowMinBitrateDisabledByDefault) { 1635 TEST_F(WebRtcVideoChannel2Test, SuspendBelowMinBitrateDisabledByDefault) {
1636 FakeVideoSendStream* stream = AddSendStream(); 1636 FakeVideoSendStream* stream = AddSendStream();
1637 EXPECT_FALSE(stream->GetConfig().suspend_below_min_bitrate); 1637 EXPECT_FALSE(stream->GetConfig().suspend_below_min_bitrate);
1638 } 1638 }
1639 1639
1640 TEST_F(WebRtcVideoChannel2Test, SetMediaConfigSuspendBelowMinBitrate) { 1640 TEST_F(WebRtcVideoChannel2Test, SetMediaConfigSuspendBelowMinBitrate) {
1641 MediaConfig media_config = MediaConfig(); 1641 MediaConfig media_config = MediaConfig();
1642 media_config.video.suspend_below_min_bitrate = true; 1642 media_config.video.suspend_below_min_bitrate = true;
(...skipping 29 matching lines...) Expand all
1672 ASSERT_TRUE(channel_->SetSendParameters(parameters)); 1672 ASSERT_TRUE(channel_->SetSendParameters(parameters));
1673 1673
1674 // Single-stream settings should apply with RTX as well (verifies that we 1674 // Single-stream settings should apply with RTX as well (verifies that we
1675 // check number of regular SSRCs and not StreamParams::ssrcs which contains 1675 // check number of regular SSRCs and not StreamParams::ssrcs which contains
1676 // both RTX and regular SSRCs). 1676 // both RTX and regular SSRCs).
1677 FakeVideoSendStream* stream = SetUpSimulcast(false, true); 1677 FakeVideoSendStream* stream = SetUpSimulcast(false, true);
1678 1678
1679 cricket::FakeVideoCapturer capturer; 1679 cricket::FakeVideoCapturer capturer;
1680 EXPECT_EQ(cricket::CS_RUNNING, 1680 EXPECT_EQ(cricket::CS_RUNNING,
1681 capturer.Start(capturer.GetSupportedFormats()->front())); 1681 capturer.Start(capturer.GetSupportedFormats()->front()));
1682 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, &capturer)); 1682 channel_->SetSource(last_ssrc_, &capturer);
1683 channel_->SetSend(true); 1683 channel_->SetSend(true);
1684 1684
1685 EXPECT_TRUE(capturer.CaptureFrame()); 1685 EXPECT_TRUE(capturer.CaptureFrame());
1686 1686
1687 webrtc::VideoCodecVP8 vp8_settings; 1687 webrtc::VideoCodecVP8 vp8_settings;
1688 ASSERT_TRUE(stream->GetVp8Settings(&vp8_settings)) << "No VP8 config set."; 1688 ASSERT_TRUE(stream->GetVp8Settings(&vp8_settings)) << "No VP8 config set.";
1689 EXPECT_TRUE(vp8_settings.denoisingOn) 1689 EXPECT_TRUE(vp8_settings.denoisingOn)
1690 << "VP8 denoising should be on by default."; 1690 << "VP8 denoising should be on by default.";
1691 1691
1692 stream = SetDenoisingOption(parameters, &capturer, false); 1692 stream = SetDenoisingOption(parameters, &capturer, false);
1693 1693
1694 ASSERT_TRUE(stream->GetVp8Settings(&vp8_settings)) << "No VP8 config set."; 1694 ASSERT_TRUE(stream->GetVp8Settings(&vp8_settings)) << "No VP8 config set.";
1695 EXPECT_FALSE(vp8_settings.denoisingOn); 1695 EXPECT_FALSE(vp8_settings.denoisingOn);
1696 EXPECT_TRUE(vp8_settings.automaticResizeOn); 1696 EXPECT_TRUE(vp8_settings.automaticResizeOn);
1697 EXPECT_TRUE(vp8_settings.frameDroppingOn); 1697 EXPECT_TRUE(vp8_settings.frameDroppingOn);
1698 1698
1699 stream = SetDenoisingOption(parameters, &capturer, true); 1699 stream = SetDenoisingOption(parameters, &capturer, true);
1700 1700
1701 ASSERT_TRUE(stream->GetVp8Settings(&vp8_settings)) << "No VP8 config set."; 1701 ASSERT_TRUE(stream->GetVp8Settings(&vp8_settings)) << "No VP8 config set.";
1702 EXPECT_TRUE(vp8_settings.denoisingOn); 1702 EXPECT_TRUE(vp8_settings.denoisingOn);
1703 EXPECT_TRUE(vp8_settings.automaticResizeOn); 1703 EXPECT_TRUE(vp8_settings.automaticResizeOn);
1704 EXPECT_TRUE(vp8_settings.frameDroppingOn); 1704 EXPECT_TRUE(vp8_settings.frameDroppingOn);
1705 1705
1706 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, NULL)); 1706 channel_->SetSource(last_ssrc_, NULL);
1707 stream = SetUpSimulcast(true, false); 1707 stream = SetUpSimulcast(true, false);
1708 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, &capturer)); 1708 channel_->SetSource(last_ssrc_, &capturer);
1709 channel_->SetSend(true); 1709 channel_->SetSend(true);
1710 EXPECT_TRUE(capturer.CaptureFrame()); 1710 EXPECT_TRUE(capturer.CaptureFrame());
1711 1711
1712 EXPECT_EQ(3, stream->GetVideoStreams().size()); 1712 EXPECT_EQ(3, stream->GetVideoStreams().size());
1713 ASSERT_TRUE(stream->GetVp8Settings(&vp8_settings)) << "No VP8 config set."; 1713 ASSERT_TRUE(stream->GetVp8Settings(&vp8_settings)) << "No VP8 config set.";
1714 // Autmatic resize off when using simulcast. 1714 // Autmatic resize off when using simulcast.
1715 EXPECT_FALSE(vp8_settings.automaticResizeOn); 1715 EXPECT_FALSE(vp8_settings.automaticResizeOn);
1716 EXPECT_TRUE(vp8_settings.frameDroppingOn); 1716 EXPECT_TRUE(vp8_settings.frameDroppingOn);
1717 1717
1718 // In screen-share mode, denoising is forced off and simulcast disabled. 1718 // In screen-share mode, denoising is forced off and simulcast disabled.
1719 parameters.options.is_screencast = rtc::Optional<bool>(true); 1719 parameters.options.is_screencast = rtc::Optional<bool>(true);
1720 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1720 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1721 1721
1722 stream = SetDenoisingOption(parameters, &capturer, false); 1722 stream = SetDenoisingOption(parameters, &capturer, false);
1723 1723
1724 EXPECT_EQ(1, stream->GetVideoStreams().size()); 1724 EXPECT_EQ(1, stream->GetVideoStreams().size());
1725 ASSERT_TRUE(stream->GetVp8Settings(&vp8_settings)) << "No VP8 config set."; 1725 ASSERT_TRUE(stream->GetVp8Settings(&vp8_settings)) << "No VP8 config set.";
1726 EXPECT_FALSE(vp8_settings.denoisingOn); 1726 EXPECT_FALSE(vp8_settings.denoisingOn);
1727 // Resizing and frame dropping always off for screen sharing. 1727 // Resizing and frame dropping always off for screen sharing.
1728 EXPECT_FALSE(vp8_settings.automaticResizeOn); 1728 EXPECT_FALSE(vp8_settings.automaticResizeOn);
1729 EXPECT_FALSE(vp8_settings.frameDroppingOn); 1729 EXPECT_FALSE(vp8_settings.frameDroppingOn);
1730 1730
1731 stream = SetDenoisingOption(parameters, &capturer, true); 1731 stream = SetDenoisingOption(parameters, &capturer, true);
1732 1732
1733 ASSERT_TRUE(stream->GetVp8Settings(&vp8_settings)) << "No VP8 config set."; 1733 ASSERT_TRUE(stream->GetVp8Settings(&vp8_settings)) << "No VP8 config set.";
1734 EXPECT_FALSE(vp8_settings.denoisingOn); 1734 EXPECT_FALSE(vp8_settings.denoisingOn);
1735 EXPECT_FALSE(vp8_settings.automaticResizeOn); 1735 EXPECT_FALSE(vp8_settings.automaticResizeOn);
1736 EXPECT_FALSE(vp8_settings.frameDroppingOn); 1736 EXPECT_FALSE(vp8_settings.frameDroppingOn);
1737 1737
1738 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, NULL)); 1738 channel_->SetSource(last_ssrc_, NULL);
1739 } 1739 }
1740 1740
1741 class Vp9SettingsTest : public WebRtcVideoChannel2Test { 1741 class Vp9SettingsTest : public WebRtcVideoChannel2Test {
1742 public: 1742 public:
1743 Vp9SettingsTest() : WebRtcVideoChannel2Test() { 1743 Vp9SettingsTest() : WebRtcVideoChannel2Test() {
1744 encoder_factory_.AddSupportedVideoCodecType(webrtc::kVideoCodecVP9, "VP9"); 1744 encoder_factory_.AddSupportedVideoCodecType(webrtc::kVideoCodecVP9, "VP9");
1745 } 1745 }
1746 virtual ~Vp9SettingsTest() {} 1746 virtual ~Vp9SettingsTest() {}
1747 1747
1748 protected: 1748 protected:
(...skipping 15 matching lines...) Expand all
1764 TEST_F(Vp9SettingsTest, VerifyVp9SpecificSettings) { 1764 TEST_F(Vp9SettingsTest, VerifyVp9SpecificSettings) {
1765 cricket::VideoSendParameters parameters; 1765 cricket::VideoSendParameters parameters;
1766 parameters.codecs.push_back(kVp9Codec); 1766 parameters.codecs.push_back(kVp9Codec);
1767 ASSERT_TRUE(channel_->SetSendParameters(parameters)); 1767 ASSERT_TRUE(channel_->SetSendParameters(parameters));
1768 1768
1769 FakeVideoSendStream* stream = SetUpSimulcast(false, false); 1769 FakeVideoSendStream* stream = SetUpSimulcast(false, false);
1770 1770
1771 cricket::FakeVideoCapturer capturer; 1771 cricket::FakeVideoCapturer capturer;
1772 EXPECT_EQ(cricket::CS_RUNNING, 1772 EXPECT_EQ(cricket::CS_RUNNING,
1773 capturer.Start(capturer.GetSupportedFormats()->front())); 1773 capturer.Start(capturer.GetSupportedFormats()->front()));
1774 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, &capturer)); 1774 channel_->SetSource(last_ssrc_, &capturer);
1775 channel_->SetSend(true); 1775 channel_->SetSend(true);
1776 1776
1777 EXPECT_TRUE(capturer.CaptureFrame()); 1777 EXPECT_TRUE(capturer.CaptureFrame());
1778 1778
1779 webrtc::VideoCodecVP9 vp9_settings; 1779 webrtc::VideoCodecVP9 vp9_settings;
1780 ASSERT_TRUE(stream->GetVp9Settings(&vp9_settings)) << "No VP9 config set."; 1780 ASSERT_TRUE(stream->GetVp9Settings(&vp9_settings)) << "No VP9 config set.";
1781 EXPECT_FALSE(vp9_settings.denoisingOn) 1781 EXPECT_FALSE(vp9_settings.denoisingOn)
1782 << "VP9 denoising should be off by default."; 1782 << "VP9 denoising should be off by default.";
1783 1783
1784 stream = SetDenoisingOption(parameters, &capturer, false); 1784 stream = SetDenoisingOption(parameters, &capturer, false);
(...skipping 19 matching lines...) Expand all
1804 EXPECT_FALSE(vp9_settings.denoisingOn); 1804 EXPECT_FALSE(vp9_settings.denoisingOn);
1805 // Frame dropping always off for screen sharing. 1805 // Frame dropping always off for screen sharing.
1806 EXPECT_FALSE(vp9_settings.frameDroppingOn); 1806 EXPECT_FALSE(vp9_settings.frameDroppingOn);
1807 1807
1808 stream = SetDenoisingOption(parameters, &capturer, false); 1808 stream = SetDenoisingOption(parameters, &capturer, false);
1809 1809
1810 ASSERT_TRUE(stream->GetVp9Settings(&vp9_settings)) << "No VP9 config set."; 1810 ASSERT_TRUE(stream->GetVp9Settings(&vp9_settings)) << "No VP9 config set.";
1811 EXPECT_FALSE(vp9_settings.denoisingOn); 1811 EXPECT_FALSE(vp9_settings.denoisingOn);
1812 EXPECT_FALSE(vp9_settings.frameDroppingOn); 1812 EXPECT_FALSE(vp9_settings.frameDroppingOn);
1813 1813
1814 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, NULL)); 1814 channel_->SetSource(last_ssrc_, NULL);
1815 } 1815 }
1816 1816
1817 TEST_F(WebRtcVideoChannel2Test, AdaptsOnOveruse) { 1817 TEST_F(WebRtcVideoChannel2Test, AdaptsOnOveruse) {
1818 TestCpuAdaptation(true, false); 1818 TestCpuAdaptation(true, false);
1819 } 1819 }
1820 1820
1821 TEST_F(WebRtcVideoChannel2Test, DoesNotAdaptOnOveruseWhenDisabled) { 1821 TEST_F(WebRtcVideoChannel2Test, DoesNotAdaptOnOveruseWhenDisabled) {
1822 TestCpuAdaptation(false, false); 1822 TestCpuAdaptation(false, false);
1823 } 1823 }
1824 1824
1825 TEST_F(WebRtcVideoChannel2Test, DoesNotAdaptOnOveruseWhenScreensharing) { 1825 TEST_F(WebRtcVideoChannel2Test, DoesNotAdaptOnOveruseWhenScreensharing) {
1826 TestCpuAdaptation(true, true); 1826 TestCpuAdaptation(true, true);
1827 } 1827 }
1828 1828
1829 TEST_F(WebRtcVideoChannel2Test, AdaptsOnOveruseAndChangeResolution) { 1829 TEST_F(WebRtcVideoChannel2Test, AdaptsOnOveruseAndChangeResolution) {
1830 cricket::VideoCodec codec = kVp8Codec720p; 1830 cricket::VideoCodec codec = kVp8Codec720p;
1831 cricket::VideoSendParameters parameters; 1831 cricket::VideoSendParameters parameters;
1832 parameters.codecs.push_back(codec); 1832 parameters.codecs.push_back(codec);
1833 1833
1834 MediaConfig media_config = MediaConfig(); 1834 MediaConfig media_config = MediaConfig();
1835 channel_.reset( 1835 channel_.reset(
1836 engine_.CreateChannel(fake_call_.get(), media_config, VideoOptions())); 1836 engine_.CreateChannel(fake_call_.get(), media_config, VideoOptions()));
1837 ASSERT_TRUE(channel_->SetSendParameters(parameters)); 1837 ASSERT_TRUE(channel_->SetSendParameters(parameters));
1838 1838
1839 AddSendStream(); 1839 AddSendStream();
1840 1840
1841 cricket::FakeVideoCapturer capturer; 1841 cricket::FakeVideoCapturer capturer;
1842 ASSERT_TRUE(channel_->SetCapturer(last_ssrc_, &capturer)); 1842 channel_->SetSource(last_ssrc_, &capturer);
1843 ASSERT_EQ(cricket::CS_RUNNING, 1843 ASSERT_EQ(cricket::CS_RUNNING,
1844 capturer.Start(capturer.GetSupportedFormats()->front())); 1844 capturer.Start(capturer.GetSupportedFormats()->front()));
1845 ASSERT_TRUE(channel_->SetSend(true)); 1845 ASSERT_TRUE(channel_->SetSend(true));
1846 1846
1847 ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size()); 1847 ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size());
1848 FakeVideoSendStream* send_stream = fake_call_->GetVideoSendStreams().front(); 1848 FakeVideoSendStream* send_stream = fake_call_->GetVideoSendStreams().front();
1849 webrtc::LoadObserver* overuse_callback = 1849 webrtc::LoadObserver* overuse_callback =
1850 send_stream->GetConfig().overuse_callback; 1850 send_stream->GetConfig().overuse_callback;
1851 ASSERT_TRUE(overuse_callback != NULL); 1851 ASSERT_TRUE(overuse_callback != NULL);
1852 1852
(...skipping 29 matching lines...) Expand all
1882 EXPECT_EQ(1284 * 3 / 4, send_stream->GetLastWidth()); 1882 EXPECT_EQ(1284 * 3 / 4, send_stream->GetLastWidth());
1883 EXPECT_EQ(724 * 3 / 4, send_stream->GetLastHeight()); 1883 EXPECT_EQ(724 * 3 / 4, send_stream->GetLastHeight());
1884 1884
1885 // Trigger underuse which should go back up in resolution. 1885 // Trigger underuse which should go back up in resolution.
1886 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kUnderuse); 1886 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kUnderuse);
1887 EXPECT_TRUE(capturer.CaptureCustomFrame(1284, 724, cricket::FOURCC_I420)); 1887 EXPECT_TRUE(capturer.CaptureCustomFrame(1284, 724, cricket::FOURCC_I420));
1888 EXPECT_EQ(6, send_stream->GetNumberOfSwappedFrames()); 1888 EXPECT_EQ(6, send_stream->GetNumberOfSwappedFrames());
1889 EXPECT_EQ(1284, send_stream->GetLastWidth()); 1889 EXPECT_EQ(1284, send_stream->GetLastWidth());
1890 EXPECT_EQ(724, send_stream->GetLastHeight()); 1890 EXPECT_EQ(724, send_stream->GetLastHeight());
1891 1891
1892 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, NULL)); 1892 channel_->SetSource(last_ssrc_, NULL);
1893 } 1893 }
1894 1894
1895 void WebRtcVideoChannel2Test::TestCpuAdaptation(bool enable_overuse, 1895 void WebRtcVideoChannel2Test::TestCpuAdaptation(bool enable_overuse,
1896 bool is_screenshare) { 1896 bool is_screenshare) {
1897 cricket::VideoCodec codec = kVp8Codec720p; 1897 cricket::VideoCodec codec = kVp8Codec720p;
1898 cricket::VideoSendParameters parameters; 1898 cricket::VideoSendParameters parameters;
1899 parameters.codecs.push_back(codec); 1899 parameters.codecs.push_back(codec);
1900 1900
1901 MediaConfig media_config = MediaConfig(); 1901 MediaConfig media_config = MediaConfig();
1902 if (!enable_overuse) { 1902 if (!enable_overuse) {
1903 media_config.video.enable_cpu_overuse_detection = false; 1903 media_config.video.enable_cpu_overuse_detection = false;
1904 } 1904 }
1905 channel_.reset( 1905 channel_.reset(
1906 engine_.CreateChannel(fake_call_.get(), media_config, VideoOptions())); 1906 engine_.CreateChannel(fake_call_.get(), media_config, VideoOptions()));
1907 1907
1908 parameters.options.is_screencast = rtc::Optional<bool>(is_screenshare); 1908 parameters.options.is_screencast = rtc::Optional<bool>(is_screenshare);
1909 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1909 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1910 1910
1911 AddSendStream(); 1911 AddSendStream();
1912 1912
1913 cricket::FakeVideoCapturer capturer; 1913 cricket::FakeVideoCapturer capturer;
1914 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, &capturer)); 1914 channel_->SetSource(last_ssrc_, &capturer);
1915 EXPECT_EQ(cricket::CS_RUNNING, 1915 EXPECT_EQ(cricket::CS_RUNNING,
1916 capturer.Start(capturer.GetSupportedFormats()->front())); 1916 capturer.Start(capturer.GetSupportedFormats()->front()));
1917 1917
1918 EXPECT_TRUE(channel_->SetSend(true)); 1918 EXPECT_TRUE(channel_->SetSend(true));
1919 1919
1920 // Trigger overuse. 1920 // Trigger overuse.
1921 ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size()); 1921 ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size());
1922 FakeVideoSendStream* send_stream = fake_call_->GetVideoSendStreams().front(); 1922 FakeVideoSendStream* send_stream = fake_call_->GetVideoSendStreams().front();
1923 webrtc::LoadObserver* overuse_callback = 1923 webrtc::LoadObserver* overuse_callback =
1924 send_stream->GetConfig().overuse_callback; 1924 send_stream->GetConfig().overuse_callback;
1925 1925
1926 if (!enable_overuse) { 1926 if (!enable_overuse) {
1927 ASSERT_TRUE(overuse_callback == NULL); 1927 ASSERT_TRUE(overuse_callback == NULL);
1928 1928
1929 EXPECT_TRUE(capturer.CaptureFrame()); 1929 EXPECT_TRUE(capturer.CaptureFrame());
1930 EXPECT_EQ(1, send_stream->GetNumberOfSwappedFrames()); 1930 EXPECT_EQ(1, send_stream->GetNumberOfSwappedFrames());
1931 1931
1932 EXPECT_EQ(codec.width, send_stream->GetLastWidth()); 1932 EXPECT_EQ(codec.width, send_stream->GetLastWidth());
1933 EXPECT_EQ(codec.height, send_stream->GetLastHeight()); 1933 EXPECT_EQ(codec.height, send_stream->GetLastHeight());
1934 1934
1935 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, NULL)); 1935 channel_->SetSource(last_ssrc_, NULL);
1936 return; 1936 return;
1937 } 1937 }
1938 1938
1939 ASSERT_TRUE(overuse_callback != NULL); 1939 ASSERT_TRUE(overuse_callback != NULL);
1940 EXPECT_TRUE(capturer.CaptureFrame()); 1940 EXPECT_TRUE(capturer.CaptureFrame());
1941 EXPECT_EQ(1, send_stream->GetNumberOfSwappedFrames()); 1941 EXPECT_EQ(1, send_stream->GetNumberOfSwappedFrames());
1942 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kOveruse); 1942 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kOveruse);
1943 1943
1944 EXPECT_TRUE(capturer.CaptureFrame()); 1944 EXPECT_TRUE(capturer.CaptureFrame());
1945 EXPECT_EQ(2, send_stream->GetNumberOfSwappedFrames()); 1945 EXPECT_EQ(2, send_stream->GetNumberOfSwappedFrames());
1946 1946
1947 if (is_screenshare) { 1947 if (is_screenshare) {
1948 // Do not adapt screen share. 1948 // Do not adapt screen share.
1949 EXPECT_EQ(codec.width, send_stream->GetLastWidth()); 1949 EXPECT_EQ(codec.width, send_stream->GetLastWidth());
1950 EXPECT_EQ(codec.height, send_stream->GetLastHeight()); 1950 EXPECT_EQ(codec.height, send_stream->GetLastHeight());
1951 } else { 1951 } else {
1952 EXPECT_LT(send_stream->GetLastWidth(), codec.width); 1952 EXPECT_LT(send_stream->GetLastWidth(), codec.width);
1953 EXPECT_LT(send_stream->GetLastHeight(), codec.height); 1953 EXPECT_LT(send_stream->GetLastHeight(), codec.height);
1954 } 1954 }
1955 1955
1956 // Trigger underuse which should go back to normal resolution. 1956 // Trigger underuse which should go back to normal resolution.
1957 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kUnderuse); 1957 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kUnderuse);
1958 EXPECT_TRUE(capturer.CaptureFrame()); 1958 EXPECT_TRUE(capturer.CaptureFrame());
1959 EXPECT_EQ(3, send_stream->GetNumberOfSwappedFrames()); 1959 EXPECT_EQ(3, send_stream->GetNumberOfSwappedFrames());
1960 1960
1961 EXPECT_EQ(codec.width, send_stream->GetLastWidth()); 1961 EXPECT_EQ(codec.width, send_stream->GetLastWidth());
1962 EXPECT_EQ(codec.height, send_stream->GetLastHeight()); 1962 EXPECT_EQ(codec.height, send_stream->GetLastHeight());
1963 1963
1964 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, NULL)); 1964 channel_->SetSource(last_ssrc_, NULL);
1965 } 1965 }
1966 1966
1967 TEST_F(WebRtcVideoChannel2Test, EstimatesNtpStartTimeCorrectly) { 1967 TEST_F(WebRtcVideoChannel2Test, EstimatesNtpStartTimeCorrectly) {
1968 // Start at last timestamp to verify that wraparounds are estimated correctly. 1968 // Start at last timestamp to verify that wraparounds are estimated correctly.
1969 static const uint32_t kInitialTimestamp = 0xFFFFFFFFu; 1969 static const uint32_t kInitialTimestamp = 0xFFFFFFFFu;
1970 static const int64_t kInitialNtpTimeMs = 1247891230; 1970 static const int64_t kInitialNtpTimeMs = 1247891230;
1971 static const int kFrameOffsetMs = 20; 1971 static const int kFrameOffsetMs = 20;
1972 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters_)); 1972 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters_));
1973 1973
1974 FakeVideoReceiveStream* stream = AddRecvStream(); 1974 FakeVideoReceiveStream* stream = AddRecvStream();
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
2085 2085
2086 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsChangesExistingStreams) { 2086 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsChangesExistingStreams) {
2087 cricket::VideoSendParameters parameters; 2087 cricket::VideoSendParameters parameters;
2088 parameters.codecs.push_back(kVp8Codec720p); 2088 parameters.codecs.push_back(kVp8Codec720p);
2089 ASSERT_TRUE(channel_->SetSendParameters(parameters)); 2089 ASSERT_TRUE(channel_->SetSendParameters(parameters));
2090 channel_->SetSend(true); 2090 channel_->SetSend(true);
2091 2091
2092 FakeVideoSendStream* stream = AddSendStream(); 2092 FakeVideoSendStream* stream = AddSendStream();
2093 2093
2094 cricket::FakeVideoCapturer capturer; 2094 cricket::FakeVideoCapturer capturer;
2095 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, &capturer)); 2095 channel_->SetSource(last_ssrc_, &capturer);
2096 EXPECT_EQ(cricket::CS_RUNNING, 2096 EXPECT_EQ(cricket::CS_RUNNING,
2097 capturer.Start(capturer.GetSupportedFormats()->front())); 2097 capturer.Start(capturer.GetSupportedFormats()->front()));
2098 EXPECT_TRUE(capturer.CaptureFrame()); 2098 EXPECT_TRUE(capturer.CaptureFrame());
2099 2099
2100 std::vector<webrtc::VideoStream> streams = stream->GetVideoStreams(); 2100 std::vector<webrtc::VideoStream> streams = stream->GetVideoStreams();
2101 EXPECT_EQ(kVp8Codec720p.width, streams[0].width); 2101 EXPECT_EQ(kVp8Codec720p.width, streams[0].width);
2102 EXPECT_EQ(kVp8Codec720p.height, streams[0].height); 2102 EXPECT_EQ(kVp8Codec720p.height, streams[0].height);
2103 2103
2104 parameters.codecs.clear(); 2104 parameters.codecs.clear();
2105 parameters.codecs.push_back(kVp8Codec360p); 2105 parameters.codecs.push_back(kVp8Codec360p);
2106 ASSERT_TRUE(channel_->SetSendParameters(parameters)); 2106 ASSERT_TRUE(channel_->SetSendParameters(parameters));
2107 streams = fake_call_->GetVideoSendStreams()[0]->GetVideoStreams(); 2107 streams = fake_call_->GetVideoSendStreams()[0]->GetVideoStreams();
2108 EXPECT_EQ(kVp8Codec360p.width, streams[0].width); 2108 EXPECT_EQ(kVp8Codec360p.width, streams[0].width);
2109 EXPECT_EQ(kVp8Codec360p.height, streams[0].height); 2109 EXPECT_EQ(kVp8Codec360p.height, streams[0].height);
2110 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, NULL)); 2110 channel_->SetSource(last_ssrc_, NULL);
2111 } 2111 }
2112 2112
2113 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsWithBitrates) { 2113 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsWithBitrates) {
2114 SetSendCodecsShouldWorkForBitrates("100", 100000, "150", 150000, "200", 2114 SetSendCodecsShouldWorkForBitrates("100", 100000, "150", 150000, "200",
2115 200000); 2115 200000);
2116 } 2116 }
2117 2117
2118 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsWithHighMaxBitrate) { 2118 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsWithHighMaxBitrate) {
2119 SetSendCodecsShouldWorkForBitrates("", 0, "", -1, "10000", 10000000); 2119 SetSendCodecsShouldWorkForBitrates("", 0, "", -1, "10000", 10000000);
2120 std::vector<webrtc::VideoStream> streams = AddSendStream()->GetVideoStreams(); 2120 std::vector<webrtc::VideoStream> streams = AddSendStream()->GetVideoStreams();
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
2164 2164
2165 TEST_F(WebRtcVideoChannel2Test, SetMaxSendBitrateCanIncreaseSenderBitrate) { 2165 TEST_F(WebRtcVideoChannel2Test, SetMaxSendBitrateCanIncreaseSenderBitrate) {
2166 cricket::VideoSendParameters parameters; 2166 cricket::VideoSendParameters parameters;
2167 parameters.codecs.push_back(kVp8Codec720p); 2167 parameters.codecs.push_back(kVp8Codec720p);
2168 ASSERT_TRUE(channel_->SetSendParameters(parameters)); 2168 ASSERT_TRUE(channel_->SetSendParameters(parameters));
2169 channel_->SetSend(true); 2169 channel_->SetSend(true);
2170 2170
2171 FakeVideoSendStream* stream = AddSendStream(); 2171 FakeVideoSendStream* stream = AddSendStream();
2172 2172
2173 cricket::FakeVideoCapturer capturer; 2173 cricket::FakeVideoCapturer capturer;
2174 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, &capturer)); 2174 channel_->SetSource(last_ssrc_, &capturer);
2175 EXPECT_EQ(cricket::CS_RUNNING, 2175 EXPECT_EQ(cricket::CS_RUNNING,
2176 capturer.Start(capturer.GetSupportedFormats()->front())); 2176 capturer.Start(capturer.GetSupportedFormats()->front()));
2177 2177
2178 std::vector<webrtc::VideoStream> streams = stream->GetVideoStreams(); 2178 std::vector<webrtc::VideoStream> streams = stream->GetVideoStreams();
2179 int initial_max_bitrate_bps = streams[0].max_bitrate_bps; 2179 int initial_max_bitrate_bps = streams[0].max_bitrate_bps;
2180 EXPECT_GT(initial_max_bitrate_bps, 0); 2180 EXPECT_GT(initial_max_bitrate_bps, 0);
2181 2181
2182 parameters.max_bandwidth_bps = initial_max_bitrate_bps * 2; 2182 parameters.max_bandwidth_bps = initial_max_bitrate_bps * 2;
2183 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 2183 EXPECT_TRUE(channel_->SetSendParameters(parameters));
2184 // Insert a frame to update the encoder config. 2184 // Insert a frame to update the encoder config.
2185 EXPECT_TRUE(capturer.CaptureFrame()); 2185 EXPECT_TRUE(capturer.CaptureFrame());
2186 streams = stream->GetVideoStreams(); 2186 streams = stream->GetVideoStreams();
2187 EXPECT_EQ(initial_max_bitrate_bps * 2, streams[0].max_bitrate_bps); 2187 EXPECT_EQ(initial_max_bitrate_bps * 2, streams[0].max_bitrate_bps);
2188 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, nullptr)); 2188 channel_->SetSource(last_ssrc_, nullptr);
2189 } 2189 }
2190 2190
2191 TEST_F(WebRtcVideoChannel2Test, 2191 TEST_F(WebRtcVideoChannel2Test,
2192 SetMaxSendBitrateCanIncreaseSimulcastSenderBitrate) { 2192 SetMaxSendBitrateCanIncreaseSimulcastSenderBitrate) {
2193 cricket::VideoSendParameters parameters; 2193 cricket::VideoSendParameters parameters;
2194 parameters.codecs.push_back(kVp8Codec720p); 2194 parameters.codecs.push_back(kVp8Codec720p);
2195 ASSERT_TRUE(channel_->SetSendParameters(parameters)); 2195 ASSERT_TRUE(channel_->SetSendParameters(parameters));
2196 channel_->SetSend(true); 2196 channel_->SetSend(true);
2197 2197
2198 FakeVideoSendStream* stream = AddSendStream( 2198 FakeVideoSendStream* stream = AddSendStream(
2199 cricket::CreateSimStreamParams("cname", MAKE_VECTOR(kSsrcs3))); 2199 cricket::CreateSimStreamParams("cname", MAKE_VECTOR(kSsrcs3)));
2200 2200
2201 // Send a frame to make sure this scales up to >1 stream (simulcast). 2201 // Send a frame to make sure this scales up to >1 stream (simulcast).
2202 cricket::FakeVideoCapturer capturer; 2202 cricket::FakeVideoCapturer capturer;
2203 EXPECT_TRUE(channel_->SetCapturer(kSsrcs3[0], &capturer)); 2203 channel_->SetSource(kSsrcs3[0], &capturer);
2204 EXPECT_EQ(cricket::CS_RUNNING, 2204 EXPECT_EQ(cricket::CS_RUNNING,
2205 capturer.Start(capturer.GetSupportedFormats()->front())); 2205 capturer.Start(capturer.GetSupportedFormats()->front()));
2206 EXPECT_TRUE(capturer.CaptureFrame()); 2206 EXPECT_TRUE(capturer.CaptureFrame());
2207 2207
2208 std::vector<webrtc::VideoStream> streams = stream->GetVideoStreams(); 2208 std::vector<webrtc::VideoStream> streams = stream->GetVideoStreams();
2209 ASSERT_GT(streams.size(), 1u) 2209 ASSERT_GT(streams.size(), 1u)
2210 << "Without simulcast this test doesn't make sense."; 2210 << "Without simulcast this test doesn't make sense.";
2211 int initial_max_bitrate_bps = GetTotalMaxBitrateBps(streams); 2211 int initial_max_bitrate_bps = GetTotalMaxBitrateBps(streams);
2212 EXPECT_GT(initial_max_bitrate_bps, 0); 2212 EXPECT_GT(initial_max_bitrate_bps, 0);
2213 2213
2214 parameters.max_bandwidth_bps = initial_max_bitrate_bps * 2; 2214 parameters.max_bandwidth_bps = initial_max_bitrate_bps * 2;
2215 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 2215 EXPECT_TRUE(channel_->SetSendParameters(parameters));
2216 // Insert a frame to update the encoder config. 2216 // Insert a frame to update the encoder config.
2217 EXPECT_TRUE(capturer.CaptureFrame()); 2217 EXPECT_TRUE(capturer.CaptureFrame());
2218 streams = stream->GetVideoStreams(); 2218 streams = stream->GetVideoStreams();
2219 int increased_max_bitrate_bps = GetTotalMaxBitrateBps(streams); 2219 int increased_max_bitrate_bps = GetTotalMaxBitrateBps(streams);
2220 EXPECT_EQ(initial_max_bitrate_bps * 2, increased_max_bitrate_bps); 2220 EXPECT_EQ(initial_max_bitrate_bps * 2, increased_max_bitrate_bps);
2221 2221
2222 EXPECT_TRUE(channel_->SetCapturer(kSsrcs3[0], nullptr)); 2222 channel_->SetSource(kSsrcs3[0], nullptr);
2223 } 2223 }
2224 2224
2225 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsWithMaxQuantization) { 2225 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsWithMaxQuantization) {
2226 static const char* kMaxQuantization = "21"; 2226 static const char* kMaxQuantization = "21";
2227 cricket::VideoSendParameters parameters; 2227 cricket::VideoSendParameters parameters;
2228 parameters.codecs.push_back(kVp8Codec); 2228 parameters.codecs.push_back(kVp8Codec);
2229 parameters.codecs[0].params[kCodecParamMaxQuantization] = kMaxQuantization; 2229 parameters.codecs[0].params[kCodecParamMaxQuantization] = kMaxQuantization;
2230 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 2230 EXPECT_TRUE(channel_->SetSendParameters(parameters));
2231 EXPECT_EQ(static_cast<unsigned int>(atoi(kMaxQuantization)), 2231 EXPECT_EQ(static_cast<unsigned int>(atoi(kMaxQuantization)),
2232 AddSendStream()->GetVideoStreams().back().max_qp); 2232 AddSendStream()->GetVideoStreams().back().max_qp);
(...skipping 338 matching lines...) Expand 10 before | Expand all | Expand 10 after
2571 2571
2572 TEST_F(WebRtcVideoChannel2Test, GetStatsTracksAdaptationStats) { 2572 TEST_F(WebRtcVideoChannel2Test, GetStatsTracksAdaptationStats) {
2573 AddSendStream(cricket::CreateSimStreamParams("cname", MAKE_VECTOR(kSsrcs3))); 2573 AddSendStream(cricket::CreateSimStreamParams("cname", MAKE_VECTOR(kSsrcs3)));
2574 2574
2575 // Capture format VGA. 2575 // Capture format VGA.
2576 cricket::FakeVideoCapturer video_capturer_vga; 2576 cricket::FakeVideoCapturer video_capturer_vga;
2577 const std::vector<cricket::VideoFormat>* formats = 2577 const std::vector<cricket::VideoFormat>* formats =
2578 video_capturer_vga.GetSupportedFormats(); 2578 video_capturer_vga.GetSupportedFormats();
2579 cricket::VideoFormat capture_format_vga = (*formats)[1]; 2579 cricket::VideoFormat capture_format_vga = (*formats)[1];
2580 EXPECT_EQ(cricket::CS_RUNNING, video_capturer_vga.Start(capture_format_vga)); 2580 EXPECT_EQ(cricket::CS_RUNNING, video_capturer_vga.Start(capture_format_vga));
2581 EXPECT_TRUE(channel_->SetCapturer(kSsrcs3[0], &video_capturer_vga)); 2581 channel_->SetSource(kSsrcs3[0], &video_capturer_vga);
2582 EXPECT_TRUE(video_capturer_vga.CaptureFrame()); 2582 EXPECT_TRUE(video_capturer_vga.CaptureFrame());
2583 2583
2584 cricket::VideoCodec send_codec(100, "VP8", 640, 480, 30, 0); 2584 cricket::VideoCodec send_codec(100, "VP8", 640, 480, 30, 0);
2585 cricket::VideoSendParameters parameters; 2585 cricket::VideoSendParameters parameters;
2586 parameters.codecs.push_back(send_codec); 2586 parameters.codecs.push_back(send_codec);
2587 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 2587 EXPECT_TRUE(channel_->SetSendParameters(parameters));
2588 EXPECT_TRUE(channel_->SetSend(true)); 2588 EXPECT_TRUE(channel_->SetSend(true));
2589 2589
2590 // Verify that the CpuOveruseObserver is registered and trigger downgrade. 2590 // Verify that the CpuOveruseObserver is registered and trigger downgrade.
2591 2591
(...skipping 17 matching lines...) Expand all
2609 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kUnderuse); 2609 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kUnderuse);
2610 EXPECT_TRUE(video_capturer_vga.CaptureFrame()); 2610 EXPECT_TRUE(video_capturer_vga.CaptureFrame());
2611 info.Clear(); 2611 info.Clear();
2612 EXPECT_TRUE(channel_->GetStats(&info)); 2612 EXPECT_TRUE(channel_->GetStats(&info));
2613 ASSERT_EQ(1U, info.senders.size()); 2613 ASSERT_EQ(1U, info.senders.size());
2614 EXPECT_EQ(2, info.senders[0].adapt_changes); 2614 EXPECT_EQ(2, info.senders[0].adapt_changes);
2615 EXPECT_EQ(CoordinatedVideoAdapter::ADAPTREASON_NONE, 2615 EXPECT_EQ(CoordinatedVideoAdapter::ADAPTREASON_NONE,
2616 info.senders[0].adapt_reason); 2616 info.senders[0].adapt_reason);
2617 2617
2618 // No capturer (no adapter). Adapt changes from old adapter should be kept. 2618 // No capturer (no adapter). Adapt changes from old adapter should be kept.
2619 EXPECT_TRUE(channel_->SetCapturer(kSsrcs3[0], NULL)); 2619 channel_->SetSource(kSsrcs3[0], NULL);
2620 info.Clear(); 2620 info.Clear();
2621 EXPECT_TRUE(channel_->GetStats(&info)); 2621 EXPECT_TRUE(channel_->GetStats(&info));
2622 ASSERT_EQ(1U, info.senders.size()); 2622 ASSERT_EQ(1U, info.senders.size());
2623 EXPECT_EQ(2, info.senders[0].adapt_changes); 2623 EXPECT_EQ(2, info.senders[0].adapt_changes);
2624 EXPECT_EQ(CoordinatedVideoAdapter::ADAPTREASON_NONE, 2624 EXPECT_EQ(CoordinatedVideoAdapter::ADAPTREASON_NONE,
2625 info.senders[0].adapt_reason); 2625 info.senders[0].adapt_reason);
2626 2626
2627 // Set new capturer, capture format HD. 2627 // Set new capturer, capture format HD.
2628 cricket::FakeVideoCapturer video_capturer_hd; 2628 cricket::FakeVideoCapturer video_capturer_hd;
2629 cricket::VideoFormat capture_format_hd = (*formats)[0]; 2629 cricket::VideoFormat capture_format_hd = (*formats)[0];
2630 EXPECT_EQ(cricket::CS_RUNNING, video_capturer_hd.Start(capture_format_hd)); 2630 EXPECT_EQ(cricket::CS_RUNNING, video_capturer_hd.Start(capture_format_hd));
2631 EXPECT_TRUE(channel_->SetCapturer(kSsrcs3[0], &video_capturer_hd)); 2631 channel_->SetSource(kSsrcs3[0], &video_capturer_hd);
2632 EXPECT_TRUE(video_capturer_hd.CaptureFrame()); 2632 EXPECT_TRUE(video_capturer_hd.CaptureFrame());
2633 2633
2634 // Trigger overuse, HD -> adapt (OnCpuResolutionRequest downgrade) -> HD/2. 2634 // Trigger overuse, HD -> adapt (OnCpuResolutionRequest downgrade) -> HD/2.
2635 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kOveruse); 2635 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kOveruse);
2636 EXPECT_TRUE(video_capturer_hd.CaptureFrame()); 2636 EXPECT_TRUE(video_capturer_hd.CaptureFrame());
2637 info.Clear(); 2637 info.Clear();
2638 EXPECT_TRUE(channel_->GetStats(&info)); 2638 EXPECT_TRUE(channel_->GetStats(&info));
2639 ASSERT_EQ(1U, info.senders.size()); 2639 ASSERT_EQ(1U, info.senders.size());
2640 EXPECT_EQ(3, info.senders[0].adapt_changes); 2640 EXPECT_EQ(3, info.senders[0].adapt_changes);
2641 EXPECT_EQ(CoordinatedVideoAdapter::ADAPTREASON_CPU, 2641 EXPECT_EQ(CoordinatedVideoAdapter::ADAPTREASON_CPU,
2642 info.senders[0].adapt_reason); 2642 info.senders[0].adapt_reason);
2643 2643
2644 EXPECT_TRUE(channel_->SetCapturer(kSsrcs3[0], NULL)); 2644 channel_->SetSource(kSsrcs3[0], NULL);
2645 } 2645 }
2646 2646
2647 TEST_F(WebRtcVideoChannel2Test, GetStatsTracksAdaptationAndBandwidthStats) { 2647 TEST_F(WebRtcVideoChannel2Test, GetStatsTracksAdaptationAndBandwidthStats) {
2648 AddSendStream(cricket::CreateSimStreamParams("cname", MAKE_VECTOR(kSsrcs3))); 2648 AddSendStream(cricket::CreateSimStreamParams("cname", MAKE_VECTOR(kSsrcs3)));
2649 2649
2650 // Capture format VGA. 2650 // Capture format VGA.
2651 cricket::FakeVideoCapturer video_capturer_vga; 2651 cricket::FakeVideoCapturer video_capturer_vga;
2652 const std::vector<cricket::VideoFormat>* formats = 2652 const std::vector<cricket::VideoFormat>* formats =
2653 video_capturer_vga.GetSupportedFormats(); 2653 video_capturer_vga.GetSupportedFormats();
2654 cricket::VideoFormat capture_format_vga = (*formats)[1]; 2654 cricket::VideoFormat capture_format_vga = (*formats)[1];
2655 EXPECT_EQ(cricket::CS_RUNNING, video_capturer_vga.Start(capture_format_vga)); 2655 EXPECT_EQ(cricket::CS_RUNNING, video_capturer_vga.Start(capture_format_vga));
2656 EXPECT_TRUE(channel_->SetCapturer(kSsrcs3[0], &video_capturer_vga)); 2656 channel_->SetSource(kSsrcs3[0], &video_capturer_vga);
2657 EXPECT_TRUE(video_capturer_vga.CaptureFrame()); 2657 EXPECT_TRUE(video_capturer_vga.CaptureFrame());
2658 2658
2659 cricket::VideoCodec send_codec(100, "VP8", 640, 480, 30, 0); 2659 cricket::VideoCodec send_codec(100, "VP8", 640, 480, 30, 0);
2660 cricket::VideoSendParameters parameters; 2660 cricket::VideoSendParameters parameters;
2661 parameters.codecs.push_back(send_codec); 2661 parameters.codecs.push_back(send_codec);
2662 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 2662 EXPECT_TRUE(channel_->SetSendParameters(parameters));
2663 EXPECT_TRUE(channel_->SetSend(true)); 2663 EXPECT_TRUE(channel_->SetSend(true));
2664 2664
2665 // Verify that the CpuOveruseObserver is registered and trigger downgrade. 2665 // Verify that the CpuOveruseObserver is registered and trigger downgrade.
2666 2666
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
2699 2699
2700 // Reset bandwidth limitation state -> adapt NONE. 2700 // Reset bandwidth limitation state -> adapt NONE.
2701 stats.bw_limited_resolution = false; 2701 stats.bw_limited_resolution = false;
2702 fake_call_->GetVideoSendStreams().front()->SetStats(stats); 2702 fake_call_->GetVideoSendStreams().front()->SetStats(stats);
2703 info.Clear(); 2703 info.Clear();
2704 EXPECT_TRUE(channel_->GetStats(&info)); 2704 EXPECT_TRUE(channel_->GetStats(&info));
2705 ASSERT_EQ(1U, info.senders.size()); 2705 ASSERT_EQ(1U, info.senders.size());
2706 EXPECT_EQ(CoordinatedVideoAdapter::ADAPTREASON_NONE, 2706 EXPECT_EQ(CoordinatedVideoAdapter::ADAPTREASON_NONE,
2707 info.senders[0].adapt_reason); 2707 info.senders[0].adapt_reason);
2708 2708
2709 EXPECT_TRUE(channel_->SetCapturer(kSsrcs3[0], NULL)); 2709 channel_->SetSource(kSsrcs3[0], NULL);
2710 } 2710 }
2711 2711
2712 TEST_F(WebRtcVideoChannel2Test, 2712 TEST_F(WebRtcVideoChannel2Test,
2713 GetStatsTranslatesBandwidthLimitedResolutionCorrectly) { 2713 GetStatsTranslatesBandwidthLimitedResolutionCorrectly) {
2714 FakeVideoSendStream* stream = AddSendStream(); 2714 FakeVideoSendStream* stream = AddSendStream();
2715 webrtc::VideoSendStream::Stats stats; 2715 webrtc::VideoSendStream::Stats stats;
2716 stats.bw_limited_resolution = true; 2716 stats.bw_limited_resolution = true;
2717 stream->SetStats(stats); 2717 stream->SetStats(stats);
2718 2718
2719 cricket::VideoMediaInfo info; 2719 cricket::VideoMediaInfo info;
(...skipping 417 matching lines...) Expand 10 before | Expand all | Expand 10 after
3137 3137
3138 std::vector<uint32_t> ssrcs = MAKE_VECTOR(kSsrcs3); 3138 std::vector<uint32_t> ssrcs = MAKE_VECTOR(kSsrcs3);
3139 RTC_DCHECK(num_configured_streams <= ssrcs.size()); 3139 RTC_DCHECK(num_configured_streams <= ssrcs.size());
3140 ssrcs.resize(num_configured_streams); 3140 ssrcs.resize(num_configured_streams);
3141 3141
3142 FakeVideoSendStream* stream = 3142 FakeVideoSendStream* stream =
3143 AddSendStream(CreateSimStreamParams("cname", ssrcs)); 3143 AddSendStream(CreateSimStreamParams("cname", ssrcs));
3144 // Send a full-size frame to trigger a stream reconfiguration to use all 3144 // Send a full-size frame to trigger a stream reconfiguration to use all
3145 // expected simulcast layers. 3145 // expected simulcast layers.
3146 cricket::FakeVideoCapturer capturer; 3146 cricket::FakeVideoCapturer capturer;
3147 EXPECT_TRUE(channel_->SetCapturer(ssrcs.front(), &capturer)); 3147 channel_->SetSource(ssrcs.front(), &capturer);
3148 EXPECT_EQ(cricket::CS_RUNNING, capturer.Start(cricket::VideoFormat( 3148 EXPECT_EQ(cricket::CS_RUNNING, capturer.Start(cricket::VideoFormat(
3149 codec.width, codec.height, 3149 codec.width, codec.height,
3150 cricket::VideoFormat::FpsToInterval(30), 3150 cricket::VideoFormat::FpsToInterval(30),
3151 cricket::FOURCC_I420))); 3151 cricket::FOURCC_I420)));
3152 channel_->SetSend(true); 3152 channel_->SetSend(true);
3153 EXPECT_TRUE(capturer.CaptureFrame()); 3153 EXPECT_TRUE(capturer.CaptureFrame());
3154 3154
3155 std::vector<webrtc::VideoStream> video_streams = stream->GetVideoStreams(); 3155 std::vector<webrtc::VideoStream> video_streams = stream->GetVideoStreams();
3156 ASSERT_EQ(expected_num_streams, video_streams.size()); 3156 ASSERT_EQ(expected_num_streams, video_streams.size());
3157 3157
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
3194 total_max_bitrate_bps += video_streams[i].max_bitrate_bps; 3194 total_max_bitrate_bps += video_streams[i].max_bitrate_bps;
3195 } else { 3195 } else {
3196 total_max_bitrate_bps += video_streams[i].target_bitrate_bps; 3196 total_max_bitrate_bps += video_streams[i].target_bitrate_bps;
3197 } 3197 }
3198 } 3198 }
3199 cricket::VideoMediaInfo info; 3199 cricket::VideoMediaInfo info;
3200 ASSERT_TRUE(channel_->GetStats(&info)); 3200 ASSERT_TRUE(channel_->GetStats(&info));
3201 ASSERT_EQ(1u, info.senders.size()); 3201 ASSERT_EQ(1u, info.senders.size());
3202 EXPECT_EQ(total_max_bitrate_bps, info.senders[0].preferred_bitrate); 3202 EXPECT_EQ(total_max_bitrate_bps, info.senders[0].preferred_bitrate);
3203 3203
3204 EXPECT_TRUE(channel_->SetCapturer(ssrcs.front(), NULL)); 3204 channel_->SetSource(ssrcs.front(), NULL);
3205 } 3205 }
3206 3206
3207 FakeVideoSendStream* AddSendStream() { 3207 FakeVideoSendStream* AddSendStream() {
3208 return AddSendStream(StreamParams::CreateLegacy(last_ssrc_++)); 3208 return AddSendStream(StreamParams::CreateLegacy(last_ssrc_++));
3209 } 3209 }
3210 3210
3211 FakeVideoSendStream* AddSendStream(const StreamParams& sp) { 3211 FakeVideoSendStream* AddSendStream(const StreamParams& sp) {
3212 size_t num_streams = 3212 size_t num_streams =
3213 fake_call_.GetVideoSendStreams().size(); 3213 fake_call_.GetVideoSendStreams().size();
3214 EXPECT_TRUE(channel_->AddSendStream(sp)); 3214 EXPECT_TRUE(channel_->AddSendStream(sp));
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
3251 } 3251 }
3252 3252
3253 // Test that we normalize send codec format size in simulcast. 3253 // Test that we normalize send codec format size in simulcast.
3254 TEST_F(WebRtcVideoChannel2SimulcastTest, SetSendCodecsWithOddSizeInSimulcast) { 3254 TEST_F(WebRtcVideoChannel2SimulcastTest, SetSendCodecsWithOddSizeInSimulcast) {
3255 cricket::VideoCodec codec(kVp8Codec270p); 3255 cricket::VideoCodec codec(kVp8Codec270p);
3256 codec.width += 1; 3256 codec.width += 1;
3257 codec.height += 1; 3257 codec.height += 1;
3258 VerifySimulcastSettings(codec, 2, 2); 3258 VerifySimulcastSettings(codec, 2, 2);
3259 } 3259 }
3260 } // namespace cricket 3260 } // namespace cricket
3261
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698