blob: d052e2813d2dbef10a432849f1ca9c1ae707502a [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
35using PeerConfigurer =
36 webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture::PeerConfigurer;
37using RunParams = webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture::RunParams;
38using VideoConfig =
39 webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture::VideoConfig;
40using AudioConfig =
41 webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture::AudioConfig;
Artem Titov39483c62019-07-19 17:03:52 +020042using ScreenShareConfig =
43 webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture::ScreenShareConfig;
44using VideoSimulcastConfig =
45 webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture::VideoSimulcastConfig;
Artem Titovcdd73e02020-01-23 14:09:09 +010046using VideoCodecConfig =
47 webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture::VideoCodecConfig;
Artem Titov137f6c82019-05-17 10:51:15 +020048
49namespace {
50
51constexpr int kTestDurationSec = 45;
Artem Titov137f6c82019-05-17 10:51:15 +020052
53EmulatedNetworkNode* CreateEmulatedNodeWithConfig(
54 NetworkEmulationManager* emulation,
55 const BuiltInNetworkBehaviorConfig& config) {
56 return emulation->CreateEmulatedNode(
Mirko Bonadei317a1f02019-09-17 17:06:18 +020057 std::make_unique<SimulatedNetwork>(config));
Artem Titov137f6c82019-05-17 10:51:15 +020058}
59
60std::pair<EmulatedNetworkManagerInterface*, EmulatedNetworkManagerInterface*>
61CreateTwoNetworkLinks(NetworkEmulationManager* emulation,
62 const BuiltInNetworkBehaviorConfig& config) {
63 auto* alice_node = CreateEmulatedNodeWithConfig(emulation, config);
64 auto* bob_node = CreateEmulatedNodeWithConfig(emulation, config);
65
66 auto* alice_endpoint = emulation->CreateEndpoint(EmulatedEndpointConfig());
67 auto* bob_endpoint = emulation->CreateEndpoint(EmulatedEndpointConfig());
68
69 emulation->CreateRoute(alice_endpoint, {alice_node}, bob_endpoint);
70 emulation->CreateRoute(bob_endpoint, {bob_node}, alice_endpoint);
71
72 return {
73 emulation->CreateEmulatedNetworkManagerInterface({alice_endpoint}),
74 emulation->CreateEmulatedNetworkManagerInterface({bob_endpoint}),
75 };
76}
77
78std::unique_ptr<webrtc_pc_e2e::PeerConnectionE2EQualityTestFixture>
79CreateTestFixture(const std::string& test_case_name,
Artem Titov1ff3c582020-07-01 15:20:37 +020080 TimeController& time_controller,
Artem Titov137f6c82019-05-17 10:51:15 +020081 std::pair<EmulatedNetworkManagerInterface*,
82 EmulatedNetworkManagerInterface*> network_links,
83 rtc::FunctionView<void(PeerConfigurer*)> alice_configurer,
84 rtc::FunctionView<void(PeerConfigurer*)> bob_configurer) {
85 auto fixture = webrtc_pc_e2e::CreatePeerConnectionE2EQualityTestFixture(
Artem Titov1ff3c582020-07-01 15:20:37 +020086 test_case_name, time_controller, /*audio_quality_analyzer=*/nullptr,
Artem Titov137f6c82019-05-17 10:51:15 +020087 /*video_quality_analyzer=*/nullptr);
Niels Möllerf47a7242021-11-22 16:07:35 +010088 fixture->AddPeer(network_links.first->network_dependencies(),
89 alice_configurer);
90 fixture->AddPeer(network_links.second->network_dependencies(),
91 bob_configurer);
Artem Titov137f6c82019-05-17 10:51:15 +020092 fixture->AddQualityMetricsReporter(
Mirko Bonadei317a1f02019-09-17 17:06:18 +020093 std::make_unique<webrtc_pc_e2e::NetworkQualityMetricsReporter>(
Artem Titov137f6c82019-05-17 10:51:15 +020094 network_links.first, network_links.second));
95 return fixture;
96}
97
98// Takes the current active field trials set, and appends some new trials.
99std::string AppendFieldTrials(std::string new_trial_string) {
100 return std::string(field_trial::GetFieldTrialString()) + new_trial_string;
101}
102
103std::string ClipNameToClipPath(const char* clip_name) {
104 return test::ResourcePath(clip_name, "yuv");
105}
106
107} // namespace
108
Artem Titov137f6c82019-05-17 10:51:15 +0200109#if defined(RTC_ENABLE_VP9)
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200110TEST(PCFullStackTest, Pc_Foreman_Cif_Net_Delay_0_0_Plr_0_VP9) {
Artem Titov137f6c82019-05-17 10:51:15 +0200111 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
112 CreateNetworkEmulationManager();
113 auto fixture = CreateTestFixture(
114 "pc_foreman_cif_net_delay_0_0_plr_0_VP9",
Artem Titov1ff3c582020-07-01 15:20:37 +0200115 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200116 CreateTwoNetworkLinks(network_emulation_manager.get(),
117 BuiltInNetworkBehaviorConfig()),
118 [](PeerConfigurer* alice) {
119 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200120 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000121 auto frame_generator = CreateFromYuvFileFrameGenerator(
122 video, ClipNameToClipPath("foreman_cif"));
123 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200124 alice->SetVideoCodecs({VideoCodecConfig(
125 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
126 {kVP9FmtpProfileId,
127 VP9ProfileToString(VP9Profile::kProfile0)}})});
Artem Titov137f6c82019-05-17 10:51:15 +0200128 },
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200129 [](PeerConfigurer* bob) {
130 bob->SetVideoCodecs({VideoCodecConfig(
131 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
132 {kVP9FmtpProfileId,
133 VP9ProfileToString(VP9Profile::kProfile0)}})});
134 });
Artem Titovb92d3e62022-02-15 18:46:21 +0100135 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200136}
137
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200138TEST(PCGenericDescriptorTest,
139 Pc_Foreman_Cif_Delay_50_0_Plr_5_VP9_Generic_Descriptor) {
Artem Titov137f6c82019-05-17 10:51:15 +0200140 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
141 CreateNetworkEmulationManager();
142 BuiltInNetworkBehaviorConfig config;
143 config.loss_percent = 5;
144 config.queue_delay_ms = 50;
145 auto fixture = CreateTestFixture(
Danil Chapovalov636865e2020-06-03 14:11:26 +0200146 "pc_foreman_cif_delay_50_0_plr_5_VP9_generic_descriptor",
Artem Titov1ff3c582020-07-01 15:20:37 +0200147 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200148 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
149 [](PeerConfigurer* alice) {
150 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200151 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000152 auto frame_generator = CreateFromYuvFileFrameGenerator(
153 video, ClipNameToClipPath("foreman_cif"));
154 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200155 alice->SetVideoCodecs({VideoCodecConfig(
156 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
157 {kVP9FmtpProfileId,
158 VP9ProfileToString(VP9Profile::kProfile0)}})});
Artem Titov137f6c82019-05-17 10:51:15 +0200159 },
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200160 [](PeerConfigurer* bob) {
161 bob->SetVideoCodecs({VideoCodecConfig(
162 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
163 {kVP9FmtpProfileId,
164 VP9ProfileToString(VP9Profile::kProfile0)}})});
165 });
Artem Titovb92d3e62022-02-15 18:46:21 +0100166 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200167}
168
Artem Titove731a2e2019-07-02 10:08:17 +0200169// VP9 2nd profile isn't supported on android arm and arm 64.
Artem Titovcecee992019-07-03 11:55:28 +0200170#if (defined(WEBRTC_ANDROID) && \
171 (defined(WEBRTC_ARCH_ARM64) || defined(WEBRTC_ARCH_ARM))) || \
172 (defined(WEBRTC_IOS) && defined(WEBRTC_ARCH_ARM64))
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200173#define MAYBE_Pc_Generator_Net_Delay_0_0_Plr_0_VP9Profile2 \
174 DISABLED_Pc_Generator_Net_Delay_0_0_Plr_0_VP9Profile2
Artem Titove731a2e2019-07-02 10:08:17 +0200175#else
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200176#define MAYBE_Pc_Generator_Net_Delay_0_0_Plr_0_VP9Profile2 \
177 Pc_Generator_Net_Delay_0_0_Plr_0_VP9Profile2
Artem Titove731a2e2019-07-02 10:08:17 +0200178#endif
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200179TEST(PCFullStackTest, MAYBE_Pc_Generator_Net_Delay_0_0_Plr_0_VP9Profile2) {
Artem Titov137f6c82019-05-17 10:51:15 +0200180 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
181 CreateNetworkEmulationManager();
182 auto fixture = CreateTestFixture(
183 "pc_generator_net_delay_0_0_plr_0_VP9Profile2",
Artem Titov1ff3c582020-07-01 15:20:37 +0200184 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200185 CreateTwoNetworkLinks(network_emulation_manager.get(),
186 BuiltInNetworkBehaviorConfig()),
187 [](PeerConfigurer* alice) {
188 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200189 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000190 auto frame_generator = CreateSquareFrameGenerator(
191 video, test::FrameGeneratorInterface::OutputType::kI010);
192 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200193 alice->SetVideoCodecs({VideoCodecConfig(
194 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
195 {kVP9FmtpProfileId,
196 VP9ProfileToString(VP9Profile::kProfile2)}})});
Artem Titov137f6c82019-05-17 10:51:15 +0200197 },
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200198 [](PeerConfigurer* bob) {
199 bob->SetVideoCodecs({VideoCodecConfig(
200 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
201 {kVP9FmtpProfileId,
202 VP9ProfileToString(VP9Profile::kProfile2)}})});
203 });
Artem Titovb92d3e62022-02-15 18:46:21 +0100204 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200205}
206
207/*
208// TODO(bugs.webrtc.org/10639) migrate commented out test, when required
209// functionality will be supported in PeerConnection level framework.
210TEST(PCFullStackTest, ForemanCifWithoutPacketLossMultiplexI420Frame) {
211 auto fixture = CreateVideoQualityTestFixture();
212 ParamsWithLogging foreman_cif;
213 foreman_cif.call.send_side_bwe = true;
214 foreman_cif.video[0] = {
215 true, 352, 288, 30,
216 700000, 700000, 700000, false,
217 "multiplex", 1, 0, 0,
218 false, false, false, ClipNameToClipPath("foreman_cif")};
219 foreman_cif.analyzer = {"foreman_cif_net_delay_0_0_plr_0_Multiplex", 0.0, 0.0,
220 kTestDurationSec};
221 fixture->RunWithAnalyzer(foreman_cif);
222}
223
224TEST(PCFullStackTest, GeneratorWithoutPacketLossMultiplexI420AFrame) {
225 auto fixture = CreateVideoQualityTestFixture();
226
227 ParamsWithLogging generator;
228 generator.call.send_side_bwe = true;
229 generator.video[0] = {
230 true, 352, 288, 30, 700000, 700000, 700000, false,
231 "multiplex", 1, 0, 0, false, false, false, "GeneratorI420A"};
232 generator.analyzer = {"generator_net_delay_0_0_plr_0_Multiplex", 0.0, 0.0,
233 kTestDurationSec};
234 fixture->RunWithAnalyzer(generator);
235}
236*/
237#endif // defined(RTC_ENABLE_VP9)
238
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200239TEST(PCFullStackTest, Pc_Net_Delay_0_0_Plr_0) {
Artem Titov137f6c82019-05-17 10:51:15 +0200240 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
241 CreateNetworkEmulationManager();
242 auto fixture = CreateTestFixture(
Artem Titov1ff3c582020-07-01 15:20:37 +0200243 "pc_net_delay_0_0_plr_0", *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200244 CreateTwoNetworkLinks(network_emulation_manager.get(),
245 BuiltInNetworkBehaviorConfig()),
246 [](PeerConfigurer* alice) {
247 VideoConfig video(176, 144, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200248 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000249 auto frame_generator = CreateFromYuvFileFrameGenerator(
250 video, ClipNameToClipPath("paris_qcif"));
251 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200252 },
253 [](PeerConfigurer* bob) {});
Artem Titovb92d3e62022-02-15 18:46:21 +0100254 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200255}
256
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200257TEST(PCGenericDescriptorTest,
258 Pc_Foreman_Cif_Net_Delay_0_0_Plr_0_Generic_Descriptor) {
Artem Titov137f6c82019-05-17 10:51:15 +0200259 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
260 CreateNetworkEmulationManager();
261 auto fixture = CreateTestFixture(
Danil Chapovalov636865e2020-06-03 14:11:26 +0200262 "pc_foreman_cif_net_delay_0_0_plr_0_generic_descriptor",
Artem Titov1ff3c582020-07-01 15:20:37 +0200263 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200264 CreateTwoNetworkLinks(network_emulation_manager.get(),
265 BuiltInNetworkBehaviorConfig()),
266 [](PeerConfigurer* alice) {
267 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200268 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000269 auto frame_generator = CreateFromYuvFileFrameGenerator(
270 video, ClipNameToClipPath("foreman_cif"));
271 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200272 },
273 [](PeerConfigurer* bob) {});
Artem Titovb92d3e62022-02-15 18:46:21 +0100274 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200275}
276
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200277TEST(PCGenericDescriptorTest,
Jeremy Leconte4100d552020-09-11 18:02:36 +0200278 Pc_Foreman_Cif_30kbps_Net_Delay_0_0_Plr_0_Generic_Descriptor) {
Artem Titov137f6c82019-05-17 10:51:15 +0200279 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
280 CreateNetworkEmulationManager();
281 BuiltInNetworkBehaviorConfig config;
Artem Titov137f6c82019-05-17 10:51:15 +0200282 auto fixture = CreateTestFixture(
Danil Chapovalov636865e2020-06-03 14:11:26 +0200283 "pc_foreman_cif_30kbps_net_delay_0_0_plr_0_generic_descriptor",
Artem Titov1ff3c582020-07-01 15:20:37 +0200284 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200285 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
286 [](PeerConfigurer* alice) {
287 VideoConfig video(352, 288, 10);
Artem Titov137f6c82019-05-17 10:51:15 +0200288 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000289 auto frame_generator = CreateFromYuvFileFrameGenerator(
290 video, ClipNameToClipPath("foreman_cif"));
291 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov85a9d912019-05-29 14:36:50 +0200292
Niels Möller29d59a12020-06-22 14:48:10 +0200293 BitrateSettings bitrate_settings;
294 bitrate_settings.min_bitrate_bps = 30000;
295 bitrate_settings.start_bitrate_bps = 30000;
296 bitrate_settings.max_bitrate_bps = 30000;
297 alice->SetBitrateSettings(bitrate_settings);
Artem Titov137f6c82019-05-17 10:51:15 +0200298 },
299 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100300 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titov137f6c82019-05-17 10:51:15 +0200301 fixture->Run(std::move(run_params));
302}
303
Artem Titov137f6c82019-05-17 10:51:15 +0200304// Link capacity below default start rate.
Jeremy Leconte4100d552020-09-11 18:02:36 +0200305TEST(PCFullStackTest, Pc_Foreman_Cif_Link_150kbps_Net_Delay_0_0_Plr_0) {
Artem Titov137f6c82019-05-17 10:51:15 +0200306 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
307 CreateNetworkEmulationManager();
308 BuiltInNetworkBehaviorConfig config;
309 config.link_capacity_kbps = 150;
310 auto fixture = CreateTestFixture(
311 "pc_foreman_cif_link_150kbps_net_delay_0_0_plr_0",
Artem Titov1ff3c582020-07-01 15:20:37 +0200312 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200313 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
314 [](PeerConfigurer* alice) {
315 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200316 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000317 auto frame_generator = CreateFromYuvFileFrameGenerator(
318 video, ClipNameToClipPath("foreman_cif"));
319 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200320 },
321 [](PeerConfigurer* bob) {});
Artem Titovb92d3e62022-02-15 18:46:21 +0100322 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200323}
324
Jeremy Leconte4100d552020-09-11 18:02:36 +0200325TEST(PCFullStackTest, Pc_Foreman_Cif_Link_130kbps_Delay100ms_Loss1_Ulpfec) {
Artem Titov65428262019-07-02 16:48:02 +0200326 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
327 CreateNetworkEmulationManager();
328 BuiltInNetworkBehaviorConfig config;
329 config.link_capacity_kbps = 130;
330 config.queue_delay_ms = 100;
331 config.loss_percent = 1;
332 auto fixture = CreateTestFixture(
333 "pc_foreman_cif_link_130kbps_delay100ms_loss1_ulpfec",
Artem Titov1ff3c582020-07-01 15:20:37 +0200334 *network_emulation_manager->time_controller(),
Artem Titov65428262019-07-02 16:48:02 +0200335 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
336 [](PeerConfigurer* alice) {
337 VideoConfig video(352, 288, 30);
Artem Titov65428262019-07-02 16:48:02 +0200338 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000339 auto frame_generator = CreateFromYuvFileFrameGenerator(
340 video, ClipNameToClipPath("foreman_cif"));
341 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titovb92d3e62022-02-15 18:46:21 +0100342 alice->SetUseUlpFEC(true);
Artem Titov65428262019-07-02 16:48:02 +0200343 },
Artem Titovb92d3e62022-02-15 18:46:21 +0100344 [](PeerConfigurer* bob) { bob->SetUseUlpFEC(true); });
345 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov65428262019-07-02 16:48:02 +0200346}
347
Jeremy Leconte4100d552020-09-11 18:02:36 +0200348TEST(PCFullStackTest, Pc_Foreman_Cif_Link_50kbps_Delay100ms_Loss1_Ulpfec) {
Artem Titov65428262019-07-02 16:48:02 +0200349 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
350 CreateNetworkEmulationManager();
351 BuiltInNetworkBehaviorConfig config;
352 config.link_capacity_kbps = 50;
353 config.queue_delay_ms = 100;
354 config.loss_percent = 1;
355 auto fixture = CreateTestFixture(
356 "pc_foreman_cif_link_50kbps_delay100ms_loss1_ulpfec",
Artem Titov1ff3c582020-07-01 15:20:37 +0200357 *network_emulation_manager->time_controller(),
Artem Titov65428262019-07-02 16:48:02 +0200358 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
359 [](PeerConfigurer* alice) {
360 VideoConfig video(352, 288, 30);
Artem Titov65428262019-07-02 16:48:02 +0200361 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000362 auto frame_generator = CreateFromYuvFileFrameGenerator(
363 video, ClipNameToClipPath("foreman_cif"));
364 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titovb92d3e62022-02-15 18:46:21 +0100365 alice->SetUseUlpFEC(true);
Artem Titov65428262019-07-02 16:48:02 +0200366 },
Artem Titovb92d3e62022-02-15 18:46:21 +0100367 [](PeerConfigurer* bob) { bob->SetUseUlpFEC(true); });
368 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov65428262019-07-02 16:48:02 +0200369}
370
Artem Titov137f6c82019-05-17 10:51:15 +0200371// Restricted network and encoder overproducing by 30%.
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200372TEST(PCFullStackTest,
Jeremy Leconte4100d552020-09-11 18:02:36 +0200373 Pc_Foreman_Cif_Link_150kbps_Delay100ms_30pkts_Queue_Overshoot30) {
Artem Titov137f6c82019-05-17 10:51:15 +0200374 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
375 CreateNetworkEmulationManager();
376 BuiltInNetworkBehaviorConfig config;
377 config.link_capacity_kbps = 150;
378 config.queue_length_packets = 30;
379 config.queue_delay_ms = 100;
380 auto fixture = CreateTestFixture(
381 "pc_foreman_cif_link_150kbps_delay100ms_30pkts_queue_overshoot30",
Artem Titov1ff3c582020-07-01 15:20:37 +0200382 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200383 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
384 [](PeerConfigurer* alice) {
385 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200386 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000387 auto frame_generator = CreateFromYuvFileFrameGenerator(
388 video, ClipNameToClipPath("foreman_cif"));
389 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titovb92d3e62022-02-15 18:46:21 +0100390 alice->SetVideoEncoderBitrateMultiplier(1.30);
Artem Titov137f6c82019-05-17 10:51:15 +0200391 },
Artem Titovb92d3e62022-02-15 18:46:21 +0100392 [](PeerConfigurer* bob) { bob->SetVideoEncoderBitrateMultiplier(1.30); });
393 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200394}
395
396// Weak 3G-style link: 250kbps, 1% loss, 100ms delay, 15 packets queue.
397// Packet rate and loss are low enough that loss will happen with ~3s interval.
398// This triggers protection overhead to toggle between zero and non-zero.
399// Link queue is restrictive enough to trigger loss on probes.
Jeremy Leconte4100d552020-09-11 18:02:36 +0200400TEST(PCFullStackTest, Pc_Foreman_Cif_Link_250kbps_Delay100ms_10pkts_Loss1) {
Artem Titov137f6c82019-05-17 10:51:15 +0200401 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
402 CreateNetworkEmulationManager();
403 BuiltInNetworkBehaviorConfig config;
404 config.link_capacity_kbps = 250;
405 config.queue_length_packets = 10;
406 config.queue_delay_ms = 100;
407 config.loss_percent = 1;
408 auto fixture = CreateTestFixture(
409 "pc_foreman_cif_link_250kbps_delay100ms_10pkts_loss1",
Artem Titov1ff3c582020-07-01 15:20:37 +0200410 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200411 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
412 [](PeerConfigurer* alice) {
413 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200414 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000415 auto frame_generator = CreateFromYuvFileFrameGenerator(
416 video, ClipNameToClipPath("foreman_cif"));
417 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titovb92d3e62022-02-15 18:46:21 +0100418 alice->SetVideoEncoderBitrateMultiplier(1.30);
Artem Titov137f6c82019-05-17 10:51:15 +0200419 },
Artem Titovb92d3e62022-02-15 18:46:21 +0100420 [](PeerConfigurer* bob) { bob->SetVideoEncoderBitrateMultiplier(1.30); });
421 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200422}
423
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200424TEST(PCGenericDescriptorTest,
425 Pc_Foreman_Cif_Delay_50_0_Plr_5_Generic_Descriptor) {
Artem Titov137f6c82019-05-17 10:51:15 +0200426 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
427 CreateNetworkEmulationManager();
428 BuiltInNetworkBehaviorConfig config;
429 config.loss_percent = 5;
430 config.queue_delay_ms = 50;
431 auto fixture = CreateTestFixture(
Danil Chapovalov636865e2020-06-03 14:11:26 +0200432 "pc_foreman_cif_delay_50_0_plr_5_generic_descriptor",
Artem Titov1ff3c582020-07-01 15:20:37 +0200433 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200434 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
435 [](PeerConfigurer* alice) {
436 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200437 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000438 auto frame_generator = CreateFromYuvFileFrameGenerator(
439 video, ClipNameToClipPath("foreman_cif"));
440 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200441 },
442 [](PeerConfigurer* bob) {});
Artem Titovb92d3e62022-02-15 18:46:21 +0100443 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200444}
445
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200446TEST(PCGenericDescriptorTest,
447 Pc_Foreman_Cif_Delay_50_0_Plr_5_Ulpfec_Generic_Descriptor) {
Artem Titov137f6c82019-05-17 10:51:15 +0200448 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
449 CreateNetworkEmulationManager();
450 BuiltInNetworkBehaviorConfig config;
451 config.loss_percent = 5;
452 config.queue_delay_ms = 50;
453 auto fixture = CreateTestFixture(
Danil Chapovalov636865e2020-06-03 14:11:26 +0200454 "pc_foreman_cif_delay_50_0_plr_5_ulpfec_generic_descriptor",
Artem Titov1ff3c582020-07-01 15:20:37 +0200455 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200456 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
457 [](PeerConfigurer* alice) {
458 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200459 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000460 auto frame_generator = CreateFromYuvFileFrameGenerator(
461 video, ClipNameToClipPath("foreman_cif"));
462 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titovb92d3e62022-02-15 18:46:21 +0100463 alice->SetUseUlpFEC(true);
Artem Titov137f6c82019-05-17 10:51:15 +0200464 },
Artem Titovb92d3e62022-02-15 18:46:21 +0100465 [](PeerConfigurer* bob) { bob->SetUseUlpFEC(true); });
466 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200467}
468
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200469TEST(PCFullStackTest, Pc_Foreman_Cif_Delay_50_0_Plr_5_Flexfec) {
Artem Titov137f6c82019-05-17 10:51:15 +0200470 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
471 CreateNetworkEmulationManager();
472 BuiltInNetworkBehaviorConfig config;
473 config.loss_percent = 5;
474 config.queue_delay_ms = 50;
475 auto fixture = CreateTestFixture(
476 "pc_foreman_cif_delay_50_0_plr_5_flexfec",
Artem Titov1ff3c582020-07-01 15:20:37 +0200477 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200478 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
479 [](PeerConfigurer* alice) {
480 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200481 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000482 auto frame_generator = CreateFromYuvFileFrameGenerator(
483 video, ClipNameToClipPath("foreman_cif"));
484 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titovb92d3e62022-02-15 18:46:21 +0100485 alice->SetUseFlexFEC(true);
Artem Titov137f6c82019-05-17 10:51:15 +0200486 },
Artem Titovb92d3e62022-02-15 18:46:21 +0100487 [](PeerConfigurer* bob) { bob->SetUseFlexFEC(true); });
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100488 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovb92d3e62022-02-15 18:46:21 +0100489 run_params.enable_flex_fec_support = true;
Artem Titov137f6c82019-05-17 10:51:15 +0200490 fixture->Run(std::move(run_params));
491}
492
Jeremy Leconte4100d552020-09-11 18:02:36 +0200493TEST(PCFullStackTest, Pc_Foreman_Cif_500kbps_Delay_50_0_Plr_3_Flexfec) {
Artem Titov137f6c82019-05-17 10:51:15 +0200494 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
495 CreateNetworkEmulationManager();
496 BuiltInNetworkBehaviorConfig config;
497 config.loss_percent = 3;
498 config.link_capacity_kbps = 500;
499 config.queue_delay_ms = 50;
500 auto fixture = CreateTestFixture(
501 "pc_foreman_cif_500kbps_delay_50_0_plr_3_flexfec",
Artem Titov1ff3c582020-07-01 15:20:37 +0200502 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200503 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
504 [](PeerConfigurer* alice) {
505 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200506 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000507 auto frame_generator = CreateFromYuvFileFrameGenerator(
508 video, ClipNameToClipPath("foreman_cif"));
509 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titovb92d3e62022-02-15 18:46:21 +0100510 alice->SetUseFlexFEC(true);
Artem Titov137f6c82019-05-17 10:51:15 +0200511 },
Artem Titovb92d3e62022-02-15 18:46:21 +0100512 [](PeerConfigurer* bob) { bob->SetUseFlexFEC(true); });
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100513 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titovb92d3e62022-02-15 18:46:21 +0100514 run_params.enable_flex_fec_support = true;
Artem Titov137f6c82019-05-17 10:51:15 +0200515 fixture->Run(std::move(run_params));
516}
517
Jeremy Leconte4100d552020-09-11 18:02:36 +0200518TEST(PCFullStackTest, Pc_Foreman_Cif_500kbps_Delay_50_0_Plr_3_Ulpfec) {
Artem Titov137f6c82019-05-17 10:51:15 +0200519 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
520 CreateNetworkEmulationManager();
521 BuiltInNetworkBehaviorConfig config;
522 config.loss_percent = 3;
523 config.link_capacity_kbps = 500;
524 config.queue_delay_ms = 50;
525 auto fixture = CreateTestFixture(
526 "pc_foreman_cif_500kbps_delay_50_0_plr_3_ulpfec",
Artem Titov1ff3c582020-07-01 15:20:37 +0200527 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200528 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
529 [](PeerConfigurer* alice) {
530 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200531 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000532 auto frame_generator = CreateFromYuvFileFrameGenerator(
533 video, ClipNameToClipPath("foreman_cif"));
534 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titovb92d3e62022-02-15 18:46:21 +0100535 alice->SetUseUlpFEC(true);
Artem Titov137f6c82019-05-17 10:51:15 +0200536 },
Artem Titovb92d3e62022-02-15 18:46:21 +0100537 [](PeerConfigurer* bob) { bob->SetUseUlpFEC(true); });
538 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200539}
540
541#if defined(WEBRTC_USE_H264)
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200542TEST(PCFullStackTest, Pc_Foreman_Cif_Net_Delay_0_0_Plr_0_H264) {
Artem Titov137f6c82019-05-17 10:51:15 +0200543 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
544 CreateNetworkEmulationManager();
545 auto fixture = CreateTestFixture(
546 "pc_foreman_cif_net_delay_0_0_plr_0_H264",
Artem Titov1ff3c582020-07-01 15:20:37 +0200547 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200548 CreateTwoNetworkLinks(network_emulation_manager.get(),
549 BuiltInNetworkBehaviorConfig()),
550 [](PeerConfigurer* alice) {
551 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200552 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000553 auto frame_generator = CreateFromYuvFileFrameGenerator(
554 video, ClipNameToClipPath("foreman_cif"));
555 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200556 alice->SetVideoCodecs({VideoCodecConfig(cricket::kH264CodecName)});
Artem Titov137f6c82019-05-17 10:51:15 +0200557 },
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200558 [](PeerConfigurer* bob) {
559 bob->SetVideoCodecs({VideoCodecConfig(cricket::kH264CodecName)});
560 });
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100561 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titov137f6c82019-05-17 10:51:15 +0200562 run_params.use_flex_fec = false;
563 run_params.use_ulp_fec = false;
564 fixture->Run(std::move(run_params));
565}
566
Jeremy Leconte4100d552020-09-11 18:02:36 +0200567TEST(PCFullStackTest, Pc_Foreman_Cif_30kbps_Net_Delay_0_0_Plr_0_H264) {
Artem Titov137f6c82019-05-17 10:51:15 +0200568 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
569 CreateNetworkEmulationManager();
570 BuiltInNetworkBehaviorConfig config;
Artem Titov137f6c82019-05-17 10:51:15 +0200571 auto fixture = CreateTestFixture(
Artem Titoved4d1582019-05-20 12:04:05 +0200572 "pc_foreman_cif_30kbps_net_delay_0_0_plr_0_H264",
Artem Titov1ff3c582020-07-01 15:20:37 +0200573 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200574 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
575 [](PeerConfigurer* alice) {
576 VideoConfig video(352, 288, 10);
Artem Titov137f6c82019-05-17 10:51:15 +0200577 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000578 auto frame_generator = CreateFromYuvFileFrameGenerator(
579 video, ClipNameToClipPath("foreman_cif"));
580 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov85a9d912019-05-29 14:36:50 +0200581
Niels Möller29d59a12020-06-22 14:48:10 +0200582 BitrateSettings bitrate_settings;
583 bitrate_settings.min_bitrate_bps = 30000;
584 bitrate_settings.start_bitrate_bps = 30000;
585 bitrate_settings.max_bitrate_bps = 30000;
586 alice->SetBitrateSettings(bitrate_settings);
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200587 alice->SetVideoCodecs({VideoCodecConfig(cricket::kH264CodecName)});
Artem Titov137f6c82019-05-17 10:51:15 +0200588 },
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200589 [](PeerConfigurer* bob) {
590 bob->SetVideoCodecs({VideoCodecConfig(cricket::kH264CodecName)});
591 });
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100592 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titov137f6c82019-05-17 10:51:15 +0200593 run_params.use_flex_fec = false;
594 run_params.use_ulp_fec = false;
595 fixture->Run(std::move(run_params));
596}
597
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200598TEST(PCGenericDescriptorTest,
599 Pc_Foreman_Cif_Delay_50_0_Plr_5_H264_Generic_Descriptor) {
Artem Titov137f6c82019-05-17 10:51:15 +0200600 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
601 CreateNetworkEmulationManager();
602 BuiltInNetworkBehaviorConfig config;
603 config.loss_percent = 5;
604 config.queue_delay_ms = 50;
605 auto fixture = CreateTestFixture(
Danil Chapovalov636865e2020-06-03 14:11:26 +0200606 "pc_foreman_cif_delay_50_0_plr_5_H264_generic_descriptor",
Artem Titov1ff3c582020-07-01 15:20:37 +0200607 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200608 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
609 [](PeerConfigurer* alice) {
610 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200611 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000612 auto frame_generator = CreateFromYuvFileFrameGenerator(
613 video, ClipNameToClipPath("foreman_cif"));
614 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200615 alice->SetVideoCodecs({VideoCodecConfig(cricket::kH264CodecName)});
Artem Titov137f6c82019-05-17 10:51:15 +0200616 },
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200617 [](PeerConfigurer* bob) {
618 bob->SetVideoCodecs({VideoCodecConfig(cricket::kH264CodecName)});
619 });
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100620 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titov137f6c82019-05-17 10:51:15 +0200621 run_params.use_flex_fec = false;
622 run_params.use_ulp_fec = false;
623 fixture->Run(std::move(run_params));
624}
625
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200626TEST(PCFullStackTest, Pc_Foreman_Cif_Delay_50_0_Plr_5_H264_Sps_Pps_Idr) {
Artem Titov137f6c82019-05-17 10:51:15 +0200627 test::ScopedFieldTrials override_field_trials(
628 AppendFieldTrials("WebRTC-SpsPpsIdrIsH264Keyframe/Enabled/"));
629
630 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
631 CreateNetworkEmulationManager();
632 BuiltInNetworkBehaviorConfig config;
633 config.loss_percent = 5;
634 config.queue_delay_ms = 50;
635 auto fixture = CreateTestFixture(
636 "pc_foreman_cif_delay_50_0_plr_5_H264_sps_pps_idr",
Artem Titov1ff3c582020-07-01 15:20:37 +0200637 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200638 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
639 [](PeerConfigurer* alice) {
640 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200641 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000642 auto frame_generator = CreateFromYuvFileFrameGenerator(
643 video, ClipNameToClipPath("foreman_cif"));
644 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200645 alice->SetVideoCodecs({VideoCodecConfig(cricket::kH264CodecName)});
Artem Titov137f6c82019-05-17 10:51:15 +0200646 },
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200647 [](PeerConfigurer* bob) {
648 bob->SetVideoCodecs({VideoCodecConfig(cricket::kH264CodecName)});
649 });
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100650 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titov137f6c82019-05-17 10:51:15 +0200651 run_params.use_flex_fec = false;
652 run_params.use_ulp_fec = false;
653 fixture->Run(std::move(run_params));
654}
655
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200656TEST(PCFullStackTest, Pc_Foreman_Cif_Delay_50_0_Plr_5_H264_Flexfec) {
Artem Titov137f6c82019-05-17 10:51:15 +0200657 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
658 CreateNetworkEmulationManager();
659 BuiltInNetworkBehaviorConfig config;
660 config.loss_percent = 5;
661 config.queue_delay_ms = 50;
662 auto fixture = CreateTestFixture(
663 "pc_foreman_cif_delay_50_0_plr_5_H264_flexfec",
Artem Titov1ff3c582020-07-01 15:20:37 +0200664 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200665 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
666 [](PeerConfigurer* alice) {
667 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200668 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000669 auto frame_generator = CreateFromYuvFileFrameGenerator(
670 video, ClipNameToClipPath("foreman_cif"));
671 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200672 alice->SetVideoCodecs({VideoCodecConfig(cricket::kH264CodecName)});
Artem Titov137f6c82019-05-17 10:51:15 +0200673 },
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200674 [](PeerConfigurer* bob) {
675 bob->SetVideoCodecs({VideoCodecConfig(cricket::kH264CodecName)});
676 });
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100677 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titov137f6c82019-05-17 10:51:15 +0200678 run_params.use_flex_fec = true;
679 run_params.use_ulp_fec = false;
680 fixture->Run(std::move(run_params));
681}
682
683// Ulpfec with H264 is an unsupported combination, so this test is only useful
684// for debugging. It is therefore disabled by default.
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200685TEST(PCFullStackTest, DISABLED_Pc_Foreman_Cif_Delay_50_0_Plr_5_H264_Ulpfec) {
Artem Titov137f6c82019-05-17 10:51:15 +0200686 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
687 CreateNetworkEmulationManager();
688 BuiltInNetworkBehaviorConfig config;
689 config.loss_percent = 5;
690 config.queue_delay_ms = 50;
691 auto fixture = CreateTestFixture(
Artem Titoved4d1582019-05-20 12:04:05 +0200692 "pc_foreman_cif_delay_50_0_plr_5_H264_ulpfec",
Artem Titov1ff3c582020-07-01 15:20:37 +0200693 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200694 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
695 [](PeerConfigurer* alice) {
696 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200697 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000698 auto frame_generator = CreateFromYuvFileFrameGenerator(
699 video, ClipNameToClipPath("foreman_cif"));
700 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200701 alice->SetVideoCodecs({VideoCodecConfig(cricket::kH264CodecName)});
Artem Titov137f6c82019-05-17 10:51:15 +0200702 },
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200703 [](PeerConfigurer* bob) {
704 bob->SetVideoCodecs({VideoCodecConfig(cricket::kH264CodecName)});
705 });
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100706 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titov137f6c82019-05-17 10:51:15 +0200707 run_params.use_flex_fec = false;
708 run_params.use_ulp_fec = true;
709 fixture->Run(std::move(run_params));
710}
711#endif // defined(WEBRTC_USE_H264)
712
Jeremy Leconte4100d552020-09-11 18:02:36 +0200713TEST(PCFullStackTest, Pc_Foreman_Cif_500kbps) {
Artem Titov137f6c82019-05-17 10:51:15 +0200714 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
715 CreateNetworkEmulationManager();
716 BuiltInNetworkBehaviorConfig config;
717 config.queue_length_packets = 0;
718 config.queue_delay_ms = 0;
719 config.link_capacity_kbps = 500;
720 auto fixture = CreateTestFixture(
Artem Titov1ff3c582020-07-01 15:20:37 +0200721 "pc_foreman_cif_500kbps", *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200722 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
723 [](PeerConfigurer* alice) {
724 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200725 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000726 auto frame_generator = CreateFromYuvFileFrameGenerator(
727 video, ClipNameToClipPath("foreman_cif"));
728 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200729 },
730 [](PeerConfigurer* bob) {});
Artem Titovb92d3e62022-02-15 18:46:21 +0100731 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200732}
733
Jeremy Leconte4100d552020-09-11 18:02:36 +0200734TEST(PCFullStackTest, Pc_Foreman_Cif_500kbps_32pkts_Queue) {
Artem Titov137f6c82019-05-17 10:51:15 +0200735 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
736 CreateNetworkEmulationManager();
737 BuiltInNetworkBehaviorConfig config;
738 config.queue_length_packets = 32;
739 config.queue_delay_ms = 0;
740 config.link_capacity_kbps = 500;
741 auto fixture = CreateTestFixture(
742 "pc_foreman_cif_500kbps_32pkts_queue",
Artem Titov1ff3c582020-07-01 15:20:37 +0200743 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200744 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
745 [](PeerConfigurer* alice) {
746 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200747 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000748 auto frame_generator = CreateFromYuvFileFrameGenerator(
749 video, ClipNameToClipPath("foreman_cif"));
750 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200751 },
752 [](PeerConfigurer* bob) {});
Artem Titovb92d3e62022-02-15 18:46:21 +0100753 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200754}
755
Jeremy Leconte4100d552020-09-11 18:02:36 +0200756TEST(PCFullStackTest, Pc_Foreman_Cif_500kbps_100ms) {
Artem Titov137f6c82019-05-17 10:51:15 +0200757 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
758 CreateNetworkEmulationManager();
759 BuiltInNetworkBehaviorConfig config;
760 config.queue_length_packets = 0;
761 config.queue_delay_ms = 100;
762 config.link_capacity_kbps = 500;
763 auto fixture = CreateTestFixture(
764 "pc_foreman_cif_500kbps_100ms",
Artem Titov1ff3c582020-07-01 15:20:37 +0200765 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200766 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
767 [](PeerConfigurer* alice) {
768 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200769 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000770 auto frame_generator = CreateFromYuvFileFrameGenerator(
771 video, ClipNameToClipPath("foreman_cif"));
772 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200773 },
774 [](PeerConfigurer* bob) {});
Artem Titovb92d3e62022-02-15 18:46:21 +0100775 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200776}
777
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200778TEST(PCGenericDescriptorTest,
Jeremy Leconte4100d552020-09-11 18:02:36 +0200779 Pc_Foreman_Cif_500kbps_100ms_32pkts_Queue_Generic_Descriptor) {
Artem Titov137f6c82019-05-17 10:51:15 +0200780 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
781 CreateNetworkEmulationManager();
782 BuiltInNetworkBehaviorConfig config;
783 config.queue_length_packets = 32;
784 config.queue_delay_ms = 100;
785 config.link_capacity_kbps = 500;
786 auto fixture = CreateTestFixture(
Danil Chapovalov636865e2020-06-03 14:11:26 +0200787 "pc_foreman_cif_500kbps_100ms_32pkts_queue_generic_descriptor",
Artem Titov1ff3c582020-07-01 15:20:37 +0200788 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200789 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
790 [](PeerConfigurer* alice) {
791 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200792 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000793 auto frame_generator = CreateFromYuvFileFrameGenerator(
794 video, ClipNameToClipPath("foreman_cif"));
795 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200796 },
797 [](PeerConfigurer* bob) {});
Artem Titovb92d3e62022-02-15 18:46:21 +0100798 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200799}
800
801/*
802// TODO(bugs.webrtc.org/10639) we need to disable send side bwe, but it isn't
Artem Titov39483c62019-07-19 17:03:52 +0200803// supported in PC level framework.
Artem Titov137f6c82019-05-17 10:51:15 +0200804TEST(PCFullStackTest, ForemanCif500kbps100msLimitedQueueRecvBwe) {
805 auto fixture = CreateVideoQualityTestFixture();
806 ParamsWithLogging foreman_cif;
807 foreman_cif.call.send_side_bwe = false;
808 foreman_cif.video[0] = {
809 true, 352, 288, 30,
810 30000, 500000, 2000000, false,
811 "VP8", 1, 0, 0,
812 false, false, true, ClipNameToClipPath("foreman_cif")};
813 foreman_cif.analyzer = {"foreman_cif_500kbps_100ms_32pkts_queue_recv_bwe",
814 0.0, 0.0, kTestDurationSec};
815 foreman_cif.config->queue_length_packets = 32;
816 foreman_cif.config->queue_delay_ms = 100;
817 foreman_cif.config->link_capacity_kbps = 500;
818 fixture->RunWithAnalyzer(foreman_cif);
819}
820*/
821
Jeremy Leconte4100d552020-09-11 18:02:36 +0200822TEST(PCFullStackTest, Pc_Foreman_Cif_1000kbps_100ms_32pkts_Queue) {
Artem Titov137f6c82019-05-17 10:51:15 +0200823 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
824 CreateNetworkEmulationManager();
825 BuiltInNetworkBehaviorConfig config;
826 config.queue_length_packets = 32;
827 config.queue_delay_ms = 100;
828 config.link_capacity_kbps = 1000;
829 auto fixture = CreateTestFixture(
830 "pc_foreman_cif_1000kbps_100ms_32pkts_queue",
Artem Titov1ff3c582020-07-01 15:20:37 +0200831 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200832 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
833 [](PeerConfigurer* alice) {
834 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200835 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000836 auto frame_generator = CreateFromYuvFileFrameGenerator(
837 video, ClipNameToClipPath("foreman_cif"));
838 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200839 },
840 [](PeerConfigurer* bob) {});
Artem Titovb92d3e62022-02-15 18:46:21 +0100841 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200842}
843
844// TODO(sprang): Remove this if we have the similar ModerateLimits below?
Jeremy Leconte4100d552020-09-11 18:02:36 +0200845TEST(PCFullStackTest, Pc_Conference_Motion_Hd_2000kbps_100ms_32pkts_Queue) {
Artem Titov137f6c82019-05-17 10:51:15 +0200846 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
847 CreateNetworkEmulationManager();
848 BuiltInNetworkBehaviorConfig config;
849 config.queue_length_packets = 32;
850 config.queue_delay_ms = 100;
851 config.link_capacity_kbps = 2000;
852 auto fixture = CreateTestFixture(
853 "pc_conference_motion_hd_2000kbps_100ms_32pkts_queue",
Artem Titov1ff3c582020-07-01 15:20:37 +0200854 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200855 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
856 [](PeerConfigurer* alice) {
857 VideoConfig video(1280, 720, 50);
Artem Titov137f6c82019-05-17 10:51:15 +0200858 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000859 auto frame_generator = CreateFromYuvFileFrameGenerator(
860 video, ClipNameToClipPath("ConferenceMotion_1280_720_50"));
861 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200862 },
863 [](PeerConfigurer* bob) {});
Artem Titovb92d3e62022-02-15 18:46:21 +0100864 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +0200865}
866
Artem Titov137f6c82019-05-17 10:51:15 +0200867/*
868// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
Danil Chapovalov636865e2020-06-03 14:11:26 +0200869TEST(PCGenericDescriptorTest, ConferenceMotionHd2TLModerateLimits) {
Artem Titov137f6c82019-05-17 10:51:15 +0200870 auto fixture = CreateVideoQualityTestFixture();
871 ParamsWithLogging conf_motion_hd;
872 conf_motion_hd.call.send_side_bwe = true;
873 conf_motion_hd.video[0] = {
874 true, 1280,
875 720, 50,
876 30000, 3000000,
877 3000000, false,
878 "VP8", 2,
879 -1, 0,
880 false, false,
881 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
882 conf_motion_hd.analyzer = {
Danil Chapovalov636865e2020-06-03 14:11:26 +0200883 "conference_motion_hd_2tl_moderate_limits_generic_descriptor", 0.0, 0.0,
Artem Titov137f6c82019-05-17 10:51:15 +0200884 kTestDurationSec};
885 conf_motion_hd.config->queue_length_packets = 50;
886 conf_motion_hd.config->loss_percent = 3;
887 conf_motion_hd.config->queue_delay_ms = 100;
888 conf_motion_hd.config->link_capacity_kbps = 2000;
889 conf_motion_hd.call.generic_descriptor = GenericDescriptorEnabled();
890 fixture->RunWithAnalyzer(conf_motion_hd);
891}
892
893// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
894TEST(PCFullStackTest, ConferenceMotionHd3TLModerateLimits) {
895 auto fixture = CreateVideoQualityTestFixture();
896 ParamsWithLogging conf_motion_hd;
897 conf_motion_hd.call.send_side_bwe = true;
898 conf_motion_hd.video[0] = {
899 true, 1280,
900 720, 50,
901 30000, 3000000,
902 3000000, false,
903 "VP8", 3,
904 -1, 0,
905 false, false,
906 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
907 conf_motion_hd.analyzer = {"conference_motion_hd_3tl_moderate_limits", 0.0,
908 0.0, kTestDurationSec};
909 conf_motion_hd.config->queue_length_packets = 50;
910 conf_motion_hd.config->loss_percent = 3;
911 conf_motion_hd.config->queue_delay_ms = 100;
912 conf_motion_hd.config->link_capacity_kbps = 2000;
913 fixture->RunWithAnalyzer(conf_motion_hd);
914}
915
916// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
917TEST(PCFullStackTest, ConferenceMotionHd4TLModerateLimits) {
918 auto fixture = CreateVideoQualityTestFixture();
919 ParamsWithLogging conf_motion_hd;
920 conf_motion_hd.call.send_side_bwe = true;
921 conf_motion_hd.video[0] = {
922 true, 1280,
923 720, 50,
924 30000, 3000000,
925 3000000, false,
926 "VP8", 4,
927 -1, 0,
928 false, false,
929 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
930 conf_motion_hd.analyzer = {"conference_motion_hd_4tl_moderate_limits", 0.0,
931 0.0, kTestDurationSec};
932 conf_motion_hd.config->queue_length_packets = 50;
933 conf_motion_hd.config->loss_percent = 3;
934 conf_motion_hd.config->queue_delay_ms = 100;
935 conf_motion_hd.config->link_capacity_kbps = 2000;
936 fixture->RunWithAnalyzer(conf_motion_hd);
937}
938
939// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
940TEST(PCFullStackTest, ConferenceMotionHd3TLModerateLimitsAltTLPattern) {
941 test::ScopedFieldTrials field_trial(
942 AppendFieldTrials("WebRTC-UseShortVP8TL3Pattern/Enabled/"));
943 auto fixture = CreateVideoQualityTestFixture();
944 ParamsWithLogging conf_motion_hd;
945 conf_motion_hd.call.send_side_bwe = true;
946 conf_motion_hd.video[0] = {
947 true, 1280,
948 720, 50,
949 30000, 3000000,
950 3000000, false,
951 "VP8", 3,
952 -1, 0,
953 false, false,
954 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
955 conf_motion_hd.analyzer = {"conference_motion_hd_3tl_alt_moderate_limits",
956 0.0, 0.0, kTestDurationSec};
957 conf_motion_hd.config->queue_length_packets = 50;
958 conf_motion_hd.config->loss_percent = 3;
959 conf_motion_hd.config->queue_delay_ms = 100;
960 conf_motion_hd.config->link_capacity_kbps = 2000;
961 fixture->RunWithAnalyzer(conf_motion_hd);
962}
963
964// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
965TEST(PCFullStackTest,
966 ConferenceMotionHd3TLModerateLimitsAltTLPatternAndBaseHeavyTLAllocation) {
967 auto fixture = CreateVideoQualityTestFixture();
968 test::ScopedFieldTrials field_trial(
969 AppendFieldTrials("WebRTC-UseShortVP8TL3Pattern/Enabled/"
970 "WebRTC-UseBaseHeavyVP8TL3RateAllocation/Enabled/"));
971 ParamsWithLogging conf_motion_hd;
972 conf_motion_hd.call.send_side_bwe = true;
973 conf_motion_hd.video[0] = {
974 true, 1280,
975 720, 50,
976 30000, 3000000,
977 3000000, false,
978 "VP8", 3,
979 -1, 0,
980 false, false,
981 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
982 conf_motion_hd.analyzer = {
983 "conference_motion_hd_3tl_alt_heavy_moderate_limits", 0.0, 0.0,
984 kTestDurationSec};
985 conf_motion_hd.config->queue_length_packets = 50;
986 conf_motion_hd.config->loss_percent = 3;
987 conf_motion_hd.config->queue_delay_ms = 100;
988 conf_motion_hd.config->link_capacity_kbps = 2000;
989 fixture->RunWithAnalyzer(conf_motion_hd);
990}
991*/
992
993#if defined(RTC_ENABLE_VP9)
Jeremy Leconte4100d552020-09-11 18:02:36 +0200994TEST(PCFullStackTest, Pc_Conference_Motion_Hd_2000kbps_100ms_32pkts_Queue_Vp9) {
Artem Titov137f6c82019-05-17 10:51:15 +0200995 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
996 CreateNetworkEmulationManager();
997 BuiltInNetworkBehaviorConfig config;
998 config.queue_length_packets = 32;
999 config.queue_delay_ms = 100;
1000 config.link_capacity_kbps = 2000;
1001 auto fixture = CreateTestFixture(
1002 "pc_conference_motion_hd_2000kbps_100ms_32pkts_queue_vp9",
Artem Titov1ff3c582020-07-01 15:20:37 +02001003 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +02001004 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
1005 [](PeerConfigurer* alice) {
1006 VideoConfig video(1280, 720, 50);
Artem Titov137f6c82019-05-17 10:51:15 +02001007 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +00001008 auto frame_generator = CreateFromYuvFileFrameGenerator(
1009 video, ClipNameToClipPath("ConferenceMotion_1280_720_50"));
1010 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Mirko Bonadei9d58f972021-07-15 17:14:54 +02001011 alice->SetVideoCodecs({VideoCodecConfig(
1012 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
1013 {kVP9FmtpProfileId,
1014 VP9ProfileToString(VP9Profile::kProfile0)}})});
Artem Titov137f6c82019-05-17 10:51:15 +02001015 },
Mirko Bonadei9d58f972021-07-15 17:14:54 +02001016 [](PeerConfigurer* bob) {
1017 bob->SetVideoCodecs({VideoCodecConfig(
1018 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
1019 {kVP9FmtpProfileId,
1020 VP9ProfileToString(VP9Profile::kProfile0)}})});
1021 });
Artem Titovb92d3e62022-02-15 18:46:21 +01001022 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +02001023}
1024#endif
1025
Jeremy Lecontec8850cb2020-09-10 20:46:33 +02001026TEST(PCFullStackTest, Pc_Screenshare_Slides_No_Conference_Mode) {
Artem Titov39483c62019-07-19 17:03:52 +02001027 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1028 CreateNetworkEmulationManager();
1029 auto fixture = CreateTestFixture(
1030 "pc_screenshare_slides_no_conference_mode",
Artem Titov1ff3c582020-07-01 15:20:37 +02001031 *network_emulation_manager->time_controller(),
Artem Titov39483c62019-07-19 17:03:52 +02001032 CreateTwoNetworkLinks(network_emulation_manager.get(),
1033 BuiltInNetworkBehaviorConfig()),
1034 [](PeerConfigurer* alice) {
1035 VideoConfig video(1850, 1110, 5);
Artem Titov39483c62019-07-19 17:03:52 +02001036 video.stream_label = "alice-video";
Andrey Logvin435fb9a2020-05-08 08:02:49 +00001037 video.content_hint = VideoTrackInterface::ContentHint::kText;
1038 auto frame_generator = CreateScreenShareFrameGenerator(
1039 video, ScreenShareConfig(TimeDelta::Seconds(10)));
Andrey Logvinc0644672020-05-05 10:33:01 +00001040 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov39483c62019-07-19 17:03:52 +02001041 },
1042 [](PeerConfigurer* bob) {});
Artem Titovb92d3e62022-02-15 18:46:21 +01001043 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +02001044}
1045
Jeremy Lecontec8850cb2020-09-10 20:46:33 +02001046TEST(PCFullStackTest, Pc_Screenshare_Slides) {
Artem Titov39483c62019-07-19 17:03:52 +02001047 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1048 CreateNetworkEmulationManager();
1049 auto fixture = CreateTestFixture(
Artem Titov1ff3c582020-07-01 15:20:37 +02001050 "pc_screenshare_slides", *network_emulation_manager->time_controller(),
Artem Titov39483c62019-07-19 17:03:52 +02001051 CreateTwoNetworkLinks(network_emulation_manager.get(),
1052 BuiltInNetworkBehaviorConfig()),
1053 [](PeerConfigurer* alice) {
1054 VideoConfig video(1850, 1110, 5);
Artem Titov39483c62019-07-19 17:03:52 +02001055 video.stream_label = "alice-video";
Andrey Logvin435fb9a2020-05-08 08:02:49 +00001056 video.content_hint = VideoTrackInterface::ContentHint::kText;
1057 auto frame_generator = CreateScreenShareFrameGenerator(
1058 video, ScreenShareConfig(TimeDelta::Seconds(10)));
Andrey Logvinc0644672020-05-05 10:33:01 +00001059 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov39483c62019-07-19 17:03:52 +02001060 },
1061 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +01001062 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titov39483c62019-07-19 17:03:52 +02001063 run_params.use_conference_mode = true;
1064 fixture->Run(std::move(run_params));
1065}
1066
1067// TODO(bugs.webrtc.org/9840): Investigate why is this test flaky on Win/Mac.
1068#if !defined(WEBRTC_MAC) && !defined(WEBRTC_WIN)
Jeremy Lecontec8850cb2020-09-10 20:46:33 +02001069TEST(PCFullStackTest, Pc_Screenshare_Slides_Simulcast_No_Conference_Mode) {
Artem Titov39483c62019-07-19 17:03:52 +02001070 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1071 CreateNetworkEmulationManager();
1072 auto fixture = CreateTestFixture(
1073 "pc_screenshare_slides_simulcast_no_conference_mode",
Artem Titov1ff3c582020-07-01 15:20:37 +02001074 *network_emulation_manager->time_controller(),
Artem Titov39483c62019-07-19 17:03:52 +02001075 CreateTwoNetworkLinks(network_emulation_manager.get(),
1076 BuiltInNetworkBehaviorConfig()),
1077 [](PeerConfigurer* alice) {
Artem Titov4b9701e2019-08-28 13:48:02 +02001078 VideoConfig video(1850, 1110, 30);
Artem Titov4b9701e2019-08-28 13:48:02 +02001079 video.simulcast_config = VideoSimulcastConfig(2, 1);
1080 video.temporal_layers_count = 2;
Artem Titov39483c62019-07-19 17:03:52 +02001081 video.stream_label = "alice-video";
Andrey Logvin435fb9a2020-05-08 08:02:49 +00001082 video.content_hint = VideoTrackInterface::ContentHint::kText;
1083 auto frame_generator = CreateScreenShareFrameGenerator(
1084 video, ScreenShareConfig(TimeDelta::Seconds(10)));
Andrey Logvinc0644672020-05-05 10:33:01 +00001085 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov39483c62019-07-19 17:03:52 +02001086 },
1087 [](PeerConfigurer* bob) {});
Artem Titovb92d3e62022-02-15 18:46:21 +01001088 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov39483c62019-07-19 17:03:52 +02001089}
1090
Jeremy Lecontec8850cb2020-09-10 20:46:33 +02001091TEST(PCFullStackTest, Pc_Screenshare_Slides_Simulcast) {
Artem Titov39483c62019-07-19 17:03:52 +02001092 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1093 CreateNetworkEmulationManager();
1094 auto fixture = CreateTestFixture(
1095 "pc_screenshare_slides_simulcast",
Artem Titov1ff3c582020-07-01 15:20:37 +02001096 *network_emulation_manager->time_controller(),
Artem Titov39483c62019-07-19 17:03:52 +02001097 CreateTwoNetworkLinks(network_emulation_manager.get(),
1098 BuiltInNetworkBehaviorConfig()),
1099 [](PeerConfigurer* alice) {
Artem Titov4b9701e2019-08-28 13:48:02 +02001100 VideoConfig video(1850, 1110, 30);
Artem Titov4b9701e2019-08-28 13:48:02 +02001101 video.simulcast_config = VideoSimulcastConfig(2, 1);
1102 video.temporal_layers_count = 2;
Artem Titov39483c62019-07-19 17:03:52 +02001103 video.stream_label = "alice-video";
Andrey Logvin435fb9a2020-05-08 08:02:49 +00001104 video.content_hint = VideoTrackInterface::ContentHint::kText;
1105 auto frame_generator = CreateScreenShareFrameGenerator(
1106 video, ScreenShareConfig(TimeDelta::Seconds(10)));
Andrey Logvinc0644672020-05-05 10:33:01 +00001107 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov39483c62019-07-19 17:03:52 +02001108 },
1109 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +01001110 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titov39483c62019-07-19 17:03:52 +02001111 run_params.use_conference_mode = true;
1112 fixture->Run(std::move(run_params));
1113}
1114#endif // !defined(WEBRTC_MAC) && !defined(WEBRTC_WIN)
1115
1116/*
Artem Titov137f6c82019-05-17 10:51:15 +02001117#if !defined(WEBRTC_MAC)
Artem Titov137f6c82019-05-17 10:51:15 +02001118// TODO(bugs.webrtc.org/9840): Investigate why is this test flaky on Win/Mac.
1119#if !defined(WEBRTC_WIN)
Artem Titov137f6c82019-05-17 10:51:15 +02001120// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1121TEST(PCFullStackTest, ScreenshareSlidesVP8_2TL_Simulcast_low) {
Artem Titov137f6c82019-05-17 10:51:15 +02001122 auto fixture = CreateVideoQualityTestFixture();
1123 ParamsWithLogging screenshare;
1124 screenshare.call.send_side_bwe = true;
1125 screenshare.screenshare[0] = {true, false, 10};
1126 screenshare.video[0] = {true, 1850, 1110, 30, 800000, 2500000,
1127 2500000, false, "VP8", 2, 1, 400000,
1128 false, false, false, ""};
1129 screenshare.analyzer = {"screenshare_slides_simulcast_low", 0.0, 0.0,
1130 kTestDurationSec};
1131 VideoQualityTest::Params screenshare_params_high;
1132 screenshare_params_high.video[0] = {
1133 true, 1850, 1110, 60, 600000, 1250000, 1250000, false,
1134 "VP8", 2, 0, 400000, false, false, false, ""};
1135 VideoQualityTest::Params screenshare_params_low;
1136 screenshare_params_low.video[0] = {true, 1850, 1110, 5, 30000, 200000,
1137 1000000, false, "VP8", 2, 0, 400000,
1138 false, false, false, ""};
1139
1140 std::vector<VideoStream> streams = {
1141 VideoQualityTest::DefaultVideoStream(screenshare_params_low, 0),
1142 VideoQualityTest::DefaultVideoStream(screenshare_params_high, 0)};
1143 screenshare.ss[0] = {
1144 streams, 0, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1145 false};
1146 fixture->RunWithAnalyzer(screenshare);
1147}
1148
1149#endif // !defined(WEBRTC_WIN)
1150#endif // !defined(WEBRTC_MAC)
1151
1152// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1153TEST(PCFullStackTest, ScreenshareSlidesVP8_2TL_Scroll) {
1154 auto fixture = CreateVideoQualityTestFixture();
1155 ParamsWithLogging config;
1156 config.call.send_side_bwe = true;
1157 config.video[0] = {true, 1850, 1110 / 2, 5, 50000, 200000,
1158 1000000, false, "VP8", 2, 1, 400000,
1159 false, false, false, ""};
1160 config.screenshare[0] = {true, false, 10, 2};
1161 config.analyzer = {"screenshare_slides_scrolling", 0.0, 0.0,
1162 kTestDurationSec};
1163 fixture->RunWithAnalyzer(config);
1164}
1165
1166// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
Jeremy Lecontec8850cb2020-09-10 20:46:33 +02001167TEST(PCGenericDescriptorTest, Screenshare_Slides_Lossy_Net_Generic_Descriptor) {
Artem Titov137f6c82019-05-17 10:51:15 +02001168 auto fixture = CreateVideoQualityTestFixture();
1169 ParamsWithLogging screenshare;
1170 screenshare.call.send_side_bwe = true;
1171 screenshare.video[0] = {true, 1850, 1110, 5, 50000, 200000,
1172 1000000, false, "VP8", 2, 1, 400000,
1173 false, false, false, ""};
1174 screenshare.screenshare[0] = {true, false, 10};
Danil Chapovalov636865e2020-06-03 14:11:26 +02001175 screenshare.analyzer = {"screenshare_slides_lossy_net_generic_descriptor",
1176 0.0, 0.0, kTestDurationSec};
Artem Titov137f6c82019-05-17 10:51:15 +02001177 screenshare.config->loss_percent = 5;
1178 screenshare.config->queue_delay_ms = 200;
1179 screenshare.config->link_capacity_kbps = 500;
Danil Chapovalov636865e2020-06-03 14:11:26 +02001180 screenshare.call.generic_descriptor = true;
Artem Titov137f6c82019-05-17 10:51:15 +02001181 fixture->RunWithAnalyzer(screenshare);
1182}
1183
1184// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1185TEST(PCFullStackTest, ScreenshareSlidesVP8_2TL_VeryLossyNet) {
1186 auto fixture = CreateVideoQualityTestFixture();
1187 ParamsWithLogging screenshare;
1188 screenshare.call.send_side_bwe = true;
1189 screenshare.video[0] = {true, 1850, 1110, 5, 50000, 200000,
1190 1000000, false, "VP8", 2, 1, 400000,
1191 false, false, false, ""};
1192 screenshare.screenshare[0] = {true, false, 10};
1193 screenshare.analyzer = {"screenshare_slides_very_lossy", 0.0, 0.0,
1194 kTestDurationSec};
1195 screenshare.config->loss_percent = 10;
1196 screenshare.config->queue_delay_ms = 200;
1197 screenshare.config->link_capacity_kbps = 500;
1198 fixture->RunWithAnalyzer(screenshare);
1199}
1200
1201// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1202TEST(PCFullStackTest, ScreenshareSlidesVP8_2TL_LossyNetRestrictedQueue) {
1203 auto fixture = CreateVideoQualityTestFixture();
1204 ParamsWithLogging screenshare;
1205 screenshare.call.send_side_bwe = true;
1206 screenshare.video[0] = {true, 1850, 1110, 5, 50000, 200000,
1207 1000000, false, "VP8", 2, 1, 400000,
1208 false, false, false, ""};
1209 screenshare.screenshare[0] = {true, false, 10};
1210 screenshare.analyzer = {"screenshare_slides_lossy_limited", 0.0, 0.0,
1211 kTestDurationSec};
1212 screenshare.config->loss_percent = 5;
1213 screenshare.config->link_capacity_kbps = 200;
1214 screenshare.config->queue_length_packets = 30;
1215
1216 fixture->RunWithAnalyzer(screenshare);
1217}
1218
1219// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1220TEST(PCFullStackTest, ScreenshareSlidesVP8_2TL_ModeratelyRestricted) {
1221 auto fixture = CreateVideoQualityTestFixture();
1222 ParamsWithLogging screenshare;
1223 screenshare.call.send_side_bwe = true;
1224 screenshare.video[0] = {true, 1850, 1110, 5, 50000, 200000,
1225 1000000, false, "VP8", 2, 1, 400000,
1226 false, false, false, ""};
1227 screenshare.screenshare[0] = {true, false, 10};
1228 screenshare.analyzer = {"screenshare_slides_moderately_restricted", 0.0, 0.0,
1229 kTestDurationSec};
1230 screenshare.config->loss_percent = 1;
1231 screenshare.config->link_capacity_kbps = 1200;
1232 screenshare.config->queue_length_packets = 30;
1233
1234 fixture->RunWithAnalyzer(screenshare);
1235}
1236
1237namespace {
1238// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1239// Since ParamsWithLogging::Video is not trivially destructible, we can't
1240// store these structs as const globals.
1241ParamsWithLogging::Video SvcVp9Video() {
1242 return ParamsWithLogging::Video{
1243 true, 1280,
1244 720, 30,
1245 800000, 2500000,
1246 2500000, false,
1247 "VP9", 3,
1248 2, 400000,
1249 false, false,
1250 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
1251}
1252
1253ParamsWithLogging::Video SimulcastVp8VideoHigh() {
1254 return ParamsWithLogging::Video{
1255 true, 1280,
1256 720, 30,
1257 800000, 2500000,
1258 2500000, false,
1259 "VP8", 3,
1260 2, 400000,
1261 false, false,
1262 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
1263}
1264
1265ParamsWithLogging::Video SimulcastVp8VideoMedium() {
1266 return ParamsWithLogging::Video{
1267 true, 640,
1268 360, 30,
1269 150000, 500000,
1270 700000, false,
1271 "VP8", 3,
1272 2, 400000,
1273 false, false,
1274 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
1275}
1276
1277ParamsWithLogging::Video SimulcastVp8VideoLow() {
1278 return ParamsWithLogging::Video{
1279 true, 320,
1280 180, 30,
1281 30000, 150000,
1282 200000, false,
1283 "VP8", 3,
1284 2, 400000,
1285 false, false,
1286 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
1287}
1288} // namespace
Artem Titov733a7812019-07-24 14:53:15 +02001289*/
Artem Titov137f6c82019-05-17 10:51:15 +02001290
1291#if defined(RTC_ENABLE_VP9)
1292
Jeremy Leconte4100d552020-09-11 18:02:36 +02001293TEST(PCFullStackTest, Pc_Screenshare_Slides_Vp9_3sl_High_Fps) {
Artem Titov1e49ab22019-07-30 13:17:25 +02001294 webrtc::test::ScopedFieldTrials override_trials(
1295 AppendFieldTrials("WebRTC-Vp9InterLayerPred/"
1296 "Enabled,inter_layer_pred_mode:on/"));
Artem Titov733a7812019-07-24 14:53:15 +02001297 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1298 CreateNetworkEmulationManager();
1299 auto fixture = CreateTestFixture(
1300 "pc_screenshare_slides_vp9_3sl_high_fps",
Artem Titov1ff3c582020-07-01 15:20:37 +02001301 *network_emulation_manager->time_controller(),
Artem Titov733a7812019-07-24 14:53:15 +02001302 CreateTwoNetworkLinks(network_emulation_manager.get(),
1303 BuiltInNetworkBehaviorConfig()),
1304 [](PeerConfigurer* alice) {
1305 VideoConfig video(1850, 1110, 30);
1306 video.stream_label = "alice-video";
Artem Titov733a7812019-07-24 14:53:15 +02001307 video.simulcast_config = VideoSimulcastConfig(3, 2);
Andrey Logvin435fb9a2020-05-08 08:02:49 +00001308 video.content_hint = VideoTrackInterface::ContentHint::kText;
1309 auto frame_generator = CreateScreenShareFrameGenerator(
1310 video, ScreenShareConfig(TimeDelta::Seconds(10)));
Andrey Logvinc0644672020-05-05 10:33:01 +00001311 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Mirko Bonadei9d58f972021-07-15 17:14:54 +02001312 alice->SetVideoCodecs({VideoCodecConfig(
1313 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
1314 {kVP9FmtpProfileId,
1315 VP9ProfileToString(VP9Profile::kProfile0)}})});
Artem Titov733a7812019-07-24 14:53:15 +02001316 },
Mirko Bonadei9d58f972021-07-15 17:14:54 +02001317 [](PeerConfigurer* bob) {
1318 bob->SetVideoCodecs({VideoCodecConfig(
1319 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
1320 {kVP9FmtpProfileId,
1321 VP9ProfileToString(VP9Profile::kProfile0)}})});
1322 });
Artem Titovb92d3e62022-02-15 18:46:21 +01001323 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +02001324}
1325
Jeremy Leconte4100d552020-09-11 18:02:36 +02001326TEST(PCFullStackTest, Pc_Vp9svc_3sl_High) {
Artem Titov1e49ab22019-07-30 13:17:25 +02001327 webrtc::test::ScopedFieldTrials override_trials(
1328 AppendFieldTrials("WebRTC-Vp9InterLayerPred/"
1329 "Enabled,inter_layer_pred_mode:on/"));
1330 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1331 CreateNetworkEmulationManager();
1332 auto fixture = CreateTestFixture(
Artem Titov1ff3c582020-07-01 15:20:37 +02001333 "pc_vp9svc_3sl_high", *network_emulation_manager->time_controller(),
Artem Titov1e49ab22019-07-30 13:17:25 +02001334 CreateTwoNetworkLinks(network_emulation_manager.get(),
1335 BuiltInNetworkBehaviorConfig()),
1336 [](PeerConfigurer* alice) {
1337 VideoConfig video(1280, 720, 30);
1338 video.stream_label = "alice-video";
Artem Titov1e49ab22019-07-30 13:17:25 +02001339 video.simulcast_config = VideoSimulcastConfig(3, 2);
1340 video.temporal_layers_count = 3;
Andrey Logvinc0644672020-05-05 10:33:01 +00001341 auto frame_generator = CreateFromYuvFileFrameGenerator(
1342 video, ClipNameToClipPath("ConferenceMotion_1280_720_50"));
1343 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Mirko Bonadei9d58f972021-07-15 17:14:54 +02001344 alice->SetVideoCodecs({VideoCodecConfig(
1345 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
1346 {kVP9FmtpProfileId,
1347 VP9ProfileToString(VP9Profile::kProfile0)}})});
Artem Titov1e49ab22019-07-30 13:17:25 +02001348 },
Mirko Bonadei9d58f972021-07-15 17:14:54 +02001349 [](PeerConfigurer* bob) {
1350 bob->SetVideoCodecs({VideoCodecConfig(
1351 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
1352 {kVP9FmtpProfileId,
1353 VP9ProfileToString(VP9Profile::kProfile0)}})});
1354 });
Artem Titovb92d3e62022-02-15 18:46:21 +01001355 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov1e49ab22019-07-30 13:17:25 +02001356}
1357
Jeremy Leconte4100d552020-09-11 18:02:36 +02001358TEST(PCFullStackTest, Pc_Vp9svc_3sl_Low) {
Artem Titov1e49ab22019-07-30 13:17:25 +02001359 webrtc::test::ScopedFieldTrials override_trials(
1360 AppendFieldTrials("WebRTC-Vp9InterLayerPred/"
1361 "Enabled,inter_layer_pred_mode:on/"));
1362 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1363 CreateNetworkEmulationManager();
1364 auto fixture = CreateTestFixture(
Artem Titov1ff3c582020-07-01 15:20:37 +02001365 "pc_vp9svc_3sl_low", *network_emulation_manager->time_controller(),
Artem Titov1e49ab22019-07-30 13:17:25 +02001366 CreateTwoNetworkLinks(network_emulation_manager.get(),
1367 BuiltInNetworkBehaviorConfig()),
1368 [](PeerConfigurer* alice) {
1369 VideoConfig video(1280, 720, 30);
1370 video.stream_label = "alice-video";
Artem Titov1e49ab22019-07-30 13:17:25 +02001371 video.simulcast_config = VideoSimulcastConfig(3, 0);
1372 video.temporal_layers_count = 3;
Andrey Logvinc0644672020-05-05 10:33:01 +00001373 auto frame_generator = CreateFromYuvFileFrameGenerator(
1374 video, ClipNameToClipPath("ConferenceMotion_1280_720_50"));
1375 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Mirko Bonadei9d58f972021-07-15 17:14:54 +02001376 alice->SetVideoCodecs({VideoCodecConfig(
1377 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
1378 {kVP9FmtpProfileId,
1379 VP9ProfileToString(VP9Profile::kProfile0)}})});
Artem Titov1e49ab22019-07-30 13:17:25 +02001380 },
Mirko Bonadei9d58f972021-07-15 17:14:54 +02001381 [](PeerConfigurer* bob) {
1382 bob->SetVideoCodecs({VideoCodecConfig(
1383 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
1384 {kVP9FmtpProfileId,
1385 VP9ProfileToString(VP9Profile::kProfile0)}})});
1386 });
Artem Titovb92d3e62022-02-15 18:46:21 +01001387 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov1e49ab22019-07-30 13:17:25 +02001388}
1389
Artem Titov733a7812019-07-24 14:53:15 +02001390#endif // defined(RTC_ENABLE_VP9)
1391
1392/*
Artem Titov137f6c82019-05-17 10:51:15 +02001393// bugs.webrtc.org/9506
1394#if !defined(WEBRTC_MAC)
1395
1396// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1397TEST(PCFullStackTest, VP9KSVC_3SL_High) {
1398 webrtc::test::ScopedFieldTrials override_trials(
1399 AppendFieldTrials("WebRTC-Vp9IssueKeyFrameOnLayerDeactivation/Enabled/"));
1400 auto fixture = CreateVideoQualityTestFixture();
1401 ParamsWithLogging simulcast;
1402 simulcast.call.send_side_bwe = true;
1403 simulcast.video[0] = SvcVp9Video();
1404 simulcast.analyzer = {"vp9ksvc_3sl_high", 0.0, 0.0, kTestDurationSec};
1405 simulcast.ss[0] = {
1406 std::vector<VideoStream>(), 0, 3, 2, InterLayerPredMode::kOnKeyPic,
1407 std::vector<SpatialLayer>(), false};
1408 fixture->RunWithAnalyzer(simulcast);
1409}
1410
1411// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1412TEST(PCFullStackTest, VP9KSVC_3SL_Medium) {
1413 webrtc::test::ScopedFieldTrials override_trials(
1414 AppendFieldTrials("WebRTC-Vp9IssueKeyFrameOnLayerDeactivation/Enabled/"));
1415 auto fixture = CreateVideoQualityTestFixture();
1416 ParamsWithLogging simulcast;
1417 simulcast.call.send_side_bwe = true;
1418 simulcast.video[0] = SvcVp9Video();
1419 simulcast.analyzer = {"vp9ksvc_3sl_medium", 0.0, 0.0, kTestDurationSec};
1420 simulcast.ss[0] = {
1421 std::vector<VideoStream>(), 0, 3, 1, InterLayerPredMode::kOnKeyPic,
1422 std::vector<SpatialLayer>(), false};
1423 fixture->RunWithAnalyzer(simulcast);
1424}
1425
1426// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1427TEST(PCFullStackTest, VP9KSVC_3SL_Low) {
1428 webrtc::test::ScopedFieldTrials override_trials(
1429 AppendFieldTrials("WebRTC-Vp9IssueKeyFrameOnLayerDeactivation/Enabled/"));
1430 auto fixture = CreateVideoQualityTestFixture();
1431 ParamsWithLogging simulcast;
1432 simulcast.call.send_side_bwe = true;
1433 simulcast.video[0] = SvcVp9Video();
1434 simulcast.analyzer = {"vp9ksvc_3sl_low", 0.0, 0.0, kTestDurationSec};
1435 simulcast.ss[0] = {
1436 std::vector<VideoStream>(), 0, 3, 0, InterLayerPredMode::kOnKeyPic,
1437 std::vector<SpatialLayer>(), false};
1438 fixture->RunWithAnalyzer(simulcast);
1439}
1440
1441// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1442TEST(PCFullStackTest, VP9KSVC_3SL_Medium_Network_Restricted) {
1443 webrtc::test::ScopedFieldTrials override_trials(
1444 AppendFieldTrials("WebRTC-Vp9IssueKeyFrameOnLayerDeactivation/Enabled/"));
1445 auto fixture = CreateVideoQualityTestFixture();
1446 ParamsWithLogging simulcast;
1447 simulcast.call.send_side_bwe = true;
1448 simulcast.video[0] = SvcVp9Video();
1449 simulcast.analyzer = {"vp9ksvc_3sl_medium_network_restricted", 0.0, 0.0,
1450 kTestDurationSec};
1451 simulcast.ss[0] = {
1452 std::vector<VideoStream>(), 0, 3, -1, InterLayerPredMode::kOnKeyPic,
1453 std::vector<SpatialLayer>(), false};
1454 simulcast.config->link_capacity_kbps = 1000;
1455 simulcast.config->queue_delay_ms = 100;
1456 fixture->RunWithAnalyzer(simulcast);
1457}
1458
1459// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1460// TODO(webrtc:9722): Remove when experiment is cleaned up.
1461TEST(PCFullStackTest, VP9KSVC_3SL_Medium_Network_Restricted_Trusted_Rate) {
1462 webrtc::test::ScopedFieldTrials override_trials(
Mirko Bonadeie39b3782020-09-24 14:02:39 +02001463 AppendFieldTrials("WebRTC-Vp9IssueKeyFrameOnLayerDeactivation/Enabled/"));
Artem Titov137f6c82019-05-17 10:51:15 +02001464 auto fixture = CreateVideoQualityTestFixture();
1465 ParamsWithLogging simulcast;
1466 simulcast.call.send_side_bwe = true;
1467 simulcast.video[0] = SvcVp9Video();
1468 simulcast.analyzer = {"vp9ksvc_3sl_medium_network_restricted_trusted_rate",
1469 0.0, 0.0, kTestDurationSec};
1470 simulcast.ss[0] = {
1471 std::vector<VideoStream>(), 0, 3, -1, InterLayerPredMode::kOnKeyPic,
1472 std::vector<SpatialLayer>(), false};
1473 simulcast.config->link_capacity_kbps = 1000;
1474 simulcast.config->queue_delay_ms = 100;
1475 fixture->RunWithAnalyzer(simulcast);
1476}
1477#endif // !defined(WEBRTC_MAC)
1478
1479#endif // defined(RTC_ENABLE_VP9)
Artem Titov39483c62019-07-19 17:03:52 +02001480*/
Artem Titov137f6c82019-05-17 10:51:15 +02001481
1482// Android bots can't handle FullHD, so disable the test.
1483// TODO(bugs.webrtc.org/9220): Investigate source of flakiness on Mac.
1484#if defined(WEBRTC_ANDROID) || defined(WEBRTC_MAC)
Jeremy Lecontec8850cb2020-09-10 20:46:33 +02001485#define MAYBE_Pc_Simulcast_HD_High DISABLED_Pc_Simulcast_HD_High
Artem Titov137f6c82019-05-17 10:51:15 +02001486#else
Jeremy Lecontec8850cb2020-09-10 20:46:33 +02001487#define MAYBE_Pc_Simulcast_HD_High Pc_Simulcast_HD_High
Artem Titov137f6c82019-05-17 10:51:15 +02001488#endif
Jeremy Lecontec8850cb2020-09-10 20:46:33 +02001489TEST(PCFullStackTest, MAYBE_Pc_Simulcast_HD_High) {
Artem Titov137f6c82019-05-17 10:51:15 +02001490 webrtc::test::ScopedFieldTrials override_trials(AppendFieldTrials(
1491 "WebRTC-ForceSimulatedOveruseIntervalMs/1000-50000-300/"));
Artem Titov39483c62019-07-19 17:03:52 +02001492 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1493 CreateNetworkEmulationManager();
1494 BuiltInNetworkBehaviorConfig config;
1495 config.loss_percent = 0;
1496 config.queue_delay_ms = 100;
1497 auto fixture = CreateTestFixture(
Artem Titov1ff3c582020-07-01 15:20:37 +02001498 "pc_simulcast_HD_high", *network_emulation_manager->time_controller(),
Artem Titov39483c62019-07-19 17:03:52 +02001499 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
1500 [](PeerConfigurer* alice) {
1501 VideoConfig video(1920, 1080, 30);
Artem Titov39483c62019-07-19 17:03:52 +02001502 video.simulcast_config = VideoSimulcastConfig(3, 2);
Artem Titov4b9701e2019-08-28 13:48:02 +02001503 video.temporal_layers_count = 3;
Artem Titov39483c62019-07-19 17:03:52 +02001504 video.stream_label = "alice-video";
Andrey Logvin42c59522020-05-06 12:18:26 +00001505 alice->AddVideoConfig(std::move(video));
Artem Titov39483c62019-07-19 17:03:52 +02001506 },
1507 [](PeerConfigurer* bob) {});
Artem Titovb92d3e62022-02-15 18:46:21 +01001508 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +02001509}
1510
Jeremy Leconte4100d552020-09-11 18:02:36 +02001511TEST(PCFullStackTest, Pc_Simulcast_Vp8_3sl_High) {
Artem Titov39483c62019-07-19 17:03:52 +02001512 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1513 CreateNetworkEmulationManager();
1514 BuiltInNetworkBehaviorConfig config;
1515 config.loss_percent = 0;
1516 config.queue_delay_ms = 100;
1517 auto fixture = CreateTestFixture(
1518 "pc_simulcast_vp8_3sl_high",
Artem Titov1ff3c582020-07-01 15:20:37 +02001519 *network_emulation_manager->time_controller(),
Artem Titov39483c62019-07-19 17:03:52 +02001520 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
1521 [](PeerConfigurer* alice) {
1522 VideoConfig video(1280, 720, 30);
Artem Titov39483c62019-07-19 17:03:52 +02001523 video.simulcast_config = VideoSimulcastConfig(3, 2);
1524 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +00001525 auto frame_generator = CreateFromYuvFileFrameGenerator(
1526 video, ClipNameToClipPath("ConferenceMotion_1280_720_50"));
1527 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov39483c62019-07-19 17:03:52 +02001528 },
1529 [](PeerConfigurer* bob) {});
Artem Titovb92d3e62022-02-15 18:46:21 +01001530 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +02001531}
1532
Jeremy Leconte4100d552020-09-11 18:02:36 +02001533TEST(PCFullStackTest, Pc_Simulcast_Vp8_3sl_Low) {
Artem Titov39483c62019-07-19 17:03:52 +02001534 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1535 CreateNetworkEmulationManager();
1536 BuiltInNetworkBehaviorConfig config;
1537 config.loss_percent = 0;
1538 config.queue_delay_ms = 100;
1539 auto fixture = CreateTestFixture(
Artem Titov1ff3c582020-07-01 15:20:37 +02001540 "pc_simulcast_vp8_3sl_low", *network_emulation_manager->time_controller(),
Artem Titov39483c62019-07-19 17:03:52 +02001541 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
1542 [](PeerConfigurer* alice) {
1543 VideoConfig video(1280, 720, 30);
Artem Titov39483c62019-07-19 17:03:52 +02001544 video.simulcast_config = VideoSimulcastConfig(3, 0);
1545 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +00001546 auto frame_generator = CreateFromYuvFileFrameGenerator(
1547 video, ClipNameToClipPath("ConferenceMotion_1280_720_50"));
1548 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov39483c62019-07-19 17:03:52 +02001549 },
1550 [](PeerConfigurer* bob) {});
Artem Titovb92d3e62022-02-15 18:46:21 +01001551 fixture->Run(RunParams(TimeDelta::Seconds(kTestDurationSec)));
Artem Titov137f6c82019-05-17 10:51:15 +02001552}
1553
Artem Titov39483c62019-07-19 17:03:52 +02001554/*
Artem Titov137f6c82019-05-17 10:51:15 +02001555// This test assumes ideal network conditions with target bandwidth being
1556// available and exercises WebRTC calls with a high target bitrate(100 Mbps).
1557// Android32 bots can't handle this high bitrate, so disable test for those.
1558#if defined(WEBRTC_ANDROID)
1559#define MAYBE_HighBitrateWithFakeCodec DISABLED_HighBitrateWithFakeCodec
1560#else
1561#define MAYBE_HighBitrateWithFakeCodec HighBitrateWithFakeCodec
1562#endif // defined(WEBRTC_ANDROID)
1563// TODO(bugs.webrtc.org/10639) Disabled because target bitrate can't be
1564configured yet. TEST(PCFullStackTest, MAYBE_HighBitrateWithFakeCodec) { auto
1565fixture = CreateVideoQualityTestFixture(); const int target_bitrate = 100000000;
1566 ParamsWithLogging generator;
1567 generator.call.send_side_bwe = true;
1568 generator.call.call_bitrate_config.min_bitrate_bps = target_bitrate;
1569 generator.call.call_bitrate_config.start_bitrate_bps = target_bitrate;
1570 generator.call.call_bitrate_config.max_bitrate_bps = target_bitrate;
1571 generator.video[0] = {true,
1572 360,
1573 240,
1574 30,
1575 target_bitrate / 2,
1576 target_bitrate,
1577 target_bitrate * 2,
1578 false,
1579 "FakeCodec",
1580 1,
1581 0,
1582 0,
1583 false,
1584 false,
1585 false,
1586 "Generator"};
1587 generator.analyzer = {"high_bitrate_with_fake_codec", 0.0, 0.0,
1588 kTestDurationSec};
1589 fixture->RunWithAnalyzer(generator);
1590}
1591
1592// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1593TEST(PCFullStackTest, LargeRoomVP8_5thumb) {
1594 auto fixture = CreateVideoQualityTestFixture();
1595 ParamsWithLogging large_room;
1596 large_room.call.send_side_bwe = true;
1597 large_room.video[0] = SimulcastVp8VideoHigh();
1598 large_room.analyzer = {"largeroom_5thumb", 0.0, 0.0, kTestDurationSec};
1599 large_room.config->loss_percent = 0;
1600 large_room.config->queue_delay_ms = 100;
1601 ParamsWithLogging video_params_high;
1602 video_params_high.video[0] = SimulcastVp8VideoHigh();
1603 ParamsWithLogging video_params_medium;
1604 video_params_medium.video[0] = SimulcastVp8VideoMedium();
1605 ParamsWithLogging video_params_low;
1606 video_params_low.video[0] = SimulcastVp8VideoLow();
1607
1608 std::vector<VideoStream> streams = {
1609 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
1610 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
1611 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
1612 large_room.call.num_thumbnails = 5;
1613 large_room.ss[0] = {
1614 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1615 false};
1616 fixture->RunWithAnalyzer(large_room);
1617}
1618
1619#if defined(WEBRTC_ANDROID) || defined(WEBRTC_IOS)
1620// Fails on mobile devices:
1621// https://bugs.chromium.org/p/webrtc/issues/detail?id=7301
1622#define MAYBE_LargeRoomVP8_50thumb DISABLED_LargeRoomVP8_50thumb
1623#define MAYBE_LargeRoomVP8_15thumb DISABLED_LargeRoomVP8_15thumb
1624#else
1625#define MAYBE_LargeRoomVP8_50thumb LargeRoomVP8_50thumb
1626#define MAYBE_LargeRoomVP8_15thumb LargeRoomVP8_15thumb
1627#endif
1628// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1629TEST(PCFullStackTest, MAYBE_LargeRoomVP8_15thumb) {
1630 auto fixture = CreateVideoQualityTestFixture();
1631 ParamsWithLogging large_room;
1632 large_room.call.send_side_bwe = true;
1633 large_room.video[0] = SimulcastVp8VideoHigh();
1634 large_room.analyzer = {"largeroom_15thumb", 0.0, 0.0, kTestDurationSec};
1635 large_room.config->loss_percent = 0;
1636 large_room.config->queue_delay_ms = 100;
1637 ParamsWithLogging video_params_high;
1638 video_params_high.video[0] = SimulcastVp8VideoHigh();
1639 ParamsWithLogging video_params_medium;
1640 video_params_medium.video[0] = SimulcastVp8VideoMedium();
1641 ParamsWithLogging video_params_low;
1642 video_params_low.video[0] = SimulcastVp8VideoLow();
1643
1644 std::vector<VideoStream> streams = {
1645 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
1646 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
1647 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
1648 large_room.call.num_thumbnails = 15;
1649 large_room.ss[0] = {
1650 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1651 false};
1652 fixture->RunWithAnalyzer(large_room);
1653}
1654
1655// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1656TEST(PCFullStackTest, MAYBE_LargeRoomVP8_50thumb) {
1657 auto fixture = CreateVideoQualityTestFixture();
1658 ParamsWithLogging large_room;
1659 large_room.call.send_side_bwe = true;
1660 large_room.video[0] = SimulcastVp8VideoHigh();
1661 large_room.analyzer = {"largeroom_50thumb", 0.0, 0.0, kTestDurationSec};
1662 large_room.config->loss_percent = 0;
1663 large_room.config->queue_delay_ms = 100;
1664 ParamsWithLogging video_params_high;
1665 video_params_high.video[0] = SimulcastVp8VideoHigh();
1666 ParamsWithLogging video_params_medium;
1667 video_params_medium.video[0] = SimulcastVp8VideoMedium();
1668 ParamsWithLogging video_params_low;
1669 video_params_low.video[0] = SimulcastVp8VideoLow();
1670
1671 std::vector<VideoStream> streams = {
1672 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
1673 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
1674 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
1675 large_room.call.num_thumbnails = 50;
1676 large_room.ss[0] = {
1677 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1678 false};
1679 fixture->RunWithAnalyzer(large_room);
1680}
1681*/
1682
Bjorn Terelius83e6ece2021-03-03 17:53:45 +01001683/*
Artem Titov137f6c82019-05-17 10:51:15 +02001684class PCDualStreamsTest : public ::testing::TestWithParam<int> {};
1685
Artem Titov137f6c82019-05-17 10:51:15 +02001686// Disable dual video test on mobile device becuase it's too heavy.
1687// TODO(bugs.webrtc.org/9840): Investigate why is this test flaky on MAC.
1688#if !defined(WEBRTC_ANDROID) && !defined(WEBRTC_IOS) && !defined(WEBRTC_MAC)
1689// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1690TEST_P(PCDualStreamsTest,
1691 ModeratelyRestricted_SlidesVp8_2TL_Simulcast_Video_Simulcast_High) {
Artem Titov137f6c82019-05-17 10:51:15 +02001692 const int first_stream = GetParam();
1693 ParamsWithLogging dual_streams;
1694
1695 // Screenshare Settings.
1696 dual_streams.screenshare[first_stream] = {true, false, 10};
1697 dual_streams.video[first_stream] = {true, 1850, 1110, 5, 800000, 2500000,
1698 2500000, false, "VP8", 2, 1, 400000,
1699 false, false, false, ""};
1700
1701 ParamsWithLogging screenshare_params_high;
1702 screenshare_params_high.video[0] = {
1703 true, 1850, 1110, 60, 600000, 1250000, 1250000, false,
1704 "VP8", 2, 0, 400000, false, false, false, ""};
1705 VideoQualityTest::Params screenshare_params_low;
1706 screenshare_params_low.video[0] = {true, 1850, 1110, 5, 30000, 200000,
1707 1000000, false, "VP8", 2, 0, 400000,
1708 false, false, false, ""};
1709 std::vector<VideoStream> screenhsare_streams = {
1710 VideoQualityTest::DefaultVideoStream(screenshare_params_low, 0),
1711 VideoQualityTest::DefaultVideoStream(screenshare_params_high, 0)};
1712
1713 dual_streams.ss[first_stream] = {
1714 screenhsare_streams, 1, 1, 0, InterLayerPredMode::kOn,
1715 std::vector<SpatialLayer>(), false};
1716
1717 // Video settings.
1718 dual_streams.video[1 - first_stream] = SimulcastVp8VideoHigh();
1719
1720 ParamsWithLogging video_params_high;
1721 video_params_high.video[0] = SimulcastVp8VideoHigh();
1722 ParamsWithLogging video_params_medium;
1723 video_params_medium.video[0] = SimulcastVp8VideoMedium();
1724 ParamsWithLogging video_params_low;
1725 video_params_low.video[0] = SimulcastVp8VideoLow();
1726 std::vector<VideoStream> streams = {
1727 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
1728 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
1729 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
1730
1731 dual_streams.ss[1 - first_stream] = {
1732 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1733 false};
1734
1735 // Call settings.
1736 dual_streams.call.send_side_bwe = true;
1737 dual_streams.call.dual_video = true;
1738 std::string test_label = "dualstreams_moderately_restricted_screenshare_" +
1739 std::to_string(first_stream);
1740 dual_streams.analyzer = {test_label, 0.0, 0.0, kTestDurationSec};
1741 dual_streams.config->loss_percent = 1;
1742 dual_streams.config->link_capacity_kbps = 7500;
1743 dual_streams.config->queue_length_packets = 30;
1744 dual_streams.config->queue_delay_ms = 100;
1745
1746 auto fixture = CreateVideoQualityTestFixture();
1747 fixture->RunWithAnalyzer(dual_streams);
1748}
1749#endif // !defined(WEBRTC_ANDROID) && !defined(WEBRTC_IOS) &&
1750 // !defined(WEBRTC_MAC)
1751
1752// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1753TEST_P(PCDualStreamsTest, Conference_Restricted) {
1754 const int first_stream = GetParam();
1755 ParamsWithLogging dual_streams;
1756
1757 // Screenshare Settings.
1758 dual_streams.screenshare[first_stream] = {true, false, 10};
1759 dual_streams.video[first_stream] = {true, 1850, 1110, 5, 800000, 2500000,
1760 2500000, false, "VP8", 3, 2, 400000,
1761 false, false, false, ""};
1762 // Video settings.
1763 dual_streams.video[1 - first_stream] = {
1764 true, 1280,
1765 720, 30,
1766 150000, 500000,
1767 700000, false,
1768 "VP8", 3,
1769 2, 400000,
1770 false, false,
1771 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
1772
1773 // Call settings.
1774 dual_streams.call.send_side_bwe = true;
1775 dual_streams.call.dual_video = true;
1776 std::string test_label = "dualstreams_conference_restricted_screenshare_" +
1777 std::to_string(first_stream);
1778 dual_streams.analyzer = {test_label, 0.0, 0.0, kTestDurationSec};
1779 dual_streams.config->loss_percent = 1;
1780 dual_streams.config->link_capacity_kbps = 5000;
1781 dual_streams.config->queue_length_packets = 30;
1782 dual_streams.config->queue_delay_ms = 100;
1783
1784 auto fixture = CreateVideoQualityTestFixture();
1785 fixture->RunWithAnalyzer(dual_streams);
1786}
Artem Titov137f6c82019-05-17 10:51:15 +02001787
1788INSTANTIATE_TEST_SUITE_P(PCFullStackTest,
1789 PCDualStreamsTest,
1790 ::testing::Values(0, 1));
Bjorn Terelius83e6ece2021-03-03 17:53:45 +01001791*/
Artem Titov137f6c82019-05-17 10:51:15 +02001792
1793} // namespace webrtc