blob: 89af5be8bd96ea27ac7eafe872b788b000c9aacf [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"
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020016#include "test/field_trial.h"
17#include "test/gtest.h"
18#include "video/video_quality_test.h"
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +000019
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +000020namespace webrtc {
Sebastian Janssonf8518882018-05-31 14:52:59 +020021namespace flags {
22
23DEFINE_bool(logs, false, "print logs to stderr");
24
25DEFINE_string(rtc_event_log_name,
26 "",
27 "Filename for rtc event log. Two files "
28 "with \"_send\" and \"_recv\" suffixes will be created.");
29std::string RtcEventLogName() {
30 return static_cast<std::string>(FLAG_rtc_event_log_name);
31}
32DEFINE_string(rtp_dump_name, "", "Filename for dumped received RTP stream.");
33std::string RtpDumpName() {
34 return static_cast<std::string>(FLAG_rtp_dump_name);
35}
36DEFINE_string(encoded_frame_path,
37 "",
38 "The base path for encoded frame logs. Created files will have "
39 "the form <encoded_frame_path>.<n>.(recv|send.<m>).ivf");
40std::string EncodedFramePath() {
41 return static_cast<std::string>(FLAG_encoded_frame_path);
42}
43} // namespace flags
44} // namespace webrtc
45
46namespace webrtc {
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +000047
sprang89c4a7e2017-06-30 13:27:40 -070048namespace {
brandtrdd369c62016-11-16 23:56:57 -080049static const int kFullStackTestDurationSecs = 45;
Patrik Höglundb6b29e02018-06-21 16:58:01 +020050const char kScreenshareSimulcastExperiment[] =
51 "WebRTC-SimulcastScreenshare/Enabled/";
52const char kRoundRobinPacingQueueExperiment[] =
53 "WebRTC-RoundRobinPacing/Enabled/";
54const char kPacerPushBackExperiment[] =
55 "WebRTC-PacerPushbackExperiment/Enabled/";
pbos@webrtc.orgb613b5a2013-12-03 10:13:04 +000056
Patrik Höglundb6b29e02018-06-21 16:58:01 +020057struct ParamsWithLogging : public VideoQualityTest::Params {
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +000058 public:
Patrik Höglundb6b29e02018-06-21 16:58:01 +020059 ParamsWithLogging() {
60 // Use these logging flags by default, for everything.
61 logging = {flags::FLAG_logs, flags::RtcEventLogName(),
62 flags::RtpDumpName(), flags::EncodedFramePath()};
pbos@webrtc.org94015242013-10-16 11:05:37 +000063 }
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +000064};
65
Patrik Höglundb6b29e02018-06-21 16:58:01 +020066std::unique_ptr<VideoQualityTestFixtureInterface>
67CreateVideoQualityTestFixture() {
Karl Wiberg918f50c2018-07-05 11:40:33 +020068 return absl::make_unique<VideoQualityTest>(nullptr);
Patrik Höglundb6b29e02018-06-21 16:58:01 +020069}
70
71} // namespace
72
sprangce4aef12015-11-02 07:23:20 -080073// VideoQualityTest::Params params = {
74// { ... }, // Common.
75// { ... }, // Video-specific settings.
76// { ... }, // Screenshare-specific settings.
77// { ... }, // Analyzer settings.
78// pipe, // FakeNetworkPipe::Config
79// { ... }, // Spatial scalability.
80// logs // bool
81// };
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +000082
Peter Boström12996152016-05-14 02:03:18 +020083#if !defined(RTC_DISABLE_VP9)
Patrik Höglundb6b29e02018-06-21 16:58:01 +020084TEST(FullStackTest, ForemanCifWithoutPacketLossVp9) {
85 auto fixture = CreateVideoQualityTestFixture();
86 ParamsWithLogging foreman_cif;
brandtr93c5d032016-11-30 07:50:07 -080087 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +010088 foreman_cif.video[0] = {true, 352, 288, 30, 700000,
89 700000, 700000, false, "VP9", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +020090 0, 0, false, false, false, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -080091 foreman_cif.analyzer = {"foreman_cif_net_delay_0_0_plr_0_VP9", 0.0, 0.0,
92 kFullStackTestDurationSecs};
Patrik Höglundb6b29e02018-06-21 16:58:01 +020093 fixture->RunWithAnalyzer(foreman_cif);
asapersson88b0a222016-02-12 13:16:43 -080094}
95
Patrik Höglundb6b29e02018-06-21 16:58:01 +020096TEST(FullStackTest, ForemanCifPlr5Vp9) {
97 auto fixture = CreateVideoQualityTestFixture();
98 ParamsWithLogging foreman_cif;
brandtr93c5d032016-11-30 07:50:07 -080099 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100100 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
101 500000, 2000000, false, "VP9", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200102 0, 0, false, false, false, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -0800103 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5_VP9", 0.0, 0.0,
104 kFullStackTestDurationSecs};
105 foreman_cif.pipe.loss_percent = 5;
106 foreman_cif.pipe.queue_delay_ms = 50;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200107 fixture->RunWithAnalyzer(foreman_cif);
asapersson88b0a222016-02-12 13:16:43 -0800108}
Emircan Uysaler03e6ec92018-03-09 15:03:26 -0800109
Emircan Uysaler0823eec2018-07-13 17:10:00 -0700110TEST(FullStackTest, GeneratorWithoutPacketLossVp9Profile2) {
111 // Profile 2 might not be available on some platforms until
112 // https://bugs.chromium.org/p/webm/issues/detail?id=1544 is solved.
113 bool profile_2_is_supported = false;
114 for (const auto& codec : SupportedVP9Codecs()) {
115 if (ParseSdpForVP9Profile(codec.parameters)
116 .value_or(VP9Profile::kProfile0) == VP9Profile::kProfile2) {
117 profile_2_is_supported = true;
118 }
119 }
120 if (!profile_2_is_supported)
121 return;
122 auto fixture = CreateVideoQualityTestFixture();
123
124 SdpVideoFormat::Parameters vp92 = {
125 {kVP9FmtpProfileId, VP9ProfileToString(VP9Profile::kProfile2)}};
126 ParamsWithLogging generator;
127 generator.call.send_side_bwe = true;
128 generator.video[0] = {
129 true, 352, 288, 30, 700000, 700000, 700000, false, "VP9",
130 1, 0, 0, false, false, false, "GeneratorI010", 0, vp92};
131 generator.analyzer = {"generator_net_delay_0_0_plr_0_VP9Profile2", 0.0, 0.0,
132 kFullStackTestDurationSecs};
133 fixture->RunWithAnalyzer(generator);
134}
135
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200136TEST(FullStackTest, ForemanCifWithoutPacketLossMultiplexI420Frame) {
137 auto fixture = CreateVideoQualityTestFixture();
138 ParamsWithLogging foreman_cif;
Emircan Uysaler03e6ec92018-03-09 15:03:26 -0800139 foreman_cif.call.send_side_bwe = true;
140 foreman_cif.video[0] = {true, 352, 288, 30, 700000,
141 700000, 700000, false, "multiplex", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200142 0, 0, false, false, false,
143 "foreman_cif"};
Emircan Uysaler03e6ec92018-03-09 15:03:26 -0800144 foreman_cif.analyzer = {"foreman_cif_net_delay_0_0_plr_0_Multiplex", 0.0, 0.0,
145 kFullStackTestDurationSecs};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200146 fixture->RunWithAnalyzer(foreman_cif);
Emircan Uysaler03e6ec92018-03-09 15:03:26 -0800147}
148
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200149TEST(FullStackTest, GeneratorWithoutPacketLossMultiplexI420AFrame) {
150 auto fixture = CreateVideoQualityTestFixture();
151
152 ParamsWithLogging generator;
Emircan Uysalerf1ff3bd2018-03-12 11:53:21 -0700153 generator.call.send_side_bwe = true;
154 generator.video[0] = {true, 352, 288, 30, 700000,
155 700000, 700000, false, "multiplex", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200156 0, 0, false, false, false,
157 "GeneratorI420A"};
Emircan Uysalerf1ff3bd2018-03-12 11:53:21 -0700158 generator.analyzer = {"generator_net_delay_0_0_plr_0_Multiplex", 0.0, 0.0,
159 kFullStackTestDurationSecs};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200160 fixture->RunWithAnalyzer(generator);
Emircan Uysaler03e6ec92018-03-09 15:03:26 -0800161}
162
Peter Boström12996152016-05-14 02:03:18 +0200163#endif // !defined(RTC_DISABLE_VP9)
asapersson88b0a222016-02-12 13:16:43 -0800164
Patrik Höglund11bf2fa2018-04-09 12:20:50 +0200165#if defined(WEBRTC_LINUX)
166// Crashes on the linux trusty perf bot: bugs.webrtc.org/9129.
167#define MAYBE_ParisQcifWithoutPacketLoss DISABLED_ParisQcifWithoutPacketLoss
168#else
169#define MAYBE_ParisQcifWithoutPacketLoss ParisQcifWithoutPacketLoss
170#endif
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200171TEST(FullStackTest, MAYBE_ParisQcifWithoutPacketLoss) {
172 auto fixture = CreateVideoQualityTestFixture();
173 ParamsWithLogging paris_qcif;
minyue626bc952016-10-31 05:47:02 -0700174 paris_qcif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100175 paris_qcif.video[0] = {true, 176, 144, 30, 300000,
176 300000, 300000, false, "VP8", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200177 0, 0, false, false, false, "paris_qcif"};
minyue626bc952016-10-31 05:47:02 -0700178 paris_qcif.analyzer = {"net_delay_0_0_plr_0", 36.0, 0.96,
179 kFullStackTestDurationSecs};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200180 fixture->RunWithAnalyzer(paris_qcif);
pbos@webrtc.org994d0b72014-06-27 08:47:52 +0000181}
182
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200183TEST(FullStackTest, ForemanCifWithoutPacketLoss) {
184 auto fixture = CreateVideoQualityTestFixture();
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000185 // TODO(pbos): Decide on psnr/ssim thresholds for foreman_cif.
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200186 ParamsWithLogging foreman_cif;
minyue626bc952016-10-31 05:47:02 -0700187 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100188 foreman_cif.video[0] = {true, 352, 288, 30, 700000,
189 700000, 700000, false, "VP8", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200190 0, 0, false, false, false, "foreman_cif"};
minyue626bc952016-10-31 05:47:02 -0700191 foreman_cif.analyzer = {"foreman_cif_net_delay_0_0_plr_0", 0.0, 0.0,
192 kFullStackTestDurationSecs};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200193 fixture->RunWithAnalyzer(foreman_cif);
pbos@webrtc.org994d0b72014-06-27 08:47:52 +0000194}
pbos@webrtc.orgaf8d5af2013-07-09 08:02:33 +0000195
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200196TEST(FullStackTest, ForemanCif30kbpsWithoutPacketLoss) {
197 auto fixture = CreateVideoQualityTestFixture();
198 ParamsWithLogging foreman_cif;
asaperssonfb6ad3b2016-12-16 06:54:01 -0800199 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100200 foreman_cif.video[0] = {true, 352, 288, 10, 30000,
201 30000, 30000, false, "VP8", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200202 0, 0, false, false, false, "foreman_cif"};
asaperssonfb6ad3b2016-12-16 06:54:01 -0800203 foreman_cif.analyzer = {"foreman_cif_30kbps_net_delay_0_0_plr_0", 0.0, 0.0,
204 kFullStackTestDurationSecs};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200205 fixture->RunWithAnalyzer(foreman_cif);
asaperssonfb6ad3b2016-12-16 06:54:01 -0800206}
207
Niels Möller6aa415e2018-06-07 11:14:13 +0200208// Link capacity below default start rate. Automatic down scaling enabled.
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200209TEST(FullStackTest, ForemanCifLink150kbpsWithoutPacketLoss) {
210 auto fixture = CreateVideoQualityTestFixture();
Niels Möller6aa415e2018-06-07 11:14:13 +0200211 VideoQualityTest::Params foreman_cif;
212 foreman_cif.call.send_side_bwe = true;
213 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
214 500000, 2000000, false, "VP8", 1,
215 0, 0, false, false, true, "foreman_cif"};
216 foreman_cif.analyzer = {"foreman_cif_link_150kbps_net_delay_0_0_plr_0",
217 0.0, 0.0,
218 kFullStackTestDurationSecs};
219 foreman_cif.pipe.link_capacity_kbps = 150;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200220 fixture->RunWithAnalyzer(foreman_cif);
Niels Möller6aa415e2018-06-07 11:14:13 +0200221}
222
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200223TEST(FullStackTest, ForemanCifPlr5) {
224 auto fixture = CreateVideoQualityTestFixture();
225 ParamsWithLogging foreman_cif;
minyue626bc952016-10-31 05:47:02 -0700226 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100227 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
228 500000, 2000000, false, "VP8", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200229 0, 0, false, false, false, "foreman_cif"};
minyue626bc952016-10-31 05:47:02 -0700230 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5", 0.0, 0.0,
231 kFullStackTestDurationSecs};
ivica5d6a06c2015-09-17 05:30:24 -0700232 foreman_cif.pipe.loss_percent = 5;
233 foreman_cif.pipe.queue_delay_ms = 50;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200234 fixture->RunWithAnalyzer(foreman_cif);
stefan@webrtc.orgc216b9a2014-10-14 10:38:49 +0000235}
236
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200237TEST(FullStackTest, ForemanCifPlr5Ulpfec) {
238 auto fixture = CreateVideoQualityTestFixture();
239 ParamsWithLogging foreman_cif;
brandtr93c5d032016-11-30 07:50:07 -0800240 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100241 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
242 500000, 2000000, false, "VP8", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200243 0, 0, true, false, false, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -0800244 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5_ulpfec", 0.0, 0.0,
245 kFullStackTestDurationSecs};
246 foreman_cif.pipe.loss_percent = 5;
247 foreman_cif.pipe.queue_delay_ms = 50;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200248 fixture->RunWithAnalyzer(foreman_cif);
brandtr93c5d032016-11-30 07:50:07 -0800249}
250
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200251TEST(FullStackTest, ForemanCifPlr5Flexfec) {
252 auto fixture = CreateVideoQualityTestFixture();
253 ParamsWithLogging foreman_cif;
brandtr93c5d032016-11-30 07:50:07 -0800254 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100255 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
256 500000, 2000000, false, "VP8", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200257 0, 0, false, true, false, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -0800258 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5_flexfec", 0.0, 0.0,
259 kFullStackTestDurationSecs};
260 foreman_cif.pipe.loss_percent = 5;
261 foreman_cif.pipe.queue_delay_ms = 50;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200262 fixture->RunWithAnalyzer(foreman_cif);
brandtr93c5d032016-11-30 07:50:07 -0800263}
264
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200265TEST(FullStackTest, ForemanCif500kbpsPlr3Flexfec) {
266 auto fixture = CreateVideoQualityTestFixture();
267 ParamsWithLogging foreman_cif;
stefan889d9652017-07-05 03:03:02 -0700268 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100269 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
270 500000, 2000000, false, "VP8", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200271 0, 0, false, true, false, "foreman_cif"};
stefan889d9652017-07-05 03:03:02 -0700272 foreman_cif.analyzer = {"foreman_cif_500kbps_delay_50_0_plr_3_flexfec", 0.0,
273 0.0, kFullStackTestDurationSecs};
274 foreman_cif.pipe.loss_percent = 3;
275 foreman_cif.pipe.link_capacity_kbps = 500;
276 foreman_cif.pipe.queue_delay_ms = 50;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200277 fixture->RunWithAnalyzer(foreman_cif);
stefan889d9652017-07-05 03:03:02 -0700278}
279
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200280TEST(FullStackTest, ForemanCif500kbpsPlr3Ulpfec) {
281 auto fixture = CreateVideoQualityTestFixture();
282 ParamsWithLogging foreman_cif;
stefan889d9652017-07-05 03:03:02 -0700283 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100284 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
285 500000, 2000000, false, "VP8", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200286 0, 0, true, false, false, "foreman_cif"};
stefan889d9652017-07-05 03:03:02 -0700287 foreman_cif.analyzer = {"foreman_cif_500kbps_delay_50_0_plr_3_ulpfec", 0.0,
288 0.0, kFullStackTestDurationSecs};
289 foreman_cif.pipe.loss_percent = 3;
290 foreman_cif.pipe.link_capacity_kbps = 500;
291 foreman_cif.pipe.queue_delay_ms = 50;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200292 fixture->RunWithAnalyzer(foreman_cif);
stefan889d9652017-07-05 03:03:02 -0700293}
294
brandtrdd369c62016-11-16 23:56:57 -0800295#if defined(WEBRTC_USE_H264)
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200296TEST(FullStackTest, ForemanCifWithoutPacketlossH264) {
297 auto fixture = CreateVideoQualityTestFixture();
brandtr93c5d032016-11-30 07:50:07 -0800298 // TODO(pbos): Decide on psnr/ssim thresholds for foreman_cif.
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200299 ParamsWithLogging foreman_cif;
brandtr93c5d032016-11-30 07:50:07 -0800300 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100301 foreman_cif.video[0] = {true, 352, 288, 30, 700000,
302 700000, 700000, false, "H264", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200303 0, 0, false, false, false, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -0800304 foreman_cif.analyzer = {"foreman_cif_net_delay_0_0_plr_0_H264", 0.0, 0.0,
305 kFullStackTestDurationSecs};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200306 fixture->RunWithAnalyzer(foreman_cif);
brandtrdd369c62016-11-16 23:56:57 -0800307}
308
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200309TEST(FullStackTest, ForemanCif30kbpsWithoutPacketlossH264) {
310 auto fixture = CreateVideoQualityTestFixture();
311 ParamsWithLogging foreman_cif;
asaperssonfb6ad3b2016-12-16 06:54:01 -0800312 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100313 foreman_cif.video[0] = {true, 352, 288, 10, 30000,
314 30000, 30000, false, "H264", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200315 0, 0, false, false, false, "foreman_cif"};
asaperssonfb6ad3b2016-12-16 06:54:01 -0800316 foreman_cif.analyzer = {"foreman_cif_30kbps_net_delay_0_0_plr_0_H264", 0.0,
317 0.0, kFullStackTestDurationSecs};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200318 fixture->RunWithAnalyzer(foreman_cif);
asaperssonfb6ad3b2016-12-16 06:54:01 -0800319}
320
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200321TEST(FullStackTest, ForemanCifPlr5H264) {
322 auto fixture = CreateVideoQualityTestFixture();
323 ParamsWithLogging foreman_cif;
brandtr93c5d032016-11-30 07:50:07 -0800324 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100325 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
326 500000, 2000000, false, "H264", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200327 0, 0, false, false, false, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -0800328 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5_H264", 0.0, 0.0,
329 kFullStackTestDurationSecs};
330 foreman_cif.pipe.loss_percent = 5;
331 foreman_cif.pipe.queue_delay_ms = 50;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200332 fixture->RunWithAnalyzer(foreman_cif);
brandtrdd369c62016-11-16 23:56:57 -0800333}
334
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200335TEST(FullStackTest, ForemanCifPlr5H264SpsPpsIdrIsKeyframe) {
336 auto fixture = CreateVideoQualityTestFixture();
Rasmus Brandt88f080a2017-11-02 14:28:06 +0100337 test::ScopedFieldTrials override_field_trials(
338 "WebRTC-SpsPpsIdrIsH264Keyframe/Enabled/");
339
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200340 ParamsWithLogging foreman_cif;
Rasmus Brandt88f080a2017-11-02 14:28:06 +0100341 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100342 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
343 500000, 2000000, false, "H264", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200344 0, 0, false, false, false, "foreman_cif"};
Rasmus Brandt88f080a2017-11-02 14:28:06 +0100345 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5_H264_sps_pps_idr", 0.0,
346 0.0, kFullStackTestDurationSecs};
347 foreman_cif.pipe.loss_percent = 5;
348 foreman_cif.pipe.queue_delay_ms = 50;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200349 fixture->RunWithAnalyzer(foreman_cif);
Rasmus Brandt88f080a2017-11-02 14:28:06 +0100350}
351
brandtrdd369c62016-11-16 23:56:57 -0800352// Verify that this is worth the bot time, before enabling.
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200353TEST(FullStackTest, ForemanCifPlr5H264Flexfec) {
354 auto fixture = CreateVideoQualityTestFixture();
355 ParamsWithLogging foreman_cif;
brandtr93c5d032016-11-30 07:50:07 -0800356 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100357 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
358 500000, 2000000, false, "H264", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200359 0, 0, false, true, false, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -0800360 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5_H264_flexfec", 0.0, 0.0,
361 kFullStackTestDurationSecs};
362 foreman_cif.pipe.loss_percent = 5;
363 foreman_cif.pipe.queue_delay_ms = 50;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200364 fixture->RunWithAnalyzer(foreman_cif);
brandtrdd369c62016-11-16 23:56:57 -0800365}
366
367// Ulpfec with H264 is an unsupported combination, so this test is only useful
368// for debugging. It is therefore disabled by default.
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200369TEST(FullStackTest, DISABLED_ForemanCifPlr5H264Ulpfec) {
370 auto fixture = CreateVideoQualityTestFixture();
371 ParamsWithLogging foreman_cif;
brandtr93c5d032016-11-30 07:50:07 -0800372 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100373 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
374 500000, 2000000, false, "H264", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200375 0, 0, true, false, false, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -0800376 foreman_cif.analyzer = {"foreman_cif_delay_50_0_plr_5_H264_ulpfec", 0.0, 0.0,
377 kFullStackTestDurationSecs};
378 foreman_cif.pipe.loss_percent = 5;
379 foreman_cif.pipe.queue_delay_ms = 50;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200380 fixture->RunWithAnalyzer(foreman_cif);
brandtrdd369c62016-11-16 23:56:57 -0800381}
382#endif // defined(WEBRTC_USE_H264)
383
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200384TEST(FullStackTest, ForemanCif500kbps) {
385 auto fixture = CreateVideoQualityTestFixture();
386 ParamsWithLogging foreman_cif;
minyue626bc952016-10-31 05:47:02 -0700387 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100388 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
389 500000, 2000000, false, "VP8", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200390 0, 0, false, false, false, "foreman_cif"};
minyue626bc952016-10-31 05:47:02 -0700391 foreman_cif.analyzer = {"foreman_cif_500kbps", 0.0, 0.0,
392 kFullStackTestDurationSecs};
ivica5d6a06c2015-09-17 05:30:24 -0700393 foreman_cif.pipe.queue_length_packets = 0;
394 foreman_cif.pipe.queue_delay_ms = 0;
395 foreman_cif.pipe.link_capacity_kbps = 500;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200396 fixture->RunWithAnalyzer(foreman_cif);
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000397}
398
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200399TEST(FullStackTest, ForemanCif500kbpsLimitedQueue) {
400 auto fixture = CreateVideoQualityTestFixture();
401 ParamsWithLogging foreman_cif;
minyue626bc952016-10-31 05:47:02 -0700402 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100403 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
404 500000, 2000000, false, "VP8", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200405 0, 0, false, false, false, "foreman_cif"};
minyue626bc952016-10-31 05:47:02 -0700406 foreman_cif.analyzer = {"foreman_cif_500kbps_32pkts_queue", 0.0, 0.0,
407 kFullStackTestDurationSecs};
ivica5d6a06c2015-09-17 05:30:24 -0700408 foreman_cif.pipe.queue_length_packets = 32;
409 foreman_cif.pipe.queue_delay_ms = 0;
410 foreman_cif.pipe.link_capacity_kbps = 500;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200411 fixture->RunWithAnalyzer(foreman_cif);
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000412}
413
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200414TEST(FullStackTest, ForemanCif500kbps100ms) {
415 auto fixture = CreateVideoQualityTestFixture();
416 ParamsWithLogging foreman_cif;
minyue626bc952016-10-31 05:47:02 -0700417 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100418 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
419 500000, 2000000, false, "VP8", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200420 0, 0, false, false, false, "foreman_cif"};
minyue626bc952016-10-31 05:47:02 -0700421 foreman_cif.analyzer = {"foreman_cif_500kbps_100ms", 0.0, 0.0,
422 kFullStackTestDurationSecs};
ivica5d6a06c2015-09-17 05:30:24 -0700423 foreman_cif.pipe.queue_length_packets = 0;
424 foreman_cif.pipe.queue_delay_ms = 100;
425 foreman_cif.pipe.link_capacity_kbps = 500;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200426 fixture->RunWithAnalyzer(foreman_cif);
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000427}
428
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200429TEST(FullStackTest, ForemanCif500kbps100msLimitedQueue) {
430 auto fixture = CreateVideoQualityTestFixture();
431 ParamsWithLogging foreman_cif;
minyue626bc952016-10-31 05:47:02 -0700432 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100433 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
434 500000, 2000000, false, "VP8", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200435 0, 0, false, false, false, "foreman_cif"};
minyue626bc952016-10-31 05:47:02 -0700436 foreman_cif.analyzer = {"foreman_cif_500kbps_100ms_32pkts_queue", 0.0, 0.0,
437 kFullStackTestDurationSecs};
stefanb1797672016-08-11 07:00:57 -0700438 foreman_cif.pipe.queue_length_packets = 32;
439 foreman_cif.pipe.queue_delay_ms = 100;
440 foreman_cif.pipe.link_capacity_kbps = 500;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200441 fixture->RunWithAnalyzer(foreman_cif);
stefanb1797672016-08-11 07:00:57 -0700442}
443
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200444TEST(FullStackTest, ForemanCif500kbps100msLimitedQueueRecvBwe) {
445 auto fixture = CreateVideoQualityTestFixture();
446 ParamsWithLogging foreman_cif;
brandtr93c5d032016-11-30 07:50:07 -0800447 foreman_cif.call.send_side_bwe = false;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100448 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
449 500000, 2000000, false, "VP8", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200450 0, 0, false, false, false, "foreman_cif"};
brandtr93c5d032016-11-30 07:50:07 -0800451 foreman_cif.analyzer = {"foreman_cif_500kbps_100ms_32pkts_queue_recv_bwe",
452 0.0, 0.0, kFullStackTestDurationSecs};
ivica5d6a06c2015-09-17 05:30:24 -0700453 foreman_cif.pipe.queue_length_packets = 32;
454 foreman_cif.pipe.queue_delay_ms = 100;
455 foreman_cif.pipe.link_capacity_kbps = 500;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200456 fixture->RunWithAnalyzer(foreman_cif);
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000457}
458
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200459TEST(FullStackTest, ForemanCif1000kbps100msLimitedQueue) {
460 auto fixture = CreateVideoQualityTestFixture();
461 ParamsWithLogging foreman_cif;
minyue626bc952016-10-31 05:47:02 -0700462 foreman_cif.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100463 foreman_cif.video[0] = {true, 352, 288, 30, 30000,
464 2000000, 2000000, false, "VP8", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200465 0, 0, false, false, false, "foreman_cif"};
minyue626bc952016-10-31 05:47:02 -0700466 foreman_cif.analyzer = {"foreman_cif_1000kbps_100ms_32pkts_queue", 0.0, 0.0,
467 kFullStackTestDurationSecs};
ivica5d6a06c2015-09-17 05:30:24 -0700468 foreman_cif.pipe.queue_length_packets = 32;
469 foreman_cif.pipe.queue_delay_ms = 100;
470 foreman_cif.pipe.link_capacity_kbps = 1000;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200471 fixture->RunWithAnalyzer(foreman_cif);
stefan@webrtc.orgb8e9e442014-07-09 11:29:06 +0000472}
sprang@webrtc.org131bea82015-02-18 12:46:06 +0000473
sprangff19d352017-09-06 07:14:02 -0700474// TODO(sprang): Remove this if we have the similar ModerateLimits below?
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200475TEST(FullStackTest, ConferenceMotionHd2000kbps100msLimitedQueue) {
476 auto fixture = CreateVideoQualityTestFixture();
477 ParamsWithLogging conf_motion_hd;
minyue626bc952016-10-31 05:47:02 -0700478 conf_motion_hd.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100479 conf_motion_hd.video[0] = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000480 true, 1280, 720, 50, 30000,
481 3000000, 3000000, false, "VP8", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200482 0, 0, false, false, false, "ConferenceMotion_1280_720_50"};
minyue626bc952016-10-31 05:47:02 -0700483 conf_motion_hd.analyzer = {"conference_motion_hd_2000kbps_100ms_32pkts_queue",
484 0.0, 0.0, kFullStackTestDurationSecs};
stefanb1797672016-08-11 07:00:57 -0700485 conf_motion_hd.pipe.queue_length_packets = 32;
486 conf_motion_hd.pipe.queue_delay_ms = 100;
487 conf_motion_hd.pipe.link_capacity_kbps = 2000;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200488 fixture->RunWithAnalyzer(conf_motion_hd);
stefanb1797672016-08-11 07:00:57 -0700489}
490
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200491TEST(FullStackTest, ConferenceMotionHd1TLModerateLimits) {
492 auto fixture = CreateVideoQualityTestFixture();
493 ParamsWithLogging conf_motion_hd;
sprangff19d352017-09-06 07:14:02 -0700494 conf_motion_hd.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100495 conf_motion_hd.video[0] = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000496 true, 1280, 720, 50, 30000,
497 3000000, 3000000, false, "VP8", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200498 -1, 0, false, false, false, "ConferenceMotion_1280_720_50"};
sprangff19d352017-09-06 07:14:02 -0700499 conf_motion_hd.analyzer = {"conference_motion_hd_1tl_moderate_limits", 0.0,
500 0.0, kFullStackTestDurationSecs};
501 conf_motion_hd.pipe.queue_length_packets = 50;
502 conf_motion_hd.pipe.loss_percent = 3;
503 conf_motion_hd.pipe.queue_delay_ms = 100;
504 conf_motion_hd.pipe.link_capacity_kbps = 2000;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200505 fixture->RunWithAnalyzer(conf_motion_hd);
sprangff19d352017-09-06 07:14:02 -0700506}
507
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200508TEST(FullStackTest, ConferenceMotionHd2TLModerateLimits) {
509 auto fixture = CreateVideoQualityTestFixture();
510 ParamsWithLogging conf_motion_hd;
sprangff19d352017-09-06 07:14:02 -0700511 conf_motion_hd.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100512 conf_motion_hd.video[0] = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000513 true, 1280, 720, 50, 30000,
514 3000000, 3000000, false, "VP8", 2,
Niels Möller6aa415e2018-06-07 11:14:13 +0200515 -1, 0, false, false, false, "ConferenceMotion_1280_720_50"};
sprangff19d352017-09-06 07:14:02 -0700516 conf_motion_hd.analyzer = {"conference_motion_hd_2tl_moderate_limits", 0.0,
517 0.0, kFullStackTestDurationSecs};
518 conf_motion_hd.pipe.queue_length_packets = 50;
519 conf_motion_hd.pipe.loss_percent = 3;
520 conf_motion_hd.pipe.queue_delay_ms = 100;
521 conf_motion_hd.pipe.link_capacity_kbps = 2000;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200522 fixture->RunWithAnalyzer(conf_motion_hd);
sprangff19d352017-09-06 07:14:02 -0700523}
524
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200525TEST(FullStackTest, ConferenceMotionHd3TLModerateLimits) {
526 auto fixture = CreateVideoQualityTestFixture();
527 ParamsWithLogging conf_motion_hd;
sprangff19d352017-09-06 07:14:02 -0700528 conf_motion_hd.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100529 conf_motion_hd.video[0] = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000530 true, 1280, 720, 50, 30000,
531 3000000, 3000000, false, "VP8", 3,
Niels Möller6aa415e2018-06-07 11:14:13 +0200532 -1, 0, false, false, false, "ConferenceMotion_1280_720_50"};
sprangff19d352017-09-06 07:14:02 -0700533 conf_motion_hd.analyzer = {"conference_motion_hd_3tl_moderate_limits", 0.0,
534 0.0, kFullStackTestDurationSecs};
535 conf_motion_hd.pipe.queue_length_packets = 50;
536 conf_motion_hd.pipe.loss_percent = 3;
537 conf_motion_hd.pipe.queue_delay_ms = 100;
538 conf_motion_hd.pipe.link_capacity_kbps = 2000;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200539 fixture->RunWithAnalyzer(conf_motion_hd);
sprangff19d352017-09-06 07:14:02 -0700540}
541
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200542TEST(FullStackTest, ConferenceMotionHd4TLModerateLimits) {
543 auto fixture = CreateVideoQualityTestFixture();
544 ParamsWithLogging conf_motion_hd;
sprangff19d352017-09-06 07:14:02 -0700545 conf_motion_hd.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100546 conf_motion_hd.video[0] = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000547 true, 1280, 720, 50, 30000,
548 3000000, 3000000, false, "VP8", 4,
Niels Möller6aa415e2018-06-07 11:14:13 +0200549 -1, 0, false, false, false, "ConferenceMotion_1280_720_50"};
sprangff19d352017-09-06 07:14:02 -0700550 conf_motion_hd.analyzer = {"conference_motion_hd_4tl_moderate_limits", 0.0,
551 0.0, kFullStackTestDurationSecs};
552 conf_motion_hd.pipe.queue_length_packets = 50;
553 conf_motion_hd.pipe.loss_percent = 3;
554 conf_motion_hd.pipe.queue_delay_ms = 100;
555 conf_motion_hd.pipe.link_capacity_kbps = 2000;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200556 fixture->RunWithAnalyzer(conf_motion_hd);
sprangff19d352017-09-06 07:14:02 -0700557}
558
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200559TEST(FullStackTest, ConferenceMotionHd3TLModerateLimitsAltTLPattern) {
560 auto fixture = CreateVideoQualityTestFixture();
sprangff19d352017-09-06 07:14:02 -0700561 test::ScopedFieldTrials field_trial("WebRTC-UseShortVP8TL3Pattern/Enabled/");
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200562 ParamsWithLogging conf_motion_hd;
sprangff19d352017-09-06 07:14:02 -0700563 conf_motion_hd.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100564 conf_motion_hd.video[0] = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000565 true, 1280, 720, 50, 30000,
566 3000000, 3000000, false, "VP8", 3,
Niels Möller6aa415e2018-06-07 11:14:13 +0200567 -1, 0, false, false, false, "ConferenceMotion_1280_720_50"};
sprangff19d352017-09-06 07:14:02 -0700568 conf_motion_hd.analyzer = {"conference_motion_hd_3tl_alt_moderate_limits",
569 0.0, 0.0, kFullStackTestDurationSecs};
570 conf_motion_hd.pipe.queue_length_packets = 50;
571 conf_motion_hd.pipe.loss_percent = 3;
572 conf_motion_hd.pipe.queue_delay_ms = 100;
573 conf_motion_hd.pipe.link_capacity_kbps = 2000;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200574 fixture->RunWithAnalyzer(conf_motion_hd);
sprangff19d352017-09-06 07:14:02 -0700575}
576
jianj390e64d2017-02-03 09:51:23 -0800577#if !defined(RTC_DISABLE_VP9)
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200578TEST(FullStackTest, ConferenceMotionHd2000kbps100msLimitedQueueVP9) {
579 auto fixture = CreateVideoQualityTestFixture();
580 ParamsWithLogging conf_motion_hd;
jianj390e64d2017-02-03 09:51:23 -0800581 conf_motion_hd.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100582 conf_motion_hd.video[0] = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000583 true, 1280, 720, 50, 30000,
584 3000000, 3000000, false, "VP9", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200585 0, 0, false, false, false, "ConferenceMotion_1280_720_50"};
jianj390e64d2017-02-03 09:51:23 -0800586 conf_motion_hd.analyzer = {
587 "conference_motion_hd_2000kbps_100ms_32pkts_queue_vp9", 0.0, 0.0,
588 kFullStackTestDurationSecs};
589 conf_motion_hd.pipe.queue_length_packets = 32;
590 conf_motion_hd.pipe.queue_delay_ms = 100;
591 conf_motion_hd.pipe.link_capacity_kbps = 2000;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200592 fixture->RunWithAnalyzer(conf_motion_hd);
jianj390e64d2017-02-03 09:51:23 -0800593}
594#endif
595
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200596TEST(FullStackTest, ScreenshareSlidesVP8_2TL) {
597 auto fixture = CreateVideoQualityTestFixture();
598 ParamsWithLogging screenshare;
minyue626bc952016-10-31 05:47:02 -0700599 screenshare.call.send_side_bwe = true;
Erik Språng28bb3912018-07-11 16:06:55 +0200600 screenshare.video[0] = {true, 1850, 1110, 5, 50000, 200000,
601 1000000, false, "VP8", 2, 1, 400000,
602 false, false, false, ""};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100603 screenshare.screenshare[0] = {true, false, 10};
minyue626bc952016-10-31 05:47:02 -0700604 screenshare.analyzer = {"screenshare_slides", 0.0, 0.0,
605 kFullStackTestDurationSecs};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200606 fixture->RunWithAnalyzer(screenshare);
Erik Språng6ee69aa2015-09-03 15:58:05 +0200607}
608
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200609TEST(FullStackTest, ScreenshareSlidesVP8_3TL_Simulcast) {
610 auto fixture = CreateVideoQualityTestFixture();
sprang89c4a7e2017-06-30 13:27:40 -0700611 test::ScopedFieldTrials field_trial(kScreenshareSimulcastExperiment);
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200612 ParamsWithLogging screenshare;
ilnikcb8c1462017-03-09 09:23:30 -0800613 screenshare.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100614 screenshare.screenshare[0] = {true, false, 10};
615 screenshare.video[0] = {true, 1850, 1110, 5, 800000,
616 2500000, 2500000, false, "VP8", 3,
Niels Möller6aa415e2018-06-07 11:14:13 +0200617 2, 400000, false, false, false, ""};
ilnikcb8c1462017-03-09 09:23:30 -0800618 screenshare.analyzer = {"screenshare_slides_simulcast", 0.0, 0.0,
619 kFullStackTestDurationSecs};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200620 ParamsWithLogging screenshare_params_high;
Erik Språng28bb3912018-07-11 16:06:55 +0200621 screenshare_params_high.video[0] = {true, 1850, 1110, 5, 400000, 1000000,
622 1000000, false, "VP8", 3, 0, 400000,
623 false, false, false, ""};
ilnikcb8c1462017-03-09 09:23:30 -0800624 VideoQualityTest::Params screenshare_params_low;
Erik Språng28bb3912018-07-11 16:06:55 +0200625 screenshare_params_low.video[0] = {true, 1850, 1110, 5, 50000, 200000,
626 1000000, false, "VP8", 2, 0, 400000,
627 false, false, false, ""};
ilnikcb8c1462017-03-09 09:23:30 -0800628
629 std::vector<VideoStream> streams = {
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200630 VideoQualityTest::DefaultVideoStream(screenshare_params_low, 0),
631 VideoQualityTest::DefaultVideoStream(screenshare_params_high, 0)};
Sergey Silkin57027362018-05-15 09:12:05 +0200632 screenshare.ss[0] = {
633 streams, 1, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
634 false};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200635 fixture->RunWithAnalyzer(screenshare);
ilnikcb8c1462017-03-09 09:23:30 -0800636}
637
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200638TEST(FullStackTest, ScreenshareSlidesVP8_2TL_Scroll) {
639 auto fixture = CreateVideoQualityTestFixture();
640 ParamsWithLogging config;
minyue626bc952016-10-31 05:47:02 -0700641 config.call.send_side_bwe = true;
Erik Språng28bb3912018-07-11 16:06:55 +0200642 config.video[0] = {true, 1850, 1110 / 2, 5, 50000, 200000,
643 1000000, false, "VP8", 2, 1, 400000,
644 false, false, false, ""};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100645 config.screenshare[0] = {true, false, 10, 2};
minyue626bc952016-10-31 05:47:02 -0700646 config.analyzer = {"screenshare_slides_scrolling", 0.0, 0.0,
647 kFullStackTestDurationSecs};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200648 fixture->RunWithAnalyzer(config);
ivica028cf482015-07-30 02:15:56 -0700649}
650
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200651TEST(FullStackTest, ScreenshareSlidesVP8_2TL_LossyNet) {
652 auto fixture = CreateVideoQualityTestFixture();
653 ParamsWithLogging screenshare;
minyue626bc952016-10-31 05:47:02 -0700654 screenshare.call.send_side_bwe = true;
Erik Språng28bb3912018-07-11 16:06:55 +0200655 screenshare.video[0] = {true, 1850, 1110, 5, 50000, 200000,
656 1000000, false, "VP8", 2, 1, 400000,
657 false, false, false, ""};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100658 screenshare.screenshare[0] = {true, false, 10};
minyue626bc952016-10-31 05:47:02 -0700659 screenshare.analyzer = {"screenshare_slides_lossy_net", 0.0, 0.0,
660 kFullStackTestDurationSecs};
sprangee37de32015-11-23 06:10:23 -0800661 screenshare.pipe.loss_percent = 5;
662 screenshare.pipe.queue_delay_ms = 200;
663 screenshare.pipe.link_capacity_kbps = 500;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200664 fixture->RunWithAnalyzer(screenshare);
sprangee37de32015-11-23 06:10:23 -0800665}
666
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200667TEST(FullStackTest, ScreenshareSlidesVP8_2TL_VeryLossyNet) {
668 auto fixture = CreateVideoQualityTestFixture();
669 ParamsWithLogging screenshare;
minyue626bc952016-10-31 05:47:02 -0700670 screenshare.call.send_side_bwe = true;
Erik Språng28bb3912018-07-11 16:06:55 +0200671 screenshare.video[0] = {true, 1850, 1110, 5, 50000, 200000,
672 1000000, false, "VP8", 2, 1, 400000,
673 false, false, false, ""};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100674 screenshare.screenshare[0] = {true, false, 10};
minyue626bc952016-10-31 05:47:02 -0700675 screenshare.analyzer = {"screenshare_slides_very_lossy", 0.0, 0.0,
676 kFullStackTestDurationSecs};
sprangee37de32015-11-23 06:10:23 -0800677 screenshare.pipe.loss_percent = 10;
678 screenshare.pipe.queue_delay_ms = 200;
679 screenshare.pipe.link_capacity_kbps = 500;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200680 fixture->RunWithAnalyzer(screenshare);
sprangee37de32015-11-23 06:10:23 -0800681}
682
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200683TEST(FullStackTest, ScreenshareSlidesVP8_2TL_LossyNetRestrictedQueue) {
684 auto fixture = CreateVideoQualityTestFixture();
685 ParamsWithLogging screenshare;
sprange566e172017-06-08 01:29:15 -0700686 screenshare.call.send_side_bwe = true;
Erik Språng28bb3912018-07-11 16:06:55 +0200687 screenshare.video[0] = {true, 1850, 1110, 5, 50000, 200000,
688 1000000, false, "VP8", 2, 1, 400000,
689 false, false, false, ""};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100690 screenshare.screenshare[0] = {true, false, 10};
sprange566e172017-06-08 01:29:15 -0700691 screenshare.analyzer = {"screenshare_slides_lossy_limited", 0.0, 0.0,
692 kFullStackTestDurationSecs};
693 screenshare.pipe.loss_percent = 5;
694 screenshare.pipe.link_capacity_kbps = 200;
695 screenshare.pipe.queue_length_packets = 30;
696
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200697 fixture->RunWithAnalyzer(screenshare);
sprange566e172017-06-08 01:29:15 -0700698}
699
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200700TEST(FullStackTest, ScreenshareSlidesVP8_2TL_ModeratelyRestricted) {
701 auto fixture = CreateVideoQualityTestFixture();
702 ParamsWithLogging screenshare;
sprang89c4a7e2017-06-30 13:27:40 -0700703 screenshare.call.send_side_bwe = true;
Erik Språng28bb3912018-07-11 16:06:55 +0200704 screenshare.video[0] = {true, 1850, 1110, 5, 50000, 200000,
705 1000000, false, "VP8", 2, 1, 400000,
706 false, false, false, ""};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100707 screenshare.screenshare[0] = {true, false, 10};
sprang89c4a7e2017-06-30 13:27:40 -0700708 screenshare.analyzer = {"screenshare_slides_moderately_restricted", 0.0, 0.0,
709 kFullStackTestDurationSecs};
710 screenshare.pipe.loss_percent = 1;
711 screenshare.pipe.link_capacity_kbps = 1200;
712 screenshare.pipe.queue_length_packets = 30;
713
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200714 fixture->RunWithAnalyzer(screenshare);
sprang89c4a7e2017-06-30 13:27:40 -0700715}
716
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200717const ParamsWithLogging::Video kSvcVp9Video = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000718 true, 1280, 720, 30, 800000,
719 2500000, 2500000, false, "VP9", 3,
Niels Möller6aa415e2018-06-07 11:14:13 +0200720 2, 400000, false, false, false, "ConferenceMotion_1280_720_50"};
ilnik566c43b2017-03-07 04:42:54 -0800721
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200722const ParamsWithLogging::Video kSimulcastVp8VideoHigh = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000723 true, 1280, 720, 30, 800000,
724 2500000, 2500000, false, "VP8", 3,
Niels Möller6aa415e2018-06-07 11:14:13 +0200725 2, 400000, false, false, false, "ConferenceMotion_1280_720_50"};
ilnik566c43b2017-03-07 04:42:54 -0800726
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200727const ParamsWithLogging::Video kSimulcastVp8VideoMedium = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000728 true, 640, 360, 30, 150000,
729 500000, 700000, false, "VP8", 3,
Niels Möller6aa415e2018-06-07 11:14:13 +0200730 2, 400000, false, false, false, "ConferenceMotion_1280_720_50"};
ilnik566c43b2017-03-07 04:42:54 -0800731
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200732const ParamsWithLogging::Video kSimulcastVp8VideoLow = {
Rasmus Brandt31027342017-09-29 13:48:12 +0000733 true, 320, 180, 30, 30000,
734 150000, 200000, false, "VP8", 3,
Niels Möller6aa415e2018-06-07 11:14:13 +0200735 2, 400000, false, false, false, "ConferenceMotion_1280_720_50"};
ilnik566c43b2017-03-07 04:42:54 -0800736
Peter Boström12996152016-05-14 02:03:18 +0200737#if !defined(RTC_DISABLE_VP9)
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200738TEST(FullStackTest, ScreenshareSlidesVP9_2SL) {
739 auto fixture = CreateVideoQualityTestFixture();
740 ParamsWithLogging screenshare;
minyue626bc952016-10-31 05:47:02 -0700741 screenshare.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100742 screenshare.video[0] = {true, 1850, 1110, 5, 50000,
743 200000, 2000000, false, "VP9", 1,
Niels Möller6aa415e2018-06-07 11:14:13 +0200744 0, 400000, false, false, false, ""};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100745 screenshare.screenshare[0] = {true, false, 10};
minyue626bc952016-10-31 05:47:02 -0700746 screenshare.analyzer = {"screenshare_slides_vp9_2sl", 0.0, 0.0,
747 kFullStackTestDurationSecs};
Sergey Silkin57027362018-05-15 09:12:05 +0200748 screenshare.ss[0] = {
749 std::vector<VideoStream>(), 0, 2, 1, InterLayerPredMode::kOn,
750 std::vector<SpatialLayer>(), false};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200751 fixture->RunWithAnalyzer(screenshare);
sprang@webrtc.org131bea82015-02-18 12:46:06 +0000752}
ilnik2a8c2f52017-02-15 02:23:28 -0800753
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200754TEST(FullStackTest, VP9SVC_3SL_High) {
755 auto fixture = CreateVideoQualityTestFixture();
756 ParamsWithLogging simulcast;
ilnik2a8c2f52017-02-15 02:23:28 -0800757 simulcast.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100758 simulcast.video[0] = kSvcVp9Video;
ilnik2a8c2f52017-02-15 02:23:28 -0800759 simulcast.analyzer = {"vp9svc_3sl_high", 0.0, 0.0,
760 kFullStackTestDurationSecs};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200761
Sergey Silkin57027362018-05-15 09:12:05 +0200762 simulcast.ss[0] = {
763 std::vector<VideoStream>(), 0, 3, 2, InterLayerPredMode::kOn,
764 std::vector<SpatialLayer>(), false};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200765 fixture->RunWithAnalyzer(simulcast);
ilnik2a8c2f52017-02-15 02:23:28 -0800766}
767
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200768TEST(FullStackTest, VP9SVC_3SL_Medium) {
769 auto fixture = CreateVideoQualityTestFixture();
770 ParamsWithLogging simulcast;
ilnik2a8c2f52017-02-15 02:23:28 -0800771 simulcast.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100772 simulcast.video[0] = kSvcVp9Video;
ilnik2a8c2f52017-02-15 02:23:28 -0800773 simulcast.analyzer = {"vp9svc_3sl_medium", 0.0, 0.0,
774 kFullStackTestDurationSecs};
Sergey Silkin57027362018-05-15 09:12:05 +0200775 simulcast.ss[0] = {
776 std::vector<VideoStream>(), 0, 3, 1, InterLayerPredMode::kOn,
777 std::vector<SpatialLayer>(), false};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200778 fixture->RunWithAnalyzer(simulcast);
ilnik2a8c2f52017-02-15 02:23:28 -0800779}
780
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200781TEST(FullStackTest, VP9SVC_3SL_Low) {
782 auto fixture = CreateVideoQualityTestFixture();
783 ParamsWithLogging simulcast;
ilnik2a8c2f52017-02-15 02:23:28 -0800784 simulcast.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100785 simulcast.video[0] = kSvcVp9Video;
ilnik2a8c2f52017-02-15 02:23:28 -0800786 simulcast.analyzer = {"vp9svc_3sl_low", 0.0, 0.0, kFullStackTestDurationSecs};
Sergey Silkin57027362018-05-15 09:12:05 +0200787 simulcast.ss[0] = {
788 std::vector<VideoStream>(), 0, 3, 0, InterLayerPredMode::kOn,
789 std::vector<SpatialLayer>(), false};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200790 fixture->RunWithAnalyzer(simulcast);
ilnik2a8c2f52017-02-15 02:23:28 -0800791}
Sergey Silkin0643fd62018-05-17 12:50:53 +0200792
Ilya Nikolaevskiy14ac7932018-07-12 10:39:41 +0200793// bugs.webrtc.org/9506
794#if !defined(WEBRTC_MAC)
795
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200796TEST(FullStackTest, VP9KSVC_3SL_High) {
797 auto fixture = CreateVideoQualityTestFixture();
798 ParamsWithLogging simulcast;
Sergey Silkin0643fd62018-05-17 12:50:53 +0200799 simulcast.call.send_side_bwe = true;
800 simulcast.video[0] = kSvcVp9Video;
801 simulcast.analyzer = {"vp9ksvc_3sl_high", 0.0, 0.0,
802 kFullStackTestDurationSecs};
803 simulcast.ss[0] = {
804 std::vector<VideoStream>(), 0, 3, 2, InterLayerPredMode::kOnKeyPic,
805 std::vector<SpatialLayer>(), false};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200806 fixture->RunWithAnalyzer(simulcast);
Sergey Silkin0643fd62018-05-17 12:50:53 +0200807}
808
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200809TEST(FullStackTest, VP9KSVC_3SL_Medium) {
810 auto fixture = CreateVideoQualityTestFixture();
811 ParamsWithLogging simulcast;
Sergey Silkin0643fd62018-05-17 12:50:53 +0200812 simulcast.call.send_side_bwe = true;
813 simulcast.video[0] = kSvcVp9Video;
814 simulcast.analyzer = {"vp9ksvc_3sl_medium", 0.0, 0.0,
815 kFullStackTestDurationSecs};
816 simulcast.ss[0] = {
817 std::vector<VideoStream>(), 0, 3, 1, InterLayerPredMode::kOnKeyPic,
818 std::vector<SpatialLayer>(), false};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200819 fixture->RunWithAnalyzer(simulcast);
Sergey Silkin0643fd62018-05-17 12:50:53 +0200820}
821
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200822TEST(FullStackTest, VP9KSVC_3SL_Low) {
823 auto fixture = CreateVideoQualityTestFixture();
824 ParamsWithLogging simulcast;
Sergey Silkin0643fd62018-05-17 12:50:53 +0200825 simulcast.call.send_side_bwe = true;
826 simulcast.video[0] = kSvcVp9Video;
827 simulcast.analyzer = {"vp9ksvc_3sl_low", 0.0, 0.0,
828 kFullStackTestDurationSecs};
829 simulcast.ss[0] = {
830 std::vector<VideoStream>(), 0, 3, 0, InterLayerPredMode::kOnKeyPic,
831 std::vector<SpatialLayer>(), false};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200832 fixture->RunWithAnalyzer(simulcast);
Sergey Silkin0643fd62018-05-17 12:50:53 +0200833}
“Michael277a6562018-06-01 14:09:19 -0500834
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200835TEST(FullStackTest, VP9KSVC_3SL_Medium_Network_Restricted) {
836 auto fixture = CreateVideoQualityTestFixture();
“Michael277a6562018-06-01 14:09:19 -0500837 VideoQualityTest::Params simulcast;
838 simulcast.call.send_side_bwe = true;
839 simulcast.video[0] = kSvcVp9Video;
840 simulcast.analyzer = {"vp9ksvc_3sl_medium_network_restricted", 0.0, 0.0,
841 kFullStackTestDurationSecs};
842 simulcast.ss[0] = {
843 std::vector<VideoStream>(), 0, 3, 1, InterLayerPredMode::kOnKeyPic,
844 std::vector<SpatialLayer>(), false};
845 simulcast.pipe.link_capacity_kbps = 1000;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200846 fixture->RunWithAnalyzer(simulcast);
“Michael277a6562018-06-01 14:09:19 -0500847}
Ilya Nikolaevskiy14ac7932018-07-12 10:39:41 +0200848#endif // !defined(WEBRTC_MAC)
“Michael277a6562018-06-01 14:09:19 -0500849
Peter Boström12996152016-05-14 02:03:18 +0200850#endif // !defined(RTC_DISABLE_VP9)
brandtr93c5d032016-11-30 07:50:07 -0800851
ilnik6b826ef2017-06-16 06:53:48 -0700852// Android bots can't handle FullHD, so disable the test.
Sam Zackrissonc3d8bb12018-05-02 10:22:32 +0200853// TODO(bugs.webrtc.org/9220): Investigate source of flakiness on Mac.
854#if defined(WEBRTC_ANDROID) || defined(WEBRTC_MAC)
ilnik6b826ef2017-06-16 06:53:48 -0700855#define MAYBE_SimulcastFullHdOveruse DISABLED_SimulcastFullHdOveruse
856#else
857#define MAYBE_SimulcastFullHdOveruse SimulcastFullHdOveruse
858#endif
859
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200860TEST(FullStackTest, MAYBE_SimulcastFullHdOveruse) {
861 auto fixture = CreateVideoQualityTestFixture();
862 ParamsWithLogging simulcast;
ilnik6b826ef2017-06-16 06:53:48 -0700863 simulcast.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100864 simulcast.video[0] = {true, 1920, 1080, 30, 800000,
865 2500000, 2500000, false, "VP8", 3,
Niels Möller6aa415e2018-06-07 11:14:13 +0200866 2, 400000, false, false, false, "Generator"};
ilnik6b826ef2017-06-16 06:53:48 -0700867 simulcast.analyzer = {"simulcast_HD_high", 0.0, 0.0,
868 kFullStackTestDurationSecs};
869 simulcast.pipe.loss_percent = 0;
870 simulcast.pipe.queue_delay_ms = 100;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200871 std::vector<VideoStream> streams = {
872 VideoQualityTest::DefaultVideoStream(simulcast, 0),
873 VideoQualityTest::DefaultVideoStream(simulcast, 0),
874 VideoQualityTest::DefaultVideoStream(simulcast, 0)
875 };
Sergey Silkin57027362018-05-15 09:12:05 +0200876 simulcast.ss[0] = {
877 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
878 true};
ilnik6b826ef2017-06-16 06:53:48 -0700879 webrtc::test::ScopedFieldTrials override_trials(
880 "WebRTC-ForceSimulatedOveruseIntervalMs/1000-50000-300/");
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200881 fixture->RunWithAnalyzer(simulcast);
ilnik6b826ef2017-06-16 06:53:48 -0700882}
883
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200884TEST(FullStackTest, SimulcastVP8_3SL_High) {
885 auto fixture = CreateVideoQualityTestFixture();
886 ParamsWithLogging simulcast;
ilnik3dd5ad92017-02-09 04:58:53 -0800887 simulcast.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100888 simulcast.video[0] = kSimulcastVp8VideoHigh;
ilnik2a8c2f52017-02-15 02:23:28 -0800889 simulcast.analyzer = {"simulcast_vp8_3sl_high", 0.0, 0.0,
ilnik3dd5ad92017-02-09 04:58:53 -0800890 kFullStackTestDurationSecs};
891 simulcast.pipe.loss_percent = 0;
892 simulcast.pipe.queue_delay_ms = 100;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200893 ParamsWithLogging video_params_high;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100894 video_params_high.video[0] = kSimulcastVp8VideoHigh;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200895 ParamsWithLogging video_params_medium;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100896 video_params_medium.video[0] = kSimulcastVp8VideoMedium;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200897 ParamsWithLogging video_params_low;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100898 video_params_low.video[0] = kSimulcastVp8VideoLow;
ilnik3dd5ad92017-02-09 04:58:53 -0800899
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100900 std::vector<VideoStream> streams = {
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200901 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
902 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
903 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
Sergey Silkin57027362018-05-15 09:12:05 +0200904 simulcast.ss[0] = {
905 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
906 false};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200907 fixture->RunWithAnalyzer(simulcast);
ilnik3dd5ad92017-02-09 04:58:53 -0800908}
909
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200910TEST(FullStackTest, SimulcastVP8_3SL_Medium) {
911 auto fixture = CreateVideoQualityTestFixture();
912 ParamsWithLogging simulcast;
ilnik3dd5ad92017-02-09 04:58:53 -0800913 simulcast.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100914 simulcast.video[0] = kSimulcastVp8VideoHigh;
ilnik2a8c2f52017-02-15 02:23:28 -0800915 simulcast.analyzer = {"simulcast_vp8_3sl_medium", 0.0, 0.0,
ilnik3dd5ad92017-02-09 04:58:53 -0800916 kFullStackTestDurationSecs};
917 simulcast.pipe.loss_percent = 0;
918 simulcast.pipe.queue_delay_ms = 100;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200919 ParamsWithLogging video_params_high;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100920 video_params_high.video[0] = kSimulcastVp8VideoHigh;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200921 ParamsWithLogging video_params_medium;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100922 video_params_medium.video[0] = kSimulcastVp8VideoMedium;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200923 ParamsWithLogging video_params_low;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100924 video_params_low.video[0] = kSimulcastVp8VideoLow;
ilnik3dd5ad92017-02-09 04:58:53 -0800925
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100926 std::vector<VideoStream> streams = {
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200927 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
928 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
929 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
Sergey Silkin57027362018-05-15 09:12:05 +0200930 simulcast.ss[0] = {
931 streams, 1, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
932 false};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200933 fixture->RunWithAnalyzer(simulcast);
ilnik3dd5ad92017-02-09 04:58:53 -0800934}
935
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200936TEST(FullStackTest, SimulcastVP8_3SL_Low) {
937 auto fixture = CreateVideoQualityTestFixture();
938 ParamsWithLogging simulcast;
ilnik3dd5ad92017-02-09 04:58:53 -0800939 simulcast.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100940 simulcast.video[0] = kSimulcastVp8VideoHigh;
ilnik2a8c2f52017-02-15 02:23:28 -0800941 simulcast.analyzer = {"simulcast_vp8_3sl_low", 0.0, 0.0,
ilnik3dd5ad92017-02-09 04:58:53 -0800942 kFullStackTestDurationSecs};
943 simulcast.pipe.loss_percent = 0;
944 simulcast.pipe.queue_delay_ms = 100;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200945 ParamsWithLogging video_params_high;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100946 video_params_high.video[0] = kSimulcastVp8VideoHigh;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200947 ParamsWithLogging video_params_medium;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100948 video_params_medium.video[0] = kSimulcastVp8VideoMedium;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200949 ParamsWithLogging video_params_low;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100950 video_params_low.video[0] = kSimulcastVp8VideoLow;
ilnik3dd5ad92017-02-09 04:58:53 -0800951
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100952 std::vector<VideoStream> streams = {
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200953 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
954 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
955 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
Sergey Silkin57027362018-05-15 09:12:05 +0200956 simulcast.ss[0] = {
957 streams, 0, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
958 false};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200959 fixture->RunWithAnalyzer(simulcast);
ilnik3dd5ad92017-02-09 04:58:53 -0800960}
961
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200962TEST(FullStackTest, LargeRoomVP8_5thumb) {
963 auto fixture = CreateVideoQualityTestFixture();
964 ParamsWithLogging large_room;
ilnika014cc52017-03-07 04:21:04 -0800965 large_room.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100966 large_room.video[0] = kSimulcastVp8VideoHigh;
ilnika014cc52017-03-07 04:21:04 -0800967 large_room.analyzer = {"largeroom_5thumb", 0.0, 0.0,
968 kFullStackTestDurationSecs};
969 large_room.pipe.loss_percent = 0;
970 large_room.pipe.queue_delay_ms = 100;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200971 ParamsWithLogging video_params_high;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100972 video_params_high.video[0] = kSimulcastVp8VideoHigh;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200973 ParamsWithLogging video_params_medium;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100974 video_params_medium.video[0] = kSimulcastVp8VideoMedium;
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200975 ParamsWithLogging video_params_low;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100976 video_params_low.video[0] = kSimulcastVp8VideoLow;
ilnika014cc52017-03-07 04:21:04 -0800977
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +0100978 std::vector<VideoStream> streams = {
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200979 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
980 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
981 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
ilnik98436952017-07-13 00:47:03 -0700982 large_room.call.num_thumbnails = 5;
Sergey Silkin57027362018-05-15 09:12:05 +0200983 large_room.ss[0] = {
984 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
985 false};
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200986 fixture->RunWithAnalyzer(large_room);
ilnika014cc52017-03-07 04:21:04 -0800987}
988
oprypin743117f2017-09-15 05:24:24 -0700989#if defined(WEBRTC_ANDROID) || defined(WEBRTC_IOS)
990// Fails on mobile devices:
ilnikf89a7382017-03-07 06:15:27 -0800991// https://bugs.chromium.org/p/webrtc/issues/detail?id=7301
992#define MAYBE_LargeRoomVP8_50thumb DISABLED_LargeRoomVP8_50thumb
ilnik3ae7c252017-03-08 01:17:35 -0800993#define MAYBE_LargeRoomVP8_15thumb DISABLED_LargeRoomVP8_15thumb
ilnikf89a7382017-03-07 06:15:27 -0800994#else
995#define MAYBE_LargeRoomVP8_50thumb LargeRoomVP8_50thumb
ilnik3ae7c252017-03-08 01:17:35 -0800996#define MAYBE_LargeRoomVP8_15thumb LargeRoomVP8_15thumb
ilnikf89a7382017-03-07 06:15:27 -0800997#endif
998
Patrik Höglundb6b29e02018-06-21 16:58:01 +0200999TEST(FullStackTest, MAYBE_LargeRoomVP8_15thumb) {
1000 auto fixture = CreateVideoQualityTestFixture();
1001 ParamsWithLogging large_room;
ilnika014cc52017-03-07 04:21:04 -08001002 large_room.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001003 large_room.video[0] = kSimulcastVp8VideoHigh;
ilnika014cc52017-03-07 04:21:04 -08001004 large_room.analyzer = {"largeroom_15thumb", 0.0, 0.0,
1005 kFullStackTestDurationSecs};
1006 large_room.pipe.loss_percent = 0;
1007 large_room.pipe.queue_delay_ms = 100;
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001008 ParamsWithLogging video_params_high;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001009 video_params_high.video[0] = kSimulcastVp8VideoHigh;
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001010 ParamsWithLogging video_params_medium;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001011 video_params_medium.video[0] = kSimulcastVp8VideoMedium;
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001012 ParamsWithLogging video_params_low;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001013 video_params_low.video[0] = kSimulcastVp8VideoLow;
ilnika014cc52017-03-07 04:21:04 -08001014
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001015 std::vector<VideoStream> streams = {
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001016 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
1017 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
1018 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
ilnik98436952017-07-13 00:47:03 -07001019 large_room.call.num_thumbnails = 15;
Sergey Silkin57027362018-05-15 09:12:05 +02001020 large_room.ss[0] = {
1021 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1022 false};
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001023 fixture->RunWithAnalyzer(large_room);
ilnika014cc52017-03-07 04:21:04 -08001024}
1025
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001026TEST(FullStackTest, MAYBE_LargeRoomVP8_50thumb) {
1027 auto fixture = CreateVideoQualityTestFixture();
1028 ParamsWithLogging large_room;
ilnika014cc52017-03-07 04:21:04 -08001029 large_room.call.send_side_bwe = true;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001030 large_room.video[0] = kSimulcastVp8VideoHigh;
ilnika014cc52017-03-07 04:21:04 -08001031 large_room.analyzer = {"largeroom_50thumb", 0.0, 0.0,
1032 kFullStackTestDurationSecs};
1033 large_room.pipe.loss_percent = 0;
1034 large_room.pipe.queue_delay_ms = 100;
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001035 ParamsWithLogging video_params_high;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001036 video_params_high.video[0] = kSimulcastVp8VideoHigh;
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001037 ParamsWithLogging video_params_medium;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001038 video_params_medium.video[0] = kSimulcastVp8VideoMedium;
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001039 ParamsWithLogging video_params_low;
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001040 video_params_low.video[0] = kSimulcastVp8VideoLow;
ilnika014cc52017-03-07 04:21:04 -08001041
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001042 std::vector<VideoStream> streams = {
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001043 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
1044 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
1045 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
ilnik98436952017-07-13 00:47:03 -07001046 large_room.call.num_thumbnails = 50;
Sergey Silkin57027362018-05-15 09:12:05 +02001047 large_room.ss[0] = {
1048 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1049 false};
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001050 fixture->RunWithAnalyzer(large_room);
ilnika014cc52017-03-07 04:21:04 -08001051}
1052
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001053class DualStreamsTest : public ::testing::TestWithParam<int> {};
Ilya Nikolaevskiy255d1cd2017-12-21 18:02:59 +01001054
1055// Disable dual video test on mobile device becuase it's too heavy.
1056#if !defined(WEBRTC_ANDROID) && !defined(WEBRTC_IOS)
1057TEST_P(DualStreamsTest,
1058 ModeratelyRestricted_SlidesVp8_3TL_Simulcast_Video_Simulcast_High) {
1059 test::ScopedFieldTrials field_trial(
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001060 std::string(kScreenshareSimulcastExperiment) +
Patrik Höglundb6b29e02018-06-21 16:58:01 +02001061 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(
1125 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