blob: f6e272b2df03599acbbcf7eba658d370dfdf1c0e [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 Titov137f6c82019-05-17 10:51:15 +020020#include "api/test/network_emulation_manager.h"
21#include "api/test/peerconnection_quality_test_fixture.h"
22#include "api/test/simulated_network.h"
Artem Titov1ff3c582020-07-01 15:20:37 +020023#include "api/test/time_controller.h"
Johannes Kronc3fcee72021-04-19 09:09:26 +020024#include "api/video_codecs/vp9_profile.h"
Artem Titov137f6c82019-05-17 10:51:15 +020025#include "call/simulated_network.h"
Artem Titov137f6c82019-05-17 10:51:15 +020026#include "modules/video_coding/codecs/vp9/include/vp9.h"
27#include "system_wrappers/include/field_trial.h"
28#include "test/field_trial.h"
29#include "test/gtest.h"
30#include "test/pc/e2e/network_quality_metrics_reporter.h"
31#include "test/testsupport/file_utils.h"
32
33namespace webrtc {
34
Florent Castellibfdb9572022-08-29 14:19:46 +020035using EmulatedSFUConfig =
36 webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture::EmulatedSFUConfig;
Artem Titov137f6c82019-05-17 10:51:15 +020037using PeerConfigurer =
38 webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture::PeerConfigurer;
39using RunParams = webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture::RunParams;
40using VideoConfig =
41 webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture::VideoConfig;
42using AudioConfig =
43 webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture::AudioConfig;
Artem Titov39483c62019-07-19 17:03:52 +020044using ScreenShareConfig =
45 webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture::ScreenShareConfig;
46using VideoSimulcastConfig =
47 webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture::VideoSimulcastConfig;
Artem Titovcdd73e02020-01-23 14:09:09 +010048using VideoCodecConfig =
49 webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture::VideoCodecConfig;
Artem Titov137f6c82019-05-17 10:51:15 +020050
51namespace {
52
53constexpr int kTestDurationSec = 45;
Artem Titov137f6c82019-05-17 10:51:15 +020054
55EmulatedNetworkNode* CreateEmulatedNodeWithConfig(
56 NetworkEmulationManager* emulation,
57 const BuiltInNetworkBehaviorConfig& config) {
58 return emulation->CreateEmulatedNode(
Mirko Bonadei317a1f02019-09-17 17:06:18 +020059 std::make_unique<SimulatedNetwork>(config));
Artem Titov137f6c82019-05-17 10:51:15 +020060}
61
62std::pair<EmulatedNetworkManagerInterface*, EmulatedNetworkManagerInterface*>
63CreateTwoNetworkLinks(NetworkEmulationManager* emulation,
64 const BuiltInNetworkBehaviorConfig& config) {
65 auto* alice_node = CreateEmulatedNodeWithConfig(emulation, config);
66 auto* bob_node = CreateEmulatedNodeWithConfig(emulation, config);
67
68 auto* alice_endpoint = emulation->CreateEndpoint(EmulatedEndpointConfig());
69 auto* bob_endpoint = emulation->CreateEndpoint(EmulatedEndpointConfig());
70
71 emulation->CreateRoute(alice_endpoint, {alice_node}, bob_endpoint);
72 emulation->CreateRoute(bob_endpoint, {bob_node}, alice_endpoint);
73
74 return {
75 emulation->CreateEmulatedNetworkManagerInterface({alice_endpoint}),
76 emulation->CreateEmulatedNetworkManagerInterface({bob_endpoint}),
77 };
78}
79
80std::unique_ptr<webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture>
81CreateTestFixture(const std::string& test_case_name,
Artem Titov1ff3c582020-07-01 15:20:37 +020082 TimeController& time_controller,
Artem Titov137f6c82019-05-17 10:51:15 +020083 std::pair<EmulatedNetworkManagerInterface*,
84 EmulatedNetworkManagerInterface*> network_links,
85 rtc::FunctionView<void(PeerConfigurer*)> alice_configurer,
86 rtc::FunctionView<void(PeerConfigurer*)> bob_configurer) {
87 auto fixture = webrtc_pc_e2e::CreatePeerConnectionE2EQualityTestFixture(
Artem Titov1ff3c582020-07-01 15:20:37 +020088 test_case_name, time_controller, /*audio_quality_analyzer=*/nullptr,
Artem Titov137f6c82019-05-17 10:51:15 +020089 /*video_quality_analyzer=*/nullptr);
Niels Möllerf47a7242021-11-22 16:07:35 +010090 fixture->AddPeer(network_links.first->network_dependencies(),
91 alice_configurer);
92 fixture->AddPeer(network_links.second->network_dependencies(),
93 bob_configurer);
Artem Titov137f6c82019-05-17 10:51:15 +020094 fixture->AddQualityMetricsReporter(
Mirko Bonadei317a1f02019-09-17 17:06:18 +020095 std::make_unique<webrtc_pc_e2e::NetworkQualityMetricsReporter>(
Artem Titov137f6c82019-05-17 10:51:15 +020096 network_links.first, network_links.second));
97 return fixture;
98}
99
100// Takes the current active field trials set, and appends some new trials.
101std::string AppendFieldTrials(std::string new_trial_string) {
102 return std::string(field_trial::GetFieldTrialString()) + new_trial_string;
103}
104
105std::string ClipNameToClipPath(const char* clip_name) {
106 return test::ResourcePath(clip_name, "yuv");
107}
108
109} // namespace
110
Artem Titov137f6c82019-05-17 10:51:15 +0200111#if defined(RTC_ENABLE_VP9)
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200112TEST(PCFullStackTest, Pc_Foreman_Cif_Net_Delay_0_0_Plr_0_VP9) {
Artem Titov137f6c82019-05-17 10:51:15 +0200113 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
114 CreateNetworkEmulationManager();
115 auto fixture = CreateTestFixture(
116 "pc_foreman_cif_net_delay_0_0_plr_0_VP9",
Artem Titov1ff3c582020-07-01 15:20:37 +0200117 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200118 CreateTwoNetworkLinks(network_emulation_manager.get(),
119 BuiltInNetworkBehaviorConfig()),
120 [](PeerConfigurer* alice) {
121 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200122 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000123 auto frame_generator = CreateFromYuvFileFrameGenerator(
124 video, ClipNameToClipPath("foreman_cif"));
125 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200126 alice->SetVideoCodecs({VideoCodecConfig(
127 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
128 {kVP9FmtpProfileId,
129 VP9ProfileToString(VP9Profile::kProfile0)}})});
Artem Titov137f6c82019-05-17 10:51:15 +0200130 },
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200131 [](PeerConfigurer* bob) {
132 bob->SetVideoCodecs({VideoCodecConfig(
133 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
134 {kVP9FmtpProfileId,
135 VP9ProfileToString(VP9Profile::kProfile0)}})});
136 });
Artem Titovb92d3e62022-02-15 18:46:21 +0100137 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200138}
139
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200140TEST(PCGenericDescriptorTest,
141 Pc_Foreman_Cif_Delay_50_0_Plr_5_VP9_Generic_Descriptor) {
Artem Titov137f6c82019-05-17 10:51:15 +0200142 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
143 CreateNetworkEmulationManager();
144 BuiltInNetworkBehaviorConfig config;
145 config.loss_percent = 5;
146 config.queue_delay_ms = 50;
147 auto fixture = CreateTestFixture(
Danil Chapovalov636865e2020-06-03 14:11:26 +0200148 "pc_foreman_cif_delay_50_0_plr_5_VP9_generic_descriptor",
Artem Titov1ff3c582020-07-01 15:20:37 +0200149 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200150 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
151 [](PeerConfigurer* alice) {
152 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200153 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000154 auto frame_generator = CreateFromYuvFileFrameGenerator(
155 video, ClipNameToClipPath("foreman_cif"));
156 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200157 alice->SetVideoCodecs({VideoCodecConfig(
158 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
159 {kVP9FmtpProfileId,
160 VP9ProfileToString(VP9Profile::kProfile0)}})});
Artem Titov137f6c82019-05-17 10:51:15 +0200161 },
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200162 [](PeerConfigurer* bob) {
163 bob->SetVideoCodecs({VideoCodecConfig(
164 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
165 {kVP9FmtpProfileId,
166 VP9ProfileToString(VP9Profile::kProfile0)}})});
167 });
Artem Titovb92d3e62022-02-15 18:46:21 +0100168 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200169}
170
Artem Titove731a2e2019-07-02 10:08:17 +0200171// VP9 2nd profile isn't supported on android arm and arm 64.
Artem Titovcecee992019-07-03 11:55:28 +0200172#if (defined(WEBRTC_ANDROID) && \
173 (defined(WEBRTC_ARCH_ARM64) || defined(WEBRTC_ARCH_ARM))) || \
174 (defined(WEBRTC_IOS) && defined(WEBRTC_ARCH_ARM64))
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200175#define MAYBE_Pc_Generator_Net_Delay_0_0_Plr_0_VP9Profile2 \
176 DISABLED_Pc_Generator_Net_Delay_0_0_Plr_0_VP9Profile2
Artem Titove731a2e2019-07-02 10:08:17 +0200177#else
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200178#define MAYBE_Pc_Generator_Net_Delay_0_0_Plr_0_VP9Profile2 \
179 Pc_Generator_Net_Delay_0_0_Plr_0_VP9Profile2
Artem Titove731a2e2019-07-02 10:08:17 +0200180#endif
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200181TEST(PCFullStackTest, MAYBE_Pc_Generator_Net_Delay_0_0_Plr_0_VP9Profile2) {
Artem Titov137f6c82019-05-17 10:51:15 +0200182 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
183 CreateNetworkEmulationManager();
184 auto fixture = CreateTestFixture(
185 "pc_generator_net_delay_0_0_plr_0_VP9Profile2",
Artem Titov1ff3c582020-07-01 15:20:37 +0200186 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200187 CreateTwoNetworkLinks(network_emulation_manager.get(),
188 BuiltInNetworkBehaviorConfig()),
189 [](PeerConfigurer* alice) {
190 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200191 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000192 auto frame_generator = CreateSquareFrameGenerator(
193 video, test::FrameGeneratorInterface::OutputType::kI010);
194 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200195 alice->SetVideoCodecs({VideoCodecConfig(
196 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
197 {kVP9FmtpProfileId,
198 VP9ProfileToString(VP9Profile::kProfile2)}})});
Artem Titov137f6c82019-05-17 10:51:15 +0200199 },
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200200 [](PeerConfigurer* bob) {
201 bob->SetVideoCodecs({VideoCodecConfig(
202 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
203 {kVP9FmtpProfileId,
204 VP9ProfileToString(VP9Profile::kProfile2)}})});
205 });
Artem Titovb92d3e62022-02-15 18:46:21 +0100206 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200207}
208
209/*
210// TODO(bugs.webrtc.org/10639) migrate commented out test, when required
211// functionality will be supported in PeerConnection level framework.
212TEST(PCFullStackTest, ForemanCifWithoutPacketLossMultiplexI420Frame) {
213 auto fixture = CreateVideoQualityTestFixture();
214 ParamsWithLogging foreman_cif;
215 foreman_cif.call.send_side_bwe = true;
216 foreman_cif.video[0] = {
217 true, 352, 288, 30,
218 700000, 700000, 700000, false,
219 "multiplex", 1, 0, 0,
220 false, false, false, ClipNameToClipPath("foreman_cif")};
221 foreman_cif.analyzer = {"foreman_cif_net_delay_0_0_plr_0_Multiplex", 0.0, 0.0,
222 kTestDurationSec};
223 fixture->RunWithAnalyzer(foreman_cif);
224}
225
226TEST(PCFullStackTest, GeneratorWithoutPacketLossMultiplexI420AFrame) {
227 auto fixture = CreateVideoQualityTestFixture();
228
229 ParamsWithLogging generator;
230 generator.call.send_side_bwe = true;
231 generator.video[0] = {
232 true, 352, 288, 30, 700000, 700000, 700000, false,
233 "multiplex", 1, 0, 0, false, false, false, "GeneratorI420A"};
234 generator.analyzer = {"generator_net_delay_0_0_plr_0_Multiplex", 0.0, 0.0,
235 kTestDurationSec};
236 fixture->RunWithAnalyzer(generator);
237}
238*/
239#endif // defined(RTC_ENABLE_VP9)
240
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200241TEST(PCFullStackTest, Pc_Net_Delay_0_0_Plr_0) {
Artem Titov137f6c82019-05-17 10:51:15 +0200242 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
243 CreateNetworkEmulationManager();
244 auto fixture = CreateTestFixture(
Artem Titov1ff3c582020-07-01 15:20:37 +0200245 "pc_net_delay_0_0_plr_0", *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200246 CreateTwoNetworkLinks(network_emulation_manager.get(),
247 BuiltInNetworkBehaviorConfig()),
248 [](PeerConfigurer* alice) {
249 VideoConfig video(176, 144, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200250 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000251 auto frame_generator = CreateFromYuvFileFrameGenerator(
252 video, ClipNameToClipPath("paris_qcif"));
253 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200254 },
255 [](PeerConfigurer* bob) {});
Artem Titovb92d3e62022-02-15 18:46:21 +0100256 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200257}
258
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200259TEST(PCGenericDescriptorTest,
260 Pc_Foreman_Cif_Net_Delay_0_0_Plr_0_Generic_Descriptor) {
Artem Titov137f6c82019-05-17 10:51:15 +0200261 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
262 CreateNetworkEmulationManager();
263 auto fixture = CreateTestFixture(
Danil Chapovalov636865e2020-06-03 14:11:26 +0200264 "pc_foreman_cif_net_delay_0_0_plr_0_generic_descriptor",
Artem Titov1ff3c582020-07-01 15:20:37 +0200265 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200266 CreateTwoNetworkLinks(network_emulation_manager.get(),
267 BuiltInNetworkBehaviorConfig()),
268 [](PeerConfigurer* alice) {
269 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200270 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000271 auto frame_generator = CreateFromYuvFileFrameGenerator(
272 video, ClipNameToClipPath("foreman_cif"));
273 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200274 },
275 [](PeerConfigurer* bob) {});
Artem Titovb92d3e62022-02-15 18:46:21 +0100276 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200277}
278
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200279TEST(PCGenericDescriptorTest,
Jeremy Leconte4100d552020-09-11 18:02:36 +0200280 Pc_Foreman_Cif_30kbps_Net_Delay_0_0_Plr_0_Generic_Descriptor) {
Artem Titov137f6c82019-05-17 10:51:15 +0200281 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
282 CreateNetworkEmulationManager();
283 BuiltInNetworkBehaviorConfig config;
Artem Titov137f6c82019-05-17 10:51:15 +0200284 auto fixture = CreateTestFixture(
Danil Chapovalov636865e2020-06-03 14:11:26 +0200285 "pc_foreman_cif_30kbps_net_delay_0_0_plr_0_generic_descriptor",
Artem Titov1ff3c582020-07-01 15:20:37 +0200286 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200287 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
288 [](PeerConfigurer* alice) {
289 VideoConfig video(352, 288, 10);
Artem Titov137f6c82019-05-17 10:51:15 +0200290 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000291 auto frame_generator = CreateFromYuvFileFrameGenerator(
292 video, ClipNameToClipPath("foreman_cif"));
293 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov85a9d912019-05-29 14:36:50 +0200294
Niels Möller29d59a12020-06-22 14:48:10 +0200295 BitrateSettings bitrate_settings;
296 bitrate_settings.min_bitrate_bps = 30000;
297 bitrate_settings.start_bitrate_bps = 30000;
298 bitrate_settings.max_bitrate_bps = 30000;
299 alice->SetBitrateSettings(bitrate_settings);
Artem Titov137f6c82019-05-17 10:51:15 +0200300 },
301 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100302 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titov137f6c82019-05-17 10:51:15 +0200303 fixture->Run(std::move(run_params));
304}
305
Artem Titov137f6c82019-05-17 10:51:15 +0200306// Link capacity below default start rate.
Jeremy Leconte4100d552020-09-11 18:02:36 +0200307TEST(PCFullStackTest, Pc_Foreman_Cif_Link_150kbps_Net_Delay_0_0_Plr_0) {
Artem Titov137f6c82019-05-17 10:51:15 +0200308 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
309 CreateNetworkEmulationManager();
310 BuiltInNetworkBehaviorConfig config;
311 config.link_capacity_kbps = 150;
312 auto fixture = CreateTestFixture(
313 "pc_foreman_cif_link_150kbps_net_delay_0_0_plr_0",
Artem Titov1ff3c582020-07-01 15:20:37 +0200314 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200315 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
316 [](PeerConfigurer* alice) {
317 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200318 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000319 auto frame_generator = CreateFromYuvFileFrameGenerator(
320 video, ClipNameToClipPath("foreman_cif"));
321 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200322 },
323 [](PeerConfigurer* bob) {});
Artem Titovb92d3e62022-02-15 18:46:21 +0100324 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200325}
326
Jeremy Leconte4100d552020-09-11 18:02:36 +0200327TEST(PCFullStackTest, Pc_Foreman_Cif_Link_130kbps_Delay100ms_Loss1_Ulpfec) {
Artem Titov65428262019-07-02 16:48:02 +0200328 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
329 CreateNetworkEmulationManager();
330 BuiltInNetworkBehaviorConfig config;
331 config.link_capacity_kbps = 130;
332 config.queue_delay_ms = 100;
333 config.loss_percent = 1;
334 auto fixture = CreateTestFixture(
335 "pc_foreman_cif_link_130kbps_delay100ms_loss1_ulpfec",
Artem Titov1ff3c582020-07-01 15:20:37 +0200336 *network_emulation_manager->time_controller(),
Artem Titov65428262019-07-02 16:48:02 +0200337 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
338 [](PeerConfigurer* alice) {
339 VideoConfig video(352, 288, 30);
Artem Titov65428262019-07-02 16:48:02 +0200340 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000341 auto frame_generator = CreateFromYuvFileFrameGenerator(
342 video, ClipNameToClipPath("foreman_cif"));
343 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titovb92d3e62022-02-15 18:46:21 +0100344 alice->SetUseUlpFEC(true);
Artem Titov65428262019-07-02 16:48:02 +0200345 },
Artem Titovb92d3e62022-02-15 18:46:21 +0100346 [](PeerConfigurer* bob) { bob->SetUseUlpFEC(true); });
347 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov65428262019-07-02 16:48:02 +0200348}
349
Jeremy Leconte4100d552020-09-11 18:02:36 +0200350TEST(PCFullStackTest, Pc_Foreman_Cif_Link_50kbps_Delay100ms_Loss1_Ulpfec) {
Artem Titov65428262019-07-02 16:48:02 +0200351 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
352 CreateNetworkEmulationManager();
353 BuiltInNetworkBehaviorConfig config;
354 config.link_capacity_kbps = 50;
355 config.queue_delay_ms = 100;
356 config.loss_percent = 1;
357 auto fixture = CreateTestFixture(
358 "pc_foreman_cif_link_50kbps_delay100ms_loss1_ulpfec",
Artem Titov1ff3c582020-07-01 15:20:37 +0200359 *network_emulation_manager->time_controller(),
Artem Titov65428262019-07-02 16:48:02 +0200360 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
361 [](PeerConfigurer* alice) {
362 VideoConfig video(352, 288, 30);
Artem Titov65428262019-07-02 16:48:02 +0200363 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000364 auto frame_generator = CreateFromYuvFileFrameGenerator(
365 video, ClipNameToClipPath("foreman_cif"));
366 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titovb92d3e62022-02-15 18:46:21 +0100367 alice->SetUseUlpFEC(true);
Artem Titov65428262019-07-02 16:48:02 +0200368 },
Artem Titovb92d3e62022-02-15 18:46:21 +0100369 [](PeerConfigurer* bob) { bob->SetUseUlpFEC(true); });
370 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov65428262019-07-02 16:48:02 +0200371}
372
Artem Titov137f6c82019-05-17 10:51:15 +0200373// Restricted network and encoder overproducing by 30%.
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200374TEST(PCFullStackTest,
Jeremy Leconte4100d552020-09-11 18:02:36 +0200375 Pc_Foreman_Cif_Link_150kbps_Delay100ms_30pkts_Queue_Overshoot30) {
Artem Titov137f6c82019-05-17 10:51:15 +0200376 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
377 CreateNetworkEmulationManager();
378 BuiltInNetworkBehaviorConfig config;
379 config.link_capacity_kbps = 150;
380 config.queue_length_packets = 30;
381 config.queue_delay_ms = 100;
382 auto fixture = CreateTestFixture(
383 "pc_foreman_cif_link_150kbps_delay100ms_30pkts_queue_overshoot30",
Artem Titov1ff3c582020-07-01 15:20:37 +0200384 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200385 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
386 [](PeerConfigurer* alice) {
387 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200388 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000389 auto frame_generator = CreateFromYuvFileFrameGenerator(
390 video, ClipNameToClipPath("foreman_cif"));
391 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titovb92d3e62022-02-15 18:46:21 +0100392 alice->SetVideoEncoderBitrateMultiplier(1.30);
Artem Titov137f6c82019-05-17 10:51:15 +0200393 },
Artem Titovb92d3e62022-02-15 18:46:21 +0100394 [](PeerConfigurer* bob) { bob->SetVideoEncoderBitrateMultiplier(1.30); });
395 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200396}
397
398// Weak 3G-style link: 250kbps, 1% loss, 100ms delay, 15 packets queue.
399// Packet rate and loss are low enough that loss will happen with ~3s interval.
400// This triggers protection overhead to toggle between zero and non-zero.
401// Link queue is restrictive enough to trigger loss on probes.
Jeremy Leconte4100d552020-09-11 18:02:36 +0200402TEST(PCFullStackTest, Pc_Foreman_Cif_Link_250kbps_Delay100ms_10pkts_Loss1) {
Artem Titov137f6c82019-05-17 10:51:15 +0200403 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
404 CreateNetworkEmulationManager();
405 BuiltInNetworkBehaviorConfig config;
406 config.link_capacity_kbps = 250;
407 config.queue_length_packets = 10;
408 config.queue_delay_ms = 100;
409 config.loss_percent = 1;
410 auto fixture = CreateTestFixture(
411 "pc_foreman_cif_link_250kbps_delay100ms_10pkts_loss1",
Artem Titov1ff3c582020-07-01 15:20:37 +0200412 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200413 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
414 [](PeerConfigurer* alice) {
415 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200416 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000417 auto frame_generator = CreateFromYuvFileFrameGenerator(
418 video, ClipNameToClipPath("foreman_cif"));
419 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titovb92d3e62022-02-15 18:46:21 +0100420 alice->SetVideoEncoderBitrateMultiplier(1.30);
Artem Titov137f6c82019-05-17 10:51:15 +0200421 },
Artem Titovb92d3e62022-02-15 18:46:21 +0100422 [](PeerConfigurer* bob) { bob->SetVideoEncoderBitrateMultiplier(1.30); });
423 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200424}
425
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200426TEST(PCGenericDescriptorTest,
427 Pc_Foreman_Cif_Delay_50_0_Plr_5_Generic_Descriptor) {
Artem Titov137f6c82019-05-17 10:51:15 +0200428 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
429 CreateNetworkEmulationManager();
430 BuiltInNetworkBehaviorConfig config;
431 config.loss_percent = 5;
432 config.queue_delay_ms = 50;
433 auto fixture = CreateTestFixture(
Danil Chapovalov636865e2020-06-03 14:11:26 +0200434 "pc_foreman_cif_delay_50_0_plr_5_generic_descriptor",
Artem Titov1ff3c582020-07-01 15:20:37 +0200435 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200436 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
437 [](PeerConfigurer* alice) {
438 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200439 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000440 auto frame_generator = CreateFromYuvFileFrameGenerator(
441 video, ClipNameToClipPath("foreman_cif"));
442 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200443 },
444 [](PeerConfigurer* bob) {});
Artem Titovb92d3e62022-02-15 18:46:21 +0100445 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200446}
447
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200448TEST(PCGenericDescriptorTest,
449 Pc_Foreman_Cif_Delay_50_0_Plr_5_Ulpfec_Generic_Descriptor) {
Artem Titov137f6c82019-05-17 10:51:15 +0200450 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
451 CreateNetworkEmulationManager();
452 BuiltInNetworkBehaviorConfig config;
453 config.loss_percent = 5;
454 config.queue_delay_ms = 50;
455 auto fixture = CreateTestFixture(
Danil Chapovalov636865e2020-06-03 14:11:26 +0200456 "pc_foreman_cif_delay_50_0_plr_5_ulpfec_generic_descriptor",
Artem Titov1ff3c582020-07-01 15:20:37 +0200457 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200458 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
459 [](PeerConfigurer* alice) {
460 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200461 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000462 auto frame_generator = CreateFromYuvFileFrameGenerator(
463 video, ClipNameToClipPath("foreman_cif"));
464 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titovb92d3e62022-02-15 18:46:21 +0100465 alice->SetUseUlpFEC(true);
Artem Titov137f6c82019-05-17 10:51:15 +0200466 },
Artem Titovb92d3e62022-02-15 18:46:21 +0100467 [](PeerConfigurer* bob) { bob->SetUseUlpFEC(true); });
468 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200469}
470
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200471TEST(PCFullStackTest, Pc_Foreman_Cif_Delay_50_0_Plr_5_Flexfec) {
Artem Titov137f6c82019-05-17 10:51:15 +0200472 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
473 CreateNetworkEmulationManager();
474 BuiltInNetworkBehaviorConfig config;
475 config.loss_percent = 5;
476 config.queue_delay_ms = 50;
477 auto fixture = CreateTestFixture(
478 "pc_foreman_cif_delay_50_0_plr_5_flexfec",
Artem Titov1ff3c582020-07-01 15:20:37 +0200479 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200480 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
481 [](PeerConfigurer* alice) {
482 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200483 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000484 auto frame_generator = CreateFromYuvFileFrameGenerator(
485 video, ClipNameToClipPath("foreman_cif"));
486 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titovb92d3e62022-02-15 18:46:21 +0100487 alice->SetUseFlexFEC(true);
Artem Titov137f6c82019-05-17 10:51:15 +0200488 },
Artem Titovb92d3e62022-02-15 18:46:21 +0100489 [](PeerConfigurer* bob) { bob->SetUseFlexFEC(true); });
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100490 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovb92d3e62022-02-15 18:46:21 +0100491 run_params.enable_flex_fec_support = true;
Artem Titov137f6c82019-05-17 10:51:15 +0200492 fixture->Run(std::move(run_params));
493}
494
Jeremy Leconte4100d552020-09-11 18:02:36 +0200495TEST(PCFullStackTest, Pc_Foreman_Cif_500kbps_Delay_50_0_Plr_3_Flexfec) {
Artem Titov137f6c82019-05-17 10:51:15 +0200496 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
497 CreateNetworkEmulationManager();
498 BuiltInNetworkBehaviorConfig config;
499 config.loss_percent = 3;
500 config.link_capacity_kbps = 500;
501 config.queue_delay_ms = 50;
502 auto fixture = CreateTestFixture(
503 "pc_foreman_cif_500kbps_delay_50_0_plr_3_flexfec",
Artem Titov1ff3c582020-07-01 15:20:37 +0200504 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200505 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
506 [](PeerConfigurer* alice) {
507 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200508 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000509 auto frame_generator = CreateFromYuvFileFrameGenerator(
510 video, ClipNameToClipPath("foreman_cif"));
511 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titovb92d3e62022-02-15 18:46:21 +0100512 alice->SetUseFlexFEC(true);
Artem Titov137f6c82019-05-17 10:51:15 +0200513 },
Artem Titovb92d3e62022-02-15 18:46:21 +0100514 [](PeerConfigurer* bob) { bob->SetUseFlexFEC(true); });
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100515 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovb92d3e62022-02-15 18:46:21 +0100516 run_params.enable_flex_fec_support = true;
Artem Titov137f6c82019-05-17 10:51:15 +0200517 fixture->Run(std::move(run_params));
518}
519
Jeremy Leconte4100d552020-09-11 18:02:36 +0200520TEST(PCFullStackTest, Pc_Foreman_Cif_500kbps_Delay_50_0_Plr_3_Ulpfec) {
Artem Titov137f6c82019-05-17 10:51:15 +0200521 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
522 CreateNetworkEmulationManager();
523 BuiltInNetworkBehaviorConfig config;
524 config.loss_percent = 3;
525 config.link_capacity_kbps = 500;
526 config.queue_delay_ms = 50;
527 auto fixture = CreateTestFixture(
528 "pc_foreman_cif_500kbps_delay_50_0_plr_3_ulpfec",
Artem Titov1ff3c582020-07-01 15:20:37 +0200529 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200530 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
531 [](PeerConfigurer* alice) {
532 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200533 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000534 auto frame_generator = CreateFromYuvFileFrameGenerator(
535 video, ClipNameToClipPath("foreman_cif"));
536 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titovb92d3e62022-02-15 18:46:21 +0100537 alice->SetUseUlpFEC(true);
Artem Titov137f6c82019-05-17 10:51:15 +0200538 },
Artem Titovb92d3e62022-02-15 18:46:21 +0100539 [](PeerConfigurer* bob) { bob->SetUseUlpFEC(true); });
540 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200541}
542
543#if defined(WEBRTC_USE_H264)
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200544TEST(PCFullStackTest, Pc_Foreman_Cif_Net_Delay_0_0_Plr_0_H264) {
Artem Titov137f6c82019-05-17 10:51:15 +0200545 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
546 CreateNetworkEmulationManager();
547 auto fixture = CreateTestFixture(
548 "pc_foreman_cif_net_delay_0_0_plr_0_H264",
Artem Titov1ff3c582020-07-01 15:20:37 +0200549 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200550 CreateTwoNetworkLinks(network_emulation_manager.get(),
551 BuiltInNetworkBehaviorConfig()),
552 [](PeerConfigurer* alice) {
553 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200554 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000555 auto frame_generator = CreateFromYuvFileFrameGenerator(
556 video, ClipNameToClipPath("foreman_cif"));
557 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200558 alice->SetVideoCodecs({VideoCodecConfig(cricket::kH264CodecName)});
Artem Titov137f6c82019-05-17 10:51:15 +0200559 },
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200560 [](PeerConfigurer* bob) {
561 bob->SetVideoCodecs({VideoCodecConfig(cricket::kH264CodecName)});
562 });
Artem Titovdf2b2642022-02-16 13:44:25 +0100563 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200564}
565
Jeremy Leconte4100d552020-09-11 18:02:36 +0200566TEST(PCFullStackTest, Pc_Foreman_Cif_30kbps_Net_Delay_0_0_Plr_0_H264) {
Artem Titov137f6c82019-05-17 10:51:15 +0200567 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
568 CreateNetworkEmulationManager();
569 BuiltInNetworkBehaviorConfig config;
Artem Titov137f6c82019-05-17 10:51:15 +0200570 auto fixture = CreateTestFixture(
Artem Titoved4d1582019-05-20 12:04:05 +0200571 "pc_foreman_cif_30kbps_net_delay_0_0_plr_0_H264",
Artem Titov1ff3c582020-07-01 15:20:37 +0200572 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200573 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
574 [](PeerConfigurer* alice) {
575 VideoConfig video(352, 288, 10);
Artem Titov137f6c82019-05-17 10:51:15 +0200576 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000577 auto frame_generator = CreateFromYuvFileFrameGenerator(
578 video, ClipNameToClipPath("foreman_cif"));
579 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov85a9d912019-05-29 14:36:50 +0200580
Niels Möller29d59a12020-06-22 14:48:10 +0200581 BitrateSettings bitrate_settings;
582 bitrate_settings.min_bitrate_bps = 30000;
583 bitrate_settings.start_bitrate_bps = 30000;
584 bitrate_settings.max_bitrate_bps = 30000;
585 alice->SetBitrateSettings(bitrate_settings);
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200586 alice->SetVideoCodecs({VideoCodecConfig(cricket::kH264CodecName)});
Artem Titov137f6c82019-05-17 10:51:15 +0200587 },
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200588 [](PeerConfigurer* bob) {
589 bob->SetVideoCodecs({VideoCodecConfig(cricket::kH264CodecName)});
590 });
Artem Titovdf2b2642022-02-16 13:44:25 +0100591 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200592}
593
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200594TEST(PCGenericDescriptorTest,
595 Pc_Foreman_Cif_Delay_50_0_Plr_5_H264_Generic_Descriptor) {
Artem Titov137f6c82019-05-17 10:51:15 +0200596 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
597 CreateNetworkEmulationManager();
598 BuiltInNetworkBehaviorConfig config;
599 config.loss_percent = 5;
600 config.queue_delay_ms = 50;
601 auto fixture = CreateTestFixture(
Danil Chapovalov636865e2020-06-03 14:11:26 +0200602 "pc_foreman_cif_delay_50_0_plr_5_H264_generic_descriptor",
Artem Titov1ff3c582020-07-01 15:20:37 +0200603 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200604 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
605 [](PeerConfigurer* alice) {
606 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200607 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000608 auto frame_generator = CreateFromYuvFileFrameGenerator(
609 video, ClipNameToClipPath("foreman_cif"));
610 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200611 alice->SetVideoCodecs({VideoCodecConfig(cricket::kH264CodecName)});
Artem Titov137f6c82019-05-17 10:51:15 +0200612 },
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200613 [](PeerConfigurer* bob) {
614 bob->SetVideoCodecs({VideoCodecConfig(cricket::kH264CodecName)});
615 });
Artem Titovdf2b2642022-02-16 13:44:25 +0100616 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200617}
618
Erik Språngeb3307f2022-08-22 09:06:06 +0000619TEST(PCFullStackTest, Pc_Foreman_Cif_Delay_50_0_Plr_5_H264_Sps_Pps_Idr) {
620 test::ScopedFieldTrials override_field_trials(
621 AppendFieldTrials("WebRTC-SpsPpsIdrIsH264Keyframe/Enabled/"));
622
623 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
624 CreateNetworkEmulationManager();
625 BuiltInNetworkBehaviorConfig config;
626 config.loss_percent = 5;
627 config.queue_delay_ms = 50;
628 auto fixture = CreateTestFixture(
629 "pc_foreman_cif_delay_50_0_plr_5_H264_sps_pps_idr",
630 *network_emulation_manager->time_controller(),
631 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
632 [](PeerConfigurer* alice) {
633 VideoConfig video(352, 288, 30);
634 video.stream_label = "alice-video";
635 auto frame_generator = CreateFromYuvFileFrameGenerator(
636 video, ClipNameToClipPath("foreman_cif"));
637 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
638 alice->SetVideoCodecs({VideoCodecConfig(cricket::kH264CodecName)});
639 },
640 [](PeerConfigurer* bob) {
641 bob->SetVideoCodecs({VideoCodecConfig(cricket::kH264CodecName)});
642 });
643 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
644}
645
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200646TEST(PCFullStackTest, Pc_Foreman_Cif_Delay_50_0_Plr_5_H264_Flexfec) {
Artem Titov137f6c82019-05-17 10:51:15 +0200647 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
648 CreateNetworkEmulationManager();
649 BuiltInNetworkBehaviorConfig config;
650 config.loss_percent = 5;
651 config.queue_delay_ms = 50;
652 auto fixture = CreateTestFixture(
653 "pc_foreman_cif_delay_50_0_plr_5_H264_flexfec",
Artem Titov1ff3c582020-07-01 15:20:37 +0200654 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200655 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
656 [](PeerConfigurer* alice) {
657 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200658 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000659 auto frame_generator = CreateFromYuvFileFrameGenerator(
660 video, ClipNameToClipPath("foreman_cif"));
661 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200662 alice->SetVideoCodecs({VideoCodecConfig(cricket::kH264CodecName)});
Artem Titovdf2b2642022-02-16 13:44:25 +0100663 alice->SetUseFlexFEC(true);
Artem Titov137f6c82019-05-17 10:51:15 +0200664 },
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200665 [](PeerConfigurer* bob) {
666 bob->SetVideoCodecs({VideoCodecConfig(cricket::kH264CodecName)});
Artem Titovdf2b2642022-02-16 13:44:25 +0100667 bob->SetUseFlexFEC(true);
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200668 });
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100669 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovdf2b2642022-02-16 13:44:25 +0100670 run_params.enable_flex_fec_support = true;
Artem Titov137f6c82019-05-17 10:51:15 +0200671 fixture->Run(std::move(run_params));
672}
673
674// Ulpfec with H264 is an unsupported combination, so this test is only useful
675// for debugging. It is therefore disabled by default.
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200676TEST(PCFullStackTest, DISABLED_Pc_Foreman_Cif_Delay_50_0_Plr_5_H264_Ulpfec) {
Artem Titov137f6c82019-05-17 10:51:15 +0200677 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
678 CreateNetworkEmulationManager();
679 BuiltInNetworkBehaviorConfig config;
680 config.loss_percent = 5;
681 config.queue_delay_ms = 50;
682 auto fixture = CreateTestFixture(
Artem Titoved4d1582019-05-20 12:04:05 +0200683 "pc_foreman_cif_delay_50_0_plr_5_H264_ulpfec",
Artem Titov1ff3c582020-07-01 15:20:37 +0200684 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200685 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
686 [](PeerConfigurer* alice) {
687 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200688 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000689 auto frame_generator = CreateFromYuvFileFrameGenerator(
690 video, ClipNameToClipPath("foreman_cif"));
691 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200692 alice->SetVideoCodecs({VideoCodecConfig(cricket::kH264CodecName)});
Artem Titovdf2b2642022-02-16 13:44:25 +0100693 alice->SetUseUlpFEC(true);
Artem Titov137f6c82019-05-17 10:51:15 +0200694 },
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200695 [](PeerConfigurer* bob) {
696 bob->SetVideoCodecs({VideoCodecConfig(cricket::kH264CodecName)});
Artem Titovdf2b2642022-02-16 13:44:25 +0100697 bob->SetUseUlpFEC(true);
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200698 });
Artem Titovdf2b2642022-02-16 13:44:25 +0100699 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200700}
701#endif // defined(WEBRTC_USE_H264)
702
Jeremy Leconte4100d552020-09-11 18:02:36 +0200703TEST(PCFullStackTest, Pc_Foreman_Cif_500kbps) {
Artem Titov137f6c82019-05-17 10:51:15 +0200704 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
705 CreateNetworkEmulationManager();
706 BuiltInNetworkBehaviorConfig config;
707 config.queue_length_packets = 0;
708 config.queue_delay_ms = 0;
709 config.link_capacity_kbps = 500;
710 auto fixture = CreateTestFixture(
Artem Titov1ff3c582020-07-01 15:20:37 +0200711 "pc_foreman_cif_500kbps", *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200712 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
713 [](PeerConfigurer* alice) {
714 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200715 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000716 auto frame_generator = CreateFromYuvFileFrameGenerator(
717 video, ClipNameToClipPath("foreman_cif"));
718 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200719 },
720 [](PeerConfigurer* bob) {});
Artem Titovb92d3e62022-02-15 18:46:21 +0100721 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200722}
723
Jeremy Leconte4100d552020-09-11 18:02:36 +0200724TEST(PCFullStackTest, Pc_Foreman_Cif_500kbps_32pkts_Queue) {
Artem Titov137f6c82019-05-17 10:51:15 +0200725 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
726 CreateNetworkEmulationManager();
727 BuiltInNetworkBehaviorConfig config;
728 config.queue_length_packets = 32;
729 config.queue_delay_ms = 0;
730 config.link_capacity_kbps = 500;
731 auto fixture = CreateTestFixture(
732 "pc_foreman_cif_500kbps_32pkts_queue",
Artem Titov1ff3c582020-07-01 15:20:37 +0200733 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200734 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
735 [](PeerConfigurer* alice) {
736 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200737 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000738 auto frame_generator = CreateFromYuvFileFrameGenerator(
739 video, ClipNameToClipPath("foreman_cif"));
740 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200741 },
742 [](PeerConfigurer* bob) {});
Artem Titovb92d3e62022-02-15 18:46:21 +0100743 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200744}
745
Jeremy Leconte4100d552020-09-11 18:02:36 +0200746TEST(PCFullStackTest, Pc_Foreman_Cif_500kbps_100ms) {
Artem Titov137f6c82019-05-17 10:51:15 +0200747 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
748 CreateNetworkEmulationManager();
749 BuiltInNetworkBehaviorConfig config;
750 config.queue_length_packets = 0;
751 config.queue_delay_ms = 100;
752 config.link_capacity_kbps = 500;
753 auto fixture = CreateTestFixture(
754 "pc_foreman_cif_500kbps_100ms",
Artem Titov1ff3c582020-07-01 15:20:37 +0200755 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200756 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
757 [](PeerConfigurer* alice) {
758 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200759 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000760 auto frame_generator = CreateFromYuvFileFrameGenerator(
761 video, ClipNameToClipPath("foreman_cif"));
762 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200763 },
764 [](PeerConfigurer* bob) {});
Artem Titovb92d3e62022-02-15 18:46:21 +0100765 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200766}
767
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200768TEST(PCGenericDescriptorTest,
Jeremy Leconte4100d552020-09-11 18:02:36 +0200769 Pc_Foreman_Cif_500kbps_100ms_32pkts_Queue_Generic_Descriptor) {
Artem Titov137f6c82019-05-17 10:51:15 +0200770 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
771 CreateNetworkEmulationManager();
772 BuiltInNetworkBehaviorConfig config;
773 config.queue_length_packets = 32;
774 config.queue_delay_ms = 100;
775 config.link_capacity_kbps = 500;
776 auto fixture = CreateTestFixture(
Danil Chapovalov636865e2020-06-03 14:11:26 +0200777 "pc_foreman_cif_500kbps_100ms_32pkts_queue_generic_descriptor",
Artem Titov1ff3c582020-07-01 15:20:37 +0200778 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200779 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
780 [](PeerConfigurer* alice) {
781 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200782 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000783 auto frame_generator = CreateFromYuvFileFrameGenerator(
784 video, ClipNameToClipPath("foreman_cif"));
785 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200786 },
787 [](PeerConfigurer* bob) {});
Artem Titovb92d3e62022-02-15 18:46:21 +0100788 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200789}
790
791/*
792// TODO(bugs.webrtc.org/10639) we need to disable send side bwe, but it isn't
Artem Titov39483c62019-07-19 17:03:52 +0200793// supported in PC level framework.
Artem Titov137f6c82019-05-17 10:51:15 +0200794TEST(PCFullStackTest, ForemanCif500kbps100msLimitedQueueRecvBwe) {
795 auto fixture = CreateVideoQualityTestFixture();
796 ParamsWithLogging foreman_cif;
797 foreman_cif.call.send_side_bwe = false;
798 foreman_cif.video[0] = {
799 true, 352, 288, 30,
800 30000, 500000, 2000000, false,
801 "VP8", 1, 0, 0,
802 false, false, true, ClipNameToClipPath("foreman_cif")};
803 foreman_cif.analyzer = {"foreman_cif_500kbps_100ms_32pkts_queue_recv_bwe",
804 0.0, 0.0, kTestDurationSec};
805 foreman_cif.config->queue_length_packets = 32;
806 foreman_cif.config->queue_delay_ms = 100;
807 foreman_cif.config->link_capacity_kbps = 500;
808 fixture->RunWithAnalyzer(foreman_cif);
809}
810*/
811
Jeremy Leconte4100d552020-09-11 18:02:36 +0200812TEST(PCFullStackTest, Pc_Foreman_Cif_1000kbps_100ms_32pkts_Queue) {
Artem Titov137f6c82019-05-17 10:51:15 +0200813 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
814 CreateNetworkEmulationManager();
815 BuiltInNetworkBehaviorConfig config;
816 config.queue_length_packets = 32;
817 config.queue_delay_ms = 100;
818 config.link_capacity_kbps = 1000;
819 auto fixture = CreateTestFixture(
820 "pc_foreman_cif_1000kbps_100ms_32pkts_queue",
Artem Titov1ff3c582020-07-01 15:20:37 +0200821 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200822 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
823 [](PeerConfigurer* alice) {
824 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200825 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000826 auto frame_generator = CreateFromYuvFileFrameGenerator(
827 video, ClipNameToClipPath("foreman_cif"));
828 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200829 },
830 [](PeerConfigurer* bob) {});
Artem Titovb92d3e62022-02-15 18:46:21 +0100831 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200832}
833
834// TODO(sprang): Remove this if we have the similar ModerateLimits below?
Jeremy Leconte4100d552020-09-11 18:02:36 +0200835TEST(PCFullStackTest, Pc_Conference_Motion_Hd_2000kbps_100ms_32pkts_Queue) {
Artem Titov137f6c82019-05-17 10:51:15 +0200836 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
837 CreateNetworkEmulationManager();
838 BuiltInNetworkBehaviorConfig config;
839 config.queue_length_packets = 32;
840 config.queue_delay_ms = 100;
841 config.link_capacity_kbps = 2000;
842 auto fixture = CreateTestFixture(
843 "pc_conference_motion_hd_2000kbps_100ms_32pkts_queue",
Artem Titov1ff3c582020-07-01 15:20:37 +0200844 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200845 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
846 [](PeerConfigurer* alice) {
847 VideoConfig video(1280, 720, 50);
Artem Titov137f6c82019-05-17 10:51:15 +0200848 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000849 auto frame_generator = CreateFromYuvFileFrameGenerator(
850 video, ClipNameToClipPath("ConferenceMotion_1280_720_50"));
851 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200852 },
853 [](PeerConfigurer* bob) {});
Artem Titovb92d3e62022-02-15 18:46:21 +0100854 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200855}
856
Artem Titov137f6c82019-05-17 10:51:15 +0200857/*
858// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
Danil Chapovalov636865e2020-06-03 14:11:26 +0200859TEST(PCGenericDescriptorTest, ConferenceMotionHd2TLModerateLimits) {
Artem Titov137f6c82019-05-17 10:51:15 +0200860 auto fixture = CreateVideoQualityTestFixture();
861 ParamsWithLogging conf_motion_hd;
862 conf_motion_hd.call.send_side_bwe = true;
863 conf_motion_hd.video[0] = {
864 true, 1280,
865 720, 50,
866 30000, 3000000,
867 3000000, false,
868 "VP8", 2,
869 -1, 0,
870 false, false,
871 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
872 conf_motion_hd.analyzer = {
Danil Chapovalov636865e2020-06-03 14:11:26 +0200873 "conference_motion_hd_2tl_moderate_limits_generic_descriptor", 0.0, 0.0,
Artem Titov137f6c82019-05-17 10:51:15 +0200874 kTestDurationSec};
875 conf_motion_hd.config->queue_length_packets = 50;
876 conf_motion_hd.config->loss_percent = 3;
877 conf_motion_hd.config->queue_delay_ms = 100;
878 conf_motion_hd.config->link_capacity_kbps = 2000;
879 conf_motion_hd.call.generic_descriptor = GenericDescriptorEnabled();
880 fixture->RunWithAnalyzer(conf_motion_hd);
881}
882
883// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
884TEST(PCFullStackTest, ConferenceMotionHd3TLModerateLimits) {
885 auto fixture = CreateVideoQualityTestFixture();
886 ParamsWithLogging conf_motion_hd;
887 conf_motion_hd.call.send_side_bwe = true;
888 conf_motion_hd.video[0] = {
889 true, 1280,
890 720, 50,
891 30000, 3000000,
892 3000000, false,
893 "VP8", 3,
894 -1, 0,
895 false, false,
896 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
897 conf_motion_hd.analyzer = {"conference_motion_hd_3tl_moderate_limits", 0.0,
898 0.0, kTestDurationSec};
899 conf_motion_hd.config->queue_length_packets = 50;
900 conf_motion_hd.config->loss_percent = 3;
901 conf_motion_hd.config->queue_delay_ms = 100;
902 conf_motion_hd.config->link_capacity_kbps = 2000;
903 fixture->RunWithAnalyzer(conf_motion_hd);
904}
905
906// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
907TEST(PCFullStackTest, ConferenceMotionHd4TLModerateLimits) {
908 auto fixture = CreateVideoQualityTestFixture();
909 ParamsWithLogging conf_motion_hd;
910 conf_motion_hd.call.send_side_bwe = true;
911 conf_motion_hd.video[0] = {
912 true, 1280,
913 720, 50,
914 30000, 3000000,
915 3000000, false,
916 "VP8", 4,
917 -1, 0,
918 false, false,
919 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
920 conf_motion_hd.analyzer = {"conference_motion_hd_4tl_moderate_limits", 0.0,
921 0.0, kTestDurationSec};
922 conf_motion_hd.config->queue_length_packets = 50;
923 conf_motion_hd.config->loss_percent = 3;
924 conf_motion_hd.config->queue_delay_ms = 100;
925 conf_motion_hd.config->link_capacity_kbps = 2000;
926 fixture->RunWithAnalyzer(conf_motion_hd);
927}
928
929// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
930TEST(PCFullStackTest, ConferenceMotionHd3TLModerateLimitsAltTLPattern) {
931 test::ScopedFieldTrials field_trial(
932 AppendFieldTrials("WebRTC-UseShortVP8TL3Pattern/Enabled/"));
933 auto fixture = CreateVideoQualityTestFixture();
934 ParamsWithLogging conf_motion_hd;
935 conf_motion_hd.call.send_side_bwe = true;
936 conf_motion_hd.video[0] = {
937 true, 1280,
938 720, 50,
939 30000, 3000000,
940 3000000, false,
941 "VP8", 3,
942 -1, 0,
943 false, false,
944 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
945 conf_motion_hd.analyzer = {"conference_motion_hd_3tl_alt_moderate_limits",
946 0.0, 0.0, kTestDurationSec};
947 conf_motion_hd.config->queue_length_packets = 50;
948 conf_motion_hd.config->loss_percent = 3;
949 conf_motion_hd.config->queue_delay_ms = 100;
950 conf_motion_hd.config->link_capacity_kbps = 2000;
951 fixture->RunWithAnalyzer(conf_motion_hd);
952}
953
954// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
955TEST(PCFullStackTest,
956 ConferenceMotionHd3TLModerateLimitsAltTLPatternAndBaseHeavyTLAllocation) {
957 auto fixture = CreateVideoQualityTestFixture();
958 test::ScopedFieldTrials field_trial(
959 AppendFieldTrials("WebRTC-UseShortVP8TL3Pattern/Enabled/"
960 "WebRTC-UseBaseHeavyVP8TL3RateAllocation/Enabled/"));
961 ParamsWithLogging conf_motion_hd;
962 conf_motion_hd.call.send_side_bwe = true;
963 conf_motion_hd.video[0] = {
964 true, 1280,
965 720, 50,
966 30000, 3000000,
967 3000000, false,
968 "VP8", 3,
969 -1, 0,
970 false, false,
971 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
972 conf_motion_hd.analyzer = {
973 "conference_motion_hd_3tl_alt_heavy_moderate_limits", 0.0, 0.0,
974 kTestDurationSec};
975 conf_motion_hd.config->queue_length_packets = 50;
976 conf_motion_hd.config->loss_percent = 3;
977 conf_motion_hd.config->queue_delay_ms = 100;
978 conf_motion_hd.config->link_capacity_kbps = 2000;
979 fixture->RunWithAnalyzer(conf_motion_hd);
980}
981*/
982
983#if defined(RTC_ENABLE_VP9)
Jeremy Leconte4100d552020-09-11 18:02:36 +0200984TEST(PCFullStackTest, Pc_Conference_Motion_Hd_2000kbps_100ms_32pkts_Queue_Vp9) {
Artem Titov137f6c82019-05-17 10:51:15 +0200985 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
986 CreateNetworkEmulationManager();
987 BuiltInNetworkBehaviorConfig config;
988 config.queue_length_packets = 32;
989 config.queue_delay_ms = 100;
990 config.link_capacity_kbps = 2000;
991 auto fixture = CreateTestFixture(
992 "pc_conference_motion_hd_2000kbps_100ms_32pkts_queue_vp9",
Artem Titov1ff3c582020-07-01 15:20:37 +0200993 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200994 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
995 [](PeerConfigurer* alice) {
996 VideoConfig video(1280, 720, 50);
Artem Titov137f6c82019-05-17 10:51:15 +0200997 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000998 auto frame_generator = CreateFromYuvFileFrameGenerator(
999 video, ClipNameToClipPath("ConferenceMotion_1280_720_50"));
1000 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Mirko Bonadei9d58f972021-07-15 17:14:54 +02001001 alice->SetVideoCodecs({VideoCodecConfig(
1002 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
1003 {kVP9FmtpProfileId,
1004 VP9ProfileToString(VP9Profile::kProfile0)}})});
Artem Titov137f6c82019-05-17 10:51:15 +02001005 },
Mirko Bonadei9d58f972021-07-15 17:14:54 +02001006 [](PeerConfigurer* bob) {
1007 bob->SetVideoCodecs({VideoCodecConfig(
1008 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
1009 {kVP9FmtpProfileId,
1010 VP9ProfileToString(VP9Profile::kProfile0)}})});
1011 });
Artem Titovb92d3e62022-02-15 18:46:21 +01001012 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +02001013}
1014#endif
1015
Jeremy Lecontec8850cb2020-09-10 20:46:33 +02001016TEST(PCFullStackTest, Pc_Screenshare_Slides_No_Conference_Mode) {
Artem Titov39483c62019-07-19 17:03:52 +02001017 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1018 CreateNetworkEmulationManager();
1019 auto fixture = CreateTestFixture(
1020 "pc_screenshare_slides_no_conference_mode",
Artem Titov1ff3c582020-07-01 15:20:37 +02001021 *network_emulation_manager->time_controller(),
Artem Titov39483c62019-07-19 17:03:52 +02001022 CreateTwoNetworkLinks(network_emulation_manager.get(),
1023 BuiltInNetworkBehaviorConfig()),
1024 [](PeerConfigurer* alice) {
1025 VideoConfig video(1850, 1110, 5);
Artem Titov39483c62019-07-19 17:03:52 +02001026 video.stream_label = "alice-video";
Andrey Logvin435fb9a2020-05-08 08:02:49 +00001027 video.content_hint = VideoTrackInterface::ContentHint::kText;
1028 auto frame_generator = CreateScreenShareFrameGenerator(
1029 video, ScreenShareConfig(TimeDelta::Seconds(10)));
Andrey Logvinc0644672020-05-05 10:33:01 +00001030 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov39483c62019-07-19 17:03:52 +02001031 },
1032 [](PeerConfigurer* bob) {});
Artem Titovb92d3e62022-02-15 18:46:21 +01001033 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +02001034}
1035
Jeremy Lecontec8850cb2020-09-10 20:46:33 +02001036TEST(PCFullStackTest, Pc_Screenshare_Slides) {
Artem Titov39483c62019-07-19 17:03:52 +02001037 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1038 CreateNetworkEmulationManager();
1039 auto fixture = CreateTestFixture(
Artem Titov1ff3c582020-07-01 15:20:37 +02001040 "pc_screenshare_slides", *network_emulation_manager->time_controller(),
Artem Titov39483c62019-07-19 17:03:52 +02001041 CreateTwoNetworkLinks(network_emulation_manager.get(),
1042 BuiltInNetworkBehaviorConfig()),
1043 [](PeerConfigurer* alice) {
1044 VideoConfig video(1850, 1110, 5);
Artem Titov39483c62019-07-19 17:03:52 +02001045 video.stream_label = "alice-video";
Andrey Logvin435fb9a2020-05-08 08:02:49 +00001046 video.content_hint = VideoTrackInterface::ContentHint::kText;
1047 auto frame_generator = CreateScreenShareFrameGenerator(
1048 video, ScreenShareConfig(TimeDelta::Seconds(10)));
Andrey Logvinc0644672020-05-05 10:33:01 +00001049 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov39483c62019-07-19 17:03:52 +02001050 },
1051 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +01001052 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titov39483c62019-07-19 17:03:52 +02001053 run_params.use_conference_mode = true;
1054 fixture->Run(std::move(run_params));
1055}
1056
1057// TODO(bugs.webrtc.org/9840): Investigate why is this test flaky on Win/Mac.
1058#if !defined(WEBRTC_MAC) && !defined(WEBRTC_WIN)
Jeremy Lecontec8850cb2020-09-10 20:46:33 +02001059TEST(PCFullStackTest, Pc_Screenshare_Slides_Simulcast_No_Conference_Mode) {
Artem Titov39483c62019-07-19 17:03:52 +02001060 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1061 CreateNetworkEmulationManager();
1062 auto fixture = CreateTestFixture(
1063 "pc_screenshare_slides_simulcast_no_conference_mode",
Artem Titov1ff3c582020-07-01 15:20:37 +02001064 *network_emulation_manager->time_controller(),
Artem Titov39483c62019-07-19 17:03:52 +02001065 CreateTwoNetworkLinks(network_emulation_manager.get(),
1066 BuiltInNetworkBehaviorConfig()),
1067 [](PeerConfigurer* alice) {
Artem Titov4b9701e2019-08-28 13:48:02 +02001068 VideoConfig video(1850, 1110, 30);
Florent Castellibfdb9572022-08-29 14:19:46 +02001069 video.simulcast_config = VideoSimulcastConfig(2);
1070 video.emulated_sfu_config = EmulatedSFUConfig(1);
Artem Titov4b9701e2019-08-28 13:48:02 +02001071 video.temporal_layers_count = 2;
Artem Titov39483c62019-07-19 17:03:52 +02001072 video.stream_label = "alice-video";
Andrey Logvin435fb9a2020-05-08 08:02:49 +00001073 video.content_hint = VideoTrackInterface::ContentHint::kText;
1074 auto frame_generator = CreateScreenShareFrameGenerator(
1075 video, ScreenShareConfig(TimeDelta::Seconds(10)));
Andrey Logvinc0644672020-05-05 10:33:01 +00001076 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov39483c62019-07-19 17:03:52 +02001077 },
1078 [](PeerConfigurer* bob) {});
Artem Titovb92d3e62022-02-15 18:46:21 +01001079 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov39483c62019-07-19 17:03:52 +02001080}
1081
Jeremy Lecontec8850cb2020-09-10 20:46:33 +02001082TEST(PCFullStackTest, Pc_Screenshare_Slides_Simulcast) {
Artem Titov39483c62019-07-19 17:03:52 +02001083 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1084 CreateNetworkEmulationManager();
1085 auto fixture = CreateTestFixture(
1086 "pc_screenshare_slides_simulcast",
Artem Titov1ff3c582020-07-01 15:20:37 +02001087 *network_emulation_manager->time_controller(),
Artem Titov39483c62019-07-19 17:03:52 +02001088 CreateTwoNetworkLinks(network_emulation_manager.get(),
1089 BuiltInNetworkBehaviorConfig()),
1090 [](PeerConfigurer* alice) {
Artem Titov4b9701e2019-08-28 13:48:02 +02001091 VideoConfig video(1850, 1110, 30);
Florent Castellibfdb9572022-08-29 14:19:46 +02001092 video.simulcast_config = VideoSimulcastConfig(2);
1093 video.emulated_sfu_config = EmulatedSFUConfig(1);
Artem Titov4b9701e2019-08-28 13:48:02 +02001094 video.temporal_layers_count = 2;
Artem Titov39483c62019-07-19 17:03:52 +02001095 video.stream_label = "alice-video";
Andrey Logvin435fb9a2020-05-08 08:02:49 +00001096 video.content_hint = VideoTrackInterface::ContentHint::kText;
1097 auto frame_generator = CreateScreenShareFrameGenerator(
1098 video, ScreenShareConfig(TimeDelta::Seconds(10)));
Andrey Logvinc0644672020-05-05 10:33:01 +00001099 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov39483c62019-07-19 17:03:52 +02001100 },
1101 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +01001102 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titov39483c62019-07-19 17:03:52 +02001103 run_params.use_conference_mode = true;
1104 fixture->Run(std::move(run_params));
1105}
1106#endif // !defined(WEBRTC_MAC) && !defined(WEBRTC_WIN)
1107
1108/*
Artem Titov137f6c82019-05-17 10:51:15 +02001109#if !defined(WEBRTC_MAC)
Artem Titov137f6c82019-05-17 10:51:15 +02001110// TODO(bugs.webrtc.org/9840): Investigate why is this test flaky on Win/Mac.
1111#if !defined(WEBRTC_WIN)
Artem Titov137f6c82019-05-17 10:51:15 +02001112// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1113TEST(PCFullStackTest, ScreenshareSlidesVP8_2TL_Simulcast_low) {
Artem Titov137f6c82019-05-17 10:51:15 +02001114 auto fixture = CreateVideoQualityTestFixture();
1115 ParamsWithLogging screenshare;
1116 screenshare.call.send_side_bwe = true;
1117 screenshare.screenshare[0] = {true, false, 10};
1118 screenshare.video[0] = {true, 1850, 1110, 30, 800000, 2500000,
1119 2500000, false, "VP8", 2, 1, 400000,
1120 false, false, false, ""};
1121 screenshare.analyzer = {"screenshare_slides_simulcast_low", 0.0, 0.0,
1122 kTestDurationSec};
1123 VideoQualityTest::Params screenshare_params_high;
1124 screenshare_params_high.video[0] = {
1125 true, 1850, 1110, 60, 600000, 1250000, 1250000, false,
1126 "VP8", 2, 0, 400000, false, false, false, ""};
1127 VideoQualityTest::Params screenshare_params_low;
1128 screenshare_params_low.video[0] = {true, 1850, 1110, 5, 30000, 200000,
1129 1000000, false, "VP8", 2, 0, 400000,
1130 false, false, false, ""};
1131
1132 std::vector<VideoStream> streams = {
1133 VideoQualityTest::DefaultVideoStream(screenshare_params_low, 0),
1134 VideoQualityTest::DefaultVideoStream(screenshare_params_high, 0)};
1135 screenshare.ss[0] = {
1136 streams, 0, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1137 false};
1138 fixture->RunWithAnalyzer(screenshare);
1139}
1140
1141#endif // !defined(WEBRTC_WIN)
1142#endif // !defined(WEBRTC_MAC)
1143
1144// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1145TEST(PCFullStackTest, ScreenshareSlidesVP8_2TL_Scroll) {
1146 auto fixture = CreateVideoQualityTestFixture();
1147 ParamsWithLogging config;
1148 config.call.send_side_bwe = true;
1149 config.video[0] = {true, 1850, 1110 / 2, 5, 50000, 200000,
1150 1000000, false, "VP8", 2, 1, 400000,
1151 false, false, false, ""};
1152 config.screenshare[0] = {true, false, 10, 2};
1153 config.analyzer = {"screenshare_slides_scrolling", 0.0, 0.0,
1154 kTestDurationSec};
1155 fixture->RunWithAnalyzer(config);
1156}
1157
1158// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
Jeremy Lecontec8850cb2020-09-10 20:46:33 +02001159TEST(PCGenericDescriptorTest, Screenshare_Slides_Lossy_Net_Generic_Descriptor) {
Artem Titov137f6c82019-05-17 10:51:15 +02001160 auto fixture = CreateVideoQualityTestFixture();
1161 ParamsWithLogging screenshare;
1162 screenshare.call.send_side_bwe = true;
1163 screenshare.video[0] = {true, 1850, 1110, 5, 50000, 200000,
1164 1000000, false, "VP8", 2, 1, 400000,
1165 false, false, false, ""};
1166 screenshare.screenshare[0] = {true, false, 10};
Danil Chapovalov636865e2020-06-03 14:11:26 +02001167 screenshare.analyzer = {"screenshare_slides_lossy_net_generic_descriptor",
1168 0.0, 0.0, kTestDurationSec};
Artem Titov137f6c82019-05-17 10:51:15 +02001169 screenshare.config->loss_percent = 5;
1170 screenshare.config->queue_delay_ms = 200;
1171 screenshare.config->link_capacity_kbps = 500;
Danil Chapovalov636865e2020-06-03 14:11:26 +02001172 screenshare.call.generic_descriptor = true;
Artem Titov137f6c82019-05-17 10:51:15 +02001173 fixture->RunWithAnalyzer(screenshare);
1174}
1175
1176// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1177TEST(PCFullStackTest, ScreenshareSlidesVP8_2TL_VeryLossyNet) {
1178 auto fixture = CreateVideoQualityTestFixture();
1179 ParamsWithLogging screenshare;
1180 screenshare.call.send_side_bwe = true;
1181 screenshare.video[0] = {true, 1850, 1110, 5, 50000, 200000,
1182 1000000, false, "VP8", 2, 1, 400000,
1183 false, false, false, ""};
1184 screenshare.screenshare[0] = {true, false, 10};
1185 screenshare.analyzer = {"screenshare_slides_very_lossy", 0.0, 0.0,
1186 kTestDurationSec};
1187 screenshare.config->loss_percent = 10;
1188 screenshare.config->queue_delay_ms = 200;
1189 screenshare.config->link_capacity_kbps = 500;
1190 fixture->RunWithAnalyzer(screenshare);
1191}
1192
1193// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1194TEST(PCFullStackTest, ScreenshareSlidesVP8_2TL_LossyNetRestrictedQueue) {
1195 auto fixture = CreateVideoQualityTestFixture();
1196 ParamsWithLogging screenshare;
1197 screenshare.call.send_side_bwe = true;
1198 screenshare.video[0] = {true, 1850, 1110, 5, 50000, 200000,
1199 1000000, false, "VP8", 2, 1, 400000,
1200 false, false, false, ""};
1201 screenshare.screenshare[0] = {true, false, 10};
1202 screenshare.analyzer = {"screenshare_slides_lossy_limited", 0.0, 0.0,
1203 kTestDurationSec};
1204 screenshare.config->loss_percent = 5;
1205 screenshare.config->link_capacity_kbps = 200;
1206 screenshare.config->queue_length_packets = 30;
1207
1208 fixture->RunWithAnalyzer(screenshare);
1209}
1210
1211// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1212TEST(PCFullStackTest, ScreenshareSlidesVP8_2TL_ModeratelyRestricted) {
1213 auto fixture = CreateVideoQualityTestFixture();
1214 ParamsWithLogging screenshare;
1215 screenshare.call.send_side_bwe = true;
1216 screenshare.video[0] = {true, 1850, 1110, 5, 50000, 200000,
1217 1000000, false, "VP8", 2, 1, 400000,
1218 false, false, false, ""};
1219 screenshare.screenshare[0] = {true, false, 10};
1220 screenshare.analyzer = {"screenshare_slides_moderately_restricted", 0.0, 0.0,
1221 kTestDurationSec};
1222 screenshare.config->loss_percent = 1;
1223 screenshare.config->link_capacity_kbps = 1200;
1224 screenshare.config->queue_length_packets = 30;
1225
1226 fixture->RunWithAnalyzer(screenshare);
1227}
1228
1229namespace {
1230// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1231// Since ParamsWithLogging::Video is not trivially destructible, we can't
1232// store these structs as const globals.
1233ParamsWithLogging::Video SvcVp9Video() {
1234 return ParamsWithLogging::Video{
1235 true, 1280,
1236 720, 30,
1237 800000, 2500000,
1238 2500000, false,
1239 "VP9", 3,
1240 2, 400000,
1241 false, false,
1242 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
1243}
1244
1245ParamsWithLogging::Video SimulcastVp8VideoHigh() {
1246 return ParamsWithLogging::Video{
1247 true, 1280,
1248 720, 30,
1249 800000, 2500000,
1250 2500000, false,
1251 "VP8", 3,
1252 2, 400000,
1253 false, false,
1254 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
1255}
1256
1257ParamsWithLogging::Video SimulcastVp8VideoMedium() {
1258 return ParamsWithLogging::Video{
1259 true, 640,
1260 360, 30,
1261 150000, 500000,
1262 700000, false,
1263 "VP8", 3,
1264 2, 400000,
1265 false, false,
1266 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
1267}
1268
1269ParamsWithLogging::Video SimulcastVp8VideoLow() {
1270 return ParamsWithLogging::Video{
1271 true, 320,
1272 180, 30,
1273 30000, 150000,
1274 200000, false,
1275 "VP8", 3,
1276 2, 400000,
1277 false, false,
1278 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
1279}
1280} // namespace
Artem Titov733a7812019-07-24 14:53:15 +02001281*/
Artem Titov137f6c82019-05-17 10:51:15 +02001282
1283#if defined(RTC_ENABLE_VP9)
1284
Jeremy Leconte4100d552020-09-11 18:02:36 +02001285TEST(PCFullStackTest, Pc_Screenshare_Slides_Vp9_3sl_High_Fps) {
Artem Titov1e49ab22019-07-30 13:17:25 +02001286 webrtc::test::ScopedFieldTrials override_trials(
1287 AppendFieldTrials("WebRTC-Vp9InterLayerPred/"
1288 "Enabled,inter_layer_pred_mode:on/"));
Artem Titov733a7812019-07-24 14:53:15 +02001289 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1290 CreateNetworkEmulationManager();
1291 auto fixture = CreateTestFixture(
1292 "pc_screenshare_slides_vp9_3sl_high_fps",
Artem Titov1ff3c582020-07-01 15:20:37 +02001293 *network_emulation_manager->time_controller(),
Artem Titov733a7812019-07-24 14:53:15 +02001294 CreateTwoNetworkLinks(network_emulation_manager.get(),
1295 BuiltInNetworkBehaviorConfig()),
1296 [](PeerConfigurer* alice) {
1297 VideoConfig video(1850, 1110, 30);
1298 video.stream_label = "alice-video";
Florent Castellibfdb9572022-08-29 14:19:46 +02001299 video.simulcast_config = VideoSimulcastConfig(3);
1300 video.emulated_sfu_config = EmulatedSFUConfig(2);
Andrey Logvin435fb9a2020-05-08 08:02:49 +00001301 video.content_hint = VideoTrackInterface::ContentHint::kText;
1302 auto frame_generator = CreateScreenShareFrameGenerator(
1303 video, ScreenShareConfig(TimeDelta::Seconds(10)));
Andrey Logvinc0644672020-05-05 10:33:01 +00001304 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Mirko Bonadei9d58f972021-07-15 17:14:54 +02001305 alice->SetVideoCodecs({VideoCodecConfig(
1306 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
1307 {kVP9FmtpProfileId,
1308 VP9ProfileToString(VP9Profile::kProfile0)}})});
Artem Titov733a7812019-07-24 14:53:15 +02001309 },
Mirko Bonadei9d58f972021-07-15 17:14:54 +02001310 [](PeerConfigurer* bob) {
1311 bob->SetVideoCodecs({VideoCodecConfig(
1312 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
1313 {kVP9FmtpProfileId,
1314 VP9ProfileToString(VP9Profile::kProfile0)}})});
1315 });
Artem Titovb92d3e62022-02-15 18:46:21 +01001316 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +02001317}
1318
Jeremy Leconte4100d552020-09-11 18:02:36 +02001319TEST(PCFullStackTest, Pc_Vp9svc_3sl_High) {
Artem Titov1e49ab22019-07-30 13:17:25 +02001320 webrtc::test::ScopedFieldTrials override_trials(
1321 AppendFieldTrials("WebRTC-Vp9InterLayerPred/"
1322 "Enabled,inter_layer_pred_mode:on/"));
1323 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1324 CreateNetworkEmulationManager();
1325 auto fixture = CreateTestFixture(
Artem Titov1ff3c582020-07-01 15:20:37 +02001326 "pc_vp9svc_3sl_high", *network_emulation_manager->time_controller(),
Artem Titov1e49ab22019-07-30 13:17:25 +02001327 CreateTwoNetworkLinks(network_emulation_manager.get(),
1328 BuiltInNetworkBehaviorConfig()),
1329 [](PeerConfigurer* alice) {
1330 VideoConfig video(1280, 720, 30);
1331 video.stream_label = "alice-video";
Florent Castellibfdb9572022-08-29 14:19:46 +02001332 video.simulcast_config = VideoSimulcastConfig(3);
1333 video.emulated_sfu_config = EmulatedSFUConfig(2);
Artem Titov1e49ab22019-07-30 13:17:25 +02001334 video.temporal_layers_count = 3;
Andrey Logvinc0644672020-05-05 10:33:01 +00001335 auto frame_generator = CreateFromYuvFileFrameGenerator(
1336 video, ClipNameToClipPath("ConferenceMotion_1280_720_50"));
1337 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Mirko Bonadei9d58f972021-07-15 17:14:54 +02001338 alice->SetVideoCodecs({VideoCodecConfig(
1339 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
1340 {kVP9FmtpProfileId,
1341 VP9ProfileToString(VP9Profile::kProfile0)}})});
Artem Titov1e49ab22019-07-30 13:17:25 +02001342 },
Mirko Bonadei9d58f972021-07-15 17:14:54 +02001343 [](PeerConfigurer* bob) {
1344 bob->SetVideoCodecs({VideoCodecConfig(
1345 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
1346 {kVP9FmtpProfileId,
1347 VP9ProfileToString(VP9Profile::kProfile0)}})});
1348 });
Artem Titovb92d3e62022-02-15 18:46:21 +01001349 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov1e49ab22019-07-30 13:17:25 +02001350}
1351
Jeremy Leconte4100d552020-09-11 18:02:36 +02001352TEST(PCFullStackTest, Pc_Vp9svc_3sl_Low) {
Artem Titov1e49ab22019-07-30 13:17:25 +02001353 webrtc::test::ScopedFieldTrials override_trials(
1354 AppendFieldTrials("WebRTC-Vp9InterLayerPred/"
1355 "Enabled,inter_layer_pred_mode:on/"));
1356 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1357 CreateNetworkEmulationManager();
1358 auto fixture = CreateTestFixture(
Artem Titov1ff3c582020-07-01 15:20:37 +02001359 "pc_vp9svc_3sl_low", *network_emulation_manager->time_controller(),
Artem Titov1e49ab22019-07-30 13:17:25 +02001360 CreateTwoNetworkLinks(network_emulation_manager.get(),
1361 BuiltInNetworkBehaviorConfig()),
1362 [](PeerConfigurer* alice) {
1363 VideoConfig video(1280, 720, 30);
1364 video.stream_label = "alice-video";
Florent Castellibfdb9572022-08-29 14:19:46 +02001365 video.simulcast_config = VideoSimulcastConfig(3);
1366 video.emulated_sfu_config = EmulatedSFUConfig(0);
Artem Titov1e49ab22019-07-30 13:17:25 +02001367 video.temporal_layers_count = 3;
Andrey Logvinc0644672020-05-05 10:33:01 +00001368 auto frame_generator = CreateFromYuvFileFrameGenerator(
1369 video, ClipNameToClipPath("ConferenceMotion_1280_720_50"));
1370 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Mirko Bonadei9d58f972021-07-15 17:14:54 +02001371 alice->SetVideoCodecs({VideoCodecConfig(
1372 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
1373 {kVP9FmtpProfileId,
1374 VP9ProfileToString(VP9Profile::kProfile0)}})});
Artem Titov1e49ab22019-07-30 13:17:25 +02001375 },
Mirko Bonadei9d58f972021-07-15 17:14:54 +02001376 [](PeerConfigurer* bob) {
1377 bob->SetVideoCodecs({VideoCodecConfig(
1378 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
1379 {kVP9FmtpProfileId,
1380 VP9ProfileToString(VP9Profile::kProfile0)}})});
1381 });
Artem Titovb92d3e62022-02-15 18:46:21 +01001382 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov1e49ab22019-07-30 13:17:25 +02001383}
1384
Artem Titov733a7812019-07-24 14:53:15 +02001385#endif // defined(RTC_ENABLE_VP9)
1386
1387/*
Artem Titov137f6c82019-05-17 10:51:15 +02001388// bugs.webrtc.org/9506
1389#if !defined(WEBRTC_MAC)
1390
1391// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1392TEST(PCFullStackTest, VP9KSVC_3SL_High) {
1393 webrtc::test::ScopedFieldTrials override_trials(
1394 AppendFieldTrials("WebRTC-Vp9IssueKeyFrameOnLayerDeactivation/Enabled/"));
1395 auto fixture = CreateVideoQualityTestFixture();
1396 ParamsWithLogging simulcast;
1397 simulcast.call.send_side_bwe = true;
1398 simulcast.video[0] = SvcVp9Video();
1399 simulcast.analyzer = {"vp9ksvc_3sl_high", 0.0, 0.0, kTestDurationSec};
1400 simulcast.ss[0] = {
1401 std::vector<VideoStream>(), 0, 3, 2, InterLayerPredMode::kOnKeyPic,
1402 std::vector<SpatialLayer>(), false};
1403 fixture->RunWithAnalyzer(simulcast);
1404}
1405
1406// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1407TEST(PCFullStackTest, VP9KSVC_3SL_Medium) {
1408 webrtc::test::ScopedFieldTrials override_trials(
1409 AppendFieldTrials("WebRTC-Vp9IssueKeyFrameOnLayerDeactivation/Enabled/"));
1410 auto fixture = CreateVideoQualityTestFixture();
1411 ParamsWithLogging simulcast;
1412 simulcast.call.send_side_bwe = true;
1413 simulcast.video[0] = SvcVp9Video();
1414 simulcast.analyzer = {"vp9ksvc_3sl_medium", 0.0, 0.0, kTestDurationSec};
1415 simulcast.ss[0] = {
1416 std::vector<VideoStream>(), 0, 3, 1, InterLayerPredMode::kOnKeyPic,
1417 std::vector<SpatialLayer>(), false};
1418 fixture->RunWithAnalyzer(simulcast);
1419}
1420
1421// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1422TEST(PCFullStackTest, VP9KSVC_3SL_Low) {
1423 webrtc::test::ScopedFieldTrials override_trials(
1424 AppendFieldTrials("WebRTC-Vp9IssueKeyFrameOnLayerDeactivation/Enabled/"));
1425 auto fixture = CreateVideoQualityTestFixture();
1426 ParamsWithLogging simulcast;
1427 simulcast.call.send_side_bwe = true;
1428 simulcast.video[0] = SvcVp9Video();
1429 simulcast.analyzer = {"vp9ksvc_3sl_low", 0.0, 0.0, kTestDurationSec};
1430 simulcast.ss[0] = {
1431 std::vector<VideoStream>(), 0, 3, 0, InterLayerPredMode::kOnKeyPic,
1432 std::vector<SpatialLayer>(), false};
1433 fixture->RunWithAnalyzer(simulcast);
1434}
1435
1436// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1437TEST(PCFullStackTest, VP9KSVC_3SL_Medium_Network_Restricted) {
1438 webrtc::test::ScopedFieldTrials override_trials(
1439 AppendFieldTrials("WebRTC-Vp9IssueKeyFrameOnLayerDeactivation/Enabled/"));
1440 auto fixture = CreateVideoQualityTestFixture();
1441 ParamsWithLogging simulcast;
1442 simulcast.call.send_side_bwe = true;
1443 simulcast.video[0] = SvcVp9Video();
1444 simulcast.analyzer = {"vp9ksvc_3sl_medium_network_restricted", 0.0, 0.0,
1445 kTestDurationSec};
1446 simulcast.ss[0] = {
1447 std::vector<VideoStream>(), 0, 3, -1, InterLayerPredMode::kOnKeyPic,
1448 std::vector<SpatialLayer>(), false};
1449 simulcast.config->link_capacity_kbps = 1000;
1450 simulcast.config->queue_delay_ms = 100;
1451 fixture->RunWithAnalyzer(simulcast);
1452}
1453
1454// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1455// TODO(webrtc:9722): Remove when experiment is cleaned up.
1456TEST(PCFullStackTest, VP9KSVC_3SL_Medium_Network_Restricted_Trusted_Rate) {
1457 webrtc::test::ScopedFieldTrials override_trials(
Mirko Bonadeie39b3782020-09-24 14:02:39 +02001458 AppendFieldTrials("WebRTC-Vp9IssueKeyFrameOnLayerDeactivation/Enabled/"));
Artem Titov137f6c82019-05-17 10:51:15 +02001459 auto fixture = CreateVideoQualityTestFixture();
1460 ParamsWithLogging simulcast;
1461 simulcast.call.send_side_bwe = true;
1462 simulcast.video[0] = SvcVp9Video();
1463 simulcast.analyzer = {"vp9ksvc_3sl_medium_network_restricted_trusted_rate",
1464 0.0, 0.0, kTestDurationSec};
1465 simulcast.ss[0] = {
1466 std::vector<VideoStream>(), 0, 3, -1, InterLayerPredMode::kOnKeyPic,
1467 std::vector<SpatialLayer>(), false};
1468 simulcast.config->link_capacity_kbps = 1000;
1469 simulcast.config->queue_delay_ms = 100;
1470 fixture->RunWithAnalyzer(simulcast);
1471}
1472#endif // !defined(WEBRTC_MAC)
1473
1474#endif // defined(RTC_ENABLE_VP9)
Artem Titov39483c62019-07-19 17:03:52 +02001475*/
Artem Titov137f6c82019-05-17 10:51:15 +02001476
1477// Android bots can't handle FullHD, so disable the test.
1478// TODO(bugs.webrtc.org/9220): Investigate source of flakiness on Mac.
1479#if defined(WEBRTC_ANDROID) || defined(WEBRTC_MAC)
Jeremy Lecontec8850cb2020-09-10 20:46:33 +02001480#define MAYBE_Pc_Simulcast_HD_High DISABLED_Pc_Simulcast_HD_High
Artem Titov137f6c82019-05-17 10:51:15 +02001481#else
Jeremy Lecontec8850cb2020-09-10 20:46:33 +02001482#define MAYBE_Pc_Simulcast_HD_High Pc_Simulcast_HD_High
Artem Titov137f6c82019-05-17 10:51:15 +02001483#endif
Jeremy Lecontec8850cb2020-09-10 20:46:33 +02001484TEST(PCFullStackTest, MAYBE_Pc_Simulcast_HD_High) {
Artem Titov137f6c82019-05-17 10:51:15 +02001485 webrtc::test::ScopedFieldTrials override_trials(AppendFieldTrials(
1486 "WebRTC-ForceSimulatedOveruseIntervalMs/1000-50000-300/"));
Artem Titov39483c62019-07-19 17:03:52 +02001487 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1488 CreateNetworkEmulationManager();
1489 BuiltInNetworkBehaviorConfig config;
1490 config.loss_percent = 0;
1491 config.queue_delay_ms = 100;
1492 auto fixture = CreateTestFixture(
Artem Titov1ff3c582020-07-01 15:20:37 +02001493 "pc_simulcast_HD_high", *network_emulation_manager->time_controller(),
Artem Titov39483c62019-07-19 17:03:52 +02001494 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
1495 [](PeerConfigurer* alice) {
1496 VideoConfig video(1920, 1080, 30);
Florent Castellibfdb9572022-08-29 14:19:46 +02001497 video.simulcast_config = VideoSimulcastConfig(3);
1498 video.emulated_sfu_config = EmulatedSFUConfig(2);
Artem Titov4b9701e2019-08-28 13:48:02 +02001499 video.temporal_layers_count = 3;
Artem Titov39483c62019-07-19 17:03:52 +02001500 video.stream_label = "alice-video";
Andrey Logvin42c59522020-05-06 12:18:26 +00001501 alice->AddVideoConfig(std::move(video));
Artem Titov39483c62019-07-19 17:03:52 +02001502 },
1503 [](PeerConfigurer* bob) {});
Artem Titovb92d3e62022-02-15 18:46:21 +01001504 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +02001505}
1506
Jeremy Leconte4100d552020-09-11 18:02:36 +02001507TEST(PCFullStackTest, Pc_Simulcast_Vp8_3sl_High) {
Artem Titov39483c62019-07-19 17:03:52 +02001508 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1509 CreateNetworkEmulationManager();
1510 BuiltInNetworkBehaviorConfig config;
1511 config.loss_percent = 0;
1512 config.queue_delay_ms = 100;
1513 auto fixture = CreateTestFixture(
1514 "pc_simulcast_vp8_3sl_high",
Artem Titov1ff3c582020-07-01 15:20:37 +02001515 *network_emulation_manager->time_controller(),
Artem Titov39483c62019-07-19 17:03:52 +02001516 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
1517 [](PeerConfigurer* alice) {
1518 VideoConfig video(1280, 720, 30);
Florent Castellibfdb9572022-08-29 14:19:46 +02001519 video.simulcast_config = VideoSimulcastConfig(3);
1520 video.emulated_sfu_config = EmulatedSFUConfig(2);
Artem Titov39483c62019-07-19 17:03:52 +02001521 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +00001522 auto frame_generator = CreateFromYuvFileFrameGenerator(
1523 video, ClipNameToClipPath("ConferenceMotion_1280_720_50"));
1524 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov39483c62019-07-19 17:03:52 +02001525 },
1526 [](PeerConfigurer* bob) {});
Artem Titovb92d3e62022-02-15 18:46:21 +01001527 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +02001528}
1529
Jeremy Leconte4100d552020-09-11 18:02:36 +02001530TEST(PCFullStackTest, Pc_Simulcast_Vp8_3sl_Low) {
Artem Titov39483c62019-07-19 17:03:52 +02001531 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1532 CreateNetworkEmulationManager();
1533 BuiltInNetworkBehaviorConfig config;
1534 config.loss_percent = 0;
1535 config.queue_delay_ms = 100;
1536 auto fixture = CreateTestFixture(
Artem Titov1ff3c582020-07-01 15:20:37 +02001537 "pc_simulcast_vp8_3sl_low", *network_emulation_manager->time_controller(),
Artem Titov39483c62019-07-19 17:03:52 +02001538 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
1539 [](PeerConfigurer* alice) {
1540 VideoConfig video(1280, 720, 30);
Florent Castellibfdb9572022-08-29 14:19:46 +02001541 video.simulcast_config = VideoSimulcastConfig(3);
1542 video.emulated_sfu_config = EmulatedSFUConfig(0);
Artem Titov39483c62019-07-19 17:03:52 +02001543 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +00001544 auto frame_generator = CreateFromYuvFileFrameGenerator(
1545 video, ClipNameToClipPath("ConferenceMotion_1280_720_50"));
1546 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov39483c62019-07-19 17:03:52 +02001547 },
1548 [](PeerConfigurer* bob) {});
Artem Titovb92d3e62022-02-15 18:46:21 +01001549 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +02001550}
1551
Artem Titov39483c62019-07-19 17:03:52 +02001552/*
Artem Titov137f6c82019-05-17 10:51:15 +02001553// This test assumes ideal network conditions with target bandwidth being
1554// available and exercises WebRTC calls with a high target bitrate(100 Mbps).
1555// Android32 bots can't handle this high bitrate, so disable test for those.
1556#if defined(WEBRTC_ANDROID)
1557#define MAYBE_HighBitrateWithFakeCodec DISABLED_HighBitrateWithFakeCodec
1558#else
1559#define MAYBE_HighBitrateWithFakeCodec HighBitrateWithFakeCodec
1560#endif // defined(WEBRTC_ANDROID)
1561// TODO(bugs.webrtc.org/10639) Disabled because target bitrate can't be
1562configured yet. TEST(PCFullStackTest, MAYBE_HighBitrateWithFakeCodec) { auto
1563fixture = CreateVideoQualityTestFixture(); const int target_bitrate = 100000000;
1564 ParamsWithLogging generator;
1565 generator.call.send_side_bwe = true;
1566 generator.call.call_bitrate_config.min_bitrate_bps = target_bitrate;
1567 generator.call.call_bitrate_config.start_bitrate_bps = target_bitrate;
1568 generator.call.call_bitrate_config.max_bitrate_bps = target_bitrate;
1569 generator.video[0] = {true,
1570 360,
1571 240,
1572 30,
1573 target_bitrate / 2,
1574 target_bitrate,
1575 target_bitrate * 2,
1576 false,
1577 "FakeCodec",
1578 1,
1579 0,
1580 0,
1581 false,
1582 false,
1583 false,
1584 "Generator"};
1585 generator.analyzer = {"high_bitrate_with_fake_codec", 0.0, 0.0,
1586 kTestDurationSec};
1587 fixture->RunWithAnalyzer(generator);
1588}
1589
1590// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1591TEST(PCFullStackTest, LargeRoomVP8_5thumb) {
1592 auto fixture = CreateVideoQualityTestFixture();
1593 ParamsWithLogging large_room;
1594 large_room.call.send_side_bwe = true;
1595 large_room.video[0] = SimulcastVp8VideoHigh();
1596 large_room.analyzer = {"largeroom_5thumb", 0.0, 0.0, kTestDurationSec};
1597 large_room.config->loss_percent = 0;
1598 large_room.config->queue_delay_ms = 100;
1599 ParamsWithLogging video_params_high;
1600 video_params_high.video[0] = SimulcastVp8VideoHigh();
1601 ParamsWithLogging video_params_medium;
1602 video_params_medium.video[0] = SimulcastVp8VideoMedium();
1603 ParamsWithLogging video_params_low;
1604 video_params_low.video[0] = SimulcastVp8VideoLow();
1605
1606 std::vector<VideoStream> streams = {
1607 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
1608 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
1609 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
1610 large_room.call.num_thumbnails = 5;
1611 large_room.ss[0] = {
1612 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1613 false};
1614 fixture->RunWithAnalyzer(large_room);
1615}
1616
1617#if defined(WEBRTC_ANDROID) || defined(WEBRTC_IOS)
1618// Fails on mobile devices:
1619// https://bugs.chromium.org/p/webrtc/issues/detail?id=7301
1620#define MAYBE_LargeRoomVP8_50thumb DISABLED_LargeRoomVP8_50thumb
1621#define MAYBE_LargeRoomVP8_15thumb DISABLED_LargeRoomVP8_15thumb
1622#else
1623#define MAYBE_LargeRoomVP8_50thumb LargeRoomVP8_50thumb
1624#define MAYBE_LargeRoomVP8_15thumb LargeRoomVP8_15thumb
1625#endif
1626// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1627TEST(PCFullStackTest, MAYBE_LargeRoomVP8_15thumb) {
1628 auto fixture = CreateVideoQualityTestFixture();
1629 ParamsWithLogging large_room;
1630 large_room.call.send_side_bwe = true;
1631 large_room.video[0] = SimulcastVp8VideoHigh();
1632 large_room.analyzer = {"largeroom_15thumb", 0.0, 0.0, kTestDurationSec};
1633 large_room.config->loss_percent = 0;
1634 large_room.config->queue_delay_ms = 100;
1635 ParamsWithLogging video_params_high;
1636 video_params_high.video[0] = SimulcastVp8VideoHigh();
1637 ParamsWithLogging video_params_medium;
1638 video_params_medium.video[0] = SimulcastVp8VideoMedium();
1639 ParamsWithLogging video_params_low;
1640 video_params_low.video[0] = SimulcastVp8VideoLow();
1641
1642 std::vector<VideoStream> streams = {
1643 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
1644 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
1645 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
1646 large_room.call.num_thumbnails = 15;
1647 large_room.ss[0] = {
1648 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1649 false};
1650 fixture->RunWithAnalyzer(large_room);
1651}
1652
1653// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1654TEST(PCFullStackTest, MAYBE_LargeRoomVP8_50thumb) {
1655 auto fixture = CreateVideoQualityTestFixture();
1656 ParamsWithLogging large_room;
1657 large_room.call.send_side_bwe = true;
1658 large_room.video[0] = SimulcastVp8VideoHigh();
1659 large_room.analyzer = {"largeroom_50thumb", 0.0, 0.0, kTestDurationSec};
1660 large_room.config->loss_percent = 0;
1661 large_room.config->queue_delay_ms = 100;
1662 ParamsWithLogging video_params_high;
1663 video_params_high.video[0] = SimulcastVp8VideoHigh();
1664 ParamsWithLogging video_params_medium;
1665 video_params_medium.video[0] = SimulcastVp8VideoMedium();
1666 ParamsWithLogging video_params_low;
1667 video_params_low.video[0] = SimulcastVp8VideoLow();
1668
1669 std::vector<VideoStream> streams = {
1670 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
1671 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
1672 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
1673 large_room.call.num_thumbnails = 50;
1674 large_room.ss[0] = {
1675 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1676 false};
1677 fixture->RunWithAnalyzer(large_room);
1678}
1679*/
1680
Bjorn Terelius83e6ece2021-03-03 17:53:45 +01001681/*
Artem Titov137f6c82019-05-17 10:51:15 +02001682class PCDualStreamsTest : public ::testing::TestWithParam<int> {};
1683
Artem Titov137f6c82019-05-17 10:51:15 +02001684// Disable dual video test on mobile device becuase it's too heavy.
1685// TODO(bugs.webrtc.org/9840): Investigate why is this test flaky on MAC.
1686#if !defined(WEBRTC_ANDROID) && !defined(WEBRTC_IOS) && !defined(WEBRTC_MAC)
1687// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1688TEST_P(PCDualStreamsTest,
1689 ModeratelyRestricted_SlidesVp8_2TL_Simulcast_Video_Simulcast_High) {
Artem Titov137f6c82019-05-17 10:51:15 +02001690 const int first_stream = GetParam();
1691 ParamsWithLogging dual_streams;
1692
1693 // Screenshare Settings.
1694 dual_streams.screenshare[first_stream] = {true, false, 10};
1695 dual_streams.video[first_stream] = {true, 1850, 1110, 5, 800000, 2500000,
1696 2500000, false, "VP8", 2, 1, 400000,
1697 false, false, false, ""};
1698
1699 ParamsWithLogging screenshare_params_high;
1700 screenshare_params_high.video[0] = {
1701 true, 1850, 1110, 60, 600000, 1250000, 1250000, false,
1702 "VP8", 2, 0, 400000, false, false, false, ""};
1703 VideoQualityTest::Params screenshare_params_low;
1704 screenshare_params_low.video[0] = {true, 1850, 1110, 5, 30000, 200000,
1705 1000000, false, "VP8", 2, 0, 400000,
1706 false, false, false, ""};
1707 std::vector<VideoStream> screenhsare_streams = {
1708 VideoQualityTest::DefaultVideoStream(screenshare_params_low, 0),
1709 VideoQualityTest::DefaultVideoStream(screenshare_params_high, 0)};
1710
1711 dual_streams.ss[first_stream] = {
1712 screenhsare_streams, 1, 1, 0, InterLayerPredMode::kOn,
1713 std::vector<SpatialLayer>(), false};
1714
1715 // Video settings.
1716 dual_streams.video[1 - first_stream] = SimulcastVp8VideoHigh();
1717
1718 ParamsWithLogging video_params_high;
1719 video_params_high.video[0] = SimulcastVp8VideoHigh();
1720 ParamsWithLogging video_params_medium;
1721 video_params_medium.video[0] = SimulcastVp8VideoMedium();
1722 ParamsWithLogging video_params_low;
1723 video_params_low.video[0] = SimulcastVp8VideoLow();
1724 std::vector<VideoStream> streams = {
1725 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
1726 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
1727 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
1728
1729 dual_streams.ss[1 - first_stream] = {
1730 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1731 false};
1732
1733 // Call settings.
1734 dual_streams.call.send_side_bwe = true;
1735 dual_streams.call.dual_video = true;
1736 std::string test_label = "dualstreams_moderately_restricted_screenshare_" +
1737 std::to_string(first_stream);
1738 dual_streams.analyzer = {test_label, 0.0, 0.0, kTestDurationSec};
1739 dual_streams.config->loss_percent = 1;
1740 dual_streams.config->link_capacity_kbps = 7500;
1741 dual_streams.config->queue_length_packets = 30;
1742 dual_streams.config->queue_delay_ms = 100;
1743
1744 auto fixture = CreateVideoQualityTestFixture();
1745 fixture->RunWithAnalyzer(dual_streams);
1746}
1747#endif // !defined(WEBRTC_ANDROID) && !defined(WEBRTC_IOS) &&
1748 // !defined(WEBRTC_MAC)
1749
1750// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1751TEST_P(PCDualStreamsTest, Conference_Restricted) {
1752 const int first_stream = GetParam();
1753 ParamsWithLogging dual_streams;
1754
1755 // Screenshare Settings.
1756 dual_streams.screenshare[first_stream] = {true, false, 10};
1757 dual_streams.video[first_stream] = {true, 1850, 1110, 5, 800000, 2500000,
1758 2500000, false, "VP8", 3, 2, 400000,
1759 false, false, false, ""};
1760 // Video settings.
1761 dual_streams.video[1 - first_stream] = {
1762 true, 1280,
1763 720, 30,
1764 150000, 500000,
1765 700000, false,
1766 "VP8", 3,
1767 2, 400000,
1768 false, false,
1769 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
1770
1771 // Call settings.
1772 dual_streams.call.send_side_bwe = true;
1773 dual_streams.call.dual_video = true;
1774 std::string test_label = "dualstreams_conference_restricted_screenshare_" +
1775 std::to_string(first_stream);
1776 dual_streams.analyzer = {test_label, 0.0, 0.0, kTestDurationSec};
1777 dual_streams.config->loss_percent = 1;
1778 dual_streams.config->link_capacity_kbps = 5000;
1779 dual_streams.config->queue_length_packets = 30;
1780 dual_streams.config->queue_delay_ms = 100;
1781
1782 auto fixture = CreateVideoQualityTestFixture();
1783 fixture->RunWithAnalyzer(dual_streams);
1784}
Artem Titov137f6c82019-05-17 10:51:15 +02001785
1786INSTANTIATE_TEST_SUITE_P(PCFullStackTest,
1787 PCDualStreamsTest,
1788 ::testing::Values(0, 1));
Bjorn Terelius83e6ece2021-03-03 17:53:45 +01001789*/
Artem Titov137f6c82019-05-17 10:51:15 +02001790
1791} // namespace webrtc