OLD | NEW |
---|---|
1 /* | 1 /* |
2 * libjingle | 2 * libjingle |
3 * Copyright 2004 Google Inc. | 3 * Copyright 2004 Google Inc. |
4 * | 4 * |
5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
6 * modification, are permitted provided that the following conditions are met: | 6 * modification, are permitted provided that the following conditions are met: |
7 * | 7 * |
8 * 1. Redistributions of source code must retain the above copyright notice, | 8 * 1. Redistributions of source code must retain the above copyright notice, |
9 * this list of conditions and the following disclaimer. | 9 * this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright notice, | 10 * 2. Redistributions in binary form must reproduce the above copyright notice, |
(...skipping 354 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
365 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; | 365 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; |
366 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecVP8, "VP8"); | 366 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecVP8, "VP8"); |
367 cricket::VideoSendParameters parameters; | 367 cricket::VideoSendParameters parameters; |
368 parameters.codecs.push_back(kVp8Codec); | 368 parameters.codecs.push_back(kVp8Codec); |
369 | 369 |
370 rtc::scoped_ptr<VideoMediaChannel> channel( | 370 rtc::scoped_ptr<VideoMediaChannel> channel( |
371 SetUpForExternalEncoderFactory(&encoder_factory, parameters.codecs)); | 371 SetUpForExternalEncoderFactory(&encoder_factory, parameters.codecs)); |
372 | 372 |
373 EXPECT_TRUE( | 373 EXPECT_TRUE( |
374 channel->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc))); | 374 channel->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc))); |
375 ASSERT_TRUE(encoder_factory.WaitForCreatedVideoEncoder()); | |
375 ASSERT_EQ(1u, encoder_factory.encoders().size()); | 376 ASSERT_EQ(1u, encoder_factory.encoders().size()); |
376 EXPECT_TRUE(channel->SetSend(true)); | 377 EXPECT_TRUE(channel->SetSend(true)); |
377 | 378 |
378 cricket::FakeVideoCapturer capturer; | 379 cricket::FakeVideoCapturer capturer; |
379 EXPECT_TRUE(channel->SetCapturer(kSsrc, &capturer)); | 380 EXPECT_TRUE(channel->SetCapturer(kSsrc, &capturer)); |
380 EXPECT_EQ(cricket::CS_RUNNING, | 381 EXPECT_EQ(cricket::CS_RUNNING, |
381 capturer.Start(capturer.GetSupportedFormats()->front())); | 382 capturer.Start(capturer.GetSupportedFormats()->front())); |
382 EXPECT_TRUE(capturer.CaptureFrame()); | 383 EXPECT_TRUE(capturer.CaptureFrame()); |
384 | |
385 // Sending one frame will have reallocated the encoder since input size | |
386 // changes from a small default to the actual frame width/height. Wait for | |
387 // that to happen then for the frame to be sent. | |
388 ASSERT_TRUE(encoder_factory.WaitForCreatedVideoEncoder()); | |
stefan-webrtc
2016/01/19 12:02:09
Any chance that the encoder has already been recre
pbos-webrtc
2016/01/19 15:27:58
No, Set() remains set until Wait() catches it.
stefan-webrtc
2016/01/20 12:22:47
Thanks!
| |
383 EXPECT_TRUE_WAIT(encoder_factory.encoders()[0]->GetNumEncodedFrames() > 0, | 389 EXPECT_TRUE_WAIT(encoder_factory.encoders()[0]->GetNumEncodedFrames() > 0, |
384 kTimeout); | 390 kTimeout); |
385 | 391 |
386 // Sending one frame will have reallocated the encoder since input size | |
387 // changes from a small default to the actual frame width/height. | |
388 int num_created_encoders = encoder_factory.GetNumCreatedEncoders(); | 392 int num_created_encoders = encoder_factory.GetNumCreatedEncoders(); |
389 EXPECT_EQ(num_created_encoders, 2); | 393 EXPECT_EQ(num_created_encoders, 2); |
390 | 394 |
391 // Setting codecs of the same type should not reallocate any encoders | 395 // Setting codecs of the same type should not reallocate any encoders |
392 // (expecting a no-op). | 396 // (expecting a no-op). |
393 EXPECT_TRUE(channel->SetSendParameters(parameters)); | 397 EXPECT_TRUE(channel->SetSendParameters(parameters)); |
394 EXPECT_EQ(num_created_encoders, encoder_factory.GetNumCreatedEncoders()); | 398 EXPECT_EQ(num_created_encoders, encoder_factory.GetNumCreatedEncoders()); |
395 | 399 |
396 // Remove stream previously added to free the external encoder instance. | 400 // Remove stream previously added to free the external encoder instance. |
397 EXPECT_TRUE(channel->RemoveSendStream(kSsrc)); | 401 EXPECT_TRUE(channel->RemoveSendStream(kSsrc)); |
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
571 EXPECT_TRUE( | 575 EXPECT_TRUE( |
572 channel->AddSendStream(CreateSimStreamParams("cname", ssrcs))); | 576 channel->AddSendStream(CreateSimStreamParams("cname", ssrcs))); |
573 EXPECT_TRUE(channel->SetSend(true)); | 577 EXPECT_TRUE(channel->SetSend(true)); |
574 | 578 |
575 cricket::FakeVideoCapturer capturer; | 579 cricket::FakeVideoCapturer capturer; |
576 EXPECT_TRUE(channel->SetCapturer(ssrcs.front(), &capturer)); | 580 EXPECT_TRUE(channel->SetCapturer(ssrcs.front(), &capturer)); |
577 EXPECT_EQ(cricket::CS_RUNNING, | 581 EXPECT_EQ(cricket::CS_RUNNING, |
578 capturer.Start(capturer.GetSupportedFormats()->front())); | 582 capturer.Start(capturer.GetSupportedFormats()->front())); |
579 EXPECT_TRUE(capturer.CaptureFrame()); | 583 EXPECT_TRUE(capturer.CaptureFrame()); |
580 | 584 |
581 EXPECT_GT(encoder_factory.encoders().size(), 1u); | 585 while (encoder_factory.encoders().size() <= 1) |
586 ASSERT_TRUE(encoder_factory.WaitForCreatedVideoEncoder()); | |
582 | 587 |
583 // Verify that encoders are configured for simulcast through adapter | 588 // Verify that encoders are configured for simulcast through adapter |
584 // (increasing resolution and only configured to send one stream each). | 589 // (increasing resolution and only configured to send one stream each). |
585 int prev_width = -1; | 590 int prev_width = -1; |
586 for (size_t i = 0; i < encoder_factory.encoders().size(); ++i) { | 591 for (size_t i = 0; i < encoder_factory.encoders().size(); ++i) { |
592 ASSERT_TRUE(encoder_factory.encoders()[i]->WaitForInitEncode()); | |
587 webrtc::VideoCodec codec_settings = | 593 webrtc::VideoCodec codec_settings = |
588 encoder_factory.encoders()[i]->GetCodecSettings(); | 594 encoder_factory.encoders()[i]->GetCodecSettings(); |
589 EXPECT_EQ(0, codec_settings.numberOfSimulcastStreams); | 595 EXPECT_EQ(0, codec_settings.numberOfSimulcastStreams); |
590 EXPECT_GT(codec_settings.width, prev_width); | 596 EXPECT_GT(codec_settings.width, prev_width); |
591 prev_width = codec_settings.width; | 597 prev_width = codec_settings.width; |
592 } | 598 } |
593 | 599 |
594 EXPECT_TRUE(channel->SetCapturer(ssrcs.front(), NULL)); | 600 EXPECT_TRUE(channel->SetCapturer(ssrcs.front(), NULL)); |
595 | 601 |
596 channel.reset(); | 602 channel.reset(); |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
652 | 658 |
653 // Send a fake frame, or else the media engine will configure the simulcast | 659 // Send a fake frame, or else the media engine will configure the simulcast |
654 // encoder adapter at a low-enough size that it'll only create a single | 660 // encoder adapter at a low-enough size that it'll only create a single |
655 // encoder layer. | 661 // encoder layer. |
656 cricket::FakeVideoCapturer capturer; | 662 cricket::FakeVideoCapturer capturer; |
657 EXPECT_TRUE(channel->SetCapturer(ssrcs.front(), &capturer)); | 663 EXPECT_TRUE(channel->SetCapturer(ssrcs.front(), &capturer)); |
658 EXPECT_EQ(cricket::CS_RUNNING, | 664 EXPECT_EQ(cricket::CS_RUNNING, |
659 capturer.Start(capturer.GetSupportedFormats()->front())); | 665 capturer.Start(capturer.GetSupportedFormats()->front())); |
660 EXPECT_TRUE(capturer.CaptureFrame()); | 666 EXPECT_TRUE(capturer.CaptureFrame()); |
661 | 667 |
662 ASSERT_GT(encoder_factory.encoders().size(), 1u); | 668 while (encoder_factory.encoders().size() <= 1) |
669 ASSERT_TRUE(encoder_factory.WaitForCreatedVideoEncoder()); | |
670 | |
671 ASSERT_TRUE(encoder_factory.encoders()[0]->WaitForInitEncode()); | |
663 EXPECT_EQ(webrtc::kVideoCodecVP8, | 672 EXPECT_EQ(webrtc::kVideoCodecVP8, |
664 encoder_factory.encoders()[0]->GetCodecSettings().codecType); | 673 encoder_factory.encoders()[0]->GetCodecSettings().codecType); |
665 | 674 |
666 channel.reset(); | 675 channel.reset(); |
667 // Make sure DestroyVideoEncoder was called on the factory. | 676 // Make sure DestroyVideoEncoder was called on the factory. |
668 EXPECT_EQ(0u, encoder_factory.encoders().size()); | 677 EXPECT_EQ(0u, encoder_factory.encoders().size()); |
669 } | 678 } |
670 | 679 |
671 TEST_F(WebRtcVideoEngine2Test, | 680 TEST_F(WebRtcVideoEngine2Test, |
672 DestroysNonSimulcastEncoderFromCombinedVP8AndH264Factory) { | 681 DestroysNonSimulcastEncoderFromCombinedVP8AndH264Factory) { |
673 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; | 682 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; |
674 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecVP8, "VP8"); | 683 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecVP8, "VP8"); |
675 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecH264, "H264"); | 684 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecH264, "H264"); |
676 | 685 |
677 std::vector<cricket::VideoCodec> codecs; | 686 std::vector<cricket::VideoCodec> codecs; |
678 codecs.push_back(kH264Codec); | 687 codecs.push_back(kH264Codec); |
679 | 688 |
680 rtc::scoped_ptr<VideoMediaChannel> channel( | 689 rtc::scoped_ptr<VideoMediaChannel> channel( |
681 SetUpForExternalEncoderFactory(&encoder_factory, codecs)); | 690 SetUpForExternalEncoderFactory(&encoder_factory, codecs)); |
682 | 691 |
683 EXPECT_TRUE( | 692 EXPECT_TRUE( |
684 channel->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc))); | 693 channel->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc))); |
685 ASSERT_EQ(1u, encoder_factory.encoders().size()); | 694 ASSERT_EQ(1u, encoder_factory.encoders().size()); |
695 ASSERT_TRUE(encoder_factory.encoders()[0]->WaitForInitEncode()); | |
686 EXPECT_EQ(webrtc::kVideoCodecH264, | 696 EXPECT_EQ(webrtc::kVideoCodecH264, |
687 encoder_factory.encoders()[0]->GetCodecSettings().codecType); | 697 encoder_factory.encoders()[0]->GetCodecSettings().codecType); |
688 | 698 |
689 channel.reset(); | 699 channel.reset(); |
690 // Make sure DestroyVideoEncoder was called on the factory. | 700 // Make sure DestroyVideoEncoder was called on the factory. |
691 ASSERT_EQ(0u, encoder_factory.encoders().size()); | 701 ASSERT_EQ(0u, encoder_factory.encoders().size()); |
692 } | 702 } |
693 | 703 |
694 TEST_F(WebRtcVideoEngine2Test, SimulcastDisabledForH264) { | 704 TEST_F(WebRtcVideoEngine2Test, SimulcastDisabledForH264) { |
695 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; | 705 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; |
696 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecH264, "H264"); | 706 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecH264, "H264"); |
697 std::vector<cricket::VideoCodec> codecs; | 707 std::vector<cricket::VideoCodec> codecs; |
698 codecs.push_back(kH264Codec); | 708 codecs.push_back(kH264Codec); |
699 | 709 |
700 rtc::scoped_ptr<VideoMediaChannel> channel( | 710 rtc::scoped_ptr<VideoMediaChannel> channel( |
701 SetUpForExternalEncoderFactory(&encoder_factory, codecs)); | 711 SetUpForExternalEncoderFactory(&encoder_factory, codecs)); |
702 | 712 |
703 const std::vector<uint32_t> ssrcs = MAKE_VECTOR(kSsrcs3); | 713 const std::vector<uint32_t> ssrcs = MAKE_VECTOR(kSsrcs3); |
704 EXPECT_TRUE( | 714 EXPECT_TRUE( |
705 channel->AddSendStream(cricket::CreateSimStreamParams("cname", ssrcs))); | 715 channel->AddSendStream(cricket::CreateSimStreamParams("cname", ssrcs))); |
706 // Set the stream to 720p. This should trigger a "real" encoder | 716 // Set the stream to 720p. This should trigger a "real" encoder |
707 // initialization. | 717 // initialization. |
708 cricket::VideoFormat format( | 718 cricket::VideoFormat format( |
709 1280, 720, cricket::VideoFormat::FpsToInterval(30), cricket::FOURCC_I420); | 719 1280, 720, cricket::VideoFormat::FpsToInterval(30), cricket::FOURCC_I420); |
710 EXPECT_TRUE(channel->SetSendStreamFormat(ssrcs[0], format)); | 720 EXPECT_TRUE(channel->SetSendStreamFormat(ssrcs[0], format)); |
711 ASSERT_EQ(1u, encoder_factory.encoders().size()); | 721 ASSERT_EQ(1u, encoder_factory.encoders().size()); |
712 FakeWebRtcVideoEncoder* encoder = encoder_factory.encoders()[0]; | 722 FakeWebRtcVideoEncoder* encoder = encoder_factory.encoders()[0]; |
723 ASSERT_TRUE(encoder_factory.encoders()[0]->WaitForInitEncode()); | |
713 EXPECT_EQ(webrtc::kVideoCodecH264, encoder->GetCodecSettings().codecType); | 724 EXPECT_EQ(webrtc::kVideoCodecH264, encoder->GetCodecSettings().codecType); |
714 EXPECT_EQ(1u, encoder->GetCodecSettings().numberOfSimulcastStreams); | 725 EXPECT_EQ(1u, encoder->GetCodecSettings().numberOfSimulcastStreams); |
715 } | 726 } |
716 | 727 |
717 // Test external codec with be added to the end of the supported codec list. | 728 // Test external codec with be added to the end of the supported codec list. |
718 TEST_F(WebRtcVideoEngine2Test, ReportSupportedExternalCodecs) { | 729 TEST_F(WebRtcVideoEngine2Test, ReportSupportedExternalCodecs) { |
719 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; | 730 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; |
720 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecH264, "H264"); | 731 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecH264, "H264"); |
721 engine_.SetExternalEncoderFactory(&encoder_factory); | 732 engine_.SetExternalEncoderFactory(&encoder_factory); |
722 engine_.Init(); | 733 engine_.Init(); |
(...skipping 2682 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3405 // Ensures that the correct settings are applied to the codec when two temporal | 3416 // Ensures that the correct settings are applied to the codec when two temporal |
3406 // layer screencasting is enabled, and that the correct simulcast settings are | 3417 // layer screencasting is enabled, and that the correct simulcast settings are |
3407 // reapplied when disabling screencasting. | 3418 // reapplied when disabling screencasting. |
3408 TEST_F(WebRtcVideoChannel2SimulcastTest, | 3419 TEST_F(WebRtcVideoChannel2SimulcastTest, |
3409 DISABLED_TwoTemporalLayerScreencastSettings) { | 3420 DISABLED_TwoTemporalLayerScreencastSettings) { |
3410 // TODO(pbos): Implement. | 3421 // TODO(pbos): Implement. |
3411 FAIL() << "Not implemented."; | 3422 FAIL() << "Not implemented."; |
3412 } | 3423 } |
3413 | 3424 |
3414 } // namespace cricket | 3425 } // namespace cricket |
OLD | NEW |