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 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
133 bool need_rtp_; | 133 bool need_rtp_; |
134 bool need_rtcp_; | 134 bool need_rtcp_; |
135 rtc::CriticalSection crit_; | 135 rtc::CriticalSection crit_; |
136 }; | 136 }; |
137 | 137 |
138 void DecodesRetransmittedFrame(bool enable_rtx, bool enable_red); | 138 void DecodesRetransmittedFrame(bool enable_rtx, bool enable_red); |
139 void ReceivesPliAndRecovers(int rtp_history_ms); | 139 void ReceivesPliAndRecovers(int rtp_history_ms); |
140 void RespectsRtcpMode(RtcpMode rtcp_mode); | 140 void RespectsRtcpMode(RtcpMode rtcp_mode); |
141 void TestSendsSetSsrcs(size_t num_ssrcs, bool send_single_ssrc_first); | 141 void TestSendsSetSsrcs(size_t num_ssrcs, bool send_single_ssrc_first); |
142 void TestRtpStatePreservation(bool use_rtx, bool provoke_rtcpsr_before_rtp); | 142 void TestRtpStatePreservation(bool use_rtx, bool provoke_rtcpsr_before_rtp); |
143 void VerifyHistogramStats(bool use_rtx, bool use_red, bool screenshare); | 143 void VerifyHistogramStats(bool use_rtx, bool use_fec, bool screenshare); |
144 void VerifyNewVideoSendStreamsRespectNetworkState( | 144 void VerifyNewVideoSendStreamsRespectNetworkState( |
145 MediaType network_to_bring_up, | 145 MediaType network_to_bring_up, |
146 VideoEncoder* encoder, | 146 VideoEncoder* encoder, |
147 Transport* transport); | 147 Transport* transport); |
148 void VerifyNewVideoReceiveStreamsRespectNetworkState( | 148 void VerifyNewVideoReceiveStreamsRespectNetworkState( |
149 MediaType network_to_bring_up, | 149 MediaType network_to_bring_up, |
150 Transport* transport); | 150 Transport* transport); |
151 }; | 151 }; |
152 | 152 |
153 TEST_F(EndToEndTest, ReceiverCanBeStartedTwice) { | 153 TEST_F(EndToEndTest, ReceiverCanBeStartedTwice) { |
(...skipping 535 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
689 send_config->encoder_settings.payload_type = kVideoSendPayloadType; | 689 send_config->encoder_settings.payload_type = kVideoSendPayloadType; |
690 VideoReceiveStream::Decoder decoder = | 690 VideoReceiveStream::Decoder decoder = |
691 test::CreateMatchingDecoder(send_config->encoder_settings); | 691 test::CreateMatchingDecoder(send_config->encoder_settings); |
692 decoder_.reset(decoder.decoder); | 692 decoder_.reset(decoder.decoder); |
693 (*receive_configs)[0].decoders.clear(); | 693 (*receive_configs)[0].decoders.clear(); |
694 (*receive_configs)[0].decoders.push_back(decoder); | 694 (*receive_configs)[0].decoders.push_back(decoder); |
695 | 695 |
696 // Enable ULPFEC over RED. | 696 // Enable ULPFEC over RED. |
697 send_config->rtp.ulpfec.red_payload_type = kRedPayloadType; | 697 send_config->rtp.ulpfec.red_payload_type = kRedPayloadType; |
698 send_config->rtp.ulpfec.ulpfec_payload_type = kUlpfecPayloadType; | 698 send_config->rtp.ulpfec.ulpfec_payload_type = kUlpfecPayloadType; |
699 (*receive_configs)[0].rtp.ulpfec.red_payload_type = kRedPayloadType; | 699 (*receive_configs)[0].rtp.red_payload_type = kRedPayloadType; |
700 (*receive_configs)[0].rtp.ulpfec.ulpfec_payload_type = kUlpfecPayloadType; | 700 (*receive_configs)[0].rtp.ulpfec_payload_type = kUlpfecPayloadType; |
701 | 701 |
702 (*receive_configs)[0].renderer = this; | 702 (*receive_configs)[0].renderer = this; |
703 } | 703 } |
704 | 704 |
705 void PerformTest() override { | 705 void PerformTest() override { |
706 EXPECT_TRUE(Wait()) | 706 EXPECT_TRUE(Wait()) |
707 << "Timed out waiting for dropped frames to be rendered."; | 707 << "Timed out waiting for dropped frames to be rendered."; |
708 } | 708 } |
709 | 709 |
710 rtc::CriticalSection crit_; | 710 rtc::CriticalSection crit_; |
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
846 | 846 |
847 void ModifyVideoConfigs( | 847 void ModifyVideoConfigs( |
848 VideoSendStream::Config* send_config, | 848 VideoSendStream::Config* send_config, |
849 std::vector<VideoReceiveStream::Config>* receive_configs, | 849 std::vector<VideoReceiveStream::Config>* receive_configs, |
850 VideoEncoderConfig* encoder_config) override { | 850 VideoEncoderConfig* encoder_config) override { |
851 (*receive_configs)[0].rtp.local_ssrc = kVideoLocalSsrc; | 851 (*receive_configs)[0].rtp.local_ssrc = kVideoLocalSsrc; |
852 (*receive_configs)[0].renderer = this; | 852 (*receive_configs)[0].renderer = this; |
853 | 853 |
854 if (enable_nack_) { | 854 if (enable_nack_) { |
855 send_config->rtp.nack.rtp_history_ms = test::CallTest::kNackRtpHistoryMs; | 855 send_config->rtp.nack.rtp_history_ms = test::CallTest::kNackRtpHistoryMs; |
856 send_config->rtp.ulpfec.red_rtx_payload_type = | |
857 test::CallTest::kRtxRedPayloadType; | |
858 send_config->rtp.rtx.ssrcs.push_back(test::CallTest::kSendRtxSsrcs[0]); | 856 send_config->rtp.rtx.ssrcs.push_back(test::CallTest::kSendRtxSsrcs[0]); |
859 send_config->rtp.rtx.payload_type = test::CallTest::kSendRtxPayloadType; | 857 send_config->rtp.rtx.payload_type = test::CallTest::kSendRtxPayloadType; |
860 | 858 |
861 (*receive_configs)[0].rtp.nack.rtp_history_ms = | 859 (*receive_configs)[0].rtp.nack.rtp_history_ms = |
862 test::CallTest::kNackRtpHistoryMs; | 860 test::CallTest::kNackRtpHistoryMs; |
863 (*receive_configs)[0].rtp.ulpfec.red_rtx_payload_type = | |
864 test::CallTest::kRtxRedPayloadType; | |
865 | |
866 (*receive_configs)[0].rtp.rtx_ssrc = test::CallTest::kSendRtxSsrcs[0]; | 861 (*receive_configs)[0].rtp.rtx_ssrc = test::CallTest::kSendRtxSsrcs[0]; |
867 (*receive_configs)[0] | 862 (*receive_configs)[0] |
868 .rtp | 863 .rtp |
869 .rtx_associated_payload_types[test::CallTest::kSendRtxPayloadType] = | 864 .rtx_associated_payload_types[test::CallTest::kSendRtxPayloadType] = |
870 test::CallTest::kVideoSendPayloadType; | 865 test::CallTest::kVideoSendPayloadType; |
871 } | 866 } |
872 } | 867 } |
873 | 868 |
874 void OnFrameGeneratorCapturerCreated( | 869 void OnFrameGeneratorCapturerCreated( |
875 test::FrameGeneratorCapturer* frame_generator_capturer) override { | 870 test::FrameGeneratorCapturer* frame_generator_capturer) override { |
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1036 // Configure hybrid NACK/FEC. | 1031 // Configure hybrid NACK/FEC. |
1037 send_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs; | 1032 send_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs; |
1038 send_config->rtp.ulpfec.red_payload_type = kRedPayloadType; | 1033 send_config->rtp.ulpfec.red_payload_type = kRedPayloadType; |
1039 send_config->rtp.ulpfec.ulpfec_payload_type = kUlpfecPayloadType; | 1034 send_config->rtp.ulpfec.ulpfec_payload_type = kUlpfecPayloadType; |
1040 // Set codec to VP8, otherwise NACK/FEC hybrid will be disabled. | 1035 // Set codec to VP8, otherwise NACK/FEC hybrid will be disabled. |
1041 send_config->encoder_settings.encoder = encoder_.get(); | 1036 send_config->encoder_settings.encoder = encoder_.get(); |
1042 send_config->encoder_settings.payload_name = "VP8"; | 1037 send_config->encoder_settings.payload_name = "VP8"; |
1043 send_config->encoder_settings.payload_type = kFakeVideoSendPayloadType; | 1038 send_config->encoder_settings.payload_type = kFakeVideoSendPayloadType; |
1044 | 1039 |
1045 (*receive_configs)[0].rtp.nack.rtp_history_ms = kNackRtpHistoryMs; | 1040 (*receive_configs)[0].rtp.nack.rtp_history_ms = kNackRtpHistoryMs; |
1046 (*receive_configs)[0].rtp.ulpfec.red_payload_type = kRedPayloadType; | 1041 (*receive_configs)[0].rtp.red_payload_type = kRedPayloadType; |
1047 (*receive_configs)[0].rtp.ulpfec.ulpfec_payload_type = kUlpfecPayloadType; | 1042 (*receive_configs)[0].rtp.ulpfec_payload_type = kUlpfecPayloadType; |
1048 | 1043 |
1049 (*receive_configs)[0].decoders.resize(1); | 1044 (*receive_configs)[0].decoders.resize(1); |
1050 (*receive_configs)[0].decoders[0].payload_type = | 1045 (*receive_configs)[0].decoders[0].payload_type = |
1051 send_config->encoder_settings.payload_type; | 1046 send_config->encoder_settings.payload_type; |
1052 (*receive_configs)[0].decoders[0].payload_name = | 1047 (*receive_configs)[0].decoders[0].payload_name = |
1053 send_config->encoder_settings.payload_name; | 1048 send_config->encoder_settings.payload_name; |
1054 (*receive_configs)[0].decoders[0].decoder = decoder_.get(); | 1049 (*receive_configs)[0].decoders[0].decoder = decoder_.get(); |
1055 } | 1050 } |
1056 | 1051 |
1057 void PerformTest() override { | 1052 void PerformTest() override { |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1164 (*receive_configs)[0].disable_prerenderer_smoothing = true; | 1159 (*receive_configs)[0].disable_prerenderer_smoothing = true; |
1165 (*receive_configs)[0].renderer = this; | 1160 (*receive_configs)[0].renderer = this; |
1166 | 1161 |
1167 (*receive_configs)[0].rtp.nack.rtp_history_ms = kNackRtpHistoryMs; | 1162 (*receive_configs)[0].rtp.nack.rtp_history_ms = kNackRtpHistoryMs; |
1168 | 1163 |
1169 if (payload_type_ == kRedPayloadType) { | 1164 if (payload_type_ == kRedPayloadType) { |
1170 send_config->rtp.ulpfec.ulpfec_payload_type = kUlpfecPayloadType; | 1165 send_config->rtp.ulpfec.ulpfec_payload_type = kUlpfecPayloadType; |
1171 send_config->rtp.ulpfec.red_payload_type = kRedPayloadType; | 1166 send_config->rtp.ulpfec.red_payload_type = kRedPayloadType; |
1172 if (retransmission_ssrc_ == kSendRtxSsrcs[0]) | 1167 if (retransmission_ssrc_ == kSendRtxSsrcs[0]) |
1173 send_config->rtp.ulpfec.red_rtx_payload_type = kRtxRedPayloadType; | 1168 send_config->rtp.ulpfec.red_rtx_payload_type = kRtxRedPayloadType; |
1174 (*receive_configs)[0].rtp.ulpfec.ulpfec_payload_type = | 1169 (*receive_configs)[0].rtp.ulpfec_payload_type = |
1175 send_config->rtp.ulpfec.ulpfec_payload_type; | 1170 send_config->rtp.ulpfec.ulpfec_payload_type; |
1176 (*receive_configs)[0].rtp.ulpfec.red_payload_type = | 1171 (*receive_configs)[0].rtp.red_payload_type = |
1177 send_config->rtp.ulpfec.red_payload_type; | 1172 send_config->rtp.ulpfec.red_payload_type; |
1178 (*receive_configs)[0].rtp.ulpfec.red_rtx_payload_type = | |
1179 send_config->rtp.ulpfec.red_rtx_payload_type; | |
1180 } | 1173 } |
1181 | 1174 |
1182 if (retransmission_ssrc_ == kSendRtxSsrcs[0]) { | 1175 if (retransmission_ssrc_ == kSendRtxSsrcs[0]) { |
1183 send_config->rtp.rtx.ssrcs.push_back(kSendRtxSsrcs[0]); | 1176 send_config->rtp.rtx.ssrcs.push_back(kSendRtxSsrcs[0]); |
1184 send_config->rtp.rtx.payload_type = kSendRtxPayloadType; | 1177 send_config->rtp.rtx.payload_type = kSendRtxPayloadType; |
1185 (*receive_configs)[0].rtp.rtx_ssrc = kSendRtxSsrcs[0]; | 1178 (*receive_configs)[0].rtp.rtx_ssrc = kSendRtxSsrcs[0]; |
1186 (*receive_configs)[0] | 1179 (*receive_configs)[0] |
1187 .rtp.rtx_associated_payload_types[(payload_type_ == kRedPayloadType) | 1180 .rtp.rtx_associated_payload_types[(payload_type_ == kRedPayloadType) |
1188 ? kRtxRedPayloadType | 1181 ? kRtxRedPayloadType |
1189 : kSendRtxPayloadType] = | 1182 : kSendRtxPayloadType] = |
(...skipping 10 matching lines...) Expand all Loading... |
1200 void OnFrameGeneratorCapturerCreated( | 1193 void OnFrameGeneratorCapturerCreated( |
1201 test::FrameGeneratorCapturer* frame_generator_capturer) override { | 1194 test::FrameGeneratorCapturer* frame_generator_capturer) override { |
1202 frame_generator_capturer->SetFakeRotation(kVideoRotation_90); | 1195 frame_generator_capturer->SetFakeRotation(kVideoRotation_90); |
1203 } | 1196 } |
1204 | 1197 |
1205 void PerformTest() override { | 1198 void PerformTest() override { |
1206 EXPECT_TRUE(Wait()) | 1199 EXPECT_TRUE(Wait()) |
1207 << "Timed out while waiting for retransmission to render."; | 1200 << "Timed out while waiting for retransmission to render."; |
1208 } | 1201 } |
1209 | 1202 |
1210 int GetPayloadType(bool use_rtx, bool use_red) { | 1203 int GetPayloadType(bool use_rtx, bool use_fec) { |
1211 if (use_red) { | 1204 if (use_fec) { |
1212 if (use_rtx) | 1205 if (use_rtx) |
1213 return kRtxRedPayloadType; | 1206 return kRtxRedPayloadType; |
1214 return kRedPayloadType; | 1207 return kRedPayloadType; |
1215 } | 1208 } |
1216 if (use_rtx) | 1209 if (use_rtx) |
1217 return kSendRtxPayloadType; | 1210 return kSendRtxPayloadType; |
1218 return kFakeVideoSendPayloadType; | 1211 return kFakeVideoSendPayloadType; |
1219 } | 1212 } |
1220 | 1213 |
1221 rtc::CriticalSection crit_; | 1214 rtc::CriticalSection crit_; |
(...skipping 1471 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2693 RunBaseTest(&test); | 2686 RunBaseTest(&test); |
2694 | 2687 |
2695 EXPECT_EQ( | 2688 EXPECT_EQ( |
2696 1, metrics::NumSamples("WebRTC.Video.UniqueNackRequestsSentInPercent")); | 2689 1, metrics::NumSamples("WebRTC.Video.UniqueNackRequestsSentInPercent")); |
2697 EXPECT_EQ(1, metrics::NumSamples( | 2690 EXPECT_EQ(1, metrics::NumSamples( |
2698 "WebRTC.Video.UniqueNackRequestsReceivedInPercent")); | 2691 "WebRTC.Video.UniqueNackRequestsReceivedInPercent")); |
2699 EXPECT_GT(metrics::MinSample("WebRTC.Video.NackPacketsSentPerMinute"), 0); | 2692 EXPECT_GT(metrics::MinSample("WebRTC.Video.NackPacketsSentPerMinute"), 0); |
2700 } | 2693 } |
2701 | 2694 |
2702 void EndToEndTest::VerifyHistogramStats(bool use_rtx, | 2695 void EndToEndTest::VerifyHistogramStats(bool use_rtx, |
2703 bool use_red, | 2696 bool use_fec, |
2704 bool screenshare) { | 2697 bool screenshare) { |
2705 class StatsObserver : public test::EndToEndTest, | 2698 class StatsObserver : public test::EndToEndTest, |
2706 public rtc::VideoSinkInterface<VideoFrame> { | 2699 public rtc::VideoSinkInterface<VideoFrame> { |
2707 public: | 2700 public: |
2708 StatsObserver(bool use_rtx, bool use_red, bool screenshare) | 2701 StatsObserver(bool use_rtx, bool use_fec, bool screenshare) |
2709 : EndToEndTest(kLongTimeoutMs), | 2702 : EndToEndTest(kLongTimeoutMs), |
2710 use_rtx_(use_rtx), | 2703 use_rtx_(use_rtx), |
2711 use_red_(use_red), | 2704 use_fec_(use_fec), |
2712 screenshare_(screenshare), | 2705 screenshare_(screenshare), |
2713 // This test uses NACK, so to send FEC we can't use a fake encoder. | 2706 // This test uses NACK, so to send FEC we can't use a fake encoder. |
2714 vp8_encoder_(use_red ? VP8Encoder::Create() : nullptr), | 2707 vp8_encoder_(use_fec ? VP8Encoder::Create() : nullptr), |
2715 sender_call_(nullptr), | 2708 sender_call_(nullptr), |
2716 receiver_call_(nullptr), | 2709 receiver_call_(nullptr), |
2717 start_runtime_ms_(-1), | 2710 start_runtime_ms_(-1), |
2718 num_frames_received_(0) {} | 2711 num_frames_received_(0) {} |
2719 | 2712 |
2720 private: | 2713 private: |
2721 void OnFrame(const VideoFrame& video_frame) override { | 2714 void OnFrame(const VideoFrame& video_frame) override { |
2722 // The RTT is needed to estimate |ntp_time_ms| which is used by | 2715 // The RTT is needed to estimate |ntp_time_ms| which is used by |
2723 // end-to-end delay stats. Therefore, start counting received frames once | 2716 // end-to-end delay stats. Therefore, start counting received frames once |
2724 // |ntp_time_ms| is valid. | 2717 // |ntp_time_ms| is valid. |
(...skipping 30 matching lines...) Expand all Loading... |
2755 | 2748 |
2756 void ModifyVideoConfigs( | 2749 void ModifyVideoConfigs( |
2757 VideoSendStream::Config* send_config, | 2750 VideoSendStream::Config* send_config, |
2758 std::vector<VideoReceiveStream::Config>* receive_configs, | 2751 std::vector<VideoReceiveStream::Config>* receive_configs, |
2759 VideoEncoderConfig* encoder_config) override { | 2752 VideoEncoderConfig* encoder_config) override { |
2760 // NACK | 2753 // NACK |
2761 send_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs; | 2754 send_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs; |
2762 (*receive_configs)[0].rtp.nack.rtp_history_ms = kNackRtpHistoryMs; | 2755 (*receive_configs)[0].rtp.nack.rtp_history_ms = kNackRtpHistoryMs; |
2763 (*receive_configs)[0].renderer = this; | 2756 (*receive_configs)[0].renderer = this; |
2764 // FEC | 2757 // FEC |
2765 if (use_red_) { | 2758 if (use_fec_) { |
2766 send_config->rtp.ulpfec.ulpfec_payload_type = kUlpfecPayloadType; | 2759 send_config->rtp.ulpfec.ulpfec_payload_type = kUlpfecPayloadType; |
2767 send_config->rtp.ulpfec.red_payload_type = kRedPayloadType; | 2760 send_config->rtp.ulpfec.red_payload_type = kRedPayloadType; |
2768 send_config->encoder_settings.encoder = vp8_encoder_.get(); | 2761 send_config->encoder_settings.encoder = vp8_encoder_.get(); |
2769 send_config->encoder_settings.payload_name = "VP8"; | 2762 send_config->encoder_settings.payload_name = "VP8"; |
2770 (*receive_configs)[0].decoders[0].payload_name = "VP8"; | 2763 (*receive_configs)[0].decoders[0].payload_name = "VP8"; |
2771 (*receive_configs)[0].rtp.ulpfec.red_payload_type = kRedPayloadType; | 2764 (*receive_configs)[0].rtp.red_payload_type = kRedPayloadType; |
2772 (*receive_configs)[0].rtp.ulpfec.ulpfec_payload_type = | 2765 (*receive_configs)[0].rtp.ulpfec_payload_type = kUlpfecPayloadType; |
2773 kUlpfecPayloadType; | |
2774 } | 2766 } |
2775 // RTX | 2767 // RTX |
2776 if (use_rtx_) { | 2768 if (use_rtx_) { |
2777 send_config->rtp.rtx.ssrcs.push_back(kSendRtxSsrcs[0]); | 2769 send_config->rtp.rtx.ssrcs.push_back(kSendRtxSsrcs[0]); |
2778 send_config->rtp.rtx.payload_type = kSendRtxPayloadType; | 2770 send_config->rtp.rtx.payload_type = kSendRtxPayloadType; |
2779 (*receive_configs)[0].rtp.rtx_ssrc = kSendRtxSsrcs[0]; | 2771 (*receive_configs)[0].rtp.rtx_ssrc = kSendRtxSsrcs[0]; |
2780 (*receive_configs)[0] | 2772 (*receive_configs)[0] |
2781 .rtp.rtx_associated_payload_types[kSendRtxPayloadType] = | 2773 .rtp.rtx_associated_payload_types[kSendRtxPayloadType] = |
2782 kFakeVideoSendPayloadType; | 2774 kFakeVideoSendPayloadType; |
| 2775 if (use_fec_) { |
| 2776 send_config->rtp.ulpfec.red_rtx_payload_type = kRtxRedPayloadType; |
| 2777 (*receive_configs)[0] |
| 2778 .rtp.rtx_associated_payload_types[kRtxRedPayloadType] = |
| 2779 kSendRtxPayloadType; |
| 2780 } |
2783 } | 2781 } |
2784 // RTT needed for RemoteNtpTimeEstimator for the receive stream. | 2782 // RTT needed for RemoteNtpTimeEstimator for the receive stream. |
2785 (*receive_configs)[0].rtp.rtcp_xr.receiver_reference_time_report = true; | 2783 (*receive_configs)[0].rtp.rtcp_xr.receiver_reference_time_report = true; |
2786 encoder_config->content_type = | 2784 encoder_config->content_type = |
2787 screenshare_ ? VideoEncoderConfig::ContentType::kScreen | 2785 screenshare_ ? VideoEncoderConfig::ContentType::kScreen |
2788 : VideoEncoderConfig::ContentType::kRealtimeVideo; | 2786 : VideoEncoderConfig::ContentType::kRealtimeVideo; |
2789 } | 2787 } |
2790 | 2788 |
2791 void OnCallsCreated(Call* sender_call, Call* receiver_call) override { | 2789 void OnCallsCreated(Call* sender_call, Call* receiver_call) override { |
2792 sender_call_ = sender_call; | 2790 sender_call_ = sender_call; |
2793 receiver_call_ = receiver_call; | 2791 receiver_call_ = receiver_call; |
2794 } | 2792 } |
2795 | 2793 |
2796 void PerformTest() override { | 2794 void PerformTest() override { |
2797 EXPECT_TRUE(Wait()) << "Timed out waiting for packet to be NACKed."; | 2795 EXPECT_TRUE(Wait()) << "Timed out waiting for packet to be NACKed."; |
2798 } | 2796 } |
2799 | 2797 |
2800 rtc::CriticalSection crit_; | 2798 rtc::CriticalSection crit_; |
2801 const bool use_rtx_; | 2799 const bool use_rtx_; |
2802 const bool use_red_; | 2800 const bool use_fec_; |
2803 const bool screenshare_; | 2801 const bool screenshare_; |
2804 const std::unique_ptr<VideoEncoder> vp8_encoder_; | 2802 const std::unique_ptr<VideoEncoder> vp8_encoder_; |
2805 Call* sender_call_; | 2803 Call* sender_call_; |
2806 Call* receiver_call_; | 2804 Call* receiver_call_; |
2807 int64_t start_runtime_ms_; | 2805 int64_t start_runtime_ms_; |
2808 int num_frames_received_ RTC_GUARDED_BY(&crit_); | 2806 int num_frames_received_ RTC_GUARDED_BY(&crit_); |
2809 } test(use_rtx, use_red, screenshare); | 2807 } test(use_rtx, use_fec, screenshare); |
2810 | 2808 |
2811 metrics::Reset(); | 2809 metrics::Reset(); |
2812 RunBaseTest(&test); | 2810 RunBaseTest(&test); |
2813 | 2811 |
2814 std::string video_prefix = | 2812 std::string video_prefix = |
2815 screenshare ? "WebRTC.Video.Screenshare." : "WebRTC.Video."; | 2813 screenshare ? "WebRTC.Video.Screenshare." : "WebRTC.Video."; |
2816 // The content type extension is disabled in non screenshare test, | 2814 // The content type extension is disabled in non screenshare test, |
2817 // therefore no slicing on simulcast id should be present. | 2815 // therefore no slicing on simulcast id should be present. |
2818 std::string video_suffix = screenshare ? ".S0" : ""; | 2816 std::string video_suffix = screenshare ? ".S0" : ""; |
2819 // Verify that stats have been updated once. | 2817 // Verify that stats have been updated once. |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2909 EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.SendDelayInMs")); | 2907 EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.SendDelayInMs")); |
2910 EXPECT_EQ(1, metrics::NumSamples(video_prefix + "SendSideDelayInMs")); | 2908 EXPECT_EQ(1, metrics::NumSamples(video_prefix + "SendSideDelayInMs")); |
2911 EXPECT_EQ(1, metrics::NumSamples(video_prefix + "SendSideDelayMaxInMs")); | 2909 EXPECT_EQ(1, metrics::NumSamples(video_prefix + "SendSideDelayMaxInMs")); |
2912 | 2910 |
2913 int num_rtx_samples = use_rtx ? 1 : 0; | 2911 int num_rtx_samples = use_rtx ? 1 : 0; |
2914 EXPECT_EQ(num_rtx_samples, | 2912 EXPECT_EQ(num_rtx_samples, |
2915 metrics::NumSamples("WebRTC.Video.RtxBitrateSentInKbps")); | 2913 metrics::NumSamples("WebRTC.Video.RtxBitrateSentInKbps")); |
2916 EXPECT_EQ(num_rtx_samples, | 2914 EXPECT_EQ(num_rtx_samples, |
2917 metrics::NumSamples("WebRTC.Video.RtxBitrateReceivedInKbps")); | 2915 metrics::NumSamples("WebRTC.Video.RtxBitrateReceivedInKbps")); |
2918 | 2916 |
2919 int num_red_samples = use_red ? 1 : 0; | 2917 int num_red_samples = use_fec ? 1 : 0; |
2920 EXPECT_EQ(num_red_samples, | 2918 EXPECT_EQ(num_red_samples, |
2921 metrics::NumSamples("WebRTC.Video.FecBitrateSentInKbps")); | 2919 metrics::NumSamples("WebRTC.Video.FecBitrateSentInKbps")); |
2922 EXPECT_EQ(num_red_samples, | 2920 EXPECT_EQ(num_red_samples, |
2923 metrics::NumSamples("WebRTC.Video.FecBitrateReceivedInKbps")); | 2921 metrics::NumSamples("WebRTC.Video.FecBitrateReceivedInKbps")); |
2924 EXPECT_EQ(num_red_samples, | 2922 EXPECT_EQ(num_red_samples, |
2925 metrics::NumSamples("WebRTC.Video.ReceivedFecPacketsInPercent")); | 2923 metrics::NumSamples("WebRTC.Video.ReceivedFecPacketsInPercent")); |
2926 } | 2924 } |
2927 | 2925 |
2928 #if defined(WEBRTC_WIN) | 2926 #if defined(WEBRTC_WIN) |
2929 // Disabled due to flakiness on Windows (bugs.webrtc.org/7483). | 2927 // Disabled due to flakiness on Windows (bugs.webrtc.org/7483). |
(...skipping 1901 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4831 default_receive_config.rtp.rtcp_xr.receiver_reference_time_report) | 4829 default_receive_config.rtp.rtcp_xr.receiver_reference_time_report) |
4832 << "RTCP XR settings require rtcp-xr to be negotiated."; | 4830 << "RTCP XR settings require rtcp-xr to be negotiated."; |
4833 EXPECT_EQ(0U, default_receive_config.rtp.rtx_ssrc) | 4831 EXPECT_EQ(0U, default_receive_config.rtp.rtx_ssrc) |
4834 << "Enabling RTX requires ssrc-group: FID negotiation"; | 4832 << "Enabling RTX requires ssrc-group: FID negotiation"; |
4835 EXPECT_TRUE(default_receive_config.rtp.rtx_associated_payload_types.empty()) | 4833 EXPECT_TRUE(default_receive_config.rtp.rtx_associated_payload_types.empty()) |
4836 << "Enabling RTX requires rtpmap: rtx negotiation."; | 4834 << "Enabling RTX requires rtpmap: rtx negotiation."; |
4837 EXPECT_TRUE(default_receive_config.rtp.extensions.empty()) | 4835 EXPECT_TRUE(default_receive_config.rtp.extensions.empty()) |
4838 << "Enabling RTP extensions require negotiation."; | 4836 << "Enabling RTP extensions require negotiation."; |
4839 | 4837 |
4840 VerifyEmptyNackConfig(default_receive_config.rtp.nack); | 4838 VerifyEmptyNackConfig(default_receive_config.rtp.nack); |
4841 VerifyEmptyUlpfecConfig(default_receive_config.rtp.ulpfec); | 4839 EXPECT_EQ(-1, default_receive_config.rtp.ulpfec_payload_type) |
| 4840 << "Enabling ULPFEC requires rtpmap: ulpfec negotiation."; |
| 4841 EXPECT_EQ(-1, default_receive_config.rtp.red_payload_type) |
| 4842 << "Enabling ULPFEC requires rtpmap: red negotiation."; |
4842 } | 4843 } |
4843 | 4844 |
4844 TEST_F(EndToEndTest, VerifyDefaultFlexfecReceiveConfigParameters) { | 4845 TEST_F(EndToEndTest, VerifyDefaultFlexfecReceiveConfigParameters) { |
4845 test::NullTransport rtcp_send_transport; | 4846 test::NullTransport rtcp_send_transport; |
4846 FlexfecReceiveStream::Config default_receive_config(&rtcp_send_transport); | 4847 FlexfecReceiveStream::Config default_receive_config(&rtcp_send_transport); |
4847 EXPECT_EQ(-1, default_receive_config.payload_type) | 4848 EXPECT_EQ(-1, default_receive_config.payload_type) |
4848 << "Enabling FlexFEC requires rtpmap: flexfec negotiation."; | 4849 << "Enabling FlexFEC requires rtpmap: flexfec negotiation."; |
4849 EXPECT_EQ(0U, default_receive_config.remote_ssrc) | 4850 EXPECT_EQ(0U, default_receive_config.remote_ssrc) |
4850 << "Enabling FlexFEC requires ssrc-group: FEC-FR negotiation."; | 4851 << "Enabling FlexFEC requires ssrc-group: FEC-FR negotiation."; |
4851 EXPECT_TRUE(default_receive_config.protected_media_ssrcs.empty()) | 4852 EXPECT_TRUE(default_receive_config.protected_media_ssrcs.empty()) |
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5019 std::unique_ptr<VideoEncoder> encoder_; | 5020 std::unique_ptr<VideoEncoder> encoder_; |
5020 std::unique_ptr<VideoDecoder> decoder_; | 5021 std::unique_ptr<VideoDecoder> decoder_; |
5021 rtc::CriticalSection crit_; | 5022 rtc::CriticalSection crit_; |
5022 int recorded_frames_ RTC_GUARDED_BY(crit_); | 5023 int recorded_frames_ RTC_GUARDED_BY(crit_); |
5023 } test(this); | 5024 } test(this); |
5024 | 5025 |
5025 RunBaseTest(&test); | 5026 RunBaseTest(&test); |
5026 } | 5027 } |
5027 | 5028 |
5028 } // namespace webrtc | 5029 } // namespace webrtc |
OLD | NEW |