Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(182)

Side by Side Diff: video/end_to_end_tests.cc

Issue 3019453002: Delete member VideoReceiveStream::Config::Rtp::ulpfec. (Closed)
Patch Set: Fix video/replay.cc Created 3 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698