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

Side by Side Diff: webrtc/video/screenshare_loopback.cc

Issue 1242043002: Selectable number of TL screenshare loopback test (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Updated test case Created 5 years, 4 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) 2015 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2015 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 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
66 DEFINE_int32(tl0_bitrate, 200, "Temporal layer 0 target bitrate."); 66 DEFINE_int32(tl0_bitrate, 200, "Temporal layer 0 target bitrate.");
67 size_t StartBitrate() { 67 size_t StartBitrate() {
68 return static_cast<size_t>(FLAGS_tl0_bitrate); 68 return static_cast<size_t>(FLAGS_tl0_bitrate);
69 } 69 }
70 70
71 DEFINE_int32(tl1_bitrate, 2000, "Temporal layer 1 target bitrate."); 71 DEFINE_int32(tl1_bitrate, 2000, "Temporal layer 1 target bitrate.");
72 size_t MaxBitrate() { 72 size_t MaxBitrate() {
73 return static_cast<size_t>(FLAGS_tl1_bitrate); 73 return static_cast<size_t>(FLAGS_tl1_bitrate);
74 } 74 }
75 75
76 DEFINE_int32(num_temporal_layers, 2, "Number of temporal layers to use.");
77 int NumTemporalLayers() {
78 return static_cast<int>(FLAGS_num_temporal_layers);
79 }
80
76 DEFINE_int32(min_transmit_bitrate, 400, "Min transmit bitrate incl. padding."); 81 DEFINE_int32(min_transmit_bitrate, 400, "Min transmit bitrate incl. padding.");
77 int MinTransmitBitrate() { 82 int MinTransmitBitrate() {
78 return FLAGS_min_transmit_bitrate; 83 return FLAGS_min_transmit_bitrate;
79 } 84 }
80 85
81 DEFINE_string(codec, "VP8", "Video codec to use."); 86 DEFINE_string(codec, "VP8", "Video codec to use.");
82 std::string Codec() { 87 std::string Codec() {
83 return static_cast<std::string>(FLAGS_codec); 88 return static_cast<std::string>(FLAGS_codec);
84 } 89 }
85 90
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
121 "", 126 "",
122 "Field trials control experimental feature code which can be forced. " 127 "Field trials control experimental feature code which can be forced. "
123 "E.g. running with --force_fieldtrials=WebRTC-FooFeature/Enable/" 128 "E.g. running with --force_fieldtrials=WebRTC-FooFeature/Enable/"
124 " will assign the group Enable to field trial WebRTC-FooFeature. Multiple " 129 " will assign the group Enable to field trial WebRTC-FooFeature. Multiple "
125 "trials are separated by \"/\""); 130 "trials are separated by \"/\"");
126 } // namespace flags 131 } // namespace flags
127 132
128 class ScreenshareLoopback : public test::Loopback { 133 class ScreenshareLoopback : public test::Loopback {
129 public: 134 public:
130 explicit ScreenshareLoopback(const Config& config) : Loopback(config) { 135 explicit ScreenshareLoopback(const Config& config) : Loopback(config) {
136 CHECK_GE(config.num_temporal_layers, 1u);
137 CHECK_LE(config.num_temporal_layers, 2u);
138
131 vp8_settings_ = VideoEncoder::GetDefaultVp8Settings(); 139 vp8_settings_ = VideoEncoder::GetDefaultVp8Settings();
132 vp8_settings_.denoisingOn = false; 140 vp8_settings_.denoisingOn = false;
133 vp8_settings_.frameDroppingOn = false; 141 vp8_settings_.frameDroppingOn = false;
134 vp8_settings_.numberOfTemporalLayers = 2; 142 vp8_settings_.numberOfTemporalLayers = config.num_temporal_layers;
135 143
136 vp9_settings_ = VideoEncoder::GetDefaultVp9Settings(); 144 vp9_settings_ = VideoEncoder::GetDefaultVp9Settings();
137 vp9_settings_.denoisingOn = false; 145 vp9_settings_.denoisingOn = false;
138 vp9_settings_.frameDroppingOn = false; 146 vp9_settings_.frameDroppingOn = false;
139 vp9_settings_.numberOfTemporalLayers = 2; 147 vp9_settings_.numberOfTemporalLayers = config.num_temporal_layers;
140 } 148 }
141 virtual ~ScreenshareLoopback() {} 149 virtual ~ScreenshareLoopback() {}
142 150
143 protected: 151 protected:
144 VideoEncoderConfig CreateEncoderConfig() override { 152 VideoEncoderConfig CreateEncoderConfig() override {
145 VideoEncoderConfig encoder_config(test::Loopback::CreateEncoderConfig()); 153 VideoEncoderConfig encoder_config(test::Loopback::CreateEncoderConfig());
146 VideoStream* stream = &encoder_config.streams[0]; 154 VideoStream* stream = &encoder_config.streams[0];
147 encoder_config.content_type = VideoEncoderConfig::ContentType::kScreen; 155 encoder_config.content_type = VideoEncoderConfig::ContentType::kScreen;
148 encoder_config.min_transmit_bitrate_bps = flags::MinTransmitBitrate(); 156 encoder_config.min_transmit_bitrate_bps = flags::MinTransmitBitrate();
157 int num_temporal_layers;
149 if (config_.codec == "VP8") { 158 if (config_.codec == "VP8") {
150 encoder_config.encoder_specific_settings = &vp8_settings_; 159 encoder_config.encoder_specific_settings = &vp8_settings_;
160 num_temporal_layers = vp8_settings_.numberOfTemporalLayers;
151 } else if (config_.codec == "VP9") { 161 } else if (config_.codec == "VP9") {
152 encoder_config.encoder_specific_settings = &vp9_settings_; 162 encoder_config.encoder_specific_settings = &vp9_settings_;
163 num_temporal_layers = vp9_settings_.numberOfTemporalLayers;
153 } else { 164 } else {
154 RTC_NOTREACHED() << "Codec not supported!"; 165 RTC_NOTREACHED() << "Codec not supported!";
155 abort(); 166 abort();
156 } 167 }
157 stream->temporal_layer_thresholds_bps.clear(); 168 stream->temporal_layer_thresholds_bps.clear();
158 stream->target_bitrate_bps = 169 stream->target_bitrate_bps =
159 static_cast<int>(config_.start_bitrate_kbps) * 1000; 170 static_cast<int>(config_.start_bitrate_kbps) * 1000;
160 stream->temporal_layer_thresholds_bps.push_back(stream->target_bitrate_bps); 171 if (num_temporal_layers == 2) {
172 stream->temporal_layer_thresholds_bps.push_back(
173 stream->target_bitrate_bps);
174 }
161 return encoder_config; 175 return encoder_config;
162 } 176 }
163 177
164 test::VideoCapturer* CreateCapturer(VideoSendStream* send_stream) override { 178 test::VideoCapturer* CreateCapturer(VideoSendStream* send_stream) override {
165 std::vector<std::string> slides; 179 std::vector<std::string> slides;
166 slides.push_back(test::ResourcePath("web_screenshot_1850_1110", "yuv")); 180 slides.push_back(test::ResourcePath("web_screenshot_1850_1110", "yuv"));
167 slides.push_back(test::ResourcePath("presentation_1850_1110", "yuv")); 181 slides.push_back(test::ResourcePath("presentation_1850_1110", "yuv"));
168 slides.push_back(test::ResourcePath("photo_1850_1110", "yuv")); 182 slides.push_back(test::ResourcePath("photo_1850_1110", "yuv"));
169 slides.push_back(test::ResourcePath("difficult_photo_1850_1110", "yuv")); 183 slides.push_back(test::ResourcePath("difficult_photo_1850_1110", "yuv"));
170 184
(...skipping 24 matching lines...) Expand all
195 209
196 void Loopback() { 210 void Loopback() {
197 test::Loopback::Config config{flags::Width(), 211 test::Loopback::Config config{flags::Width(),
198 flags::Height(), 212 flags::Height(),
199 flags::Fps(), 213 flags::Fps(),
200 flags::MinBitrate(), 214 flags::MinBitrate(),
201 flags::StartBitrate(), 215 flags::StartBitrate(),
202 flags::MaxBitrate(), 216 flags::MaxBitrate(),
203 flags::MinTransmitBitrate(), 217 flags::MinTransmitBitrate(),
204 flags::Codec(), 218 flags::Codec(),
205 0, // Default number of temporal layers. 219 flags::NumTemporalLayers(),
206 flags::LossPercent(), 220 flags::LossPercent(),
207 flags::LinkCapacity(), 221 flags::LinkCapacity(),
208 flags::QueueSize(), 222 flags::QueueSize(),
209 flags::AvgPropagationDelayMs(), 223 flags::AvgPropagationDelayMs(),
210 flags::StdPropagationDelayMs(), 224 flags::StdPropagationDelayMs(),
211 flags::FLAGS_logs}; 225 flags::FLAGS_logs};
212 ScreenshareLoopback loopback(config); 226 ScreenshareLoopback loopback(config);
213 loopback.Run(); 227 loopback.Run();
214 } 228 }
215 } // namespace webrtc 229 } // namespace webrtc
216 230
217 int main(int argc, char* argv[]) { 231 int main(int argc, char* argv[]) {
218 ::testing::InitGoogleTest(&argc, argv); 232 ::testing::InitGoogleTest(&argc, argv);
219 google::ParseCommandLineFlags(&argc, &argv, true); 233 google::ParseCommandLineFlags(&argc, &argv, true);
220 webrtc::test::InitFieldTrialsFromString( 234 webrtc::test::InitFieldTrialsFromString(
221 webrtc::flags::FLAGS_force_fieldtrials); 235 webrtc::flags::FLAGS_force_fieldtrials);
222 webrtc::test::RunTest(webrtc::Loopback); 236 webrtc::test::RunTest(webrtc::Loopback);
223 return 0; 237 return 0;
224 } 238 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698