blob: 3eab854d75dd75656b0d3fa9895f89a2b4a7d9e2 [file] [log] [blame]
Artem Titov137f6c82019-05-17 10:51:15 +02001/*
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 <memory>
11#include <string>
12#include <utility>
13#include <vector>
14
Andrey Logvin435fb9a2020-05-08 08:02:49 +000015#include "api/media_stream_interface.h"
Artem Titov137f6c82019-05-17 10:51:15 +020016#include "api/test/create_network_emulation_manager.h"
Andrey Logvinc0644672020-05-05 10:33:01 +000017#include "api/test/create_peer_connection_quality_test_frame_generator.h"
Artem Titov137f6c82019-05-17 10:51:15 +020018#include "api/test/create_peerconnection_quality_test_fixture.h"
Andrey Logvinc0644672020-05-05 10:33:01 +000019#include "api/test/frame_generator_interface.h"
Artem Titovc45f4e42022-09-24 16:56:07 +020020#include "api/test/metrics/global_metrics_logger_and_exporter.h"
Artem Titov137f6c82019-05-17 10:51:15 +020021#include "api/test/network_emulation_manager.h"
22#include "api/test/peerconnection_quality_test_fixture.h"
23#include "api/test/simulated_network.h"
Artem Titov1ff3c582020-07-01 15:20:37 +020024#include "api/test/time_controller.h"
Johannes Kronc3fcee72021-04-19 09:09:26 +020025#include "api/video_codecs/vp9_profile.h"
Artem Titov137f6c82019-05-17 10:51:15 +020026#include "call/simulated_network.h"
Artem Titov137f6c82019-05-17 10:51:15 +020027#include "modules/video_coding/codecs/vp9/include/vp9.h"
28#include "system_wrappers/include/field_trial.h"
29#include "test/field_trial.h"
30#include "test/gtest.h"
31#include "test/pc/e2e/network_quality_metrics_reporter.h"
32#include "test/testsupport/file_utils.h"
33
34namespace webrtc {
35
Florent Castellibfdb9572022-08-29 14:19:46 +020036using EmulatedSFUConfig =
37 webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture::EmulatedSFUConfig;
Artem Titov137f6c82019-05-17 10:51:15 +020038using PeerConfigurer =
39 webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture::PeerConfigurer;
40using RunParams = webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture::RunParams;
41using VideoConfig =
42 webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture::VideoConfig;
43using AudioConfig =
44 webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture::AudioConfig;
Artem Titov39483c62019-07-19 17:03:52 +020045using ScreenShareConfig =
46 webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture::ScreenShareConfig;
47using VideoSimulcastConfig =
48 webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture::VideoSimulcastConfig;
Artem Titovcdd73e02020-01-23 14:09:09 +010049using VideoCodecConfig =
50 webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture::VideoCodecConfig;
Artem Titov137f6c82019-05-17 10:51:15 +020051
52namespace {
53
54constexpr int kTestDurationSec = 45;
Artem Titov137f6c82019-05-17 10:51:15 +020055
56EmulatedNetworkNode* CreateEmulatedNodeWithConfig(
57 NetworkEmulationManager* emulation,
58 const BuiltInNetworkBehaviorConfig& config) {
59 return emulation->CreateEmulatedNode(
Mirko Bonadei317a1f02019-09-17 17:06:18 +020060 std::make_unique<SimulatedNetwork>(config));
Artem Titov137f6c82019-05-17 10:51:15 +020061}
62
63std::pair<EmulatedNetworkManagerInterface*, EmulatedNetworkManagerInterface*>
64CreateTwoNetworkLinks(NetworkEmulationManager* emulation,
65 const BuiltInNetworkBehaviorConfig& config) {
66 auto* alice_node = CreateEmulatedNodeWithConfig(emulation, config);
67 auto* bob_node = CreateEmulatedNodeWithConfig(emulation, config);
68
69 auto* alice_endpoint = emulation->CreateEndpoint(EmulatedEndpointConfig());
70 auto* bob_endpoint = emulation->CreateEndpoint(EmulatedEndpointConfig());
71
72 emulation->CreateRoute(alice_endpoint, {alice_node}, bob_endpoint);
73 emulation->CreateRoute(bob_endpoint, {bob_node}, alice_endpoint);
74
75 return {
76 emulation->CreateEmulatedNetworkManagerInterface({alice_endpoint}),
77 emulation->CreateEmulatedNetworkManagerInterface({bob_endpoint}),
78 };
79}
80
81std::unique_ptr<webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture>
82CreateTestFixture(const std::string& test_case_name,
Artem Titov1ff3c582020-07-01 15:20:37 +020083 TimeController& time_controller,
Artem Titov137f6c82019-05-17 10:51:15 +020084 std::pair<EmulatedNetworkManagerInterface*,
85 EmulatedNetworkManagerInterface*> network_links,
86 rtc::FunctionView<void(PeerConfigurer*)> alice_configurer,
87 rtc::FunctionView<void(PeerConfigurer*)> bob_configurer) {
88 auto fixture = webrtc_pc_e2e::CreatePeerConnectionE2EQualityTestFixture(
Artem Titov1ff3c582020-07-01 15:20:37 +020089 test_case_name, time_controller, /*audio_quality_analyzer=*/nullptr,
Artem Titov137f6c82019-05-17 10:51:15 +020090 /*video_quality_analyzer=*/nullptr);
Niels Möllerf47a7242021-11-22 16:07:35 +010091 fixture->AddPeer(network_links.first->network_dependencies(),
92 alice_configurer);
93 fixture->AddPeer(network_links.second->network_dependencies(),
94 bob_configurer);
Artem Titov137f6c82019-05-17 10:51:15 +020095 fixture->AddQualityMetricsReporter(
Mirko Bonadei317a1f02019-09-17 17:06:18 +020096 std::make_unique<webrtc_pc_e2e::NetworkQualityMetricsReporter>(
Artem Titovc45f4e42022-09-24 16:56:07 +020097 network_links.first, network_links.second,
98 test::GetGlobalMetricsLogger()));
Artem Titov137f6c82019-05-17 10:51:15 +020099 return fixture;
100}
101
102// Takes the current active field trials set, and appends some new trials.
103std::string AppendFieldTrials(std::string new_trial_string) {
104 return std::string(field_trial::GetFieldTrialString()) + new_trial_string;
105}
106
107std::string ClipNameToClipPath(const char* clip_name) {
108 return test::ResourcePath(clip_name, "yuv");
109}
110
111} // namespace
112
Artem Titov137f6c82019-05-17 10:51:15 +0200113#if defined(RTC_ENABLE_VP9)
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200114TEST(PCFullStackTest, Pc_Foreman_Cif_Net_Delay_0_0_Plr_0_VP9) {
Artem Titov137f6c82019-05-17 10:51:15 +0200115 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
116 CreateNetworkEmulationManager();
117 auto fixture = CreateTestFixture(
118 "pc_foreman_cif_net_delay_0_0_plr_0_VP9",
Artem Titov1ff3c582020-07-01 15:20:37 +0200119 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200120 CreateTwoNetworkLinks(network_emulation_manager.get(),
121 BuiltInNetworkBehaviorConfig()),
122 [](PeerConfigurer* alice) {
123 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200124 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000125 auto frame_generator = CreateFromYuvFileFrameGenerator(
126 video, ClipNameToClipPath("foreman_cif"));
127 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200128 alice->SetVideoCodecs({VideoCodecConfig(
129 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
130 {kVP9FmtpProfileId,
131 VP9ProfileToString(VP9Profile::kProfile0)}})});
Artem Titov137f6c82019-05-17 10:51:15 +0200132 },
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200133 [](PeerConfigurer* bob) {
134 bob->SetVideoCodecs({VideoCodecConfig(
135 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
136 {kVP9FmtpProfileId,
137 VP9ProfileToString(VP9Profile::kProfile0)}})});
138 });
Artem Titovb92d3e62022-02-15 18:46:21 +0100139 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200140}
141
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200142TEST(PCGenericDescriptorTest,
143 Pc_Foreman_Cif_Delay_50_0_Plr_5_VP9_Generic_Descriptor) {
Artem Titov137f6c82019-05-17 10:51:15 +0200144 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
145 CreateNetworkEmulationManager();
146 BuiltInNetworkBehaviorConfig config;
147 config.loss_percent = 5;
148 config.queue_delay_ms = 50;
149 auto fixture = CreateTestFixture(
Danil Chapovalov636865e2020-06-03 14:11:26 +0200150 "pc_foreman_cif_delay_50_0_plr_5_VP9_generic_descriptor",
Artem Titov1ff3c582020-07-01 15:20:37 +0200151 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200152 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
153 [](PeerConfigurer* alice) {
154 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200155 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000156 auto frame_generator = CreateFromYuvFileFrameGenerator(
157 video, ClipNameToClipPath("foreman_cif"));
158 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200159 alice->SetVideoCodecs({VideoCodecConfig(
160 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
161 {kVP9FmtpProfileId,
162 VP9ProfileToString(VP9Profile::kProfile0)}})});
Artem Titov137f6c82019-05-17 10:51:15 +0200163 },
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200164 [](PeerConfigurer* bob) {
165 bob->SetVideoCodecs({VideoCodecConfig(
166 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
167 {kVP9FmtpProfileId,
168 VP9ProfileToString(VP9Profile::kProfile0)}})});
169 });
Artem Titovb92d3e62022-02-15 18:46:21 +0100170 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200171}
172
Artem Titove731a2e2019-07-02 10:08:17 +0200173// VP9 2nd profile isn't supported on android arm and arm 64.
Artem Titovcecee992019-07-03 11:55:28 +0200174#if (defined(WEBRTC_ANDROID) && \
175 (defined(WEBRTC_ARCH_ARM64) || defined(WEBRTC_ARCH_ARM))) || \
176 (defined(WEBRTC_IOS) && defined(WEBRTC_ARCH_ARM64))
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200177#define MAYBE_Pc_Generator_Net_Delay_0_0_Plr_0_VP9Profile2 \
178 DISABLED_Pc_Generator_Net_Delay_0_0_Plr_0_VP9Profile2
Artem Titove731a2e2019-07-02 10:08:17 +0200179#else
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200180#define MAYBE_Pc_Generator_Net_Delay_0_0_Plr_0_VP9Profile2 \
181 Pc_Generator_Net_Delay_0_0_Plr_0_VP9Profile2
Artem Titove731a2e2019-07-02 10:08:17 +0200182#endif
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200183TEST(PCFullStackTest, MAYBE_Pc_Generator_Net_Delay_0_0_Plr_0_VP9Profile2) {
Artem Titov137f6c82019-05-17 10:51:15 +0200184 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
185 CreateNetworkEmulationManager();
186 auto fixture = CreateTestFixture(
187 "pc_generator_net_delay_0_0_plr_0_VP9Profile2",
Artem Titov1ff3c582020-07-01 15:20:37 +0200188 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200189 CreateTwoNetworkLinks(network_emulation_manager.get(),
190 BuiltInNetworkBehaviorConfig()),
191 [](PeerConfigurer* alice) {
192 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200193 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000194 auto frame_generator = CreateSquareFrameGenerator(
195 video, test::FrameGeneratorInterface::OutputType::kI010);
196 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200197 alice->SetVideoCodecs({VideoCodecConfig(
198 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
199 {kVP9FmtpProfileId,
200 VP9ProfileToString(VP9Profile::kProfile2)}})});
Artem Titov137f6c82019-05-17 10:51:15 +0200201 },
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200202 [](PeerConfigurer* bob) {
203 bob->SetVideoCodecs({VideoCodecConfig(
204 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
205 {kVP9FmtpProfileId,
206 VP9ProfileToString(VP9Profile::kProfile2)}})});
207 });
Artem Titovb92d3e62022-02-15 18:46:21 +0100208 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200209}
210
211/*
212// TODO(bugs.webrtc.org/10639) migrate commented out test, when required
213// functionality will be supported in PeerConnection level framework.
214TEST(PCFullStackTest, ForemanCifWithoutPacketLossMultiplexI420Frame) {
215 auto fixture = CreateVideoQualityTestFixture();
216 ParamsWithLogging foreman_cif;
217 foreman_cif.call.send_side_bwe = true;
218 foreman_cif.video[0] = {
219 true, 352, 288, 30,
220 700000, 700000, 700000, false,
221 "multiplex", 1, 0, 0,
222 false, false, false, ClipNameToClipPath("foreman_cif")};
223 foreman_cif.analyzer = {"foreman_cif_net_delay_0_0_plr_0_Multiplex", 0.0, 0.0,
224 kTestDurationSec};
225 fixture->RunWithAnalyzer(foreman_cif);
226}
227
228TEST(PCFullStackTest, GeneratorWithoutPacketLossMultiplexI420AFrame) {
229 auto fixture = CreateVideoQualityTestFixture();
230
231 ParamsWithLogging generator;
232 generator.call.send_side_bwe = true;
233 generator.video[0] = {
234 true, 352, 288, 30, 700000, 700000, 700000, false,
235 "multiplex", 1, 0, 0, false, false, false, "GeneratorI420A"};
236 generator.analyzer = {"generator_net_delay_0_0_plr_0_Multiplex", 0.0, 0.0,
237 kTestDurationSec};
238 fixture->RunWithAnalyzer(generator);
239}
240*/
241#endif // defined(RTC_ENABLE_VP9)
242
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200243TEST(PCFullStackTest, Pc_Net_Delay_0_0_Plr_0) {
Artem Titov137f6c82019-05-17 10:51:15 +0200244 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
245 CreateNetworkEmulationManager();
246 auto fixture = CreateTestFixture(
Artem Titov1ff3c582020-07-01 15:20:37 +0200247 "pc_net_delay_0_0_plr_0", *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200248 CreateTwoNetworkLinks(network_emulation_manager.get(),
249 BuiltInNetworkBehaviorConfig()),
250 [](PeerConfigurer* alice) {
251 VideoConfig video(176, 144, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200252 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000253 auto frame_generator = CreateFromYuvFileFrameGenerator(
254 video, ClipNameToClipPath("paris_qcif"));
255 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200256 },
257 [](PeerConfigurer* bob) {});
Artem Titovb92d3e62022-02-15 18:46:21 +0100258 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200259}
260
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200261TEST(PCGenericDescriptorTest,
262 Pc_Foreman_Cif_Net_Delay_0_0_Plr_0_Generic_Descriptor) {
Artem Titov137f6c82019-05-17 10:51:15 +0200263 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
264 CreateNetworkEmulationManager();
265 auto fixture = CreateTestFixture(
Danil Chapovalov636865e2020-06-03 14:11:26 +0200266 "pc_foreman_cif_net_delay_0_0_plr_0_generic_descriptor",
Artem Titov1ff3c582020-07-01 15:20:37 +0200267 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200268 CreateTwoNetworkLinks(network_emulation_manager.get(),
269 BuiltInNetworkBehaviorConfig()),
270 [](PeerConfigurer* alice) {
271 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200272 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000273 auto frame_generator = CreateFromYuvFileFrameGenerator(
274 video, ClipNameToClipPath("foreman_cif"));
275 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200276 },
277 [](PeerConfigurer* bob) {});
Artem Titovb92d3e62022-02-15 18:46:21 +0100278 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200279}
280
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200281TEST(PCGenericDescriptorTest,
Jeremy Leconte4100d552020-09-11 18:02:36 +0200282 Pc_Foreman_Cif_30kbps_Net_Delay_0_0_Plr_0_Generic_Descriptor) {
Artem Titov137f6c82019-05-17 10:51:15 +0200283 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
284 CreateNetworkEmulationManager();
285 BuiltInNetworkBehaviorConfig config;
Artem Titov137f6c82019-05-17 10:51:15 +0200286 auto fixture = CreateTestFixture(
Danil Chapovalov636865e2020-06-03 14:11:26 +0200287 "pc_foreman_cif_30kbps_net_delay_0_0_plr_0_generic_descriptor",
Artem Titov1ff3c582020-07-01 15:20:37 +0200288 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200289 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
290 [](PeerConfigurer* alice) {
291 VideoConfig video(352, 288, 10);
Artem Titov137f6c82019-05-17 10:51:15 +0200292 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000293 auto frame_generator = CreateFromYuvFileFrameGenerator(
294 video, ClipNameToClipPath("foreman_cif"));
295 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov85a9d912019-05-29 14:36:50 +0200296
Niels Möller29d59a12020-06-22 14:48:10 +0200297 BitrateSettings bitrate_settings;
298 bitrate_settings.min_bitrate_bps = 30000;
299 bitrate_settings.start_bitrate_bps = 30000;
300 bitrate_settings.max_bitrate_bps = 30000;
301 alice->SetBitrateSettings(bitrate_settings);
Artem Titov137f6c82019-05-17 10:51:15 +0200302 },
303 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100304 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titov137f6c82019-05-17 10:51:15 +0200305 fixture->Run(std::move(run_params));
306}
307
Artem Titov137f6c82019-05-17 10:51:15 +0200308// Link capacity below default start rate.
Jeremy Leconte4100d552020-09-11 18:02:36 +0200309TEST(PCFullStackTest, Pc_Foreman_Cif_Link_150kbps_Net_Delay_0_0_Plr_0) {
Artem Titov137f6c82019-05-17 10:51:15 +0200310 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
311 CreateNetworkEmulationManager();
312 BuiltInNetworkBehaviorConfig config;
313 config.link_capacity_kbps = 150;
314 auto fixture = CreateTestFixture(
315 "pc_foreman_cif_link_150kbps_net_delay_0_0_plr_0",
Artem Titov1ff3c582020-07-01 15:20:37 +0200316 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200317 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
318 [](PeerConfigurer* alice) {
319 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200320 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000321 auto frame_generator = CreateFromYuvFileFrameGenerator(
322 video, ClipNameToClipPath("foreman_cif"));
323 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200324 },
325 [](PeerConfigurer* bob) {});
Artem Titovb92d3e62022-02-15 18:46:21 +0100326 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200327}
328
Jeremy Leconte4100d552020-09-11 18:02:36 +0200329TEST(PCFullStackTest, Pc_Foreman_Cif_Link_130kbps_Delay100ms_Loss1_Ulpfec) {
Artem Titov65428262019-07-02 16:48:02 +0200330 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
331 CreateNetworkEmulationManager();
332 BuiltInNetworkBehaviorConfig config;
333 config.link_capacity_kbps = 130;
334 config.queue_delay_ms = 100;
335 config.loss_percent = 1;
336 auto fixture = CreateTestFixture(
337 "pc_foreman_cif_link_130kbps_delay100ms_loss1_ulpfec",
Artem Titov1ff3c582020-07-01 15:20:37 +0200338 *network_emulation_manager->time_controller(),
Artem Titov65428262019-07-02 16:48:02 +0200339 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
340 [](PeerConfigurer* alice) {
341 VideoConfig video(352, 288, 30);
Artem Titov65428262019-07-02 16:48:02 +0200342 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000343 auto frame_generator = CreateFromYuvFileFrameGenerator(
344 video, ClipNameToClipPath("foreman_cif"));
345 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titovb92d3e62022-02-15 18:46:21 +0100346 alice->SetUseUlpFEC(true);
Artem Titov65428262019-07-02 16:48:02 +0200347 },
Artem Titovb92d3e62022-02-15 18:46:21 +0100348 [](PeerConfigurer* bob) { bob->SetUseUlpFEC(true); });
349 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov65428262019-07-02 16:48:02 +0200350}
351
Jeremy Leconte4100d552020-09-11 18:02:36 +0200352TEST(PCFullStackTest, Pc_Foreman_Cif_Link_50kbps_Delay100ms_Loss1_Ulpfec) {
Artem Titov65428262019-07-02 16:48:02 +0200353 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
354 CreateNetworkEmulationManager();
355 BuiltInNetworkBehaviorConfig config;
356 config.link_capacity_kbps = 50;
357 config.queue_delay_ms = 100;
358 config.loss_percent = 1;
359 auto fixture = CreateTestFixture(
360 "pc_foreman_cif_link_50kbps_delay100ms_loss1_ulpfec",
Artem Titov1ff3c582020-07-01 15:20:37 +0200361 *network_emulation_manager->time_controller(),
Artem Titov65428262019-07-02 16:48:02 +0200362 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
363 [](PeerConfigurer* alice) {
364 VideoConfig video(352, 288, 30);
Artem Titov65428262019-07-02 16:48:02 +0200365 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000366 auto frame_generator = CreateFromYuvFileFrameGenerator(
367 video, ClipNameToClipPath("foreman_cif"));
368 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titovb92d3e62022-02-15 18:46:21 +0100369 alice->SetUseUlpFEC(true);
Artem Titov65428262019-07-02 16:48:02 +0200370 },
Artem Titovb92d3e62022-02-15 18:46:21 +0100371 [](PeerConfigurer* bob) { bob->SetUseUlpFEC(true); });
372 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov65428262019-07-02 16:48:02 +0200373}
374
Artem Titov137f6c82019-05-17 10:51:15 +0200375// Restricted network and encoder overproducing by 30%.
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200376TEST(PCFullStackTest,
Jeremy Leconte4100d552020-09-11 18:02:36 +0200377 Pc_Foreman_Cif_Link_150kbps_Delay100ms_30pkts_Queue_Overshoot30) {
Artem Titov137f6c82019-05-17 10:51:15 +0200378 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
379 CreateNetworkEmulationManager();
380 BuiltInNetworkBehaviorConfig config;
381 config.link_capacity_kbps = 150;
382 config.queue_length_packets = 30;
383 config.queue_delay_ms = 100;
384 auto fixture = CreateTestFixture(
385 "pc_foreman_cif_link_150kbps_delay100ms_30pkts_queue_overshoot30",
Artem Titov1ff3c582020-07-01 15:20:37 +0200386 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200387 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
388 [](PeerConfigurer* alice) {
389 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200390 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000391 auto frame_generator = CreateFromYuvFileFrameGenerator(
392 video, ClipNameToClipPath("foreman_cif"));
393 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titovb92d3e62022-02-15 18:46:21 +0100394 alice->SetVideoEncoderBitrateMultiplier(1.30);
Artem Titov137f6c82019-05-17 10:51:15 +0200395 },
Artem Titovb92d3e62022-02-15 18:46:21 +0100396 [](PeerConfigurer* bob) { bob->SetVideoEncoderBitrateMultiplier(1.30); });
397 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200398}
399
400// Weak 3G-style link: 250kbps, 1% loss, 100ms delay, 15 packets queue.
401// Packet rate and loss are low enough that loss will happen with ~3s interval.
402// This triggers protection overhead to toggle between zero and non-zero.
403// Link queue is restrictive enough to trigger loss on probes.
Jeremy Leconte4100d552020-09-11 18:02:36 +0200404TEST(PCFullStackTest, Pc_Foreman_Cif_Link_250kbps_Delay100ms_10pkts_Loss1) {
Artem Titov137f6c82019-05-17 10:51:15 +0200405 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
406 CreateNetworkEmulationManager();
407 BuiltInNetworkBehaviorConfig config;
408 config.link_capacity_kbps = 250;
409 config.queue_length_packets = 10;
410 config.queue_delay_ms = 100;
411 config.loss_percent = 1;
412 auto fixture = CreateTestFixture(
413 "pc_foreman_cif_link_250kbps_delay100ms_10pkts_loss1",
Artem Titov1ff3c582020-07-01 15:20:37 +0200414 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200415 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
416 [](PeerConfigurer* alice) {
417 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200418 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000419 auto frame_generator = CreateFromYuvFileFrameGenerator(
420 video, ClipNameToClipPath("foreman_cif"));
421 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titovb92d3e62022-02-15 18:46:21 +0100422 alice->SetVideoEncoderBitrateMultiplier(1.30);
Artem Titov137f6c82019-05-17 10:51:15 +0200423 },
Artem Titovb92d3e62022-02-15 18:46:21 +0100424 [](PeerConfigurer* bob) { bob->SetVideoEncoderBitrateMultiplier(1.30); });
425 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200426}
427
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200428TEST(PCGenericDescriptorTest,
429 Pc_Foreman_Cif_Delay_50_0_Plr_5_Generic_Descriptor) {
Artem Titov137f6c82019-05-17 10:51:15 +0200430 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
431 CreateNetworkEmulationManager();
432 BuiltInNetworkBehaviorConfig config;
433 config.loss_percent = 5;
434 config.queue_delay_ms = 50;
435 auto fixture = CreateTestFixture(
Danil Chapovalov636865e2020-06-03 14:11:26 +0200436 "pc_foreman_cif_delay_50_0_plr_5_generic_descriptor",
Artem Titov1ff3c582020-07-01 15:20:37 +0200437 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200438 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
439 [](PeerConfigurer* alice) {
440 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200441 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000442 auto frame_generator = CreateFromYuvFileFrameGenerator(
443 video, ClipNameToClipPath("foreman_cif"));
444 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200445 },
446 [](PeerConfigurer* bob) {});
Artem Titovb92d3e62022-02-15 18:46:21 +0100447 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200448}
449
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200450TEST(PCGenericDescriptorTest,
451 Pc_Foreman_Cif_Delay_50_0_Plr_5_Ulpfec_Generic_Descriptor) {
Artem Titov137f6c82019-05-17 10:51:15 +0200452 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
453 CreateNetworkEmulationManager();
454 BuiltInNetworkBehaviorConfig config;
455 config.loss_percent = 5;
456 config.queue_delay_ms = 50;
457 auto fixture = CreateTestFixture(
Danil Chapovalov636865e2020-06-03 14:11:26 +0200458 "pc_foreman_cif_delay_50_0_plr_5_ulpfec_generic_descriptor",
Artem Titov1ff3c582020-07-01 15:20:37 +0200459 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200460 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
461 [](PeerConfigurer* alice) {
462 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200463 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000464 auto frame_generator = CreateFromYuvFileFrameGenerator(
465 video, ClipNameToClipPath("foreman_cif"));
466 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titovb92d3e62022-02-15 18:46:21 +0100467 alice->SetUseUlpFEC(true);
Artem Titov137f6c82019-05-17 10:51:15 +0200468 },
Artem Titovb92d3e62022-02-15 18:46:21 +0100469 [](PeerConfigurer* bob) { bob->SetUseUlpFEC(true); });
470 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200471}
472
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200473TEST(PCFullStackTest, Pc_Foreman_Cif_Delay_50_0_Plr_5_Flexfec) {
Artem Titov137f6c82019-05-17 10:51:15 +0200474 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
475 CreateNetworkEmulationManager();
476 BuiltInNetworkBehaviorConfig config;
477 config.loss_percent = 5;
478 config.queue_delay_ms = 50;
479 auto fixture = CreateTestFixture(
480 "pc_foreman_cif_delay_50_0_plr_5_flexfec",
Artem Titov1ff3c582020-07-01 15:20:37 +0200481 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200482 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
483 [](PeerConfigurer* alice) {
484 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200485 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000486 auto frame_generator = CreateFromYuvFileFrameGenerator(
487 video, ClipNameToClipPath("foreman_cif"));
488 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titovb92d3e62022-02-15 18:46:21 +0100489 alice->SetUseFlexFEC(true);
Artem Titov137f6c82019-05-17 10:51:15 +0200490 },
Artem Titovb92d3e62022-02-15 18:46:21 +0100491 [](PeerConfigurer* bob) { bob->SetUseFlexFEC(true); });
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100492 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovb92d3e62022-02-15 18:46:21 +0100493 run_params.enable_flex_fec_support = true;
Artem Titov137f6c82019-05-17 10:51:15 +0200494 fixture->Run(std::move(run_params));
495}
496
Jeremy Leconte4100d552020-09-11 18:02:36 +0200497TEST(PCFullStackTest, Pc_Foreman_Cif_500kbps_Delay_50_0_Plr_3_Flexfec) {
Artem Titov137f6c82019-05-17 10:51:15 +0200498 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
499 CreateNetworkEmulationManager();
500 BuiltInNetworkBehaviorConfig config;
501 config.loss_percent = 3;
502 config.link_capacity_kbps = 500;
503 config.queue_delay_ms = 50;
504 auto fixture = CreateTestFixture(
505 "pc_foreman_cif_500kbps_delay_50_0_plr_3_flexfec",
Artem Titov1ff3c582020-07-01 15:20:37 +0200506 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200507 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
508 [](PeerConfigurer* alice) {
509 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200510 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000511 auto frame_generator = CreateFromYuvFileFrameGenerator(
512 video, ClipNameToClipPath("foreman_cif"));
513 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titovb92d3e62022-02-15 18:46:21 +0100514 alice->SetUseFlexFEC(true);
Artem Titov137f6c82019-05-17 10:51:15 +0200515 },
Artem Titovb92d3e62022-02-15 18:46:21 +0100516 [](PeerConfigurer* bob) { bob->SetUseFlexFEC(true); });
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100517 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovb92d3e62022-02-15 18:46:21 +0100518 run_params.enable_flex_fec_support = true;
Artem Titov137f6c82019-05-17 10:51:15 +0200519 fixture->Run(std::move(run_params));
520}
521
Jeremy Leconte4100d552020-09-11 18:02:36 +0200522TEST(PCFullStackTest, Pc_Foreman_Cif_500kbps_Delay_50_0_Plr_3_Ulpfec) {
Artem Titov137f6c82019-05-17 10:51:15 +0200523 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
524 CreateNetworkEmulationManager();
525 BuiltInNetworkBehaviorConfig config;
526 config.loss_percent = 3;
527 config.link_capacity_kbps = 500;
528 config.queue_delay_ms = 50;
529 auto fixture = CreateTestFixture(
530 "pc_foreman_cif_500kbps_delay_50_0_plr_3_ulpfec",
Artem Titov1ff3c582020-07-01 15:20:37 +0200531 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200532 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
533 [](PeerConfigurer* alice) {
534 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200535 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000536 auto frame_generator = CreateFromYuvFileFrameGenerator(
537 video, ClipNameToClipPath("foreman_cif"));
538 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titovb92d3e62022-02-15 18:46:21 +0100539 alice->SetUseUlpFEC(true);
Artem Titov137f6c82019-05-17 10:51:15 +0200540 },
Artem Titovb92d3e62022-02-15 18:46:21 +0100541 [](PeerConfigurer* bob) { bob->SetUseUlpFEC(true); });
542 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200543}
544
545#if defined(WEBRTC_USE_H264)
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200546TEST(PCFullStackTest, Pc_Foreman_Cif_Net_Delay_0_0_Plr_0_H264) {
Artem Titov137f6c82019-05-17 10:51:15 +0200547 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
548 CreateNetworkEmulationManager();
549 auto fixture = CreateTestFixture(
550 "pc_foreman_cif_net_delay_0_0_plr_0_H264",
Artem Titov1ff3c582020-07-01 15:20:37 +0200551 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200552 CreateTwoNetworkLinks(network_emulation_manager.get(),
553 BuiltInNetworkBehaviorConfig()),
554 [](PeerConfigurer* alice) {
555 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200556 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000557 auto frame_generator = CreateFromYuvFileFrameGenerator(
558 video, ClipNameToClipPath("foreman_cif"));
559 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200560 alice->SetVideoCodecs({VideoCodecConfig(cricket::kH264CodecName)});
Artem Titov137f6c82019-05-17 10:51:15 +0200561 },
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200562 [](PeerConfigurer* bob) {
563 bob->SetVideoCodecs({VideoCodecConfig(cricket::kH264CodecName)});
564 });
Artem Titovdf2b2642022-02-16 13:44:25 +0100565 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200566}
567
Jeremy Leconte4100d552020-09-11 18:02:36 +0200568TEST(PCFullStackTest, Pc_Foreman_Cif_30kbps_Net_Delay_0_0_Plr_0_H264) {
Artem Titov137f6c82019-05-17 10:51:15 +0200569 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
570 CreateNetworkEmulationManager();
571 BuiltInNetworkBehaviorConfig config;
Artem Titov137f6c82019-05-17 10:51:15 +0200572 auto fixture = CreateTestFixture(
Artem Titoved4d1582019-05-20 12:04:05 +0200573 "pc_foreman_cif_30kbps_net_delay_0_0_plr_0_H264",
Artem Titov1ff3c582020-07-01 15:20:37 +0200574 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200575 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
576 [](PeerConfigurer* alice) {
577 VideoConfig video(352, 288, 10);
Artem Titov137f6c82019-05-17 10:51:15 +0200578 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000579 auto frame_generator = CreateFromYuvFileFrameGenerator(
580 video, ClipNameToClipPath("foreman_cif"));
581 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov85a9d912019-05-29 14:36:50 +0200582
Niels Möller29d59a12020-06-22 14:48:10 +0200583 BitrateSettings bitrate_settings;
584 bitrate_settings.min_bitrate_bps = 30000;
585 bitrate_settings.start_bitrate_bps = 30000;
586 bitrate_settings.max_bitrate_bps = 30000;
587 alice->SetBitrateSettings(bitrate_settings);
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200588 alice->SetVideoCodecs({VideoCodecConfig(cricket::kH264CodecName)});
Artem Titov137f6c82019-05-17 10:51:15 +0200589 },
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200590 [](PeerConfigurer* bob) {
591 bob->SetVideoCodecs({VideoCodecConfig(cricket::kH264CodecName)});
592 });
Artem Titovdf2b2642022-02-16 13:44:25 +0100593 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200594}
595
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200596TEST(PCGenericDescriptorTest,
597 Pc_Foreman_Cif_Delay_50_0_Plr_5_H264_Generic_Descriptor) {
Artem Titov137f6c82019-05-17 10:51:15 +0200598 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
599 CreateNetworkEmulationManager();
600 BuiltInNetworkBehaviorConfig config;
601 config.loss_percent = 5;
602 config.queue_delay_ms = 50;
603 auto fixture = CreateTestFixture(
Danil Chapovalov636865e2020-06-03 14:11:26 +0200604 "pc_foreman_cif_delay_50_0_plr_5_H264_generic_descriptor",
Artem Titov1ff3c582020-07-01 15:20:37 +0200605 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200606 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
607 [](PeerConfigurer* alice) {
608 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200609 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000610 auto frame_generator = CreateFromYuvFileFrameGenerator(
611 video, ClipNameToClipPath("foreman_cif"));
612 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200613 alice->SetVideoCodecs({VideoCodecConfig(cricket::kH264CodecName)});
Artem Titov137f6c82019-05-17 10:51:15 +0200614 },
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200615 [](PeerConfigurer* bob) {
616 bob->SetVideoCodecs({VideoCodecConfig(cricket::kH264CodecName)});
617 });
Artem Titovdf2b2642022-02-16 13:44:25 +0100618 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200619}
620
Erik Språngeb3307f2022-08-22 09:06:06 +0000621TEST(PCFullStackTest, Pc_Foreman_Cif_Delay_50_0_Plr_5_H264_Sps_Pps_Idr) {
622 test::ScopedFieldTrials override_field_trials(
623 AppendFieldTrials("WebRTC-SpsPpsIdrIsH264Keyframe/Enabled/"));
624
625 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
626 CreateNetworkEmulationManager();
627 BuiltInNetworkBehaviorConfig config;
628 config.loss_percent = 5;
629 config.queue_delay_ms = 50;
630 auto fixture = CreateTestFixture(
631 "pc_foreman_cif_delay_50_0_plr_5_H264_sps_pps_idr",
632 *network_emulation_manager->time_controller(),
633 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
634 [](PeerConfigurer* alice) {
635 VideoConfig video(352, 288, 30);
636 video.stream_label = "alice-video";
637 auto frame_generator = CreateFromYuvFileFrameGenerator(
638 video, ClipNameToClipPath("foreman_cif"));
639 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
640 alice->SetVideoCodecs({VideoCodecConfig(cricket::kH264CodecName)});
641 },
642 [](PeerConfigurer* bob) {
643 bob->SetVideoCodecs({VideoCodecConfig(cricket::kH264CodecName)});
644 });
645 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
646}
647
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200648TEST(PCFullStackTest, Pc_Foreman_Cif_Delay_50_0_Plr_5_H264_Flexfec) {
Artem Titov137f6c82019-05-17 10:51:15 +0200649 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
650 CreateNetworkEmulationManager();
651 BuiltInNetworkBehaviorConfig config;
652 config.loss_percent = 5;
653 config.queue_delay_ms = 50;
654 auto fixture = CreateTestFixture(
655 "pc_foreman_cif_delay_50_0_plr_5_H264_flexfec",
Artem Titov1ff3c582020-07-01 15:20:37 +0200656 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200657 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
658 [](PeerConfigurer* alice) {
659 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200660 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000661 auto frame_generator = CreateFromYuvFileFrameGenerator(
662 video, ClipNameToClipPath("foreman_cif"));
663 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200664 alice->SetVideoCodecs({VideoCodecConfig(cricket::kH264CodecName)});
Artem Titovdf2b2642022-02-16 13:44:25 +0100665 alice->SetUseFlexFEC(true);
Artem Titov137f6c82019-05-17 10:51:15 +0200666 },
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200667 [](PeerConfigurer* bob) {
668 bob->SetVideoCodecs({VideoCodecConfig(cricket::kH264CodecName)});
Artem Titovdf2b2642022-02-16 13:44:25 +0100669 bob->SetUseFlexFEC(true);
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200670 });
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100671 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovdf2b2642022-02-16 13:44:25 +0100672 run_params.enable_flex_fec_support = true;
Artem Titov137f6c82019-05-17 10:51:15 +0200673 fixture->Run(std::move(run_params));
674}
675
676// Ulpfec with H264 is an unsupported combination, so this test is only useful
677// for debugging. It is therefore disabled by default.
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200678TEST(PCFullStackTest, DISABLED_Pc_Foreman_Cif_Delay_50_0_Plr_5_H264_Ulpfec) {
Artem Titov137f6c82019-05-17 10:51:15 +0200679 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
680 CreateNetworkEmulationManager();
681 BuiltInNetworkBehaviorConfig config;
682 config.loss_percent = 5;
683 config.queue_delay_ms = 50;
684 auto fixture = CreateTestFixture(
Artem Titoved4d1582019-05-20 12:04:05 +0200685 "pc_foreman_cif_delay_50_0_plr_5_H264_ulpfec",
Artem Titov1ff3c582020-07-01 15:20:37 +0200686 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200687 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
688 [](PeerConfigurer* alice) {
689 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200690 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000691 auto frame_generator = CreateFromYuvFileFrameGenerator(
692 video, ClipNameToClipPath("foreman_cif"));
693 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200694 alice->SetVideoCodecs({VideoCodecConfig(cricket::kH264CodecName)});
Artem Titovdf2b2642022-02-16 13:44:25 +0100695 alice->SetUseUlpFEC(true);
Artem Titov137f6c82019-05-17 10:51:15 +0200696 },
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200697 [](PeerConfigurer* bob) {
698 bob->SetVideoCodecs({VideoCodecConfig(cricket::kH264CodecName)});
Artem Titovdf2b2642022-02-16 13:44:25 +0100699 bob->SetUseUlpFEC(true);
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200700 });
Artem Titovdf2b2642022-02-16 13:44:25 +0100701 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200702}
703#endif // defined(WEBRTC_USE_H264)
704
Jeremy Leconte4100d552020-09-11 18:02:36 +0200705TEST(PCFullStackTest, Pc_Foreman_Cif_500kbps) {
Artem Titov137f6c82019-05-17 10:51:15 +0200706 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
707 CreateNetworkEmulationManager();
708 BuiltInNetworkBehaviorConfig config;
709 config.queue_length_packets = 0;
710 config.queue_delay_ms = 0;
711 config.link_capacity_kbps = 500;
712 auto fixture = CreateTestFixture(
Artem Titov1ff3c582020-07-01 15:20:37 +0200713 "pc_foreman_cif_500kbps", *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200714 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
715 [](PeerConfigurer* alice) {
716 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200717 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000718 auto frame_generator = CreateFromYuvFileFrameGenerator(
719 video, ClipNameToClipPath("foreman_cif"));
720 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200721 },
722 [](PeerConfigurer* bob) {});
Artem Titovb92d3e62022-02-15 18:46:21 +0100723 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200724}
725
Jeremy Leconte4100d552020-09-11 18:02:36 +0200726TEST(PCFullStackTest, Pc_Foreman_Cif_500kbps_32pkts_Queue) {
Artem Titov137f6c82019-05-17 10:51:15 +0200727 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
728 CreateNetworkEmulationManager();
729 BuiltInNetworkBehaviorConfig config;
730 config.queue_length_packets = 32;
731 config.queue_delay_ms = 0;
732 config.link_capacity_kbps = 500;
733 auto fixture = CreateTestFixture(
734 "pc_foreman_cif_500kbps_32pkts_queue",
Artem Titov1ff3c582020-07-01 15:20:37 +0200735 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200736 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
737 [](PeerConfigurer* alice) {
738 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200739 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000740 auto frame_generator = CreateFromYuvFileFrameGenerator(
741 video, ClipNameToClipPath("foreman_cif"));
742 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200743 },
744 [](PeerConfigurer* bob) {});
Artem Titovb92d3e62022-02-15 18:46:21 +0100745 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200746}
747
Jeremy Leconte4100d552020-09-11 18:02:36 +0200748TEST(PCFullStackTest, Pc_Foreman_Cif_500kbps_100ms) {
Artem Titov137f6c82019-05-17 10:51:15 +0200749 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
750 CreateNetworkEmulationManager();
751 BuiltInNetworkBehaviorConfig config;
752 config.queue_length_packets = 0;
753 config.queue_delay_ms = 100;
754 config.link_capacity_kbps = 500;
755 auto fixture = CreateTestFixture(
756 "pc_foreman_cif_500kbps_100ms",
Artem Titov1ff3c582020-07-01 15:20:37 +0200757 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200758 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
759 [](PeerConfigurer* alice) {
760 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200761 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000762 auto frame_generator = CreateFromYuvFileFrameGenerator(
763 video, ClipNameToClipPath("foreman_cif"));
764 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200765 },
766 [](PeerConfigurer* bob) {});
Artem Titovb92d3e62022-02-15 18:46:21 +0100767 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200768}
769
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200770TEST(PCGenericDescriptorTest,
Jeremy Leconte4100d552020-09-11 18:02:36 +0200771 Pc_Foreman_Cif_500kbps_100ms_32pkts_Queue_Generic_Descriptor) {
Artem Titov137f6c82019-05-17 10:51:15 +0200772 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
773 CreateNetworkEmulationManager();
774 BuiltInNetworkBehaviorConfig config;
775 config.queue_length_packets = 32;
776 config.queue_delay_ms = 100;
777 config.link_capacity_kbps = 500;
778 auto fixture = CreateTestFixture(
Danil Chapovalov636865e2020-06-03 14:11:26 +0200779 "pc_foreman_cif_500kbps_100ms_32pkts_queue_generic_descriptor",
Artem Titov1ff3c582020-07-01 15:20:37 +0200780 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200781 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
782 [](PeerConfigurer* alice) {
783 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200784 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000785 auto frame_generator = CreateFromYuvFileFrameGenerator(
786 video, ClipNameToClipPath("foreman_cif"));
787 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200788 },
789 [](PeerConfigurer* bob) {});
Artem Titovb92d3e62022-02-15 18:46:21 +0100790 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200791}
792
793/*
794// TODO(bugs.webrtc.org/10639) we need to disable send side bwe, but it isn't
Artem Titov39483c62019-07-19 17:03:52 +0200795// supported in PC level framework.
Artem Titov137f6c82019-05-17 10:51:15 +0200796TEST(PCFullStackTest, ForemanCif500kbps100msLimitedQueueRecvBwe) {
797 auto fixture = CreateVideoQualityTestFixture();
798 ParamsWithLogging foreman_cif;
799 foreman_cif.call.send_side_bwe = false;
800 foreman_cif.video[0] = {
801 true, 352, 288, 30,
802 30000, 500000, 2000000, false,
803 "VP8", 1, 0, 0,
804 false, false, true, ClipNameToClipPath("foreman_cif")};
805 foreman_cif.analyzer = {"foreman_cif_500kbps_100ms_32pkts_queue_recv_bwe",
806 0.0, 0.0, kTestDurationSec};
807 foreman_cif.config->queue_length_packets = 32;
808 foreman_cif.config->queue_delay_ms = 100;
809 foreman_cif.config->link_capacity_kbps = 500;
810 fixture->RunWithAnalyzer(foreman_cif);
811}
812*/
813
Jeremy Leconte4100d552020-09-11 18:02:36 +0200814TEST(PCFullStackTest, Pc_Foreman_Cif_1000kbps_100ms_32pkts_Queue) {
Artem Titov137f6c82019-05-17 10:51:15 +0200815 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
816 CreateNetworkEmulationManager();
817 BuiltInNetworkBehaviorConfig config;
818 config.queue_length_packets = 32;
819 config.queue_delay_ms = 100;
820 config.link_capacity_kbps = 1000;
821 auto fixture = CreateTestFixture(
822 "pc_foreman_cif_1000kbps_100ms_32pkts_queue",
Artem Titov1ff3c582020-07-01 15:20:37 +0200823 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200824 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
825 [](PeerConfigurer* alice) {
826 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200827 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000828 auto frame_generator = CreateFromYuvFileFrameGenerator(
829 video, ClipNameToClipPath("foreman_cif"));
830 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200831 },
832 [](PeerConfigurer* bob) {});
Artem Titovb92d3e62022-02-15 18:46:21 +0100833 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200834}
835
836// TODO(sprang): Remove this if we have the similar ModerateLimits below?
Jeremy Leconte4100d552020-09-11 18:02:36 +0200837TEST(PCFullStackTest, Pc_Conference_Motion_Hd_2000kbps_100ms_32pkts_Queue) {
Artem Titov137f6c82019-05-17 10:51:15 +0200838 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
839 CreateNetworkEmulationManager();
840 BuiltInNetworkBehaviorConfig config;
841 config.queue_length_packets = 32;
842 config.queue_delay_ms = 100;
843 config.link_capacity_kbps = 2000;
844 auto fixture = CreateTestFixture(
845 "pc_conference_motion_hd_2000kbps_100ms_32pkts_queue",
Artem Titov1ff3c582020-07-01 15:20:37 +0200846 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200847 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
848 [](PeerConfigurer* alice) {
849 VideoConfig video(1280, 720, 50);
Artem Titov137f6c82019-05-17 10:51:15 +0200850 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000851 auto frame_generator = CreateFromYuvFileFrameGenerator(
852 video, ClipNameToClipPath("ConferenceMotion_1280_720_50"));
853 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200854 },
855 [](PeerConfigurer* bob) {});
Artem Titovb92d3e62022-02-15 18:46:21 +0100856 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200857}
858
Artem Titov137f6c82019-05-17 10:51:15 +0200859/*
860// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
Danil Chapovalov636865e2020-06-03 14:11:26 +0200861TEST(PCGenericDescriptorTest, ConferenceMotionHd2TLModerateLimits) {
Artem Titov137f6c82019-05-17 10:51:15 +0200862 auto fixture = CreateVideoQualityTestFixture();
863 ParamsWithLogging conf_motion_hd;
864 conf_motion_hd.call.send_side_bwe = true;
865 conf_motion_hd.video[0] = {
866 true, 1280,
867 720, 50,
868 30000, 3000000,
869 3000000, false,
870 "VP8", 2,
871 -1, 0,
872 false, false,
873 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
874 conf_motion_hd.analyzer = {
Danil Chapovalov636865e2020-06-03 14:11:26 +0200875 "conference_motion_hd_2tl_moderate_limits_generic_descriptor", 0.0, 0.0,
Artem Titov137f6c82019-05-17 10:51:15 +0200876 kTestDurationSec};
877 conf_motion_hd.config->queue_length_packets = 50;
878 conf_motion_hd.config->loss_percent = 3;
879 conf_motion_hd.config->queue_delay_ms = 100;
880 conf_motion_hd.config->link_capacity_kbps = 2000;
881 conf_motion_hd.call.generic_descriptor = GenericDescriptorEnabled();
882 fixture->RunWithAnalyzer(conf_motion_hd);
883}
884
885// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
886TEST(PCFullStackTest, ConferenceMotionHd3TLModerateLimits) {
887 auto fixture = CreateVideoQualityTestFixture();
888 ParamsWithLogging conf_motion_hd;
889 conf_motion_hd.call.send_side_bwe = true;
890 conf_motion_hd.video[0] = {
891 true, 1280,
892 720, 50,
893 30000, 3000000,
894 3000000, false,
895 "VP8", 3,
896 -1, 0,
897 false, false,
898 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
899 conf_motion_hd.analyzer = {"conference_motion_hd_3tl_moderate_limits", 0.0,
900 0.0, kTestDurationSec};
901 conf_motion_hd.config->queue_length_packets = 50;
902 conf_motion_hd.config->loss_percent = 3;
903 conf_motion_hd.config->queue_delay_ms = 100;
904 conf_motion_hd.config->link_capacity_kbps = 2000;
905 fixture->RunWithAnalyzer(conf_motion_hd);
906}
907
908// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
909TEST(PCFullStackTest, ConferenceMotionHd4TLModerateLimits) {
910 auto fixture = CreateVideoQualityTestFixture();
911 ParamsWithLogging conf_motion_hd;
912 conf_motion_hd.call.send_side_bwe = true;
913 conf_motion_hd.video[0] = {
914 true, 1280,
915 720, 50,
916 30000, 3000000,
917 3000000, false,
918 "VP8", 4,
919 -1, 0,
920 false, false,
921 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
922 conf_motion_hd.analyzer = {"conference_motion_hd_4tl_moderate_limits", 0.0,
923 0.0, kTestDurationSec};
924 conf_motion_hd.config->queue_length_packets = 50;
925 conf_motion_hd.config->loss_percent = 3;
926 conf_motion_hd.config->queue_delay_ms = 100;
927 conf_motion_hd.config->link_capacity_kbps = 2000;
928 fixture->RunWithAnalyzer(conf_motion_hd);
929}
930
931// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
932TEST(PCFullStackTest, ConferenceMotionHd3TLModerateLimitsAltTLPattern) {
933 test::ScopedFieldTrials field_trial(
934 AppendFieldTrials("WebRTC-UseShortVP8TL3Pattern/Enabled/"));
935 auto fixture = CreateVideoQualityTestFixture();
936 ParamsWithLogging conf_motion_hd;
937 conf_motion_hd.call.send_side_bwe = true;
938 conf_motion_hd.video[0] = {
939 true, 1280,
940 720, 50,
941 30000, 3000000,
942 3000000, false,
943 "VP8", 3,
944 -1, 0,
945 false, false,
946 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
947 conf_motion_hd.analyzer = {"conference_motion_hd_3tl_alt_moderate_limits",
948 0.0, 0.0, kTestDurationSec};
949 conf_motion_hd.config->queue_length_packets = 50;
950 conf_motion_hd.config->loss_percent = 3;
951 conf_motion_hd.config->queue_delay_ms = 100;
952 conf_motion_hd.config->link_capacity_kbps = 2000;
953 fixture->RunWithAnalyzer(conf_motion_hd);
954}
955
956// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
957TEST(PCFullStackTest,
958 ConferenceMotionHd3TLModerateLimitsAltTLPatternAndBaseHeavyTLAllocation) {
959 auto fixture = CreateVideoQualityTestFixture();
960 test::ScopedFieldTrials field_trial(
961 AppendFieldTrials("WebRTC-UseShortVP8TL3Pattern/Enabled/"
962 "WebRTC-UseBaseHeavyVP8TL3RateAllocation/Enabled/"));
963 ParamsWithLogging conf_motion_hd;
964 conf_motion_hd.call.send_side_bwe = true;
965 conf_motion_hd.video[0] = {
966 true, 1280,
967 720, 50,
968 30000, 3000000,
969 3000000, false,
970 "VP8", 3,
971 -1, 0,
972 false, false,
973 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
974 conf_motion_hd.analyzer = {
975 "conference_motion_hd_3tl_alt_heavy_moderate_limits", 0.0, 0.0,
976 kTestDurationSec};
977 conf_motion_hd.config->queue_length_packets = 50;
978 conf_motion_hd.config->loss_percent = 3;
979 conf_motion_hd.config->queue_delay_ms = 100;
980 conf_motion_hd.config->link_capacity_kbps = 2000;
981 fixture->RunWithAnalyzer(conf_motion_hd);
982}
983*/
984
985#if defined(RTC_ENABLE_VP9)
Jeremy Leconte4100d552020-09-11 18:02:36 +0200986TEST(PCFullStackTest, Pc_Conference_Motion_Hd_2000kbps_100ms_32pkts_Queue_Vp9) {
Artem Titov137f6c82019-05-17 10:51:15 +0200987 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
988 CreateNetworkEmulationManager();
989 BuiltInNetworkBehaviorConfig config;
990 config.queue_length_packets = 32;
991 config.queue_delay_ms = 100;
992 config.link_capacity_kbps = 2000;
993 auto fixture = CreateTestFixture(
994 "pc_conference_motion_hd_2000kbps_100ms_32pkts_queue_vp9",
Artem Titov1ff3c582020-07-01 15:20:37 +0200995 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200996 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
997 [](PeerConfigurer* alice) {
998 VideoConfig video(1280, 720, 50);
Artem Titov137f6c82019-05-17 10:51:15 +0200999 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +00001000 auto frame_generator = CreateFromYuvFileFrameGenerator(
1001 video, ClipNameToClipPath("ConferenceMotion_1280_720_50"));
1002 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Mirko Bonadei9d58f972021-07-15 17:14:54 +02001003 alice->SetVideoCodecs({VideoCodecConfig(
1004 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
1005 {kVP9FmtpProfileId,
1006 VP9ProfileToString(VP9Profile::kProfile0)}})});
Artem Titov137f6c82019-05-17 10:51:15 +02001007 },
Mirko Bonadei9d58f972021-07-15 17:14:54 +02001008 [](PeerConfigurer* bob) {
1009 bob->SetVideoCodecs({VideoCodecConfig(
1010 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
1011 {kVP9FmtpProfileId,
1012 VP9ProfileToString(VP9Profile::kProfile0)}})});
1013 });
Artem Titovb92d3e62022-02-15 18:46:21 +01001014 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +02001015}
1016#endif
1017
Jeremy Lecontec8850cb2020-09-10 20:46:33 +02001018TEST(PCFullStackTest, Pc_Screenshare_Slides_No_Conference_Mode) {
Artem Titov39483c62019-07-19 17:03:52 +02001019 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1020 CreateNetworkEmulationManager();
1021 auto fixture = CreateTestFixture(
1022 "pc_screenshare_slides_no_conference_mode",
Artem Titov1ff3c582020-07-01 15:20:37 +02001023 *network_emulation_manager->time_controller(),
Artem Titov39483c62019-07-19 17:03:52 +02001024 CreateTwoNetworkLinks(network_emulation_manager.get(),
1025 BuiltInNetworkBehaviorConfig()),
1026 [](PeerConfigurer* alice) {
1027 VideoConfig video(1850, 1110, 5);
Artem Titov39483c62019-07-19 17:03:52 +02001028 video.stream_label = "alice-video";
Andrey Logvin435fb9a2020-05-08 08:02:49 +00001029 video.content_hint = VideoTrackInterface::ContentHint::kText;
1030 auto frame_generator = CreateScreenShareFrameGenerator(
1031 video, ScreenShareConfig(TimeDelta::Seconds(10)));
Andrey Logvinc0644672020-05-05 10:33:01 +00001032 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov39483c62019-07-19 17:03:52 +02001033 },
1034 [](PeerConfigurer* bob) {});
Artem Titovb92d3e62022-02-15 18:46:21 +01001035 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +02001036}
1037
Jeremy Lecontec8850cb2020-09-10 20:46:33 +02001038TEST(PCFullStackTest, Pc_Screenshare_Slides) {
Artem Titov39483c62019-07-19 17:03:52 +02001039 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1040 CreateNetworkEmulationManager();
1041 auto fixture = CreateTestFixture(
Artem Titov1ff3c582020-07-01 15:20:37 +02001042 "pc_screenshare_slides", *network_emulation_manager->time_controller(),
Artem Titov39483c62019-07-19 17:03:52 +02001043 CreateTwoNetworkLinks(network_emulation_manager.get(),
1044 BuiltInNetworkBehaviorConfig()),
1045 [](PeerConfigurer* alice) {
1046 VideoConfig video(1850, 1110, 5);
Artem Titov39483c62019-07-19 17:03:52 +02001047 video.stream_label = "alice-video";
Andrey Logvin435fb9a2020-05-08 08:02:49 +00001048 video.content_hint = VideoTrackInterface::ContentHint::kText;
1049 auto frame_generator = CreateScreenShareFrameGenerator(
1050 video, ScreenShareConfig(TimeDelta::Seconds(10)));
Andrey Logvinc0644672020-05-05 10:33:01 +00001051 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov39483c62019-07-19 17:03:52 +02001052 },
1053 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +01001054 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titov39483c62019-07-19 17:03:52 +02001055 run_params.use_conference_mode = true;
1056 fixture->Run(std::move(run_params));
1057}
1058
1059// TODO(bugs.webrtc.org/9840): Investigate why is this test flaky on Win/Mac.
1060#if !defined(WEBRTC_MAC) && !defined(WEBRTC_WIN)
Jeremy Lecontec8850cb2020-09-10 20:46:33 +02001061TEST(PCFullStackTest, Pc_Screenshare_Slides_Simulcast_No_Conference_Mode) {
Artem Titov39483c62019-07-19 17:03:52 +02001062 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1063 CreateNetworkEmulationManager();
1064 auto fixture = CreateTestFixture(
1065 "pc_screenshare_slides_simulcast_no_conference_mode",
Artem Titov1ff3c582020-07-01 15:20:37 +02001066 *network_emulation_manager->time_controller(),
Artem Titov39483c62019-07-19 17:03:52 +02001067 CreateTwoNetworkLinks(network_emulation_manager.get(),
1068 BuiltInNetworkBehaviorConfig()),
1069 [](PeerConfigurer* alice) {
Artem Titov4b9701e2019-08-28 13:48:02 +02001070 VideoConfig video(1850, 1110, 30);
Florent Castellibfdb9572022-08-29 14:19:46 +02001071 video.simulcast_config = VideoSimulcastConfig(2);
1072 video.emulated_sfu_config = EmulatedSFUConfig(1);
Artem Titov4b9701e2019-08-28 13:48:02 +02001073 video.temporal_layers_count = 2;
Artem Titov39483c62019-07-19 17:03:52 +02001074 video.stream_label = "alice-video";
Andrey Logvin435fb9a2020-05-08 08:02:49 +00001075 video.content_hint = VideoTrackInterface::ContentHint::kText;
1076 auto frame_generator = CreateScreenShareFrameGenerator(
1077 video, ScreenShareConfig(TimeDelta::Seconds(10)));
Andrey Logvinc0644672020-05-05 10:33:01 +00001078 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov39483c62019-07-19 17:03:52 +02001079 },
1080 [](PeerConfigurer* bob) {});
Artem Titovb92d3e62022-02-15 18:46:21 +01001081 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov39483c62019-07-19 17:03:52 +02001082}
1083
Jeremy Lecontec8850cb2020-09-10 20:46:33 +02001084TEST(PCFullStackTest, Pc_Screenshare_Slides_Simulcast) {
Artem Titov39483c62019-07-19 17:03:52 +02001085 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1086 CreateNetworkEmulationManager();
1087 auto fixture = CreateTestFixture(
1088 "pc_screenshare_slides_simulcast",
Artem Titov1ff3c582020-07-01 15:20:37 +02001089 *network_emulation_manager->time_controller(),
Artem Titov39483c62019-07-19 17:03:52 +02001090 CreateTwoNetworkLinks(network_emulation_manager.get(),
1091 BuiltInNetworkBehaviorConfig()),
1092 [](PeerConfigurer* alice) {
Artem Titov4b9701e2019-08-28 13:48:02 +02001093 VideoConfig video(1850, 1110, 30);
Florent Castellibfdb9572022-08-29 14:19:46 +02001094 video.simulcast_config = VideoSimulcastConfig(2);
1095 video.emulated_sfu_config = EmulatedSFUConfig(1);
Artem Titov4b9701e2019-08-28 13:48:02 +02001096 video.temporal_layers_count = 2;
Artem Titov39483c62019-07-19 17:03:52 +02001097 video.stream_label = "alice-video";
Andrey Logvin435fb9a2020-05-08 08:02:49 +00001098 video.content_hint = VideoTrackInterface::ContentHint::kText;
1099 auto frame_generator = CreateScreenShareFrameGenerator(
1100 video, ScreenShareConfig(TimeDelta::Seconds(10)));
Andrey Logvinc0644672020-05-05 10:33:01 +00001101 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov39483c62019-07-19 17:03:52 +02001102 },
1103 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +01001104 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titov39483c62019-07-19 17:03:52 +02001105 run_params.use_conference_mode = true;
1106 fixture->Run(std::move(run_params));
1107}
1108#endif // !defined(WEBRTC_MAC) && !defined(WEBRTC_WIN)
1109
1110/*
Artem Titov137f6c82019-05-17 10:51:15 +02001111#if !defined(WEBRTC_MAC)
Artem Titov137f6c82019-05-17 10:51:15 +02001112// TODO(bugs.webrtc.org/9840): Investigate why is this test flaky on Win/Mac.
1113#if !defined(WEBRTC_WIN)
Artem Titov137f6c82019-05-17 10:51:15 +02001114// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1115TEST(PCFullStackTest, ScreenshareSlidesVP8_2TL_Simulcast_low) {
Artem Titov137f6c82019-05-17 10:51:15 +02001116 auto fixture = CreateVideoQualityTestFixture();
1117 ParamsWithLogging screenshare;
1118 screenshare.call.send_side_bwe = true;
1119 screenshare.screenshare[0] = {true, false, 10};
1120 screenshare.video[0] = {true, 1850, 1110, 30, 800000, 2500000,
1121 2500000, false, "VP8", 2, 1, 400000,
1122 false, false, false, ""};
1123 screenshare.analyzer = {"screenshare_slides_simulcast_low", 0.0, 0.0,
1124 kTestDurationSec};
1125 VideoQualityTest::Params screenshare_params_high;
1126 screenshare_params_high.video[0] = {
1127 true, 1850, 1110, 60, 600000, 1250000, 1250000, false,
1128 "VP8", 2, 0, 400000, false, false, false, ""};
1129 VideoQualityTest::Params screenshare_params_low;
1130 screenshare_params_low.video[0] = {true, 1850, 1110, 5, 30000, 200000,
1131 1000000, false, "VP8", 2, 0, 400000,
1132 false, false, false, ""};
1133
1134 std::vector<VideoStream> streams = {
1135 VideoQualityTest::DefaultVideoStream(screenshare_params_low, 0),
1136 VideoQualityTest::DefaultVideoStream(screenshare_params_high, 0)};
1137 screenshare.ss[0] = {
1138 streams, 0, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1139 false};
1140 fixture->RunWithAnalyzer(screenshare);
1141}
1142
1143#endif // !defined(WEBRTC_WIN)
1144#endif // !defined(WEBRTC_MAC)
1145
1146// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1147TEST(PCFullStackTest, ScreenshareSlidesVP8_2TL_Scroll) {
1148 auto fixture = CreateVideoQualityTestFixture();
1149 ParamsWithLogging config;
1150 config.call.send_side_bwe = true;
1151 config.video[0] = {true, 1850, 1110 / 2, 5, 50000, 200000,
1152 1000000, false, "VP8", 2, 1, 400000,
1153 false, false, false, ""};
1154 config.screenshare[0] = {true, false, 10, 2};
1155 config.analyzer = {"screenshare_slides_scrolling", 0.0, 0.0,
1156 kTestDurationSec};
1157 fixture->RunWithAnalyzer(config);
1158}
1159
1160// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
Jeremy Lecontec8850cb2020-09-10 20:46:33 +02001161TEST(PCGenericDescriptorTest, Screenshare_Slides_Lossy_Net_Generic_Descriptor) {
Artem Titov137f6c82019-05-17 10:51:15 +02001162 auto fixture = CreateVideoQualityTestFixture();
1163 ParamsWithLogging screenshare;
1164 screenshare.call.send_side_bwe = true;
1165 screenshare.video[0] = {true, 1850, 1110, 5, 50000, 200000,
1166 1000000, false, "VP8", 2, 1, 400000,
1167 false, false, false, ""};
1168 screenshare.screenshare[0] = {true, false, 10};
Danil Chapovalov636865e2020-06-03 14:11:26 +02001169 screenshare.analyzer = {"screenshare_slides_lossy_net_generic_descriptor",
1170 0.0, 0.0, kTestDurationSec};
Artem Titov137f6c82019-05-17 10:51:15 +02001171 screenshare.config->loss_percent = 5;
1172 screenshare.config->queue_delay_ms = 200;
1173 screenshare.config->link_capacity_kbps = 500;
Danil Chapovalov636865e2020-06-03 14:11:26 +02001174 screenshare.call.generic_descriptor = true;
Artem Titov137f6c82019-05-17 10:51:15 +02001175 fixture->RunWithAnalyzer(screenshare);
1176}
1177
1178// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1179TEST(PCFullStackTest, ScreenshareSlidesVP8_2TL_VeryLossyNet) {
1180 auto fixture = CreateVideoQualityTestFixture();
1181 ParamsWithLogging screenshare;
1182 screenshare.call.send_side_bwe = true;
1183 screenshare.video[0] = {true, 1850, 1110, 5, 50000, 200000,
1184 1000000, false, "VP8", 2, 1, 400000,
1185 false, false, false, ""};
1186 screenshare.screenshare[0] = {true, false, 10};
1187 screenshare.analyzer = {"screenshare_slides_very_lossy", 0.0, 0.0,
1188 kTestDurationSec};
1189 screenshare.config->loss_percent = 10;
1190 screenshare.config->queue_delay_ms = 200;
1191 screenshare.config->link_capacity_kbps = 500;
1192 fixture->RunWithAnalyzer(screenshare);
1193}
1194
1195// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1196TEST(PCFullStackTest, ScreenshareSlidesVP8_2TL_LossyNetRestrictedQueue) {
1197 auto fixture = CreateVideoQualityTestFixture();
1198 ParamsWithLogging screenshare;
1199 screenshare.call.send_side_bwe = true;
1200 screenshare.video[0] = {true, 1850, 1110, 5, 50000, 200000,
1201 1000000, false, "VP8", 2, 1, 400000,
1202 false, false, false, ""};
1203 screenshare.screenshare[0] = {true, false, 10};
1204 screenshare.analyzer = {"screenshare_slides_lossy_limited", 0.0, 0.0,
1205 kTestDurationSec};
1206 screenshare.config->loss_percent = 5;
1207 screenshare.config->link_capacity_kbps = 200;
1208 screenshare.config->queue_length_packets = 30;
1209
1210 fixture->RunWithAnalyzer(screenshare);
1211}
1212
1213// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1214TEST(PCFullStackTest, ScreenshareSlidesVP8_2TL_ModeratelyRestricted) {
1215 auto fixture = CreateVideoQualityTestFixture();
1216 ParamsWithLogging screenshare;
1217 screenshare.call.send_side_bwe = true;
1218 screenshare.video[0] = {true, 1850, 1110, 5, 50000, 200000,
1219 1000000, false, "VP8", 2, 1, 400000,
1220 false, false, false, ""};
1221 screenshare.screenshare[0] = {true, false, 10};
1222 screenshare.analyzer = {"screenshare_slides_moderately_restricted", 0.0, 0.0,
1223 kTestDurationSec};
1224 screenshare.config->loss_percent = 1;
1225 screenshare.config->link_capacity_kbps = 1200;
1226 screenshare.config->queue_length_packets = 30;
1227
1228 fixture->RunWithAnalyzer(screenshare);
1229}
1230
1231namespace {
1232// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1233// Since ParamsWithLogging::Video is not trivially destructible, we can't
1234// store these structs as const globals.
1235ParamsWithLogging::Video SvcVp9Video() {
1236 return ParamsWithLogging::Video{
1237 true, 1280,
1238 720, 30,
1239 800000, 2500000,
1240 2500000, false,
1241 "VP9", 3,
1242 2, 400000,
1243 false, false,
1244 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
1245}
1246
1247ParamsWithLogging::Video SimulcastVp8VideoHigh() {
1248 return ParamsWithLogging::Video{
1249 true, 1280,
1250 720, 30,
1251 800000, 2500000,
1252 2500000, false,
1253 "VP8", 3,
1254 2, 400000,
1255 false, false,
1256 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
1257}
1258
1259ParamsWithLogging::Video SimulcastVp8VideoMedium() {
1260 return ParamsWithLogging::Video{
1261 true, 640,
1262 360, 30,
1263 150000, 500000,
1264 700000, false,
1265 "VP8", 3,
1266 2, 400000,
1267 false, false,
1268 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
1269}
1270
1271ParamsWithLogging::Video SimulcastVp8VideoLow() {
1272 return ParamsWithLogging::Video{
1273 true, 320,
1274 180, 30,
1275 30000, 150000,
1276 200000, false,
1277 "VP8", 3,
1278 2, 400000,
1279 false, false,
1280 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
1281}
1282} // namespace
Artem Titov733a7812019-07-24 14:53:15 +02001283*/
Artem Titov137f6c82019-05-17 10:51:15 +02001284
1285#if defined(RTC_ENABLE_VP9)
1286
Jeremy Leconte4100d552020-09-11 18:02:36 +02001287TEST(PCFullStackTest, Pc_Screenshare_Slides_Vp9_3sl_High_Fps) {
Artem Titov1e49ab22019-07-30 13:17:25 +02001288 webrtc::test::ScopedFieldTrials override_trials(
1289 AppendFieldTrials("WebRTC-Vp9InterLayerPred/"
1290 "Enabled,inter_layer_pred_mode:on/"));
Artem Titov733a7812019-07-24 14:53:15 +02001291 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1292 CreateNetworkEmulationManager();
1293 auto fixture = CreateTestFixture(
1294 "pc_screenshare_slides_vp9_3sl_high_fps",
Artem Titov1ff3c582020-07-01 15:20:37 +02001295 *network_emulation_manager->time_controller(),
Artem Titov733a7812019-07-24 14:53:15 +02001296 CreateTwoNetworkLinks(network_emulation_manager.get(),
1297 BuiltInNetworkBehaviorConfig()),
1298 [](PeerConfigurer* alice) {
1299 VideoConfig video(1850, 1110, 30);
1300 video.stream_label = "alice-video";
Florent Castellibfdb9572022-08-29 14:19:46 +02001301 video.simulcast_config = VideoSimulcastConfig(3);
1302 video.emulated_sfu_config = EmulatedSFUConfig(2);
Andrey Logvin435fb9a2020-05-08 08:02:49 +00001303 video.content_hint = VideoTrackInterface::ContentHint::kText;
1304 auto frame_generator = CreateScreenShareFrameGenerator(
1305 video, ScreenShareConfig(TimeDelta::Seconds(10)));
Andrey Logvinc0644672020-05-05 10:33:01 +00001306 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Mirko Bonadei9d58f972021-07-15 17:14:54 +02001307 alice->SetVideoCodecs({VideoCodecConfig(
1308 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
1309 {kVP9FmtpProfileId,
1310 VP9ProfileToString(VP9Profile::kProfile0)}})});
Artem Titov733a7812019-07-24 14:53:15 +02001311 },
Mirko Bonadei9d58f972021-07-15 17:14:54 +02001312 [](PeerConfigurer* bob) {
1313 bob->SetVideoCodecs({VideoCodecConfig(
1314 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
1315 {kVP9FmtpProfileId,
1316 VP9ProfileToString(VP9Profile::kProfile0)}})});
1317 });
Artem Titovb92d3e62022-02-15 18:46:21 +01001318 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +02001319}
1320
Jeremy Leconte4100d552020-09-11 18:02:36 +02001321TEST(PCFullStackTest, Pc_Vp9svc_3sl_High) {
Artem Titov1e49ab22019-07-30 13:17:25 +02001322 webrtc::test::ScopedFieldTrials override_trials(
1323 AppendFieldTrials("WebRTC-Vp9InterLayerPred/"
1324 "Enabled,inter_layer_pred_mode:on/"));
1325 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1326 CreateNetworkEmulationManager();
1327 auto fixture = CreateTestFixture(
Artem Titov1ff3c582020-07-01 15:20:37 +02001328 "pc_vp9svc_3sl_high", *network_emulation_manager->time_controller(),
Artem Titov1e49ab22019-07-30 13:17:25 +02001329 CreateTwoNetworkLinks(network_emulation_manager.get(),
1330 BuiltInNetworkBehaviorConfig()),
1331 [](PeerConfigurer* alice) {
1332 VideoConfig video(1280, 720, 30);
1333 video.stream_label = "alice-video";
Florent Castellibfdb9572022-08-29 14:19:46 +02001334 video.simulcast_config = VideoSimulcastConfig(3);
1335 video.emulated_sfu_config = EmulatedSFUConfig(2);
Artem Titov1e49ab22019-07-30 13:17:25 +02001336 video.temporal_layers_count = 3;
Andrey Logvinc0644672020-05-05 10:33:01 +00001337 auto frame_generator = CreateFromYuvFileFrameGenerator(
1338 video, ClipNameToClipPath("ConferenceMotion_1280_720_50"));
1339 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Mirko Bonadei9d58f972021-07-15 17:14:54 +02001340 alice->SetVideoCodecs({VideoCodecConfig(
1341 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
1342 {kVP9FmtpProfileId,
1343 VP9ProfileToString(VP9Profile::kProfile0)}})});
Artem Titov1e49ab22019-07-30 13:17:25 +02001344 },
Mirko Bonadei9d58f972021-07-15 17:14:54 +02001345 [](PeerConfigurer* bob) {
1346 bob->SetVideoCodecs({VideoCodecConfig(
1347 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
1348 {kVP9FmtpProfileId,
1349 VP9ProfileToString(VP9Profile::kProfile0)}})});
1350 });
Artem Titovb92d3e62022-02-15 18:46:21 +01001351 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov1e49ab22019-07-30 13:17:25 +02001352}
1353
Jeremy Leconte4100d552020-09-11 18:02:36 +02001354TEST(PCFullStackTest, Pc_Vp9svc_3sl_Low) {
Artem Titov1e49ab22019-07-30 13:17:25 +02001355 webrtc::test::ScopedFieldTrials override_trials(
1356 AppendFieldTrials("WebRTC-Vp9InterLayerPred/"
1357 "Enabled,inter_layer_pred_mode:on/"));
1358 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1359 CreateNetworkEmulationManager();
1360 auto fixture = CreateTestFixture(
Artem Titov1ff3c582020-07-01 15:20:37 +02001361 "pc_vp9svc_3sl_low", *network_emulation_manager->time_controller(),
Artem Titov1e49ab22019-07-30 13:17:25 +02001362 CreateTwoNetworkLinks(network_emulation_manager.get(),
1363 BuiltInNetworkBehaviorConfig()),
1364 [](PeerConfigurer* alice) {
1365 VideoConfig video(1280, 720, 30);
1366 video.stream_label = "alice-video";
Florent Castellibfdb9572022-08-29 14:19:46 +02001367 video.simulcast_config = VideoSimulcastConfig(3);
1368 video.emulated_sfu_config = EmulatedSFUConfig(0);
Artem Titov1e49ab22019-07-30 13:17:25 +02001369 video.temporal_layers_count = 3;
Andrey Logvinc0644672020-05-05 10:33:01 +00001370 auto frame_generator = CreateFromYuvFileFrameGenerator(
1371 video, ClipNameToClipPath("ConferenceMotion_1280_720_50"));
1372 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Mirko Bonadei9d58f972021-07-15 17:14:54 +02001373 alice->SetVideoCodecs({VideoCodecConfig(
1374 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
1375 {kVP9FmtpProfileId,
1376 VP9ProfileToString(VP9Profile::kProfile0)}})});
Artem Titov1e49ab22019-07-30 13:17:25 +02001377 },
Mirko Bonadei9d58f972021-07-15 17:14:54 +02001378 [](PeerConfigurer* bob) {
1379 bob->SetVideoCodecs({VideoCodecConfig(
1380 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
1381 {kVP9FmtpProfileId,
1382 VP9ProfileToString(VP9Profile::kProfile0)}})});
1383 });
Artem Titovb92d3e62022-02-15 18:46:21 +01001384 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov1e49ab22019-07-30 13:17:25 +02001385}
1386
Artem Titov733a7812019-07-24 14:53:15 +02001387#endif // defined(RTC_ENABLE_VP9)
1388
1389/*
Artem Titov137f6c82019-05-17 10:51:15 +02001390// bugs.webrtc.org/9506
1391#if !defined(WEBRTC_MAC)
1392
1393// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1394TEST(PCFullStackTest, VP9KSVC_3SL_High) {
1395 webrtc::test::ScopedFieldTrials override_trials(
1396 AppendFieldTrials("WebRTC-Vp9IssueKeyFrameOnLayerDeactivation/Enabled/"));
1397 auto fixture = CreateVideoQualityTestFixture();
1398 ParamsWithLogging simulcast;
1399 simulcast.call.send_side_bwe = true;
1400 simulcast.video[0] = SvcVp9Video();
1401 simulcast.analyzer = {"vp9ksvc_3sl_high", 0.0, 0.0, kTestDurationSec};
1402 simulcast.ss[0] = {
1403 std::vector<VideoStream>(), 0, 3, 2, InterLayerPredMode::kOnKeyPic,
1404 std::vector<SpatialLayer>(), false};
1405 fixture->RunWithAnalyzer(simulcast);
1406}
1407
1408// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1409TEST(PCFullStackTest, VP9KSVC_3SL_Medium) {
1410 webrtc::test::ScopedFieldTrials override_trials(
1411 AppendFieldTrials("WebRTC-Vp9IssueKeyFrameOnLayerDeactivation/Enabled/"));
1412 auto fixture = CreateVideoQualityTestFixture();
1413 ParamsWithLogging simulcast;
1414 simulcast.call.send_side_bwe = true;
1415 simulcast.video[0] = SvcVp9Video();
1416 simulcast.analyzer = {"vp9ksvc_3sl_medium", 0.0, 0.0, kTestDurationSec};
1417 simulcast.ss[0] = {
1418 std::vector<VideoStream>(), 0, 3, 1, InterLayerPredMode::kOnKeyPic,
1419 std::vector<SpatialLayer>(), false};
1420 fixture->RunWithAnalyzer(simulcast);
1421}
1422
1423// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1424TEST(PCFullStackTest, VP9KSVC_3SL_Low) {
1425 webrtc::test::ScopedFieldTrials override_trials(
1426 AppendFieldTrials("WebRTC-Vp9IssueKeyFrameOnLayerDeactivation/Enabled/"));
1427 auto fixture = CreateVideoQualityTestFixture();
1428 ParamsWithLogging simulcast;
1429 simulcast.call.send_side_bwe = true;
1430 simulcast.video[0] = SvcVp9Video();
1431 simulcast.analyzer = {"vp9ksvc_3sl_low", 0.0, 0.0, kTestDurationSec};
1432 simulcast.ss[0] = {
1433 std::vector<VideoStream>(), 0, 3, 0, InterLayerPredMode::kOnKeyPic,
1434 std::vector<SpatialLayer>(), false};
1435 fixture->RunWithAnalyzer(simulcast);
1436}
1437
1438// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1439TEST(PCFullStackTest, VP9KSVC_3SL_Medium_Network_Restricted) {
1440 webrtc::test::ScopedFieldTrials override_trials(
1441 AppendFieldTrials("WebRTC-Vp9IssueKeyFrameOnLayerDeactivation/Enabled/"));
1442 auto fixture = CreateVideoQualityTestFixture();
1443 ParamsWithLogging simulcast;
1444 simulcast.call.send_side_bwe = true;
1445 simulcast.video[0] = SvcVp9Video();
1446 simulcast.analyzer = {"vp9ksvc_3sl_medium_network_restricted", 0.0, 0.0,
1447 kTestDurationSec};
1448 simulcast.ss[0] = {
1449 std::vector<VideoStream>(), 0, 3, -1, InterLayerPredMode::kOnKeyPic,
1450 std::vector<SpatialLayer>(), false};
1451 simulcast.config->link_capacity_kbps = 1000;
1452 simulcast.config->queue_delay_ms = 100;
1453 fixture->RunWithAnalyzer(simulcast);
1454}
1455
1456// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1457// TODO(webrtc:9722): Remove when experiment is cleaned up.
1458TEST(PCFullStackTest, VP9KSVC_3SL_Medium_Network_Restricted_Trusted_Rate) {
1459 webrtc::test::ScopedFieldTrials override_trials(
Mirko Bonadeie39b3782020-09-24 14:02:39 +02001460 AppendFieldTrials("WebRTC-Vp9IssueKeyFrameOnLayerDeactivation/Enabled/"));
Artem Titov137f6c82019-05-17 10:51:15 +02001461 auto fixture = CreateVideoQualityTestFixture();
1462 ParamsWithLogging simulcast;
1463 simulcast.call.send_side_bwe = true;
1464 simulcast.video[0] = SvcVp9Video();
1465 simulcast.analyzer = {"vp9ksvc_3sl_medium_network_restricted_trusted_rate",
1466 0.0, 0.0, kTestDurationSec};
1467 simulcast.ss[0] = {
1468 std::vector<VideoStream>(), 0, 3, -1, InterLayerPredMode::kOnKeyPic,
1469 std::vector<SpatialLayer>(), false};
1470 simulcast.config->link_capacity_kbps = 1000;
1471 simulcast.config->queue_delay_ms = 100;
1472 fixture->RunWithAnalyzer(simulcast);
1473}
1474#endif // !defined(WEBRTC_MAC)
1475
1476#endif // defined(RTC_ENABLE_VP9)
Artem Titov39483c62019-07-19 17:03:52 +02001477*/
Artem Titov137f6c82019-05-17 10:51:15 +02001478
1479// Android bots can't handle FullHD, so disable the test.
1480// TODO(bugs.webrtc.org/9220): Investigate source of flakiness on Mac.
1481#if defined(WEBRTC_ANDROID) || defined(WEBRTC_MAC)
Jeremy Lecontec8850cb2020-09-10 20:46:33 +02001482#define MAYBE_Pc_Simulcast_HD_High DISABLED_Pc_Simulcast_HD_High
Artem Titov137f6c82019-05-17 10:51:15 +02001483#else
Jeremy Lecontec8850cb2020-09-10 20:46:33 +02001484#define MAYBE_Pc_Simulcast_HD_High Pc_Simulcast_HD_High
Artem Titov137f6c82019-05-17 10:51:15 +02001485#endif
Jeremy Lecontec8850cb2020-09-10 20:46:33 +02001486TEST(PCFullStackTest, MAYBE_Pc_Simulcast_HD_High) {
Artem Titov137f6c82019-05-17 10:51:15 +02001487 webrtc::test::ScopedFieldTrials override_trials(AppendFieldTrials(
1488 "WebRTC-ForceSimulatedOveruseIntervalMs/1000-50000-300/"));
Artem Titov39483c62019-07-19 17:03:52 +02001489 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1490 CreateNetworkEmulationManager();
1491 BuiltInNetworkBehaviorConfig config;
1492 config.loss_percent = 0;
1493 config.queue_delay_ms = 100;
1494 auto fixture = CreateTestFixture(
Artem Titov1ff3c582020-07-01 15:20:37 +02001495 "pc_simulcast_HD_high", *network_emulation_manager->time_controller(),
Artem Titov39483c62019-07-19 17:03:52 +02001496 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
1497 [](PeerConfigurer* alice) {
1498 VideoConfig video(1920, 1080, 30);
Florent Castellibfdb9572022-08-29 14:19:46 +02001499 video.simulcast_config = VideoSimulcastConfig(3);
1500 video.emulated_sfu_config = EmulatedSFUConfig(2);
Artem Titov4b9701e2019-08-28 13:48:02 +02001501 video.temporal_layers_count = 3;
Artem Titov39483c62019-07-19 17:03:52 +02001502 video.stream_label = "alice-video";
Andrey Logvin42c59522020-05-06 12:18:26 +00001503 alice->AddVideoConfig(std::move(video));
Artem Titov39483c62019-07-19 17:03:52 +02001504 },
1505 [](PeerConfigurer* bob) {});
Artem Titovb92d3e62022-02-15 18:46:21 +01001506 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +02001507}
1508
Jeremy Leconte4100d552020-09-11 18:02:36 +02001509TEST(PCFullStackTest, Pc_Simulcast_Vp8_3sl_High) {
Artem Titov39483c62019-07-19 17:03:52 +02001510 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1511 CreateNetworkEmulationManager();
1512 BuiltInNetworkBehaviorConfig config;
1513 config.loss_percent = 0;
1514 config.queue_delay_ms = 100;
1515 auto fixture = CreateTestFixture(
1516 "pc_simulcast_vp8_3sl_high",
Artem Titov1ff3c582020-07-01 15:20:37 +02001517 *network_emulation_manager->time_controller(),
Artem Titov39483c62019-07-19 17:03:52 +02001518 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
1519 [](PeerConfigurer* alice) {
1520 VideoConfig video(1280, 720, 30);
Florent Castellibfdb9572022-08-29 14:19:46 +02001521 video.simulcast_config = VideoSimulcastConfig(3);
1522 video.emulated_sfu_config = EmulatedSFUConfig(2);
Artem Titov39483c62019-07-19 17:03:52 +02001523 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +00001524 auto frame_generator = CreateFromYuvFileFrameGenerator(
1525 video, ClipNameToClipPath("ConferenceMotion_1280_720_50"));
1526 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov39483c62019-07-19 17:03:52 +02001527 },
1528 [](PeerConfigurer* bob) {});
Artem Titovb92d3e62022-02-15 18:46:21 +01001529 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +02001530}
1531
Jeremy Leconte4100d552020-09-11 18:02:36 +02001532TEST(PCFullStackTest, Pc_Simulcast_Vp8_3sl_Low) {
Artem Titov39483c62019-07-19 17:03:52 +02001533 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1534 CreateNetworkEmulationManager();
1535 BuiltInNetworkBehaviorConfig config;
1536 config.loss_percent = 0;
1537 config.queue_delay_ms = 100;
1538 auto fixture = CreateTestFixture(
Artem Titov1ff3c582020-07-01 15:20:37 +02001539 "pc_simulcast_vp8_3sl_low", *network_emulation_manager->time_controller(),
Artem Titov39483c62019-07-19 17:03:52 +02001540 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
1541 [](PeerConfigurer* alice) {
1542 VideoConfig video(1280, 720, 30);
Florent Castellibfdb9572022-08-29 14:19:46 +02001543 video.simulcast_config = VideoSimulcastConfig(3);
1544 video.emulated_sfu_config = EmulatedSFUConfig(0);
Artem Titov39483c62019-07-19 17:03:52 +02001545 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +00001546 auto frame_generator = CreateFromYuvFileFrameGenerator(
1547 video, ClipNameToClipPath("ConferenceMotion_1280_720_50"));
1548 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov39483c62019-07-19 17:03:52 +02001549 },
1550 [](PeerConfigurer* bob) {});
Artem Titovb92d3e62022-02-15 18:46:21 +01001551 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +02001552}
1553
Artem Titov39483c62019-07-19 17:03:52 +02001554/*
Artem Titov137f6c82019-05-17 10:51:15 +02001555// This test assumes ideal network conditions with target bandwidth being
1556// available and exercises WebRTC calls with a high target bitrate(100 Mbps).
1557// Android32 bots can't handle this high bitrate, so disable test for those.
1558#if defined(WEBRTC_ANDROID)
1559#define MAYBE_HighBitrateWithFakeCodec DISABLED_HighBitrateWithFakeCodec
1560#else
1561#define MAYBE_HighBitrateWithFakeCodec HighBitrateWithFakeCodec
1562#endif // defined(WEBRTC_ANDROID)
1563// TODO(bugs.webrtc.org/10639) Disabled because target bitrate can't be
1564configured yet. TEST(PCFullStackTest, MAYBE_HighBitrateWithFakeCodec) { auto
1565fixture = CreateVideoQualityTestFixture(); const int target_bitrate = 100000000;
1566 ParamsWithLogging generator;
1567 generator.call.send_side_bwe = true;
1568 generator.call.call_bitrate_config.min_bitrate_bps = target_bitrate;
1569 generator.call.call_bitrate_config.start_bitrate_bps = target_bitrate;
1570 generator.call.call_bitrate_config.max_bitrate_bps = target_bitrate;
1571 generator.video[0] = {true,
1572 360,
1573 240,
1574 30,
1575 target_bitrate / 2,
1576 target_bitrate,
1577 target_bitrate * 2,
1578 false,
1579 "FakeCodec",
1580 1,
1581 0,
1582 0,
1583 false,
1584 false,
1585 false,
1586 "Generator"};
1587 generator.analyzer = {"high_bitrate_with_fake_codec", 0.0, 0.0,
1588 kTestDurationSec};
1589 fixture->RunWithAnalyzer(generator);
1590}
1591
1592// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1593TEST(PCFullStackTest, LargeRoomVP8_5thumb) {
1594 auto fixture = CreateVideoQualityTestFixture();
1595 ParamsWithLogging large_room;
1596 large_room.call.send_side_bwe = true;
1597 large_room.video[0] = SimulcastVp8VideoHigh();
1598 large_room.analyzer = {"largeroom_5thumb", 0.0, 0.0, kTestDurationSec};
1599 large_room.config->loss_percent = 0;
1600 large_room.config->queue_delay_ms = 100;
1601 ParamsWithLogging video_params_high;
1602 video_params_high.video[0] = SimulcastVp8VideoHigh();
1603 ParamsWithLogging video_params_medium;
1604 video_params_medium.video[0] = SimulcastVp8VideoMedium();
1605 ParamsWithLogging video_params_low;
1606 video_params_low.video[0] = SimulcastVp8VideoLow();
1607
1608 std::vector<VideoStream> streams = {
1609 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
1610 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
1611 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
1612 large_room.call.num_thumbnails = 5;
1613 large_room.ss[0] = {
1614 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1615 false};
1616 fixture->RunWithAnalyzer(large_room);
1617}
1618
1619#if defined(WEBRTC_ANDROID) || defined(WEBRTC_IOS)
1620// Fails on mobile devices:
1621// https://bugs.chromium.org/p/webrtc/issues/detail?id=7301
1622#define MAYBE_LargeRoomVP8_50thumb DISABLED_LargeRoomVP8_50thumb
1623#define MAYBE_LargeRoomVP8_15thumb DISABLED_LargeRoomVP8_15thumb
1624#else
1625#define MAYBE_LargeRoomVP8_50thumb LargeRoomVP8_50thumb
1626#define MAYBE_LargeRoomVP8_15thumb LargeRoomVP8_15thumb
1627#endif
1628// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1629TEST(PCFullStackTest, MAYBE_LargeRoomVP8_15thumb) {
1630 auto fixture = CreateVideoQualityTestFixture();
1631 ParamsWithLogging large_room;
1632 large_room.call.send_side_bwe = true;
1633 large_room.video[0] = SimulcastVp8VideoHigh();
1634 large_room.analyzer = {"largeroom_15thumb", 0.0, 0.0, kTestDurationSec};
1635 large_room.config->loss_percent = 0;
1636 large_room.config->queue_delay_ms = 100;
1637 ParamsWithLogging video_params_high;
1638 video_params_high.video[0] = SimulcastVp8VideoHigh();
1639 ParamsWithLogging video_params_medium;
1640 video_params_medium.video[0] = SimulcastVp8VideoMedium();
1641 ParamsWithLogging video_params_low;
1642 video_params_low.video[0] = SimulcastVp8VideoLow();
1643
1644 std::vector<VideoStream> streams = {
1645 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
1646 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
1647 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
1648 large_room.call.num_thumbnails = 15;
1649 large_room.ss[0] = {
1650 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1651 false};
1652 fixture->RunWithAnalyzer(large_room);
1653}
1654
1655// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1656TEST(PCFullStackTest, MAYBE_LargeRoomVP8_50thumb) {
1657 auto fixture = CreateVideoQualityTestFixture();
1658 ParamsWithLogging large_room;
1659 large_room.call.send_side_bwe = true;
1660 large_room.video[0] = SimulcastVp8VideoHigh();
1661 large_room.analyzer = {"largeroom_50thumb", 0.0, 0.0, kTestDurationSec};
1662 large_room.config->loss_percent = 0;
1663 large_room.config->queue_delay_ms = 100;
1664 ParamsWithLogging video_params_high;
1665 video_params_high.video[0] = SimulcastVp8VideoHigh();
1666 ParamsWithLogging video_params_medium;
1667 video_params_medium.video[0] = SimulcastVp8VideoMedium();
1668 ParamsWithLogging video_params_low;
1669 video_params_low.video[0] = SimulcastVp8VideoLow();
1670
1671 std::vector<VideoStream> streams = {
1672 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
1673 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
1674 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
1675 large_room.call.num_thumbnails = 50;
1676 large_room.ss[0] = {
1677 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1678 false};
1679 fixture->RunWithAnalyzer(large_room);
1680}
1681*/
1682
Bjorn Terelius83e6ece2021-03-03 17:53:45 +01001683/*
Artem Titov137f6c82019-05-17 10:51:15 +02001684class PCDualStreamsTest : public ::testing::TestWithParam<int> {};
1685
Artem Titov137f6c82019-05-17 10:51:15 +02001686// Disable dual video test on mobile device becuase it's too heavy.
1687// TODO(bugs.webrtc.org/9840): Investigate why is this test flaky on MAC.
1688#if !defined(WEBRTC_ANDROID) && !defined(WEBRTC_IOS) && !defined(WEBRTC_MAC)
1689// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1690TEST_P(PCDualStreamsTest,
1691 ModeratelyRestricted_SlidesVp8_2TL_Simulcast_Video_Simulcast_High) {
Artem Titov137f6c82019-05-17 10:51:15 +02001692 const int first_stream = GetParam();
1693 ParamsWithLogging dual_streams;
1694
1695 // Screenshare Settings.
1696 dual_streams.screenshare[first_stream] = {true, false, 10};
1697 dual_streams.video[first_stream] = {true, 1850, 1110, 5, 800000, 2500000,
1698 2500000, false, "VP8", 2, 1, 400000,
1699 false, false, false, ""};
1700
1701 ParamsWithLogging screenshare_params_high;
1702 screenshare_params_high.video[0] = {
1703 true, 1850, 1110, 60, 600000, 1250000, 1250000, false,
1704 "VP8", 2, 0, 400000, false, false, false, ""};
1705 VideoQualityTest::Params screenshare_params_low;
1706 screenshare_params_low.video[0] = {true, 1850, 1110, 5, 30000, 200000,
1707 1000000, false, "VP8", 2, 0, 400000,
1708 false, false, false, ""};
1709 std::vector<VideoStream> screenhsare_streams = {
1710 VideoQualityTest::DefaultVideoStream(screenshare_params_low, 0),
1711 VideoQualityTest::DefaultVideoStream(screenshare_params_high, 0)};
1712
1713 dual_streams.ss[first_stream] = {
1714 screenhsare_streams, 1, 1, 0, InterLayerPredMode::kOn,
1715 std::vector<SpatialLayer>(), false};
1716
1717 // Video settings.
1718 dual_streams.video[1 - first_stream] = SimulcastVp8VideoHigh();
1719
1720 ParamsWithLogging video_params_high;
1721 video_params_high.video[0] = SimulcastVp8VideoHigh();
1722 ParamsWithLogging video_params_medium;
1723 video_params_medium.video[0] = SimulcastVp8VideoMedium();
1724 ParamsWithLogging video_params_low;
1725 video_params_low.video[0] = SimulcastVp8VideoLow();
1726 std::vector<VideoStream> streams = {
1727 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
1728 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
1729 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
1730
1731 dual_streams.ss[1 - first_stream] = {
1732 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1733 false};
1734
1735 // Call settings.
1736 dual_streams.call.send_side_bwe = true;
1737 dual_streams.call.dual_video = true;
1738 std::string test_label = "dualstreams_moderately_restricted_screenshare_" +
1739 std::to_string(first_stream);
1740 dual_streams.analyzer = {test_label, 0.0, 0.0, kTestDurationSec};
1741 dual_streams.config->loss_percent = 1;
1742 dual_streams.config->link_capacity_kbps = 7500;
1743 dual_streams.config->queue_length_packets = 30;
1744 dual_streams.config->queue_delay_ms = 100;
1745
1746 auto fixture = CreateVideoQualityTestFixture();
1747 fixture->RunWithAnalyzer(dual_streams);
1748}
1749#endif // !defined(WEBRTC_ANDROID) && !defined(WEBRTC_IOS) &&
1750 // !defined(WEBRTC_MAC)
1751
1752// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1753TEST_P(PCDualStreamsTest, Conference_Restricted) {
1754 const int first_stream = GetParam();
1755 ParamsWithLogging dual_streams;
1756
1757 // Screenshare Settings.
1758 dual_streams.screenshare[first_stream] = {true, false, 10};
1759 dual_streams.video[first_stream] = {true, 1850, 1110, 5, 800000, 2500000,
1760 2500000, false, "VP8", 3, 2, 400000,
1761 false, false, false, ""};
1762 // Video settings.
1763 dual_streams.video[1 - first_stream] = {
1764 true, 1280,
1765 720, 30,
1766 150000, 500000,
1767 700000, false,
1768 "VP8", 3,
1769 2, 400000,
1770 false, false,
1771 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
1772
1773 // Call settings.
1774 dual_streams.call.send_side_bwe = true;
1775 dual_streams.call.dual_video = true;
1776 std::string test_label = "dualstreams_conference_restricted_screenshare_" +
1777 std::to_string(first_stream);
1778 dual_streams.analyzer = {test_label, 0.0, 0.0, kTestDurationSec};
1779 dual_streams.config->loss_percent = 1;
1780 dual_streams.config->link_capacity_kbps = 5000;
1781 dual_streams.config->queue_length_packets = 30;
1782 dual_streams.config->queue_delay_ms = 100;
1783
1784 auto fixture = CreateVideoQualityTestFixture();
1785 fixture->RunWithAnalyzer(dual_streams);
1786}
Artem Titov137f6c82019-05-17 10:51:15 +02001787
1788INSTANTIATE_TEST_SUITE_P(PCFullStackTest,
1789 PCDualStreamsTest,
1790 ::testing::Values(0, 1));
Bjorn Terelius83e6ece2021-03-03 17:53:45 +01001791*/
Artem Titov137f6c82019-05-17 10:51:15 +02001792
1793} // namespace webrtc