blob: 836b8c3b30083a3704496cbe32bb94ea649f9b91 [file] [log] [blame]
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +00001/*
2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
3 *
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
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10#include <stdio.h>
11
Rasmus Brandt2666cf72017-09-29 13:48:31 +020012#include <string>
13
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020014#include "modules/pacing/alr_detector.h"
15#include "test/field_trial.h"
16#include "test/gtest.h"
17#include "video/video_quality_test.h"
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +000018
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +000019namespace webrtc {
20
sprang89c4a7e2017-06-30 13:27:40 -070021namespace {
brandtrdd369c62016-11-16 23:56:57 -080022static const int kFullStackTestDurationSecs = 45;
sprang89c4a7e2017-06-30 13:27:40 -070023} // namespace
pbos@webrtc.orgb613b5a2013-12-03 10:13:04 +000024
ivica5d6a06c2015-09-17 05:30:24 -070025class FullStackTest : public VideoQualityTest {
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +000026 public:
ivica5d6a06c2015-09-17 05:30:24 -070027 void RunTest(const VideoQualityTest::Params &params) {
28 RunWithAnalyzer(params);
pbos@webrtc.org94015242013-10-16 11:05:37 +000029 }
sprang89c4a7e2017-06-30 13:27:40 -070030
31 protected:
32 const std::string kScreenshareSimulcastExperiment =
33 "WebRTC-SimulcastScreenshare/Enabled/";
34 const std::string kAlrProbingExperiment =
35 std::string(AlrDetector::kScreenshareProbingBweExperimentName) +
ilnik2ae19db2017-08-31 04:46:45 -070036 "/1.1,2875,85,20,-20,0/";
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +000037};
38
sprangce4aef12015-11-02 07:23:20 -080039// VideoQualityTest::Params params = {
40// { ... }, // Common.
41// { ... }, // Video-specific settings.
42// { ... }, // Screenshare-specific settings.
43// { ... }, // Analyzer settings.
44// pipe, // FakeNetworkPipe::Config
45// { ... }, // Spatial scalability.
46// logs // bool
47// };
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +000048
Peter Boström12996152016-05-14 02:03:18 +020049#if !defined(RTC_DISABLE_VP9)
asapersson88b0a222016-02-12 13:16:43 -080050TEST_F(FullStackTest, ForemanCifWithoutPacketLossVp9) {
brandtr93c5d032016-11-30 07:50:07 -080051 // TODO(pbos): Decide on psnr/ssim thresholds for foreman_cif.
52 VideoQualityTest::Params foreman_cif;
53 foreman_cif.call.send_side_bwe = true;
Rasmus Brandt2666cf72017-09-29 13:48:31 +020054 foreman_cif.video = {true, 352, 288, 30, 700000, 700000,
55 700000, false, "VP9", false, false, 1,
56 0, 0, false, false, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -080057 foreman_cif.analyzer = {"foreman_cif_net_delay_0_0_plr_0_VP9", 0.0, 0.0,
58 kFullStackTestDurationSecs};
59 RunTest(foreman_cif);
asapersson88b0a222016-02-12 13:16:43 -080060}
61
62TEST_F(FullStackTest, ForemanCifPlr5Vp9) {
brandtr93c5d032016-11-30 07:50:07 -080063 VideoQualityTest::Params foreman_cif;
64 foreman_cif.call.send_side_bwe = true;
Rasmus Brandt2666cf72017-09-29 13:48:31 +020065 foreman_cif.video = {true, 352, 288, 30, 30000, 500000,
66 2000000, false, "VP9", false, false, 1,
67 0, 0, false, false, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -080068 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5_VP9", 0.0, 0.0,
69 kFullStackTestDurationSecs};
70 foreman_cif.pipe.loss_percent = 5;
71 foreman_cif.pipe.queue_delay_ms = 50;
72 RunTest(foreman_cif);
asapersson88b0a222016-02-12 13:16:43 -080073}
Peter Boström12996152016-05-14 02:03:18 +020074#endif // !defined(RTC_DISABLE_VP9)
asapersson88b0a222016-02-12 13:16:43 -080075
pbos@webrtc.org994d0b72014-06-27 08:47:52 +000076TEST_F(FullStackTest, ParisQcifWithoutPacketLoss) {
minyue626bc952016-10-31 05:47:02 -070077 VideoQualityTest::Params paris_qcif;
78 paris_qcif.call.send_side_bwe = true;
Rasmus Brandt2666cf72017-09-29 13:48:31 +020079 paris_qcif.video = {true, 176, 144, 30, 300000, 300000,
80 300000, false, "VP8", false, false, 1,
81 0, 0, false, false, "paris_qcif"};
minyue626bc952016-10-31 05:47:02 -070082 paris_qcif.analyzer = {"net_delay_0_0_plr_0", 36.0, 0.96,
83 kFullStackTestDurationSecs};
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +000084 RunTest(paris_qcif);
pbos@webrtc.org994d0b72014-06-27 08:47:52 +000085}
86
87TEST_F(FullStackTest, ForemanCifWithoutPacketLoss) {
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +000088 // TODO(pbos): Decide on psnr/ssim thresholds for foreman_cif.
minyue626bc952016-10-31 05:47:02 -070089 VideoQualityTest::Params foreman_cif;
90 foreman_cif.call.send_side_bwe = true;
Rasmus Brandt2666cf72017-09-29 13:48:31 +020091 foreman_cif.video = {true, 352, 288, 30, 700000, 700000,
92 700000, false, "VP8", false, false, 1,
93 0, 0, false, false, "foreman_cif"};
minyue626bc952016-10-31 05:47:02 -070094 foreman_cif.analyzer = {"foreman_cif_net_delay_0_0_plr_0", 0.0, 0.0,
95 kFullStackTestDurationSecs};
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +000096 RunTest(foreman_cif);
pbos@webrtc.org994d0b72014-06-27 08:47:52 +000097}
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +000098
asaperssonfb6ad3b2016-12-16 06:54:01 -080099TEST_F(FullStackTest, ForemanCif30kbpsWithoutPacketLoss) {
100 VideoQualityTest::Params foreman_cif;
101 foreman_cif.call.send_side_bwe = true;
Rasmus Brandt2666cf72017-09-29 13:48:31 +0200102 foreman_cif.video = {true, 352, 288, 10, 30000, 30000,
103 30000, false, "VP8", false, false, 1,
104 0, 0, false, false, "foreman_cif"};
asaperssonfb6ad3b2016-12-16 06:54:01 -0800105 foreman_cif.analyzer = {"foreman_cif_30kbps_net_delay_0_0_plr_0", 0.0, 0.0,
106 kFullStackTestDurationSecs};
107 RunTest(foreman_cif);
108}
109
sprang@webrtc.org343096a2015-02-23 08:34:17 +0000110TEST_F(FullStackTest, ForemanCifPlr5) {
minyue626bc952016-10-31 05:47:02 -0700111 VideoQualityTest::Params foreman_cif;
112 foreman_cif.call.send_side_bwe = true;
Rasmus Brandt2666cf72017-09-29 13:48:31 +0200113 foreman_cif.video = {true, 352, 288, 30, 30000, 500000,
114 2000000, false, "VP8", false, false, 1,
115 0, 0, false, false, "foreman_cif"};
minyue626bc952016-10-31 05:47:02 -0700116 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5", 0.0, 0.0,
117 kFullStackTestDurationSecs};
ivica5d6a06c2015-09-17 05:30:24 -0700118 foreman_cif.pipe.loss_percent = 5;
119 foreman_cif.pipe.queue_delay_ms = 50;
stefan@webrtc.orgc216b9a2014-10-14 10:38:49 +0000120 RunTest(foreman_cif);
121}
122
brandtr93c5d032016-11-30 07:50:07 -0800123TEST_F(FullStackTest, ForemanCifPlr5Ulpfec) {
124 VideoQualityTest::Params foreman_cif;
125 foreman_cif.call.send_side_bwe = true;
Rasmus Brandt2666cf72017-09-29 13:48:31 +0200126 foreman_cif.video = {true, 352, 288, 30, 30000, 500000,
127 2000000, false, "VP8", false, false, 1,
128 0, 0, true, false, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -0800129 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5_ulpfec", 0.0, 0.0,
130 kFullStackTestDurationSecs};
131 foreman_cif.pipe.loss_percent = 5;
132 foreman_cif.pipe.queue_delay_ms = 50;
133 RunTest(foreman_cif);
134}
135
136TEST_F(FullStackTest, ForemanCifPlr5Flexfec) {
137 VideoQualityTest::Params foreman_cif;
138 foreman_cif.call.send_side_bwe = true;
Rasmus Brandt2666cf72017-09-29 13:48:31 +0200139 foreman_cif.video = {true, 352, 288, 30, 30000, 500000,
140 2000000, false, "VP8", false, false, 1,
141 0, 0, false, true, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -0800142 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5_flexfec", 0.0, 0.0,
143 kFullStackTestDurationSecs};
144 foreman_cif.pipe.loss_percent = 5;
145 foreman_cif.pipe.queue_delay_ms = 50;
146 RunTest(foreman_cif);
147}
148
stefan889d9652017-07-05 03:03:02 -0700149TEST_F(FullStackTest, ForemanCif500kbpsPlr3Flexfec) {
150 VideoQualityTest::Params foreman_cif;
151 foreman_cif.call.send_side_bwe = true;
Rasmus Brandt2666cf72017-09-29 13:48:31 +0200152 foreman_cif.video = {true, 352, 288, 30, 30000, 500000,
153 2000000, false, "VP8", false, false, 1,
154 0, 0, false, true, "foreman_cif"};
stefan889d9652017-07-05 03:03:02 -0700155 foreman_cif.analyzer = {"foreman_cif_500kbps_delay_50_0_plr_3_flexfec", 0.0,
156 0.0, kFullStackTestDurationSecs};
157 foreman_cif.pipe.loss_percent = 3;
158 foreman_cif.pipe.link_capacity_kbps = 500;
159 foreman_cif.pipe.queue_delay_ms = 50;
160 RunTest(foreman_cif);
161}
162
163TEST_F(FullStackTest, ForemanCif500kbpsPlr3Ulpfec) {
164 VideoQualityTest::Params foreman_cif;
165 foreman_cif.call.send_side_bwe = true;
Rasmus Brandt2666cf72017-09-29 13:48:31 +0200166 foreman_cif.video = {true, 352, 288, 30, 30000, 500000,
167 2000000, false, "VP8", false, false, 1,
168 0, 0, true, false, "foreman_cif"};
stefan889d9652017-07-05 03:03:02 -0700169 foreman_cif.analyzer = {"foreman_cif_500kbps_delay_50_0_plr_3_ulpfec", 0.0,
170 0.0, kFullStackTestDurationSecs};
171 foreman_cif.pipe.loss_percent = 3;
172 foreman_cif.pipe.link_capacity_kbps = 500;
173 foreman_cif.pipe.queue_delay_ms = 50;
174 RunTest(foreman_cif);
175}
176
brandtrdd369c62016-11-16 23:56:57 -0800177#if defined(WEBRTC_USE_H264)
178TEST_F(FullStackTest, ForemanCifWithoutPacketlossH264) {
brandtr93c5d032016-11-30 07:50:07 -0800179 // TODO(pbos): Decide on psnr/ssim thresholds for foreman_cif.
180 VideoQualityTest::Params foreman_cif;
181 foreman_cif.call.send_side_bwe = true;
Rasmus Brandt2666cf72017-09-29 13:48:31 +0200182 foreman_cif.video = {true, 352, 288, 30, 700000, 700000,
183 700000, false, "H264", false, false, 1,
184 0, 0, false, false, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -0800185 foreman_cif.analyzer = {"foreman_cif_net_delay_0_0_plr_0_H264", 0.0, 0.0,
186 kFullStackTestDurationSecs};
187 RunTest(foreman_cif);
brandtrdd369c62016-11-16 23:56:57 -0800188}
189
asaperssonfb6ad3b2016-12-16 06:54:01 -0800190TEST_F(FullStackTest, ForemanCif30kbpsWithoutPacketlossH264) {
191 VideoQualityTest::Params foreman_cif;
192 foreman_cif.call.send_side_bwe = true;
Rasmus Brandt2666cf72017-09-29 13:48:31 +0200193 foreman_cif.video = {true, 352, 288, 10, 30000, 30000,
194 30000, false, "H264", false, false, 1,
195 0, 0, false, false, "foreman_cif"};
asaperssonfb6ad3b2016-12-16 06:54:01 -0800196 foreman_cif.analyzer = {"foreman_cif_30kbps_net_delay_0_0_plr_0_H264", 0.0,
197 0.0, kFullStackTestDurationSecs};
198 RunTest(foreman_cif);
199}
200
brandtrdd369c62016-11-16 23:56:57 -0800201TEST_F(FullStackTest, ForemanCifPlr5H264) {
brandtr93c5d032016-11-30 07:50:07 -0800202 VideoQualityTest::Params foreman_cif;
203 foreman_cif.call.send_side_bwe = true;
Rasmus Brandt2666cf72017-09-29 13:48:31 +0200204 foreman_cif.video = {true, 352, 288, 30, 30000, 500000,
205 2000000, false, "H264", false, false, 1,
206 0, 0, false, false, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -0800207 std::string fec_description;
208 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5_H264", 0.0, 0.0,
209 kFullStackTestDurationSecs};
210 foreman_cif.pipe.loss_percent = 5;
211 foreman_cif.pipe.queue_delay_ms = 50;
212 RunTest(foreman_cif);
brandtrdd369c62016-11-16 23:56:57 -0800213}
214
215// Verify that this is worth the bot time, before enabling.
216TEST_F(FullStackTest, ForemanCifPlr5H264Flexfec) {
brandtr93c5d032016-11-30 07:50:07 -0800217 VideoQualityTest::Params foreman_cif;
218 foreman_cif.call.send_side_bwe = true;
Rasmus Brandt2666cf72017-09-29 13:48:31 +0200219 foreman_cif.video = {true, 352, 288, 30, 30000, 500000,
220 2000000, false, "H264", false, false, 1,
221 0, 0, false, true, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -0800222 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5_H264_flexfec", 0.0, 0.0,
223 kFullStackTestDurationSecs};
224 foreman_cif.pipe.loss_percent = 5;
225 foreman_cif.pipe.queue_delay_ms = 50;
226 RunTest(foreman_cif);
brandtrdd369c62016-11-16 23:56:57 -0800227}
228
229// Ulpfec with H264 is an unsupported combination, so this test is only useful
230// for debugging. It is therefore disabled by default.
231TEST_F(FullStackTest, DISABLED_ForemanCifPlr5H264Ulpfec) {
brandtr93c5d032016-11-30 07:50:07 -0800232 VideoQualityTest::Params foreman_cif;
233 foreman_cif.call.send_side_bwe = true;
Rasmus Brandt2666cf72017-09-29 13:48:31 +0200234 foreman_cif.video = {true, 352, 288, 30, 30000, 500000,
235 2000000, false, "H264", false, false, 1,
236 0, 0, true, false, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -0800237 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5_H264_ulpfec", 0.0, 0.0,
238 kFullStackTestDurationSecs};
239 foreman_cif.pipe.loss_percent = 5;
240 foreman_cif.pipe.queue_delay_ms = 50;
241 RunTest(foreman_cif);
brandtrdd369c62016-11-16 23:56:57 -0800242}
243#endif // defined(WEBRTC_USE_H264)
244
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000245TEST_F(FullStackTest, ForemanCif500kbps) {
minyue626bc952016-10-31 05:47:02 -0700246 VideoQualityTest::Params foreman_cif;
247 foreman_cif.call.send_side_bwe = true;
Rasmus Brandt2666cf72017-09-29 13:48:31 +0200248 foreman_cif.video = {true, 352, 288, 30, 30000, 500000,
249 2000000, false, "VP8", false, false, 1,
250 0, 0, false, false, "foreman_cif"};
minyue626bc952016-10-31 05:47:02 -0700251 foreman_cif.analyzer = {"foreman_cif_500kbps", 0.0, 0.0,
252 kFullStackTestDurationSecs};
ivica5d6a06c2015-09-17 05:30:24 -0700253 foreman_cif.pipe.queue_length_packets = 0;
254 foreman_cif.pipe.queue_delay_ms = 0;
255 foreman_cif.pipe.link_capacity_kbps = 500;
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000256 RunTest(foreman_cif);
257}
258
Rasmus Brandt2666cf72017-09-29 13:48:31 +0200259TEST_F(FullStackTest, ForemanSqcif30kbpsLibvpx) {
260 VideoQualityTest::Params foreman_sqcif;
261 foreman_sqcif.call.send_side_bwe = true;
262 foreman_sqcif.video = {true, 128, 96, 7, 30000, 30000,
263 2000000, false, "VP8", false, false, 1,
264 0, 0, false, false, "foreman_128x96"};
265 foreman_sqcif.analyzer = {"foreman_sqcif_30kbps_libvpx", 0.0, 0.0,
266 kFullStackTestDurationSecs};
267 foreman_sqcif.pipe.link_capacity_kbps = 30;
268 RunTest(foreman_sqcif);
269}
270
271TEST_F(FullStackTest, Foreman240p100kbpsLibvpx) {
272 VideoQualityTest::Params foreman_240p;
273 foreman_240p.call.send_side_bwe = true;
274 foreman_240p.video = {
275 true, 320, 240, 10, 30000, 100000, 2000000, false, "VP8", false,
276 false, 1, 0, 0, false, false, "foreman_320x240"};
277 foreman_240p.analyzer = {"foreman_240p_100kbps_libvpx", 0.0, 0.0,
278 kFullStackTestDurationSecs};
279 foreman_240p.pipe.link_capacity_kbps = 100;
280 RunTest(foreman_240p);
281}
282
283#if defined(WEBRTC_ANDROID)
284// TODO(brandtr): Enable when the test is more robust against failing encoders,
285// or when the perf waterfall Android bots all support sqcif.
286TEST_F(FullStackTest, DISABLED_ForemanSqcif30kbpsMediaCodec) {
287 VideoQualityTest::Params foreman_sqcif;
288 foreman_sqcif.call.send_side_bwe = true;
289 foreman_sqcif.video = {true, 128, 96, 7, 30000, 30000,
290 2000000, false, "VP8", true, false, 1,
291 0, 0, false, false, "foreman_128x96"};
292 foreman_sqcif.analyzer = {"foreman_sqcif_30kbps_mediacodec", 0.0, 0.0,
293 kFullStackTestDurationSecs};
294 foreman_sqcif.pipe.link_capacity_kbps = 30;
295 RunTest(foreman_sqcif);
296}
297
298TEST_F(FullStackTest, Foreman240p100kbpsMediaCodec) {
299 VideoQualityTest::Params foreman_240p;
300 foreman_240p.call.send_side_bwe = true;
301 foreman_240p.video = {
302 true, 320, 240, 10, 30000, 100000, 2000000, false, "VP8", true,
303 false, 1, 0, 0, false, false, "foreman_320x240"};
304 foreman_240p.analyzer = {"foreman_240p_100kbps_mediacodec", 0.0, 0.0,
305 kFullStackTestDurationSecs};
306 foreman_240p.pipe.link_capacity_kbps = 100;
307 RunTest(foreman_240p);
308}
309
310TEST_F(FullStackTest, Foreman240p100kbpsMediaCodecWithForcedSwFallback) {
311 std::string field_trial =
312 "WebRTC-VP8-Forced-Fallback-Encoder/Enabled-150,175," +
313 std::to_string(1000 * kFullStackTestDurationSecs / 2) + ",19200/";
314 test::ScopedFieldTrials override_field_trials(field_trial);
315
316 VideoQualityTest::Params foreman_240p;
317 foreman_240p.call.send_side_bwe = true;
318 foreman_240p.video = {
319 true, 320, 240, 10, 30000, 100000, 2000000, false, "VP8", true,
320 true, 1, 0, 0, false, false, "foreman_320x240"};
321 foreman_240p.analyzer = {"foreman_240p_100kbps_mediacodec_sw_fallback", 0.0,
322 0.0, kFullStackTestDurationSecs};
323 foreman_240p.pipe.link_capacity_kbps = 100;
324 RunTest(foreman_240p);
325}
326#endif // defined(WEBRTC_ANDROID)
327
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000328TEST_F(FullStackTest, ForemanCif500kbpsLimitedQueue) {
minyue626bc952016-10-31 05:47:02 -0700329 VideoQualityTest::Params foreman_cif;
330 foreman_cif.call.send_side_bwe = true;
Rasmus Brandt2666cf72017-09-29 13:48:31 +0200331 foreman_cif.video = {true, 352, 288, 30, 30000, 500000,
332 2000000, false, "VP8", false, false, 1,
333 0, 0, false, false, "foreman_cif"};
minyue626bc952016-10-31 05:47:02 -0700334 foreman_cif.analyzer = {"foreman_cif_500kbps_32pkts_queue", 0.0, 0.0,
335 kFullStackTestDurationSecs};
ivica5d6a06c2015-09-17 05:30:24 -0700336 foreman_cif.pipe.queue_length_packets = 32;
337 foreman_cif.pipe.queue_delay_ms = 0;
338 foreman_cif.pipe.link_capacity_kbps = 500;
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000339 RunTest(foreman_cif);
340}
341
342TEST_F(FullStackTest, ForemanCif500kbps100ms) {
minyue626bc952016-10-31 05:47:02 -0700343 VideoQualityTest::Params foreman_cif;
344 foreman_cif.call.send_side_bwe = true;
Rasmus Brandt2666cf72017-09-29 13:48:31 +0200345 foreman_cif.video = {true, 352, 288, 30, 30000, 500000,
346 2000000, false, "VP8", false, false, 1,
347 0, 0, false, false, "foreman_cif"};
minyue626bc952016-10-31 05:47:02 -0700348 foreman_cif.analyzer = {"foreman_cif_500kbps_100ms", 0.0, 0.0,
349 kFullStackTestDurationSecs};
ivica5d6a06c2015-09-17 05:30:24 -0700350 foreman_cif.pipe.queue_length_packets = 0;
351 foreman_cif.pipe.queue_delay_ms = 100;
352 foreman_cif.pipe.link_capacity_kbps = 500;
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000353 RunTest(foreman_cif);
354}
355
356TEST_F(FullStackTest, ForemanCif500kbps100msLimitedQueue) {
minyue626bc952016-10-31 05:47:02 -0700357 VideoQualityTest::Params foreman_cif;
358 foreman_cif.call.send_side_bwe = true;
Rasmus Brandt2666cf72017-09-29 13:48:31 +0200359 foreman_cif.video = {true, 352, 288, 30, 30000, 500000,
360 2000000, false, "VP8", false, false, 1,
361 0, 0, false, false, "foreman_cif"};
minyue626bc952016-10-31 05:47:02 -0700362 foreman_cif.analyzer = {"foreman_cif_500kbps_100ms_32pkts_queue", 0.0, 0.0,
363 kFullStackTestDurationSecs};
stefanb1797672016-08-11 07:00:57 -0700364 foreman_cif.pipe.queue_length_packets = 32;
365 foreman_cif.pipe.queue_delay_ms = 100;
366 foreman_cif.pipe.link_capacity_kbps = 500;
367 RunTest(foreman_cif);
368}
369
370TEST_F(FullStackTest, ForemanCif500kbps100msLimitedQueueRecvBwe) {
minyue626bc952016-10-31 05:47:02 -0700371 VideoQualityTest::Params foreman_cif;
brandtr93c5d032016-11-30 07:50:07 -0800372 foreman_cif.call.send_side_bwe = false;
Rasmus Brandt2666cf72017-09-29 13:48:31 +0200373 foreman_cif.video = {true, 352, 288, 30, 30000, 500000,
374 2000000, false, "VP8", false, false, 1,
375 0, 0, false, false, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -0800376 foreman_cif.analyzer = {"foreman_cif_500kbps_100ms_32pkts_queue_recv_bwe",
377 0.0, 0.0, kFullStackTestDurationSecs};
ivica5d6a06c2015-09-17 05:30:24 -0700378 foreman_cif.pipe.queue_length_packets = 32;
379 foreman_cif.pipe.queue_delay_ms = 100;
380 foreman_cif.pipe.link_capacity_kbps = 500;
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000381 RunTest(foreman_cif);
382}
383
384TEST_F(FullStackTest, ForemanCif1000kbps100msLimitedQueue) {
minyue626bc952016-10-31 05:47:02 -0700385 VideoQualityTest::Params foreman_cif;
386 foreman_cif.call.send_side_bwe = true;
Rasmus Brandt2666cf72017-09-29 13:48:31 +0200387 foreman_cif.video = {true, 352, 288, 30, 30000, 2000000,
388 2000000, false, "VP8", false, false, 1,
389 0, 0, false, false, "foreman_cif"};
minyue626bc952016-10-31 05:47:02 -0700390 foreman_cif.analyzer = {"foreman_cif_1000kbps_100ms_32pkts_queue", 0.0, 0.0,
391 kFullStackTestDurationSecs};
ivica5d6a06c2015-09-17 05:30:24 -0700392 foreman_cif.pipe.queue_length_packets = 32;
393 foreman_cif.pipe.queue_delay_ms = 100;
394 foreman_cif.pipe.link_capacity_kbps = 1000;
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000395 RunTest(foreman_cif);
396}
sprang@webrtc.org131bea82015-02-18 12:46:06 +0000397
sprangff19d352017-09-06 07:14:02 -0700398// TODO(sprang): Remove this if we have the similar ModerateLimits below?
stefanb1797672016-08-11 07:00:57 -0700399TEST_F(FullStackTest, ConferenceMotionHd2000kbps100msLimitedQueue) {
minyue626bc952016-10-31 05:47:02 -0700400 VideoQualityTest::Params conf_motion_hd;
401 conf_motion_hd.call.send_side_bwe = true;
Rasmus Brandt2666cf72017-09-29 13:48:31 +0200402 conf_motion_hd.video = {true,
403 1280,
404 720,
405 50,
406 30000,
407 3000000,
408 3000000,
409 false,
410 "VP8",
411 false,
412 false,
413 1,
414 0,
415 0,
416 false,
417 false,
418 "ConferenceMotion_1280_720_50"};
minyue626bc952016-10-31 05:47:02 -0700419 conf_motion_hd.analyzer = {"conference_motion_hd_2000kbps_100ms_32pkts_queue",
420 0.0, 0.0, kFullStackTestDurationSecs};
stefanb1797672016-08-11 07:00:57 -0700421 conf_motion_hd.pipe.queue_length_packets = 32;
422 conf_motion_hd.pipe.queue_delay_ms = 100;
423 conf_motion_hd.pipe.link_capacity_kbps = 2000;
424 RunTest(conf_motion_hd);
425}
426
sprangff19d352017-09-06 07:14:02 -0700427TEST_F(FullStackTest, ConferenceMotionHd1TLModerateLimits) {
428 VideoQualityTest::Params conf_motion_hd;
429 conf_motion_hd.call.send_side_bwe = true;
Rasmus Brandt2666cf72017-09-29 13:48:31 +0200430 conf_motion_hd.video = {true,
431 1280,
432 720,
433 50,
434 30000,
435 3000000,
436 3000000,
437 false,
438 "VP8",
439 false,
440 false,
441 1,
442 -1,
443 0,
444 false,
445 false,
446 "ConferenceMotion_1280_720_50"};
sprangff19d352017-09-06 07:14:02 -0700447 conf_motion_hd.analyzer = {"conference_motion_hd_1tl_moderate_limits", 0.0,
448 0.0, kFullStackTestDurationSecs};
449 conf_motion_hd.pipe.queue_length_packets = 50;
450 conf_motion_hd.pipe.loss_percent = 3;
451 conf_motion_hd.pipe.queue_delay_ms = 100;
452 conf_motion_hd.pipe.link_capacity_kbps = 2000;
453 RunTest(conf_motion_hd);
454}
455
456TEST_F(FullStackTest, ConferenceMotionHd2TLModerateLimits) {
457 VideoQualityTest::Params conf_motion_hd;
458 conf_motion_hd.call.send_side_bwe = true;
Rasmus Brandt2666cf72017-09-29 13:48:31 +0200459 conf_motion_hd.video = {true,
460 1280,
461 720,
462 50,
463 30000,
464 3000000,
465 3000000,
466 false,
467 "VP8",
468 false,
469 false,
470 2,
471 -1,
472 0,
473 false,
474 false,
475 "ConferenceMotion_1280_720_50"};
sprangff19d352017-09-06 07:14:02 -0700476 conf_motion_hd.analyzer = {"conference_motion_hd_2tl_moderate_limits", 0.0,
477 0.0, kFullStackTestDurationSecs};
478 conf_motion_hd.pipe.queue_length_packets = 50;
479 conf_motion_hd.pipe.loss_percent = 3;
480 conf_motion_hd.pipe.queue_delay_ms = 100;
481 conf_motion_hd.pipe.link_capacity_kbps = 2000;
482 RunTest(conf_motion_hd);
483}
484
485TEST_F(FullStackTest, ConferenceMotionHd3TLModerateLimits) {
486 VideoQualityTest::Params conf_motion_hd;
487 conf_motion_hd.call.send_side_bwe = true;
Rasmus Brandt2666cf72017-09-29 13:48:31 +0200488 conf_motion_hd.video = {true,
489 1280,
490 720,
491 50,
492 30000,
493 3000000,
494 3000000,
495 false,
496 "VP8",
497 false,
498 false,
499 3,
500 -1,
501 0,
502 false,
503 false,
504 "ConferenceMotion_1280_720_50"};
sprangff19d352017-09-06 07:14:02 -0700505 conf_motion_hd.analyzer = {"conference_motion_hd_3tl_moderate_limits", 0.0,
506 0.0, kFullStackTestDurationSecs};
507 conf_motion_hd.pipe.queue_length_packets = 50;
508 conf_motion_hd.pipe.loss_percent = 3;
509 conf_motion_hd.pipe.queue_delay_ms = 100;
510 conf_motion_hd.pipe.link_capacity_kbps = 2000;
511 RunTest(conf_motion_hd);
512}
513
514TEST_F(FullStackTest, ConferenceMotionHd4TLModerateLimits) {
515 VideoQualityTest::Params conf_motion_hd;
516 conf_motion_hd.call.send_side_bwe = true;
Rasmus Brandt2666cf72017-09-29 13:48:31 +0200517 conf_motion_hd.video = {true,
518 1280,
519 720,
520 50,
521 30000,
522 3000000,
523 3000000,
524 false,
525 "VP8",
526 false,
527 false,
528 4,
529 -1,
530 0,
531 false,
532 false,
533 "ConferenceMotion_1280_720_50"};
sprangff19d352017-09-06 07:14:02 -0700534 conf_motion_hd.analyzer = {"conference_motion_hd_4tl_moderate_limits", 0.0,
535 0.0, kFullStackTestDurationSecs};
536 conf_motion_hd.pipe.queue_length_packets = 50;
537 conf_motion_hd.pipe.loss_percent = 3;
538 conf_motion_hd.pipe.queue_delay_ms = 100;
539 conf_motion_hd.pipe.link_capacity_kbps = 2000;
540 RunTest(conf_motion_hd);
541}
542
543TEST_F(FullStackTest, ConferenceMotionHd3TLModerateLimitsAltTLPattern) {
544 test::ScopedFieldTrials field_trial("WebRTC-UseShortVP8TL3Pattern/Enabled/");
545 VideoQualityTest::Params conf_motion_hd;
546 conf_motion_hd.call.send_side_bwe = true;
Rasmus Brandt2666cf72017-09-29 13:48:31 +0200547 conf_motion_hd.video = {true,
548 1280,
549 720,
550 50,
551 30000,
552 3000000,
553 3000000,
554 false,
555 "VP8",
556 false,
557 false,
558 3,
559 -1,
560 0,
561 false,
562 false,
563 "ConferenceMotion_1280_720_50"};
sprangff19d352017-09-06 07:14:02 -0700564 conf_motion_hd.analyzer = {"conference_motion_hd_3tl_alt_moderate_limits",
565 0.0, 0.0, kFullStackTestDurationSecs};
566 conf_motion_hd.pipe.queue_length_packets = 50;
567 conf_motion_hd.pipe.loss_percent = 3;
568 conf_motion_hd.pipe.queue_delay_ms = 100;
569 conf_motion_hd.pipe.link_capacity_kbps = 2000;
570 RunTest(conf_motion_hd);
571}
572
jianj390e64d2017-02-03 09:51:23 -0800573#if !defined(RTC_DISABLE_VP9)
574TEST_F(FullStackTest, ConferenceMotionHd2000kbps100msLimitedQueueVP9) {
575 VideoQualityTest::Params conf_motion_hd;
576 conf_motion_hd.call.send_side_bwe = true;
Rasmus Brandt2666cf72017-09-29 13:48:31 +0200577 conf_motion_hd.video = {true,
578 1280,
579 720,
580 50,
581 30000,
582 3000000,
583 3000000,
584 false,
585 "VP9",
586 false,
587 false,
588 1,
589 0,
590 0,
591 false,
592 false,
593 "ConferenceMotion_1280_720_50"};
jianj390e64d2017-02-03 09:51:23 -0800594 conf_motion_hd.analyzer = {
595 "conference_motion_hd_2000kbps_100ms_32pkts_queue_vp9", 0.0, 0.0,
596 kFullStackTestDurationSecs};
597 conf_motion_hd.pipe.queue_length_packets = 32;
598 conf_motion_hd.pipe.queue_delay_ms = 100;
599 conf_motion_hd.pipe.link_capacity_kbps = 2000;
600 RunTest(conf_motion_hd);
601}
602#endif
603
ivica7bd242e2015-10-06 02:04:06 -0700604TEST_F(FullStackTest, ScreenshareSlidesVP8_2TL) {
minyue626bc952016-10-31 05:47:02 -0700605 VideoQualityTest::Params screenshare;
606 screenshare.call.send_side_bwe = true;
Rasmus Brandt2666cf72017-09-29 13:48:31 +0200607 screenshare.video = {true, 1850, 1110, 5, 50000, 200000,
608 2000000, false, "VP8", false, false, 2,
609 1, 400000, false, false, ""};
erikvarga579de6f2017-08-29 09:12:57 -0700610 screenshare.screenshare = {true, false, 10};
minyue626bc952016-10-31 05:47:02 -0700611 screenshare.analyzer = {"screenshare_slides", 0.0, 0.0,
612 kFullStackTestDurationSecs};
ivica5d6a06c2015-09-17 05:30:24 -0700613 RunTest(screenshare);
Erik SprĂ¥ng6ee69aa2015-09-03 15:58:05 +0200614}
615
ilnikcb8c1462017-03-09 09:23:30 -0800616TEST_F(FullStackTest, ScreenshareSlidesVP8_3TL_Simulcast) {
sprang89c4a7e2017-06-30 13:27:40 -0700617 test::ScopedFieldTrials field_trial(kScreenshareSimulcastExperiment);
ilnikcb8c1462017-03-09 09:23:30 -0800618 VideoQualityTest::Params screenshare;
619 screenshare.call.send_side_bwe = true;
erikvarga579de6f2017-08-29 09:12:57 -0700620 screenshare.screenshare = {true, false, 10};
Rasmus Brandt2666cf72017-09-29 13:48:31 +0200621 screenshare.video = {true, 1850, 1110, 5, 800000, 2500000,
622 2500000, false, "VP8", false, false, 3,
623 2, 400000, false, false, ""};
ilnikcb8c1462017-03-09 09:23:30 -0800624 screenshare.analyzer = {"screenshare_slides_simulcast", 0.0, 0.0,
625 kFullStackTestDurationSecs};
626 VideoQualityTest::Params screenshare_params_high;
Rasmus Brandt2666cf72017-09-29 13:48:31 +0200627 screenshare_params_high.video = {
628 true, 1850, 1110, 5, 800000, 2500000, 2500000, false, "VP8",
629 false, false, 3, 0, 400000, false, false, ""};
ilnikcb8c1462017-03-09 09:23:30 -0800630 VideoQualityTest::Params screenshare_params_low;
Rasmus Brandt2666cf72017-09-29 13:48:31 +0200631 screenshare_params_low.video = {true, 1850, 1110, 5, 50000, 200000,
632 2000000, false, "VP8", false, false, 2,
633 0, 400000, false, false, ""};
ilnikcb8c1462017-03-09 09:23:30 -0800634
635 std::vector<VideoStream> streams = {
636 DefaultVideoStream(screenshare_params_low),
637 DefaultVideoStream(screenshare_params_high)};
ilnik6b826ef2017-06-16 06:53:48 -0700638 screenshare.ss = {streams, 1, 1, 0, std::vector<SpatialLayer>(), false};
ilnikcb8c1462017-03-09 09:23:30 -0800639 RunTest(screenshare);
640}
641
ivica7bd242e2015-10-06 02:04:06 -0700642TEST_F(FullStackTest, ScreenshareSlidesVP8_2TL_Scroll) {
minyue626bc952016-10-31 05:47:02 -0700643 VideoQualityTest::Params config;
644 config.call.send_side_bwe = true;
Rasmus Brandt2666cf72017-09-29 13:48:31 +0200645 config.video = {true, 1850, 1110 / 2, 5, 50000, 200000,
646 2000000, false, "VP8", false, false, 2,
647 1, 400000, false, false, ""};
erikvarga579de6f2017-08-29 09:12:57 -0700648 config.screenshare = {true, false, 10, 2};
minyue626bc952016-10-31 05:47:02 -0700649 config.analyzer = {"screenshare_slides_scrolling", 0.0, 0.0,
650 kFullStackTestDurationSecs};
ivica5d6a06c2015-09-17 05:30:24 -0700651 RunTest(config);
ivica028cf482015-07-30 02:15:56 -0700652}
653
sprangee37de32015-11-23 06:10:23 -0800654TEST_F(FullStackTest, ScreenshareSlidesVP8_2TL_LossyNet) {
minyue626bc952016-10-31 05:47:02 -0700655 VideoQualityTest::Params screenshare;
656 screenshare.call.send_side_bwe = true;
Rasmus Brandt2666cf72017-09-29 13:48:31 +0200657 screenshare.video = {true, 1850, 1110, 5, 50000, 200000,
658 2000000, false, "VP8", false, false, 2,
659 1, 400000, false, false, ""};
erikvarga579de6f2017-08-29 09:12:57 -0700660 screenshare.screenshare = {true, false, 10};
minyue626bc952016-10-31 05:47:02 -0700661 screenshare.analyzer = {"screenshare_slides_lossy_net", 0.0, 0.0,
662 kFullStackTestDurationSecs};
sprangee37de32015-11-23 06:10:23 -0800663 screenshare.pipe.loss_percent = 5;
664 screenshare.pipe.queue_delay_ms = 200;
665 screenshare.pipe.link_capacity_kbps = 500;
666 RunTest(screenshare);
667}
668
669TEST_F(FullStackTest, ScreenshareSlidesVP8_2TL_VeryLossyNet) {
minyue626bc952016-10-31 05:47:02 -0700670 VideoQualityTest::Params screenshare;
671 screenshare.call.send_side_bwe = true;
Rasmus Brandt2666cf72017-09-29 13:48:31 +0200672 screenshare.video = {true, 1850, 1110, 5, 50000, 200000,
673 2000000, false, "VP8", false, false, 2,
674 1, 400000, false, false, ""};
erikvarga579de6f2017-08-29 09:12:57 -0700675 screenshare.screenshare = {true, false, 10};
minyue626bc952016-10-31 05:47:02 -0700676 screenshare.analyzer = {"screenshare_slides_very_lossy", 0.0, 0.0,
677 kFullStackTestDurationSecs};
sprangee37de32015-11-23 06:10:23 -0800678 screenshare.pipe.loss_percent = 10;
679 screenshare.pipe.queue_delay_ms = 200;
680 screenshare.pipe.link_capacity_kbps = 500;
681 RunTest(screenshare);
682}
683
sprange566e172017-06-08 01:29:15 -0700684TEST_F(FullStackTest, ScreenshareSlidesVP8_2TL_LossyNetRestrictedQueue) {
685 VideoQualityTest::Params screenshare;
686 screenshare.call.send_side_bwe = true;
Rasmus Brandt2666cf72017-09-29 13:48:31 +0200687 screenshare.video = {true, 1850, 1110, 5, 50000, 200000,
688 2000000, false, "VP8", false, false, 2,
689 1, 400000, false, false, ""};
erikvarga579de6f2017-08-29 09:12:57 -0700690 screenshare.screenshare = {true, false, 10};
sprange566e172017-06-08 01:29:15 -0700691 screenshare.analyzer = {"screenshare_slides_lossy_limited", 0.0, 0.0,
692 kFullStackTestDurationSecs};
693 screenshare.pipe.loss_percent = 5;
694 screenshare.pipe.link_capacity_kbps = 200;
695 screenshare.pipe.queue_length_packets = 30;
696
697 RunTest(screenshare);
698}
699
sprang89c4a7e2017-06-30 13:27:40 -0700700TEST_F(FullStackTest, ScreenshareSlidesVP8_2TL_ModeratelyRestricted) {
701 VideoQualityTest::Params screenshare;
702 screenshare.call.send_side_bwe = true;
Rasmus Brandt2666cf72017-09-29 13:48:31 +0200703 screenshare.video = {true, 1850, 1110, 5, 50000, 200000,
704 2000000, false, "VP8", false, false, 2,
705 1, 400000, false, false, ""};
erikvarga579de6f2017-08-29 09:12:57 -0700706 screenshare.screenshare = {true, false, 10};
sprang89c4a7e2017-06-30 13:27:40 -0700707 screenshare.analyzer = {"screenshare_slides_moderately_restricted", 0.0, 0.0,
708 kFullStackTestDurationSecs};
709 screenshare.pipe.loss_percent = 1;
710 screenshare.pipe.link_capacity_kbps = 1200;
711 screenshare.pipe.queue_length_packets = 30;
712
713 RunTest(screenshare);
714}
715
716// TODO(sprang): Retire these tests once experiment is removed.
717TEST_F(FullStackTest, ScreenshareSlidesVP8_2TL_LossyNetRestrictedQueue_ALR) {
718 test::ScopedFieldTrials field_trial(kAlrProbingExperiment);
719 VideoQualityTest::Params screenshare;
720 screenshare.call.send_side_bwe = true;
Rasmus Brandt2666cf72017-09-29 13:48:31 +0200721 screenshare.video = {true, 1850, 1110, 5, 50000, 200000,
722 2000000, false, "VP8", false, false, 2,
723 1, 400000, false, false, ""};
erikvarga579de6f2017-08-29 09:12:57 -0700724 screenshare.screenshare = {true, false, 10};
sprang89c4a7e2017-06-30 13:27:40 -0700725 screenshare.analyzer = {"screenshare_slides_lossy_limited_ALR", 0.0, 0.0,
726 kFullStackTestDurationSecs};
727 screenshare.pipe.loss_percent = 5;
728 screenshare.pipe.link_capacity_kbps = 200;
729 screenshare.pipe.queue_length_packets = 30;
730
731 RunTest(screenshare);
732}
733
734TEST_F(FullStackTest, ScreenshareSlidesVP8_2TL_ALR) {
735 test::ScopedFieldTrials field_trial(kAlrProbingExperiment);
736 VideoQualityTest::Params screenshare;
737 screenshare.call.send_side_bwe = true;
Rasmus Brandt2666cf72017-09-29 13:48:31 +0200738 screenshare.video = {true, 1850, 1110, 5, 50000, 200000,
739 2000000, false, "VP8", false, false, 2,
740 1, 400000, false, false, ""};
erikvarga579de6f2017-08-29 09:12:57 -0700741 screenshare.screenshare = {true, false, 10};
sprang89c4a7e2017-06-30 13:27:40 -0700742 screenshare.analyzer = {"screenshare_slides_ALR", 0.0, 0.0,
743 kFullStackTestDurationSecs};
744 RunTest(screenshare);
745}
746
747TEST_F(FullStackTest, ScreenshareSlidesVP8_2TL_ModeratelyRestricted_ALR) {
748 test::ScopedFieldTrials field_trial(kAlrProbingExperiment);
749 VideoQualityTest::Params screenshare;
750 screenshare.call.send_side_bwe = true;
Rasmus Brandt2666cf72017-09-29 13:48:31 +0200751 screenshare.video = {true, 1850, 1110, 5, 50000, 200000,
752 2000000, false, "VP8", false, false, 2,
753 1, 400000, false, false, ""};
erikvarga579de6f2017-08-29 09:12:57 -0700754 screenshare.screenshare = {true, false, 10};
sprang89c4a7e2017-06-30 13:27:40 -0700755 screenshare.analyzer = {"screenshare_slides_moderately_restricted_ALR", 0.0,
756 0.0, kFullStackTestDurationSecs};
757 screenshare.pipe.loss_percent = 1;
758 screenshare.pipe.link_capacity_kbps = 1200;
759 screenshare.pipe.queue_length_packets = 30;
760
761 RunTest(screenshare);
762}
763
764TEST_F(FullStackTest, ScreenshareSlidesVP8_3TL_Simulcast_ALR) {
765 test::ScopedFieldTrials field_trial(kScreenshareSimulcastExperiment +
766 kAlrProbingExperiment);
767 VideoQualityTest::Params screenshare;
768 screenshare.call.send_side_bwe = true;
erikvarga579de6f2017-08-29 09:12:57 -0700769 screenshare.screenshare = {true, false, 10};
Rasmus Brandt2666cf72017-09-29 13:48:31 +0200770 screenshare.video = {true, 1850, 1110, 5, 800000, 2500000,
771 2500000, false, "VP8", false, false, 3,
772 2, 400000, false, false, ""};
sprang89c4a7e2017-06-30 13:27:40 -0700773 screenshare.analyzer = {"screenshare_slides_simulcast_alr", 0.0, 0.0,
774 kFullStackTestDurationSecs};
775 VideoQualityTest::Params screenshare_params_high;
Rasmus Brandt2666cf72017-09-29 13:48:31 +0200776 screenshare_params_high.video = {
777 true, 1850, 1110, 5, 800000, 2500000, 2500000, false, "VP8",
778 false, false, 3, 0, 400000, false, false, ""};
sprang89c4a7e2017-06-30 13:27:40 -0700779 VideoQualityTest::Params screenshare_params_low;
Rasmus Brandt2666cf72017-09-29 13:48:31 +0200780 screenshare_params_low.video = {true, 1850, 1110, 5, 50000, 200000,
781 2000000, false, "VP8", false, false, 2,
782 0, 400000, false, false, ""};
sprang89c4a7e2017-06-30 13:27:40 -0700783
784 std::vector<VideoStream> streams = {
785 DefaultVideoStream(screenshare_params_low),
786 DefaultVideoStream(screenshare_params_high)};
787 screenshare.ss = {streams, 1, 1, 0, std::vector<SpatialLayer>(), false};
788 RunTest(screenshare);
789}
790
ilnik566c43b2017-03-07 04:42:54 -0800791const VideoQualityTest::Params::Video kSvcVp9Video = {
Rasmus Brandt2666cf72017-09-29 13:48:31 +0200792 true,
793 1280,
794 720,
795 30,
796 800000,
797 2500000,
798 2500000,
799 false,
800 "VP9",
801 false,
802 false,
803 3,
804 2,
805 400000,
806 false,
807 false,
808 "ConferenceMotion_1280_720_50"};
ilnik566c43b2017-03-07 04:42:54 -0800809
810const VideoQualityTest::Params::Video kSimulcastVp8VideoHigh = {
Rasmus Brandt2666cf72017-09-29 13:48:31 +0200811 true,
812 1280,
813 720,
814 30,
815 800000,
816 2500000,
817 2500000,
818 false,
819 "VP8",
820 false,
821 false,
822 3,
823 2,
824 400000,
825 false,
826 false,
827 "ConferenceMotion_1280_720_50"};
ilnik566c43b2017-03-07 04:42:54 -0800828
829const VideoQualityTest::Params::Video kSimulcastVp8VideoMedium = {
Rasmus Brandt2666cf72017-09-29 13:48:31 +0200830 true,
831 640,
832 360,
833 30,
834 150000,
835 500000,
836 700000,
837 false,
838 "VP8",
839 false,
840 false,
841 3,
842 2,
843 400000,
844 false,
845 false,
846 "ConferenceMotion_1280_720_50"};
ilnik566c43b2017-03-07 04:42:54 -0800847
848const VideoQualityTest::Params::Video kSimulcastVp8VideoLow = {
Rasmus Brandt2666cf72017-09-29 13:48:31 +0200849 true,
850 320,
851 180,
852 30,
853 30000,
854 150000,
855 200000,
856 false,
857 "VP8",
858 false,
859 false,
860 3,
861 2,
862 400000,
863 false,
864 false,
865 "ConferenceMotion_1280_720_50"};
ilnik566c43b2017-03-07 04:42:54 -0800866
Peter Boström12996152016-05-14 02:03:18 +0200867#if !defined(RTC_DISABLE_VP9)
marpan5f4aaeb2017-04-06 10:52:23 -0700868TEST_F(FullStackTest, ScreenshareSlidesVP9_2SL) {
minyue626bc952016-10-31 05:47:02 -0700869 VideoQualityTest::Params screenshare;
870 screenshare.call.send_side_bwe = true;
Rasmus Brandt2666cf72017-09-29 13:48:31 +0200871 screenshare.video = {true, 1850, 1110, 5, 50000, 200000,
872 2000000, false, "VP9", false, false, 1,
873 0, 400000, false, false, ""};
erikvarga579de6f2017-08-29 09:12:57 -0700874 screenshare.screenshare = {true, false, 10};
minyue626bc952016-10-31 05:47:02 -0700875 screenshare.analyzer = {"screenshare_slides_vp9_2sl", 0.0, 0.0,
876 kFullStackTestDurationSecs};
ilnik6b826ef2017-06-16 06:53:48 -0700877 screenshare.ss = {std::vector<VideoStream>(), 0, 2, 1,
878 std::vector<SpatialLayer>(), false};
ivica5d6a06c2015-09-17 05:30:24 -0700879 RunTest(screenshare);
sprang@webrtc.org131bea82015-02-18 12:46:06 +0000880}
ilnik2a8c2f52017-02-15 02:23:28 -0800881
882TEST_F(FullStackTest, VP9SVC_3SL_High) {
883 VideoQualityTest::Params simulcast;
884 simulcast.call.send_side_bwe = true;
ilnik566c43b2017-03-07 04:42:54 -0800885 simulcast.video = kSvcVp9Video;
ilnik2a8c2f52017-02-15 02:23:28 -0800886 simulcast.analyzer = {"vp9svc_3sl_high", 0.0, 0.0,
887 kFullStackTestDurationSecs};
ilnik6b826ef2017-06-16 06:53:48 -0700888 simulcast.ss = {std::vector<VideoStream>(), 0, 3, 2,
889 std::vector<SpatialLayer>(), false};
ilnik2a8c2f52017-02-15 02:23:28 -0800890 RunTest(simulcast);
891}
892
893TEST_F(FullStackTest, VP9SVC_3SL_Medium) {
894 VideoQualityTest::Params simulcast;
895 simulcast.call.send_side_bwe = true;
ilnik566c43b2017-03-07 04:42:54 -0800896 simulcast.video = kSvcVp9Video;
ilnik2a8c2f52017-02-15 02:23:28 -0800897 simulcast.analyzer = {"vp9svc_3sl_medium", 0.0, 0.0,
898 kFullStackTestDurationSecs};
ilnik6b826ef2017-06-16 06:53:48 -0700899 simulcast.ss = {std::vector<VideoStream>(), 0, 3, 1,
900 std::vector<SpatialLayer>(), false};
ilnik2a8c2f52017-02-15 02:23:28 -0800901 RunTest(simulcast);
902}
903
904TEST_F(FullStackTest, VP9SVC_3SL_Low) {
905 VideoQualityTest::Params simulcast;
906 simulcast.call.send_side_bwe = true;
ilnik566c43b2017-03-07 04:42:54 -0800907 simulcast.video = kSvcVp9Video;
ilnik2a8c2f52017-02-15 02:23:28 -0800908 simulcast.analyzer = {"vp9svc_3sl_low", 0.0, 0.0, kFullStackTestDurationSecs};
ilnik6b826ef2017-06-16 06:53:48 -0700909 simulcast.ss = {std::vector<VideoStream>(), 0, 3, 0,
910 std::vector<SpatialLayer>(), false};
ilnik2a8c2f52017-02-15 02:23:28 -0800911 RunTest(simulcast);
912}
Peter Boström12996152016-05-14 02:03:18 +0200913#endif // !defined(RTC_DISABLE_VP9)
brandtr93c5d032016-11-30 07:50:07 -0800914
ilnik6b826ef2017-06-16 06:53:48 -0700915// Android bots can't handle FullHD, so disable the test.
ilnik267041c2017-06-27 07:21:01 -0700916#if defined(WEBRTC_ANDROID)
ilnik6b826ef2017-06-16 06:53:48 -0700917#define MAYBE_SimulcastFullHdOveruse DISABLED_SimulcastFullHdOveruse
918#else
919#define MAYBE_SimulcastFullHdOveruse SimulcastFullHdOveruse
920#endif
921
922TEST_F(FullStackTest, MAYBE_SimulcastFullHdOveruse) {
923 VideoQualityTest::Params simulcast;
924 simulcast.call.send_side_bwe = true;
Rasmus Brandt2666cf72017-09-29 13:48:31 +0200925 simulcast.video = {true, 1920, 1080, 30, 800000, 2500000,
926 2500000, false, "VP8", false, false, 3,
927 2, 400000, false, false, "Generator"};
ilnik6b826ef2017-06-16 06:53:48 -0700928 simulcast.analyzer = {"simulcast_HD_high", 0.0, 0.0,
929 kFullStackTestDurationSecs};
930 simulcast.pipe.loss_percent = 0;
931 simulcast.pipe.queue_delay_ms = 100;
932 std::vector<VideoStream> streams = {DefaultVideoStream(simulcast),
933 DefaultVideoStream(simulcast),
934 DefaultVideoStream(simulcast)};
935 simulcast.ss = {streams, 2, 1, 0, std::vector<SpatialLayer>(), true};
936 webrtc::test::ScopedFieldTrials override_trials(
937 "WebRTC-ForceSimulatedOveruseIntervalMs/1000-50000-300/");
938 RunTest(simulcast);
939}
940
ilnik3dd5ad92017-02-09 04:58:53 -0800941TEST_F(FullStackTest, SimulcastVP8_3SL_High) {
942 VideoQualityTest::Params simulcast;
943 simulcast.call.send_side_bwe = true;
ilnik566c43b2017-03-07 04:42:54 -0800944 simulcast.video = kSimulcastVp8VideoHigh;
ilnik2a8c2f52017-02-15 02:23:28 -0800945 simulcast.analyzer = {"simulcast_vp8_3sl_high", 0.0, 0.0,
ilnik3dd5ad92017-02-09 04:58:53 -0800946 kFullStackTestDurationSecs};
947 simulcast.pipe.loss_percent = 0;
948 simulcast.pipe.queue_delay_ms = 100;
949 VideoQualityTest::Params video_params_high;
ilnik566c43b2017-03-07 04:42:54 -0800950 video_params_high.video = kSimulcastVp8VideoHigh;
ilnik3dd5ad92017-02-09 04:58:53 -0800951 VideoQualityTest::Params video_params_medium;
ilnik566c43b2017-03-07 04:42:54 -0800952 video_params_medium.video = kSimulcastVp8VideoMedium;
ilnik3dd5ad92017-02-09 04:58:53 -0800953 VideoQualityTest::Params video_params_low;
ilnik566c43b2017-03-07 04:42:54 -0800954 video_params_low.video = kSimulcastVp8VideoLow;
ilnik3dd5ad92017-02-09 04:58:53 -0800955
956 std::vector<VideoStream> streams = {DefaultVideoStream(video_params_low),
957 DefaultVideoStream(video_params_medium),
958 DefaultVideoStream(video_params_high)};
ilnik6b826ef2017-06-16 06:53:48 -0700959 simulcast.ss = {streams, 2, 1, 0, std::vector<SpatialLayer>(), false};
ilnik3dd5ad92017-02-09 04:58:53 -0800960 RunTest(simulcast);
961}
962
963TEST_F(FullStackTest, SimulcastVP8_3SL_Medium) {
964 VideoQualityTest::Params simulcast;
965 simulcast.call.send_side_bwe = true;
ilnik566c43b2017-03-07 04:42:54 -0800966 simulcast.video = kSimulcastVp8VideoHigh;
ilnik2a8c2f52017-02-15 02:23:28 -0800967 simulcast.analyzer = {"simulcast_vp8_3sl_medium", 0.0, 0.0,
ilnik3dd5ad92017-02-09 04:58:53 -0800968 kFullStackTestDurationSecs};
969 simulcast.pipe.loss_percent = 0;
970 simulcast.pipe.queue_delay_ms = 100;
971 VideoQualityTest::Params video_params_high;
ilnik566c43b2017-03-07 04:42:54 -0800972 video_params_high.video = kSimulcastVp8VideoHigh;
ilnik3dd5ad92017-02-09 04:58:53 -0800973 VideoQualityTest::Params video_params_medium;
ilnik566c43b2017-03-07 04:42:54 -0800974 video_params_medium.video = kSimulcastVp8VideoMedium;
ilnik3dd5ad92017-02-09 04:58:53 -0800975 VideoQualityTest::Params video_params_low;
ilnik566c43b2017-03-07 04:42:54 -0800976 video_params_low.video = kSimulcastVp8VideoLow;
ilnik3dd5ad92017-02-09 04:58:53 -0800977
978 std::vector<VideoStream> streams = {DefaultVideoStream(video_params_low),
979 DefaultVideoStream(video_params_medium),
980 DefaultVideoStream(video_params_high)};
ilnik6b826ef2017-06-16 06:53:48 -0700981 simulcast.ss = {streams, 1, 1, 0, std::vector<SpatialLayer>(), false};
ilnik3dd5ad92017-02-09 04:58:53 -0800982 RunTest(simulcast);
983}
984
985TEST_F(FullStackTest, SimulcastVP8_3SL_Low) {
986 VideoQualityTest::Params simulcast;
987 simulcast.call.send_side_bwe = true;
ilnik566c43b2017-03-07 04:42:54 -0800988 simulcast.video = kSimulcastVp8VideoHigh;
ilnik2a8c2f52017-02-15 02:23:28 -0800989 simulcast.analyzer = {"simulcast_vp8_3sl_low", 0.0, 0.0,
ilnik3dd5ad92017-02-09 04:58:53 -0800990 kFullStackTestDurationSecs};
991 simulcast.pipe.loss_percent = 0;
992 simulcast.pipe.queue_delay_ms = 100;
993 VideoQualityTest::Params video_params_high;
ilnik566c43b2017-03-07 04:42:54 -0800994 video_params_high.video = kSimulcastVp8VideoHigh;
ilnik3dd5ad92017-02-09 04:58:53 -0800995 VideoQualityTest::Params video_params_medium;
ilnik566c43b2017-03-07 04:42:54 -0800996 video_params_medium.video = kSimulcastVp8VideoMedium;
ilnik3dd5ad92017-02-09 04:58:53 -0800997 VideoQualityTest::Params video_params_low;
ilnik566c43b2017-03-07 04:42:54 -0800998 video_params_low.video = kSimulcastVp8VideoLow;
ilnik3dd5ad92017-02-09 04:58:53 -0800999
1000 std::vector<VideoStream> streams = {DefaultVideoStream(video_params_low),
1001 DefaultVideoStream(video_params_medium),
1002 DefaultVideoStream(video_params_high)};
ilnik6b826ef2017-06-16 06:53:48 -07001003 simulcast.ss = {streams, 0, 1, 0, std::vector<SpatialLayer>(), false};
ilnik3dd5ad92017-02-09 04:58:53 -08001004 RunTest(simulcast);
1005}
1006
ilnika014cc52017-03-07 04:21:04 -08001007TEST_F(FullStackTest, LargeRoomVP8_5thumb) {
1008 VideoQualityTest::Params large_room;
1009 large_room.call.send_side_bwe = true;
ilnik566c43b2017-03-07 04:42:54 -08001010 large_room.video = kSimulcastVp8VideoHigh;
ilnika014cc52017-03-07 04:21:04 -08001011 large_room.analyzer = {"largeroom_5thumb", 0.0, 0.0,
1012 kFullStackTestDurationSecs};
1013 large_room.pipe.loss_percent = 0;
1014 large_room.pipe.queue_delay_ms = 100;
1015 VideoQualityTest::Params video_params_high;
ilnik566c43b2017-03-07 04:42:54 -08001016 video_params_high.video = kSimulcastVp8VideoHigh;
ilnika014cc52017-03-07 04:21:04 -08001017 VideoQualityTest::Params video_params_medium;
ilnik566c43b2017-03-07 04:42:54 -08001018 video_params_medium.video = kSimulcastVp8VideoMedium;
ilnika014cc52017-03-07 04:21:04 -08001019 VideoQualityTest::Params video_params_low;
ilnik566c43b2017-03-07 04:42:54 -08001020 video_params_low.video = kSimulcastVp8VideoLow;
ilnika014cc52017-03-07 04:21:04 -08001021
1022 std::vector<VideoStream> streams = {DefaultVideoStream(video_params_low),
1023 DefaultVideoStream(video_params_medium),
1024 DefaultVideoStream(video_params_high)};
ilnik98436952017-07-13 00:47:03 -07001025 large_room.call.num_thumbnails = 5;
ilnik6b826ef2017-06-16 06:53:48 -07001026 large_room.ss = {streams, 2, 1, 0, std::vector<SpatialLayer>(), false};
ilnika014cc52017-03-07 04:21:04 -08001027 RunTest(large_room);
1028}
1029
oprypin743117f2017-09-15 05:24:24 -07001030#if defined(WEBRTC_ANDROID) || defined(WEBRTC_IOS)
1031// Fails on mobile devices:
ilnikf89a7382017-03-07 06:15:27 -08001032// https://bugs.chromium.org/p/webrtc/issues/detail?id=7301
1033#define MAYBE_LargeRoomVP8_50thumb DISABLED_LargeRoomVP8_50thumb
ilnik3ae7c252017-03-08 01:17:35 -08001034#define MAYBE_LargeRoomVP8_15thumb DISABLED_LargeRoomVP8_15thumb
ilnikf89a7382017-03-07 06:15:27 -08001035#else
1036#define MAYBE_LargeRoomVP8_50thumb LargeRoomVP8_50thumb
ilnik3ae7c252017-03-08 01:17:35 -08001037#define MAYBE_LargeRoomVP8_15thumb LargeRoomVP8_15thumb
ilnikf89a7382017-03-07 06:15:27 -08001038#endif
1039
1040TEST_F(FullStackTest, MAYBE_LargeRoomVP8_15thumb) {
ilnika014cc52017-03-07 04:21:04 -08001041 VideoQualityTest::Params large_room;
1042 large_room.call.send_side_bwe = true;
ilnik566c43b2017-03-07 04:42:54 -08001043 large_room.video = kSimulcastVp8VideoHigh;
ilnika014cc52017-03-07 04:21:04 -08001044 large_room.analyzer = {"largeroom_15thumb", 0.0, 0.0,
1045 kFullStackTestDurationSecs};
1046 large_room.pipe.loss_percent = 0;
1047 large_room.pipe.queue_delay_ms = 100;
1048 VideoQualityTest::Params video_params_high;
ilnik566c43b2017-03-07 04:42:54 -08001049 video_params_high.video = kSimulcastVp8VideoHigh;
ilnika014cc52017-03-07 04:21:04 -08001050 VideoQualityTest::Params video_params_medium;
ilnik566c43b2017-03-07 04:42:54 -08001051 video_params_medium.video = kSimulcastVp8VideoMedium;
ilnika014cc52017-03-07 04:21:04 -08001052 VideoQualityTest::Params video_params_low;
ilnik566c43b2017-03-07 04:42:54 -08001053 video_params_low.video = kSimulcastVp8VideoLow;
ilnika014cc52017-03-07 04:21:04 -08001054
1055 std::vector<VideoStream> streams = {DefaultVideoStream(video_params_low),
1056 DefaultVideoStream(video_params_medium),
1057 DefaultVideoStream(video_params_high)};
ilnik98436952017-07-13 00:47:03 -07001058 large_room.call.num_thumbnails = 15;
ilnik6b826ef2017-06-16 06:53:48 -07001059 large_room.ss = {streams, 2, 1, 0, std::vector<SpatialLayer>(), false};
ilnika014cc52017-03-07 04:21:04 -08001060 RunTest(large_room);
1061}
1062
ilnika014cc52017-03-07 04:21:04 -08001063TEST_F(FullStackTest, MAYBE_LargeRoomVP8_50thumb) {
1064 VideoQualityTest::Params large_room;
1065 large_room.call.send_side_bwe = true;
ilnik566c43b2017-03-07 04:42:54 -08001066 large_room.video = kSimulcastVp8VideoHigh;
ilnika014cc52017-03-07 04:21:04 -08001067 large_room.analyzer = {"largeroom_50thumb", 0.0, 0.0,
1068 kFullStackTestDurationSecs};
1069 large_room.pipe.loss_percent = 0;
1070 large_room.pipe.queue_delay_ms = 100;
1071 VideoQualityTest::Params video_params_high;
ilnik566c43b2017-03-07 04:42:54 -08001072 video_params_high.video = kSimulcastVp8VideoHigh;
ilnika014cc52017-03-07 04:21:04 -08001073 VideoQualityTest::Params video_params_medium;
ilnik566c43b2017-03-07 04:42:54 -08001074 video_params_medium.video = kSimulcastVp8VideoMedium;
ilnika014cc52017-03-07 04:21:04 -08001075 VideoQualityTest::Params video_params_low;
ilnik566c43b2017-03-07 04:42:54 -08001076 video_params_low.video = kSimulcastVp8VideoLow;
ilnika014cc52017-03-07 04:21:04 -08001077
1078 std::vector<VideoStream> streams = {DefaultVideoStream(video_params_low),
1079 DefaultVideoStream(video_params_medium),
1080 DefaultVideoStream(video_params_high)};
ilnik98436952017-07-13 00:47:03 -07001081 large_room.call.num_thumbnails = 50;
ilnik6b826ef2017-06-16 06:53:48 -07001082 large_room.ss = {streams, 2, 1, 0, std::vector<SpatialLayer>(), false};
ilnika014cc52017-03-07 04:21:04 -08001083 RunTest(large_room);
1084}
1085
1086
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +00001087} // namespace webrtc