blob: 2317020c580a5315dddd49f1055f08f60c8dd1b6 [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
Sergey Silkinb3085b22018-05-25 09:07:11 +0000717TEST_F(FullStackTest, VP9SVC_3SL_High) {
ilnik2a8c2f52017-02-15 02:23:28 -0800718 VideoQualityTest::Params simulcast;
719 simulcast.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100720 simulcast.video[0] = kSvcVp9Video;
ilnik2a8c2f52017-02-15 02:23:28 -0800721 simulcast.analyzer = {"vp9svc_3sl_high", 0.0, 0.0,
722 kFullStackTestDurationSecs};
Sergey Silkin57027362018-05-15 09:12:05 +0200723 simulcast.ss[0] = {
724 std::vector<VideoStream>(), 0, 3, 2, InterLayerPredMode::kOn,
725 std::vector<SpatialLayer>(), false};
ilnik2a8c2f52017-02-15 02:23:28 -0800726 RunTest(simulcast);
727}
728
729TEST_F(FullStackTest, VP9SVC_3SL_Medium) {
730 VideoQualityTest::Params simulcast;
731 simulcast.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100732 simulcast.video[0] = kSvcVp9Video;
ilnik2a8c2f52017-02-15 02:23:28 -0800733 simulcast.analyzer = {"vp9svc_3sl_medium", 0.0, 0.0,
734 kFullStackTestDurationSecs};
Sergey Silkin57027362018-05-15 09:12:05 +0200735 simulcast.ss[0] = {
736 std::vector<VideoStream>(), 0, 3, 1, InterLayerPredMode::kOn,
737 std::vector<SpatialLayer>(), false};
ilnik2a8c2f52017-02-15 02:23:28 -0800738 RunTest(simulcast);
739}
740
741TEST_F(FullStackTest, VP9SVC_3SL_Low) {
742 VideoQualityTest::Params simulcast;
743 simulcast.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100744 simulcast.video[0] = kSvcVp9Video;
ilnik2a8c2f52017-02-15 02:23:28 -0800745 simulcast.analyzer = {"vp9svc_3sl_low", 0.0, 0.0, kFullStackTestDurationSecs};
Sergey Silkin57027362018-05-15 09:12:05 +0200746 simulcast.ss[0] = {
747 std::vector<VideoStream>(), 0, 3, 0, InterLayerPredMode::kOn,
748 std::vector<SpatialLayer>(), false};
ilnik2a8c2f52017-02-15 02:23:28 -0800749 RunTest(simulcast);
750}
Sergey Silkin0643fd62018-05-17 12:50:53 +0200751
752TEST_F(FullStackTest, VP9KSVC_3SL_High) {
753 VideoQualityTest::Params simulcast;
754 simulcast.call.send_side_bwe = true;
755 simulcast.video[0] = kSvcVp9Video;
756 simulcast.analyzer = {"vp9ksvc_3sl_high", 0.0, 0.0,
757 kFullStackTestDurationSecs};
758 simulcast.ss[0] = {
759 std::vector<VideoStream>(), 0, 3, 2, InterLayerPredMode::kOnKeyPic,
760 std::vector<SpatialLayer>(), false};
761 RunTest(simulcast);
762}
763
764TEST_F(FullStackTest, VP9KSVC_3SL_Medium) {
765 VideoQualityTest::Params simulcast;
766 simulcast.call.send_side_bwe = true;
767 simulcast.video[0] = kSvcVp9Video;
768 simulcast.analyzer = {"vp9ksvc_3sl_medium", 0.0, 0.0,
769 kFullStackTestDurationSecs};
770 simulcast.ss[0] = {
771 std::vector<VideoStream>(), 0, 3, 1, InterLayerPredMode::kOnKeyPic,
772 std::vector<SpatialLayer>(), false};
773 RunTest(simulcast);
774}
775
776TEST_F(FullStackTest, VP9KSVC_3SL_Low) {
777 VideoQualityTest::Params simulcast;
778 simulcast.call.send_side_bwe = true;
779 simulcast.video[0] = kSvcVp9Video;
780 simulcast.analyzer = {"vp9ksvc_3sl_low", 0.0, 0.0,
781 kFullStackTestDurationSecs};
782 simulcast.ss[0] = {
783 std::vector<VideoStream>(), 0, 3, 0, InterLayerPredMode::kOnKeyPic,
784 std::vector<SpatialLayer>(), false};
785 RunTest(simulcast);
786}
Peter Boström12996152016-05-14 02:03:18 +0200787#endif // !defined(RTC_DISABLE_VP9)
brandtr93c5d032016-11-30 07:50:07 -0800788
ilnik6b826ef2017-06-16 06:53:48 -0700789// Android bots can't handle FullHD, so disable the test.
Sam Zackrissonc3d8bb12018-05-02 10:22:32 +0200790// TODO(bugs.webrtc.org/9220): Investigate source of flakiness on Mac.
791#if defined(WEBRTC_ANDROID) || defined(WEBRTC_MAC)
ilnik6b826ef2017-06-16 06:53:48 -0700792#define MAYBE_SimulcastFullHdOveruse DISABLED_SimulcastFullHdOveruse
793#else
794#define MAYBE_SimulcastFullHdOveruse SimulcastFullHdOveruse
795#endif
796
797TEST_F(FullStackTest, MAYBE_SimulcastFullHdOveruse) {
798 VideoQualityTest::Params simulcast;
799 simulcast.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100800 simulcast.video[0] = {true, 1920, 1080, 30, 800000,
801 2500000, 2500000, false, "VP8", 3,
802 2, 400000, false, false, "Generator"};
ilnik6b826ef2017-06-16 06:53:48 -0700803 simulcast.analyzer = {"simulcast_HD_high", 0.0, 0.0,
804 kFullStackTestDurationSecs};
805 simulcast.pipe.loss_percent = 0;
806 simulcast.pipe.queue_delay_ms = 100;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100807 std::vector<VideoStream> streams = {DefaultVideoStream(simulcast, 0),
808 DefaultVideoStream(simulcast, 0),
809 DefaultVideoStream(simulcast, 0)};
Sergey Silkin57027362018-05-15 09:12:05 +0200810 simulcast.ss[0] = {
811 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
812 true};
ilnik6b826ef2017-06-16 06:53:48 -0700813 webrtc::test::ScopedFieldTrials override_trials(
814 "WebRTC-ForceSimulatedOveruseIntervalMs/1000-50000-300/");
815 RunTest(simulcast);
816}
817
ilnik3dd5ad92017-02-09 04:58:53 -0800818TEST_F(FullStackTest, SimulcastVP8_3SL_High) {
819 VideoQualityTest::Params simulcast;
820 simulcast.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100821 simulcast.video[0] = kSimulcastVp8VideoHigh;
ilnik2a8c2f52017-02-15 02:23:28 -0800822 simulcast.analyzer = {"simulcast_vp8_3sl_high", 0.0, 0.0,
ilnik3dd5ad92017-02-09 04:58:53 -0800823 kFullStackTestDurationSecs};
824 simulcast.pipe.loss_percent = 0;
825 simulcast.pipe.queue_delay_ms = 100;
826 VideoQualityTest::Params video_params_high;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100827 video_params_high.video[0] = kSimulcastVp8VideoHigh;
ilnik3dd5ad92017-02-09 04:58:53 -0800828 VideoQualityTest::Params video_params_medium;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100829 video_params_medium.video[0] = kSimulcastVp8VideoMedium;
ilnik3dd5ad92017-02-09 04:58:53 -0800830 VideoQualityTest::Params video_params_low;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100831 video_params_low.video[0] = kSimulcastVp8VideoLow;
ilnik3dd5ad92017-02-09 04:58:53 -0800832
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100833 std::vector<VideoStream> streams = {
834 DefaultVideoStream(video_params_low, 0),
835 DefaultVideoStream(video_params_medium, 0),
836 DefaultVideoStream(video_params_high, 0)};
Sergey Silkin57027362018-05-15 09:12:05 +0200837 simulcast.ss[0] = {
838 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
839 false};
ilnik3dd5ad92017-02-09 04:58:53 -0800840 RunTest(simulcast);
841}
842
843TEST_F(FullStackTest, SimulcastVP8_3SL_Medium) {
844 VideoQualityTest::Params simulcast;
845 simulcast.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100846 simulcast.video[0] = kSimulcastVp8VideoHigh;
ilnik2a8c2f52017-02-15 02:23:28 -0800847 simulcast.analyzer = {"simulcast_vp8_3sl_medium", 0.0, 0.0,
ilnik3dd5ad92017-02-09 04:58:53 -0800848 kFullStackTestDurationSecs};
849 simulcast.pipe.loss_percent = 0;
850 simulcast.pipe.queue_delay_ms = 100;
851 VideoQualityTest::Params video_params_high;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100852 video_params_high.video[0] = kSimulcastVp8VideoHigh;
ilnik3dd5ad92017-02-09 04:58:53 -0800853 VideoQualityTest::Params video_params_medium;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100854 video_params_medium.video[0] = kSimulcastVp8VideoMedium;
ilnik3dd5ad92017-02-09 04:58:53 -0800855 VideoQualityTest::Params video_params_low;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100856 video_params_low.video[0] = kSimulcastVp8VideoLow;
ilnik3dd5ad92017-02-09 04:58:53 -0800857
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100858 std::vector<VideoStream> streams = {
859 DefaultVideoStream(video_params_low, 0),
860 DefaultVideoStream(video_params_medium, 0),
861 DefaultVideoStream(video_params_high, 0)};
Sergey Silkin57027362018-05-15 09:12:05 +0200862 simulcast.ss[0] = {
863 streams, 1, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
864 false};
ilnik3dd5ad92017-02-09 04:58:53 -0800865 RunTest(simulcast);
866}
867
868TEST_F(FullStackTest, SimulcastVP8_3SL_Low) {
869 VideoQualityTest::Params simulcast;
870 simulcast.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100871 simulcast.video[0] = kSimulcastVp8VideoHigh;
ilnik2a8c2f52017-02-15 02:23:28 -0800872 simulcast.analyzer = {"simulcast_vp8_3sl_low", 0.0, 0.0,
ilnik3dd5ad92017-02-09 04:58:53 -0800873 kFullStackTestDurationSecs};
874 simulcast.pipe.loss_percent = 0;
875 simulcast.pipe.queue_delay_ms = 100;
876 VideoQualityTest::Params video_params_high;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100877 video_params_high.video[0] = kSimulcastVp8VideoHigh;
ilnik3dd5ad92017-02-09 04:58:53 -0800878 VideoQualityTest::Params video_params_medium;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100879 video_params_medium.video[0] = kSimulcastVp8VideoMedium;
ilnik3dd5ad92017-02-09 04:58:53 -0800880 VideoQualityTest::Params video_params_low;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100881 video_params_low.video[0] = kSimulcastVp8VideoLow;
ilnik3dd5ad92017-02-09 04:58:53 -0800882
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100883 std::vector<VideoStream> streams = {
884 DefaultVideoStream(video_params_low, 0),
885 DefaultVideoStream(video_params_medium, 0),
886 DefaultVideoStream(video_params_high, 0)};
Sergey Silkin57027362018-05-15 09:12:05 +0200887 simulcast.ss[0] = {
888 streams, 0, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
889 false};
ilnik3dd5ad92017-02-09 04:58:53 -0800890 RunTest(simulcast);
891}
892
ilnika014cc52017-03-07 04:21:04 -0800893TEST_F(FullStackTest, LargeRoomVP8_5thumb) {
894 VideoQualityTest::Params large_room;
895 large_room.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100896 large_room.video[0] = kSimulcastVp8VideoHigh;
ilnika014cc52017-03-07 04:21:04 -0800897 large_room.analyzer = {"largeroom_5thumb", 0.0, 0.0,
898 kFullStackTestDurationSecs};
899 large_room.pipe.loss_percent = 0;
900 large_room.pipe.queue_delay_ms = 100;
901 VideoQualityTest::Params video_params_high;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100902 video_params_high.video[0] = kSimulcastVp8VideoHigh;
ilnika014cc52017-03-07 04:21:04 -0800903 VideoQualityTest::Params video_params_medium;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100904 video_params_medium.video[0] = kSimulcastVp8VideoMedium;
ilnika014cc52017-03-07 04:21:04 -0800905 VideoQualityTest::Params video_params_low;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100906 video_params_low.video[0] = kSimulcastVp8VideoLow;
ilnika014cc52017-03-07 04:21:04 -0800907
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100908 std::vector<VideoStream> streams = {
909 DefaultVideoStream(video_params_low, 0),
910 DefaultVideoStream(video_params_medium, 0),
911 DefaultVideoStream(video_params_high, 0)};
ilnik98436952017-07-13 00:47:03 -0700912 large_room.call.num_thumbnails = 5;
Sergey Silkin57027362018-05-15 09:12:05 +0200913 large_room.ss[0] = {
914 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
915 false};
ilnika014cc52017-03-07 04:21:04 -0800916 RunTest(large_room);
917}
918
oprypin743117f2017-09-15 05:24:24 -0700919#if defined(WEBRTC_ANDROID) || defined(WEBRTC_IOS)
920// Fails on mobile devices:
ilnikf89a7382017-03-07 06:15:27 -0800921// https://bugs.chromium.org/p/webrtc/issues/detail?id=7301
922#define MAYBE_LargeRoomVP8_50thumb DISABLED_LargeRoomVP8_50thumb
ilnik3ae7c252017-03-08 01:17:35 -0800923#define MAYBE_LargeRoomVP8_15thumb DISABLED_LargeRoomVP8_15thumb
ilnikf89a7382017-03-07 06:15:27 -0800924#else
925#define MAYBE_LargeRoomVP8_50thumb LargeRoomVP8_50thumb
ilnik3ae7c252017-03-08 01:17:35 -0800926#define MAYBE_LargeRoomVP8_15thumb LargeRoomVP8_15thumb
ilnikf89a7382017-03-07 06:15:27 -0800927#endif
928
929TEST_F(FullStackTest, MAYBE_LargeRoomVP8_15thumb) {
ilnika014cc52017-03-07 04:21:04 -0800930 VideoQualityTest::Params large_room;
931 large_room.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100932 large_room.video[0] = kSimulcastVp8VideoHigh;
ilnika014cc52017-03-07 04:21:04 -0800933 large_room.analyzer = {"largeroom_15thumb", 0.0, 0.0,
934 kFullStackTestDurationSecs};
935 large_room.pipe.loss_percent = 0;
936 large_room.pipe.queue_delay_ms = 100;
937 VideoQualityTest::Params video_params_high;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100938 video_params_high.video[0] = kSimulcastVp8VideoHigh;
ilnika014cc52017-03-07 04:21:04 -0800939 VideoQualityTest::Params video_params_medium;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100940 video_params_medium.video[0] = kSimulcastVp8VideoMedium;
ilnika014cc52017-03-07 04:21:04 -0800941 VideoQualityTest::Params video_params_low;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100942 video_params_low.video[0] = kSimulcastVp8VideoLow;
ilnika014cc52017-03-07 04:21:04 -0800943
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100944 std::vector<VideoStream> streams = {
945 DefaultVideoStream(video_params_low, 0),
946 DefaultVideoStream(video_params_medium, 0),
947 DefaultVideoStream(video_params_high, 0)};
ilnik98436952017-07-13 00:47:03 -0700948 large_room.call.num_thumbnails = 15;
Sergey Silkin57027362018-05-15 09:12:05 +0200949 large_room.ss[0] = {
950 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
951 false};
ilnika014cc52017-03-07 04:21:04 -0800952 RunTest(large_room);
953}
954
ilnika014cc52017-03-07 04:21:04 -0800955TEST_F(FullStackTest, MAYBE_LargeRoomVP8_50thumb) {
956 VideoQualityTest::Params large_room;
957 large_room.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100958 large_room.video[0] = kSimulcastVp8VideoHigh;
ilnika014cc52017-03-07 04:21:04 -0800959 large_room.analyzer = {"largeroom_50thumb", 0.0, 0.0,
960 kFullStackTestDurationSecs};
961 large_room.pipe.loss_percent = 0;
962 large_room.pipe.queue_delay_ms = 100;
963 VideoQualityTest::Params video_params_high;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100964 video_params_high.video[0] = kSimulcastVp8VideoHigh;
ilnika014cc52017-03-07 04:21:04 -0800965 VideoQualityTest::Params video_params_medium;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100966 video_params_medium.video[0] = kSimulcastVp8VideoMedium;
ilnika014cc52017-03-07 04:21:04 -0800967 VideoQualityTest::Params video_params_low;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100968 video_params_low.video[0] = kSimulcastVp8VideoLow;
ilnika014cc52017-03-07 04:21:04 -0800969
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100970 std::vector<VideoStream> streams = {
971 DefaultVideoStream(video_params_low, 0),
972 DefaultVideoStream(video_params_medium, 0),
973 DefaultVideoStream(video_params_high, 0)};
ilnik98436952017-07-13 00:47:03 -0700974 large_room.call.num_thumbnails = 50;
Sergey Silkin57027362018-05-15 09:12:05 +0200975 large_room.ss[0] = {
976 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
977 false};
ilnika014cc52017-03-07 04:21:04 -0800978 RunTest(large_room);
979}
980
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100981class DualStreamsTest : public FullStackTest,
982 public ::testing::WithParamInterface<int> {};
983
984// Disable dual video test on mobile device becuase it's too heavy.
985#if !defined(WEBRTC_ANDROID) && !defined(WEBRTC_IOS)
986TEST_P(DualStreamsTest,
987 ModeratelyRestricted_SlidesVp8_3TL_Simulcast_Video_Simulcast_High) {
988 test::ScopedFieldTrials field_trial(
989 kScreenshareSimulcastExperiment + kAlrProbingExperiment +
990 kRoundRobinPacingQueueExperiment + kPacerPushBackExperiment);
991 const int first_stream = GetParam();
992 VideoQualityTest::Params dual_streams;
993
994 // Screenshare Settings.
995 dual_streams.screenshare[first_stream] = {true, false, 10};
996 dual_streams.video[first_stream] = {true, 1850, 1110, 5, 800000,
997 2500000, 2500000, false, "VP8", 3,
998 2, 400000, false, false, ""};
999
1000 VideoQualityTest::Params screenshare_params_high;
1001 screenshare_params_high.video[0] = {true, 1850, 1110, 5, 800000,
1002 2500000, 2500000, false, "VP8", 3,
1003 0, 400000, false, false, ""};
1004 VideoQualityTest::Params screenshare_params_low;
1005 screenshare_params_low.video[0] = {true, 1850, 1110, 5, 50000,
1006 200000, 2000000, false, "VP8", 2,
1007 0, 400000, false, false, ""};
1008 std::vector<VideoStream> screenhsare_streams = {
1009 DefaultVideoStream(screenshare_params_low, 0),
1010 DefaultVideoStream(screenshare_params_high, 0)};
1011
Sergey Silkin57027362018-05-15 09:12:05 +02001012 dual_streams.ss[first_stream] = {
1013 screenhsare_streams, 1, 1, 0, InterLayerPredMode::kOn,
1014 std::vector<SpatialLayer>(), false};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001015
1016 // Video settings.
1017 dual_streams.video[1 - first_stream] = kSimulcastVp8VideoHigh;
1018
1019 VideoQualityTest::Params video_params_high;
1020 video_params_high.video[0] = kSimulcastVp8VideoHigh;
1021 VideoQualityTest::Params video_params_medium;
1022 video_params_medium.video[0] = kSimulcastVp8VideoMedium;
1023 VideoQualityTest::Params video_params_low;
1024 video_params_low.video[0] = kSimulcastVp8VideoLow;
1025 std::vector<VideoStream> streams = {
1026 DefaultVideoStream(video_params_low, 0),
1027 DefaultVideoStream(video_params_medium, 0),
1028 DefaultVideoStream(video_params_high, 0)};
1029
1030 dual_streams.ss[1 - first_stream] = {
Sergey Silkin57027362018-05-15 09:12:05 +02001031 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1032 false};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001033
1034 // Call settings.
1035 dual_streams.call.send_side_bwe = true;
1036 dual_streams.call.dual_video = true;
Edward Lemur35d2b7e2017-12-27 18:54:47 +01001037 std::string test_label = "dualstreams_moderately_restricted_screenshare_" +
1038 std::to_string(first_stream);
1039 dual_streams.analyzer = {test_label, 0.0, 0.0, kFullStackTestDurationSecs};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001040 dual_streams.pipe.loss_percent = 1;
1041 dual_streams.pipe.link_capacity_kbps = 7500;
1042 dual_streams.pipe.queue_length_packets = 30;
1043 dual_streams.pipe.queue_delay_ms = 100;
1044
1045 RunTest(dual_streams);
1046}
1047#endif // !defined(WEBRTC_ANDROID) && !defined(WEBRTC_IOS)
1048
1049TEST_P(DualStreamsTest, Conference_Restricted) {
1050 test::ScopedFieldTrials field_trial(kRoundRobinPacingQueueExperiment +
1051 kPacerPushBackExperiment);
1052 const int first_stream = GetParam();
1053 VideoQualityTest::Params dual_streams;
1054
1055 // Screenshare Settings.
1056 dual_streams.screenshare[first_stream] = {true, false, 10};
1057 dual_streams.video[first_stream] = {true, 1850, 1110, 5, 800000,
1058 2500000, 2500000, false, "VP8", 3,
1059 2, 400000, false, false, ""};
1060 // Video settings.
1061 dual_streams.video[1 - first_stream] = {
1062 true, 1280, 720, 30, 150000,
1063 500000, 700000, false, "VP8", 3,
1064 2, 400000, false, false, "ConferenceMotion_1280_720_50"};
1065
1066 // Call settings.
1067 dual_streams.call.send_side_bwe = true;
1068 dual_streams.call.dual_video = true;
Edward Lemur35d2b7e2017-12-27 18:54:47 +01001069 std::string test_label = "dualstreams_conference_restricted_screenshare_" +
1070 std::to_string(first_stream);
1071 dual_streams.analyzer = {test_label, 0.0, 0.0, kFullStackTestDurationSecs};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001072 dual_streams.pipe.loss_percent = 1;
1073 dual_streams.pipe.link_capacity_kbps = 5000;
1074 dual_streams.pipe.queue_length_packets = 30;
1075 dual_streams.pipe.queue_delay_ms = 100;
1076
1077 RunTest(dual_streams);
1078}
1079
1080INSTANTIATE_TEST_CASE_P(FullStackTest,
1081 DualStreamsTest,
1082 ::testing::Values(0, 1));
ilnika014cc52017-03-07 04:21:04 -08001083
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +00001084} // namespace webrtc