OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2013 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 #include <algorithm> | 10 #include <algorithm> |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
115 }; | 115 }; |
116 | 116 |
117 void DecodesRetransmittedFrame(bool enable_rtx, bool enable_red); | 117 void DecodesRetransmittedFrame(bool enable_rtx, bool enable_red); |
118 void ReceivesPliAndRecovers(int rtp_history_ms); | 118 void ReceivesPliAndRecovers(int rtp_history_ms); |
119 void RespectsRtcpMode(RtcpMode rtcp_mode); | 119 void RespectsRtcpMode(RtcpMode rtcp_mode); |
120 void TestXrReceiverReferenceTimeReport(bool enable_rrtr); | 120 void TestXrReceiverReferenceTimeReport(bool enable_rrtr); |
121 void TestSendsSetSsrcs(size_t num_ssrcs, bool send_single_ssrc_first); | 121 void TestSendsSetSsrcs(size_t num_ssrcs, bool send_single_ssrc_first); |
122 void TestRtpStatePreservation(bool use_rtx, bool provoke_rtcpsr_before_rtp); | 122 void TestRtpStatePreservation(bool use_rtx, bool provoke_rtcpsr_before_rtp); |
123 void VerifyHistogramStats(bool use_rtx, bool use_red, bool screenshare); | 123 void VerifyHistogramStats(bool use_rtx, bool use_red, bool screenshare); |
124 void VerifyNewVideoSendStreamsRespectNetworkState( | 124 void VerifyNewVideoSendStreamsRespectNetworkState( |
125 MediaType network_to_bring_down, | 125 MediaType network_to_bring_up, |
126 VideoEncoder* encoder, | 126 VideoEncoder* encoder, |
127 Transport* transport); | 127 Transport* transport); |
128 void VerifyNewVideoReceiveStreamsRespectNetworkState( | 128 void VerifyNewVideoReceiveStreamsRespectNetworkState( |
129 MediaType network_to_bring_down, | 129 MediaType network_to_bring_up, |
130 Transport* transport); | 130 Transport* transport); |
131 }; | 131 }; |
132 | 132 |
133 TEST_F(EndToEndTest, ReceiverCanBeStartedTwice) { | 133 TEST_F(EndToEndTest, ReceiverCanBeStartedTwice) { |
134 CreateCalls(Call::Config(&event_log_), Call::Config(&event_log_)); | 134 CreateCalls(Call::Config(&event_log_), Call::Config(&event_log_)); |
135 | 135 |
136 test::NullTransport transport; | 136 test::NullTransport transport; |
137 CreateSendConfig(1, 0, 0, &transport); | 137 CreateSendConfig(1, 0, 0, &transport); |
138 CreateMatchingReceiveConfigs(&transport); | 138 CreateMatchingReceiveConfigs(&transport); |
139 | 139 |
(...skipping 3524 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3664 break; | 3664 break; |
3665 } | 3665 } |
3666 SleepMs(10); | 3666 SleepMs(10); |
3667 } | 3667 } |
3668 | 3668 |
3669 Stop(); | 3669 Stop(); |
3670 DestroyStreams(); | 3670 DestroyStreams(); |
3671 } | 3671 } |
3672 | 3672 |
3673 void EndToEndTest::VerifyNewVideoSendStreamsRespectNetworkState( | 3673 void EndToEndTest::VerifyNewVideoSendStreamsRespectNetworkState( |
3674 MediaType network_to_bring_down, | 3674 MediaType network_to_bring_up, |
3675 VideoEncoder* encoder, | 3675 VideoEncoder* encoder, |
3676 Transport* transport) { | 3676 Transport* transport) { |
3677 CreateSenderCall(Call::Config(&event_log_)); | 3677 CreateSenderCall(Call::Config(&event_log_)); |
3678 sender_call_->SignalChannelNetworkState(network_to_bring_down, kNetworkDown); | 3678 sender_call_->SignalChannelNetworkState(network_to_bring_up, kNetworkUp); |
3679 | 3679 |
3680 CreateSendConfig(1, 0, 0, transport); | 3680 CreateSendConfig(1, 0, 0, transport); |
3681 video_send_config_.encoder_settings.encoder = encoder; | 3681 video_send_config_.encoder_settings.encoder = encoder; |
3682 CreateVideoStreams(); | 3682 CreateVideoStreams(); |
3683 CreateFrameGeneratorCapturer(kDefaultFramerate, kDefaultWidth, | 3683 CreateFrameGeneratorCapturer(kDefaultFramerate, kDefaultWidth, |
3684 kDefaultHeight); | 3684 kDefaultHeight); |
3685 | 3685 |
3686 Start(); | 3686 Start(); |
3687 SleepMs(kSilenceTimeoutMs); | 3687 SleepMs(kSilenceTimeoutMs); |
3688 Stop(); | 3688 Stop(); |
3689 | 3689 |
3690 DestroyStreams(); | 3690 DestroyStreams(); |
3691 } | 3691 } |
3692 | 3692 |
3693 void EndToEndTest::VerifyNewVideoReceiveStreamsRespectNetworkState( | 3693 void EndToEndTest::VerifyNewVideoReceiveStreamsRespectNetworkState( |
3694 MediaType network_to_bring_down, | 3694 MediaType network_to_bring_up, |
3695 Transport* transport) { | 3695 Transport* transport) { |
3696 Call::Config config(&event_log_); | 3696 Call::Config config(&event_log_); |
3697 CreateCalls(config, config); | 3697 CreateCalls(config, config); |
3698 receiver_call_->SignalChannelNetworkState(network_to_bring_down, | 3698 receiver_call_->SignalChannelNetworkState(network_to_bring_up, kNetworkUp); |
3699 kNetworkDown); | |
3700 | 3699 |
3701 test::DirectTransport sender_transport(sender_call_.get()); | 3700 test::DirectTransport sender_transport(sender_call_.get()); |
3702 sender_transport.SetReceiver(receiver_call_->Receiver()); | 3701 sender_transport.SetReceiver(receiver_call_->Receiver()); |
3703 CreateSendConfig(1, 0, 0, &sender_transport); | 3702 CreateSendConfig(1, 0, 0, &sender_transport); |
3704 CreateMatchingReceiveConfigs(transport); | 3703 CreateMatchingReceiveConfigs(transport); |
3705 CreateVideoStreams(); | 3704 CreateVideoStreams(); |
3706 CreateFrameGeneratorCapturer(kDefaultFramerate, kDefaultWidth, | 3705 CreateFrameGeneratorCapturer(kDefaultFramerate, kDefaultWidth, |
3707 kDefaultHeight); | 3706 kDefaultHeight); |
3708 | 3707 |
3709 Start(); | 3708 Start(); |
(...skipping 21 matching lines...) Expand all Loading... |
3731 const std::vector<FrameType>* frame_types) override { | 3730 const std::vector<FrameType>* frame_types) override { |
3732 ADD_FAILURE() << "Unexpected frame encode."; | 3731 ADD_FAILURE() << "Unexpected frame encode."; |
3733 return test::FakeEncoder::Encode(input_image, codec_specific_info, | 3732 return test::FakeEncoder::Encode(input_image, codec_specific_info, |
3734 frame_types); | 3733 frame_types); |
3735 } | 3734 } |
3736 }; | 3735 }; |
3737 | 3736 |
3738 UnusedEncoder unused_encoder; | 3737 UnusedEncoder unused_encoder; |
3739 UnusedTransport unused_transport; | 3738 UnusedTransport unused_transport; |
3740 VerifyNewVideoSendStreamsRespectNetworkState( | 3739 VerifyNewVideoSendStreamsRespectNetworkState( |
3741 MediaType::VIDEO, &unused_encoder, &unused_transport); | 3740 MediaType::AUDIO, &unused_encoder, &unused_transport); |
3742 } | 3741 } |
3743 | 3742 |
3744 TEST_F(EndToEndTest, NewVideoSendStreamsIgnoreAudioNetworkDown) { | 3743 TEST_F(EndToEndTest, NewVideoSendStreamsIgnoreAudioNetworkDown) { |
3745 class RequiredEncoder : public test::FakeEncoder { | 3744 class RequiredEncoder : public test::FakeEncoder { |
3746 public: | 3745 public: |
3747 RequiredEncoder() | 3746 RequiredEncoder() |
3748 : FakeEncoder(Clock::GetRealTimeClock()), encoded_frame_(false) {} | 3747 : FakeEncoder(Clock::GetRealTimeClock()), encoded_frame_(false) {} |
3749 ~RequiredEncoder() { | 3748 ~RequiredEncoder() { |
3750 if (!encoded_frame_) { | 3749 if (!encoded_frame_) { |
3751 ADD_FAILURE() << "Didn't encode an expected frame"; | 3750 ADD_FAILURE() << "Didn't encode an expected frame"; |
3752 } | 3751 } |
3753 } | 3752 } |
3754 int32_t Encode(const VideoFrame& input_image, | 3753 int32_t Encode(const VideoFrame& input_image, |
3755 const CodecSpecificInfo* codec_specific_info, | 3754 const CodecSpecificInfo* codec_specific_info, |
3756 const std::vector<FrameType>* frame_types) override { | 3755 const std::vector<FrameType>* frame_types) override { |
3757 encoded_frame_ = true; | 3756 encoded_frame_ = true; |
3758 return test::FakeEncoder::Encode(input_image, codec_specific_info, | 3757 return test::FakeEncoder::Encode(input_image, codec_specific_info, |
3759 frame_types); | 3758 frame_types); |
3760 } | 3759 } |
3761 | 3760 |
3762 private: | 3761 private: |
3763 bool encoded_frame_; | 3762 bool encoded_frame_; |
3764 }; | 3763 }; |
3765 | 3764 |
3766 RequiredTransport required_transport(true /*rtp*/, false /*rtcp*/); | 3765 RequiredTransport required_transport(true /*rtp*/, false /*rtcp*/); |
3767 RequiredEncoder required_encoder; | 3766 RequiredEncoder required_encoder; |
3768 VerifyNewVideoSendStreamsRespectNetworkState( | 3767 VerifyNewVideoSendStreamsRespectNetworkState( |
3769 MediaType::AUDIO, &required_encoder, &required_transport); | 3768 MediaType::VIDEO, &required_encoder, &required_transport); |
3770 } | 3769 } |
3771 | 3770 |
3772 TEST_F(EndToEndTest, NewVideoReceiveStreamsRespectVideoNetworkDown) { | 3771 TEST_F(EndToEndTest, NewVideoReceiveStreamsRespectVideoNetworkDown) { |
3773 UnusedTransport transport; | 3772 UnusedTransport transport; |
3774 VerifyNewVideoReceiveStreamsRespectNetworkState(MediaType::VIDEO, &transport); | 3773 VerifyNewVideoReceiveStreamsRespectNetworkState(MediaType::AUDIO, &transport); |
3775 } | 3774 } |
3776 | 3775 |
3777 TEST_F(EndToEndTest, NewVideoReceiveStreamsIgnoreAudioNetworkDown) { | 3776 TEST_F(EndToEndTest, NewVideoReceiveStreamsIgnoreAudioNetworkDown) { |
3778 RequiredTransport transport(false /*rtp*/, true /*rtcp*/); | 3777 RequiredTransport transport(false /*rtp*/, true /*rtcp*/); |
3779 VerifyNewVideoReceiveStreamsRespectNetworkState(MediaType::AUDIO, &transport); | 3778 VerifyNewVideoReceiveStreamsRespectNetworkState(MediaType::VIDEO, &transport); |
3780 } | 3779 } |
3781 | 3780 |
3782 void VerifyEmptyNackConfig(const NackConfig& config) { | 3781 void VerifyEmptyNackConfig(const NackConfig& config) { |
3783 EXPECT_EQ(0, config.rtp_history_ms) | 3782 EXPECT_EQ(0, config.rtp_history_ms) |
3784 << "Enabling NACK requires rtcp-fb: nack negotiation."; | 3783 << "Enabling NACK requires rtcp-fb: nack negotiation."; |
3785 } | 3784 } |
3786 | 3785 |
3787 void VerifyEmptyUlpfecConfig(const UlpfecConfig& config) { | 3786 void VerifyEmptyUlpfecConfig(const UlpfecConfig& config) { |
3788 EXPECT_EQ(-1, config.ulpfec_payload_type) | 3787 EXPECT_EQ(-1, config.ulpfec_payload_type) |
3789 << "Enabling ULPFEC requires rtpmap: ulpfec negotiation."; | 3788 << "Enabling ULPFEC requires rtpmap: ulpfec negotiation."; |
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4004 std::unique_ptr<VideoEncoder> encoder_; | 4003 std::unique_ptr<VideoEncoder> encoder_; |
4005 std::unique_ptr<VideoDecoder> decoder_; | 4004 std::unique_ptr<VideoDecoder> decoder_; |
4006 rtc::CriticalSection crit_; | 4005 rtc::CriticalSection crit_; |
4007 int recorded_frames_ GUARDED_BY(crit_); | 4006 int recorded_frames_ GUARDED_BY(crit_); |
4008 } test(this); | 4007 } test(this); |
4009 | 4008 |
4010 RunBaseTest(&test); | 4009 RunBaseTest(&test); |
4011 } | 4010 } |
4012 | 4011 |
4013 } // namespace webrtc | 4012 } // namespace webrtc |
OLD | NEW |