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 678 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 = | 856 send_config->rtp.ulpfec.red_rtx_payload_type = |
brandtr
2017/09/21 08:11:33
RED should not be used in this test, so you can re
nisse-webrtc
2017/09/21 08:37:46
Done.
| |
857 test::CallTest::kRtxRedPayloadType; | 857 test::CallTest::kRtxRedPayloadType; |
858 send_config->rtp.rtx.ssrcs.push_back(test::CallTest::kSendRtxSsrcs[0]); | 858 send_config->rtp.rtx.ssrcs.push_back(test::CallTest::kSendRtxSsrcs[0]); |
859 send_config->rtp.rtx.payload_type = test::CallTest::kSendRtxPayloadType; | 859 send_config->rtp.rtx.payload_type = test::CallTest::kSendRtxPayloadType; |
860 | 860 |
861 (*receive_configs)[0].rtp.nack.rtp_history_ms = | 861 (*receive_configs)[0].rtp.nack.rtp_history_ms = |
862 test::CallTest::kNackRtpHistoryMs; | 862 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]; | 863 (*receive_configs)[0].rtp.rtx_ssrc = test::CallTest::kSendRtxSsrcs[0]; |
867 (*receive_configs)[0] | 864 (*receive_configs)[0] |
868 .rtp | 865 .rtp |
869 .rtx_associated_payload_types[test::CallTest::kSendRtxPayloadType] = | 866 .rtx_associated_payload_types[test::CallTest::kSendRtxPayloadType] = |
870 test::CallTest::kVideoSendPayloadType; | 867 test::CallTest::kVideoSendPayloadType; |
871 } | 868 } |
872 } | 869 } |
873 | 870 |
874 void OnFrameGeneratorCapturerCreated( | 871 void OnFrameGeneratorCapturerCreated( |
875 test::FrameGeneratorCapturer* frame_generator_capturer) override { | 872 test::FrameGeneratorCapturer* frame_generator_capturer) override { |
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1036 // Configure hybrid NACK/FEC. | 1033 // Configure hybrid NACK/FEC. |
1037 send_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs; | 1034 send_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs; |
1038 send_config->rtp.ulpfec.red_payload_type = kRedPayloadType; | 1035 send_config->rtp.ulpfec.red_payload_type = kRedPayloadType; |
1039 send_config->rtp.ulpfec.ulpfec_payload_type = kUlpfecPayloadType; | 1036 send_config->rtp.ulpfec.ulpfec_payload_type = kUlpfecPayloadType; |
1040 // Set codec to VP8, otherwise NACK/FEC hybrid will be disabled. | 1037 // Set codec to VP8, otherwise NACK/FEC hybrid will be disabled. |
1041 send_config->encoder_settings.encoder = encoder_.get(); | 1038 send_config->encoder_settings.encoder = encoder_.get(); |
1042 send_config->encoder_settings.payload_name = "VP8"; | 1039 send_config->encoder_settings.payload_name = "VP8"; |
1043 send_config->encoder_settings.payload_type = kFakeVideoSendPayloadType; | 1040 send_config->encoder_settings.payload_type = kFakeVideoSendPayloadType; |
1044 | 1041 |
1045 (*receive_configs)[0].rtp.nack.rtp_history_ms = kNackRtpHistoryMs; | 1042 (*receive_configs)[0].rtp.nack.rtp_history_ms = kNackRtpHistoryMs; |
1046 (*receive_configs)[0].rtp.ulpfec.red_payload_type = kRedPayloadType; | 1043 (*receive_configs)[0].rtp.red_payload_type = kRedPayloadType; |
1047 (*receive_configs)[0].rtp.ulpfec.ulpfec_payload_type = kUlpfecPayloadType; | 1044 (*receive_configs)[0].rtp.ulpfec_payload_type = kUlpfecPayloadType; |
1048 | 1045 |
1049 (*receive_configs)[0].decoders.resize(1); | 1046 (*receive_configs)[0].decoders.resize(1); |
1050 (*receive_configs)[0].decoders[0].payload_type = | 1047 (*receive_configs)[0].decoders[0].payload_type = |
1051 send_config->encoder_settings.payload_type; | 1048 send_config->encoder_settings.payload_type; |
1052 (*receive_configs)[0].decoders[0].payload_name = | 1049 (*receive_configs)[0].decoders[0].payload_name = |
1053 send_config->encoder_settings.payload_name; | 1050 send_config->encoder_settings.payload_name; |
1054 (*receive_configs)[0].decoders[0].decoder = decoder_.get(); | 1051 (*receive_configs)[0].decoders[0].decoder = decoder_.get(); |
1055 } | 1052 } |
1056 | 1053 |
1057 void PerformTest() override { | 1054 void PerformTest() override { |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1164 (*receive_configs)[0].disable_prerenderer_smoothing = true; | 1161 (*receive_configs)[0].disable_prerenderer_smoothing = true; |
1165 (*receive_configs)[0].renderer = this; | 1162 (*receive_configs)[0].renderer = this; |
1166 | 1163 |
1167 (*receive_configs)[0].rtp.nack.rtp_history_ms = kNackRtpHistoryMs; | 1164 (*receive_configs)[0].rtp.nack.rtp_history_ms = kNackRtpHistoryMs; |
1168 | 1165 |
1169 if (payload_type_ == kRedPayloadType) { | 1166 if (payload_type_ == kRedPayloadType) { |
1170 send_config->rtp.ulpfec.ulpfec_payload_type = kUlpfecPayloadType; | 1167 send_config->rtp.ulpfec.ulpfec_payload_type = kUlpfecPayloadType; |
1171 send_config->rtp.ulpfec.red_payload_type = kRedPayloadType; | 1168 send_config->rtp.ulpfec.red_payload_type = kRedPayloadType; |
1172 if (retransmission_ssrc_ == kSendRtxSsrcs[0]) | 1169 if (retransmission_ssrc_ == kSendRtxSsrcs[0]) |
1173 send_config->rtp.ulpfec.red_rtx_payload_type = kRtxRedPayloadType; | 1170 send_config->rtp.ulpfec.red_rtx_payload_type = kRtxRedPayloadType; |
1174 (*receive_configs)[0].rtp.ulpfec.ulpfec_payload_type = | 1171 (*receive_configs)[0].rtp.ulpfec_payload_type = |
1175 send_config->rtp.ulpfec.ulpfec_payload_type; | 1172 send_config->rtp.ulpfec.ulpfec_payload_type; |
1176 (*receive_configs)[0].rtp.ulpfec.red_payload_type = | 1173 (*receive_configs)[0].rtp.red_payload_type = |
1177 send_config->rtp.ulpfec.red_payload_type; | 1174 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 } | 1175 } |
1181 | 1176 |
1182 if (retransmission_ssrc_ == kSendRtxSsrcs[0]) { | 1177 if (retransmission_ssrc_ == kSendRtxSsrcs[0]) { |
1183 send_config->rtp.rtx.ssrcs.push_back(kSendRtxSsrcs[0]); | 1178 send_config->rtp.rtx.ssrcs.push_back(kSendRtxSsrcs[0]); |
1184 send_config->rtp.rtx.payload_type = kSendRtxPayloadType; | 1179 send_config->rtp.rtx.payload_type = kSendRtxPayloadType; |
1185 (*receive_configs)[0].rtp.rtx_ssrc = kSendRtxSsrcs[0]; | 1180 (*receive_configs)[0].rtp.rtx_ssrc = kSendRtxSsrcs[0]; |
1186 (*receive_configs)[0] | 1181 (*receive_configs)[0] |
1187 .rtp.rtx_associated_payload_types[(payload_type_ == kRedPayloadType) | 1182 .rtp.rtx_associated_payload_types[(payload_type_ == kRedPayloadType) |
1188 ? kRtxRedPayloadType | 1183 ? kRtxRedPayloadType |
1189 : kSendRtxPayloadType] = | 1184 : kSendRtxPayloadType] = |
(...skipping 10 matching lines...) Expand all Loading... | |
1200 void OnFrameGeneratorCapturerCreated( | 1195 void OnFrameGeneratorCapturerCreated( |
1201 test::FrameGeneratorCapturer* frame_generator_capturer) override { | 1196 test::FrameGeneratorCapturer* frame_generator_capturer) override { |
1202 frame_generator_capturer->SetFakeRotation(kVideoRotation_90); | 1197 frame_generator_capturer->SetFakeRotation(kVideoRotation_90); |
1203 } | 1198 } |
1204 | 1199 |
1205 void PerformTest() override { | 1200 void PerformTest() override { |
1206 EXPECT_TRUE(Wait()) | 1201 EXPECT_TRUE(Wait()) |
1207 << "Timed out while waiting for retransmission to render."; | 1202 << "Timed out while waiting for retransmission to render."; |
1208 } | 1203 } |
1209 | 1204 |
1210 int GetPayloadType(bool use_rtx, bool use_red) { | 1205 int GetPayloadType(bool use_rtx, bool use_red) { |
nisse-webrtc
2017/09/21 08:57:29
I'm doing a search-and-replace then, changing to u
| |
1211 if (use_red) { | 1206 if (use_red) { |
1212 if (use_rtx) | 1207 if (use_rtx) |
1213 return kRtxRedPayloadType; | 1208 return kRtxRedPayloadType; |
1214 return kRedPayloadType; | 1209 return kRedPayloadType; |
1215 } | 1210 } |
1216 if (use_rtx) | 1211 if (use_rtx) |
1217 return kSendRtxPayloadType; | 1212 return kSendRtxPayloadType; |
1218 return kFakeVideoSendPayloadType; | 1213 return kFakeVideoSendPayloadType; |
1219 } | 1214 } |
1220 | 1215 |
(...skipping 1472 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2693 RunBaseTest(&test); | 2688 RunBaseTest(&test); |
2694 | 2689 |
2695 EXPECT_EQ( | 2690 EXPECT_EQ( |
2696 1, metrics::NumSamples("WebRTC.Video.UniqueNackRequestsSentInPercent")); | 2691 1, metrics::NumSamples("WebRTC.Video.UniqueNackRequestsSentInPercent")); |
2697 EXPECT_EQ(1, metrics::NumSamples( | 2692 EXPECT_EQ(1, metrics::NumSamples( |
2698 "WebRTC.Video.UniqueNackRequestsReceivedInPercent")); | 2693 "WebRTC.Video.UniqueNackRequestsReceivedInPercent")); |
2699 EXPECT_GT(metrics::MinSample("WebRTC.Video.NackPacketsSentPerMinute"), 0); | 2694 EXPECT_GT(metrics::MinSample("WebRTC.Video.NackPacketsSentPerMinute"), 0); |
2700 } | 2695 } |
2701 | 2696 |
2702 void EndToEndTest::VerifyHistogramStats(bool use_rtx, | 2697 void EndToEndTest::VerifyHistogramStats(bool use_rtx, |
2703 bool use_red, | 2698 bool use_red, |
brandtr
2017/09/21 08:11:33
Would you mind renaming |use_red| to |use_fec| ? B
nisse-webrtc
2017/09/21 08:37:46
Just in this method and its local classes, or glob
brandtr
2017/09/21 08:45:22
I think they are equivalent: I have already tried
| |
2704 bool screenshare) { | 2699 bool screenshare) { |
2705 class StatsObserver : public test::EndToEndTest, | 2700 class StatsObserver : public test::EndToEndTest, |
2706 public rtc::VideoSinkInterface<VideoFrame> { | 2701 public rtc::VideoSinkInterface<VideoFrame> { |
2707 public: | 2702 public: |
2708 StatsObserver(bool use_rtx, bool use_red, bool screenshare) | 2703 StatsObserver(bool use_rtx, bool use_red, bool screenshare) |
2709 : EndToEndTest(kLongTimeoutMs), | 2704 : EndToEndTest(kLongTimeoutMs), |
2710 use_rtx_(use_rtx), | 2705 use_rtx_(use_rtx), |
2711 use_red_(use_red), | 2706 use_red_(use_red), |
2712 screenshare_(screenshare), | 2707 screenshare_(screenshare), |
2713 // This test uses NACK, so to send FEC we can't use a fake encoder. | 2708 // This test uses NACK, so to send FEC we can't use a fake encoder. |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2746 int64_t elapsed_sec = (now - start_runtime_ms_) / 1000; | 2741 int64_t elapsed_sec = (now - start_runtime_ms_) / 1000; |
2747 return elapsed_sec > metrics::kMinRunTimeInSeconds * 2; | 2742 return elapsed_sec > metrics::kMinRunTimeInSeconds * 2; |
2748 } | 2743 } |
2749 | 2744 |
2750 bool MinNumberOfFramesReceived() const { | 2745 bool MinNumberOfFramesReceived() const { |
2751 const int kMinRequiredHistogramSamples = 200; | 2746 const int kMinRequiredHistogramSamples = 200; |
2752 rtc::CritScope lock(&crit_); | 2747 rtc::CritScope lock(&crit_); |
2753 return num_frames_received_ > kMinRequiredHistogramSamples; | 2748 return num_frames_received_ > kMinRequiredHistogramSamples; |
2754 } | 2749 } |
2755 | 2750 |
2756 void ModifyVideoConfigs( | 2751 void ModifyVideoConfigs( |
brandtr
2017/09/21 08:11:33
It doesn't look like this test sets ups RED/RTX co
nisse-webrtc
2017/09/21 08:37:46
I've given it a try, please have a look.
| |
2757 VideoSendStream::Config* send_config, | 2752 VideoSendStream::Config* send_config, |
2758 std::vector<VideoReceiveStream::Config>* receive_configs, | 2753 std::vector<VideoReceiveStream::Config>* receive_configs, |
2759 VideoEncoderConfig* encoder_config) override { | 2754 VideoEncoderConfig* encoder_config) override { |
2760 // NACK | 2755 // NACK |
2761 send_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs; | 2756 send_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs; |
2762 (*receive_configs)[0].rtp.nack.rtp_history_ms = kNackRtpHistoryMs; | 2757 (*receive_configs)[0].rtp.nack.rtp_history_ms = kNackRtpHistoryMs; |
2763 (*receive_configs)[0].renderer = this; | 2758 (*receive_configs)[0].renderer = this; |
2764 // FEC | 2759 // FEC |
2765 if (use_red_) { | 2760 if (use_red_) { |
2766 send_config->rtp.ulpfec.ulpfec_payload_type = kUlpfecPayloadType; | 2761 send_config->rtp.ulpfec.ulpfec_payload_type = kUlpfecPayloadType; |
2767 send_config->rtp.ulpfec.red_payload_type = kRedPayloadType; | 2762 send_config->rtp.ulpfec.red_payload_type = kRedPayloadType; |
2768 send_config->encoder_settings.encoder = vp8_encoder_.get(); | 2763 send_config->encoder_settings.encoder = vp8_encoder_.get(); |
2769 send_config->encoder_settings.payload_name = "VP8"; | 2764 send_config->encoder_settings.payload_name = "VP8"; |
2770 (*receive_configs)[0].decoders[0].payload_name = "VP8"; | 2765 (*receive_configs)[0].decoders[0].payload_name = "VP8"; |
2771 (*receive_configs)[0].rtp.ulpfec.red_payload_type = kRedPayloadType; | 2766 (*receive_configs)[0].rtp.red_payload_type = kRedPayloadType; |
2772 (*receive_configs)[0].rtp.ulpfec.ulpfec_payload_type = | 2767 (*receive_configs)[0].rtp.ulpfec_payload_type = kUlpfecPayloadType; |
2773 kUlpfecPayloadType; | |
2774 } | 2768 } |
2775 // RTX | 2769 // RTX |
2776 if (use_rtx_) { | 2770 if (use_rtx_) { |
2777 send_config->rtp.rtx.ssrcs.push_back(kSendRtxSsrcs[0]); | 2771 send_config->rtp.rtx.ssrcs.push_back(kSendRtxSsrcs[0]); |
2778 send_config->rtp.rtx.payload_type = kSendRtxPayloadType; | 2772 send_config->rtp.rtx.payload_type = kSendRtxPayloadType; |
2779 (*receive_configs)[0].rtp.rtx_ssrc = kSendRtxSsrcs[0]; | 2773 (*receive_configs)[0].rtp.rtx_ssrc = kSendRtxSsrcs[0]; |
2780 (*receive_configs)[0] | 2774 (*receive_configs)[0] |
2781 .rtp.rtx_associated_payload_types[kSendRtxPayloadType] = | 2775 .rtp.rtx_associated_payload_types[kSendRtxPayloadType] = |
2782 kFakeVideoSendPayloadType; | 2776 kFakeVideoSendPayloadType; |
2783 } | 2777 } |
(...skipping 2047 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
4831 default_receive_config.rtp.rtcp_xr.receiver_reference_time_report) | 4825 default_receive_config.rtp.rtcp_xr.receiver_reference_time_report) |
4832 << "RTCP XR settings require rtcp-xr to be negotiated."; | 4826 << "RTCP XR settings require rtcp-xr to be negotiated."; |
4833 EXPECT_EQ(0U, default_receive_config.rtp.rtx_ssrc) | 4827 EXPECT_EQ(0U, default_receive_config.rtp.rtx_ssrc) |
4834 << "Enabling RTX requires ssrc-group: FID negotiation"; | 4828 << "Enabling RTX requires ssrc-group: FID negotiation"; |
4835 EXPECT_TRUE(default_receive_config.rtp.rtx_associated_payload_types.empty()) | 4829 EXPECT_TRUE(default_receive_config.rtp.rtx_associated_payload_types.empty()) |
4836 << "Enabling RTX requires rtpmap: rtx negotiation."; | 4830 << "Enabling RTX requires rtpmap: rtx negotiation."; |
4837 EXPECT_TRUE(default_receive_config.rtp.extensions.empty()) | 4831 EXPECT_TRUE(default_receive_config.rtp.extensions.empty()) |
4838 << "Enabling RTP extensions require negotiation."; | 4832 << "Enabling RTP extensions require negotiation."; |
4839 | 4833 |
4840 VerifyEmptyNackConfig(default_receive_config.rtp.nack); | 4834 VerifyEmptyNackConfig(default_receive_config.rtp.nack); |
4841 VerifyEmptyUlpfecConfig(default_receive_config.rtp.ulpfec); | 4835 EXPECT_EQ(-1, default_receive_config.rtp.ulpfec_payload_type) |
4836 << "Enabling ULPFEC requires rtpmap: ulpfec negotiation."; | |
4837 EXPECT_EQ(-1, default_receive_config.rtp.red_payload_type) | |
4838 << "Enabling ULPFEC requires rtpmap: red negotiation."; | |
4842 } | 4839 } |
4843 | 4840 |
4844 TEST_F(EndToEndTest, VerifyDefaultFlexfecReceiveConfigParameters) { | 4841 TEST_F(EndToEndTest, VerifyDefaultFlexfecReceiveConfigParameters) { |
4845 test::NullTransport rtcp_send_transport; | 4842 test::NullTransport rtcp_send_transport; |
4846 FlexfecReceiveStream::Config default_receive_config(&rtcp_send_transport); | 4843 FlexfecReceiveStream::Config default_receive_config(&rtcp_send_transport); |
4847 EXPECT_EQ(-1, default_receive_config.payload_type) | 4844 EXPECT_EQ(-1, default_receive_config.payload_type) |
4848 << "Enabling FlexFEC requires rtpmap: flexfec negotiation."; | 4845 << "Enabling FlexFEC requires rtpmap: flexfec negotiation."; |
4849 EXPECT_EQ(0U, default_receive_config.remote_ssrc) | 4846 EXPECT_EQ(0U, default_receive_config.remote_ssrc) |
4850 << "Enabling FlexFEC requires ssrc-group: FEC-FR negotiation."; | 4847 << "Enabling FlexFEC requires ssrc-group: FEC-FR negotiation."; |
4851 EXPECT_TRUE(default_receive_config.protected_media_ssrcs.empty()) | 4848 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_; | 5016 std::unique_ptr<VideoEncoder> encoder_; |
5020 std::unique_ptr<VideoDecoder> decoder_; | 5017 std::unique_ptr<VideoDecoder> decoder_; |
5021 rtc::CriticalSection crit_; | 5018 rtc::CriticalSection crit_; |
5022 int recorded_frames_ RTC_GUARDED_BY(crit_); | 5019 int recorded_frames_ RTC_GUARDED_BY(crit_); |
5023 } test(this); | 5020 } test(this); |
5024 | 5021 |
5025 RunBaseTest(&test); | 5022 RunBaseTest(&test); |
5026 } | 5023 } |
5027 | 5024 |
5028 } // namespace webrtc | 5025 } // namespace webrtc |
OLD | NEW |