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

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

Issue 1896413002: Reland of Initialize/configure video encoders asychronously. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: rebase2 Created 4 years, 8 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/fakewebrtcvideoengine.h ('k') | webrtc/video/video_quality_test.cc » ('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 330 matching lines...) Expand 10 before | Expand all | Expand 10 after
341 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; 341 cricket::FakeWebRtcVideoEncoderFactory encoder_factory;
342 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecVP8, "VP8"); 342 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecVP8, "VP8");
343 cricket::VideoSendParameters parameters; 343 cricket::VideoSendParameters parameters;
344 parameters.codecs.push_back(kVp8Codec); 344 parameters.codecs.push_back(kVp8Codec);
345 345
346 std::unique_ptr<VideoMediaChannel> channel( 346 std::unique_ptr<VideoMediaChannel> channel(
347 SetUpForExternalEncoderFactory(&encoder_factory, parameters.codecs)); 347 SetUpForExternalEncoderFactory(&encoder_factory, parameters.codecs));
348 348
349 EXPECT_TRUE( 349 EXPECT_TRUE(
350 channel->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc))); 350 channel->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc)));
351 ASSERT_TRUE(encoder_factory.WaitForCreatedVideoEncoders(1));
351 ASSERT_EQ(1u, encoder_factory.encoders().size()); 352 ASSERT_EQ(1u, encoder_factory.encoders().size());
352 EXPECT_TRUE(channel->SetSend(true)); 353 EXPECT_TRUE(channel->SetSend(true));
353 354
354 cricket::FakeVideoCapturer capturer; 355 cricket::FakeVideoCapturer capturer;
355 channel->SetSource(kSsrc, &capturer); 356 channel->SetSource(kSsrc, &capturer);
356 EXPECT_EQ(cricket::CS_RUNNING, 357 EXPECT_EQ(cricket::CS_RUNNING,
357 capturer.Start(capturer.GetSupportedFormats()->front())); 358 capturer.Start(capturer.GetSupportedFormats()->front()));
358 EXPECT_TRUE(capturer.CaptureFrame()); 359 EXPECT_TRUE(capturer.CaptureFrame());
360 // Sending one frame will have reallocated the encoder since input size
361 // changes from a small default to the actual frame width/height. Wait for
362 // that to happen then for the frame to be sent.
363 ASSERT_TRUE(encoder_factory.WaitForCreatedVideoEncoders(2));
359 EXPECT_TRUE_WAIT(encoder_factory.encoders()[0]->GetNumEncodedFrames() > 0, 364 EXPECT_TRUE_WAIT(encoder_factory.encoders()[0]->GetNumEncodedFrames() > 0,
360 kTimeout); 365 kTimeout);
361 366
362 // Sending one frame will have reallocated the encoder since input size
363 // changes from a small default to the actual frame width/height.
364 int num_created_encoders = encoder_factory.GetNumCreatedEncoders(); 367 int num_created_encoders = encoder_factory.GetNumCreatedEncoders();
365 EXPECT_EQ(num_created_encoders, 2); 368 EXPECT_EQ(num_created_encoders, 2);
366 369
367 // Setting codecs of the same type should not reallocate any encoders 370 // Setting codecs of the same type should not reallocate any encoders
368 // (expecting a no-op). 371 // (expecting a no-op).
369 EXPECT_TRUE(channel->SetSendParameters(parameters)); 372 EXPECT_TRUE(channel->SetSendParameters(parameters));
370 EXPECT_EQ(num_created_encoders, encoder_factory.GetNumCreatedEncoders()); 373 EXPECT_EQ(num_created_encoders, encoder_factory.GetNumCreatedEncoders());
371 374
372 // Remove stream previously added to free the external encoder instance. 375 // Remove stream previously added to free the external encoder instance.
373 EXPECT_TRUE(channel->RemoveSendStream(kSsrc)); 376 EXPECT_TRUE(channel->RemoveSendStream(kSsrc));
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after
584 EXPECT_TRUE( 587 EXPECT_TRUE(
585 channel->AddSendStream(CreateSimStreamParams("cname", ssrcs))); 588 channel->AddSendStream(CreateSimStreamParams("cname", ssrcs)));
586 EXPECT_TRUE(channel->SetSend(true)); 589 EXPECT_TRUE(channel->SetSend(true));
587 590
588 cricket::FakeVideoCapturer capturer; 591 cricket::FakeVideoCapturer capturer;
589 channel->SetSource(ssrcs.front(), &capturer); 592 channel->SetSource(ssrcs.front(), &capturer);
590 EXPECT_EQ(cricket::CS_RUNNING, 593 EXPECT_EQ(cricket::CS_RUNNING,
591 capturer.Start(capturer.GetSupportedFormats()->front())); 594 capturer.Start(capturer.GetSupportedFormats()->front()));
592 EXPECT_TRUE(capturer.CaptureFrame()); 595 EXPECT_TRUE(capturer.CaptureFrame());
593 596
594 EXPECT_GT(encoder_factory.encoders().size(), 1u); 597 ASSERT_TRUE(encoder_factory.WaitForCreatedVideoEncoders(2));
595 598
596 // Verify that encoders are configured for simulcast through adapter 599 // Verify that encoders are configured for simulcast through adapter
597 // (increasing resolution and only configured to send one stream each). 600 // (increasing resolution and only configured to send one stream each).
598 int prev_width = -1; 601 int prev_width = -1;
599 for (size_t i = 0; i < encoder_factory.encoders().size(); ++i) { 602 for (size_t i = 0; i < encoder_factory.encoders().size(); ++i) {
603 ASSERT_TRUE(encoder_factory.encoders()[i]->WaitForInitEncode());
600 webrtc::VideoCodec codec_settings = 604 webrtc::VideoCodec codec_settings =
601 encoder_factory.encoders()[i]->GetCodecSettings(); 605 encoder_factory.encoders()[i]->GetCodecSettings();
602 EXPECT_EQ(0, codec_settings.numberOfSimulcastStreams); 606 EXPECT_EQ(0, codec_settings.numberOfSimulcastStreams);
603 EXPECT_GT(codec_settings.width, prev_width); 607 EXPECT_GT(codec_settings.width, prev_width);
604 prev_width = codec_settings.width; 608 prev_width = codec_settings.width;
605 } 609 }
606 610
607 channel->SetSource(ssrcs.front(), NULL); 611 channel->SetSource(ssrcs.front(), NULL);
608 612
609 channel.reset(); 613 channel.reset();
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
665 669
666 // Send a fake frame, or else the media engine will configure the simulcast 670 // Send a fake frame, or else the media engine will configure the simulcast
667 // encoder adapter at a low-enough size that it'll only create a single 671 // encoder adapter at a low-enough size that it'll only create a single
668 // encoder layer. 672 // encoder layer.
669 cricket::FakeVideoCapturer capturer; 673 cricket::FakeVideoCapturer capturer;
670 channel->SetSource(ssrcs.front(), &capturer); 674 channel->SetSource(ssrcs.front(), &capturer);
671 EXPECT_EQ(cricket::CS_RUNNING, 675 EXPECT_EQ(cricket::CS_RUNNING,
672 capturer.Start(capturer.GetSupportedFormats()->front())); 676 capturer.Start(capturer.GetSupportedFormats()->front()));
673 EXPECT_TRUE(capturer.CaptureFrame()); 677 EXPECT_TRUE(capturer.CaptureFrame());
674 678
675 ASSERT_GT(encoder_factory.encoders().size(), 1u); 679 ASSERT_TRUE(encoder_factory.WaitForCreatedVideoEncoders(2));
680 ASSERT_TRUE(encoder_factory.encoders()[0]->WaitForInitEncode());
676 EXPECT_EQ(webrtc::kVideoCodecVP8, 681 EXPECT_EQ(webrtc::kVideoCodecVP8,
677 encoder_factory.encoders()[0]->GetCodecSettings().codecType); 682 encoder_factory.encoders()[0]->GetCodecSettings().codecType);
678 683
679 channel.reset(); 684 channel.reset();
680 // Make sure DestroyVideoEncoder was called on the factory. 685 // Make sure DestroyVideoEncoder was called on the factory.
681 EXPECT_EQ(0u, encoder_factory.encoders().size()); 686 EXPECT_EQ(0u, encoder_factory.encoders().size());
682 } 687 }
683 688
684 TEST_F(WebRtcVideoEngine2Test, 689 TEST_F(WebRtcVideoEngine2Test,
685 DestroysNonSimulcastEncoderFromCombinedVP8AndH264Factory) { 690 DestroysNonSimulcastEncoderFromCombinedVP8AndH264Factory) {
686 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; 691 cricket::FakeWebRtcVideoEncoderFactory encoder_factory;
687 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecVP8, "VP8"); 692 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecVP8, "VP8");
688 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecH264, "H264"); 693 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecH264, "H264");
689 694
690 std::vector<cricket::VideoCodec> codecs; 695 std::vector<cricket::VideoCodec> codecs;
691 codecs.push_back(kH264Codec); 696 codecs.push_back(kH264Codec);
692 697
693 std::unique_ptr<VideoMediaChannel> channel( 698 std::unique_ptr<VideoMediaChannel> channel(
694 SetUpForExternalEncoderFactory(&encoder_factory, codecs)); 699 SetUpForExternalEncoderFactory(&encoder_factory, codecs));
695 700
696 EXPECT_TRUE( 701 EXPECT_TRUE(
697 channel->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc))); 702 channel->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc)));
698 ASSERT_EQ(1u, encoder_factory.encoders().size()); 703 ASSERT_EQ(1u, encoder_factory.encoders().size());
704 ASSERT_TRUE(encoder_factory.encoders()[0]->WaitForInitEncode());
699 EXPECT_EQ(webrtc::kVideoCodecH264, 705 EXPECT_EQ(webrtc::kVideoCodecH264,
700 encoder_factory.encoders()[0]->GetCodecSettings().codecType); 706 encoder_factory.encoders()[0]->GetCodecSettings().codecType);
701 707
702 channel.reset(); 708 channel.reset();
703 // Make sure DestroyVideoEncoder was called on the factory. 709 // Make sure DestroyVideoEncoder was called on the factory.
704 ASSERT_EQ(0u, encoder_factory.encoders().size()); 710 ASSERT_EQ(0u, encoder_factory.encoders().size());
705 } 711 }
706 712
707 TEST_F(WebRtcVideoEngine2Test, SimulcastDisabledForH264) { 713 TEST_F(WebRtcVideoEngine2Test, SimulcastDisabledForH264) {
708 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; 714 cricket::FakeWebRtcVideoEncoderFactory encoder_factory;
(...skipping 11 matching lines...) Expand all
720 // Send a frame of 720p. This should trigger a "real" encoder initialization. 726 // Send a frame of 720p. This should trigger a "real" encoder initialization.
721 cricket::VideoFormat format( 727 cricket::VideoFormat format(
722 1280, 720, cricket::VideoFormat::FpsToInterval(30), cricket::FOURCC_I420); 728 1280, 720, cricket::VideoFormat::FpsToInterval(30), cricket::FOURCC_I420);
723 cricket::FakeVideoCapturer capturer; 729 cricket::FakeVideoCapturer capturer;
724 channel->SetSource(ssrcs[0], &capturer); 730 channel->SetSource(ssrcs[0], &capturer);
725 EXPECT_EQ(cricket::CS_RUNNING, capturer.Start(format)); 731 EXPECT_EQ(cricket::CS_RUNNING, capturer.Start(format));
726 EXPECT_TRUE(capturer.CaptureFrame()); 732 EXPECT_TRUE(capturer.CaptureFrame());
727 733
728 ASSERT_EQ(1u, encoder_factory.encoders().size()); 734 ASSERT_EQ(1u, encoder_factory.encoders().size());
729 FakeWebRtcVideoEncoder* encoder = encoder_factory.encoders()[0]; 735 FakeWebRtcVideoEncoder* encoder = encoder_factory.encoders()[0];
736 ASSERT_TRUE(encoder_factory.encoders()[0]->WaitForInitEncode());
730 EXPECT_EQ(webrtc::kVideoCodecH264, encoder->GetCodecSettings().codecType); 737 EXPECT_EQ(webrtc::kVideoCodecH264, encoder->GetCodecSettings().codecType);
731 EXPECT_EQ(1u, encoder->GetCodecSettings().numberOfSimulcastStreams); 738 EXPECT_EQ(1u, encoder->GetCodecSettings().numberOfSimulcastStreams);
732 channel->SetSource(ssrcs[0], nullptr); 739 channel->SetSource(ssrcs[0], nullptr);
733 } 740 }
734 741
735 // Test that external codecs are added to the end of the supported codec list. 742 // Test that external codecs are added to the end of the supported codec list.
736 TEST_F(WebRtcVideoEngine2Test, ReportSupportedExternalCodecs) { 743 TEST_F(WebRtcVideoEngine2Test, ReportSupportedExternalCodecs) {
737 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; 744 cricket::FakeWebRtcVideoEncoderFactory encoder_factory;
738 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecUnknown, 745 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecUnknown,
739 "FakeExternalCodec"); 746 "FakeExternalCodec");
(...skipping 2859 matching lines...) Expand 10 before | Expand all | Expand 10 after
3599 } 3606 }
3600 3607
3601 // Test that we normalize send codec format size in simulcast. 3608 // Test that we normalize send codec format size in simulcast.
3602 TEST_F(WebRtcVideoChannel2SimulcastTest, SetSendCodecsWithOddSizeInSimulcast) { 3609 TEST_F(WebRtcVideoChannel2SimulcastTest, SetSendCodecsWithOddSizeInSimulcast) {
3603 cricket::VideoCodec codec(kVp8Codec270p); 3610 cricket::VideoCodec codec(kVp8Codec270p);
3604 codec.width += 1; 3611 codec.width += 1;
3605 codec.height += 1; 3612 codec.height += 1;
3606 VerifySimulcastSettings(codec, 2, 2); 3613 VerifySimulcastSettings(codec, 2, 2);
3607 } 3614 }
3608 } // namespace cricket 3615 } // namespace cricket
OLDNEW
« no previous file with comments | « webrtc/media/engine/fakewebrtcvideoengine.h ('k') | webrtc/video/video_quality_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698