OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2014 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 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
97 media_error_ = cricket::VideoMediaChannel::ERROR_NONE; | 97 media_error_ = cricket::VideoMediaChannel::ERROR_NONE; |
98 cricket::VideoRecvParameters parameters; | 98 cricket::VideoRecvParameters parameters; |
99 parameters.codecs = engine_.codecs(); | 99 parameters.codecs = engine_.codecs(); |
100 channel_->SetRecvParameters(parameters); | 100 channel_->SetRecvParameters(parameters); |
101 EXPECT_TRUE(channel_->AddSendStream(DefaultSendStreamParams())); | 101 EXPECT_TRUE(channel_->AddSendStream(DefaultSendStreamParams())); |
102 video_capturer_.reset(CreateFakeVideoCapturer()); | 102 video_capturer_.reset(CreateFakeVideoCapturer()); |
103 cricket::VideoFormat format(640, 480, | 103 cricket::VideoFormat format(640, 480, |
104 cricket::VideoFormat::FpsToInterval(30), | 104 cricket::VideoFormat::FpsToInterval(30), |
105 cricket::FOURCC_I420); | 105 cricket::FOURCC_I420); |
106 EXPECT_EQ(cricket::CS_RUNNING, video_capturer_->Start(format)); | 106 EXPECT_EQ(cricket::CS_RUNNING, video_capturer_->Start(format)); |
107 channel_->SetSource(kSsrc, video_capturer_.get()); | 107 EXPECT_TRUE( |
| 108 channel_->SetVideoSend(kSsrc, true, nullptr, video_capturer_.get())); |
108 } | 109 } |
109 | 110 |
110 virtual cricket::FakeVideoCapturer* CreateFakeVideoCapturer() { | 111 virtual cricket::FakeVideoCapturer* CreateFakeVideoCapturer() { |
111 return new cricket::FakeVideoCapturer(); | 112 return new cricket::FakeVideoCapturer(); |
112 } | 113 } |
113 | 114 |
114 // Utility method to setup an additional stream to send and receive video. | 115 // Utility method to setup an additional stream to send and receive video. |
115 // Used to test send and recv between two streams. | 116 // Used to test send and recv between two streams. |
116 void SetUpSecondStream() { | 117 void SetUpSecondStream() { |
117 SetUpSecondStreamWithNoRecv(); | 118 SetUpSecondStreamWithNoRecv(); |
(...skipping 16 matching lines...) Expand all Loading... |
134 cricket::StreamParams::CreateLegacy(kSsrc + 2))); | 135 cricket::StreamParams::CreateLegacy(kSsrc + 2))); |
135 // We dont add recv for the second stream. | 136 // We dont add recv for the second stream. |
136 | 137 |
137 // Setup the receive and renderer for second stream after send. | 138 // Setup the receive and renderer for second stream after send. |
138 video_capturer_2_.reset(CreateFakeVideoCapturer()); | 139 video_capturer_2_.reset(CreateFakeVideoCapturer()); |
139 cricket::VideoFormat format(640, 480, | 140 cricket::VideoFormat format(640, 480, |
140 cricket::VideoFormat::FpsToInterval(30), | 141 cricket::VideoFormat::FpsToInterval(30), |
141 cricket::FOURCC_I420); | 142 cricket::FOURCC_I420); |
142 EXPECT_EQ(cricket::CS_RUNNING, video_capturer_2_->Start(format)); | 143 EXPECT_EQ(cricket::CS_RUNNING, video_capturer_2_->Start(format)); |
143 | 144 |
144 channel_->SetSource(kSsrc + 2, video_capturer_2_.get()); | 145 EXPECT_TRUE(channel_->SetVideoSend(kSsrc + 2, true, nullptr, |
| 146 video_capturer_2_.get())); |
145 } | 147 } |
146 virtual void TearDown() { | 148 virtual void TearDown() { |
147 channel_.reset(); | 149 channel_.reset(); |
148 } | 150 } |
149 bool SetDefaultCodec() { | 151 bool SetDefaultCodec() { |
150 return SetOneCodec(DefaultCodec()); | 152 return SetOneCodec(DefaultCodec()); |
151 } | 153 } |
152 | 154 |
153 bool SetOneCodec(int pt, const char* name, int w, int h, int fr) { | 155 bool SetOneCodec(int pt, const char* name, int w, int h, int fr) { |
154 return SetOneCodec(cricket::VideoCodec(pt, name, w, h, fr)); | 156 return SetOneCodec(cricket::VideoCodec(pt, name, w, h, fr)); |
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
345 } | 347 } |
346 | 348 |
347 void OnVideoChannelError(uint32_t ssrc, | 349 void OnVideoChannelError(uint32_t ssrc, |
348 cricket::VideoMediaChannel::Error error) { | 350 cricket::VideoMediaChannel::Error error) { |
349 media_error_ = error; | 351 media_error_ = error; |
350 } | 352 } |
351 | 353 |
352 // Test that SetSend works. | 354 // Test that SetSend works. |
353 void SetSend() { | 355 void SetSend() { |
354 EXPECT_FALSE(channel_->sending()); | 356 EXPECT_FALSE(channel_->sending()); |
355 channel_->SetSource(kSsrc, video_capturer_.get()); | 357 EXPECT_TRUE( |
| 358 channel_->SetVideoSend(kSsrc, true, nullptr, video_capturer_.get())); |
356 EXPECT_TRUE(SetOneCodec(DefaultCodec())); | 359 EXPECT_TRUE(SetOneCodec(DefaultCodec())); |
357 EXPECT_FALSE(channel_->sending()); | 360 EXPECT_FALSE(channel_->sending()); |
358 EXPECT_TRUE(SetSend(true)); | 361 EXPECT_TRUE(SetSend(true)); |
359 EXPECT_TRUE(channel_->sending()); | 362 EXPECT_TRUE(channel_->sending()); |
360 EXPECT_TRUE(SendFrame()); | 363 EXPECT_TRUE(SendFrame()); |
361 EXPECT_TRUE_WAIT(NumRtpPackets() > 0, kTimeout); | 364 EXPECT_TRUE_WAIT(NumRtpPackets() > 0, kTimeout); |
362 EXPECT_TRUE(SetSend(false)); | 365 EXPECT_TRUE(SetSend(false)); |
363 EXPECT_FALSE(channel_->sending()); | 366 EXPECT_FALSE(channel_->sending()); |
364 } | 367 } |
365 // Test that SetSend fails without codecs being set. | 368 // Test that SetSend fails without codecs being set. |
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
539 std::unique_ptr<cricket::FakeVideoCapturer> capturer( | 542 std::unique_ptr<cricket::FakeVideoCapturer> capturer( |
540 CreateFakeVideoCapturer()); | 543 CreateFakeVideoCapturer()); |
541 const int kTestWidth = 160; | 544 const int kTestWidth = 160; |
542 const int kTestHeight = 120; | 545 const int kTestHeight = 120; |
543 cricket::VideoFormat format(kTestWidth, kTestHeight, | 546 cricket::VideoFormat format(kTestWidth, kTestHeight, |
544 cricket::VideoFormat::FpsToInterval(5), | 547 cricket::VideoFormat::FpsToInterval(5), |
545 cricket::FOURCC_I420); | 548 cricket::FOURCC_I420); |
546 EXPECT_EQ(cricket::CS_RUNNING, capturer->Start(format)); | 549 EXPECT_EQ(cricket::CS_RUNNING, capturer->Start(format)); |
547 EXPECT_TRUE(channel_->AddSendStream( | 550 EXPECT_TRUE(channel_->AddSendStream( |
548 cricket::StreamParams::CreateLegacy(5678))); | 551 cricket::StreamParams::CreateLegacy(5678))); |
549 channel_->SetSource(5678, capturer.get()); | 552 EXPECT_TRUE(channel_->SetVideoSend(5678, true, nullptr, capturer.get())); |
550 EXPECT_TRUE(channel_->AddRecvStream( | 553 EXPECT_TRUE(channel_->AddRecvStream( |
551 cricket::StreamParams::CreateLegacy(5678))); | 554 cricket::StreamParams::CreateLegacy(5678))); |
552 EXPECT_TRUE(channel_->SetSink(5678, &renderer2)); | 555 EXPECT_TRUE(channel_->SetSink(5678, &renderer2)); |
553 EXPECT_TRUE(capturer->CaptureCustomFrame( | 556 EXPECT_TRUE(capturer->CaptureCustomFrame( |
554 kTestWidth, kTestHeight, cricket::FOURCC_I420)); | 557 kTestWidth, kTestHeight, cricket::FOURCC_I420)); |
555 EXPECT_FRAME_ON_RENDERER_WAIT( | 558 EXPECT_FRAME_ON_RENDERER_WAIT( |
556 renderer2, 1, kTestWidth, kTestHeight, kTimeout); | 559 renderer2, 1, kTestWidth, kTestHeight, kTimeout); |
557 | 560 |
558 // Get stats, and make sure they are correct for two senders. We wait until | 561 // Get stats, and make sure they are correct for two senders. We wait until |
559 // the number of expected packets have been sent to avoid races where we | 562 // the number of expected packets have been sent to avoid races where we |
(...skipping 15 matching lines...) Expand all Loading... |
575 << "Timed out while waiting for packet counts for all sent packets."; | 578 << "Timed out while waiting for packet counts for all sent packets."; |
576 EXPECT_EQ(1U, info.senders[0].ssrcs().size()); | 579 EXPECT_EQ(1U, info.senders[0].ssrcs().size()); |
577 EXPECT_EQ(1234U, info.senders[0].ssrcs()[0]); | 580 EXPECT_EQ(1234U, info.senders[0].ssrcs()[0]); |
578 EXPECT_EQ(DefaultCodec().width, info.senders[0].send_frame_width); | 581 EXPECT_EQ(DefaultCodec().width, info.senders[0].send_frame_width); |
579 EXPECT_EQ(DefaultCodec().height, info.senders[0].send_frame_height); | 582 EXPECT_EQ(DefaultCodec().height, info.senders[0].send_frame_height); |
580 EXPECT_EQ(1U, info.senders[1].ssrcs().size()); | 583 EXPECT_EQ(1U, info.senders[1].ssrcs().size()); |
581 EXPECT_EQ(5678U, info.senders[1].ssrcs()[0]); | 584 EXPECT_EQ(5678U, info.senders[1].ssrcs()[0]); |
582 EXPECT_EQ(kTestWidth, info.senders[1].send_frame_width); | 585 EXPECT_EQ(kTestWidth, info.senders[1].send_frame_width); |
583 EXPECT_EQ(kTestHeight, info.senders[1].send_frame_height); | 586 EXPECT_EQ(kTestHeight, info.senders[1].send_frame_height); |
584 // The capturer must be unregistered here as it runs out of it's scope next. | 587 // The capturer must be unregistered here as it runs out of it's scope next. |
585 channel_->SetSource(5678, NULL); | 588 channel_->SetVideoSend(5678, true, nullptr, nullptr); |
586 } | 589 } |
587 | 590 |
588 // Test that we can set the bandwidth. | 591 // Test that we can set the bandwidth. |
589 void SetSendBandwidth() { | 592 void SetSendBandwidth() { |
590 cricket::VideoSendParameters parameters; | 593 cricket::VideoSendParameters parameters; |
591 parameters.codecs.push_back(DefaultCodec()); | 594 parameters.codecs.push_back(DefaultCodec()); |
592 parameters.max_bandwidth_bps = -1; // <= 0 means unlimited. | 595 parameters.max_bandwidth_bps = -1; // <= 0 means unlimited. |
593 EXPECT_TRUE(channel_->SetSendParameters(parameters)); | 596 EXPECT_TRUE(channel_->SetSendParameters(parameters)); |
594 parameters.max_bandwidth_bps = 128 * 1024; | 597 parameters.max_bandwidth_bps = 128 * 1024; |
595 EXPECT_TRUE(channel_->SetSendParameters(parameters)); | 598 EXPECT_TRUE(channel_->SetSendParameters(parameters)); |
(...skipping 16 matching lines...) Expand all Loading... |
612 EXPECT_EQ(0, NumRtpPackets(kSsrc - 1)); | 615 EXPECT_EQ(0, NumRtpPackets(kSsrc - 1)); |
613 EXPECT_EQ(0, NumRtpBytes(kSsrc - 1)); | 616 EXPECT_EQ(0, NumRtpBytes(kSsrc - 1)); |
614 } | 617 } |
615 // Test that we can set the SSRC even after codecs are set. | 618 // Test that we can set the SSRC even after codecs are set. |
616 void SetSendSsrcAfterSetCodecs() { | 619 void SetSendSsrcAfterSetCodecs() { |
617 // Remove stream added in Setup. | 620 // Remove stream added in Setup. |
618 EXPECT_TRUE(channel_->RemoveSendStream(kSsrc)); | 621 EXPECT_TRUE(channel_->RemoveSendStream(kSsrc)); |
619 EXPECT_TRUE(SetDefaultCodec()); | 622 EXPECT_TRUE(SetDefaultCodec()); |
620 EXPECT_TRUE(channel_->AddSendStream( | 623 EXPECT_TRUE(channel_->AddSendStream( |
621 cricket::StreamParams::CreateLegacy(999))); | 624 cricket::StreamParams::CreateLegacy(999))); |
622 channel_->SetSource(999u, video_capturer_.get()); | 625 EXPECT_TRUE( |
| 626 channel_->SetVideoSend(999u, true, nullptr, video_capturer_.get())); |
623 EXPECT_TRUE(SetSend(true)); | 627 EXPECT_TRUE(SetSend(true)); |
624 EXPECT_TRUE(WaitAndSendFrame(0)); | 628 EXPECT_TRUE(WaitAndSendFrame(0)); |
625 EXPECT_TRUE_WAIT(NumRtpPackets() > 0, kTimeout); | 629 EXPECT_TRUE_WAIT(NumRtpPackets() > 0, kTimeout); |
626 uint32_t ssrc = 0; | 630 uint32_t ssrc = 0; |
627 std::unique_ptr<const rtc::CopyOnWriteBuffer> p(GetRtpPacket(0)); | 631 std::unique_ptr<const rtc::CopyOnWriteBuffer> p(GetRtpPacket(0)); |
628 ParseRtpPacket(p.get(), NULL, NULL, NULL, NULL, &ssrc, NULL); | 632 ParseRtpPacket(p.get(), NULL, NULL, NULL, NULL, &ssrc, NULL); |
629 EXPECT_EQ(999u, ssrc); | 633 EXPECT_EQ(999u, ssrc); |
630 // Packets are being paced out, so these can mismatch between the first and | 634 // Packets are being paced out, so these can mismatch between the first and |
631 // second call to NumRtpPackets until pending packets are paced out. | 635 // second call to NumRtpPackets until pending packets are paced out. |
632 EXPECT_EQ_WAIT(NumRtpPackets(), NumRtpPackets(ssrc), kTimeout); | 636 EXPECT_EQ_WAIT(NumRtpPackets(), NumRtpPackets(ssrc), kTimeout); |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
678 p(GetRtpPacket(static_cast<int>(last_packet))); | 682 p(GetRtpPacket(static_cast<int>(last_packet))); |
679 ParseRtpPacket(p.get(), NULL, NULL, NULL, NULL, &ssrc, NULL); | 683 ParseRtpPacket(p.get(), NULL, NULL, NULL, NULL, &ssrc, NULL); |
680 EXPECT_EQ(kSsrc, ssrc); | 684 EXPECT_EQ(kSsrc, ssrc); |
681 | 685 |
682 // Remove the send stream that was added during Setup. | 686 // Remove the send stream that was added during Setup. |
683 EXPECT_TRUE(channel_->RemoveSendStream(kSsrc)); | 687 EXPECT_TRUE(channel_->RemoveSendStream(kSsrc)); |
684 int rtp_packets = NumRtpPackets(); | 688 int rtp_packets = NumRtpPackets(); |
685 | 689 |
686 EXPECT_TRUE(channel_->AddSendStream( | 690 EXPECT_TRUE(channel_->AddSendStream( |
687 cricket::StreamParams::CreateLegacy(789u))); | 691 cricket::StreamParams::CreateLegacy(789u))); |
688 channel_->SetSource(789u, video_capturer_.get()); | 692 EXPECT_TRUE( |
| 693 channel_->SetVideoSend(789u, true, nullptr, video_capturer_.get())); |
689 EXPECT_EQ(rtp_packets, NumRtpPackets()); | 694 EXPECT_EQ(rtp_packets, NumRtpPackets()); |
690 // Wait 30ms to guarantee the engine does not drop the frame. | 695 // Wait 30ms to guarantee the engine does not drop the frame. |
691 EXPECT_TRUE(WaitAndSendFrame(30)); | 696 EXPECT_TRUE(WaitAndSendFrame(30)); |
692 EXPECT_TRUE_WAIT(NumRtpPackets() > rtp_packets, kTimeout); | 697 EXPECT_TRUE_WAIT(NumRtpPackets() > rtp_packets, kTimeout); |
693 | 698 |
694 last_packet = NumRtpPackets() - 1; | 699 last_packet = NumRtpPackets() - 1; |
695 p.reset(GetRtpPacket(static_cast<int>(last_packet))); | 700 p.reset(GetRtpPacket(static_cast<int>(last_packet))); |
696 ParseRtpPacket(p.get(), NULL, NULL, NULL, NULL, &ssrc, NULL); | 701 ParseRtpPacket(p.get(), NULL, NULL, NULL, NULL, &ssrc, NULL); |
697 EXPECT_EQ(789u, ssrc); | 702 EXPECT_EQ(789u, ssrc); |
698 } | 703 } |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
747 EXPECT_TRUE(SendFrame()); | 752 EXPECT_TRUE(SendFrame()); |
748 EXPECT_FRAME_WAIT(1, codec.width, codec.height, kTimeout); | 753 EXPECT_FRAME_WAIT(1, codec.width, codec.height, kTimeout); |
749 std::unique_ptr<cricket::FakeVideoCapturer> capturer( | 754 std::unique_ptr<cricket::FakeVideoCapturer> capturer( |
750 CreateFakeVideoCapturer()); | 755 CreateFakeVideoCapturer()); |
751 | 756 |
752 // TODO(nisse): This testcase fails if we don't configure | 757 // TODO(nisse): This testcase fails if we don't configure |
753 // screencast. It's unclear why, I see nothing obvious in this | 758 // screencast. It's unclear why, I see nothing obvious in this |
754 // test which is related to screencast logic. | 759 // test which is related to screencast logic. |
755 cricket::VideoOptions video_options; | 760 cricket::VideoOptions video_options; |
756 video_options.is_screencast = rtc::Optional<bool>(true); | 761 video_options.is_screencast = rtc::Optional<bool>(true); |
757 channel_->SetVideoSend(kSsrc, true, &video_options); | 762 channel_->SetVideoSend(kSsrc, true, &video_options, nullptr); |
758 | 763 |
759 cricket::VideoFormat format(480, 360, | 764 cricket::VideoFormat format(480, 360, |
760 cricket::VideoFormat::FpsToInterval(30), | 765 cricket::VideoFormat::FpsToInterval(30), |
761 cricket::FOURCC_I420); | 766 cricket::FOURCC_I420); |
762 EXPECT_EQ(cricket::CS_RUNNING, capturer->Start(format)); | 767 EXPECT_EQ(cricket::CS_RUNNING, capturer->Start(format)); |
763 // All capturers start generating frames with the same timestamp. ViE does | 768 // All capturers start generating frames with the same timestamp. ViE does |
764 // not allow the same timestamp to be used. Capture one frame before | 769 // not allow the same timestamp to be used. Capture one frame before |
765 // associating the capturer with the channel. | 770 // associating the capturer with the channel. |
766 EXPECT_TRUE(capturer->CaptureCustomFrame(format.width, format.height, | 771 EXPECT_TRUE(capturer->CaptureCustomFrame(format.width, format.height, |
767 cricket::FOURCC_I420)); | 772 cricket::FOURCC_I420)); |
768 | 773 |
769 int captured_frames = 1; | 774 int captured_frames = 1; |
770 for (int iterations = 0; iterations < 2; ++iterations) { | 775 for (int iterations = 0; iterations < 2; ++iterations) { |
771 channel_->SetSource(kSsrc, capturer.get()); | 776 EXPECT_TRUE(channel_->SetVideoSend(kSsrc, true, nullptr, capturer.get())); |
772 rtc::Thread::Current()->ProcessMessages(time_between_send); | 777 rtc::Thread::Current()->ProcessMessages(time_between_send); |
773 EXPECT_TRUE(capturer->CaptureCustomFrame(format.width, format.height, | 778 EXPECT_TRUE(capturer->CaptureCustomFrame(format.width, format.height, |
774 cricket::FOURCC_I420)); | 779 cricket::FOURCC_I420)); |
775 ++captured_frames; | 780 ++captured_frames; |
776 // Wait until frame of right size is captured. | 781 // Wait until frame of right size is captured. |
777 EXPECT_TRUE_WAIT(renderer_.num_rendered_frames() >= captured_frames && | 782 EXPECT_TRUE_WAIT(renderer_.num_rendered_frames() >= captured_frames && |
778 format.width == renderer_.width() && | 783 format.width == renderer_.width() && |
779 format.height == renderer_.height() && | 784 format.height == renderer_.height() && |
780 !renderer_.black_frame(), kTimeout); | 785 !renderer_.black_frame(), kTimeout); |
781 EXPECT_GE(renderer_.num_rendered_frames(), captured_frames); | 786 EXPECT_GE(renderer_.num_rendered_frames(), captured_frames); |
782 EXPECT_EQ(format.width, renderer_.width()); | 787 EXPECT_EQ(format.width, renderer_.width()); |
783 EXPECT_EQ(format.height, renderer_.height()); | 788 EXPECT_EQ(format.height, renderer_.height()); |
784 captured_frames = renderer_.num_rendered_frames() + 1; | 789 captured_frames = renderer_.num_rendered_frames() + 1; |
785 EXPECT_FALSE(renderer_.black_frame()); | 790 EXPECT_FALSE(renderer_.black_frame()); |
786 channel_->SetSource(kSsrc, NULL); | 791 EXPECT_TRUE(channel_->SetVideoSend(kSsrc, true, nullptr, nullptr)); |
787 // Make sure a black frame is generated within the specified timeout. | 792 // Make sure a black frame is generated within the specified timeout. |
788 // The black frame should be the resolution of the previous frame to | 793 // The black frame should be the resolution of the previous frame to |
789 // prevent expensive encoder reconfigurations. | 794 // prevent expensive encoder reconfigurations. |
790 EXPECT_TRUE_WAIT(renderer_.num_rendered_frames() >= captured_frames && | 795 EXPECT_TRUE_WAIT(renderer_.num_rendered_frames() >= captured_frames && |
791 format.width == renderer_.width() && | 796 format.width == renderer_.width() && |
792 format.height == renderer_.height() && | 797 format.height == renderer_.height() && |
793 renderer_.black_frame(), kTimeout); | 798 renderer_.black_frame(), kTimeout); |
794 EXPECT_GE(renderer_.num_rendered_frames(), captured_frames); | 799 EXPECT_GE(renderer_.num_rendered_frames(), captured_frames); |
795 EXPECT_EQ(format.width, renderer_.width()); | 800 EXPECT_EQ(format.width, renderer_.width()); |
796 EXPECT_EQ(format.height, renderer_.height()); | 801 EXPECT_EQ(format.height, renderer_.height()); |
797 EXPECT_TRUE(renderer_.black_frame()); | 802 EXPECT_TRUE(renderer_.black_frame()); |
798 | 803 |
799 // The black frame has the same timestamp as the next frame since it's | 804 // The black frame has the same timestamp as the next frame since it's |
800 // timestamp is set to the last frame's timestamp + interval. WebRTC will | 805 // timestamp is set to the last frame's timestamp + interval. WebRTC will |
801 // not render a frame with the same timestamp so capture another frame | 806 // not render a frame with the same timestamp so capture another frame |
802 // with the frame capturer to increment the next frame's timestamp. | 807 // with the frame capturer to increment the next frame's timestamp. |
803 EXPECT_TRUE(capturer->CaptureCustomFrame(format.width, format.height, | 808 EXPECT_TRUE(capturer->CaptureCustomFrame(format.width, format.height, |
804 cricket::FOURCC_I420)); | 809 cricket::FOURCC_I420)); |
805 } | 810 } |
806 } | 811 } |
807 | 812 |
808 // Tests that if RemoveCapturer is called without a capturer ever being | 813 // Tests that if SetVideoSend is called with a NULL capturer after the |
809 // added, the plugin shouldn't crash (and no black frame should be sent). | 814 // capturer was already removed, the application doesn't crash (and no black |
| 815 // frame is sent). |
810 void RemoveCapturerWithoutAdd() { | 816 void RemoveCapturerWithoutAdd() { |
811 EXPECT_TRUE(SetOneCodec(DefaultCodec())); | 817 EXPECT_TRUE(SetOneCodec(DefaultCodec())); |
812 EXPECT_TRUE(SetSend(true)); | 818 EXPECT_TRUE(SetSend(true)); |
813 EXPECT_TRUE(channel_->SetSink(kDefaultReceiveSsrc, &renderer_)); | 819 EXPECT_TRUE(channel_->SetSink(kDefaultReceiveSsrc, &renderer_)); |
814 EXPECT_EQ(0, renderer_.num_rendered_frames()); | 820 EXPECT_EQ(0, renderer_.num_rendered_frames()); |
815 EXPECT_TRUE(SendFrame()); | 821 EXPECT_TRUE(SendFrame()); |
816 EXPECT_FRAME_WAIT(1, 640, 400, kTimeout); | 822 EXPECT_FRAME_WAIT(1, 640, 400, kTimeout); |
817 // Wait for one frame so they don't get dropped because we send frames too | 823 // Wait for one frame so they don't get dropped because we send frames too |
818 // tightly. | 824 // tightly. |
819 rtc::Thread::Current()->ProcessMessages(30); | 825 rtc::Thread::Current()->ProcessMessages(30); |
820 // Remove the capturer. | 826 // Remove the capturer. |
821 channel_->SetSource(kSsrc, NULL); | 827 EXPECT_TRUE(channel_->SetVideoSend(kSsrc, true, nullptr, nullptr)); |
822 // Wait for one black frame for removing the capturer. | 828 // Wait for one black frame for removing the capturer. |
823 EXPECT_FRAME_WAIT(2, 640, 400, kTimeout); | 829 EXPECT_FRAME_WAIT(2, 640, 400, kTimeout); |
824 | 830 |
825 // No capturer was added, so this SetSource should be a NOP. | 831 // No capturer was added, so this SetVideoSend shouldn't do anything. |
826 channel_->SetSource(kSsrc, NULL); | 832 EXPECT_TRUE(channel_->SetVideoSend(kSsrc, true, nullptr, nullptr)); |
827 rtc::Thread::Current()->ProcessMessages(300); | 833 rtc::Thread::Current()->ProcessMessages(300); |
828 // Verify no more frames were sent. | 834 // Verify no more frames were sent. |
829 EXPECT_EQ(2, renderer_.num_rendered_frames()); | 835 EXPECT_EQ(2, renderer_.num_rendered_frames()); |
830 } | 836 } |
831 | 837 |
832 // Tests that we can add and remove capturer as unique sources. | 838 // Tests that we can add and remove capturer as unique sources. |
833 void AddRemoveCapturerMultipleSources() { | 839 void AddRemoveCapturerMultipleSources() { |
834 // WebRTC implementation will drop frames if pushed to quickly. Wait the | 840 // WebRTC implementation will drop frames if pushed to quickly. Wait the |
835 // interval time to avoid that. | 841 // interval time to avoid that. |
836 // WebRTC implementation will drop frames if pushed to quickly. Wait the | 842 // WebRTC implementation will drop frames if pushed to quickly. Wait the |
(...skipping 21 matching lines...) Expand all Loading... |
858 EXPECT_TRUE(channel_->AddRecvStream( | 864 EXPECT_TRUE(channel_->AddRecvStream( |
859 cricket::StreamParams::CreateLegacy(2))); | 865 cricket::StreamParams::CreateLegacy(2))); |
860 EXPECT_TRUE(channel_->SetSink(2, &renderer2)); | 866 EXPECT_TRUE(channel_->SetSink(2, &renderer2)); |
861 EXPECT_TRUE(channel_->AddSendStream( | 867 EXPECT_TRUE(channel_->AddSendStream( |
862 cricket::StreamParams::CreateLegacy(2))); | 868 cricket::StreamParams::CreateLegacy(2))); |
863 std::unique_ptr<cricket::FakeVideoCapturer> capturer2( | 869 std::unique_ptr<cricket::FakeVideoCapturer> capturer2( |
864 CreateFakeVideoCapturer()); | 870 CreateFakeVideoCapturer()); |
865 EXPECT_EQ(cricket::CS_RUNNING, capturer2->Start(capture_format)); | 871 EXPECT_EQ(cricket::CS_RUNNING, capturer2->Start(capture_format)); |
866 // State for all the streams. | 872 // State for all the streams. |
867 EXPECT_TRUE(SetOneCodec(DefaultCodec())); | 873 EXPECT_TRUE(SetOneCodec(DefaultCodec())); |
868 // A limitation in the lmi implementation requires that SetSource() is | 874 // A limitation in the lmi implementation requires that SetVideoSend() is |
869 // called after SetOneCodec(). | 875 // called after SetOneCodec(). |
870 // TODO(hellner): this seems like an unnecessary constraint, fix it. | 876 // TODO(hellner): this seems like an unnecessary constraint, fix it. |
871 channel_->SetSource(1, capturer1.get()); | 877 EXPECT_TRUE(channel_->SetVideoSend(1, true, nullptr, capturer1.get())); |
872 channel_->SetSource(2, capturer2.get()); | 878 EXPECT_TRUE(channel_->SetVideoSend(2, true, nullptr, capturer2.get())); |
873 EXPECT_TRUE(SetSend(true)); | 879 EXPECT_TRUE(SetSend(true)); |
874 // Test capturer associated with engine. | 880 // Test capturer associated with engine. |
875 const int kTestWidth = 160; | 881 const int kTestWidth = 160; |
876 const int kTestHeight = 120; | 882 const int kTestHeight = 120; |
877 EXPECT_TRUE(capturer1->CaptureCustomFrame( | 883 EXPECT_TRUE(capturer1->CaptureCustomFrame( |
878 kTestWidth, kTestHeight, cricket::FOURCC_I420)); | 884 kTestWidth, kTestHeight, cricket::FOURCC_I420)); |
879 EXPECT_FRAME_ON_RENDERER_WAIT( | 885 EXPECT_FRAME_ON_RENDERER_WAIT( |
880 renderer1, 1, kTestWidth, kTestHeight, kTimeout); | 886 renderer1, 1, kTestWidth, kTestHeight, kTimeout); |
881 // Capture a frame with additional capturer2, frames should be received | 887 // Capture a frame with additional capturer2, frames should be received |
882 EXPECT_TRUE(capturer2->CaptureCustomFrame( | 888 EXPECT_TRUE(capturer2->CaptureCustomFrame( |
883 kTestWidth, kTestHeight, cricket::FOURCC_I420)); | 889 kTestWidth, kTestHeight, cricket::FOURCC_I420)); |
884 EXPECT_FRAME_ON_RENDERER_WAIT( | 890 EXPECT_FRAME_ON_RENDERER_WAIT( |
885 renderer2, 1, kTestWidth, kTestHeight, kTimeout); | 891 renderer2, 1, kTestWidth, kTestHeight, kTimeout); |
886 // Successfully remove the capturer. | 892 // Successfully remove the capturer. |
887 channel_->SetSource(kSsrc, NULL); | 893 EXPECT_TRUE(channel_->SetVideoSend(kSsrc, true, nullptr, nullptr)); |
888 // Fail to re-remove the capturer. | |
889 channel_->SetSource(kSsrc, NULL); | |
890 // The capturers must be unregistered here as it runs out of it's scope | 894 // The capturers must be unregistered here as it runs out of it's scope |
891 // next. | 895 // next. |
892 channel_->SetSource(1, NULL); | 896 EXPECT_TRUE(channel_->SetVideoSend(1, true, nullptr, nullptr)); |
893 channel_->SetSource(2, NULL); | 897 EXPECT_TRUE(channel_->SetVideoSend(2, true, nullptr, nullptr)); |
894 } | 898 } |
895 | 899 |
896 void HighAspectHighHeightCapturer() { | 900 void HighAspectHighHeightCapturer() { |
897 const int kWidth = 80; | 901 const int kWidth = 80; |
898 const int kHeight = 10000; | 902 const int kHeight = 10000; |
899 const int kScaledWidth = 20; | 903 const int kScaledWidth = 20; |
900 const int kScaledHeight = 2500; | 904 const int kScaledHeight = 2500; |
901 | 905 |
902 cricket::VideoCodec codec(DefaultCodec()); | 906 cricket::VideoCodec codec(DefaultCodec()); |
903 EXPECT_TRUE(SetOneCodec(codec)); | 907 EXPECT_TRUE(SetOneCodec(codec)); |
(...skipping 12 matching lines...) Expand all Loading... |
916 // Registering an external capturer is currently the same as screen casting | 920 // Registering an external capturer is currently the same as screen casting |
917 // (update the test when this changes). | 921 // (update the test when this changes). |
918 std::unique_ptr<cricket::FakeVideoCapturer> capturer( | 922 std::unique_ptr<cricket::FakeVideoCapturer> capturer( |
919 CreateFakeVideoCapturer()); | 923 CreateFakeVideoCapturer()); |
920 const std::vector<cricket::VideoFormat>* formats = | 924 const std::vector<cricket::VideoFormat>* formats = |
921 capturer->GetSupportedFormats(); | 925 capturer->GetSupportedFormats(); |
922 cricket::VideoFormat capture_format = (*formats)[0]; | 926 cricket::VideoFormat capture_format = (*formats)[0]; |
923 EXPECT_EQ(cricket::CS_RUNNING, capturer->Start(capture_format)); | 927 EXPECT_EQ(cricket::CS_RUNNING, capturer->Start(capture_format)); |
924 // Capture frame to not get same frame timestamps as previous capturer. | 928 // Capture frame to not get same frame timestamps as previous capturer. |
925 capturer->CaptureFrame(); | 929 capturer->CaptureFrame(); |
926 channel_->SetSource(kSsrc, capturer.get()); | 930 EXPECT_TRUE(channel_->SetVideoSend(kSsrc, true, nullptr, capturer.get())); |
927 EXPECT_TRUE(rtc::Thread::Current()->ProcessMessages(30)); | 931 EXPECT_TRUE(rtc::Thread::Current()->ProcessMessages(30)); |
928 EXPECT_TRUE(capturer->CaptureCustomFrame(kWidth, kHeight, | 932 EXPECT_TRUE(capturer->CaptureCustomFrame(kWidth, kHeight, |
929 cricket::FOURCC_ARGB)); | 933 cricket::FOURCC_ARGB)); |
930 EXPECT_GT_FRAME_ON_RENDERER_WAIT( | 934 EXPECT_GT_FRAME_ON_RENDERER_WAIT( |
931 renderer, 2, kScaledWidth, kScaledHeight, kTimeout); | 935 renderer, 2, kScaledWidth, kScaledHeight, kTimeout); |
932 channel_->SetSource(kSsrc, NULL); | 936 EXPECT_TRUE(channel_->SetVideoSend(kSsrc, true, nullptr, nullptr)); |
933 } | 937 } |
934 | 938 |
935 // Tests that we can adapt video resolution with 16:10 aspect ratio properly. | 939 // Tests that we can adapt video resolution with 16:10 aspect ratio properly. |
936 void AdaptResolution16x10() { | 940 void AdaptResolution16x10() { |
937 EXPECT_TRUE(channel_->SetSink(kDefaultReceiveSsrc, &renderer_)); | 941 EXPECT_TRUE(channel_->SetSink(kDefaultReceiveSsrc, &renderer_)); |
938 cricket::VideoCodec codec(DefaultCodec()); | 942 cricket::VideoCodec codec(DefaultCodec()); |
939 codec.width = 640; | 943 codec.width = 640; |
940 codec.height = 400; | 944 codec.height = 400; |
941 SendAndReceive(codec); | 945 SendAndReceive(codec); |
942 codec.width /= 2; | 946 codec.width /= 2; |
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1077 std::unique_ptr<C> channel_; | 1081 std::unique_ptr<C> channel_; |
1078 cricket::FakeNetworkInterface network_interface_; | 1082 cricket::FakeNetworkInterface network_interface_; |
1079 cricket::FakeVideoRenderer renderer_; | 1083 cricket::FakeVideoRenderer renderer_; |
1080 cricket::VideoMediaChannel::Error media_error_; | 1084 cricket::VideoMediaChannel::Error media_error_; |
1081 | 1085 |
1082 // Used by test cases where 2 streams are run on the same channel. | 1086 // Used by test cases where 2 streams are run on the same channel. |
1083 cricket::FakeVideoRenderer renderer2_; | 1087 cricket::FakeVideoRenderer renderer2_; |
1084 }; | 1088 }; |
1085 | 1089 |
1086 #endif // WEBRTC_MEDIA_BASE_VIDEOENGINE_UNITTEST_H_ NOLINT | 1090 #endif // WEBRTC_MEDIA_BASE_VIDEOENGINE_UNITTEST_H_ NOLINT |
OLD | NEW |