blob: 6d5820a49a97d3afb3885fcf744a24e0682016e0 [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
Sebastian Janssoncabe3832018-01-12 10:54:18 +010012#include "rtc_base/experiments/alr_experiment.h"
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020013#include "test/field_trial.h"
14#include "test/gtest.h"
15#include "video/video_quality_test.h"
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +000016
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +000017namespace webrtc {
18
sprang89c4a7e2017-06-30 13:27:40 -070019namespace {
brandtrdd369c62016-11-16 23:56:57 -080020static const int kFullStackTestDurationSecs = 45;
sprang89c4a7e2017-06-30 13:27:40 -070021} // namespace
pbos@webrtc.orgb613b5a2013-12-03 10:13:04 +000022
ivica5d6a06c2015-09-17 05:30:24 -070023class FullStackTest : public VideoQualityTest {
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +000024 public:
ivica5d6a06c2015-09-17 05:30:24 -070025 void RunTest(const VideoQualityTest::Params &params) {
26 RunWithAnalyzer(params);
pbos@webrtc.org94015242013-10-16 11:05:37 +000027 }
sprang89c4a7e2017-06-30 13:27:40 -070028
29 protected:
30 const std::string kScreenshareSimulcastExperiment =
31 "WebRTC-SimulcastScreenshare/Enabled/";
32 const std::string kAlrProbingExperiment =
Sebastian Janssoncabe3832018-01-12 10:54:18 +010033 std::string(AlrExperimentSettings::kScreenshareProbingBweExperimentName) +
ilnik2ae19db2017-08-31 04:46:45 -070034 "/1.1,2875,85,20,-20,0/";
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +010035 const std::string kRoundRobinPacingQueueExperiment =
36 "WebRTC-RoundRobinPacing/Enabled/";
37 const std::string kPacerPushBackExperiment =
38 "WebRTC-PacerPushbackExperiment/Enabled/";
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +000039};
40
sprangce4aef12015-11-02 07:23:20 -080041// VideoQualityTest::Params params = {
42// { ... }, // Common.
43// { ... }, // Video-specific settings.
44// { ... }, // Screenshare-specific settings.
45// { ... }, // Analyzer settings.
46// pipe, // FakeNetworkPipe::Config
47// { ... }, // Spatial scalability.
48// logs // bool
49// };
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +000050
Peter Boström12996152016-05-14 02:03:18 +020051#if !defined(RTC_DISABLE_VP9)
asapersson88b0a222016-02-12 13:16:43 -080052TEST_F(FullStackTest, ForemanCifWithoutPacketLossVp9) {
brandtr93c5d032016-11-30 07:50:07 -080053 // TODO(pbos): Decide on psnr/ssim thresholds for foreman_cif.
54 VideoQualityTest::Params foreman_cif;
55 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +010056 foreman_cif.video[0] = {true, 352, 288, 30, 700000,
57 700000, 700000, false, "VP9", 1,
58 0, 0, false, false, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -080059 foreman_cif.analyzer = {"foreman_cif_net_delay_0_0_plr_0_VP9", 0.0, 0.0,
60 kFullStackTestDurationSecs};
61 RunTest(foreman_cif);
asapersson88b0a222016-02-12 13:16:43 -080062}
63
64TEST_F(FullStackTest, ForemanCifPlr5Vp9) {
brandtr93c5d032016-11-30 07:50:07 -080065 VideoQualityTest::Params foreman_cif;
66 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +010067 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
68 500000, 2000000, false, "VP9", 1,
69 0, 0, false, false, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -080070 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5_VP9", 0.0, 0.0,
71 kFullStackTestDurationSecs};
72 foreman_cif.pipe.loss_percent = 5;
73 foreman_cif.pipe.queue_delay_ms = 50;
74 RunTest(foreman_cif);
asapersson88b0a222016-02-12 13:16:43 -080075}
Emircan Uysaler03e6ec92018-03-09 15:03:26 -080076
77TEST_F(FullStackTest, ForemanCifWithoutPacketLossMultiplexI420Frame) {
78 VideoQualityTest::Params foreman_cif;
79 foreman_cif.call.send_side_bwe = true;
80 foreman_cif.video[0] = {true, 352, 288, 30, 700000,
81 700000, 700000, false, "multiplex", 1,
82 0, 0, false, false, "foreman_cif"};
83 foreman_cif.analyzer = {"foreman_cif_net_delay_0_0_plr_0_Multiplex", 0.0, 0.0,
84 kFullStackTestDurationSecs};
85 RunTest(foreman_cif);
86}
87
Emircan Uysalerf1ff3bd2018-03-12 11:53:21 -070088TEST_F(FullStackTest, GeneratorWithoutPacketLossMultiplexI420AFrame) {
89 VideoQualityTest::Params generator;
90 generator.call.send_side_bwe = true;
91 generator.video[0] = {true, 352, 288, 30, 700000,
92 700000, 700000, false, "multiplex", 1,
93 0, 0, false, false, "GeneratorI420A"};
94 generator.analyzer = {"generator_net_delay_0_0_plr_0_Multiplex", 0.0, 0.0,
95 kFullStackTestDurationSecs};
96 RunTest(generator);
Emircan Uysaler03e6ec92018-03-09 15:03:26 -080097}
98
Peter Boström12996152016-05-14 02:03:18 +020099#endif // !defined(RTC_DISABLE_VP9)
asapersson88b0a222016-02-12 13:16:43 -0800100
Patrik Höglund11bf2fa2018-04-09 12:20:50 +0200101#if defined(WEBRTC_LINUX)
102// Crashes on the linux trusty perf bot: bugs.webrtc.org/9129.
103#define MAYBE_ParisQcifWithoutPacketLoss DISABLED_ParisQcifWithoutPacketLoss
104#else
105#define MAYBE_ParisQcifWithoutPacketLoss ParisQcifWithoutPacketLoss
106#endif
107TEST_F(FullStackTest, MAYBE_ParisQcifWithoutPacketLoss) {
minyue626bc952016-10-31 05:47:02 -0700108 VideoQualityTest::Params paris_qcif;
109 paris_qcif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100110 paris_qcif.video[0] = {true, 176, 144, 30, 300000,
111 300000, 300000, false, "VP8", 1,
112 0, 0, false, false, "paris_qcif"};
minyue626bc952016-10-31 05:47:02 -0700113 paris_qcif.analyzer = {"net_delay_0_0_plr_0", 36.0, 0.96,
114 kFullStackTestDurationSecs};
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000115 RunTest(paris_qcif);
pbos@webrtc.org994d0b72014-06-27 08:47:52 +0000116}
117
118TEST_F(FullStackTest, ForemanCifWithoutPacketLoss) {
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000119 // TODO(pbos): Decide on psnr/ssim thresholds for foreman_cif.
minyue626bc952016-10-31 05:47:02 -0700120 VideoQualityTest::Params foreman_cif;
121 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100122 foreman_cif.video[0] = {true, 352, 288, 30, 700000,
123 700000, 700000, false, "VP8", 1,
124 0, 0, false, false, "foreman_cif"};
minyue626bc952016-10-31 05:47:02 -0700125 foreman_cif.analyzer = {"foreman_cif_net_delay_0_0_plr_0", 0.0, 0.0,
126 kFullStackTestDurationSecs};
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000127 RunTest(foreman_cif);
pbos@webrtc.org994d0b72014-06-27 08:47:52 +0000128}
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +0000129
asaperssonfb6ad3b2016-12-16 06:54:01 -0800130TEST_F(FullStackTest, ForemanCif30kbpsWithoutPacketLoss) {
131 VideoQualityTest::Params foreman_cif;
132 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100133 foreman_cif.video[0] = {true, 352, 288, 10, 30000,
134 30000, 30000, false, "VP8", 1,
135 0, 0, false, false, "foreman_cif"};
asaperssonfb6ad3b2016-12-16 06:54:01 -0800136 foreman_cif.analyzer = {"foreman_cif_30kbps_net_delay_0_0_plr_0", 0.0, 0.0,
137 kFullStackTestDurationSecs};
138 RunTest(foreman_cif);
139}
140
sprang@webrtc.org343096a2015-02-23 08:34:17 +0000141TEST_F(FullStackTest, ForemanCifPlr5) {
minyue626bc952016-10-31 05:47:02 -0700142 VideoQualityTest::Params foreman_cif;
143 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100144 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
145 500000, 2000000, false, "VP8", 1,
146 0, 0, false, false, "foreman_cif"};
minyue626bc952016-10-31 05:47:02 -0700147 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5", 0.0, 0.0,
148 kFullStackTestDurationSecs};
ivica5d6a06c2015-09-17 05:30:24 -0700149 foreman_cif.pipe.loss_percent = 5;
150 foreman_cif.pipe.queue_delay_ms = 50;
stefan@webrtc.orgc216b9a2014-10-14 10:38:49 +0000151 RunTest(foreman_cif);
152}
153
brandtr93c5d032016-11-30 07:50:07 -0800154TEST_F(FullStackTest, ForemanCifPlr5Ulpfec) {
155 VideoQualityTest::Params foreman_cif;
156 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100157 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
158 500000, 2000000, false, "VP8", 1,
159 0, 0, true, false, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -0800160 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5_ulpfec", 0.0, 0.0,
161 kFullStackTestDurationSecs};
162 foreman_cif.pipe.loss_percent = 5;
163 foreman_cif.pipe.queue_delay_ms = 50;
164 RunTest(foreman_cif);
165}
166
167TEST_F(FullStackTest, ForemanCifPlr5Flexfec) {
168 VideoQualityTest::Params foreman_cif;
169 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100170 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
171 500000, 2000000, false, "VP8", 1,
172 0, 0, false, true, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -0800173 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5_flexfec", 0.0, 0.0,
174 kFullStackTestDurationSecs};
175 foreman_cif.pipe.loss_percent = 5;
176 foreman_cif.pipe.queue_delay_ms = 50;
177 RunTest(foreman_cif);
178}
179
stefan889d9652017-07-05 03:03:02 -0700180TEST_F(FullStackTest, ForemanCif500kbpsPlr3Flexfec) {
181 VideoQualityTest::Params foreman_cif;
182 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100183 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
184 500000, 2000000, false, "VP8", 1,
185 0, 0, false, true, "foreman_cif"};
stefan889d9652017-07-05 03:03:02 -0700186 foreman_cif.analyzer = {"foreman_cif_500kbps_delay_50_0_plr_3_flexfec", 0.0,
187 0.0, kFullStackTestDurationSecs};
188 foreman_cif.pipe.loss_percent = 3;
189 foreman_cif.pipe.link_capacity_kbps = 500;
190 foreman_cif.pipe.queue_delay_ms = 50;
191 RunTest(foreman_cif);
192}
193
194TEST_F(FullStackTest, ForemanCif500kbpsPlr3Ulpfec) {
195 VideoQualityTest::Params foreman_cif;
196 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100197 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
198 500000, 2000000, false, "VP8", 1,
199 0, 0, true, false, "foreman_cif"};
stefan889d9652017-07-05 03:03:02 -0700200 foreman_cif.analyzer = {"foreman_cif_500kbps_delay_50_0_plr_3_ulpfec", 0.0,
201 0.0, kFullStackTestDurationSecs};
202 foreman_cif.pipe.loss_percent = 3;
203 foreman_cif.pipe.link_capacity_kbps = 500;
204 foreman_cif.pipe.queue_delay_ms = 50;
205 RunTest(foreman_cif);
206}
207
brandtrdd369c62016-11-16 23:56:57 -0800208#if defined(WEBRTC_USE_H264)
209TEST_F(FullStackTest, ForemanCifWithoutPacketlossH264) {
brandtr93c5d032016-11-30 07:50:07 -0800210 // TODO(pbos): Decide on psnr/ssim thresholds for foreman_cif.
211 VideoQualityTest::Params foreman_cif;
212 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100213 foreman_cif.video[0] = {true, 352, 288, 30, 700000,
214 700000, 700000, false, "H264", 1,
215 0, 0, false, false, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -0800216 foreman_cif.analyzer = {"foreman_cif_net_delay_0_0_plr_0_H264", 0.0, 0.0,
217 kFullStackTestDurationSecs};
218 RunTest(foreman_cif);
brandtrdd369c62016-11-16 23:56:57 -0800219}
220
asaperssonfb6ad3b2016-12-16 06:54:01 -0800221TEST_F(FullStackTest, ForemanCif30kbpsWithoutPacketlossH264) {
222 VideoQualityTest::Params foreman_cif;
223 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100224 foreman_cif.video[0] = {true, 352, 288, 10, 30000,
225 30000, 30000, false, "H264", 1,
226 0, 0, false, false, "foreman_cif"};
asaperssonfb6ad3b2016-12-16 06:54:01 -0800227 foreman_cif.analyzer = {"foreman_cif_30kbps_net_delay_0_0_plr_0_H264", 0.0,
228 0.0, kFullStackTestDurationSecs};
229 RunTest(foreman_cif);
230}
231
brandtrdd369c62016-11-16 23:56:57 -0800232TEST_F(FullStackTest, ForemanCifPlr5H264) {
brandtr93c5d032016-11-30 07:50:07 -0800233 VideoQualityTest::Params foreman_cif;
234 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100235 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
236 500000, 2000000, false, "H264", 1,
237 0, 0, false, false, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -0800238 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5_H264", 0.0, 0.0,
239 kFullStackTestDurationSecs};
240 foreman_cif.pipe.loss_percent = 5;
241 foreman_cif.pipe.queue_delay_ms = 50;
242 RunTest(foreman_cif);
brandtrdd369c62016-11-16 23:56:57 -0800243}
244
Rasmus Brandt88f080a2017-11-02 14:28:06 +0100245TEST_F(FullStackTest, ForemanCifPlr5H264SpsPpsIdrIsKeyframe) {
246 test::ScopedFieldTrials override_field_trials(
247 "WebRTC-SpsPpsIdrIsH264Keyframe/Enabled/");
248
249 VideoQualityTest::Params foreman_cif;
250 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100251 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
252 500000, 2000000, false, "H264", 1,
253 0, 0, false, false, "foreman_cif"};
Rasmus Brandt88f080a2017-11-02 14:28:06 +0100254 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5_H264_sps_pps_idr", 0.0,
255 0.0, kFullStackTestDurationSecs};
256 foreman_cif.pipe.loss_percent = 5;
257 foreman_cif.pipe.queue_delay_ms = 50;
258 RunTest(foreman_cif);
259}
260
brandtrdd369c62016-11-16 23:56:57 -0800261// Verify that this is worth the bot time, before enabling.
262TEST_F(FullStackTest, ForemanCifPlr5H264Flexfec) {
brandtr93c5d032016-11-30 07:50:07 -0800263 VideoQualityTest::Params foreman_cif;
264 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100265 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
266 500000, 2000000, false, "H264", 1,
267 0, 0, false, true, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -0800268 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5_H264_flexfec", 0.0, 0.0,
269 kFullStackTestDurationSecs};
270 foreman_cif.pipe.loss_percent = 5;
271 foreman_cif.pipe.queue_delay_ms = 50;
272 RunTest(foreman_cif);
brandtrdd369c62016-11-16 23:56:57 -0800273}
274
275// Ulpfec with H264 is an unsupported combination, so this test is only useful
276// for debugging. It is therefore disabled by default.
277TEST_F(FullStackTest, DISABLED_ForemanCifPlr5H264Ulpfec) {
brandtr93c5d032016-11-30 07:50:07 -0800278 VideoQualityTest::Params foreman_cif;
279 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100280 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
281 500000, 2000000, false, "H264", 1,
282 0, 0, true, false, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -0800283 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5_H264_ulpfec", 0.0, 0.0,
284 kFullStackTestDurationSecs};
285 foreman_cif.pipe.loss_percent = 5;
286 foreman_cif.pipe.queue_delay_ms = 50;
287 RunTest(foreman_cif);
brandtrdd369c62016-11-16 23:56:57 -0800288}
289#endif // defined(WEBRTC_USE_H264)
290
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000291TEST_F(FullStackTest, ForemanCif500kbps) {
minyue626bc952016-10-31 05:47:02 -0700292 VideoQualityTest::Params foreman_cif;
293 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100294 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
295 500000, 2000000, false, "VP8", 1,
296 0, 0, false, false, "foreman_cif"};
minyue626bc952016-10-31 05:47:02 -0700297 foreman_cif.analyzer = {"foreman_cif_500kbps", 0.0, 0.0,
298 kFullStackTestDurationSecs};
ivica5d6a06c2015-09-17 05:30:24 -0700299 foreman_cif.pipe.queue_length_packets = 0;
300 foreman_cif.pipe.queue_delay_ms = 0;
301 foreman_cif.pipe.link_capacity_kbps = 500;
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000302 RunTest(foreman_cif);
303}
304
305TEST_F(FullStackTest, ForemanCif500kbpsLimitedQueue) {
minyue626bc952016-10-31 05:47:02 -0700306 VideoQualityTest::Params foreman_cif;
307 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100308 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
309 500000, 2000000, false, "VP8", 1,
310 0, 0, false, false, "foreman_cif"};
minyue626bc952016-10-31 05:47:02 -0700311 foreman_cif.analyzer = {"foreman_cif_500kbps_32pkts_queue", 0.0, 0.0,
312 kFullStackTestDurationSecs};
ivica5d6a06c2015-09-17 05:30:24 -0700313 foreman_cif.pipe.queue_length_packets = 32;
314 foreman_cif.pipe.queue_delay_ms = 0;
315 foreman_cif.pipe.link_capacity_kbps = 500;
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000316 RunTest(foreman_cif);
317}
318
319TEST_F(FullStackTest, ForemanCif500kbps100ms) {
minyue626bc952016-10-31 05:47:02 -0700320 VideoQualityTest::Params foreman_cif;
321 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100322 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
323 500000, 2000000, false, "VP8", 1,
324 0, 0, false, false, "foreman_cif"};
minyue626bc952016-10-31 05:47:02 -0700325 foreman_cif.analyzer = {"foreman_cif_500kbps_100ms", 0.0, 0.0,
326 kFullStackTestDurationSecs};
ivica5d6a06c2015-09-17 05:30:24 -0700327 foreman_cif.pipe.queue_length_packets = 0;
328 foreman_cif.pipe.queue_delay_ms = 100;
329 foreman_cif.pipe.link_capacity_kbps = 500;
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000330 RunTest(foreman_cif);
331}
332
333TEST_F(FullStackTest, ForemanCif500kbps100msLimitedQueue) {
minyue626bc952016-10-31 05:47:02 -0700334 VideoQualityTest::Params foreman_cif;
335 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100336 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
337 500000, 2000000, false, "VP8", 1,
338 0, 0, false, false, "foreman_cif"};
minyue626bc952016-10-31 05:47:02 -0700339 foreman_cif.analyzer = {"foreman_cif_500kbps_100ms_32pkts_queue", 0.0, 0.0,
340 kFullStackTestDurationSecs};
stefanb1797672016-08-11 07:00:57 -0700341 foreman_cif.pipe.queue_length_packets = 32;
342 foreman_cif.pipe.queue_delay_ms = 100;
343 foreman_cif.pipe.link_capacity_kbps = 500;
344 RunTest(foreman_cif);
345}
346
347TEST_F(FullStackTest, ForemanCif500kbps100msLimitedQueueRecvBwe) {
minyue626bc952016-10-31 05:47:02 -0700348 VideoQualityTest::Params foreman_cif;
brandtr93c5d032016-11-30 07:50:07 -0800349 foreman_cif.call.send_side_bwe = false;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100350 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
351 500000, 2000000, false, "VP8", 1,
352 0, 0, false, false, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -0800353 foreman_cif.analyzer = {"foreman_cif_500kbps_100ms_32pkts_queue_recv_bwe",
354 0.0, 0.0, kFullStackTestDurationSecs};
ivica5d6a06c2015-09-17 05:30:24 -0700355 foreman_cif.pipe.queue_length_packets = 32;
356 foreman_cif.pipe.queue_delay_ms = 100;
357 foreman_cif.pipe.link_capacity_kbps = 500;
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000358 RunTest(foreman_cif);
359}
360
361TEST_F(FullStackTest, ForemanCif1000kbps100msLimitedQueue) {
minyue626bc952016-10-31 05:47:02 -0700362 VideoQualityTest::Params foreman_cif;
363 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100364 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
365 2000000, 2000000, false, "VP8", 1,
366 0, 0, false, false, "foreman_cif"};
minyue626bc952016-10-31 05:47:02 -0700367 foreman_cif.analyzer = {"foreman_cif_1000kbps_100ms_32pkts_queue", 0.0, 0.0,
368 kFullStackTestDurationSecs};
ivica5d6a06c2015-09-17 05:30:24 -0700369 foreman_cif.pipe.queue_length_packets = 32;
370 foreman_cif.pipe.queue_delay_ms = 100;
371 foreman_cif.pipe.link_capacity_kbps = 1000;
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000372 RunTest(foreman_cif);
373}
sprang@webrtc.org131bea82015-02-18 12:46:06 +0000374
sprangff19d352017-09-06 07:14:02 -0700375// TODO(sprang): Remove this if we have the similar ModerateLimits below?
stefanb1797672016-08-11 07:00:57 -0700376TEST_F(FullStackTest, ConferenceMotionHd2000kbps100msLimitedQueue) {
minyue626bc952016-10-31 05:47:02 -0700377 VideoQualityTest::Params conf_motion_hd;
378 conf_motion_hd.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100379 conf_motion_hd.video[0] = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000380 true, 1280, 720, 50, 30000,
381 3000000, 3000000, false, "VP8", 1,
382 0, 0, false, false, "ConferenceMotion_1280_720_50"};
minyue626bc952016-10-31 05:47:02 -0700383 conf_motion_hd.analyzer = {"conference_motion_hd_2000kbps_100ms_32pkts_queue",
384 0.0, 0.0, kFullStackTestDurationSecs};
stefanb1797672016-08-11 07:00:57 -0700385 conf_motion_hd.pipe.queue_length_packets = 32;
386 conf_motion_hd.pipe.queue_delay_ms = 100;
387 conf_motion_hd.pipe.link_capacity_kbps = 2000;
388 RunTest(conf_motion_hd);
389}
390
sprangff19d352017-09-06 07:14:02 -0700391TEST_F(FullStackTest, ConferenceMotionHd1TLModerateLimits) {
392 VideoQualityTest::Params conf_motion_hd;
393 conf_motion_hd.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100394 conf_motion_hd.video[0] = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000395 true, 1280, 720, 50, 30000,
396 3000000, 3000000, false, "VP8", 1,
397 -1, 0, false, false, "ConferenceMotion_1280_720_50"};
sprangff19d352017-09-06 07:14:02 -0700398 conf_motion_hd.analyzer = {"conference_motion_hd_1tl_moderate_limits", 0.0,
399 0.0, kFullStackTestDurationSecs};
400 conf_motion_hd.pipe.queue_length_packets = 50;
401 conf_motion_hd.pipe.loss_percent = 3;
402 conf_motion_hd.pipe.queue_delay_ms = 100;
403 conf_motion_hd.pipe.link_capacity_kbps = 2000;
404 RunTest(conf_motion_hd);
405}
406
407TEST_F(FullStackTest, ConferenceMotionHd2TLModerateLimits) {
408 VideoQualityTest::Params conf_motion_hd;
409 conf_motion_hd.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100410 conf_motion_hd.video[0] = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000411 true, 1280, 720, 50, 30000,
412 3000000, 3000000, false, "VP8", 2,
413 -1, 0, false, false, "ConferenceMotion_1280_720_50"};
sprangff19d352017-09-06 07:14:02 -0700414 conf_motion_hd.analyzer = {"conference_motion_hd_2tl_moderate_limits", 0.0,
415 0.0, kFullStackTestDurationSecs};
416 conf_motion_hd.pipe.queue_length_packets = 50;
417 conf_motion_hd.pipe.loss_percent = 3;
418 conf_motion_hd.pipe.queue_delay_ms = 100;
419 conf_motion_hd.pipe.link_capacity_kbps = 2000;
420 RunTest(conf_motion_hd);
421}
422
423TEST_F(FullStackTest, ConferenceMotionHd3TLModerateLimits) {
424 VideoQualityTest::Params conf_motion_hd;
425 conf_motion_hd.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100426 conf_motion_hd.video[0] = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000427 true, 1280, 720, 50, 30000,
428 3000000, 3000000, false, "VP8", 3,
429 -1, 0, false, false, "ConferenceMotion_1280_720_50"};
sprangff19d352017-09-06 07:14:02 -0700430 conf_motion_hd.analyzer = {"conference_motion_hd_3tl_moderate_limits", 0.0,
431 0.0, kFullStackTestDurationSecs};
432 conf_motion_hd.pipe.queue_length_packets = 50;
433 conf_motion_hd.pipe.loss_percent = 3;
434 conf_motion_hd.pipe.queue_delay_ms = 100;
435 conf_motion_hd.pipe.link_capacity_kbps = 2000;
436 RunTest(conf_motion_hd);
437}
438
439TEST_F(FullStackTest, ConferenceMotionHd4TLModerateLimits) {
440 VideoQualityTest::Params conf_motion_hd;
441 conf_motion_hd.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100442 conf_motion_hd.video[0] = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000443 true, 1280, 720, 50, 30000,
444 3000000, 3000000, false, "VP8", 4,
445 -1, 0, false, false, "ConferenceMotion_1280_720_50"};
sprangff19d352017-09-06 07:14:02 -0700446 conf_motion_hd.analyzer = {"conference_motion_hd_4tl_moderate_limits", 0.0,
447 0.0, kFullStackTestDurationSecs};
448 conf_motion_hd.pipe.queue_length_packets = 50;
449 conf_motion_hd.pipe.loss_percent = 3;
450 conf_motion_hd.pipe.queue_delay_ms = 100;
451 conf_motion_hd.pipe.link_capacity_kbps = 2000;
452 RunTest(conf_motion_hd);
453}
454
455TEST_F(FullStackTest, ConferenceMotionHd3TLModerateLimitsAltTLPattern) {
456 test::ScopedFieldTrials field_trial("WebRTC-UseShortVP8TL3Pattern/Enabled/");
457 VideoQualityTest::Params conf_motion_hd;
458 conf_motion_hd.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100459 conf_motion_hd.video[0] = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000460 true, 1280, 720, 50, 30000,
461 3000000, 3000000, false, "VP8", 3,
462 -1, 0, false, false, "ConferenceMotion_1280_720_50"};
sprangff19d352017-09-06 07:14:02 -0700463 conf_motion_hd.analyzer = {"conference_motion_hd_3tl_alt_moderate_limits",
464 0.0, 0.0, kFullStackTestDurationSecs};
465 conf_motion_hd.pipe.queue_length_packets = 50;
466 conf_motion_hd.pipe.loss_percent = 3;
467 conf_motion_hd.pipe.queue_delay_ms = 100;
468 conf_motion_hd.pipe.link_capacity_kbps = 2000;
469 RunTest(conf_motion_hd);
470}
471
jianj390e64d2017-02-03 09:51:23 -0800472#if !defined(RTC_DISABLE_VP9)
473TEST_F(FullStackTest, ConferenceMotionHd2000kbps100msLimitedQueueVP9) {
474 VideoQualityTest::Params conf_motion_hd;
475 conf_motion_hd.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100476 conf_motion_hd.video[0] = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000477 true, 1280, 720, 50, 30000,
478 3000000, 3000000, false, "VP9", 1,
479 0, 0, false, false, "ConferenceMotion_1280_720_50"};
jianj390e64d2017-02-03 09:51:23 -0800480 conf_motion_hd.analyzer = {
481 "conference_motion_hd_2000kbps_100ms_32pkts_queue_vp9", 0.0, 0.0,
482 kFullStackTestDurationSecs};
483 conf_motion_hd.pipe.queue_length_packets = 32;
484 conf_motion_hd.pipe.queue_delay_ms = 100;
485 conf_motion_hd.pipe.link_capacity_kbps = 2000;
486 RunTest(conf_motion_hd);
487}
488#endif
489
ivica7bd242e2015-10-06 02:04:06 -0700490TEST_F(FullStackTest, ScreenshareSlidesVP8_2TL) {
minyue626bc952016-10-31 05:47:02 -0700491 VideoQualityTest::Params screenshare;
492 screenshare.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100493 screenshare.video[0] = {true, 1850, 1110, 5, 50000,
494 200000, 2000000, false, "VP8", 2,
495 1, 400000, false, false, ""};
496 screenshare.screenshare[0] = {true, false, 10};
minyue626bc952016-10-31 05:47:02 -0700497 screenshare.analyzer = {"screenshare_slides", 0.0, 0.0,
498 kFullStackTestDurationSecs};
ivica5d6a06c2015-09-17 05:30:24 -0700499 RunTest(screenshare);
Erik Språng6ee69aa2015-09-03 15:58:05 +0200500}
501
ilnikcb8c1462017-03-09 09:23:30 -0800502TEST_F(FullStackTest, ScreenshareSlidesVP8_3TL_Simulcast) {
sprang89c4a7e2017-06-30 13:27:40 -0700503 test::ScopedFieldTrials field_trial(kScreenshareSimulcastExperiment);
ilnikcb8c1462017-03-09 09:23:30 -0800504 VideoQualityTest::Params screenshare;
505 screenshare.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100506 screenshare.screenshare[0] = {true, false, 10};
507 screenshare.video[0] = {true, 1850, 1110, 5, 800000,
508 2500000, 2500000, false, "VP8", 3,
509 2, 400000, false, false, ""};
ilnikcb8c1462017-03-09 09:23:30 -0800510 screenshare.analyzer = {"screenshare_slides_simulcast", 0.0, 0.0,
511 kFullStackTestDurationSecs};
512 VideoQualityTest::Params screenshare_params_high;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100513 screenshare_params_high.video[0] = {true, 1850, 1110, 5, 800000,
514 2500000, 2500000, false, "VP8", 3,
515 0, 400000, false, false, ""};
ilnikcb8c1462017-03-09 09:23:30 -0800516 VideoQualityTest::Params screenshare_params_low;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100517 screenshare_params_low.video[0] = {true, 1850, 1110, 5, 50000,
518 200000, 2000000, false, "VP8", 2,
519 0, 400000, false, false, ""};
ilnikcb8c1462017-03-09 09:23:30 -0800520
521 std::vector<VideoStream> streams = {
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100522 DefaultVideoStream(screenshare_params_low, 0),
523 DefaultVideoStream(screenshare_params_high, 0)};
Sergey Silkin57027362018-05-15 09:12:05 +0200524 screenshare.ss[0] = {
525 streams, 1, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
526 false};
ilnikcb8c1462017-03-09 09:23:30 -0800527 RunTest(screenshare);
528}
529
ivica7bd242e2015-10-06 02:04:06 -0700530TEST_F(FullStackTest, ScreenshareSlidesVP8_2TL_Scroll) {
minyue626bc952016-10-31 05:47:02 -0700531 VideoQualityTest::Params config;
532 config.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100533 config.video[0] = {true, 1850, 1110 / 2, 5, 50000,
534 200000, 2000000, false, "VP8", 2,
535 1, 400000, false, false, ""};
536 config.screenshare[0] = {true, false, 10, 2};
minyue626bc952016-10-31 05:47:02 -0700537 config.analyzer = {"screenshare_slides_scrolling", 0.0, 0.0,
538 kFullStackTestDurationSecs};
ivica5d6a06c2015-09-17 05:30:24 -0700539 RunTest(config);
ivica028cf482015-07-30 02:15:56 -0700540}
541
sprangee37de32015-11-23 06:10:23 -0800542TEST_F(FullStackTest, ScreenshareSlidesVP8_2TL_LossyNet) {
minyue626bc952016-10-31 05:47:02 -0700543 VideoQualityTest::Params screenshare;
544 screenshare.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100545 screenshare.video[0] = {true, 1850, 1110, 5, 50000,
546 200000, 2000000, false, "VP8", 2,
547 1, 400000, false, false, ""};
548 screenshare.screenshare[0] = {true, false, 10};
minyue626bc952016-10-31 05:47:02 -0700549 screenshare.analyzer = {"screenshare_slides_lossy_net", 0.0, 0.0,
550 kFullStackTestDurationSecs};
sprangee37de32015-11-23 06:10:23 -0800551 screenshare.pipe.loss_percent = 5;
552 screenshare.pipe.queue_delay_ms = 200;
553 screenshare.pipe.link_capacity_kbps = 500;
554 RunTest(screenshare);
555}
556
557TEST_F(FullStackTest, ScreenshareSlidesVP8_2TL_VeryLossyNet) {
minyue626bc952016-10-31 05:47:02 -0700558 VideoQualityTest::Params screenshare;
559 screenshare.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100560 screenshare.video[0] = {true, 1850, 1110, 5, 50000,
561 200000, 2000000, false, "VP8", 2,
562 1, 400000, false, false, ""};
563 screenshare.screenshare[0] = {true, false, 10};
minyue626bc952016-10-31 05:47:02 -0700564 screenshare.analyzer = {"screenshare_slides_very_lossy", 0.0, 0.0,
565 kFullStackTestDurationSecs};
sprangee37de32015-11-23 06:10:23 -0800566 screenshare.pipe.loss_percent = 10;
567 screenshare.pipe.queue_delay_ms = 200;
568 screenshare.pipe.link_capacity_kbps = 500;
569 RunTest(screenshare);
570}
571
sprange566e172017-06-08 01:29:15 -0700572TEST_F(FullStackTest, ScreenshareSlidesVP8_2TL_LossyNetRestrictedQueue) {
573 VideoQualityTest::Params screenshare;
574 screenshare.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100575 screenshare.video[0] = {true, 1850, 1110, 5, 50000,
576 200000, 2000000, false, "VP8", 2,
577 1, 400000, false, false, ""};
578 screenshare.screenshare[0] = {true, false, 10};
sprange566e172017-06-08 01:29:15 -0700579 screenshare.analyzer = {"screenshare_slides_lossy_limited", 0.0, 0.0,
580 kFullStackTestDurationSecs};
581 screenshare.pipe.loss_percent = 5;
582 screenshare.pipe.link_capacity_kbps = 200;
583 screenshare.pipe.queue_length_packets = 30;
584
585 RunTest(screenshare);
586}
587
sprang89c4a7e2017-06-30 13:27:40 -0700588TEST_F(FullStackTest, ScreenshareSlidesVP8_2TL_ModeratelyRestricted) {
589 VideoQualityTest::Params screenshare;
590 screenshare.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100591 screenshare.video[0] = {true, 1850, 1110, 5, 50000,
592 200000, 2000000, false, "VP8", 2,
593 1, 400000, false, false, ""};
594 screenshare.screenshare[0] = {true, false, 10};
sprang89c4a7e2017-06-30 13:27:40 -0700595 screenshare.analyzer = {"screenshare_slides_moderately_restricted", 0.0, 0.0,
596 kFullStackTestDurationSecs};
597 screenshare.pipe.loss_percent = 1;
598 screenshare.pipe.link_capacity_kbps = 1200;
599 screenshare.pipe.queue_length_packets = 30;
600
601 RunTest(screenshare);
602}
603
604// TODO(sprang): Retire these tests once experiment is removed.
605TEST_F(FullStackTest, ScreenshareSlidesVP8_2TL_LossyNetRestrictedQueue_ALR) {
606 test::ScopedFieldTrials field_trial(kAlrProbingExperiment);
607 VideoQualityTest::Params screenshare;
608 screenshare.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100609 screenshare.video[0] = {true, 1850, 1110, 5, 50000,
610 200000, 2000000, false, "VP8", 2,
611 1, 400000, false, false, ""};
612 screenshare.screenshare[0] = {true, false, 10};
sprang89c4a7e2017-06-30 13:27:40 -0700613 screenshare.analyzer = {"screenshare_slides_lossy_limited_ALR", 0.0, 0.0,
614 kFullStackTestDurationSecs};
615 screenshare.pipe.loss_percent = 5;
616 screenshare.pipe.link_capacity_kbps = 200;
617 screenshare.pipe.queue_length_packets = 30;
618
619 RunTest(screenshare);
620}
621
622TEST_F(FullStackTest, ScreenshareSlidesVP8_2TL_ALR) {
623 test::ScopedFieldTrials field_trial(kAlrProbingExperiment);
624 VideoQualityTest::Params screenshare;
625 screenshare.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100626 screenshare.video[0] = {true, 1850, 1110, 5, 50000,
627 200000, 2000000, false, "VP8", 2,
628 1, 400000, false, false, ""};
629 screenshare.screenshare[0] = {true, false, 10};
sprang89c4a7e2017-06-30 13:27:40 -0700630 screenshare.analyzer = {"screenshare_slides_ALR", 0.0, 0.0,
631 kFullStackTestDurationSecs};
632 RunTest(screenshare);
633}
634
635TEST_F(FullStackTest, ScreenshareSlidesVP8_2TL_ModeratelyRestricted_ALR) {
636 test::ScopedFieldTrials field_trial(kAlrProbingExperiment);
637 VideoQualityTest::Params screenshare;
638 screenshare.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100639 screenshare.video[0] = {true, 1850, 1110, 5, 50000,
640 200000, 2000000, false, "VP8", 2,
641 1, 400000, false, false, ""};
642 screenshare.screenshare[0] = {true, false, 10};
sprang89c4a7e2017-06-30 13:27:40 -0700643 screenshare.analyzer = {"screenshare_slides_moderately_restricted_ALR", 0.0,
644 0.0, kFullStackTestDurationSecs};
645 screenshare.pipe.loss_percent = 1;
646 screenshare.pipe.link_capacity_kbps = 1200;
647 screenshare.pipe.queue_length_packets = 30;
648
649 RunTest(screenshare);
650}
651
652TEST_F(FullStackTest, ScreenshareSlidesVP8_3TL_Simulcast_ALR) {
653 test::ScopedFieldTrials field_trial(kScreenshareSimulcastExperiment +
654 kAlrProbingExperiment);
655 VideoQualityTest::Params screenshare;
656 screenshare.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100657 screenshare.screenshare[0] = {true, false, 10};
658 screenshare.video[0] = {true, 1850, 1110, 5, 800000,
659 2500000, 2500000, false, "VP8", 3,
660 2, 400000, false, false, ""};
sprang89c4a7e2017-06-30 13:27:40 -0700661 screenshare.analyzer = {"screenshare_slides_simulcast_alr", 0.0, 0.0,
662 kFullStackTestDurationSecs};
663 VideoQualityTest::Params screenshare_params_high;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100664 screenshare_params_high.video[0] = {true, 1850, 1110, 5, 800000,
665 2500000, 2500000, false, "VP8", 3,
666 0, 400000, false, false, ""};
sprang89c4a7e2017-06-30 13:27:40 -0700667 VideoQualityTest::Params screenshare_params_low;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100668 screenshare_params_low.video[0] = {true, 1850, 1110, 5, 50000,
669 200000, 2000000, false, "VP8", 2,
670 0, 400000, false, false, ""};
sprang89c4a7e2017-06-30 13:27:40 -0700671
672 std::vector<VideoStream> streams = {
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100673 DefaultVideoStream(screenshare_params_low, 0),
674 DefaultVideoStream(screenshare_params_high, 0)};
Sergey Silkin57027362018-05-15 09:12:05 +0200675 screenshare.ss[0] = {
676 streams, 1, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
677 false};
sprang89c4a7e2017-06-30 13:27:40 -0700678 RunTest(screenshare);
679}
680
ilnik566c43b2017-03-07 04:42:54 -0800681const VideoQualityTest::Params::Video kSvcVp9Video = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000682 true, 1280, 720, 30, 800000,
683 2500000, 2500000, false, "VP9", 3,
684 2, 400000, false, false, "ConferenceMotion_1280_720_50"};
ilnik566c43b2017-03-07 04:42:54 -0800685
686const VideoQualityTest::Params::Video kSimulcastVp8VideoHigh = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000687 true, 1280, 720, 30, 800000,
688 2500000, 2500000, false, "VP8", 3,
689 2, 400000, false, false, "ConferenceMotion_1280_720_50"};
ilnik566c43b2017-03-07 04:42:54 -0800690
691const VideoQualityTest::Params::Video kSimulcastVp8VideoMedium = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000692 true, 640, 360, 30, 150000,
693 500000, 700000, false, "VP8", 3,
694 2, 400000, false, false, "ConferenceMotion_1280_720_50"};
ilnik566c43b2017-03-07 04:42:54 -0800695
696const VideoQualityTest::Params::Video kSimulcastVp8VideoLow = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000697 true, 320, 180, 30, 30000,
698 150000, 200000, false, "VP8", 3,
699 2, 400000, false, false, "ConferenceMotion_1280_720_50"};
ilnik566c43b2017-03-07 04:42:54 -0800700
Peter Boström12996152016-05-14 02:03:18 +0200701#if !defined(RTC_DISABLE_VP9)
marpan5f4aaeb2017-04-06 10:52:23 -0700702TEST_F(FullStackTest, ScreenshareSlidesVP9_2SL) {
minyue626bc952016-10-31 05:47:02 -0700703 VideoQualityTest::Params screenshare;
704 screenshare.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100705 screenshare.video[0] = {true, 1850, 1110, 5, 50000,
706 200000, 2000000, false, "VP9", 1,
707 0, 400000, false, false, ""};
708 screenshare.screenshare[0] = {true, false, 10};
minyue626bc952016-10-31 05:47:02 -0700709 screenshare.analyzer = {"screenshare_slides_vp9_2sl", 0.0, 0.0,
710 kFullStackTestDurationSecs};
Sergey Silkin57027362018-05-15 09:12:05 +0200711 screenshare.ss[0] = {
712 std::vector<VideoStream>(), 0, 2, 1, InterLayerPredMode::kOn,
713 std::vector<SpatialLayer>(), false};
ivica5d6a06c2015-09-17 05:30:24 -0700714 RunTest(screenshare);
sprang@webrtc.org131bea82015-02-18 12:46:06 +0000715}
ilnik2a8c2f52017-02-15 02:23:28 -0800716
Elad Alon34b1bc72018-05-21 11:53:57 +0200717// TODO(bugs.webrtc.org/9220): Re-enable this test once the issue is fixed.
718TEST_F(FullStackTest, DISABLED_VP9SVC_3SL_High) {
ilnik2a8c2f52017-02-15 02:23:28 -0800719 VideoQualityTest::Params simulcast;
720 simulcast.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100721 simulcast.video[0] = kSvcVp9Video;
ilnik2a8c2f52017-02-15 02:23:28 -0800722 simulcast.analyzer = {"vp9svc_3sl_high", 0.0, 0.0,
723 kFullStackTestDurationSecs};
Sergey Silkin57027362018-05-15 09:12:05 +0200724 simulcast.ss[0] = {
725 std::vector<VideoStream>(), 0, 3, 2, InterLayerPredMode::kOn,
726 std::vector<SpatialLayer>(), false};
ilnik2a8c2f52017-02-15 02:23:28 -0800727 RunTest(simulcast);
728}
729
730TEST_F(FullStackTest, VP9SVC_3SL_Medium) {
731 VideoQualityTest::Params simulcast;
732 simulcast.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100733 simulcast.video[0] = kSvcVp9Video;
ilnik2a8c2f52017-02-15 02:23:28 -0800734 simulcast.analyzer = {"vp9svc_3sl_medium", 0.0, 0.0,
735 kFullStackTestDurationSecs};
Sergey Silkin57027362018-05-15 09:12:05 +0200736 simulcast.ss[0] = {
737 std::vector<VideoStream>(), 0, 3, 1, InterLayerPredMode::kOn,
738 std::vector<SpatialLayer>(), false};
ilnik2a8c2f52017-02-15 02:23:28 -0800739 RunTest(simulcast);
740}
741
742TEST_F(FullStackTest, VP9SVC_3SL_Low) {
743 VideoQualityTest::Params simulcast;
744 simulcast.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100745 simulcast.video[0] = kSvcVp9Video;
ilnik2a8c2f52017-02-15 02:23:28 -0800746 simulcast.analyzer = {"vp9svc_3sl_low", 0.0, 0.0, kFullStackTestDurationSecs};
Sergey Silkin57027362018-05-15 09:12:05 +0200747 simulcast.ss[0] = {
748 std::vector<VideoStream>(), 0, 3, 0, InterLayerPredMode::kOn,
749 std::vector<SpatialLayer>(), false};
ilnik2a8c2f52017-02-15 02:23:28 -0800750 RunTest(simulcast);
751}
Sergey Silkin0643fd62018-05-17 12:50:53 +0200752
753TEST_F(FullStackTest, VP9KSVC_3SL_High) {
754 VideoQualityTest::Params simulcast;
755 simulcast.call.send_side_bwe = true;
756 simulcast.video[0] = kSvcVp9Video;
757 simulcast.analyzer = {"vp9ksvc_3sl_high", 0.0, 0.0,
758 kFullStackTestDurationSecs};
759 simulcast.ss[0] = {
760 std::vector<VideoStream>(), 0, 3, 2, InterLayerPredMode::kOnKeyPic,
761 std::vector<SpatialLayer>(), false};
762 RunTest(simulcast);
763}
764
765TEST_F(FullStackTest, VP9KSVC_3SL_Medium) {
766 VideoQualityTest::Params simulcast;
767 simulcast.call.send_side_bwe = true;
768 simulcast.video[0] = kSvcVp9Video;
769 simulcast.analyzer = {"vp9ksvc_3sl_medium", 0.0, 0.0,
770 kFullStackTestDurationSecs};
771 simulcast.ss[0] = {
772 std::vector<VideoStream>(), 0, 3, 1, InterLayerPredMode::kOnKeyPic,
773 std::vector<SpatialLayer>(), false};
774 RunTest(simulcast);
775}
776
777TEST_F(FullStackTest, VP9KSVC_3SL_Low) {
778 VideoQualityTest::Params simulcast;
779 simulcast.call.send_side_bwe = true;
780 simulcast.video[0] = kSvcVp9Video;
781 simulcast.analyzer = {"vp9ksvc_3sl_low", 0.0, 0.0,
782 kFullStackTestDurationSecs};
783 simulcast.ss[0] = {
784 std::vector<VideoStream>(), 0, 3, 0, InterLayerPredMode::kOnKeyPic,
785 std::vector<SpatialLayer>(), false};
786 RunTest(simulcast);
787}
Peter Boström12996152016-05-14 02:03:18 +0200788#endif // !defined(RTC_DISABLE_VP9)
brandtr93c5d032016-11-30 07:50:07 -0800789
ilnik6b826ef2017-06-16 06:53:48 -0700790// Android bots can't handle FullHD, so disable the test.
Sam Zackrissonc3d8bb12018-05-02 10:22:32 +0200791// TODO(bugs.webrtc.org/9220): Investigate source of flakiness on Mac.
792#if defined(WEBRTC_ANDROID) || defined(WEBRTC_MAC)
ilnik6b826ef2017-06-16 06:53:48 -0700793#define MAYBE_SimulcastFullHdOveruse DISABLED_SimulcastFullHdOveruse
794#else
795#define MAYBE_SimulcastFullHdOveruse SimulcastFullHdOveruse
796#endif
797
798TEST_F(FullStackTest, MAYBE_SimulcastFullHdOveruse) {
799 VideoQualityTest::Params simulcast;
800 simulcast.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100801 simulcast.video[0] = {true, 1920, 1080, 30, 800000,
802 2500000, 2500000, false, "VP8", 3,
803 2, 400000, false, false, "Generator"};
ilnik6b826ef2017-06-16 06:53:48 -0700804 simulcast.analyzer = {"simulcast_HD_high", 0.0, 0.0,
805 kFullStackTestDurationSecs};
806 simulcast.pipe.loss_percent = 0;
807 simulcast.pipe.queue_delay_ms = 100;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100808 std::vector<VideoStream> streams = {DefaultVideoStream(simulcast, 0),
809 DefaultVideoStream(simulcast, 0),
810 DefaultVideoStream(simulcast, 0)};
Sergey Silkin57027362018-05-15 09:12:05 +0200811 simulcast.ss[0] = {
812 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
813 true};
ilnik6b826ef2017-06-16 06:53:48 -0700814 webrtc::test::ScopedFieldTrials override_trials(
815 "WebRTC-ForceSimulatedOveruseIntervalMs/1000-50000-300/");
816 RunTest(simulcast);
817}
818
ilnik3dd5ad92017-02-09 04:58:53 -0800819TEST_F(FullStackTest, SimulcastVP8_3SL_High) {
820 VideoQualityTest::Params simulcast;
821 simulcast.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100822 simulcast.video[0] = kSimulcastVp8VideoHigh;
ilnik2a8c2f52017-02-15 02:23:28 -0800823 simulcast.analyzer = {"simulcast_vp8_3sl_high", 0.0, 0.0,
ilnik3dd5ad92017-02-09 04:58:53 -0800824 kFullStackTestDurationSecs};
825 simulcast.pipe.loss_percent = 0;
826 simulcast.pipe.queue_delay_ms = 100;
827 VideoQualityTest::Params video_params_high;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100828 video_params_high.video[0] = kSimulcastVp8VideoHigh;
ilnik3dd5ad92017-02-09 04:58:53 -0800829 VideoQualityTest::Params video_params_medium;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100830 video_params_medium.video[0] = kSimulcastVp8VideoMedium;
ilnik3dd5ad92017-02-09 04:58:53 -0800831 VideoQualityTest::Params video_params_low;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100832 video_params_low.video[0] = kSimulcastVp8VideoLow;
ilnik3dd5ad92017-02-09 04:58:53 -0800833
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100834 std::vector<VideoStream> streams = {
835 DefaultVideoStream(video_params_low, 0),
836 DefaultVideoStream(video_params_medium, 0),
837 DefaultVideoStream(video_params_high, 0)};
Sergey Silkin57027362018-05-15 09:12:05 +0200838 simulcast.ss[0] = {
839 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
840 false};
ilnik3dd5ad92017-02-09 04:58:53 -0800841 RunTest(simulcast);
842}
843
844TEST_F(FullStackTest, SimulcastVP8_3SL_Medium) {
845 VideoQualityTest::Params simulcast;
846 simulcast.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100847 simulcast.video[0] = kSimulcastVp8VideoHigh;
ilnik2a8c2f52017-02-15 02:23:28 -0800848 simulcast.analyzer = {"simulcast_vp8_3sl_medium", 0.0, 0.0,
ilnik3dd5ad92017-02-09 04:58:53 -0800849 kFullStackTestDurationSecs};
850 simulcast.pipe.loss_percent = 0;
851 simulcast.pipe.queue_delay_ms = 100;
852 VideoQualityTest::Params video_params_high;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100853 video_params_high.video[0] = kSimulcastVp8VideoHigh;
ilnik3dd5ad92017-02-09 04:58:53 -0800854 VideoQualityTest::Params video_params_medium;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100855 video_params_medium.video[0] = kSimulcastVp8VideoMedium;
ilnik3dd5ad92017-02-09 04:58:53 -0800856 VideoQualityTest::Params video_params_low;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100857 video_params_low.video[0] = kSimulcastVp8VideoLow;
ilnik3dd5ad92017-02-09 04:58:53 -0800858
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100859 std::vector<VideoStream> streams = {
860 DefaultVideoStream(video_params_low, 0),
861 DefaultVideoStream(video_params_medium, 0),
862 DefaultVideoStream(video_params_high, 0)};
Sergey Silkin57027362018-05-15 09:12:05 +0200863 simulcast.ss[0] = {
864 streams, 1, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
865 false};
ilnik3dd5ad92017-02-09 04:58:53 -0800866 RunTest(simulcast);
867}
868
869TEST_F(FullStackTest, SimulcastVP8_3SL_Low) {
870 VideoQualityTest::Params simulcast;
871 simulcast.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100872 simulcast.video[0] = kSimulcastVp8VideoHigh;
ilnik2a8c2f52017-02-15 02:23:28 -0800873 simulcast.analyzer = {"simulcast_vp8_3sl_low", 0.0, 0.0,
ilnik3dd5ad92017-02-09 04:58:53 -0800874 kFullStackTestDurationSecs};
875 simulcast.pipe.loss_percent = 0;
876 simulcast.pipe.queue_delay_ms = 100;
877 VideoQualityTest::Params video_params_high;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100878 video_params_high.video[0] = kSimulcastVp8VideoHigh;
ilnik3dd5ad92017-02-09 04:58:53 -0800879 VideoQualityTest::Params video_params_medium;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100880 video_params_medium.video[0] = kSimulcastVp8VideoMedium;
ilnik3dd5ad92017-02-09 04:58:53 -0800881 VideoQualityTest::Params video_params_low;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100882 video_params_low.video[0] = kSimulcastVp8VideoLow;
ilnik3dd5ad92017-02-09 04:58:53 -0800883
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100884 std::vector<VideoStream> streams = {
885 DefaultVideoStream(video_params_low, 0),
886 DefaultVideoStream(video_params_medium, 0),
887 DefaultVideoStream(video_params_high, 0)};
Sergey Silkin57027362018-05-15 09:12:05 +0200888 simulcast.ss[0] = {
889 streams, 0, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
890 false};
ilnik3dd5ad92017-02-09 04:58:53 -0800891 RunTest(simulcast);
892}
893
ilnika014cc52017-03-07 04:21:04 -0800894TEST_F(FullStackTest, LargeRoomVP8_5thumb) {
895 VideoQualityTest::Params large_room;
896 large_room.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100897 large_room.video[0] = kSimulcastVp8VideoHigh;
ilnika014cc52017-03-07 04:21:04 -0800898 large_room.analyzer = {"largeroom_5thumb", 0.0, 0.0,
899 kFullStackTestDurationSecs};
900 large_room.pipe.loss_percent = 0;
901 large_room.pipe.queue_delay_ms = 100;
902 VideoQualityTest::Params video_params_high;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100903 video_params_high.video[0] = kSimulcastVp8VideoHigh;
ilnika014cc52017-03-07 04:21:04 -0800904 VideoQualityTest::Params video_params_medium;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100905 video_params_medium.video[0] = kSimulcastVp8VideoMedium;
ilnika014cc52017-03-07 04:21:04 -0800906 VideoQualityTest::Params video_params_low;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100907 video_params_low.video[0] = kSimulcastVp8VideoLow;
ilnika014cc52017-03-07 04:21:04 -0800908
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100909 std::vector<VideoStream> streams = {
910 DefaultVideoStream(video_params_low, 0),
911 DefaultVideoStream(video_params_medium, 0),
912 DefaultVideoStream(video_params_high, 0)};
ilnik98436952017-07-13 00:47:03 -0700913 large_room.call.num_thumbnails = 5;
Sergey Silkin57027362018-05-15 09:12:05 +0200914 large_room.ss[0] = {
915 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
916 false};
ilnika014cc52017-03-07 04:21:04 -0800917 RunTest(large_room);
918}
919
oprypin743117f2017-09-15 05:24:24 -0700920#if defined(WEBRTC_ANDROID) || defined(WEBRTC_IOS)
921// Fails on mobile devices:
ilnikf89a7382017-03-07 06:15:27 -0800922// https://bugs.chromium.org/p/webrtc/issues/detail?id=7301
923#define MAYBE_LargeRoomVP8_50thumb DISABLED_LargeRoomVP8_50thumb
ilnik3ae7c252017-03-08 01:17:35 -0800924#define MAYBE_LargeRoomVP8_15thumb DISABLED_LargeRoomVP8_15thumb
ilnikf89a7382017-03-07 06:15:27 -0800925#else
926#define MAYBE_LargeRoomVP8_50thumb LargeRoomVP8_50thumb
ilnik3ae7c252017-03-08 01:17:35 -0800927#define MAYBE_LargeRoomVP8_15thumb LargeRoomVP8_15thumb
ilnikf89a7382017-03-07 06:15:27 -0800928#endif
929
930TEST_F(FullStackTest, MAYBE_LargeRoomVP8_15thumb) {
ilnika014cc52017-03-07 04:21:04 -0800931 VideoQualityTest::Params large_room;
932 large_room.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100933 large_room.video[0] = kSimulcastVp8VideoHigh;
ilnika014cc52017-03-07 04:21:04 -0800934 large_room.analyzer = {"largeroom_15thumb", 0.0, 0.0,
935 kFullStackTestDurationSecs};
936 large_room.pipe.loss_percent = 0;
937 large_room.pipe.queue_delay_ms = 100;
938 VideoQualityTest::Params video_params_high;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100939 video_params_high.video[0] = kSimulcastVp8VideoHigh;
ilnika014cc52017-03-07 04:21:04 -0800940 VideoQualityTest::Params video_params_medium;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100941 video_params_medium.video[0] = kSimulcastVp8VideoMedium;
ilnika014cc52017-03-07 04:21:04 -0800942 VideoQualityTest::Params video_params_low;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100943 video_params_low.video[0] = kSimulcastVp8VideoLow;
ilnika014cc52017-03-07 04:21:04 -0800944
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100945 std::vector<VideoStream> streams = {
946 DefaultVideoStream(video_params_low, 0),
947 DefaultVideoStream(video_params_medium, 0),
948 DefaultVideoStream(video_params_high, 0)};
ilnik98436952017-07-13 00:47:03 -0700949 large_room.call.num_thumbnails = 15;
Sergey Silkin57027362018-05-15 09:12:05 +0200950 large_room.ss[0] = {
951 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
952 false};
ilnika014cc52017-03-07 04:21:04 -0800953 RunTest(large_room);
954}
955
ilnika014cc52017-03-07 04:21:04 -0800956TEST_F(FullStackTest, MAYBE_LargeRoomVP8_50thumb) {
957 VideoQualityTest::Params large_room;
958 large_room.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100959 large_room.video[0] = kSimulcastVp8VideoHigh;
ilnika014cc52017-03-07 04:21:04 -0800960 large_room.analyzer = {"largeroom_50thumb", 0.0, 0.0,
961 kFullStackTestDurationSecs};
962 large_room.pipe.loss_percent = 0;
963 large_room.pipe.queue_delay_ms = 100;
964 VideoQualityTest::Params video_params_high;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100965 video_params_high.video[0] = kSimulcastVp8VideoHigh;
ilnika014cc52017-03-07 04:21:04 -0800966 VideoQualityTest::Params video_params_medium;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100967 video_params_medium.video[0] = kSimulcastVp8VideoMedium;
ilnika014cc52017-03-07 04:21:04 -0800968 VideoQualityTest::Params video_params_low;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100969 video_params_low.video[0] = kSimulcastVp8VideoLow;
ilnika014cc52017-03-07 04:21:04 -0800970
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100971 std::vector<VideoStream> streams = {
972 DefaultVideoStream(video_params_low, 0),
973 DefaultVideoStream(video_params_medium, 0),
974 DefaultVideoStream(video_params_high, 0)};
ilnik98436952017-07-13 00:47:03 -0700975 large_room.call.num_thumbnails = 50;
Sergey Silkin57027362018-05-15 09:12:05 +0200976 large_room.ss[0] = {
977 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
978 false};
ilnika014cc52017-03-07 04:21:04 -0800979 RunTest(large_room);
980}
981
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100982class DualStreamsTest : public FullStackTest,
983 public ::testing::WithParamInterface<int> {};
984
985// Disable dual video test on mobile device becuase it's too heavy.
986#if !defined(WEBRTC_ANDROID) && !defined(WEBRTC_IOS)
987TEST_P(DualStreamsTest,
988 ModeratelyRestricted_SlidesVp8_3TL_Simulcast_Video_Simulcast_High) {
989 test::ScopedFieldTrials field_trial(
990 kScreenshareSimulcastExperiment + kAlrProbingExperiment +
991 kRoundRobinPacingQueueExperiment + kPacerPushBackExperiment);
992 const int first_stream = GetParam();
993 VideoQualityTest::Params dual_streams;
994
995 // Screenshare Settings.
996 dual_streams.screenshare[first_stream] = {true, false, 10};
997 dual_streams.video[first_stream] = {true, 1850, 1110, 5, 800000,
998 2500000, 2500000, false, "VP8", 3,
999 2, 400000, false, false, ""};
1000
1001 VideoQualityTest::Params screenshare_params_high;
1002 screenshare_params_high.video[0] = {true, 1850, 1110, 5, 800000,
1003 2500000, 2500000, false, "VP8", 3,
1004 0, 400000, false, false, ""};
1005 VideoQualityTest::Params screenshare_params_low;
1006 screenshare_params_low.video[0] = {true, 1850, 1110, 5, 50000,
1007 200000, 2000000, false, "VP8", 2,
1008 0, 400000, false, false, ""};
1009 std::vector<VideoStream> screenhsare_streams = {
1010 DefaultVideoStream(screenshare_params_low, 0),
1011 DefaultVideoStream(screenshare_params_high, 0)};
1012
Sergey Silkin57027362018-05-15 09:12:05 +02001013 dual_streams.ss[first_stream] = {
1014 screenhsare_streams, 1, 1, 0, InterLayerPredMode::kOn,
1015 std::vector<SpatialLayer>(), false};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001016
1017 // Video settings.
1018 dual_streams.video[1 - first_stream] = kSimulcastVp8VideoHigh;
1019
1020 VideoQualityTest::Params video_params_high;
1021 video_params_high.video[0] = kSimulcastVp8VideoHigh;
1022 VideoQualityTest::Params video_params_medium;
1023 video_params_medium.video[0] = kSimulcastVp8VideoMedium;
1024 VideoQualityTest::Params video_params_low;
1025 video_params_low.video[0] = kSimulcastVp8VideoLow;
1026 std::vector<VideoStream> streams = {
1027 DefaultVideoStream(video_params_low, 0),
1028 DefaultVideoStream(video_params_medium, 0),
1029 DefaultVideoStream(video_params_high, 0)};
1030
1031 dual_streams.ss[1 - first_stream] = {
Sergey Silkin57027362018-05-15 09:12:05 +02001032 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1033 false};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001034
1035 // Call settings.
1036 dual_streams.call.send_side_bwe = true;
1037 dual_streams.call.dual_video = true;
Edward Lemur35d2b7e2017-12-27 18:54:47 +01001038 std::string test_label = "dualstreams_moderately_restricted_screenshare_" +
1039 std::to_string(first_stream);
1040 dual_streams.analyzer = {test_label, 0.0, 0.0, kFullStackTestDurationSecs};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001041 dual_streams.pipe.loss_percent = 1;
1042 dual_streams.pipe.link_capacity_kbps = 7500;
1043 dual_streams.pipe.queue_length_packets = 30;
1044 dual_streams.pipe.queue_delay_ms = 100;
1045
1046 RunTest(dual_streams);
1047}
1048#endif // !defined(WEBRTC_ANDROID) && !defined(WEBRTC_IOS)
1049
1050TEST_P(DualStreamsTest, Conference_Restricted) {
1051 test::ScopedFieldTrials field_trial(kRoundRobinPacingQueueExperiment +
1052 kPacerPushBackExperiment);
1053 const int first_stream = GetParam();
1054 VideoQualityTest::Params dual_streams;
1055
1056 // Screenshare Settings.
1057 dual_streams.screenshare[first_stream] = {true, false, 10};
1058 dual_streams.video[first_stream] = {true, 1850, 1110, 5, 800000,
1059 2500000, 2500000, false, "VP8", 3,
1060 2, 400000, false, false, ""};
1061 // Video settings.
1062 dual_streams.video[1 - first_stream] = {
1063 true, 1280, 720, 30, 150000,
1064 500000, 700000, false, "VP8", 3,
1065 2, 400000, false, false, "ConferenceMotion_1280_720_50"};
1066
1067 // Call settings.
1068 dual_streams.call.send_side_bwe = true;
1069 dual_streams.call.dual_video = true;
Edward Lemur35d2b7e2017-12-27 18:54:47 +01001070 std::string test_label = "dualstreams_conference_restricted_screenshare_" +
1071 std::to_string(first_stream);
1072 dual_streams.analyzer = {test_label, 0.0, 0.0, kFullStackTestDurationSecs};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001073 dual_streams.pipe.loss_percent = 1;
1074 dual_streams.pipe.link_capacity_kbps = 5000;
1075 dual_streams.pipe.queue_length_packets = 30;
1076 dual_streams.pipe.queue_delay_ms = 100;
1077
1078 RunTest(dual_streams);
1079}
1080
1081INSTANTIATE_TEST_CASE_P(FullStackTest,
1082 DualStreamsTest,
1083 ::testing::Values(0, 1));
ilnika014cc52017-03-07 04:21:04 -08001084
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +00001085} // namespace webrtc