blob: a5a834261b7fa99f4c0e2b73ecd15f61c237d07e [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
Emircan Uysaler0823eec2018-07-13 17:10:00 -070012#include "media/base/vp9_profile.h"
13#include "modules/video_coding/codecs/vp9/include/vp9.h"
Sebastian Janssoncabe3832018-01-12 10:54:18 +010014#include "rtc_base/experiments/alr_experiment.h"
Sebastian Janssonf8518882018-05-31 14:52:59 +020015#include "rtc_base/flags.h"
Erik Språngb6b1cac2018-08-09 16:12:54 +020016#include "system_wrappers/include/field_trial_default.h"
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020017#include "test/field_trial.h"
18#include "test/gtest.h"
19#include "video/video_quality_test.h"
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +000020
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +000021namespace webrtc {
Sebastian Janssonf8518882018-05-31 14:52:59 +020022namespace flags {
23
Sebastian Janssonf8518882018-05-31 14:52:59 +020024DEFINE_string(rtc_event_log_name,
25 "",
26 "Filename for rtc event log. Two files "
27 "with \"_send\" and \"_recv\" suffixes will be created.");
28std::string RtcEventLogName() {
29 return static_cast<std::string>(FLAG_rtc_event_log_name);
30}
31DEFINE_string(rtp_dump_name, "", "Filename for dumped received RTP stream.");
32std::string RtpDumpName() {
33 return static_cast<std::string>(FLAG_rtp_dump_name);
34}
35DEFINE_string(encoded_frame_path,
36 "",
37 "The base path for encoded frame logs. Created files will have "
38 "the form <encoded_frame_path>.<n>.(recv|send.<m>).ivf");
39std::string EncodedFramePath() {
40 return static_cast<std::string>(FLAG_encoded_frame_path);
41}
42} // namespace flags
43} // namespace webrtc
44
45namespace webrtc {
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +000046
sprang89c4a7e2017-06-30 13:27:40 -070047namespace {
brandtrdd369c62016-11-16 23:56:57 -080048static const int kFullStackTestDurationSecs = 45;
Patrik Höglundb6b29e02018-06-21 16:58:01 +020049const char kRoundRobinPacingQueueExperiment[] =
50 "WebRTC-RoundRobinPacing/Enabled/";
51const char kPacerPushBackExperiment[] =
52 "WebRTC-PacerPushbackExperiment/Enabled/";
pbos@webrtc.orgb613b5a2013-12-03 10:13:04 +000053
Patrik Höglundb6b29e02018-06-21 16:58:01 +020054struct ParamsWithLogging : public VideoQualityTest::Params {
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +000055 public:
Patrik Höglundb6b29e02018-06-21 16:58:01 +020056 ParamsWithLogging() {
57 // Use these logging flags by default, for everything.
Mirko Bonadei45a4c412018-07-31 15:07:28 +020058 logging = {flags::RtcEventLogName(), flags::RtpDumpName(),
59 flags::EncodedFramePath()};
pbos@webrtc.org94015242013-10-16 11:05:37 +000060 }
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +000061};
62
Patrik Höglundb6b29e02018-06-21 16:58:01 +020063std::unique_ptr<VideoQualityTestFixtureInterface>
64CreateVideoQualityTestFixture() {
Karl Wiberg918f50c2018-07-05 11:40:33 +020065 return absl::make_unique<VideoQualityTest>(nullptr);
Patrik Höglundb6b29e02018-06-21 16:58:01 +020066}
67
Erik Språngb6b1cac2018-08-09 16:12:54 +020068// Takes the current active field trials set, and appends some new trials.
69std::string AppendFieldTrials(std::string new_trial_string) {
70 return std::string(field_trial::GetFieldTrialString()) + new_trial_string;
71}
Patrik Höglundb6b29e02018-06-21 16:58:01 +020072} // namespace
73
sprangce4aef12015-11-02 07:23:20 -080074// VideoQualityTest::Params params = {
75// { ... }, // Common.
76// { ... }, // Video-specific settings.
77// { ... }, // Screenshare-specific settings.
78// { ... }, // Analyzer settings.
79// pipe, // FakeNetworkPipe::Config
80// { ... }, // Spatial scalability.
81// logs // bool
82// };
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +000083
Peter Boström12996152016-05-14 02:03:18 +020084#if !defined(RTC_DISABLE_VP9)
Patrik Höglundb6b29e02018-06-21 16:58:01 +020085TEST(FullStackTest, ForemanCifWithoutPacketLossVp9) {
86 auto fixture = CreateVideoQualityTestFixture();
87 ParamsWithLogging foreman_cif;
brandtr93c5d032016-11-30 07:50:07 -080088 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +010089 foreman_cif.video[0] = {true, 352, 288, 30, 700000,
90 700000, 700000, false, "VP9", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +020091 0, 0, false, false, false, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -080092 foreman_cif.analyzer = {"foreman_cif_net_delay_0_0_plr_0_VP9", 0.0, 0.0,
93 kFullStackTestDurationSecs};
Patrik Höglundb6b29e02018-06-21 16:58:01 +020094 fixture->RunWithAnalyzer(foreman_cif);
asapersson88b0a222016-02-12 13:16:43 -080095}
96
Patrik Höglundb6b29e02018-06-21 16:58:01 +020097TEST(FullStackTest, ForemanCifPlr5Vp9) {
98 auto fixture = CreateVideoQualityTestFixture();
99 ParamsWithLogging foreman_cif;
brandtr93c5d032016-11-30 07:50:07 -0800100 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100101 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
102 500000, 2000000, false, "VP9", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200103 0, 0, false, false, false, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -0800104 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5_VP9", 0.0, 0.0,
105 kFullStackTestDurationSecs};
106 foreman_cif.pipe.loss_percent = 5;
107 foreman_cif.pipe.queue_delay_ms = 50;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200108 fixture->RunWithAnalyzer(foreman_cif);
asapersson88b0a222016-02-12 13:16:43 -0800109}
Emircan Uysaler03e6ec92018-03-09 15:03:26 -0800110
Emircan Uysaler0823eec2018-07-13 17:10:00 -0700111TEST(FullStackTest, GeneratorWithoutPacketLossVp9Profile2) {
112 // Profile 2 might not be available on some platforms until
113 // https://bugs.chromium.org/p/webm/issues/detail?id=1544 is solved.
114 bool profile_2_is_supported = false;
115 for (const auto& codec : SupportedVP9Codecs()) {
116 if (ParseSdpForVP9Profile(codec.parameters)
117 .value_or(VP9Profile::kProfile0) == VP9Profile::kProfile2) {
118 profile_2_is_supported = true;
119 }
120 }
121 if (!profile_2_is_supported)
122 return;
123 auto fixture = CreateVideoQualityTestFixture();
124
125 SdpVideoFormat::Parameters vp92 = {
126 {kVP9FmtpProfileId, VP9ProfileToString(VP9Profile::kProfile2)}};
127 ParamsWithLogging generator;
128 generator.call.send_side_bwe = true;
129 generator.video[0] = {
130 true, 352, 288, 30, 700000, 700000, 700000, false, "VP9",
131 1, 0, 0, false, false, false, "GeneratorI010", 0, vp92};
132 generator.analyzer = {"generator_net_delay_0_0_plr_0_VP9Profile2", 0.0, 0.0,
133 kFullStackTestDurationSecs};
134 fixture->RunWithAnalyzer(generator);
135}
136
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200137TEST(FullStackTest, ForemanCifWithoutPacketLossMultiplexI420Frame) {
138 auto fixture = CreateVideoQualityTestFixture();
139 ParamsWithLogging foreman_cif;
Emircan Uysaler03e6ec92018-03-09 15:03:26 -0800140 foreman_cif.call.send_side_bwe = true;
141 foreman_cif.video[0] = {true, 352, 288, 30, 700000,
142 700000, 700000, false, "multiplex", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200143 0, 0, false, false, false,
144 "foreman_cif"};
Emircan Uysaler03e6ec92018-03-09 15:03:26 -0800145 foreman_cif.analyzer = {"foreman_cif_net_delay_0_0_plr_0_Multiplex", 0.0, 0.0,
146 kFullStackTestDurationSecs};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200147 fixture->RunWithAnalyzer(foreman_cif);
Emircan Uysaler03e6ec92018-03-09 15:03:26 -0800148}
149
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200150TEST(FullStackTest, GeneratorWithoutPacketLossMultiplexI420AFrame) {
151 auto fixture = CreateVideoQualityTestFixture();
152
153 ParamsWithLogging generator;
Emircan Uysalerf1ff3bd2018-03-12 11:53:21 -0700154 generator.call.send_side_bwe = true;
155 generator.video[0] = {true, 352, 288, 30, 700000,
156 700000, 700000, false, "multiplex", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200157 0, 0, false, false, false,
158 "GeneratorI420A"};
Emircan Uysalerf1ff3bd2018-03-12 11:53:21 -0700159 generator.analyzer = {"generator_net_delay_0_0_plr_0_Multiplex", 0.0, 0.0,
160 kFullStackTestDurationSecs};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200161 fixture->RunWithAnalyzer(generator);
Emircan Uysaler03e6ec92018-03-09 15:03:26 -0800162}
163
Peter Boström12996152016-05-14 02:03:18 +0200164#endif // !defined(RTC_DISABLE_VP9)
asapersson88b0a222016-02-12 13:16:43 -0800165
Patrik Höglund11bf2fa2018-04-09 12:20:50 +0200166#if defined(WEBRTC_LINUX)
167// Crashes on the linux trusty perf bot: bugs.webrtc.org/9129.
168#define MAYBE_ParisQcifWithoutPacketLoss DISABLED_ParisQcifWithoutPacketLoss
169#else
170#define MAYBE_ParisQcifWithoutPacketLoss ParisQcifWithoutPacketLoss
171#endif
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200172TEST(FullStackTest, MAYBE_ParisQcifWithoutPacketLoss) {
173 auto fixture = CreateVideoQualityTestFixture();
174 ParamsWithLogging paris_qcif;
minyue626bc952016-10-31 05:47:02 -0700175 paris_qcif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100176 paris_qcif.video[0] = {true, 176, 144, 30, 300000,
177 300000, 300000, false, "VP8", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200178 0, 0, false, false, false, "paris_qcif"};
minyue626bc952016-10-31 05:47:02 -0700179 paris_qcif.analyzer = {"net_delay_0_0_plr_0", 36.0, 0.96,
180 kFullStackTestDurationSecs};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200181 fixture->RunWithAnalyzer(paris_qcif);
pbos@webrtc.org994d0b72014-06-27 08:47:52 +0000182}
183
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200184TEST(FullStackTest, ForemanCifWithoutPacketLoss) {
185 auto fixture = CreateVideoQualityTestFixture();
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000186 // TODO(pbos): Decide on psnr/ssim thresholds for foreman_cif.
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200187 ParamsWithLogging foreman_cif;
minyue626bc952016-10-31 05:47:02 -0700188 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100189 foreman_cif.video[0] = {true, 352, 288, 30, 700000,
190 700000, 700000, false, "VP8", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200191 0, 0, false, false, false, "foreman_cif"};
minyue626bc952016-10-31 05:47:02 -0700192 foreman_cif.analyzer = {"foreman_cif_net_delay_0_0_plr_0", 0.0, 0.0,
193 kFullStackTestDurationSecs};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200194 fixture->RunWithAnalyzer(foreman_cif);
pbos@webrtc.org994d0b72014-06-27 08:47:52 +0000195}
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +0000196
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200197TEST(FullStackTest, ForemanCif30kbpsWithoutPacketLoss) {
198 auto fixture = CreateVideoQualityTestFixture();
199 ParamsWithLogging foreman_cif;
asaperssonfb6ad3b2016-12-16 06:54:01 -0800200 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100201 foreman_cif.video[0] = {true, 352, 288, 10, 30000,
202 30000, 30000, false, "VP8", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200203 0, 0, false, false, false, "foreman_cif"};
asaperssonfb6ad3b2016-12-16 06:54:01 -0800204 foreman_cif.analyzer = {"foreman_cif_30kbps_net_delay_0_0_plr_0", 0.0, 0.0,
205 kFullStackTestDurationSecs};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200206 fixture->RunWithAnalyzer(foreman_cif);
asaperssonfb6ad3b2016-12-16 06:54:01 -0800207}
208
Niels Möller6aa415e2018-06-07 11:14:13 +0200209// Link capacity below default start rate. Automatic down scaling enabled.
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200210TEST(FullStackTest, ForemanCifLink150kbpsWithoutPacketLoss) {
211 auto fixture = CreateVideoQualityTestFixture();
Niels Möller6aa415e2018-06-07 11:14:13 +0200212 VideoQualityTest::Params foreman_cif;
213 foreman_cif.call.send_side_bwe = true;
214 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
215 500000, 2000000, false, "VP8", 1,
216 0, 0, false, false, true, "foreman_cif"};
217 foreman_cif.analyzer = {"foreman_cif_link_150kbps_net_delay_0_0_plr_0",
218 0.0, 0.0,
219 kFullStackTestDurationSecs};
220 foreman_cif.pipe.link_capacity_kbps = 150;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200221 fixture->RunWithAnalyzer(foreman_cif);
Niels Möller6aa415e2018-06-07 11:14:13 +0200222}
223
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200224TEST(FullStackTest, ForemanCifPlr5) {
225 auto fixture = CreateVideoQualityTestFixture();
226 ParamsWithLogging foreman_cif;
minyue626bc952016-10-31 05:47:02 -0700227 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100228 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
229 500000, 2000000, false, "VP8", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200230 0, 0, false, false, false, "foreman_cif"};
minyue626bc952016-10-31 05:47:02 -0700231 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5", 0.0, 0.0,
232 kFullStackTestDurationSecs};
ivica5d6a06c2015-09-17 05:30:24 -0700233 foreman_cif.pipe.loss_percent = 5;
234 foreman_cif.pipe.queue_delay_ms = 50;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200235 fixture->RunWithAnalyzer(foreman_cif);
stefan@webrtc.orgc216b9a2014-10-14 10:38:49 +0000236}
237
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200238TEST(FullStackTest, ForemanCifPlr5Ulpfec) {
239 auto fixture = CreateVideoQualityTestFixture();
240 ParamsWithLogging foreman_cif;
brandtr93c5d032016-11-30 07:50:07 -0800241 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100242 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
243 500000, 2000000, false, "VP8", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200244 0, 0, true, false, false, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -0800245 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5_ulpfec", 0.0, 0.0,
246 kFullStackTestDurationSecs};
247 foreman_cif.pipe.loss_percent = 5;
248 foreman_cif.pipe.queue_delay_ms = 50;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200249 fixture->RunWithAnalyzer(foreman_cif);
brandtr93c5d032016-11-30 07:50:07 -0800250}
251
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200252TEST(FullStackTest, ForemanCifPlr5Flexfec) {
253 auto fixture = CreateVideoQualityTestFixture();
254 ParamsWithLogging foreman_cif;
brandtr93c5d032016-11-30 07:50:07 -0800255 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100256 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
257 500000, 2000000, false, "VP8", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200258 0, 0, false, true, false, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -0800259 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5_flexfec", 0.0, 0.0,
260 kFullStackTestDurationSecs};
261 foreman_cif.pipe.loss_percent = 5;
262 foreman_cif.pipe.queue_delay_ms = 50;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200263 fixture->RunWithAnalyzer(foreman_cif);
brandtr93c5d032016-11-30 07:50:07 -0800264}
265
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200266TEST(FullStackTest, ForemanCif500kbpsPlr3Flexfec) {
267 auto fixture = CreateVideoQualityTestFixture();
268 ParamsWithLogging foreman_cif;
stefan889d9652017-07-05 03:03:02 -0700269 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100270 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
271 500000, 2000000, false, "VP8", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200272 0, 0, false, true, false, "foreman_cif"};
stefan889d9652017-07-05 03:03:02 -0700273 foreman_cif.analyzer = {"foreman_cif_500kbps_delay_50_0_plr_3_flexfec", 0.0,
274 0.0, kFullStackTestDurationSecs};
275 foreman_cif.pipe.loss_percent = 3;
276 foreman_cif.pipe.link_capacity_kbps = 500;
277 foreman_cif.pipe.queue_delay_ms = 50;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200278 fixture->RunWithAnalyzer(foreman_cif);
stefan889d9652017-07-05 03:03:02 -0700279}
280
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200281TEST(FullStackTest, ForemanCif500kbpsPlr3Ulpfec) {
282 auto fixture = CreateVideoQualityTestFixture();
283 ParamsWithLogging foreman_cif;
stefan889d9652017-07-05 03:03:02 -0700284 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100285 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
286 500000, 2000000, false, "VP8", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200287 0, 0, true, false, false, "foreman_cif"};
stefan889d9652017-07-05 03:03:02 -0700288 foreman_cif.analyzer = {"foreman_cif_500kbps_delay_50_0_plr_3_ulpfec", 0.0,
289 0.0, kFullStackTestDurationSecs};
290 foreman_cif.pipe.loss_percent = 3;
291 foreman_cif.pipe.link_capacity_kbps = 500;
292 foreman_cif.pipe.queue_delay_ms = 50;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200293 fixture->RunWithAnalyzer(foreman_cif);
stefan889d9652017-07-05 03:03:02 -0700294}
295
brandtrdd369c62016-11-16 23:56:57 -0800296#if defined(WEBRTC_USE_H264)
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200297TEST(FullStackTest, ForemanCifWithoutPacketlossH264) {
298 auto fixture = CreateVideoQualityTestFixture();
brandtr93c5d032016-11-30 07:50:07 -0800299 // TODO(pbos): Decide on psnr/ssim thresholds for foreman_cif.
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200300 ParamsWithLogging foreman_cif;
brandtr93c5d032016-11-30 07:50:07 -0800301 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100302 foreman_cif.video[0] = {true, 352, 288, 30, 700000,
303 700000, 700000, false, "H264", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200304 0, 0, false, false, false, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -0800305 foreman_cif.analyzer = {"foreman_cif_net_delay_0_0_plr_0_H264", 0.0, 0.0,
306 kFullStackTestDurationSecs};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200307 fixture->RunWithAnalyzer(foreman_cif);
brandtrdd369c62016-11-16 23:56:57 -0800308}
309
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200310TEST(FullStackTest, ForemanCif30kbpsWithoutPacketlossH264) {
311 auto fixture = CreateVideoQualityTestFixture();
312 ParamsWithLogging foreman_cif;
asaperssonfb6ad3b2016-12-16 06:54:01 -0800313 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100314 foreman_cif.video[0] = {true, 352, 288, 10, 30000,
315 30000, 30000, false, "H264", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200316 0, 0, false, false, false, "foreman_cif"};
asaperssonfb6ad3b2016-12-16 06:54:01 -0800317 foreman_cif.analyzer = {"foreman_cif_30kbps_net_delay_0_0_plr_0_H264", 0.0,
318 0.0, kFullStackTestDurationSecs};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200319 fixture->RunWithAnalyzer(foreman_cif);
asaperssonfb6ad3b2016-12-16 06:54:01 -0800320}
321
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200322TEST(FullStackTest, ForemanCifPlr5H264) {
323 auto fixture = CreateVideoQualityTestFixture();
324 ParamsWithLogging foreman_cif;
brandtr93c5d032016-11-30 07:50:07 -0800325 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100326 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
327 500000, 2000000, false, "H264", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200328 0, 0, false, false, false, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -0800329 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5_H264", 0.0, 0.0,
330 kFullStackTestDurationSecs};
331 foreman_cif.pipe.loss_percent = 5;
332 foreman_cif.pipe.queue_delay_ms = 50;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200333 fixture->RunWithAnalyzer(foreman_cif);
brandtrdd369c62016-11-16 23:56:57 -0800334}
335
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200336TEST(FullStackTest, ForemanCifPlr5H264SpsPpsIdrIsKeyframe) {
337 auto fixture = CreateVideoQualityTestFixture();
Rasmus Brandt88f080a2017-11-02 14:28:06 +0100338 test::ScopedFieldTrials override_field_trials(
Erik Språngb6b1cac2018-08-09 16:12:54 +0200339 AppendFieldTrials("WebRTC-SpsPpsIdrIsH264Keyframe/Enabled/"));
Rasmus Brandt88f080a2017-11-02 14:28:06 +0100340
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200341 ParamsWithLogging foreman_cif;
Rasmus Brandt88f080a2017-11-02 14:28:06 +0100342 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100343 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
344 500000, 2000000, false, "H264", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200345 0, 0, false, false, false, "foreman_cif"};
Rasmus Brandt88f080a2017-11-02 14:28:06 +0100346 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5_H264_sps_pps_idr", 0.0,
347 0.0, kFullStackTestDurationSecs};
348 foreman_cif.pipe.loss_percent = 5;
349 foreman_cif.pipe.queue_delay_ms = 50;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200350 fixture->RunWithAnalyzer(foreman_cif);
Rasmus Brandt88f080a2017-11-02 14:28:06 +0100351}
352
brandtrdd369c62016-11-16 23:56:57 -0800353// Verify that this is worth the bot time, before enabling.
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200354TEST(FullStackTest, ForemanCifPlr5H264Flexfec) {
355 auto fixture = CreateVideoQualityTestFixture();
356 ParamsWithLogging foreman_cif;
brandtr93c5d032016-11-30 07:50:07 -0800357 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100358 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
359 500000, 2000000, false, "H264", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200360 0, 0, false, true, false, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -0800361 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5_H264_flexfec", 0.0, 0.0,
362 kFullStackTestDurationSecs};
363 foreman_cif.pipe.loss_percent = 5;
364 foreman_cif.pipe.queue_delay_ms = 50;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200365 fixture->RunWithAnalyzer(foreman_cif);
brandtrdd369c62016-11-16 23:56:57 -0800366}
367
368// Ulpfec with H264 is an unsupported combination, so this test is only useful
369// for debugging. It is therefore disabled by default.
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200370TEST(FullStackTest, DISABLED_ForemanCifPlr5H264Ulpfec) {
371 auto fixture = CreateVideoQualityTestFixture();
372 ParamsWithLogging foreman_cif;
brandtr93c5d032016-11-30 07:50:07 -0800373 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100374 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
375 500000, 2000000, false, "H264", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200376 0, 0, true, false, false, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -0800377 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5_H264_ulpfec", 0.0, 0.0,
378 kFullStackTestDurationSecs};
379 foreman_cif.pipe.loss_percent = 5;
380 foreman_cif.pipe.queue_delay_ms = 50;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200381 fixture->RunWithAnalyzer(foreman_cif);
brandtrdd369c62016-11-16 23:56:57 -0800382}
383#endif // defined(WEBRTC_USE_H264)
384
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200385TEST(FullStackTest, ForemanCif500kbps) {
386 auto fixture = CreateVideoQualityTestFixture();
387 ParamsWithLogging foreman_cif;
minyue626bc952016-10-31 05:47:02 -0700388 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100389 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
390 500000, 2000000, false, "VP8", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200391 0, 0, false, false, false, "foreman_cif"};
minyue626bc952016-10-31 05:47:02 -0700392 foreman_cif.analyzer = {"foreman_cif_500kbps", 0.0, 0.0,
393 kFullStackTestDurationSecs};
ivica5d6a06c2015-09-17 05:30:24 -0700394 foreman_cif.pipe.queue_length_packets = 0;
395 foreman_cif.pipe.queue_delay_ms = 0;
396 foreman_cif.pipe.link_capacity_kbps = 500;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200397 fixture->RunWithAnalyzer(foreman_cif);
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000398}
399
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200400TEST(FullStackTest, ForemanCif500kbpsLimitedQueue) {
401 auto fixture = CreateVideoQualityTestFixture();
402 ParamsWithLogging foreman_cif;
minyue626bc952016-10-31 05:47:02 -0700403 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100404 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
405 500000, 2000000, false, "VP8", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200406 0, 0, false, false, false, "foreman_cif"};
minyue626bc952016-10-31 05:47:02 -0700407 foreman_cif.analyzer = {"foreman_cif_500kbps_32pkts_queue", 0.0, 0.0,
408 kFullStackTestDurationSecs};
ivica5d6a06c2015-09-17 05:30:24 -0700409 foreman_cif.pipe.queue_length_packets = 32;
410 foreman_cif.pipe.queue_delay_ms = 0;
411 foreman_cif.pipe.link_capacity_kbps = 500;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200412 fixture->RunWithAnalyzer(foreman_cif);
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000413}
414
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200415TEST(FullStackTest, ForemanCif500kbps100ms) {
416 auto fixture = CreateVideoQualityTestFixture();
417 ParamsWithLogging foreman_cif;
minyue626bc952016-10-31 05:47:02 -0700418 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100419 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
420 500000, 2000000, false, "VP8", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200421 0, 0, false, false, false, "foreman_cif"};
minyue626bc952016-10-31 05:47:02 -0700422 foreman_cif.analyzer = {"foreman_cif_500kbps_100ms", 0.0, 0.0,
423 kFullStackTestDurationSecs};
ivica5d6a06c2015-09-17 05:30:24 -0700424 foreman_cif.pipe.queue_length_packets = 0;
425 foreman_cif.pipe.queue_delay_ms = 100;
426 foreman_cif.pipe.link_capacity_kbps = 500;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200427 fixture->RunWithAnalyzer(foreman_cif);
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000428}
429
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200430TEST(FullStackTest, ForemanCif500kbps100msLimitedQueue) {
431 auto fixture = CreateVideoQualityTestFixture();
432 ParamsWithLogging foreman_cif;
minyue626bc952016-10-31 05:47:02 -0700433 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100434 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
435 500000, 2000000, false, "VP8", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200436 0, 0, false, false, false, "foreman_cif"};
minyue626bc952016-10-31 05:47:02 -0700437 foreman_cif.analyzer = {"foreman_cif_500kbps_100ms_32pkts_queue", 0.0, 0.0,
438 kFullStackTestDurationSecs};
stefanb1797672016-08-11 07:00:57 -0700439 foreman_cif.pipe.queue_length_packets = 32;
440 foreman_cif.pipe.queue_delay_ms = 100;
441 foreman_cif.pipe.link_capacity_kbps = 500;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200442 fixture->RunWithAnalyzer(foreman_cif);
stefanb1797672016-08-11 07:00:57 -0700443}
444
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200445TEST(FullStackTest, ForemanCif500kbps100msLimitedQueueRecvBwe) {
446 auto fixture = CreateVideoQualityTestFixture();
447 ParamsWithLogging foreman_cif;
brandtr93c5d032016-11-30 07:50:07 -0800448 foreman_cif.call.send_side_bwe = false;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100449 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
450 500000, 2000000, false, "VP8", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200451 0, 0, false, false, false, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -0800452 foreman_cif.analyzer = {"foreman_cif_500kbps_100ms_32pkts_queue_recv_bwe",
453 0.0, 0.0, kFullStackTestDurationSecs};
ivica5d6a06c2015-09-17 05:30:24 -0700454 foreman_cif.pipe.queue_length_packets = 32;
455 foreman_cif.pipe.queue_delay_ms = 100;
456 foreman_cif.pipe.link_capacity_kbps = 500;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200457 fixture->RunWithAnalyzer(foreman_cif);
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000458}
459
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200460TEST(FullStackTest, ForemanCif1000kbps100msLimitedQueue) {
461 auto fixture = CreateVideoQualityTestFixture();
462 ParamsWithLogging foreman_cif;
minyue626bc952016-10-31 05:47:02 -0700463 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100464 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
465 2000000, 2000000, false, "VP8", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200466 0, 0, false, false, false, "foreman_cif"};
minyue626bc952016-10-31 05:47:02 -0700467 foreman_cif.analyzer = {"foreman_cif_1000kbps_100ms_32pkts_queue", 0.0, 0.0,
468 kFullStackTestDurationSecs};
ivica5d6a06c2015-09-17 05:30:24 -0700469 foreman_cif.pipe.queue_length_packets = 32;
470 foreman_cif.pipe.queue_delay_ms = 100;
471 foreman_cif.pipe.link_capacity_kbps = 1000;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200472 fixture->RunWithAnalyzer(foreman_cif);
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000473}
sprang@webrtc.org131bea82015-02-18 12:46:06 +0000474
sprangff19d352017-09-06 07:14:02 -0700475// TODO(sprang): Remove this if we have the similar ModerateLimits below?
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200476TEST(FullStackTest, ConferenceMotionHd2000kbps100msLimitedQueue) {
477 auto fixture = CreateVideoQualityTestFixture();
478 ParamsWithLogging conf_motion_hd;
minyue626bc952016-10-31 05:47:02 -0700479 conf_motion_hd.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100480 conf_motion_hd.video[0] = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000481 true, 1280, 720, 50, 30000,
482 3000000, 3000000, false, "VP8", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200483 0, 0, false, false, false, "ConferenceMotion_1280_720_50"};
minyue626bc952016-10-31 05:47:02 -0700484 conf_motion_hd.analyzer = {"conference_motion_hd_2000kbps_100ms_32pkts_queue",
485 0.0, 0.0, kFullStackTestDurationSecs};
stefanb1797672016-08-11 07:00:57 -0700486 conf_motion_hd.pipe.queue_length_packets = 32;
487 conf_motion_hd.pipe.queue_delay_ms = 100;
488 conf_motion_hd.pipe.link_capacity_kbps = 2000;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200489 fixture->RunWithAnalyzer(conf_motion_hd);
stefanb1797672016-08-11 07:00:57 -0700490}
491
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200492TEST(FullStackTest, ConferenceMotionHd1TLModerateLimits) {
493 auto fixture = CreateVideoQualityTestFixture();
494 ParamsWithLogging conf_motion_hd;
sprangff19d352017-09-06 07:14:02 -0700495 conf_motion_hd.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100496 conf_motion_hd.video[0] = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000497 true, 1280, 720, 50, 30000,
498 3000000, 3000000, false, "VP8", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200499 -1, 0, false, false, false, "ConferenceMotion_1280_720_50"};
sprangff19d352017-09-06 07:14:02 -0700500 conf_motion_hd.analyzer = {"conference_motion_hd_1tl_moderate_limits", 0.0,
501 0.0, kFullStackTestDurationSecs};
502 conf_motion_hd.pipe.queue_length_packets = 50;
503 conf_motion_hd.pipe.loss_percent = 3;
504 conf_motion_hd.pipe.queue_delay_ms = 100;
505 conf_motion_hd.pipe.link_capacity_kbps = 2000;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200506 fixture->RunWithAnalyzer(conf_motion_hd);
sprangff19d352017-09-06 07:14:02 -0700507}
508
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200509TEST(FullStackTest, ConferenceMotionHd2TLModerateLimits) {
510 auto fixture = CreateVideoQualityTestFixture();
511 ParamsWithLogging conf_motion_hd;
sprangff19d352017-09-06 07:14:02 -0700512 conf_motion_hd.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100513 conf_motion_hd.video[0] = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000514 true, 1280, 720, 50, 30000,
515 3000000, 3000000, false, "VP8", 2,
Niels Möller6aa415e2018-06-07 11:14:13 +0200516 -1, 0, false, false, false, "ConferenceMotion_1280_720_50"};
sprangff19d352017-09-06 07:14:02 -0700517 conf_motion_hd.analyzer = {"conference_motion_hd_2tl_moderate_limits", 0.0,
518 0.0, kFullStackTestDurationSecs};
519 conf_motion_hd.pipe.queue_length_packets = 50;
520 conf_motion_hd.pipe.loss_percent = 3;
521 conf_motion_hd.pipe.queue_delay_ms = 100;
522 conf_motion_hd.pipe.link_capacity_kbps = 2000;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200523 fixture->RunWithAnalyzer(conf_motion_hd);
sprangff19d352017-09-06 07:14:02 -0700524}
525
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200526TEST(FullStackTest, ConferenceMotionHd3TLModerateLimits) {
527 auto fixture = CreateVideoQualityTestFixture();
528 ParamsWithLogging conf_motion_hd;
sprangff19d352017-09-06 07:14:02 -0700529 conf_motion_hd.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100530 conf_motion_hd.video[0] = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000531 true, 1280, 720, 50, 30000,
532 3000000, 3000000, false, "VP8", 3,
Niels Möller6aa415e2018-06-07 11:14:13 +0200533 -1, 0, false, false, false, "ConferenceMotion_1280_720_50"};
sprangff19d352017-09-06 07:14:02 -0700534 conf_motion_hd.analyzer = {"conference_motion_hd_3tl_moderate_limits", 0.0,
535 0.0, kFullStackTestDurationSecs};
536 conf_motion_hd.pipe.queue_length_packets = 50;
537 conf_motion_hd.pipe.loss_percent = 3;
538 conf_motion_hd.pipe.queue_delay_ms = 100;
539 conf_motion_hd.pipe.link_capacity_kbps = 2000;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200540 fixture->RunWithAnalyzer(conf_motion_hd);
sprangff19d352017-09-06 07:14:02 -0700541}
542
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200543TEST(FullStackTest, ConferenceMotionHd4TLModerateLimits) {
544 auto fixture = CreateVideoQualityTestFixture();
545 ParamsWithLogging conf_motion_hd;
sprangff19d352017-09-06 07:14:02 -0700546 conf_motion_hd.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100547 conf_motion_hd.video[0] = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000548 true, 1280, 720, 50, 30000,
549 3000000, 3000000, false, "VP8", 4,
Niels Möller6aa415e2018-06-07 11:14:13 +0200550 -1, 0, false, false, false, "ConferenceMotion_1280_720_50"};
sprangff19d352017-09-06 07:14:02 -0700551 conf_motion_hd.analyzer = {"conference_motion_hd_4tl_moderate_limits", 0.0,
552 0.0, kFullStackTestDurationSecs};
553 conf_motion_hd.pipe.queue_length_packets = 50;
554 conf_motion_hd.pipe.loss_percent = 3;
555 conf_motion_hd.pipe.queue_delay_ms = 100;
556 conf_motion_hd.pipe.link_capacity_kbps = 2000;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200557 fixture->RunWithAnalyzer(conf_motion_hd);
sprangff19d352017-09-06 07:14:02 -0700558}
559
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200560TEST(FullStackTest, ConferenceMotionHd3TLModerateLimitsAltTLPattern) {
561 auto fixture = CreateVideoQualityTestFixture();
Erik Språngb6b1cac2018-08-09 16:12:54 +0200562 test::ScopedFieldTrials field_trial(
563 AppendFieldTrials("WebRTC-UseShortVP8TL3Pattern/Enabled/"));
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200564 ParamsWithLogging conf_motion_hd;
sprangff19d352017-09-06 07:14:02 -0700565 conf_motion_hd.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100566 conf_motion_hd.video[0] = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000567 true, 1280, 720, 50, 30000,
568 3000000, 3000000, false, "VP8", 3,
Niels Möller6aa415e2018-06-07 11:14:13 +0200569 -1, 0, false, false, false, "ConferenceMotion_1280_720_50"};
sprangff19d352017-09-06 07:14:02 -0700570 conf_motion_hd.analyzer = {"conference_motion_hd_3tl_alt_moderate_limits",
571 0.0, 0.0, kFullStackTestDurationSecs};
572 conf_motion_hd.pipe.queue_length_packets = 50;
573 conf_motion_hd.pipe.loss_percent = 3;
574 conf_motion_hd.pipe.queue_delay_ms = 100;
575 conf_motion_hd.pipe.link_capacity_kbps = 2000;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200576 fixture->RunWithAnalyzer(conf_motion_hd);
sprangff19d352017-09-06 07:14:02 -0700577}
578
jianj390e64d2017-02-03 09:51:23 -0800579#if !defined(RTC_DISABLE_VP9)
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200580TEST(FullStackTest, ConferenceMotionHd2000kbps100msLimitedQueueVP9) {
581 auto fixture = CreateVideoQualityTestFixture();
582 ParamsWithLogging conf_motion_hd;
jianj390e64d2017-02-03 09:51:23 -0800583 conf_motion_hd.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100584 conf_motion_hd.video[0] = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000585 true, 1280, 720, 50, 30000,
586 3000000, 3000000, false, "VP9", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200587 0, 0, false, false, false, "ConferenceMotion_1280_720_50"};
jianj390e64d2017-02-03 09:51:23 -0800588 conf_motion_hd.analyzer = {
589 "conference_motion_hd_2000kbps_100ms_32pkts_queue_vp9", 0.0, 0.0,
590 kFullStackTestDurationSecs};
591 conf_motion_hd.pipe.queue_length_packets = 32;
592 conf_motion_hd.pipe.queue_delay_ms = 100;
593 conf_motion_hd.pipe.link_capacity_kbps = 2000;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200594 fixture->RunWithAnalyzer(conf_motion_hd);
jianj390e64d2017-02-03 09:51:23 -0800595}
596#endif
597
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200598TEST(FullStackTest, ScreenshareSlidesVP8_2TL) {
599 auto fixture = CreateVideoQualityTestFixture();
600 ParamsWithLogging screenshare;
minyue626bc952016-10-31 05:47:02 -0700601 screenshare.call.send_side_bwe = true;
Erik Språng28bb3912018-07-11 16:06:55 +0200602 screenshare.video[0] = {true, 1850, 1110, 5, 50000, 200000,
603 1000000, false, "VP8", 2, 1, 400000,
604 false, false, false, ""};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100605 screenshare.screenshare[0] = {true, false, 10};
minyue626bc952016-10-31 05:47:02 -0700606 screenshare.analyzer = {"screenshare_slides", 0.0, 0.0,
607 kFullStackTestDurationSecs};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200608 fixture->RunWithAnalyzer(screenshare);
Erik Språng6ee69aa2015-09-03 15:58:05 +0200609}
610
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200611TEST(FullStackTest, ScreenshareSlidesVP8_3TL_Simulcast) {
612 auto fixture = CreateVideoQualityTestFixture();
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200613 ParamsWithLogging screenshare;
ilnikcb8c1462017-03-09 09:23:30 -0800614 screenshare.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100615 screenshare.screenshare[0] = {true, false, 10};
616 screenshare.video[0] = {true, 1850, 1110, 5, 800000,
617 2500000, 2500000, false, "VP8", 3,
Niels Möller6aa415e2018-06-07 11:14:13 +0200618 2, 400000, false, false, false, ""};
ilnikcb8c1462017-03-09 09:23:30 -0800619 screenshare.analyzer = {"screenshare_slides_simulcast", 0.0, 0.0,
620 kFullStackTestDurationSecs};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200621 ParamsWithLogging screenshare_params_high;
Erik Språng28bb3912018-07-11 16:06:55 +0200622 screenshare_params_high.video[0] = {true, 1850, 1110, 5, 400000, 1000000,
623 1000000, false, "VP8", 3, 0, 400000,
624 false, false, false, ""};
ilnikcb8c1462017-03-09 09:23:30 -0800625 VideoQualityTest::Params screenshare_params_low;
Erik Språng28bb3912018-07-11 16:06:55 +0200626 screenshare_params_low.video[0] = {true, 1850, 1110, 5, 50000, 200000,
627 1000000, false, "VP8", 2, 0, 400000,
628 false, false, false, ""};
ilnikcb8c1462017-03-09 09:23:30 -0800629
630 std::vector<VideoStream> streams = {
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200631 VideoQualityTest::DefaultVideoStream(screenshare_params_low, 0),
632 VideoQualityTest::DefaultVideoStream(screenshare_params_high, 0)};
Sergey Silkin57027362018-05-15 09:12:05 +0200633 screenshare.ss[0] = {
634 streams, 1, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
635 false};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200636 fixture->RunWithAnalyzer(screenshare);
ilnikcb8c1462017-03-09 09:23:30 -0800637}
638
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200639TEST(FullStackTest, ScreenshareSlidesVP8_2TL_Scroll) {
640 auto fixture = CreateVideoQualityTestFixture();
641 ParamsWithLogging config;
minyue626bc952016-10-31 05:47:02 -0700642 config.call.send_side_bwe = true;
Erik Språng28bb3912018-07-11 16:06:55 +0200643 config.video[0] = {true, 1850, 1110 / 2, 5, 50000, 200000,
644 1000000, false, "VP8", 2, 1, 400000,
645 false, false, false, ""};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100646 config.screenshare[0] = {true, false, 10, 2};
minyue626bc952016-10-31 05:47:02 -0700647 config.analyzer = {"screenshare_slides_scrolling", 0.0, 0.0,
648 kFullStackTestDurationSecs};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200649 fixture->RunWithAnalyzer(config);
ivica028cf482015-07-30 02:15:56 -0700650}
651
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200652TEST(FullStackTest, ScreenshareSlidesVP8_2TL_LossyNet) {
653 auto fixture = CreateVideoQualityTestFixture();
654 ParamsWithLogging screenshare;
minyue626bc952016-10-31 05:47:02 -0700655 screenshare.call.send_side_bwe = true;
Erik Språng28bb3912018-07-11 16:06:55 +0200656 screenshare.video[0] = {true, 1850, 1110, 5, 50000, 200000,
657 1000000, false, "VP8", 2, 1, 400000,
658 false, false, false, ""};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100659 screenshare.screenshare[0] = {true, false, 10};
minyue626bc952016-10-31 05:47:02 -0700660 screenshare.analyzer = {"screenshare_slides_lossy_net", 0.0, 0.0,
661 kFullStackTestDurationSecs};
sprangee37de32015-11-23 06:10:23 -0800662 screenshare.pipe.loss_percent = 5;
663 screenshare.pipe.queue_delay_ms = 200;
664 screenshare.pipe.link_capacity_kbps = 500;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200665 fixture->RunWithAnalyzer(screenshare);
sprangee37de32015-11-23 06:10:23 -0800666}
667
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200668TEST(FullStackTest, ScreenshareSlidesVP8_2TL_VeryLossyNet) {
669 auto fixture = CreateVideoQualityTestFixture();
670 ParamsWithLogging screenshare;
minyue626bc952016-10-31 05:47:02 -0700671 screenshare.call.send_side_bwe = true;
Erik Språng28bb3912018-07-11 16:06:55 +0200672 screenshare.video[0] = {true, 1850, 1110, 5, 50000, 200000,
673 1000000, false, "VP8", 2, 1, 400000,
674 false, false, false, ""};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100675 screenshare.screenshare[0] = {true, false, 10};
minyue626bc952016-10-31 05:47:02 -0700676 screenshare.analyzer = {"screenshare_slides_very_lossy", 0.0, 0.0,
677 kFullStackTestDurationSecs};
sprangee37de32015-11-23 06:10:23 -0800678 screenshare.pipe.loss_percent = 10;
679 screenshare.pipe.queue_delay_ms = 200;
680 screenshare.pipe.link_capacity_kbps = 500;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200681 fixture->RunWithAnalyzer(screenshare);
sprangee37de32015-11-23 06:10:23 -0800682}
683
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200684TEST(FullStackTest, ScreenshareSlidesVP8_2TL_LossyNetRestrictedQueue) {
685 auto fixture = CreateVideoQualityTestFixture();
686 ParamsWithLogging screenshare;
sprange566e172017-06-08 01:29:15 -0700687 screenshare.call.send_side_bwe = true;
Erik Språng28bb3912018-07-11 16:06:55 +0200688 screenshare.video[0] = {true, 1850, 1110, 5, 50000, 200000,
689 1000000, false, "VP8", 2, 1, 400000,
690 false, false, false, ""};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100691 screenshare.screenshare[0] = {true, false, 10};
sprange566e172017-06-08 01:29:15 -0700692 screenshare.analyzer = {"screenshare_slides_lossy_limited", 0.0, 0.0,
693 kFullStackTestDurationSecs};
694 screenshare.pipe.loss_percent = 5;
695 screenshare.pipe.link_capacity_kbps = 200;
696 screenshare.pipe.queue_length_packets = 30;
697
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200698 fixture->RunWithAnalyzer(screenshare);
sprange566e172017-06-08 01:29:15 -0700699}
700
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200701TEST(FullStackTest, ScreenshareSlidesVP8_2TL_ModeratelyRestricted) {
702 auto fixture = CreateVideoQualityTestFixture();
703 ParamsWithLogging screenshare;
sprang89c4a7e2017-06-30 13:27:40 -0700704 screenshare.call.send_side_bwe = true;
Erik Språng28bb3912018-07-11 16:06:55 +0200705 screenshare.video[0] = {true, 1850, 1110, 5, 50000, 200000,
706 1000000, false, "VP8", 2, 1, 400000,
707 false, false, false, ""};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100708 screenshare.screenshare[0] = {true, false, 10};
sprang89c4a7e2017-06-30 13:27:40 -0700709 screenshare.analyzer = {"screenshare_slides_moderately_restricted", 0.0, 0.0,
710 kFullStackTestDurationSecs};
711 screenshare.pipe.loss_percent = 1;
712 screenshare.pipe.link_capacity_kbps = 1200;
713 screenshare.pipe.queue_length_packets = 30;
714
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200715 fixture->RunWithAnalyzer(screenshare);
sprang89c4a7e2017-06-30 13:27:40 -0700716}
717
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200718const ParamsWithLogging::Video kSvcVp9Video = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000719 true, 1280, 720, 30, 800000,
720 2500000, 2500000, false, "VP9", 3,
Niels Möller6aa415e2018-06-07 11:14:13 +0200721 2, 400000, false, false, false, "ConferenceMotion_1280_720_50"};
ilnik566c43b2017-03-07 04:42:54 -0800722
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200723const ParamsWithLogging::Video kSimulcastVp8VideoHigh = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000724 true, 1280, 720, 30, 800000,
725 2500000, 2500000, false, "VP8", 3,
Niels Möller6aa415e2018-06-07 11:14:13 +0200726 2, 400000, false, false, false, "ConferenceMotion_1280_720_50"};
ilnik566c43b2017-03-07 04:42:54 -0800727
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200728const ParamsWithLogging::Video kSimulcastVp8VideoMedium = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000729 true, 640, 360, 30, 150000,
730 500000, 700000, false, "VP8", 3,
Niels Möller6aa415e2018-06-07 11:14:13 +0200731 2, 400000, false, false, false, "ConferenceMotion_1280_720_50"};
ilnik566c43b2017-03-07 04:42:54 -0800732
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200733const ParamsWithLogging::Video kSimulcastVp8VideoLow = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000734 true, 320, 180, 30, 30000,
735 150000, 200000, false, "VP8", 3,
Niels Möller6aa415e2018-06-07 11:14:13 +0200736 2, 400000, false, false, false, "ConferenceMotion_1280_720_50"};
ilnik566c43b2017-03-07 04:42:54 -0800737
Peter Boström12996152016-05-14 02:03:18 +0200738#if !defined(RTC_DISABLE_VP9)
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200739TEST(FullStackTest, ScreenshareSlidesVP9_2SL) {
740 auto fixture = CreateVideoQualityTestFixture();
741 ParamsWithLogging screenshare;
minyue626bc952016-10-31 05:47:02 -0700742 screenshare.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100743 screenshare.video[0] = {true, 1850, 1110, 5, 50000,
744 200000, 2000000, false, "VP9", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200745 0, 400000, false, false, false, ""};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100746 screenshare.screenshare[0] = {true, false, 10};
minyue626bc952016-10-31 05:47:02 -0700747 screenshare.analyzer = {"screenshare_slides_vp9_2sl", 0.0, 0.0,
748 kFullStackTestDurationSecs};
Sergey Silkin57027362018-05-15 09:12:05 +0200749 screenshare.ss[0] = {
750 std::vector<VideoStream>(), 0, 2, 1, InterLayerPredMode::kOn,
751 std::vector<SpatialLayer>(), false};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200752 fixture->RunWithAnalyzer(screenshare);
sprang@webrtc.org131bea82015-02-18 12:46:06 +0000753}
ilnik2a8c2f52017-02-15 02:23:28 -0800754
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200755TEST(FullStackTest, VP9SVC_3SL_High) {
756 auto fixture = CreateVideoQualityTestFixture();
757 ParamsWithLogging simulcast;
ilnik2a8c2f52017-02-15 02:23:28 -0800758 simulcast.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100759 simulcast.video[0] = kSvcVp9Video;
ilnik2a8c2f52017-02-15 02:23:28 -0800760 simulcast.analyzer = {"vp9svc_3sl_high", 0.0, 0.0,
761 kFullStackTestDurationSecs};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200762
Sergey Silkin57027362018-05-15 09:12:05 +0200763 simulcast.ss[0] = {
764 std::vector<VideoStream>(), 0, 3, 2, InterLayerPredMode::kOn,
765 std::vector<SpatialLayer>(), false};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200766 fixture->RunWithAnalyzer(simulcast);
ilnik2a8c2f52017-02-15 02:23:28 -0800767}
768
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200769TEST(FullStackTest, VP9SVC_3SL_Medium) {
770 auto fixture = CreateVideoQualityTestFixture();
771 ParamsWithLogging simulcast;
ilnik2a8c2f52017-02-15 02:23:28 -0800772 simulcast.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100773 simulcast.video[0] = kSvcVp9Video;
ilnik2a8c2f52017-02-15 02:23:28 -0800774 simulcast.analyzer = {"vp9svc_3sl_medium", 0.0, 0.0,
775 kFullStackTestDurationSecs};
Sergey Silkin57027362018-05-15 09:12:05 +0200776 simulcast.ss[0] = {
777 std::vector<VideoStream>(), 0, 3, 1, InterLayerPredMode::kOn,
778 std::vector<SpatialLayer>(), false};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200779 fixture->RunWithAnalyzer(simulcast);
ilnik2a8c2f52017-02-15 02:23:28 -0800780}
781
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200782TEST(FullStackTest, VP9SVC_3SL_Low) {
783 auto fixture = CreateVideoQualityTestFixture();
784 ParamsWithLogging simulcast;
ilnik2a8c2f52017-02-15 02:23:28 -0800785 simulcast.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100786 simulcast.video[0] = kSvcVp9Video;
ilnik2a8c2f52017-02-15 02:23:28 -0800787 simulcast.analyzer = {"vp9svc_3sl_low", 0.0, 0.0, kFullStackTestDurationSecs};
Sergey Silkin57027362018-05-15 09:12:05 +0200788 simulcast.ss[0] = {
789 std::vector<VideoStream>(), 0, 3, 0, InterLayerPredMode::kOn,
790 std::vector<SpatialLayer>(), false};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200791 fixture->RunWithAnalyzer(simulcast);
ilnik2a8c2f52017-02-15 02:23:28 -0800792}
Sergey Silkin0643fd62018-05-17 12:50:53 +0200793
Ilya Nikolaevskiy14ac7932018-07-12 10:39:41 +0200794// bugs.webrtc.org/9506
795#if !defined(WEBRTC_MAC)
796
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200797TEST(FullStackTest, VP9KSVC_3SL_High) {
798 auto fixture = CreateVideoQualityTestFixture();
799 ParamsWithLogging simulcast;
Sergey Silkin0643fd62018-05-17 12:50:53 +0200800 simulcast.call.send_side_bwe = true;
801 simulcast.video[0] = kSvcVp9Video;
802 simulcast.analyzer = {"vp9ksvc_3sl_high", 0.0, 0.0,
803 kFullStackTestDurationSecs};
804 simulcast.ss[0] = {
805 std::vector<VideoStream>(), 0, 3, 2, InterLayerPredMode::kOnKeyPic,
806 std::vector<SpatialLayer>(), false};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200807 fixture->RunWithAnalyzer(simulcast);
Sergey Silkin0643fd62018-05-17 12:50:53 +0200808}
809
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200810TEST(FullStackTest, VP9KSVC_3SL_Medium) {
811 auto fixture = CreateVideoQualityTestFixture();
812 ParamsWithLogging simulcast;
Sergey Silkin0643fd62018-05-17 12:50:53 +0200813 simulcast.call.send_side_bwe = true;
814 simulcast.video[0] = kSvcVp9Video;
815 simulcast.analyzer = {"vp9ksvc_3sl_medium", 0.0, 0.0,
816 kFullStackTestDurationSecs};
817 simulcast.ss[0] = {
818 std::vector<VideoStream>(), 0, 3, 1, InterLayerPredMode::kOnKeyPic,
819 std::vector<SpatialLayer>(), false};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200820 fixture->RunWithAnalyzer(simulcast);
Sergey Silkin0643fd62018-05-17 12:50:53 +0200821}
822
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200823TEST(FullStackTest, VP9KSVC_3SL_Low) {
824 auto fixture = CreateVideoQualityTestFixture();
825 ParamsWithLogging simulcast;
Sergey Silkin0643fd62018-05-17 12:50:53 +0200826 simulcast.call.send_side_bwe = true;
827 simulcast.video[0] = kSvcVp9Video;
828 simulcast.analyzer = {"vp9ksvc_3sl_low", 0.0, 0.0,
829 kFullStackTestDurationSecs};
830 simulcast.ss[0] = {
831 std::vector<VideoStream>(), 0, 3, 0, InterLayerPredMode::kOnKeyPic,
832 std::vector<SpatialLayer>(), false};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200833 fixture->RunWithAnalyzer(simulcast);
Sergey Silkin0643fd62018-05-17 12:50:53 +0200834}
“Michael277a6562018-06-01 14:09:19 -0500835
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200836TEST(FullStackTest, VP9KSVC_3SL_Medium_Network_Restricted) {
837 auto fixture = CreateVideoQualityTestFixture();
“Michael277a6562018-06-01 14:09:19 -0500838 VideoQualityTest::Params simulcast;
839 simulcast.call.send_side_bwe = true;
840 simulcast.video[0] = kSvcVp9Video;
841 simulcast.analyzer = {"vp9ksvc_3sl_medium_network_restricted", 0.0, 0.0,
842 kFullStackTestDurationSecs};
843 simulcast.ss[0] = {
844 std::vector<VideoStream>(), 0, 3, 1, InterLayerPredMode::kOnKeyPic,
845 std::vector<SpatialLayer>(), false};
846 simulcast.pipe.link_capacity_kbps = 1000;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200847 fixture->RunWithAnalyzer(simulcast);
“Michael277a6562018-06-01 14:09:19 -0500848}
Ilya Nikolaevskiy14ac7932018-07-12 10:39:41 +0200849#endif // !defined(WEBRTC_MAC)
“Michael277a6562018-06-01 14:09:19 -0500850
Peter Boström12996152016-05-14 02:03:18 +0200851#endif // !defined(RTC_DISABLE_VP9)
brandtr93c5d032016-11-30 07:50:07 -0800852
ilnik6b826ef2017-06-16 06:53:48 -0700853// Android bots can't handle FullHD, so disable the test.
Sam Zackrissonc3d8bb12018-05-02 10:22:32 +0200854// TODO(bugs.webrtc.org/9220): Investigate source of flakiness on Mac.
855#if defined(WEBRTC_ANDROID) || defined(WEBRTC_MAC)
ilnik6b826ef2017-06-16 06:53:48 -0700856#define MAYBE_SimulcastFullHdOveruse DISABLED_SimulcastFullHdOveruse
857#else
858#define MAYBE_SimulcastFullHdOveruse SimulcastFullHdOveruse
859#endif
860
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200861TEST(FullStackTest, MAYBE_SimulcastFullHdOveruse) {
862 auto fixture = CreateVideoQualityTestFixture();
863 ParamsWithLogging simulcast;
ilnik6b826ef2017-06-16 06:53:48 -0700864 simulcast.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100865 simulcast.video[0] = {true, 1920, 1080, 30, 800000,
866 2500000, 2500000, false, "VP8", 3,
Niels Möller6aa415e2018-06-07 11:14:13 +0200867 2, 400000, false, false, false, "Generator"};
ilnik6b826ef2017-06-16 06:53:48 -0700868 simulcast.analyzer = {"simulcast_HD_high", 0.0, 0.0,
869 kFullStackTestDurationSecs};
870 simulcast.pipe.loss_percent = 0;
871 simulcast.pipe.queue_delay_ms = 100;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200872 std::vector<VideoStream> streams = {
873 VideoQualityTest::DefaultVideoStream(simulcast, 0),
874 VideoQualityTest::DefaultVideoStream(simulcast, 0),
875 VideoQualityTest::DefaultVideoStream(simulcast, 0)
876 };
Sergey Silkin57027362018-05-15 09:12:05 +0200877 simulcast.ss[0] = {
878 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
879 true};
Erik Språngb6b1cac2018-08-09 16:12:54 +0200880 webrtc::test::ScopedFieldTrials override_trials(AppendFieldTrials(
881 "WebRTC-ForceSimulatedOveruseIntervalMs/1000-50000-300/"));
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200882 fixture->RunWithAnalyzer(simulcast);
ilnik6b826ef2017-06-16 06:53:48 -0700883}
884
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200885TEST(FullStackTest, SimulcastVP8_3SL_High) {
886 auto fixture = CreateVideoQualityTestFixture();
887 ParamsWithLogging simulcast;
ilnik3dd5ad92017-02-09 04:58:53 -0800888 simulcast.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100889 simulcast.video[0] = kSimulcastVp8VideoHigh;
ilnik2a8c2f52017-02-15 02:23:28 -0800890 simulcast.analyzer = {"simulcast_vp8_3sl_high", 0.0, 0.0,
ilnik3dd5ad92017-02-09 04:58:53 -0800891 kFullStackTestDurationSecs};
892 simulcast.pipe.loss_percent = 0;
893 simulcast.pipe.queue_delay_ms = 100;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200894 ParamsWithLogging video_params_high;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100895 video_params_high.video[0] = kSimulcastVp8VideoHigh;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200896 ParamsWithLogging video_params_medium;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100897 video_params_medium.video[0] = kSimulcastVp8VideoMedium;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200898 ParamsWithLogging video_params_low;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100899 video_params_low.video[0] = kSimulcastVp8VideoLow;
ilnik3dd5ad92017-02-09 04:58:53 -0800900
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100901 std::vector<VideoStream> streams = {
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200902 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
903 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
904 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
Sergey Silkin57027362018-05-15 09:12:05 +0200905 simulcast.ss[0] = {
906 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
907 false};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200908 fixture->RunWithAnalyzer(simulcast);
ilnik3dd5ad92017-02-09 04:58:53 -0800909}
910
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200911TEST(FullStackTest, SimulcastVP8_3SL_Medium) {
912 auto fixture = CreateVideoQualityTestFixture();
913 ParamsWithLogging simulcast;
ilnik3dd5ad92017-02-09 04:58:53 -0800914 simulcast.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100915 simulcast.video[0] = kSimulcastVp8VideoHigh;
ilnik2a8c2f52017-02-15 02:23:28 -0800916 simulcast.analyzer = {"simulcast_vp8_3sl_medium", 0.0, 0.0,
ilnik3dd5ad92017-02-09 04:58:53 -0800917 kFullStackTestDurationSecs};
918 simulcast.pipe.loss_percent = 0;
919 simulcast.pipe.queue_delay_ms = 100;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200920 ParamsWithLogging video_params_high;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100921 video_params_high.video[0] = kSimulcastVp8VideoHigh;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200922 ParamsWithLogging video_params_medium;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100923 video_params_medium.video[0] = kSimulcastVp8VideoMedium;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200924 ParamsWithLogging video_params_low;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100925 video_params_low.video[0] = kSimulcastVp8VideoLow;
ilnik3dd5ad92017-02-09 04:58:53 -0800926
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100927 std::vector<VideoStream> streams = {
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200928 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
929 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
930 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
Sergey Silkin57027362018-05-15 09:12:05 +0200931 simulcast.ss[0] = {
932 streams, 1, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
933 false};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200934 fixture->RunWithAnalyzer(simulcast);
ilnik3dd5ad92017-02-09 04:58:53 -0800935}
936
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200937TEST(FullStackTest, SimulcastVP8_3SL_Low) {
938 auto fixture = CreateVideoQualityTestFixture();
939 ParamsWithLogging simulcast;
ilnik3dd5ad92017-02-09 04:58:53 -0800940 simulcast.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100941 simulcast.video[0] = kSimulcastVp8VideoHigh;
ilnik2a8c2f52017-02-15 02:23:28 -0800942 simulcast.analyzer = {"simulcast_vp8_3sl_low", 0.0, 0.0,
ilnik3dd5ad92017-02-09 04:58:53 -0800943 kFullStackTestDurationSecs};
944 simulcast.pipe.loss_percent = 0;
945 simulcast.pipe.queue_delay_ms = 100;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200946 ParamsWithLogging video_params_high;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100947 video_params_high.video[0] = kSimulcastVp8VideoHigh;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200948 ParamsWithLogging video_params_medium;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100949 video_params_medium.video[0] = kSimulcastVp8VideoMedium;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200950 ParamsWithLogging video_params_low;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100951 video_params_low.video[0] = kSimulcastVp8VideoLow;
ilnik3dd5ad92017-02-09 04:58:53 -0800952
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100953 std::vector<VideoStream> streams = {
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200954 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
955 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
956 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
Sergey Silkin57027362018-05-15 09:12:05 +0200957 simulcast.ss[0] = {
958 streams, 0, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
959 false};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200960 fixture->RunWithAnalyzer(simulcast);
ilnik3dd5ad92017-02-09 04:58:53 -0800961}
962
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200963TEST(FullStackTest, LargeRoomVP8_5thumb) {
964 auto fixture = CreateVideoQualityTestFixture();
965 ParamsWithLogging large_room;
ilnika014cc52017-03-07 04:21:04 -0800966 large_room.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100967 large_room.video[0] = kSimulcastVp8VideoHigh;
ilnika014cc52017-03-07 04:21:04 -0800968 large_room.analyzer = {"largeroom_5thumb", 0.0, 0.0,
969 kFullStackTestDurationSecs};
970 large_room.pipe.loss_percent = 0;
971 large_room.pipe.queue_delay_ms = 100;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200972 ParamsWithLogging video_params_high;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100973 video_params_high.video[0] = kSimulcastVp8VideoHigh;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200974 ParamsWithLogging video_params_medium;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100975 video_params_medium.video[0] = kSimulcastVp8VideoMedium;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200976 ParamsWithLogging video_params_low;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100977 video_params_low.video[0] = kSimulcastVp8VideoLow;
ilnika014cc52017-03-07 04:21:04 -0800978
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100979 std::vector<VideoStream> streams = {
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200980 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
981 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
982 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
ilnik98436952017-07-13 00:47:03 -0700983 large_room.call.num_thumbnails = 5;
Sergey Silkin57027362018-05-15 09:12:05 +0200984 large_room.ss[0] = {
985 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
986 false};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200987 fixture->RunWithAnalyzer(large_room);
ilnika014cc52017-03-07 04:21:04 -0800988}
989
oprypin743117f2017-09-15 05:24:24 -0700990#if defined(WEBRTC_ANDROID) || defined(WEBRTC_IOS)
991// Fails on mobile devices:
ilnikf89a7382017-03-07 06:15:27 -0800992// https://bugs.chromium.org/p/webrtc/issues/detail?id=7301
993#define MAYBE_LargeRoomVP8_50thumb DISABLED_LargeRoomVP8_50thumb
ilnik3ae7c252017-03-08 01:17:35 -0800994#define MAYBE_LargeRoomVP8_15thumb DISABLED_LargeRoomVP8_15thumb
ilnikf89a7382017-03-07 06:15:27 -0800995#else
996#define MAYBE_LargeRoomVP8_50thumb LargeRoomVP8_50thumb
ilnik3ae7c252017-03-08 01:17:35 -0800997#define MAYBE_LargeRoomVP8_15thumb LargeRoomVP8_15thumb
ilnikf89a7382017-03-07 06:15:27 -0800998#endif
999
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001000TEST(FullStackTest, MAYBE_LargeRoomVP8_15thumb) {
1001 auto fixture = CreateVideoQualityTestFixture();
1002 ParamsWithLogging large_room;
ilnika014cc52017-03-07 04:21:04 -08001003 large_room.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001004 large_room.video[0] = kSimulcastVp8VideoHigh;
ilnika014cc52017-03-07 04:21:04 -08001005 large_room.analyzer = {"largeroom_15thumb", 0.0, 0.0,
1006 kFullStackTestDurationSecs};
1007 large_room.pipe.loss_percent = 0;
1008 large_room.pipe.queue_delay_ms = 100;
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001009 ParamsWithLogging video_params_high;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001010 video_params_high.video[0] = kSimulcastVp8VideoHigh;
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001011 ParamsWithLogging video_params_medium;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001012 video_params_medium.video[0] = kSimulcastVp8VideoMedium;
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001013 ParamsWithLogging video_params_low;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001014 video_params_low.video[0] = kSimulcastVp8VideoLow;
ilnika014cc52017-03-07 04:21:04 -08001015
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001016 std::vector<VideoStream> streams = {
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001017 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
1018 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
1019 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
ilnik98436952017-07-13 00:47:03 -07001020 large_room.call.num_thumbnails = 15;
Sergey Silkin57027362018-05-15 09:12:05 +02001021 large_room.ss[0] = {
1022 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1023 false};
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001024 fixture->RunWithAnalyzer(large_room);
ilnika014cc52017-03-07 04:21:04 -08001025}
1026
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001027TEST(FullStackTest, MAYBE_LargeRoomVP8_50thumb) {
1028 auto fixture = CreateVideoQualityTestFixture();
1029 ParamsWithLogging large_room;
ilnika014cc52017-03-07 04:21:04 -08001030 large_room.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001031 large_room.video[0] = kSimulcastVp8VideoHigh;
ilnika014cc52017-03-07 04:21:04 -08001032 large_room.analyzer = {"largeroom_50thumb", 0.0, 0.0,
1033 kFullStackTestDurationSecs};
1034 large_room.pipe.loss_percent = 0;
1035 large_room.pipe.queue_delay_ms = 100;
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001036 ParamsWithLogging video_params_high;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001037 video_params_high.video[0] = kSimulcastVp8VideoHigh;
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001038 ParamsWithLogging video_params_medium;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001039 video_params_medium.video[0] = kSimulcastVp8VideoMedium;
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001040 ParamsWithLogging video_params_low;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001041 video_params_low.video[0] = kSimulcastVp8VideoLow;
ilnika014cc52017-03-07 04:21:04 -08001042
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001043 std::vector<VideoStream> streams = {
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001044 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
1045 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
1046 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
ilnik98436952017-07-13 00:47:03 -07001047 large_room.call.num_thumbnails = 50;
Sergey Silkin57027362018-05-15 09:12:05 +02001048 large_room.ss[0] = {
1049 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1050 false};
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001051 fixture->RunWithAnalyzer(large_room);
ilnika014cc52017-03-07 04:21:04 -08001052}
1053
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001054class DualStreamsTest : public ::testing::TestWithParam<int> {};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001055
1056// Disable dual video test on mobile device becuase it's too heavy.
1057#if !defined(WEBRTC_ANDROID) && !defined(WEBRTC_IOS)
1058TEST_P(DualStreamsTest,
1059 ModeratelyRestricted_SlidesVp8_3TL_Simulcast_Video_Simulcast_High) {
1060 test::ScopedFieldTrials field_trial(
Erik Språngb6b1cac2018-08-09 16:12:54 +02001061 AppendFieldTrials(std::string(kRoundRobinPacingQueueExperiment) +
1062 std::string(kPacerPushBackExperiment)));
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001063 const int first_stream = GetParam();
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001064 ParamsWithLogging dual_streams;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001065
1066 // Screenshare Settings.
1067 dual_streams.screenshare[first_stream] = {true, false, 10};
1068 dual_streams.video[first_stream] = {true, 1850, 1110, 5, 800000,
1069 2500000, 2500000, false, "VP8", 3,
Niels Möller6aa415e2018-06-07 11:14:13 +02001070 2, 400000, false, false, false,
1071 ""};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001072
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001073 ParamsWithLogging screenshare_params_high;
Erik Språng28bb3912018-07-11 16:06:55 +02001074 screenshare_params_high.video[0] = {true, 1850, 1110, 5, 400000, 1000000,
1075 1000000, false, "VP8", 3, 0, 400000,
1076 false, false, false, ""};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001077 VideoQualityTest::Params screenshare_params_low;
Erik Språng28bb3912018-07-11 16:06:55 +02001078 screenshare_params_low.video[0] = {true, 1850, 1110, 5, 50000, 200000,
1079 1000000, false, "VP8", 2, 0, 400000,
1080 false, false, false, ""};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001081 std::vector<VideoStream> screenhsare_streams = {
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001082 VideoQualityTest::DefaultVideoStream(screenshare_params_low, 0),
1083 VideoQualityTest::DefaultVideoStream(screenshare_params_high, 0)};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001084
Sergey Silkin57027362018-05-15 09:12:05 +02001085 dual_streams.ss[first_stream] = {
1086 screenhsare_streams, 1, 1, 0, InterLayerPredMode::kOn,
1087 std::vector<SpatialLayer>(), false};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001088
1089 // Video settings.
1090 dual_streams.video[1 - first_stream] = kSimulcastVp8VideoHigh;
1091
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001092 ParamsWithLogging video_params_high;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001093 video_params_high.video[0] = kSimulcastVp8VideoHigh;
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001094 ParamsWithLogging video_params_medium;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001095 video_params_medium.video[0] = kSimulcastVp8VideoMedium;
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001096 ParamsWithLogging video_params_low;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001097 video_params_low.video[0] = kSimulcastVp8VideoLow;
1098 std::vector<VideoStream> streams = {
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001099 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
1100 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
1101 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001102
1103 dual_streams.ss[1 - first_stream] = {
Sergey Silkin57027362018-05-15 09:12:05 +02001104 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1105 false};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001106
1107 // Call settings.
1108 dual_streams.call.send_side_bwe = true;
1109 dual_streams.call.dual_video = true;
Edward Lemur35d2b7e2017-12-27 18:54:47 +01001110 std::string test_label = "dualstreams_moderately_restricted_screenshare_" +
1111 std::to_string(first_stream);
1112 dual_streams.analyzer = {test_label, 0.0, 0.0, kFullStackTestDurationSecs};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001113 dual_streams.pipe.loss_percent = 1;
1114 dual_streams.pipe.link_capacity_kbps = 7500;
1115 dual_streams.pipe.queue_length_packets = 30;
1116 dual_streams.pipe.queue_delay_ms = 100;
1117
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001118 auto fixture = CreateVideoQualityTestFixture();
1119 fixture->RunWithAnalyzer(dual_streams);
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001120}
1121#endif // !defined(WEBRTC_ANDROID) && !defined(WEBRTC_IOS)
1122
1123TEST_P(DualStreamsTest, Conference_Restricted) {
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001124 test::ScopedFieldTrials field_trial(
Erik Språngb6b1cac2018-08-09 16:12:54 +02001125 AppendFieldTrials(std::string(kRoundRobinPacingQueueExperiment) +
1126 std::string(kPacerPushBackExperiment)));
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001127 const int first_stream = GetParam();
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001128 ParamsWithLogging dual_streams;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001129
1130 // Screenshare Settings.
1131 dual_streams.screenshare[first_stream] = {true, false, 10};
1132 dual_streams.video[first_stream] = {true, 1850, 1110, 5, 800000,
1133 2500000, 2500000, false, "VP8", 3,
Niels Möller6aa415e2018-06-07 11:14:13 +02001134 2, 400000, false, false, false,
1135 ""};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001136 // Video settings.
1137 dual_streams.video[1 - first_stream] = {
1138 true, 1280, 720, 30, 150000,
1139 500000, 700000, false, "VP8", 3,
Niels Möller6aa415e2018-06-07 11:14:13 +02001140 2, 400000, false, false, false, "ConferenceMotion_1280_720_50"};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001141
1142 // Call settings.
1143 dual_streams.call.send_side_bwe = true;
1144 dual_streams.call.dual_video = true;
Edward Lemur35d2b7e2017-12-27 18:54:47 +01001145 std::string test_label = "dualstreams_conference_restricted_screenshare_" +
1146 std::to_string(first_stream);
1147 dual_streams.analyzer = {test_label, 0.0, 0.0, kFullStackTestDurationSecs};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001148 dual_streams.pipe.loss_percent = 1;
1149 dual_streams.pipe.link_capacity_kbps = 5000;
1150 dual_streams.pipe.queue_length_packets = 30;
1151 dual_streams.pipe.queue_delay_ms = 100;
1152
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001153 auto fixture = CreateVideoQualityTestFixture();
1154 fixture->RunWithAnalyzer(dual_streams);
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001155}
1156
1157INSTANTIATE_TEST_CASE_P(FullStackTest,
1158 DualStreamsTest,
1159 ::testing::Values(0, 1));
ilnika014cc52017-03-07 04:21:04 -08001160
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +00001161} // namespace webrtc