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

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

Issue 1838413002: Combining SetVideoSend and SetSource into one method. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Adding TODO. Created 4 years, 6 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
« no previous file with comments | « webrtc/media/engine/webrtcvideoengine2.cc ('k') | webrtc/pc/channel.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 239 matching lines...) Expand 10 before | Expand all | Expand 10 after
250 SetUpForExternalEncoderFactory(&encoder_factory, parameters.codecs)); 250 SetUpForExternalEncoderFactory(&encoder_factory, parameters.codecs));
251 EXPECT_TRUE(channel->AddSendStream(StreamParams::CreateLegacy(kSsrc))); 251 EXPECT_TRUE(channel->AddSendStream(StreamParams::CreateLegacy(kSsrc)));
252 252
253 // Add CVO extension. 253 // Add CVO extension.
254 const int id = 1; 254 const int id = 1;
255 parameters.extensions.push_back( 255 parameters.extensions.push_back(
256 RtpExtension(RtpExtension::kVideoRotationUri, id)); 256 RtpExtension(RtpExtension::kVideoRotationUri, id));
257 EXPECT_TRUE(channel->SetSendParameters(parameters)); 257 EXPECT_TRUE(channel->SetSendParameters(parameters));
258 258
259 // Set capturer. 259 // Set capturer.
260 channel->SetSource(kSsrc, &capturer); 260 EXPECT_TRUE(channel->SetVideoSend(kSsrc, true, nullptr, &capturer));
261 261
262 // Verify capturer has turned off applying rotation. 262 // Verify capturer has turned off applying rotation.
263 EXPECT_FALSE(capturer.apply_rotation()); 263 EXPECT_FALSE(capturer.apply_rotation());
264 264
265 // Verify removing header extension turns on applying rotation. 265 // Verify removing header extension turns on applying rotation.
266 parameters.extensions.clear(); 266 parameters.extensions.clear();
267 EXPECT_TRUE(channel->SetSendParameters(parameters)); 267 EXPECT_TRUE(channel->SetSendParameters(parameters));
268 EXPECT_TRUE(capturer.apply_rotation()); 268 EXPECT_TRUE(capturer.apply_rotation());
269 } 269 }
270 270
(...skipping 10 matching lines...) Expand all
281 std::unique_ptr<VideoMediaChannel> channel( 281 std::unique_ptr<VideoMediaChannel> channel(
282 SetUpForExternalEncoderFactory(&encoder_factory, parameters.codecs)); 282 SetUpForExternalEncoderFactory(&encoder_factory, parameters.codecs));
283 // Add CVO extension. 283 // Add CVO extension.
284 const int id = 1; 284 const int id = 1;
285 parameters.extensions.push_back( 285 parameters.extensions.push_back(
286 RtpExtension(RtpExtension::kVideoRotationUri, id)); 286 RtpExtension(RtpExtension::kVideoRotationUri, id));
287 EXPECT_TRUE(channel->SetSendParameters(parameters)); 287 EXPECT_TRUE(channel->SetSendParameters(parameters));
288 EXPECT_TRUE(channel->AddSendStream(StreamParams::CreateLegacy(kSsrc))); 288 EXPECT_TRUE(channel->AddSendStream(StreamParams::CreateLegacy(kSsrc)));
289 289
290 // Set capturer. 290 // Set capturer.
291 channel->SetSource(kSsrc, &capturer); 291 EXPECT_TRUE(channel->SetVideoSend(kSsrc, true, nullptr, &capturer));
292 292
293 // Verify capturer has turned off applying rotation. 293 // Verify capturer has turned off applying rotation.
294 EXPECT_FALSE(capturer.apply_rotation()); 294 EXPECT_FALSE(capturer.apply_rotation());
295 } 295 }
296 296
297 TEST_F(WebRtcVideoEngine2Test, CVOSetHeaderExtensionAfterCapturer) { 297 TEST_F(WebRtcVideoEngine2Test, CVOSetHeaderExtensionAfterCapturer) {
298 cricket::FakeVideoCapturer capturer; 298 cricket::FakeVideoCapturer capturer;
299 299
300 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; 300 cricket::FakeWebRtcVideoEncoderFactory encoder_factory;
301 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecVP8, "VP8"); 301 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecVP8, "VP8");
302 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecVP9, "VP9"); 302 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecVP9, "VP9");
303 cricket::VideoSendParameters parameters; 303 cricket::VideoSendParameters parameters;
304 parameters.codecs.push_back(kVp8Codec); 304 parameters.codecs.push_back(kVp8Codec);
305 parameters.codecs.push_back(kVp9Codec); 305 parameters.codecs.push_back(kVp9Codec);
306 306
307 std::unique_ptr<VideoMediaChannel> channel( 307 std::unique_ptr<VideoMediaChannel> channel(
308 SetUpForExternalEncoderFactory(&encoder_factory, parameters.codecs)); 308 SetUpForExternalEncoderFactory(&encoder_factory, parameters.codecs));
309 EXPECT_TRUE(channel->AddSendStream(StreamParams::CreateLegacy(kSsrc))); 309 EXPECT_TRUE(channel->AddSendStream(StreamParams::CreateLegacy(kSsrc)));
310 310
311 // Set capturer. 311 // Set capturer.
312 channel->SetSource(kSsrc, &capturer); 312 EXPECT_TRUE(channel->SetVideoSend(kSsrc, true, nullptr, &capturer));
313 313
314 // Verify capturer has turned on applying rotation. 314 // Verify capturer has turned on applying rotation.
315 EXPECT_TRUE(capturer.apply_rotation()); 315 EXPECT_TRUE(capturer.apply_rotation());
316 316
317 // Add CVO extension. 317 // Add CVO extension.
318 const int id = 1; 318 const int id = 1;
319 parameters.extensions.push_back( 319 parameters.extensions.push_back(
320 RtpExtension(RtpExtension::kVideoRotationUri, id)); 320 RtpExtension(RtpExtension::kVideoRotationUri, id));
321 // Also remove the first codec to trigger a codec change as well. 321 // Also remove the first codec to trigger a codec change as well.
322 parameters.codecs.erase(parameters.codecs.begin()); 322 parameters.codecs.erase(parameters.codecs.begin());
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
362 std::unique_ptr<VideoMediaChannel> channel( 362 std::unique_ptr<VideoMediaChannel> channel(
363 SetUpForExternalEncoderFactory(&encoder_factory, parameters.codecs)); 363 SetUpForExternalEncoderFactory(&encoder_factory, parameters.codecs));
364 364
365 EXPECT_TRUE( 365 EXPECT_TRUE(
366 channel->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc))); 366 channel->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc)));
367 ASSERT_TRUE(encoder_factory.WaitForCreatedVideoEncoders(1)); 367 ASSERT_TRUE(encoder_factory.WaitForCreatedVideoEncoders(1));
368 ASSERT_EQ(1u, encoder_factory.encoders().size()); 368 ASSERT_EQ(1u, encoder_factory.encoders().size());
369 EXPECT_TRUE(channel->SetSend(true)); 369 EXPECT_TRUE(channel->SetSend(true));
370 370
371 cricket::FakeVideoCapturer capturer; 371 cricket::FakeVideoCapturer capturer;
372 channel->SetSource(kSsrc, &capturer); 372 EXPECT_TRUE(channel->SetVideoSend(kSsrc, true, nullptr, &capturer));
373 EXPECT_EQ(cricket::CS_RUNNING, 373 EXPECT_EQ(cricket::CS_RUNNING,
374 capturer.Start(capturer.GetSupportedFormats()->front())); 374 capturer.Start(capturer.GetSupportedFormats()->front()));
375 EXPECT_TRUE(capturer.CaptureFrame()); 375 EXPECT_TRUE(capturer.CaptureFrame());
376 // Sending one frame will have reallocated the encoder since input size 376 // Sending one frame will have reallocated the encoder since input size
377 // changes from a small default to the actual frame width/height. Wait for 377 // changes from a small default to the actual frame width/height. Wait for
378 // that to happen then for the frame to be sent. 378 // that to happen then for the frame to be sent.
379 ASSERT_TRUE(encoder_factory.WaitForCreatedVideoEncoders(2)); 379 ASSERT_TRUE(encoder_factory.WaitForCreatedVideoEncoders(2));
380 EXPECT_TRUE_WAIT(encoder_factory.encoders()[0]->GetNumEncodedFrames() > 0, 380 EXPECT_TRUE_WAIT(encoder_factory.encoders()[0]->GetNumEncodedFrames() > 0,
381 kTimeout); 381 kTimeout);
382 382
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
453 453
454 FakeCall* fake_call = new FakeCall(webrtc::Call::Config()); 454 FakeCall* fake_call = new FakeCall(webrtc::Call::Config());
455 call_.reset(fake_call); 455 call_.reset(fake_call);
456 std::unique_ptr<VideoMediaChannel> channel( 456 std::unique_ptr<VideoMediaChannel> channel(
457 SetUpForExternalEncoderFactory(&encoder_factory, codecs)); 457 SetUpForExternalEncoderFactory(&encoder_factory, codecs));
458 458
459 EXPECT_TRUE( 459 EXPECT_TRUE(
460 channel->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc))); 460 channel->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc)));
461 461
462 FakeVideoCapturer capturer; 462 FakeVideoCapturer capturer;
463 channel->SetSource(kSsrc, &capturer); 463 EXPECT_TRUE(channel->SetVideoSend(kSsrc, true, nullptr, &capturer));
464 capturer.Start(cricket::VideoFormat(1280, 720, 464 capturer.Start(cricket::VideoFormat(1280, 720,
465 cricket::VideoFormat::FpsToInterval(60), 465 cricket::VideoFormat::FpsToInterval(60),
466 cricket::FOURCC_I420)); 466 cricket::FOURCC_I420));
467 channel->SetSend(true); 467 channel->SetSend(true);
468 468
469 FakeVideoSendStream* stream = fake_call->GetVideoSendStreams()[0]; 469 FakeVideoSendStream* stream = fake_call->GetVideoSendStreams()[0];
470 470
471 EXPECT_TRUE(capturer.CaptureFrame()); 471 EXPECT_TRUE(capturer.CaptureFrame());
472 int64_t last_timestamp = stream->GetLastTimestamp(); 472 int64_t last_timestamp = stream->GetLastTimestamp();
473 for (int i = 0; i < 10; i++) { 473 for (int i = 0; i < 10; i++) {
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
515 call_.reset(fake_call); 515 call_.reset(fake_call);
516 std::unique_ptr<VideoMediaChannel> channel( 516 std::unique_ptr<VideoMediaChannel> channel(
517 SetUpForExternalEncoderFactory(&encoder_factory, codecs)); 517 SetUpForExternalEncoderFactory(&encoder_factory, codecs));
518 518
519 EXPECT_TRUE( 519 EXPECT_TRUE(
520 channel->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc))); 520 channel->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc)));
521 channel->SetSend(true); 521 channel->SetSend(true);
522 FakeVideoSendStream* stream = fake_call->GetVideoSendStreams()[0]; 522 FakeVideoSendStream* stream = fake_call->GetVideoSendStreams()[0];
523 523
524 FakeVideoCapturer capturer1; 524 FakeVideoCapturer capturer1;
525 channel->SetSource(kSsrc, &capturer1); 525 EXPECT_TRUE(channel->SetVideoSend(kSsrc, true, nullptr, &capturer1));
526 526
527 cricket::CapturedFrame frame; 527 cricket::CapturedFrame frame;
528 frame.width = 1280; 528 frame.width = 1280;
529 frame.height = 720; 529 frame.height = 720;
530 frame.fourcc = cricket::FOURCC_I420; 530 frame.fourcc = cricket::FOURCC_I420;
531 frame.data_size = frame.width * frame.height + 531 frame.data_size = frame.width * frame.height +
532 2 * ((frame.width + 1) / 2) * ((frame.height + 1) / 2); 532 2 * ((frame.width + 1) / 2) * ((frame.height + 1) / 2);
533 std::unique_ptr<char[]> data(new char[frame.data_size]); 533 std::unique_ptr<char[]> data(new char[frame.data_size]);
534 frame.data = data.get(); 534 frame.data = data.get();
535 memset(frame.data, 1, frame.data_size); 535 memset(frame.data, 1, frame.data_size);
536 int64_t initial_timestamp = rtc::TimeNanos(); 536 int64_t initial_timestamp = rtc::TimeNanos();
537 frame.time_stamp = initial_timestamp; 537 frame.time_stamp = initial_timestamp;
538 538
539 // Deliver initial frame. 539 // Deliver initial frame.
540 capturer1.SignalCapturedFrame(&frame); 540 capturer1.SignalCapturedFrame(&frame);
541 // Deliver next frame 1 second later. 541 // Deliver next frame 1 second later.
542 frame.time_stamp += rtc::kNumNanosecsPerSec; 542 frame.time_stamp += rtc::kNumNanosecsPerSec;
543 rtc::Thread::Current()->SleepMs(1000); 543 rtc::Thread::Current()->SleepMs(1000);
544 capturer1.SignalCapturedFrame(&frame); 544 capturer1.SignalCapturedFrame(&frame);
545 545
546 int64_t capturer1_last_timestamp = stream->GetLastTimestamp(); 546 int64_t capturer1_last_timestamp = stream->GetLastTimestamp();
547 // Reset input source, should still be continuous even though input-frame 547 // Reset input source, should still be continuous even though input-frame
548 // timestamp is less than before. 548 // timestamp is less than before.
549 FakeVideoCapturer capturer2; 549 FakeVideoCapturer capturer2;
550 channel->SetSource(kSsrc, &capturer2); 550 EXPECT_TRUE(channel->SetVideoSend(kSsrc, true, nullptr, &capturer2));
551 551
552 rtc::Thread::Current()->SleepMs(1); 552 rtc::Thread::Current()->SleepMs(1);
553 // Deliver with a timestamp (10 seconds) before the previous initial one, 553 // Deliver with a timestamp (10 seconds) before the previous initial one,
554 // these should not be related at all anymore and it should still work fine. 554 // these should not be related at all anymore and it should still work fine.
555 frame.time_stamp = initial_timestamp - 10 * rtc::kNumNanosecsPerSec; 555 frame.time_stamp = initial_timestamp - 10 * rtc::kNumNanosecsPerSec;
556 capturer2.SignalCapturedFrame(&frame); 556 capturer2.SignalCapturedFrame(&frame);
557 557
558 // New timestamp should be at least 1ms in the future and not old. 558 // New timestamp should be at least 1ms in the future and not old.
559 EXPECT_GT(stream->GetLastTimestamp(), capturer1_last_timestamp); 559 EXPECT_GT(stream->GetLastTimestamp(), capturer1_last_timestamp);
560 560
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
600 std::unique_ptr<VideoMediaChannel> channel( 600 std::unique_ptr<VideoMediaChannel> channel(
601 SetUpForExternalEncoderFactory(&encoder_factory, codecs)); 601 SetUpForExternalEncoderFactory(&encoder_factory, codecs));
602 602
603 std::vector<uint32_t> ssrcs = MAKE_VECTOR(kSsrcs3); 603 std::vector<uint32_t> ssrcs = MAKE_VECTOR(kSsrcs3);
604 604
605 EXPECT_TRUE( 605 EXPECT_TRUE(
606 channel->AddSendStream(CreateSimStreamParams("cname", ssrcs))); 606 channel->AddSendStream(CreateSimStreamParams("cname", ssrcs)));
607 EXPECT_TRUE(channel->SetSend(true)); 607 EXPECT_TRUE(channel->SetSend(true));
608 608
609 cricket::FakeVideoCapturer capturer; 609 cricket::FakeVideoCapturer capturer;
610 channel->SetSource(ssrcs.front(), &capturer); 610 EXPECT_TRUE(channel->SetVideoSend(ssrcs.front(), true, nullptr, &capturer));
611 EXPECT_EQ(cricket::CS_RUNNING, 611 EXPECT_EQ(cricket::CS_RUNNING,
612 capturer.Start(capturer.GetSupportedFormats()->front())); 612 capturer.Start(capturer.GetSupportedFormats()->front()));
613 EXPECT_TRUE(capturer.CaptureFrame()); 613 EXPECT_TRUE(capturer.CaptureFrame());
614 614
615 ASSERT_TRUE(encoder_factory.WaitForCreatedVideoEncoders(2)); 615 ASSERT_TRUE(encoder_factory.WaitForCreatedVideoEncoders(2));
616 616
617 // Verify that encoders are configured for simulcast through adapter 617 // Verify that encoders are configured for simulcast through adapter
618 // (increasing resolution and only configured to send one stream each). 618 // (increasing resolution and only configured to send one stream each).
619 int prev_width = -1; 619 int prev_width = -1;
620 for (size_t i = 0; i < encoder_factory.encoders().size(); ++i) { 620 for (size_t i = 0; i < encoder_factory.encoders().size(); ++i) {
621 ASSERT_TRUE(encoder_factory.encoders()[i]->WaitForInitEncode()); 621 ASSERT_TRUE(encoder_factory.encoders()[i]->WaitForInitEncode());
622 webrtc::VideoCodec codec_settings = 622 webrtc::VideoCodec codec_settings =
623 encoder_factory.encoders()[i]->GetCodecSettings(); 623 encoder_factory.encoders()[i]->GetCodecSettings();
624 EXPECT_EQ(0, codec_settings.numberOfSimulcastStreams); 624 EXPECT_EQ(0, codec_settings.numberOfSimulcastStreams);
625 EXPECT_GT(codec_settings.width, prev_width); 625 EXPECT_GT(codec_settings.width, prev_width);
626 prev_width = codec_settings.width; 626 prev_width = codec_settings.width;
627 } 627 }
628 628
629 channel->SetSource(ssrcs.front(), NULL); 629 EXPECT_TRUE(channel->SetVideoSend(ssrcs.front(), true, nullptr, nullptr));
630 630
631 channel.reset(); 631 channel.reset();
632 ASSERT_EQ(0u, encoder_factory.encoders().size()); 632 ASSERT_EQ(0u, encoder_factory.encoders().size());
633 } 633 }
634 634
635 TEST_F(WebRtcVideoEngine2Test, ChannelWithExternalH264CanChangeToInternalVp8) { 635 TEST_F(WebRtcVideoEngine2Test, ChannelWithExternalH264CanChangeToInternalVp8) {
636 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; 636 cricket::FakeWebRtcVideoEncoderFactory encoder_factory;
637 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecH264, "H264"); 637 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecH264, "H264");
638 std::vector<cricket::VideoCodec> codecs; 638 std::vector<cricket::VideoCodec> codecs;
639 codecs.push_back(kH264Codec); 639 codecs.push_back(kH264Codec);
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
682 std::vector<uint32_t> ssrcs = MAKE_VECTOR(kSsrcs3); 682 std::vector<uint32_t> ssrcs = MAKE_VECTOR(kSsrcs3);
683 683
684 EXPECT_TRUE( 684 EXPECT_TRUE(
685 channel->AddSendStream(CreateSimStreamParams("cname", ssrcs))); 685 channel->AddSendStream(CreateSimStreamParams("cname", ssrcs)));
686 EXPECT_TRUE(channel->SetSend(true)); 686 EXPECT_TRUE(channel->SetSend(true));
687 687
688 // Send a fake frame, or else the media engine will configure the simulcast 688 // Send a fake frame, or else the media engine will configure the simulcast
689 // encoder adapter at a low-enough size that it'll only create a single 689 // encoder adapter at a low-enough size that it'll only create a single
690 // encoder layer. 690 // encoder layer.
691 cricket::FakeVideoCapturer capturer; 691 cricket::FakeVideoCapturer capturer;
692 channel->SetSource(ssrcs.front(), &capturer); 692 EXPECT_TRUE(channel->SetVideoSend(ssrcs.front(), true, nullptr, &capturer));
693 EXPECT_EQ(cricket::CS_RUNNING, 693 EXPECT_EQ(cricket::CS_RUNNING,
694 capturer.Start(capturer.GetSupportedFormats()->front())); 694 capturer.Start(capturer.GetSupportedFormats()->front()));
695 EXPECT_TRUE(capturer.CaptureFrame()); 695 EXPECT_TRUE(capturer.CaptureFrame());
696 696
697 ASSERT_TRUE(encoder_factory.WaitForCreatedVideoEncoders(2)); 697 ASSERT_TRUE(encoder_factory.WaitForCreatedVideoEncoders(2));
698 ASSERT_TRUE(encoder_factory.encoders()[0]->WaitForInitEncode()); 698 ASSERT_TRUE(encoder_factory.encoders()[0]->WaitForInitEncode());
699 EXPECT_EQ(webrtc::kVideoCodecVP8, 699 EXPECT_EQ(webrtc::kVideoCodecVP8,
700 encoder_factory.encoders()[0]->GetCodecSettings().codecType); 700 encoder_factory.encoders()[0]->GetCodecSettings().codecType);
701 701
702 channel.reset(); 702 channel.reset();
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
738 SetUpForExternalEncoderFactory(&encoder_factory, codecs)); 738 SetUpForExternalEncoderFactory(&encoder_factory, codecs));
739 739
740 const std::vector<uint32_t> ssrcs = MAKE_VECTOR(kSsrcs3); 740 const std::vector<uint32_t> ssrcs = MAKE_VECTOR(kSsrcs3);
741 EXPECT_TRUE( 741 EXPECT_TRUE(
742 channel->AddSendStream(cricket::CreateSimStreamParams("cname", ssrcs))); 742 channel->AddSendStream(cricket::CreateSimStreamParams("cname", ssrcs)));
743 743
744 // Send a frame of 720p. This should trigger a "real" encoder initialization. 744 // Send a frame of 720p. This should trigger a "real" encoder initialization.
745 cricket::VideoFormat format( 745 cricket::VideoFormat format(
746 1280, 720, cricket::VideoFormat::FpsToInterval(30), cricket::FOURCC_I420); 746 1280, 720, cricket::VideoFormat::FpsToInterval(30), cricket::FOURCC_I420);
747 cricket::FakeVideoCapturer capturer; 747 cricket::FakeVideoCapturer capturer;
748 channel->SetSource(ssrcs[0], &capturer); 748 EXPECT_TRUE(channel->SetVideoSend(ssrcs[0], true, nullptr, &capturer));
749 EXPECT_EQ(cricket::CS_RUNNING, capturer.Start(format)); 749 EXPECT_EQ(cricket::CS_RUNNING, capturer.Start(format));
750 EXPECT_TRUE(capturer.CaptureFrame()); 750 EXPECT_TRUE(capturer.CaptureFrame());
751 751
752 ASSERT_EQ(1u, encoder_factory.encoders().size()); 752 ASSERT_EQ(1u, encoder_factory.encoders().size());
753 FakeWebRtcVideoEncoder* encoder = encoder_factory.encoders()[0]; 753 FakeWebRtcVideoEncoder* encoder = encoder_factory.encoders()[0];
754 ASSERT_TRUE(encoder_factory.encoders()[0]->WaitForInitEncode()); 754 ASSERT_TRUE(encoder_factory.encoders()[0]->WaitForInitEncode());
755 EXPECT_EQ(webrtc::kVideoCodecH264, encoder->GetCodecSettings().codecType); 755 EXPECT_EQ(webrtc::kVideoCodecH264, encoder->GetCodecSettings().codecType);
756 EXPECT_EQ(1u, encoder->GetCodecSettings().numberOfSimulcastStreams); 756 EXPECT_EQ(1u, encoder->GetCodecSettings().numberOfSimulcastStreams);
757 channel->SetSource(ssrcs[0], nullptr); 757 EXPECT_TRUE(channel->SetVideoSend(ssrcs[0], true, nullptr, nullptr));
758 } 758 }
759 759
760 // Test that external codecs are added to the end of the supported codec list. 760 // Test that external codecs are added to the end of the supported codec list.
761 TEST_F(WebRtcVideoEngine2Test, ReportSupportedExternalCodecs) { 761 TEST_F(WebRtcVideoEngine2Test, ReportSupportedExternalCodecs) {
762 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; 762 cricket::FakeWebRtcVideoEncoderFactory encoder_factory;
763 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecUnknown, 763 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecUnknown,
764 "FakeExternalCodec"); 764 "FakeExternalCodec");
765 engine_.SetExternalEncoderFactory(&encoder_factory); 765 engine_.SetExternalEncoderFactory(&encoder_factory);
766 engine_.Init(); 766 engine_.Init();
767 767
(...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after
1068 void TestReceiverLocalSsrcConfiguration(bool receiver_first); 1068 void TestReceiverLocalSsrcConfiguration(bool receiver_first);
1069 void TestReceiveUnsignalledSsrcPacket(uint8_t payload_type, 1069 void TestReceiveUnsignalledSsrcPacket(uint8_t payload_type,
1070 bool expect_created_receive_stream); 1070 bool expect_created_receive_stream);
1071 1071
1072 FakeVideoSendStream* SetDenoisingOption( 1072 FakeVideoSendStream* SetDenoisingOption(
1073 uint32_t ssrc, 1073 uint32_t ssrc,
1074 cricket::FakeVideoCapturer* capturer, 1074 cricket::FakeVideoCapturer* capturer,
1075 bool enabled) { 1075 bool enabled) {
1076 cricket::VideoOptions options; 1076 cricket::VideoOptions options;
1077 options.video_noise_reduction = rtc::Optional<bool>(enabled); 1077 options.video_noise_reduction = rtc::Optional<bool>(enabled);
1078 channel_->SetVideoSend(ssrc, true, &options); 1078 EXPECT_TRUE(channel_->SetVideoSend(ssrc, true, &options, capturer));
1079 // Options only take effect on the next frame. 1079 // Options only take effect on the next frame.
1080 EXPECT_TRUE(capturer->CaptureFrame()); 1080 EXPECT_TRUE(capturer->CaptureFrame());
1081 1081
1082 return fake_call_->GetVideoSendStreams().back(); 1082 return fake_call_->GetVideoSendStreams().back();
1083 } 1083 }
1084 1084
1085 FakeVideoSendStream* SetUpSimulcast(bool enabled, bool with_rtx) { 1085 FakeVideoSendStream* SetUpSimulcast(bool enabled, bool with_rtx) {
1086 const int kRtxSsrcOffset = 0xDEADBEEF; 1086 const int kRtxSsrcOffset = 0xDEADBEEF;
1087 last_ssrc_ += 3; 1087 last_ssrc_ += 3;
1088 std::vector<uint32_t> ssrcs; 1088 std::vector<uint32_t> ssrcs;
(...skipping 462 matching lines...) Expand 10 before | Expand all | Expand 10 after
1551 channel_->SetSend(false); 1551 channel_->SetSend(false);
1552 1552
1553 FakeVideoSendStream* stream = AddSendStream(); 1553 FakeVideoSendStream* stream = AddSendStream();
1554 1554
1555 // No frames entered, using default dimensions. 1555 // No frames entered, using default dimensions.
1556 std::vector<webrtc::VideoStream> streams = stream->GetVideoStreams(); 1556 std::vector<webrtc::VideoStream> streams = stream->GetVideoStreams();
1557 EXPECT_EQ(176u, streams[0].width); 1557 EXPECT_EQ(176u, streams[0].width);
1558 EXPECT_EQ(144u, streams[0].height); 1558 EXPECT_EQ(144u, streams[0].height);
1559 1559
1560 cricket::FakeVideoCapturer capturer; 1560 cricket::FakeVideoCapturer capturer;
1561 channel_->SetSource(last_ssrc_, &capturer); 1561 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, &capturer));
1562 EXPECT_EQ(cricket::CS_RUNNING, 1562 EXPECT_EQ(cricket::CS_RUNNING,
1563 capturer.Start(capturer.GetSupportedFormats()->front())); 1563 capturer.Start(capturer.GetSupportedFormats()->front()));
1564 EXPECT_TRUE(capturer.CaptureFrame()); 1564 EXPECT_TRUE(capturer.CaptureFrame());
1565 1565
1566 // Frame entered, should be reconfigured to new dimensions. 1566 // Frame entered, should be reconfigured to new dimensions.
1567 streams = stream->GetVideoStreams(); 1567 streams = stream->GetVideoStreams();
1568 EXPECT_EQ(kVp8Codec720p.width, streams[0].width); 1568 EXPECT_EQ(kVp8Codec720p.width, streams[0].width);
1569 EXPECT_EQ(kVp8Codec720p.height, streams[0].height); 1569 EXPECT_EQ(kVp8Codec720p.height, streams[0].height);
1570 // No frames should have been actually put in there though. 1570 // No frames should have been actually put in there though.
1571 EXPECT_EQ(0, stream->GetNumberOfSwappedFrames()); 1571 EXPECT_EQ(0, stream->GetNumberOfSwappedFrames());
1572 1572
1573 channel_->SetSource(last_ssrc_, NULL); 1573 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, nullptr));
1574 } 1574 }
1575 1575
1576 TEST_F(WebRtcVideoChannel2Test, UsesCorrectSettingsForScreencast) { 1576 TEST_F(WebRtcVideoChannel2Test, UsesCorrectSettingsForScreencast) {
1577 static const int kScreenshareMinBitrateKbps = 800; 1577 static const int kScreenshareMinBitrateKbps = 800;
1578 cricket::VideoCodec codec = kVp8Codec360p; 1578 cricket::VideoCodec codec = kVp8Codec360p;
1579 cricket::VideoSendParameters parameters; 1579 cricket::VideoSendParameters parameters;
1580 parameters.codecs.push_back(codec); 1580 parameters.codecs.push_back(codec);
1581 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1581 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1582 AddSendStream(); 1582 AddSendStream();
1583 1583
1584 cricket::FakeVideoCapturer capturer;
1584 VideoOptions min_bitrate_options; 1585 VideoOptions min_bitrate_options;
1585 min_bitrate_options.screencast_min_bitrate_kbps = 1586 min_bitrate_options.screencast_min_bitrate_kbps =
1586 rtc::Optional<int>(kScreenshareMinBitrateKbps); 1587 rtc::Optional<int>(kScreenshareMinBitrateKbps);
1587 channel_->SetVideoSend(last_ssrc_, true, &min_bitrate_options); 1588 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, &min_bitrate_options,
1588 1589 &capturer));
1589 cricket::FakeVideoCapturer capturer;
1590 channel_->SetSource(last_ssrc_, &capturer);
1591 cricket::VideoFormat capture_format_hd = 1590 cricket::VideoFormat capture_format_hd =
1592 capturer.GetSupportedFormats()->front(); 1591 capturer.GetSupportedFormats()->front();
1593 EXPECT_EQ(1280, capture_format_hd.width); 1592 EXPECT_EQ(1280, capture_format_hd.width);
1594 EXPECT_EQ(720, capture_format_hd.height); 1593 EXPECT_EQ(720, capture_format_hd.height);
1595 EXPECT_EQ(cricket::CS_RUNNING, capturer.Start(capture_format_hd)); 1594 EXPECT_EQ(cricket::CS_RUNNING, capturer.Start(capture_format_hd));
1596 1595
1597 EXPECT_TRUE(channel_->SetSend(true)); 1596 EXPECT_TRUE(channel_->SetSend(true));
1598 1597
1599 EXPECT_TRUE(capturer.CaptureFrame()); 1598 EXPECT_TRUE(capturer.CaptureFrame());
1600 ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size()); 1599 ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size());
1601 FakeVideoSendStream* send_stream = fake_call_->GetVideoSendStreams().front(); 1600 FakeVideoSendStream* send_stream = fake_call_->GetVideoSendStreams().front();
1602 1601
1603 EXPECT_EQ(1, send_stream->GetNumberOfSwappedFrames()); 1602 EXPECT_EQ(1, send_stream->GetNumberOfSwappedFrames());
1604 1603
1605 // Verify non-screencast settings. 1604 // Verify non-screencast settings.
1606 webrtc::VideoEncoderConfig encoder_config = send_stream->GetEncoderConfig(); 1605 webrtc::VideoEncoderConfig encoder_config = send_stream->GetEncoderConfig();
1607 EXPECT_EQ(webrtc::VideoEncoderConfig::ContentType::kRealtimeVideo, 1606 EXPECT_EQ(webrtc::VideoEncoderConfig::ContentType::kRealtimeVideo,
1608 encoder_config.content_type); 1607 encoder_config.content_type);
1609 EXPECT_EQ(codec.width, encoder_config.streams.front().width); 1608 EXPECT_EQ(codec.width, encoder_config.streams.front().width);
1610 EXPECT_EQ(codec.height, encoder_config.streams.front().height); 1609 EXPECT_EQ(codec.height, encoder_config.streams.front().height);
1611 EXPECT_EQ(0, encoder_config.min_transmit_bitrate_bps) 1610 EXPECT_EQ(0, encoder_config.min_transmit_bitrate_bps)
1612 << "Non-screenshare shouldn't use min-transmit bitrate."; 1611 << "Non-screenshare shouldn't use min-transmit bitrate.";
1613 1612
1614 channel_->SetSource(last_ssrc_, nullptr); 1613 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, nullptr));
1615 // Removing a capturer triggers a black frame to be sent. 1614 // Removing a capturer triggers a black frame to be sent.
1616 EXPECT_EQ(2, send_stream->GetNumberOfSwappedFrames()); 1615 EXPECT_EQ(2, send_stream->GetNumberOfSwappedFrames());
1617 channel_->SetSource(last_ssrc_, &capturer);
1618 VideoOptions screencast_options; 1616 VideoOptions screencast_options;
1619 screencast_options.is_screencast = rtc::Optional<bool>(true); 1617 screencast_options.is_screencast = rtc::Optional<bool>(true);
1620 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, &screencast_options)); 1618 EXPECT_TRUE(
1619 channel_->SetVideoSend(last_ssrc_, true, &screencast_options, &capturer));
1621 EXPECT_TRUE(capturer.CaptureFrame()); 1620 EXPECT_TRUE(capturer.CaptureFrame());
1622 // Send stream not recreated after option change. 1621 // Send stream not recreated after option change.
1623 ASSERT_EQ(send_stream, fake_call_->GetVideoSendStreams().front()); 1622 ASSERT_EQ(send_stream, fake_call_->GetVideoSendStreams().front());
1624 EXPECT_EQ(3, send_stream->GetNumberOfSwappedFrames()); 1623 EXPECT_EQ(3, send_stream->GetNumberOfSwappedFrames());
1625 1624
1626 // Verify screencast settings. 1625 // Verify screencast settings.
1627 encoder_config = send_stream->GetEncoderConfig(); 1626 encoder_config = send_stream->GetEncoderConfig();
1628 EXPECT_EQ(webrtc::VideoEncoderConfig::ContentType::kScreen, 1627 EXPECT_EQ(webrtc::VideoEncoderConfig::ContentType::kScreen,
1629 encoder_config.content_type); 1628 encoder_config.content_type);
1630 EXPECT_EQ(kScreenshareMinBitrateKbps * 1000, 1629 EXPECT_EQ(kScreenshareMinBitrateKbps * 1000,
1631 encoder_config.min_transmit_bitrate_bps); 1630 encoder_config.min_transmit_bitrate_bps);
1632 1631
1633 EXPECT_EQ(capture_format_hd.width, encoder_config.streams.front().width); 1632 EXPECT_EQ(capture_format_hd.width, encoder_config.streams.front().width);
1634 EXPECT_EQ(capture_format_hd.height, encoder_config.streams.front().height); 1633 EXPECT_EQ(capture_format_hd.height, encoder_config.streams.front().height);
1635 EXPECT_TRUE(encoder_config.streams[0].temporal_layer_thresholds_bps.empty()); 1634 EXPECT_TRUE(encoder_config.streams[0].temporal_layer_thresholds_bps.empty());
1636 1635
1637 channel_->SetSource(last_ssrc_, NULL); 1636 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, nullptr));
1638 } 1637 }
1639 1638
1640 TEST_F(WebRtcVideoChannel2Test, NoRecreateStreamForScreencast) { 1639 TEST_F(WebRtcVideoChannel2Test, NoRecreateStreamForScreencast) {
1641 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_)); 1640 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_));
1642 ASSERT_TRUE( 1641 ASSERT_TRUE(
1643 channel_->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc))); 1642 channel_->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc)));
1644 EXPECT_TRUE(channel_->SetSend(true)); 1643 EXPECT_TRUE(channel_->SetSend(true));
1645 1644
1646 cricket::FakeVideoCapturer capturer; 1645 cricket::FakeVideoCapturer capturer;
1647 channel_->SetSource(kSsrc, &capturer); 1646 EXPECT_TRUE(channel_->SetVideoSend(kSsrc, true, nullptr, &capturer));
1648 EXPECT_EQ(cricket::CS_RUNNING, 1647 EXPECT_EQ(cricket::CS_RUNNING,
1649 capturer.Start(capturer.GetSupportedFormats()->front())); 1648 capturer.Start(capturer.GetSupportedFormats()->front()));
1650 EXPECT_TRUE(capturer.CaptureFrame()); 1649 EXPECT_TRUE(capturer.CaptureFrame());
1651 1650
1652 ASSERT_EQ(1, fake_call_->GetNumCreatedSendStreams()); 1651 ASSERT_EQ(1, fake_call_->GetNumCreatedSendStreams());
1653 FakeVideoSendStream* stream = fake_call_->GetVideoSendStreams().front(); 1652 FakeVideoSendStream* stream = fake_call_->GetVideoSendStreams().front();
1654 webrtc::VideoEncoderConfig encoder_config = stream->GetEncoderConfig(); 1653 webrtc::VideoEncoderConfig encoder_config = stream->GetEncoderConfig();
1655 EXPECT_EQ(webrtc::VideoEncoderConfig::ContentType::kRealtimeVideo, 1654 EXPECT_EQ(webrtc::VideoEncoderConfig::ContentType::kRealtimeVideo,
1656 encoder_config.content_type); 1655 encoder_config.content_type);
1657 1656
1658 EXPECT_EQ(1, stream->GetNumberOfSwappedFrames()); 1657 EXPECT_EQ(1, stream->GetNumberOfSwappedFrames());
1659 1658
1660 /* Switch to screencast source. We expect a reconfigure of the 1659 /* Switch to screencast source. We expect a reconfigure of the
1661 * encoder, but no change of the send stream. */ 1660 * encoder, but no change of the send stream. */
1662 struct VideoOptions video_options; 1661 struct VideoOptions video_options;
1663 video_options.is_screencast = rtc::Optional<bool>(true); 1662 video_options.is_screencast = rtc::Optional<bool>(true);
1664 channel_->SetVideoSend(kSsrc, true, &video_options); 1663 EXPECT_TRUE(channel_->SetVideoSend(kSsrc, true, &video_options, &capturer));
1665 1664
1666 EXPECT_TRUE(capturer.CaptureFrame()); 1665 EXPECT_TRUE(capturer.CaptureFrame());
1667 ASSERT_EQ(1, fake_call_->GetNumCreatedSendStreams()); 1666 ASSERT_EQ(1, fake_call_->GetNumCreatedSendStreams());
1668 ASSERT_EQ(stream, fake_call_->GetVideoSendStreams().front()); 1667 ASSERT_EQ(stream, fake_call_->GetVideoSendStreams().front());
1669 EXPECT_EQ(2, stream->GetNumberOfSwappedFrames()); 1668 EXPECT_EQ(2, stream->GetNumberOfSwappedFrames());
1670 1669
1671 encoder_config = stream->GetEncoderConfig(); 1670 encoder_config = stream->GetEncoderConfig();
1672 EXPECT_EQ(webrtc::VideoEncoderConfig::ContentType::kScreen, 1671 EXPECT_EQ(webrtc::VideoEncoderConfig::ContentType::kScreen,
1673 encoder_config.content_type); 1672 encoder_config.content_type);
1674 1673
1675 /* Switch back. */ 1674 /* Switch back. */
1676 video_options.is_screencast = rtc::Optional<bool>(false); 1675 video_options.is_screencast = rtc::Optional<bool>(false);
1677 channel_->SetVideoSend(kSsrc, true, &video_options); 1676 EXPECT_TRUE(channel_->SetVideoSend(kSsrc, true, &video_options, &capturer));
1678 1677
1679 EXPECT_TRUE(capturer.CaptureFrame()); 1678 EXPECT_TRUE(capturer.CaptureFrame());
1680 ASSERT_EQ(1, fake_call_->GetNumCreatedSendStreams()); 1679 ASSERT_EQ(1, fake_call_->GetNumCreatedSendStreams());
1681 ASSERT_EQ(stream, fake_call_->GetVideoSendStreams().front()); 1680 ASSERT_EQ(stream, fake_call_->GetVideoSendStreams().front());
1682 EXPECT_EQ(3, stream->GetNumberOfSwappedFrames()); 1681 EXPECT_EQ(3, stream->GetNumberOfSwappedFrames());
1683 1682
1684 encoder_config = stream->GetEncoderConfig(); 1683 encoder_config = stream->GetEncoderConfig();
1685 EXPECT_EQ(webrtc::VideoEncoderConfig::ContentType::kRealtimeVideo, 1684 EXPECT_EQ(webrtc::VideoEncoderConfig::ContentType::kRealtimeVideo,
1686 encoder_config.content_type); 1685 encoder_config.content_type);
1687 1686
1688 channel_->SetSource(kSsrc, NULL); 1687 EXPECT_TRUE(channel_->SetVideoSend(kSsrc, true, nullptr, nullptr));
1689 } 1688 }
1690 1689
1691 TEST_F(WebRtcVideoChannel2Test, 1690 TEST_F(WebRtcVideoChannel2Test,
1692 ConferenceModeScreencastConfiguresTemporalLayer) { 1691 ConferenceModeScreencastConfiguresTemporalLayer) {
1693 static const int kConferenceScreencastTemporalBitrateBps = 1692 static const int kConferenceScreencastTemporalBitrateBps =
1694 ScreenshareLayerConfig::GetDefault().tl0_bitrate_kbps * 1000; 1693 ScreenshareLayerConfig::GetDefault().tl0_bitrate_kbps * 1000;
1695 send_parameters_.conference_mode = true; 1694 send_parameters_.conference_mode = true;
1696 channel_->SetSendParameters(send_parameters_); 1695 channel_->SetSendParameters(send_parameters_);
1697 1696
1698 AddSendStream(); 1697 AddSendStream();
1699 VideoOptions options; 1698 VideoOptions options;
1700 options.is_screencast = rtc::Optional<bool>(true); 1699 options.is_screencast = rtc::Optional<bool>(true);
1701 channel_->SetVideoSend(last_ssrc_, true, &options);
1702 cricket::FakeVideoCapturer capturer; 1700 cricket::FakeVideoCapturer capturer;
1703 channel_->SetSource(last_ssrc_, &capturer); 1701 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, &options, &capturer));
1704 cricket::VideoFormat capture_format_hd = 1702 cricket::VideoFormat capture_format_hd =
1705 capturer.GetSupportedFormats()->front(); 1703 capturer.GetSupportedFormats()->front();
1706 EXPECT_EQ(cricket::CS_RUNNING, capturer.Start(capture_format_hd)); 1704 EXPECT_EQ(cricket::CS_RUNNING, capturer.Start(capture_format_hd));
1707 1705
1708 EXPECT_TRUE(channel_->SetSend(true)); 1706 EXPECT_TRUE(channel_->SetSend(true));
1709 1707
1710 EXPECT_TRUE(capturer.CaptureFrame()); 1708 EXPECT_TRUE(capturer.CaptureFrame());
1711 ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size()); 1709 ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size());
1712 FakeVideoSendStream* send_stream = fake_call_->GetVideoSendStreams().front(); 1710 FakeVideoSendStream* send_stream = fake_call_->GetVideoSendStreams().front();
1713 1711
1714 webrtc::VideoEncoderConfig encoder_config = send_stream->GetEncoderConfig(); 1712 webrtc::VideoEncoderConfig encoder_config = send_stream->GetEncoderConfig();
1715 1713
1716 // Verify screencast settings. 1714 // Verify screencast settings.
1717 encoder_config = send_stream->GetEncoderConfig(); 1715 encoder_config = send_stream->GetEncoderConfig();
1718 EXPECT_EQ(webrtc::VideoEncoderConfig::ContentType::kScreen, 1716 EXPECT_EQ(webrtc::VideoEncoderConfig::ContentType::kScreen,
1719 encoder_config.content_type); 1717 encoder_config.content_type);
1720 ASSERT_EQ(1u, encoder_config.streams.size()); 1718 ASSERT_EQ(1u, encoder_config.streams.size());
1721 ASSERT_EQ(1u, encoder_config.streams[0].temporal_layer_thresholds_bps.size()); 1719 ASSERT_EQ(1u, encoder_config.streams[0].temporal_layer_thresholds_bps.size());
1722 EXPECT_EQ(kConferenceScreencastTemporalBitrateBps, 1720 EXPECT_EQ(kConferenceScreencastTemporalBitrateBps,
1723 encoder_config.streams[0].temporal_layer_thresholds_bps[0]); 1721 encoder_config.streams[0].temporal_layer_thresholds_bps[0]);
1724 1722
1725 channel_->SetSource(last_ssrc_, NULL); 1723 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, nullptr));
1726 } 1724 }
1727 1725
1728 TEST_F(WebRtcVideoChannel2Test, SuspendBelowMinBitrateDisabledByDefault) { 1726 TEST_F(WebRtcVideoChannel2Test, SuspendBelowMinBitrateDisabledByDefault) {
1729 FakeVideoSendStream* stream = AddSendStream(); 1727 FakeVideoSendStream* stream = AddSendStream();
1730 EXPECT_FALSE(stream->GetConfig().suspend_below_min_bitrate); 1728 EXPECT_FALSE(stream->GetConfig().suspend_below_min_bitrate);
1731 } 1729 }
1732 1730
1733 TEST_F(WebRtcVideoChannel2Test, SetMediaConfigSuspendBelowMinBitrate) { 1731 TEST_F(WebRtcVideoChannel2Test, SetMediaConfigSuspendBelowMinBitrate) {
1734 MediaConfig media_config = MediaConfig(); 1732 MediaConfig media_config = MediaConfig();
1735 media_config.video.suspend_below_min_bitrate = true; 1733 media_config.video.suspend_below_min_bitrate = true;
(...skipping 29 matching lines...) Expand all
1765 ASSERT_TRUE(channel_->SetSendParameters(parameters)); 1763 ASSERT_TRUE(channel_->SetSendParameters(parameters));
1766 1764
1767 // Single-stream settings should apply with RTX as well (verifies that we 1765 // Single-stream settings should apply with RTX as well (verifies that we
1768 // check number of regular SSRCs and not StreamParams::ssrcs which contains 1766 // check number of regular SSRCs and not StreamParams::ssrcs which contains
1769 // both RTX and regular SSRCs). 1767 // both RTX and regular SSRCs).
1770 FakeVideoSendStream* stream = SetUpSimulcast(false, true); 1768 FakeVideoSendStream* stream = SetUpSimulcast(false, true);
1771 1769
1772 cricket::FakeVideoCapturer capturer; 1770 cricket::FakeVideoCapturer capturer;
1773 EXPECT_EQ(cricket::CS_RUNNING, 1771 EXPECT_EQ(cricket::CS_RUNNING,
1774 capturer.Start(capturer.GetSupportedFormats()->front())); 1772 capturer.Start(capturer.GetSupportedFormats()->front()));
1775 channel_->SetSource(last_ssrc_, &capturer); 1773 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, &capturer));
1776 channel_->SetSend(true); 1774 channel_->SetSend(true);
1777 1775
1778 EXPECT_TRUE(capturer.CaptureFrame()); 1776 EXPECT_TRUE(capturer.CaptureFrame());
1779 1777
1780 webrtc::VideoCodecVP8 vp8_settings; 1778 webrtc::VideoCodecVP8 vp8_settings;
1781 ASSERT_TRUE(stream->GetVp8Settings(&vp8_settings)) << "No VP8 config set."; 1779 ASSERT_TRUE(stream->GetVp8Settings(&vp8_settings)) << "No VP8 config set.";
1782 EXPECT_TRUE(vp8_settings.denoisingOn) 1780 EXPECT_TRUE(vp8_settings.denoisingOn)
1783 << "VP8 denoising should be on by default."; 1781 << "VP8 denoising should be on by default.";
1784 1782
1785 stream = SetDenoisingOption(last_ssrc_, &capturer, false); 1783 stream = SetDenoisingOption(last_ssrc_, &capturer, false);
1786 1784
1787 ASSERT_TRUE(stream->GetVp8Settings(&vp8_settings)) << "No VP8 config set."; 1785 ASSERT_TRUE(stream->GetVp8Settings(&vp8_settings)) << "No VP8 config set.";
1788 EXPECT_FALSE(vp8_settings.denoisingOn); 1786 EXPECT_FALSE(vp8_settings.denoisingOn);
1789 EXPECT_TRUE(vp8_settings.automaticResizeOn); 1787 EXPECT_TRUE(vp8_settings.automaticResizeOn);
1790 EXPECT_TRUE(vp8_settings.frameDroppingOn); 1788 EXPECT_TRUE(vp8_settings.frameDroppingOn);
1791 1789
1792 stream = SetDenoisingOption(last_ssrc_, &capturer, true); 1790 stream = SetDenoisingOption(last_ssrc_, &capturer, true);
1793 1791
1794 ASSERT_TRUE(stream->GetVp8Settings(&vp8_settings)) << "No VP8 config set."; 1792 ASSERT_TRUE(stream->GetVp8Settings(&vp8_settings)) << "No VP8 config set.";
1795 EXPECT_TRUE(vp8_settings.denoisingOn); 1793 EXPECT_TRUE(vp8_settings.denoisingOn);
1796 EXPECT_TRUE(vp8_settings.automaticResizeOn); 1794 EXPECT_TRUE(vp8_settings.automaticResizeOn);
1797 EXPECT_TRUE(vp8_settings.frameDroppingOn); 1795 EXPECT_TRUE(vp8_settings.frameDroppingOn);
1798 1796
1799 channel_->SetSource(last_ssrc_, NULL); 1797 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, nullptr));
1800 stream = SetUpSimulcast(true, false); 1798 stream = SetUpSimulcast(true, false);
1801 channel_->SetSource(last_ssrc_, &capturer); 1799 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, &capturer));
1802 channel_->SetSend(true); 1800 channel_->SetSend(true);
1803 EXPECT_TRUE(capturer.CaptureFrame()); 1801 EXPECT_TRUE(capturer.CaptureFrame());
1804 1802
1805 EXPECT_EQ(3, stream->GetVideoStreams().size()); 1803 EXPECT_EQ(3, stream->GetVideoStreams().size());
1806 ASSERT_TRUE(stream->GetVp8Settings(&vp8_settings)) << "No VP8 config set."; 1804 ASSERT_TRUE(stream->GetVp8Settings(&vp8_settings)) << "No VP8 config set.";
1807 // Autmatic resize off when using simulcast. 1805 // Autmatic resize off when using simulcast.
1808 EXPECT_FALSE(vp8_settings.automaticResizeOn); 1806 EXPECT_FALSE(vp8_settings.automaticResizeOn);
1809 EXPECT_TRUE(vp8_settings.frameDroppingOn); 1807 EXPECT_TRUE(vp8_settings.frameDroppingOn);
1810 1808
1811 // In screen-share mode, denoising is forced off and simulcast disabled. 1809 // In screen-share mode, denoising is forced off and simulcast disabled.
1812 VideoOptions options; 1810 VideoOptions options;
1813 options.is_screencast = rtc::Optional<bool>(true); 1811 options.is_screencast = rtc::Optional<bool>(true);
1814 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, &options)); 1812 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, &options, &capturer));
1815 1813
1816 stream = SetDenoisingOption(last_ssrc_, &capturer, false); 1814 stream = SetDenoisingOption(last_ssrc_, &capturer, false);
1817 1815
1818 EXPECT_EQ(1, stream->GetVideoStreams().size()); 1816 EXPECT_EQ(1, stream->GetVideoStreams().size());
1819 ASSERT_TRUE(stream->GetVp8Settings(&vp8_settings)) << "No VP8 config set."; 1817 ASSERT_TRUE(stream->GetVp8Settings(&vp8_settings)) << "No VP8 config set.";
1820 EXPECT_FALSE(vp8_settings.denoisingOn); 1818 EXPECT_FALSE(vp8_settings.denoisingOn);
1821 // Resizing and frame dropping always off for screen sharing. 1819 // Resizing and frame dropping always off for screen sharing.
1822 EXPECT_FALSE(vp8_settings.automaticResizeOn); 1820 EXPECT_FALSE(vp8_settings.automaticResizeOn);
1823 EXPECT_FALSE(vp8_settings.frameDroppingOn); 1821 EXPECT_FALSE(vp8_settings.frameDroppingOn);
1824 1822
1825 stream = SetDenoisingOption(last_ssrc_, &capturer, true); 1823 stream = SetDenoisingOption(last_ssrc_, &capturer, true);
1826 1824
1827 ASSERT_TRUE(stream->GetVp8Settings(&vp8_settings)) << "No VP8 config set."; 1825 ASSERT_TRUE(stream->GetVp8Settings(&vp8_settings)) << "No VP8 config set.";
1828 EXPECT_FALSE(vp8_settings.denoisingOn); 1826 EXPECT_FALSE(vp8_settings.denoisingOn);
1829 EXPECT_FALSE(vp8_settings.automaticResizeOn); 1827 EXPECT_FALSE(vp8_settings.automaticResizeOn);
1830 EXPECT_FALSE(vp8_settings.frameDroppingOn); 1828 EXPECT_FALSE(vp8_settings.frameDroppingOn);
1831 1829
1832 channel_->SetSource(last_ssrc_, NULL); 1830 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, nullptr));
1833 } 1831 }
1834 1832
1835 // Test that setting the same options doesn't result in the encoder being 1833 // Test that setting the same options doesn't result in the encoder being
1836 // reconfigured. 1834 // reconfigured.
1837 TEST_F(WebRtcVideoChannel2Test, SetIdenticalOptionsDoesntReconfigureEncoder) { 1835 TEST_F(WebRtcVideoChannel2Test, SetIdenticalOptionsDoesntReconfigureEncoder) {
1838 VideoOptions options; 1836 VideoOptions options;
1839 cricket::FakeVideoCapturer capturer; 1837 cricket::FakeVideoCapturer capturer;
1840 1838
1841 FakeVideoSendStream* send_stream = AddSendStream(); 1839 FakeVideoSendStream* send_stream = AddSendStream();
1842 channel_->SetSource(last_ssrc_, &capturer);
1843 EXPECT_EQ(cricket::CS_RUNNING, 1840 EXPECT_EQ(cricket::CS_RUNNING,
1844 capturer.Start(capturer.GetSupportedFormats()->front())); 1841 capturer.Start(capturer.GetSupportedFormats()->front()));
1845 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, &options)); 1842 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, &options, &capturer));
1846 EXPECT_TRUE(capturer.CaptureFrame()); 1843 EXPECT_TRUE(capturer.CaptureFrame());
1847 // Expect 2 reconfigurations at this point, from the initial configuration 1844 // Expect 2 reconfigurations at this point, from the initial configuration
1848 // and from the dimensions of the first frame. 1845 // and from the dimensions of the first frame.
1849 EXPECT_EQ(2, send_stream->num_encoder_reconfigurations()); 1846 EXPECT_EQ(2, send_stream->num_encoder_reconfigurations());
1850 1847
1851 // Set the options one more time and expect no additional reconfigurations. 1848 // Set the options one more time and expect no additional reconfigurations.
1852 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, &options)); 1849 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, &options, &capturer));
1853 EXPECT_TRUE(capturer.CaptureFrame()); 1850 EXPECT_TRUE(capturer.CaptureFrame());
1854 EXPECT_EQ(2, send_stream->num_encoder_reconfigurations()); 1851 EXPECT_EQ(2, send_stream->num_encoder_reconfigurations());
1855 1852
1856 channel_->SetSource(last_ssrc_, nullptr); 1853 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, nullptr));
1857 } 1854 }
1858 1855
1859 class Vp9SettingsTest : public WebRtcVideoChannel2Test { 1856 class Vp9SettingsTest : public WebRtcVideoChannel2Test {
1860 public: 1857 public:
1861 Vp9SettingsTest() : Vp9SettingsTest("") {} 1858 Vp9SettingsTest() : Vp9SettingsTest("") {}
1862 explicit Vp9SettingsTest(const char* field_trials) 1859 explicit Vp9SettingsTest(const char* field_trials)
1863 : WebRtcVideoChannel2Test(field_trials) { 1860 : WebRtcVideoChannel2Test(field_trials) {
1864 encoder_factory_.AddSupportedVideoCodecType(webrtc::kVideoCodecVP9, "VP9"); 1861 encoder_factory_.AddSupportedVideoCodecType(webrtc::kVideoCodecVP9, "VP9");
1865 } 1862 }
1866 virtual ~Vp9SettingsTest() {} 1863 virtual ~Vp9SettingsTest() {}
(...skipping 17 matching lines...) Expand all
1884 TEST_F(Vp9SettingsTest, VerifyVp9SpecificSettings) { 1881 TEST_F(Vp9SettingsTest, VerifyVp9SpecificSettings) {
1885 cricket::VideoSendParameters parameters; 1882 cricket::VideoSendParameters parameters;
1886 parameters.codecs.push_back(kVp9Codec); 1883 parameters.codecs.push_back(kVp9Codec);
1887 ASSERT_TRUE(channel_->SetSendParameters(parameters)); 1884 ASSERT_TRUE(channel_->SetSendParameters(parameters));
1888 1885
1889 FakeVideoSendStream* stream = SetUpSimulcast(false, false); 1886 FakeVideoSendStream* stream = SetUpSimulcast(false, false);
1890 1887
1891 cricket::FakeVideoCapturer capturer; 1888 cricket::FakeVideoCapturer capturer;
1892 EXPECT_EQ(cricket::CS_RUNNING, 1889 EXPECT_EQ(cricket::CS_RUNNING,
1893 capturer.Start(capturer.GetSupportedFormats()->front())); 1890 capturer.Start(capturer.GetSupportedFormats()->front()));
1894 channel_->SetSource(last_ssrc_, &capturer); 1891 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, &capturer));
1895 channel_->SetSend(true); 1892 channel_->SetSend(true);
1896 1893
1897 EXPECT_TRUE(capturer.CaptureFrame()); 1894 EXPECT_TRUE(capturer.CaptureFrame());
1898 1895
1899 webrtc::VideoCodecVP9 vp9_settings; 1896 webrtc::VideoCodecVP9 vp9_settings;
1900 ASSERT_TRUE(stream->GetVp9Settings(&vp9_settings)) << "No VP9 config set."; 1897 ASSERT_TRUE(stream->GetVp9Settings(&vp9_settings)) << "No VP9 config set.";
1901 EXPECT_FALSE(vp9_settings.denoisingOn) 1898 EXPECT_FALSE(vp9_settings.denoisingOn)
1902 << "VP9 denoising should be off by default."; 1899 << "VP9 denoising should be off by default.";
1903 1900
1904 stream = SetDenoisingOption(last_ssrc_, &capturer, false); 1901 stream = SetDenoisingOption(last_ssrc_, &capturer, false);
1905 1902
1906 ASSERT_TRUE(stream->GetVp9Settings(&vp9_settings)) << "No VP9 config set."; 1903 ASSERT_TRUE(stream->GetVp9Settings(&vp9_settings)) << "No VP9 config set.";
1907 EXPECT_FALSE(vp9_settings.denoisingOn); 1904 EXPECT_FALSE(vp9_settings.denoisingOn);
1908 // Frame dropping always on for real time video. 1905 // Frame dropping always on for real time video.
1909 EXPECT_TRUE(vp9_settings.frameDroppingOn); 1906 EXPECT_TRUE(vp9_settings.frameDroppingOn);
1910 1907
1911 stream = SetDenoisingOption(last_ssrc_, &capturer, true); 1908 stream = SetDenoisingOption(last_ssrc_, &capturer, true);
1912 1909
1913 ASSERT_TRUE(stream->GetVp9Settings(&vp9_settings)) << "No VP9 config set."; 1910 ASSERT_TRUE(stream->GetVp9Settings(&vp9_settings)) << "No VP9 config set.";
1914 EXPECT_TRUE(vp9_settings.denoisingOn); 1911 EXPECT_TRUE(vp9_settings.denoisingOn);
1915 EXPECT_TRUE(vp9_settings.frameDroppingOn); 1912 EXPECT_TRUE(vp9_settings.frameDroppingOn);
1916 1913
1917 // In screen-share mode, denoising is forced off. 1914 // In screen-share mode, denoising is forced off.
1918 VideoOptions options; 1915 VideoOptions options;
1919 options.is_screencast = rtc::Optional<bool>(true); 1916 options.is_screencast = rtc::Optional<bool>(true);
1920 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, &options)); 1917 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, &options, &capturer));
1921 1918
1922 stream = SetDenoisingOption(last_ssrc_, &capturer, false); 1919 stream = SetDenoisingOption(last_ssrc_, &capturer, false);
1923 1920
1924 ASSERT_TRUE(stream->GetVp9Settings(&vp9_settings)) << "No VP9 config set."; 1921 ASSERT_TRUE(stream->GetVp9Settings(&vp9_settings)) << "No VP9 config set.";
1925 EXPECT_FALSE(vp9_settings.denoisingOn); 1922 EXPECT_FALSE(vp9_settings.denoisingOn);
1926 // Frame dropping always off for screen sharing. 1923 // Frame dropping always off for screen sharing.
1927 EXPECT_FALSE(vp9_settings.frameDroppingOn); 1924 EXPECT_FALSE(vp9_settings.frameDroppingOn);
1928 1925
1929 stream = SetDenoisingOption(last_ssrc_, &capturer, false); 1926 stream = SetDenoisingOption(last_ssrc_, &capturer, false);
1930 1927
1931 ASSERT_TRUE(stream->GetVp9Settings(&vp9_settings)) << "No VP9 config set."; 1928 ASSERT_TRUE(stream->GetVp9Settings(&vp9_settings)) << "No VP9 config set.";
1932 EXPECT_FALSE(vp9_settings.denoisingOn); 1929 EXPECT_FALSE(vp9_settings.denoisingOn);
1933 EXPECT_FALSE(vp9_settings.frameDroppingOn); 1930 EXPECT_FALSE(vp9_settings.frameDroppingOn);
1934 1931
1935 channel_->SetSource(last_ssrc_, NULL); 1932 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, nullptr));
1936 } 1933 }
1937 1934
1938 class Vp9SettingsTestWithFieldTrial : public Vp9SettingsTest { 1935 class Vp9SettingsTestWithFieldTrial : public Vp9SettingsTest {
1939 public: 1936 public:
1940 Vp9SettingsTestWithFieldTrial(const char* field_trials) 1937 Vp9SettingsTestWithFieldTrial(const char* field_trials)
1941 : Vp9SettingsTest(field_trials) {} 1938 : Vp9SettingsTest(field_trials) {}
1942 1939
1943 protected: 1940 protected:
1944 void VerifySettings(int num_spatial_layers, int num_temporal_layers) { 1941 void VerifySettings(int num_spatial_layers, int num_temporal_layers) {
1945 cricket::VideoSendParameters parameters; 1942 cricket::VideoSendParameters parameters;
1946 parameters.codecs.push_back(kVp9Codec); 1943 parameters.codecs.push_back(kVp9Codec);
1947 ASSERT_TRUE(channel_->SetSendParameters(parameters)); 1944 ASSERT_TRUE(channel_->SetSendParameters(parameters));
1948 1945
1949 FakeVideoSendStream* stream = SetUpSimulcast(false, false); 1946 FakeVideoSendStream* stream = SetUpSimulcast(false, false);
1950 1947
1951 cricket::FakeVideoCapturer capturer; 1948 cricket::FakeVideoCapturer capturer;
1952 EXPECT_EQ(cricket::CS_RUNNING, 1949 EXPECT_EQ(cricket::CS_RUNNING,
1953 capturer.Start(capturer.GetSupportedFormats()->front())); 1950 capturer.Start(capturer.GetSupportedFormats()->front()));
1954 channel_->SetSource(last_ssrc_, &capturer); 1951 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, &capturer));
1955 channel_->SetSend(true); 1952 channel_->SetSend(true);
1956 1953
1957 EXPECT_TRUE(capturer.CaptureFrame()); 1954 EXPECT_TRUE(capturer.CaptureFrame());
1958 1955
1959 webrtc::VideoCodecVP9 vp9_settings; 1956 webrtc::VideoCodecVP9 vp9_settings;
1960 ASSERT_TRUE(stream->GetVp9Settings(&vp9_settings)) << "No VP9 config set."; 1957 ASSERT_TRUE(stream->GetVp9Settings(&vp9_settings)) << "No VP9 config set.";
1961 EXPECT_EQ(num_spatial_layers, vp9_settings.numberOfSpatialLayers); 1958 EXPECT_EQ(num_spatial_layers, vp9_settings.numberOfSpatialLayers);
1962 EXPECT_EQ(num_temporal_layers, vp9_settings.numberOfTemporalLayers); 1959 EXPECT_EQ(num_temporal_layers, vp9_settings.numberOfTemporalLayers);
1963 1960
1964 channel_->SetSource(last_ssrc_, NULL); 1961 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, nullptr));
1965 } 1962 }
1966 }; 1963 };
1967 1964
1968 class Vp9SettingsTestWithNoFlag : public Vp9SettingsTestWithFieldTrial { 1965 class Vp9SettingsTestWithNoFlag : public Vp9SettingsTestWithFieldTrial {
1969 public: 1966 public:
1970 Vp9SettingsTestWithNoFlag() : Vp9SettingsTestWithFieldTrial("") {} 1967 Vp9SettingsTestWithNoFlag() : Vp9SettingsTestWithFieldTrial("") {}
1971 }; 1968 };
1972 1969
1973 TEST_F(Vp9SettingsTestWithNoFlag, VerifySettings) { 1970 TEST_F(Vp9SettingsTestWithNoFlag, VerifySettings) {
1974 const int kNumSpatialLayers = 1; 1971 const int kNumSpatialLayers = 1;
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
2019 parameters.codecs.push_back(codec); 2016 parameters.codecs.push_back(codec);
2020 2017
2021 MediaConfig media_config = MediaConfig(); 2018 MediaConfig media_config = MediaConfig();
2022 channel_.reset( 2019 channel_.reset(
2023 engine_.CreateChannel(fake_call_.get(), media_config, VideoOptions())); 2020 engine_.CreateChannel(fake_call_.get(), media_config, VideoOptions()));
2024 ASSERT_TRUE(channel_->SetSendParameters(parameters)); 2021 ASSERT_TRUE(channel_->SetSendParameters(parameters));
2025 2022
2026 AddSendStream(); 2023 AddSendStream();
2027 2024
2028 cricket::FakeVideoCapturer capturer; 2025 cricket::FakeVideoCapturer capturer;
2029 channel_->SetSource(last_ssrc_, &capturer); 2026 ASSERT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, &capturer));
2030 ASSERT_EQ(cricket::CS_RUNNING, 2027 ASSERT_EQ(cricket::CS_RUNNING,
2031 capturer.Start(capturer.GetSupportedFormats()->front())); 2028 capturer.Start(capturer.GetSupportedFormats()->front()));
2032 ASSERT_TRUE(channel_->SetSend(true)); 2029 ASSERT_TRUE(channel_->SetSend(true));
2033 2030
2034 ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size()); 2031 ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size());
2035 FakeVideoSendStream* send_stream = fake_call_->GetVideoSendStreams().front(); 2032 FakeVideoSendStream* send_stream = fake_call_->GetVideoSendStreams().front();
2036 webrtc::LoadObserver* overuse_callback = 2033 webrtc::LoadObserver* overuse_callback =
2037 send_stream->GetConfig().overuse_callback; 2034 send_stream->GetConfig().overuse_callback;
2038 ASSERT_TRUE(overuse_callback != NULL); 2035 ASSERT_TRUE(overuse_callback != NULL);
2039 2036
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
2077 EXPECT_EQ(1284 * 3 / 4, send_stream->GetLastWidth()); 2074 EXPECT_EQ(1284 * 3 / 4, send_stream->GetLastWidth());
2078 EXPECT_EQ(724 * 3 / 4, send_stream->GetLastHeight()); 2075 EXPECT_EQ(724 * 3 / 4, send_stream->GetLastHeight());
2079 2076
2080 // Trigger underuse which should go back up in resolution. 2077 // Trigger underuse which should go back up in resolution.
2081 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kUnderuse); 2078 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kUnderuse);
2082 EXPECT_TRUE(capturer.CaptureCustomFrame(1284, 724, cricket::FOURCC_I420)); 2079 EXPECT_TRUE(capturer.CaptureCustomFrame(1284, 724, cricket::FOURCC_I420));
2083 EXPECT_EQ(7, send_stream->GetNumberOfSwappedFrames()); 2080 EXPECT_EQ(7, send_stream->GetNumberOfSwappedFrames());
2084 EXPECT_EQ(1284, send_stream->GetLastWidth()); 2081 EXPECT_EQ(1284, send_stream->GetLastWidth());
2085 EXPECT_EQ(724, send_stream->GetLastHeight()); 2082 EXPECT_EQ(724, send_stream->GetLastHeight());
2086 2083
2087 channel_->SetSource(last_ssrc_, NULL); 2084 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, nullptr));
2088 } 2085 }
2089 2086
2090 TEST_F(WebRtcVideoChannel2Test, PreviousAdaptationDoesNotApplyToScreenshare) { 2087 TEST_F(WebRtcVideoChannel2Test, PreviousAdaptationDoesNotApplyToScreenshare) {
2091 cricket::VideoCodec codec = kVp8Codec720p; 2088 cricket::VideoCodec codec = kVp8Codec720p;
2092 cricket::VideoSendParameters parameters; 2089 cricket::VideoSendParameters parameters;
2093 parameters.codecs.push_back(codec); 2090 parameters.codecs.push_back(codec);
2094 2091
2095 MediaConfig media_config = MediaConfig(); 2092 MediaConfig media_config = MediaConfig();
2096 channel_.reset( 2093 channel_.reset(
2097 engine_.CreateChannel(fake_call_.get(), media_config, VideoOptions())); 2094 engine_.CreateChannel(fake_call_.get(), media_config, VideoOptions()));
2098 ASSERT_TRUE(channel_->SetSendParameters(parameters)); 2095 ASSERT_TRUE(channel_->SetSendParameters(parameters));
2099 2096
2100 AddSendStream(); 2097 AddSendStream();
2101 2098
2102 cricket::FakeVideoCapturer capturer; 2099 cricket::FakeVideoCapturer capturer;
2103 channel_->SetSource(last_ssrc_, &capturer);
2104 ASSERT_EQ(cricket::CS_RUNNING, 2100 ASSERT_EQ(cricket::CS_RUNNING,
2105 capturer.Start(capturer.GetSupportedFormats()->front())); 2101 capturer.Start(capturer.GetSupportedFormats()->front()));
2106 ASSERT_TRUE(channel_->SetSend(true)); 2102 ASSERT_TRUE(channel_->SetSend(true));
2107 cricket::VideoOptions camera_options; 2103 cricket::VideoOptions camera_options;
2108 channel_->SetVideoSend(last_ssrc_, true /* enable */, &camera_options); 2104 channel_->SetVideoSend(last_ssrc_, true /* enable */, &camera_options,
2105 &capturer);
2109 2106
2110 ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size()); 2107 ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size());
2111 FakeVideoSendStream* send_stream = fake_call_->GetVideoSendStreams().front(); 2108 FakeVideoSendStream* send_stream = fake_call_->GetVideoSendStreams().front();
2112 webrtc::LoadObserver* overuse_callback = 2109 webrtc::LoadObserver* overuse_callback =
2113 send_stream->GetConfig().overuse_callback; 2110 send_stream->GetConfig().overuse_callback;
2114 ASSERT_TRUE(overuse_callback != NULL); 2111 ASSERT_TRUE(overuse_callback != NULL);
2115 2112
2116 EXPECT_TRUE(capturer.CaptureCustomFrame(1280, 720, cricket::FOURCC_I420)); 2113 EXPECT_TRUE(capturer.CaptureCustomFrame(1280, 720, cricket::FOURCC_I420));
2117 EXPECT_EQ(1, send_stream->GetNumberOfSwappedFrames()); 2114 EXPECT_EQ(1, send_stream->GetNumberOfSwappedFrames());
2118 EXPECT_EQ(1280, send_stream->GetLastWidth()); 2115 EXPECT_EQ(1280, send_stream->GetLastWidth());
2119 EXPECT_EQ(720, send_stream->GetLastHeight()); 2116 EXPECT_EQ(720, send_stream->GetLastHeight());
2120 2117
2121 // Trigger overuse. 2118 // Trigger overuse.
2122 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kOveruse); 2119 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kOveruse);
2123 EXPECT_TRUE(capturer.CaptureCustomFrame(1280, 720, cricket::FOURCC_I420)); 2120 EXPECT_TRUE(capturer.CaptureCustomFrame(1280, 720, cricket::FOURCC_I420));
2124 EXPECT_EQ(2, send_stream->GetNumberOfSwappedFrames()); 2121 EXPECT_EQ(2, send_stream->GetNumberOfSwappedFrames());
2125 EXPECT_EQ(1280 * 3 / 4, send_stream->GetLastWidth()); 2122 EXPECT_EQ(1280 * 3 / 4, send_stream->GetLastWidth());
2126 EXPECT_EQ(720 * 3 / 4, send_stream->GetLastHeight()); 2123 EXPECT_EQ(720 * 3 / 4, send_stream->GetLastHeight());
2127 2124
2128 // Switch to screen share. Expect no CPU adaptation. 2125 // Switch to screen share. Expect no CPU adaptation.
2129 cricket::FakeVideoCapturer screen_share(true); 2126 cricket::FakeVideoCapturer screen_share(true);
2130 ASSERT_EQ(cricket::CS_RUNNING, 2127 ASSERT_EQ(cricket::CS_RUNNING,
2131 screen_share.Start(screen_share.GetSupportedFormats()->front())); 2128 screen_share.Start(screen_share.GetSupportedFormats()->front()));
2132 channel_->SetSource(last_ssrc_, &screen_share);
2133 cricket::VideoOptions screenshare_options; 2129 cricket::VideoOptions screenshare_options;
2134 screenshare_options.is_screencast = rtc::Optional<bool>(true); 2130 screenshare_options.is_screencast = rtc::Optional<bool>(true);
2135 channel_->SetVideoSend(last_ssrc_, true /* enable */, &screenshare_options); 2131 channel_->SetVideoSend(last_ssrc_, true /* enable */, &screenshare_options,
2132 &screen_share);
2136 EXPECT_TRUE(screen_share.CaptureCustomFrame(1284, 724, cricket::FOURCC_I420)); 2133 EXPECT_TRUE(screen_share.CaptureCustomFrame(1284, 724, cricket::FOURCC_I420));
2137 EXPECT_EQ(3, send_stream->GetNumberOfSwappedFrames()); 2134 EXPECT_EQ(3, send_stream->GetNumberOfSwappedFrames());
2138 EXPECT_EQ(1284, send_stream->GetLastWidth()); 2135 EXPECT_EQ(1284, send_stream->GetLastWidth());
2139 EXPECT_EQ(724, send_stream->GetLastHeight()); 2136 EXPECT_EQ(724, send_stream->GetLastHeight());
2140 2137
2141 // Switch back to the normal capturer. Expect the frame to be CPU adapted. 2138 // Switch back to the normal capturer. Expect the frame to be CPU adapted.
2142 channel_->SetSource(last_ssrc_, &capturer); 2139 channel_->SetVideoSend(last_ssrc_, true /* enable */, &camera_options,
2143 channel_->SetVideoSend(last_ssrc_, true /* enable */, &camera_options); 2140 &capturer);
2144 EXPECT_TRUE(capturer.CaptureCustomFrame(1280, 720, cricket::FOURCC_I420)); 2141 EXPECT_TRUE(capturer.CaptureCustomFrame(1280, 720, cricket::FOURCC_I420));
2145 EXPECT_EQ(4, send_stream->GetNumberOfSwappedFrames()); 2142 EXPECT_EQ(4, send_stream->GetNumberOfSwappedFrames());
2146 EXPECT_EQ(1280 * 3 / 4, send_stream->GetLastWidth()); 2143 EXPECT_EQ(1280 * 3 / 4, send_stream->GetLastWidth());
2147 EXPECT_EQ(720 * 3 / 4, send_stream->GetLastHeight()); 2144 EXPECT_EQ(720 * 3 / 4, send_stream->GetLastHeight());
2148 2145
2149 channel_->SetSource(last_ssrc_, NULL); 2146 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, nullptr));
2150 } 2147 }
2151 2148
2152 void WebRtcVideoChannel2Test::TestCpuAdaptation(bool enable_overuse, 2149 void WebRtcVideoChannel2Test::TestCpuAdaptation(bool enable_overuse,
2153 bool is_screenshare) { 2150 bool is_screenshare) {
2154 cricket::VideoCodec codec = kVp8Codec720p; 2151 cricket::VideoCodec codec = kVp8Codec720p;
2155 cricket::VideoSendParameters parameters; 2152 cricket::VideoSendParameters parameters;
2156 parameters.codecs.push_back(codec); 2153 parameters.codecs.push_back(codec);
2157 2154
2158 MediaConfig media_config = MediaConfig(); 2155 MediaConfig media_config = MediaConfig();
2159 if (!enable_overuse) { 2156 if (!enable_overuse) {
2160 media_config.video.enable_cpu_overuse_detection = false; 2157 media_config.video.enable_cpu_overuse_detection = false;
2161 } 2158 }
2162 channel_.reset( 2159 channel_.reset(
2163 engine_.CreateChannel(fake_call_.get(), media_config, VideoOptions())); 2160 engine_.CreateChannel(fake_call_.get(), media_config, VideoOptions()));
2164 2161
2165 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 2162 EXPECT_TRUE(channel_->SetSendParameters(parameters));
2166 2163
2167 AddSendStream(); 2164 AddSendStream();
2168 2165
2166 cricket::FakeVideoCapturer capturer;
2169 VideoOptions options; 2167 VideoOptions options;
2170 options.is_screencast = rtc::Optional<bool>(is_screenshare); 2168 options.is_screencast = rtc::Optional<bool>(is_screenshare);
2171 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, &options)); 2169 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, &options, &capturer));
2172
2173 cricket::FakeVideoCapturer capturer;
2174 channel_->SetSource(last_ssrc_, &capturer);
2175 EXPECT_EQ(cricket::CS_RUNNING, 2170 EXPECT_EQ(cricket::CS_RUNNING,
2176 capturer.Start(capturer.GetSupportedFormats()->front())); 2171 capturer.Start(capturer.GetSupportedFormats()->front()));
2177 2172
2178 EXPECT_TRUE(channel_->SetSend(true)); 2173 EXPECT_TRUE(channel_->SetSend(true));
2179 2174
2180 // Trigger overuse. 2175 // Trigger overuse.
2181 ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size()); 2176 ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size());
2182 FakeVideoSendStream* send_stream = fake_call_->GetVideoSendStreams().front(); 2177 FakeVideoSendStream* send_stream = fake_call_->GetVideoSendStreams().front();
2183 webrtc::LoadObserver* overuse_callback = 2178 webrtc::LoadObserver* overuse_callback =
2184 send_stream->GetConfig().overuse_callback; 2179 send_stream->GetConfig().overuse_callback;
2185 2180
2186 if (!enable_overuse) { 2181 if (!enable_overuse) {
2187 ASSERT_TRUE(overuse_callback == NULL); 2182 ASSERT_TRUE(overuse_callback == NULL);
2188 2183
2189 EXPECT_TRUE(capturer.CaptureFrame()); 2184 EXPECT_TRUE(capturer.CaptureFrame());
2190 EXPECT_EQ(1, send_stream->GetNumberOfSwappedFrames()); 2185 EXPECT_EQ(1, send_stream->GetNumberOfSwappedFrames());
2191 2186
2192 EXPECT_EQ(codec.width, send_stream->GetLastWidth()); 2187 EXPECT_EQ(codec.width, send_stream->GetLastWidth());
2193 EXPECT_EQ(codec.height, send_stream->GetLastHeight()); 2188 EXPECT_EQ(codec.height, send_stream->GetLastHeight());
2194 2189
2195 channel_->SetSource(last_ssrc_, NULL); 2190 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, nullptr));
2196 return; 2191 return;
2197 } 2192 }
2198 2193
2199 ASSERT_TRUE(overuse_callback != NULL); 2194 ASSERT_TRUE(overuse_callback != NULL);
2200 EXPECT_TRUE(capturer.CaptureFrame()); 2195 EXPECT_TRUE(capturer.CaptureFrame());
2201 EXPECT_EQ(1, send_stream->GetNumberOfSwappedFrames()); 2196 EXPECT_EQ(1, send_stream->GetNumberOfSwappedFrames());
2202 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kOveruse); 2197 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kOveruse);
2203 2198
2204 EXPECT_TRUE(capturer.CaptureFrame()); 2199 EXPECT_TRUE(capturer.CaptureFrame());
2205 EXPECT_EQ(2, send_stream->GetNumberOfSwappedFrames()); 2200 EXPECT_EQ(2, send_stream->GetNumberOfSwappedFrames());
2206 2201
2207 if (is_screenshare) { 2202 if (is_screenshare) {
2208 // Do not adapt screen share. 2203 // Do not adapt screen share.
2209 EXPECT_EQ(codec.width, send_stream->GetLastWidth()); 2204 EXPECT_EQ(codec.width, send_stream->GetLastWidth());
2210 EXPECT_EQ(codec.height, send_stream->GetLastHeight()); 2205 EXPECT_EQ(codec.height, send_stream->GetLastHeight());
2211 } else { 2206 } else {
2212 EXPECT_LT(send_stream->GetLastWidth(), codec.width); 2207 EXPECT_LT(send_stream->GetLastWidth(), codec.width);
2213 EXPECT_LT(send_stream->GetLastHeight(), codec.height); 2208 EXPECT_LT(send_stream->GetLastHeight(), codec.height);
2214 } 2209 }
2215 2210
2216 // Trigger underuse which should go back to normal resolution. 2211 // Trigger underuse which should go back to normal resolution.
2217 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kUnderuse); 2212 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kUnderuse);
2218 EXPECT_TRUE(capturer.CaptureFrame()); 2213 EXPECT_TRUE(capturer.CaptureFrame());
2219 EXPECT_EQ(3, send_stream->GetNumberOfSwappedFrames()); 2214 EXPECT_EQ(3, send_stream->GetNumberOfSwappedFrames());
2220 2215
2221 EXPECT_EQ(codec.width, send_stream->GetLastWidth()); 2216 EXPECT_EQ(codec.width, send_stream->GetLastWidth());
2222 EXPECT_EQ(codec.height, send_stream->GetLastHeight()); 2217 EXPECT_EQ(codec.height, send_stream->GetLastHeight());
2223 2218
2224 channel_->SetSource(last_ssrc_, NULL); 2219 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, nullptr));
2225 } 2220 }
2226 2221
2227 TEST_F(WebRtcVideoChannel2Test, EstimatesNtpStartTimeCorrectly) { 2222 TEST_F(WebRtcVideoChannel2Test, EstimatesNtpStartTimeCorrectly) {
2228 // Start at last timestamp to verify that wraparounds are estimated correctly. 2223 // Start at last timestamp to verify that wraparounds are estimated correctly.
2229 static const uint32_t kInitialTimestamp = 0xFFFFFFFFu; 2224 static const uint32_t kInitialTimestamp = 0xFFFFFFFFu;
2230 static const int64_t kInitialNtpTimeMs = 1247891230; 2225 static const int64_t kInitialNtpTimeMs = 1247891230;
2231 static const int kFrameOffsetMs = 20; 2226 static const int kFrameOffsetMs = 20;
2232 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters_)); 2227 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters_));
2233 2228
2234 FakeVideoReceiveStream* stream = AddRecvStream(); 2229 FakeVideoReceiveStream* stream = AddRecvStream();
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
2345 2340
2346 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsChangesExistingStreams) { 2341 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsChangesExistingStreams) {
2347 cricket::VideoSendParameters parameters; 2342 cricket::VideoSendParameters parameters;
2348 parameters.codecs.push_back(kVp8Codec720p); 2343 parameters.codecs.push_back(kVp8Codec720p);
2349 ASSERT_TRUE(channel_->SetSendParameters(parameters)); 2344 ASSERT_TRUE(channel_->SetSendParameters(parameters));
2350 channel_->SetSend(true); 2345 channel_->SetSend(true);
2351 2346
2352 FakeVideoSendStream* stream = AddSendStream(); 2347 FakeVideoSendStream* stream = AddSendStream();
2353 2348
2354 cricket::FakeVideoCapturer capturer; 2349 cricket::FakeVideoCapturer capturer;
2355 channel_->SetSource(last_ssrc_, &capturer); 2350 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, &capturer));
2356 EXPECT_EQ(cricket::CS_RUNNING, 2351 EXPECT_EQ(cricket::CS_RUNNING,
2357 capturer.Start(capturer.GetSupportedFormats()->front())); 2352 capturer.Start(capturer.GetSupportedFormats()->front()));
2358 EXPECT_TRUE(capturer.CaptureFrame()); 2353 EXPECT_TRUE(capturer.CaptureFrame());
2359 2354
2360 std::vector<webrtc::VideoStream> streams = stream->GetVideoStreams(); 2355 std::vector<webrtc::VideoStream> streams = stream->GetVideoStreams();
2361 EXPECT_EQ(kVp8Codec720p.width, streams[0].width); 2356 EXPECT_EQ(kVp8Codec720p.width, streams[0].width);
2362 EXPECT_EQ(kVp8Codec720p.height, streams[0].height); 2357 EXPECT_EQ(kVp8Codec720p.height, streams[0].height);
2363 2358
2364 parameters.codecs.clear(); 2359 parameters.codecs.clear();
2365 parameters.codecs.push_back(kVp8Codec360p); 2360 parameters.codecs.push_back(kVp8Codec360p);
2366 ASSERT_TRUE(channel_->SetSendParameters(parameters)); 2361 ASSERT_TRUE(channel_->SetSendParameters(parameters));
2367 streams = fake_call_->GetVideoSendStreams()[0]->GetVideoStreams(); 2362 streams = fake_call_->GetVideoSendStreams()[0]->GetVideoStreams();
2368 EXPECT_EQ(kVp8Codec360p.width, streams[0].width); 2363 EXPECT_EQ(kVp8Codec360p.width, streams[0].width);
2369 EXPECT_EQ(kVp8Codec360p.height, streams[0].height); 2364 EXPECT_EQ(kVp8Codec360p.height, streams[0].height);
2370 channel_->SetSource(last_ssrc_, NULL); 2365 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, nullptr));
2371 } 2366 }
2372 2367
2373 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsWithBitrates) { 2368 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsWithBitrates) {
2374 SetSendCodecsShouldWorkForBitrates("100", 100000, "150", 150000, "200", 2369 SetSendCodecsShouldWorkForBitrates("100", 100000, "150", 150000, "200",
2375 200000); 2370 200000);
2376 } 2371 }
2377 2372
2378 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsWithHighMaxBitrate) { 2373 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsWithHighMaxBitrate) {
2379 SetSendCodecsShouldWorkForBitrates("", 0, "", -1, "10000", 10000000); 2374 SetSendCodecsShouldWorkForBitrates("", 0, "", -1, "10000", 10000000);
2380 std::vector<webrtc::VideoStream> streams = AddSendStream()->GetVideoStreams(); 2375 std::vector<webrtc::VideoStream> streams = AddSendStream()->GetVideoStreams();
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
2461 2456
2462 TEST_F(WebRtcVideoChannel2Test, SetMaxSendBitrateCanIncreaseSenderBitrate) { 2457 TEST_F(WebRtcVideoChannel2Test, SetMaxSendBitrateCanIncreaseSenderBitrate) {
2463 cricket::VideoSendParameters parameters; 2458 cricket::VideoSendParameters parameters;
2464 parameters.codecs.push_back(kVp8Codec720p); 2459 parameters.codecs.push_back(kVp8Codec720p);
2465 ASSERT_TRUE(channel_->SetSendParameters(parameters)); 2460 ASSERT_TRUE(channel_->SetSendParameters(parameters));
2466 channel_->SetSend(true); 2461 channel_->SetSend(true);
2467 2462
2468 FakeVideoSendStream* stream = AddSendStream(); 2463 FakeVideoSendStream* stream = AddSendStream();
2469 2464
2470 cricket::FakeVideoCapturer capturer; 2465 cricket::FakeVideoCapturer capturer;
2471 channel_->SetSource(last_ssrc_, &capturer); 2466 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, &capturer));
2472 EXPECT_EQ(cricket::CS_RUNNING, 2467 EXPECT_EQ(cricket::CS_RUNNING,
2473 capturer.Start(capturer.GetSupportedFormats()->front())); 2468 capturer.Start(capturer.GetSupportedFormats()->front()));
2474 2469
2475 std::vector<webrtc::VideoStream> streams = stream->GetVideoStreams(); 2470 std::vector<webrtc::VideoStream> streams = stream->GetVideoStreams();
2476 int initial_max_bitrate_bps = streams[0].max_bitrate_bps; 2471 int initial_max_bitrate_bps = streams[0].max_bitrate_bps;
2477 EXPECT_GT(initial_max_bitrate_bps, 0); 2472 EXPECT_GT(initial_max_bitrate_bps, 0);
2478 2473
2479 parameters.max_bandwidth_bps = initial_max_bitrate_bps * 2; 2474 parameters.max_bandwidth_bps = initial_max_bitrate_bps * 2;
2480 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 2475 EXPECT_TRUE(channel_->SetSendParameters(parameters));
2481 // Insert a frame to update the encoder config. 2476 // Insert a frame to update the encoder config.
2482 EXPECT_TRUE(capturer.CaptureFrame()); 2477 EXPECT_TRUE(capturer.CaptureFrame());
2483 streams = stream->GetVideoStreams(); 2478 streams = stream->GetVideoStreams();
2484 EXPECT_EQ(initial_max_bitrate_bps * 2, streams[0].max_bitrate_bps); 2479 EXPECT_EQ(initial_max_bitrate_bps * 2, streams[0].max_bitrate_bps);
2485 channel_->SetSource(last_ssrc_, nullptr); 2480 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, nullptr));
2486 } 2481 }
2487 2482
2488 TEST_F(WebRtcVideoChannel2Test, 2483 TEST_F(WebRtcVideoChannel2Test,
2489 SetMaxSendBitrateCanIncreaseSimulcastSenderBitrate) { 2484 SetMaxSendBitrateCanIncreaseSimulcastSenderBitrate) {
2490 cricket::VideoSendParameters parameters; 2485 cricket::VideoSendParameters parameters;
2491 parameters.codecs.push_back(kVp8Codec720p); 2486 parameters.codecs.push_back(kVp8Codec720p);
2492 ASSERT_TRUE(channel_->SetSendParameters(parameters)); 2487 ASSERT_TRUE(channel_->SetSendParameters(parameters));
2493 channel_->SetSend(true); 2488 channel_->SetSend(true);
2494 2489
2495 FakeVideoSendStream* stream = AddSendStream( 2490 FakeVideoSendStream* stream = AddSendStream(
2496 cricket::CreateSimStreamParams("cname", MAKE_VECTOR(kSsrcs3))); 2491 cricket::CreateSimStreamParams("cname", MAKE_VECTOR(kSsrcs3)));
2497 2492
2498 // Send a frame to make sure this scales up to >1 stream (simulcast). 2493 // Send a frame to make sure this scales up to >1 stream (simulcast).
2499 cricket::FakeVideoCapturer capturer; 2494 cricket::FakeVideoCapturer capturer;
2500 channel_->SetSource(kSsrcs3[0], &capturer); 2495 EXPECT_TRUE(channel_->SetVideoSend(kSsrcs3[0], true, nullptr, &capturer));
2501 EXPECT_EQ(cricket::CS_RUNNING, 2496 EXPECT_EQ(cricket::CS_RUNNING,
2502 capturer.Start(capturer.GetSupportedFormats()->front())); 2497 capturer.Start(capturer.GetSupportedFormats()->front()));
2503 EXPECT_TRUE(capturer.CaptureFrame()); 2498 EXPECT_TRUE(capturer.CaptureFrame());
2504 2499
2505 std::vector<webrtc::VideoStream> streams = stream->GetVideoStreams(); 2500 std::vector<webrtc::VideoStream> streams = stream->GetVideoStreams();
2506 ASSERT_GT(streams.size(), 1u) 2501 ASSERT_GT(streams.size(), 1u)
2507 << "Without simulcast this test doesn't make sense."; 2502 << "Without simulcast this test doesn't make sense.";
2508 int initial_max_bitrate_bps = GetTotalMaxBitrateBps(streams); 2503 int initial_max_bitrate_bps = GetTotalMaxBitrateBps(streams);
2509 EXPECT_GT(initial_max_bitrate_bps, 0); 2504 EXPECT_GT(initial_max_bitrate_bps, 0);
2510 2505
2511 parameters.max_bandwidth_bps = initial_max_bitrate_bps * 2; 2506 parameters.max_bandwidth_bps = initial_max_bitrate_bps * 2;
2512 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 2507 EXPECT_TRUE(channel_->SetSendParameters(parameters));
2513 // Insert a frame to update the encoder config. 2508 // Insert a frame to update the encoder config.
2514 EXPECT_TRUE(capturer.CaptureFrame()); 2509 EXPECT_TRUE(capturer.CaptureFrame());
2515 streams = stream->GetVideoStreams(); 2510 streams = stream->GetVideoStreams();
2516 int increased_max_bitrate_bps = GetTotalMaxBitrateBps(streams); 2511 int increased_max_bitrate_bps = GetTotalMaxBitrateBps(streams);
2517 EXPECT_EQ(initial_max_bitrate_bps * 2, increased_max_bitrate_bps); 2512 EXPECT_EQ(initial_max_bitrate_bps * 2, increased_max_bitrate_bps);
2518 2513
2519 channel_->SetSource(kSsrcs3[0], nullptr); 2514 EXPECT_TRUE(channel_->SetVideoSend(kSsrcs3[0], true, nullptr, nullptr));
2520 } 2515 }
2521 2516
2522 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsWithMaxQuantization) { 2517 TEST_F(WebRtcVideoChannel2Test, SetSendCodecsWithMaxQuantization) {
2523 static const char* kMaxQuantization = "21"; 2518 static const char* kMaxQuantization = "21";
2524 cricket::VideoSendParameters parameters; 2519 cricket::VideoSendParameters parameters;
2525 parameters.codecs.push_back(kVp8Codec); 2520 parameters.codecs.push_back(kVp8Codec);
2526 parameters.codecs[0].params[kCodecParamMaxQuantization] = kMaxQuantization; 2521 parameters.codecs[0].params[kCodecParamMaxQuantization] = kMaxQuantization;
2527 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 2522 EXPECT_TRUE(channel_->SetSendParameters(parameters));
2528 EXPECT_EQ(static_cast<unsigned int>(atoi(kMaxQuantization)), 2523 EXPECT_EQ(static_cast<unsigned int>(atoi(kMaxQuantization)),
2529 AddSendStream()->GetVideoStreams().back().max_qp); 2524 AddSendStream()->GetVideoStreams().back().max_qp);
(...skipping 404 matching lines...) Expand 10 before | Expand all | Expand 10 after
2934 2929
2935 TEST_F(WebRtcVideoChannel2Test, GetStatsTracksAdaptationStats) { 2930 TEST_F(WebRtcVideoChannel2Test, GetStatsTracksAdaptationStats) {
2936 AddSendStream(cricket::CreateSimStreamParams("cname", MAKE_VECTOR(kSsrcs3))); 2931 AddSendStream(cricket::CreateSimStreamParams("cname", MAKE_VECTOR(kSsrcs3)));
2937 2932
2938 // Capture format VGA. 2933 // Capture format VGA.
2939 cricket::FakeVideoCapturer video_capturer_vga; 2934 cricket::FakeVideoCapturer video_capturer_vga;
2940 const std::vector<cricket::VideoFormat>* formats = 2935 const std::vector<cricket::VideoFormat>* formats =
2941 video_capturer_vga.GetSupportedFormats(); 2936 video_capturer_vga.GetSupportedFormats();
2942 cricket::VideoFormat capture_format_vga = (*formats)[1]; 2937 cricket::VideoFormat capture_format_vga = (*formats)[1];
2943 EXPECT_EQ(cricket::CS_RUNNING, video_capturer_vga.Start(capture_format_vga)); 2938 EXPECT_EQ(cricket::CS_RUNNING, video_capturer_vga.Start(capture_format_vga));
2944 channel_->SetSource(kSsrcs3[0], &video_capturer_vga); 2939 EXPECT_TRUE(
2940 channel_->SetVideoSend(kSsrcs3[0], true, nullptr, &video_capturer_vga));
2945 EXPECT_TRUE(video_capturer_vga.CaptureFrame()); 2941 EXPECT_TRUE(video_capturer_vga.CaptureFrame());
2946 2942
2947 cricket::VideoCodec send_codec(100, "VP8", 640, 480, 30); 2943 cricket::VideoCodec send_codec(100, "VP8", 640, 480, 30);
2948 cricket::VideoSendParameters parameters; 2944 cricket::VideoSendParameters parameters;
2949 parameters.codecs.push_back(send_codec); 2945 parameters.codecs.push_back(send_codec);
2950 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 2946 EXPECT_TRUE(channel_->SetSendParameters(parameters));
2951 EXPECT_TRUE(channel_->SetSend(true)); 2947 EXPECT_TRUE(channel_->SetSend(true));
2952 2948
2953 // Verify that the CpuOveruseObserver is registered and trigger downgrade. 2949 // Verify that the CpuOveruseObserver is registered and trigger downgrade.
2954 2950
(...skipping 16 matching lines...) Expand all
2971 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kUnderuse); 2967 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kUnderuse);
2972 EXPECT_TRUE(video_capturer_vga.CaptureFrame()); 2968 EXPECT_TRUE(video_capturer_vga.CaptureFrame());
2973 info.Clear(); 2969 info.Clear();
2974 EXPECT_TRUE(channel_->GetStats(&info)); 2970 EXPECT_TRUE(channel_->GetStats(&info));
2975 ASSERT_EQ(1U, info.senders.size()); 2971 ASSERT_EQ(1U, info.senders.size());
2976 EXPECT_EQ(2, info.senders[0].adapt_changes); 2972 EXPECT_EQ(2, info.senders[0].adapt_changes);
2977 EXPECT_EQ(WebRtcVideoChannel2::ADAPTREASON_NONE, 2973 EXPECT_EQ(WebRtcVideoChannel2::ADAPTREASON_NONE,
2978 info.senders[0].adapt_reason); 2974 info.senders[0].adapt_reason);
2979 2975
2980 // No capturer (no adapter). Adapt changes from old adapter should be kept. 2976 // No capturer (no adapter). Adapt changes from old adapter should be kept.
2981 channel_->SetSource(kSsrcs3[0], NULL); 2977 EXPECT_TRUE(channel_->SetVideoSend(kSsrcs3[0], true, nullptr, nullptr));
2982 info.Clear(); 2978 info.Clear();
2983 EXPECT_TRUE(channel_->GetStats(&info)); 2979 EXPECT_TRUE(channel_->GetStats(&info));
2984 ASSERT_EQ(1U, info.senders.size()); 2980 ASSERT_EQ(1U, info.senders.size());
2985 EXPECT_EQ(2, info.senders[0].adapt_changes); 2981 EXPECT_EQ(2, info.senders[0].adapt_changes);
2986 EXPECT_EQ(WebRtcVideoChannel2::ADAPTREASON_NONE, 2982 EXPECT_EQ(WebRtcVideoChannel2::ADAPTREASON_NONE,
2987 info.senders[0].adapt_reason); 2983 info.senders[0].adapt_reason);
2988 2984
2989 // Set new capturer, capture format HD. 2985 // Set new capturer, capture format HD.
2990 cricket::FakeVideoCapturer video_capturer_hd; 2986 cricket::FakeVideoCapturer video_capturer_hd;
2991 cricket::VideoFormat capture_format_hd = (*formats)[0]; 2987 cricket::VideoFormat capture_format_hd = (*formats)[0];
2992 EXPECT_EQ(cricket::CS_RUNNING, video_capturer_hd.Start(capture_format_hd)); 2988 EXPECT_EQ(cricket::CS_RUNNING, video_capturer_hd.Start(capture_format_hd));
2993 channel_->SetSource(kSsrcs3[0], &video_capturer_hd); 2989 EXPECT_TRUE(
2990 channel_->SetVideoSend(kSsrcs3[0], true, nullptr, &video_capturer_hd));
2994 EXPECT_TRUE(video_capturer_hd.CaptureFrame()); 2991 EXPECT_TRUE(video_capturer_hd.CaptureFrame());
2995 2992
2996 // Trigger overuse, HD -> adapt (OnCpuResolutionRequest downgrade) -> HD/2. 2993 // Trigger overuse, HD -> adapt (OnCpuResolutionRequest downgrade) -> HD/2.
2997 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kOveruse); 2994 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kOveruse);
2998 EXPECT_TRUE(video_capturer_hd.CaptureFrame()); 2995 EXPECT_TRUE(video_capturer_hd.CaptureFrame());
2999 info.Clear(); 2996 info.Clear();
3000 EXPECT_TRUE(channel_->GetStats(&info)); 2997 EXPECT_TRUE(channel_->GetStats(&info));
3001 ASSERT_EQ(1U, info.senders.size()); 2998 ASSERT_EQ(1U, info.senders.size());
3002 EXPECT_EQ(3, info.senders[0].adapt_changes); 2999 EXPECT_EQ(3, info.senders[0].adapt_changes);
3003 EXPECT_EQ(WebRtcVideoChannel2::ADAPTREASON_CPU, info.senders[0].adapt_reason); 3000 EXPECT_EQ(WebRtcVideoChannel2::ADAPTREASON_CPU, info.senders[0].adapt_reason);
3004 3001
3005 channel_->SetSource(kSsrcs3[0], NULL); 3002 EXPECT_TRUE(channel_->SetVideoSend(kSsrcs3[0], true, nullptr, nullptr));
3006 } 3003 }
3007 3004
3008 TEST_F(WebRtcVideoChannel2Test, GetStatsTracksAdaptationAndBandwidthStats) { 3005 TEST_F(WebRtcVideoChannel2Test, GetStatsTracksAdaptationAndBandwidthStats) {
3009 AddSendStream(cricket::CreateSimStreamParams("cname", MAKE_VECTOR(kSsrcs3))); 3006 AddSendStream(cricket::CreateSimStreamParams("cname", MAKE_VECTOR(kSsrcs3)));
3010 3007
3011 // Capture format VGA. 3008 // Capture format VGA.
3012 cricket::FakeVideoCapturer video_capturer_vga; 3009 cricket::FakeVideoCapturer video_capturer_vga;
3013 const std::vector<cricket::VideoFormat>* formats = 3010 const std::vector<cricket::VideoFormat>* formats =
3014 video_capturer_vga.GetSupportedFormats(); 3011 video_capturer_vga.GetSupportedFormats();
3015 cricket::VideoFormat capture_format_vga = (*formats)[1]; 3012 cricket::VideoFormat capture_format_vga = (*formats)[1];
3016 EXPECT_EQ(cricket::CS_RUNNING, video_capturer_vga.Start(capture_format_vga)); 3013 EXPECT_EQ(cricket::CS_RUNNING, video_capturer_vga.Start(capture_format_vga));
3017 channel_->SetSource(kSsrcs3[0], &video_capturer_vga); 3014 EXPECT_TRUE(
3015 channel_->SetVideoSend(kSsrcs3[0], true, nullptr, &video_capturer_vga));
3018 EXPECT_TRUE(video_capturer_vga.CaptureFrame()); 3016 EXPECT_TRUE(video_capturer_vga.CaptureFrame());
3019 3017
3020 cricket::VideoCodec send_codec(100, "VP8", 640, 480, 30); 3018 cricket::VideoCodec send_codec(100, "VP8", 640, 480, 30);
3021 cricket::VideoSendParameters parameters; 3019 cricket::VideoSendParameters parameters;
3022 parameters.codecs.push_back(send_codec); 3020 parameters.codecs.push_back(send_codec);
3023 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 3021 EXPECT_TRUE(channel_->SetSendParameters(parameters));
3024 EXPECT_TRUE(channel_->SetSend(true)); 3022 EXPECT_TRUE(channel_->SetSend(true));
3025 3023
3026 // Verify that the CpuOveruseObserver is registered and trigger downgrade. 3024 // Verify that the CpuOveruseObserver is registered and trigger downgrade.
3027 3025
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
3059 3057
3060 // Reset bandwidth limitation state -> adapt NONE. 3058 // Reset bandwidth limitation state -> adapt NONE.
3061 stats.bw_limited_resolution = false; 3059 stats.bw_limited_resolution = false;
3062 fake_call_->GetVideoSendStreams().front()->SetStats(stats); 3060 fake_call_->GetVideoSendStreams().front()->SetStats(stats);
3063 info.Clear(); 3061 info.Clear();
3064 EXPECT_TRUE(channel_->GetStats(&info)); 3062 EXPECT_TRUE(channel_->GetStats(&info));
3065 ASSERT_EQ(1U, info.senders.size()); 3063 ASSERT_EQ(1U, info.senders.size());
3066 EXPECT_EQ(WebRtcVideoChannel2::ADAPTREASON_NONE, 3064 EXPECT_EQ(WebRtcVideoChannel2::ADAPTREASON_NONE,
3067 info.senders[0].adapt_reason); 3065 info.senders[0].adapt_reason);
3068 3066
3069 channel_->SetSource(kSsrcs3[0], NULL); 3067 EXPECT_TRUE(channel_->SetVideoSend(kSsrcs3[0], true, nullptr, nullptr));
3070 } 3068 }
3071 3069
3072 TEST_F(WebRtcVideoChannel2Test, 3070 TEST_F(WebRtcVideoChannel2Test,
3073 GetStatsTranslatesBandwidthLimitedResolutionCorrectly) { 3071 GetStatsTranslatesBandwidthLimitedResolutionCorrectly) {
3074 FakeVideoSendStream* stream = AddSendStream(); 3072 FakeVideoSendStream* stream = AddSendStream();
3075 webrtc::VideoSendStream::Stats stats; 3073 webrtc::VideoSendStream::Stats stats;
3076 stats.bw_limited_resolution = true; 3074 stats.bw_limited_resolution = true;
3077 stream->SetStats(stats); 3075 stream->SetStats(stats);
3078 3076
3079 cricket::VideoMediaInfo info; 3077 cricket::VideoMediaInfo info;
(...skipping 345 matching lines...) Expand 10 before | Expand all | Expand 10 after
3425 } 3423 }
3426 3424
3427 TEST_F(WebRtcVideoChannel2Test, RedRtxPacketDoesntCreateUnsignalledStream) { 3425 TEST_F(WebRtcVideoChannel2Test, RedRtxPacketDoesntCreateUnsignalledStream) {
3428 TestReceiveUnsignalledSsrcPacket(kRedRtxPayloadType, false); 3426 TestReceiveUnsignalledSsrcPacket(kRedRtxPayloadType, false);
3429 } 3427 }
3430 3428
3431 TEST_F(WebRtcVideoChannel2Test, CanSentMaxBitrateForExistingStream) { 3429 TEST_F(WebRtcVideoChannel2Test, CanSentMaxBitrateForExistingStream) {
3432 AddSendStream(); 3430 AddSendStream();
3433 3431
3434 cricket::FakeVideoCapturer capturer; 3432 cricket::FakeVideoCapturer capturer;
3435 channel_->SetSource(last_ssrc_, &capturer); 3433 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, &capturer));
3436 cricket::VideoFormat capture_format_hd = 3434 cricket::VideoFormat capture_format_hd =
3437 capturer.GetSupportedFormats()->front(); 3435 capturer.GetSupportedFormats()->front();
3438 EXPECT_EQ(1280, capture_format_hd.width); 3436 EXPECT_EQ(1280, capture_format_hd.width);
3439 EXPECT_EQ(720, capture_format_hd.height); 3437 EXPECT_EQ(720, capture_format_hd.height);
3440 EXPECT_EQ(cricket::CS_RUNNING, capturer.Start(capture_format_hd)); 3438 EXPECT_EQ(cricket::CS_RUNNING, capturer.Start(capture_format_hd));
3441 EXPECT_TRUE(channel_->SetSend(true)); 3439 EXPECT_TRUE(channel_->SetSend(true));
3442 3440
3443 int default_encoder_bitrate = GetMaxEncoderBitrate(capturer); 3441 int default_encoder_bitrate = GetMaxEncoderBitrate(capturer);
3444 EXPECT_TRUE(default_encoder_bitrate > 1000); 3442 EXPECT_TRUE(default_encoder_bitrate > 1000);
3445 3443
3446 // TODO(skvlad): Resolve the inconsistency between the interpretation 3444 // TODO(skvlad): Resolve the inconsistency between the interpretation
3447 // of the global bitrate limit for audio and video: 3445 // of the global bitrate limit for audio and video:
3448 // - Audio: max_bandwidth_bps = 0 - fail the operation, 3446 // - Audio: max_bandwidth_bps = 0 - fail the operation,
3449 // max_bandwidth_bps = -1 - remove the bandwidth limit 3447 // max_bandwidth_bps = -1 - remove the bandwidth limit
3450 // - Video: max_bandwidth_bps = 0 - remove the bandwidth limit, 3448 // - Video: max_bandwidth_bps = 0 - remove the bandwidth limit,
3451 // max_bandwidth_bps = -1 - do not change the previously set 3449 // max_bandwidth_bps = -1 - do not change the previously set
3452 // limit. 3450 // limit.
3453 3451
3454 SetAndExpectMaxBitrate(capturer, 1000, 0, 1000); 3452 SetAndExpectMaxBitrate(capturer, 1000, 0, 1000);
3455 SetAndExpectMaxBitrate(capturer, 1000, 800, 800); 3453 SetAndExpectMaxBitrate(capturer, 1000, 800, 800);
3456 SetAndExpectMaxBitrate(capturer, 600, 800, 600); 3454 SetAndExpectMaxBitrate(capturer, 600, 800, 600);
3457 SetAndExpectMaxBitrate(capturer, 0, 800, 800); 3455 SetAndExpectMaxBitrate(capturer, 0, 800, 800);
3458 SetAndExpectMaxBitrate(capturer, 0, 0, default_encoder_bitrate); 3456 SetAndExpectMaxBitrate(capturer, 0, 0, default_encoder_bitrate);
3459 3457
3460 channel_->SetSource(last_ssrc_, NULL); 3458 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, nullptr));
3461 } 3459 }
3462 3460
3463 TEST_F(WebRtcVideoChannel2Test, CannotSetMaxBitrateForNonexistentStream) { 3461 TEST_F(WebRtcVideoChannel2Test, CannotSetMaxBitrateForNonexistentStream) {
3464 webrtc::RtpParameters nonexistent_parameters = 3462 webrtc::RtpParameters nonexistent_parameters =
3465 channel_->GetRtpSendParameters(last_ssrc_); 3463 channel_->GetRtpSendParameters(last_ssrc_);
3466 EXPECT_EQ(0, nonexistent_parameters.encodings.size()); 3464 EXPECT_EQ(0, nonexistent_parameters.encodings.size());
3467 3465
3468 nonexistent_parameters.encodings.push_back(webrtc::RtpEncodingParameters()); 3466 nonexistent_parameters.encodings.push_back(webrtc::RtpEncodingParameters());
3469 EXPECT_FALSE( 3467 EXPECT_FALSE(
3470 channel_->SetRtpSendParameters(last_ssrc_, nonexistent_parameters)); 3468 channel_->SetRtpSendParameters(last_ssrc_, nonexistent_parameters));
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after
3653 3651
3654 std::vector<uint32_t> ssrcs = MAKE_VECTOR(kSsrcs3); 3652 std::vector<uint32_t> ssrcs = MAKE_VECTOR(kSsrcs3);
3655 RTC_DCHECK(num_configured_streams <= ssrcs.size()); 3653 RTC_DCHECK(num_configured_streams <= ssrcs.size());
3656 ssrcs.resize(num_configured_streams); 3654 ssrcs.resize(num_configured_streams);
3657 3655
3658 FakeVideoSendStream* stream = 3656 FakeVideoSendStream* stream =
3659 AddSendStream(CreateSimStreamParams("cname", ssrcs)); 3657 AddSendStream(CreateSimStreamParams("cname", ssrcs));
3660 // Send a full-size frame to trigger a stream reconfiguration to use all 3658 // Send a full-size frame to trigger a stream reconfiguration to use all
3661 // expected simulcast layers. 3659 // expected simulcast layers.
3662 cricket::FakeVideoCapturer capturer; 3660 cricket::FakeVideoCapturer capturer;
3663 channel_->SetSource(ssrcs.front(), &capturer); 3661 EXPECT_TRUE(
3662 channel_->SetVideoSend(ssrcs.front(), true, nullptr, &capturer));
3664 EXPECT_EQ(cricket::CS_RUNNING, capturer.Start(cricket::VideoFormat( 3663 EXPECT_EQ(cricket::CS_RUNNING, capturer.Start(cricket::VideoFormat(
3665 codec.width, codec.height, 3664 codec.width, codec.height,
3666 cricket::VideoFormat::FpsToInterval(30), 3665 cricket::VideoFormat::FpsToInterval(30),
3667 cricket::FOURCC_I420))); 3666 cricket::FOURCC_I420)));
3668 channel_->SetSend(true); 3667 channel_->SetSend(true);
3669 EXPECT_TRUE(capturer.CaptureFrame()); 3668 EXPECT_TRUE(capturer.CaptureFrame());
3670 3669
3671 std::vector<webrtc::VideoStream> video_streams = stream->GetVideoStreams(); 3670 std::vector<webrtc::VideoStream> video_streams = stream->GetVideoStreams();
3672 ASSERT_EQ(expected_num_streams, video_streams.size()); 3671 ASSERT_EQ(expected_num_streams, video_streams.size());
3673 3672
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
3710 total_max_bitrate_bps += video_streams[i].max_bitrate_bps; 3709 total_max_bitrate_bps += video_streams[i].max_bitrate_bps;
3711 } else { 3710 } else {
3712 total_max_bitrate_bps += video_streams[i].target_bitrate_bps; 3711 total_max_bitrate_bps += video_streams[i].target_bitrate_bps;
3713 } 3712 }
3714 } 3713 }
3715 cricket::VideoMediaInfo info; 3714 cricket::VideoMediaInfo info;
3716 ASSERT_TRUE(channel_->GetStats(&info)); 3715 ASSERT_TRUE(channel_->GetStats(&info));
3717 ASSERT_EQ(1u, info.senders.size()); 3716 ASSERT_EQ(1u, info.senders.size());
3718 EXPECT_EQ(total_max_bitrate_bps, info.senders[0].preferred_bitrate); 3717 EXPECT_EQ(total_max_bitrate_bps, info.senders[0].preferred_bitrate);
3719 3718
3720 channel_->SetSource(ssrcs.front(), NULL); 3719 EXPECT_TRUE(channel_->SetVideoSend(ssrcs.front(), true, nullptr, nullptr));
3721 } 3720 }
3722 3721
3723 FakeVideoSendStream* AddSendStream() { 3722 FakeVideoSendStream* AddSendStream() {
3724 return AddSendStream(StreamParams::CreateLegacy(last_ssrc_++)); 3723 return AddSendStream(StreamParams::CreateLegacy(last_ssrc_++));
3725 } 3724 }
3726 3725
3727 FakeVideoSendStream* AddSendStream(const StreamParams& sp) { 3726 FakeVideoSendStream* AddSendStream(const StreamParams& sp) {
3728 size_t num_streams = 3727 size_t num_streams =
3729 fake_call_.GetVideoSendStreams().size(); 3728 fake_call_.GetVideoSendStreams().size();
3730 EXPECT_TRUE(channel_->AddSendStream(sp)); 3729 EXPECT_TRUE(channel_->AddSendStream(sp));
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
3767 } 3766 }
3768 3767
3769 // Test that we normalize send codec format size in simulcast. 3768 // Test that we normalize send codec format size in simulcast.
3770 TEST_F(WebRtcVideoChannel2SimulcastTest, SetSendCodecsWithOddSizeInSimulcast) { 3769 TEST_F(WebRtcVideoChannel2SimulcastTest, SetSendCodecsWithOddSizeInSimulcast) {
3771 cricket::VideoCodec codec(kVp8Codec270p); 3770 cricket::VideoCodec codec(kVp8Codec270p);
3772 codec.width += 1; 3771 codec.width += 1;
3773 codec.height += 1; 3772 codec.height += 1;
3774 VerifySimulcastSettings(codec, 2, 2); 3773 VerifySimulcastSettings(codec, 2, 2);
3775 } 3774 }
3776 } // namespace cricket 3775 } // namespace cricket
OLDNEW
« no previous file with comments | « webrtc/media/engine/webrtcvideoengine2.cc ('k') | webrtc/pc/channel.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698