blob: 6728e4bd19dde3e483524567b952cd5b2dd4d019 [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 });
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100135 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titov137f6c82019-05-17 10:51:15 +0200136 run_params.use_flex_fec = false;
137 run_params.use_ulp_fec = false;
138 fixture->Run(std::move(run_params));
139}
140
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200141TEST(PCGenericDescriptorTest,
142 Pc_Foreman_Cif_Delay_50_0_Plr_5_VP9_Generic_Descriptor) {
Artem Titov137f6c82019-05-17 10:51:15 +0200143 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
144 CreateNetworkEmulationManager();
145 BuiltInNetworkBehaviorConfig config;
146 config.loss_percent = 5;
147 config.queue_delay_ms = 50;
148 auto fixture = CreateTestFixture(
Danil Chapovalov636865e2020-06-03 14:11:26 +0200149 "pc_foreman_cif_delay_50_0_plr_5_VP9_generic_descriptor",
Artem Titov1ff3c582020-07-01 15:20:37 +0200150 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200151 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
152 [](PeerConfigurer* alice) {
153 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200154 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000155 auto frame_generator = CreateFromYuvFileFrameGenerator(
156 video, ClipNameToClipPath("foreman_cif"));
157 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200158 alice->SetVideoCodecs({VideoCodecConfig(
159 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
160 {kVP9FmtpProfileId,
161 VP9ProfileToString(VP9Profile::kProfile0)}})});
Artem Titov137f6c82019-05-17 10:51:15 +0200162 },
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200163 [](PeerConfigurer* bob) {
164 bob->SetVideoCodecs({VideoCodecConfig(
165 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
166 {kVP9FmtpProfileId,
167 VP9ProfileToString(VP9Profile::kProfile0)}})});
168 });
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100169 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titov137f6c82019-05-17 10:51:15 +0200170 run_params.use_flex_fec = false;
171 run_params.use_ulp_fec = false;
172 fixture->Run(std::move(run_params));
173}
174
Artem Titove731a2e2019-07-02 10:08:17 +0200175// VP9 2nd profile isn't supported on android arm and arm 64.
Artem Titovcecee992019-07-03 11:55:28 +0200176#if (defined(WEBRTC_ANDROID) && \
177 (defined(WEBRTC_ARCH_ARM64) || defined(WEBRTC_ARCH_ARM))) || \
178 (defined(WEBRTC_IOS) && defined(WEBRTC_ARCH_ARM64))
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200179#define MAYBE_Pc_Generator_Net_Delay_0_0_Plr_0_VP9Profile2 \
180 DISABLED_Pc_Generator_Net_Delay_0_0_Plr_0_VP9Profile2
Artem Titove731a2e2019-07-02 10:08:17 +0200181#else
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200182#define MAYBE_Pc_Generator_Net_Delay_0_0_Plr_0_VP9Profile2 \
183 Pc_Generator_Net_Delay_0_0_Plr_0_VP9Profile2
Artem Titove731a2e2019-07-02 10:08:17 +0200184#endif
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200185TEST(PCFullStackTest, MAYBE_Pc_Generator_Net_Delay_0_0_Plr_0_VP9Profile2) {
Artem Titov137f6c82019-05-17 10:51:15 +0200186 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
187 CreateNetworkEmulationManager();
188 auto fixture = CreateTestFixture(
189 "pc_generator_net_delay_0_0_plr_0_VP9Profile2",
Artem Titov1ff3c582020-07-01 15:20:37 +0200190 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200191 CreateTwoNetworkLinks(network_emulation_manager.get(),
192 BuiltInNetworkBehaviorConfig()),
193 [](PeerConfigurer* alice) {
194 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200195 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000196 auto frame_generator = CreateSquareFrameGenerator(
197 video, test::FrameGeneratorInterface::OutputType::kI010);
198 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200199 alice->SetVideoCodecs({VideoCodecConfig(
200 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
201 {kVP9FmtpProfileId,
202 VP9ProfileToString(VP9Profile::kProfile2)}})});
Artem Titov137f6c82019-05-17 10:51:15 +0200203 },
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200204 [](PeerConfigurer* bob) {
205 bob->SetVideoCodecs({VideoCodecConfig(
206 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
207 {kVP9FmtpProfileId,
208 VP9ProfileToString(VP9Profile::kProfile2)}})});
209 });
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100210 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titov137f6c82019-05-17 10:51:15 +0200211 run_params.use_flex_fec = false;
212 run_params.use_ulp_fec = false;
213 fixture->Run(std::move(run_params));
214}
215
216/*
217// TODO(bugs.webrtc.org/10639) migrate commented out test, when required
218// functionality will be supported in PeerConnection level framework.
219TEST(PCFullStackTest, ForemanCifWithoutPacketLossMultiplexI420Frame) {
220 auto fixture = CreateVideoQualityTestFixture();
221 ParamsWithLogging foreman_cif;
222 foreman_cif.call.send_side_bwe = true;
223 foreman_cif.video[0] = {
224 true, 352, 288, 30,
225 700000, 700000, 700000, false,
226 "multiplex", 1, 0, 0,
227 false, false, false, ClipNameToClipPath("foreman_cif")};
228 foreman_cif.analyzer = {"foreman_cif_net_delay_0_0_plr_0_Multiplex", 0.0, 0.0,
229 kTestDurationSec};
230 fixture->RunWithAnalyzer(foreman_cif);
231}
232
233TEST(PCFullStackTest, GeneratorWithoutPacketLossMultiplexI420AFrame) {
234 auto fixture = CreateVideoQualityTestFixture();
235
236 ParamsWithLogging generator;
237 generator.call.send_side_bwe = true;
238 generator.video[0] = {
239 true, 352, 288, 30, 700000, 700000, 700000, false,
240 "multiplex", 1, 0, 0, false, false, false, "GeneratorI420A"};
241 generator.analyzer = {"generator_net_delay_0_0_plr_0_Multiplex", 0.0, 0.0,
242 kTestDurationSec};
243 fixture->RunWithAnalyzer(generator);
244}
245*/
246#endif // defined(RTC_ENABLE_VP9)
247
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200248TEST(PCFullStackTest, Pc_Net_Delay_0_0_Plr_0) {
Artem Titov137f6c82019-05-17 10:51:15 +0200249 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
250 CreateNetworkEmulationManager();
251 auto fixture = CreateTestFixture(
Artem Titov1ff3c582020-07-01 15:20:37 +0200252 "pc_net_delay_0_0_plr_0", *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200253 CreateTwoNetworkLinks(network_emulation_manager.get(),
254 BuiltInNetworkBehaviorConfig()),
255 [](PeerConfigurer* alice) {
256 VideoConfig video(176, 144, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200257 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000258 auto frame_generator = CreateFromYuvFileFrameGenerator(
259 video, ClipNameToClipPath("paris_qcif"));
260 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200261 },
262 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100263 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titov137f6c82019-05-17 10:51:15 +0200264 run_params.use_flex_fec = false;
265 run_params.use_ulp_fec = false;
266 fixture->Run(std::move(run_params));
267}
268
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200269TEST(PCGenericDescriptorTest,
270 Pc_Foreman_Cif_Net_Delay_0_0_Plr_0_Generic_Descriptor) {
Artem Titov137f6c82019-05-17 10:51:15 +0200271 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
272 CreateNetworkEmulationManager();
273 auto fixture = CreateTestFixture(
Danil Chapovalov636865e2020-06-03 14:11:26 +0200274 "pc_foreman_cif_net_delay_0_0_plr_0_generic_descriptor",
Artem Titov1ff3c582020-07-01 15:20:37 +0200275 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200276 CreateTwoNetworkLinks(network_emulation_manager.get(),
277 BuiltInNetworkBehaviorConfig()),
278 [](PeerConfigurer* alice) {
279 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200280 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000281 auto frame_generator = CreateFromYuvFileFrameGenerator(
282 video, ClipNameToClipPath("foreman_cif"));
283 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200284 },
285 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100286 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titov137f6c82019-05-17 10:51:15 +0200287 run_params.use_flex_fec = false;
288 run_params.use_ulp_fec = false;
289 fixture->Run(std::move(run_params));
290}
291
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200292TEST(PCGenericDescriptorTest,
Jeremy Leconte4100d552020-09-11 18:02:36 +0200293 Pc_Foreman_Cif_30kbps_Net_Delay_0_0_Plr_0_Generic_Descriptor) {
Artem Titov137f6c82019-05-17 10:51:15 +0200294 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
295 CreateNetworkEmulationManager();
296 BuiltInNetworkBehaviorConfig config;
Artem Titov137f6c82019-05-17 10:51:15 +0200297 auto fixture = CreateTestFixture(
Danil Chapovalov636865e2020-06-03 14:11:26 +0200298 "pc_foreman_cif_30kbps_net_delay_0_0_plr_0_generic_descriptor",
Artem Titov1ff3c582020-07-01 15:20:37 +0200299 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200300 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
301 [](PeerConfigurer* alice) {
302 VideoConfig video(352, 288, 10);
Artem Titov137f6c82019-05-17 10:51:15 +0200303 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000304 auto frame_generator = CreateFromYuvFileFrameGenerator(
305 video, ClipNameToClipPath("foreman_cif"));
306 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov85a9d912019-05-29 14:36:50 +0200307
Niels Möller29d59a12020-06-22 14:48:10 +0200308 BitrateSettings bitrate_settings;
309 bitrate_settings.min_bitrate_bps = 30000;
310 bitrate_settings.start_bitrate_bps = 30000;
311 bitrate_settings.max_bitrate_bps = 30000;
312 alice->SetBitrateSettings(bitrate_settings);
Artem Titov137f6c82019-05-17 10:51:15 +0200313 },
314 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100315 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titov137f6c82019-05-17 10:51:15 +0200316 run_params.use_flex_fec = false;
317 run_params.use_ulp_fec = false;
318 fixture->Run(std::move(run_params));
319}
320
Artem Titov137f6c82019-05-17 10:51:15 +0200321// Link capacity below default start rate.
Jeremy Leconte4100d552020-09-11 18:02:36 +0200322TEST(PCFullStackTest, Pc_Foreman_Cif_Link_150kbps_Net_Delay_0_0_Plr_0) {
Artem Titov137f6c82019-05-17 10:51:15 +0200323 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
324 CreateNetworkEmulationManager();
325 BuiltInNetworkBehaviorConfig config;
326 config.link_capacity_kbps = 150;
327 auto fixture = CreateTestFixture(
328 "pc_foreman_cif_link_150kbps_net_delay_0_0_plr_0",
Artem Titov1ff3c582020-07-01 15:20:37 +0200329 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200330 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
331 [](PeerConfigurer* alice) {
332 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200333 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000334 auto frame_generator = CreateFromYuvFileFrameGenerator(
335 video, ClipNameToClipPath("foreman_cif"));
336 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200337 },
338 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100339 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titov137f6c82019-05-17 10:51:15 +0200340 run_params.use_flex_fec = false;
341 run_params.use_ulp_fec = false;
342 fixture->Run(std::move(run_params));
343}
344
Jeremy Leconte4100d552020-09-11 18:02:36 +0200345TEST(PCFullStackTest, Pc_Foreman_Cif_Link_130kbps_Delay100ms_Loss1_Ulpfec) {
Artem Titov65428262019-07-02 16:48:02 +0200346 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
347 CreateNetworkEmulationManager();
348 BuiltInNetworkBehaviorConfig config;
349 config.link_capacity_kbps = 130;
350 config.queue_delay_ms = 100;
351 config.loss_percent = 1;
352 auto fixture = CreateTestFixture(
353 "pc_foreman_cif_link_130kbps_delay100ms_loss1_ulpfec",
Artem Titov1ff3c582020-07-01 15:20:37 +0200354 *network_emulation_manager->time_controller(),
Artem Titov65428262019-07-02 16:48:02 +0200355 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
356 [](PeerConfigurer* alice) {
357 VideoConfig video(352, 288, 30);
Artem Titov65428262019-07-02 16:48:02 +0200358 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000359 auto frame_generator = CreateFromYuvFileFrameGenerator(
360 video, ClipNameToClipPath("foreman_cif"));
361 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov65428262019-07-02 16:48:02 +0200362 },
363 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100364 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titov65428262019-07-02 16:48:02 +0200365 run_params.use_flex_fec = false;
366 run_params.use_ulp_fec = true;
367 fixture->Run(std::move(run_params));
368}
369
Jeremy Leconte4100d552020-09-11 18:02:36 +0200370TEST(PCFullStackTest, Pc_Foreman_Cif_Link_50kbps_Delay100ms_Loss1_Ulpfec) {
Artem Titov65428262019-07-02 16:48:02 +0200371 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
372 CreateNetworkEmulationManager();
373 BuiltInNetworkBehaviorConfig config;
374 config.link_capacity_kbps = 50;
375 config.queue_delay_ms = 100;
376 config.loss_percent = 1;
377 auto fixture = CreateTestFixture(
378 "pc_foreman_cif_link_50kbps_delay100ms_loss1_ulpfec",
Artem Titov1ff3c582020-07-01 15:20:37 +0200379 *network_emulation_manager->time_controller(),
Artem Titov65428262019-07-02 16:48:02 +0200380 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
381 [](PeerConfigurer* alice) {
382 VideoConfig video(352, 288, 30);
Artem Titov65428262019-07-02 16:48:02 +0200383 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000384 auto frame_generator = CreateFromYuvFileFrameGenerator(
385 video, ClipNameToClipPath("foreman_cif"));
386 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov65428262019-07-02 16:48:02 +0200387 },
388 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100389 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titov65428262019-07-02 16:48:02 +0200390 run_params.use_flex_fec = false;
391 run_params.use_ulp_fec = true;
392 fixture->Run(std::move(run_params));
393}
394
Artem Titov137f6c82019-05-17 10:51:15 +0200395// Restricted network and encoder overproducing by 30%.
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200396TEST(PCFullStackTest,
Jeremy Leconte4100d552020-09-11 18:02:36 +0200397 Pc_Foreman_Cif_Link_150kbps_Delay100ms_30pkts_Queue_Overshoot30) {
Artem Titov137f6c82019-05-17 10:51:15 +0200398 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
399 CreateNetworkEmulationManager();
400 BuiltInNetworkBehaviorConfig config;
401 config.link_capacity_kbps = 150;
402 config.queue_length_packets = 30;
403 config.queue_delay_ms = 100;
404 auto fixture = CreateTestFixture(
405 "pc_foreman_cif_link_150kbps_delay100ms_30pkts_queue_overshoot30",
Artem Titov1ff3c582020-07-01 15:20:37 +0200406 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200407 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
408 [](PeerConfigurer* alice) {
409 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200410 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000411 auto frame_generator = CreateFromYuvFileFrameGenerator(
412 video, ClipNameToClipPath("foreman_cif"));
413 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200414 },
415 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100416 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titov137f6c82019-05-17 10:51:15 +0200417 run_params.use_flex_fec = false;
418 run_params.use_ulp_fec = false;
419 run_params.video_encoder_bitrate_multiplier = 1.30;
420 fixture->Run(std::move(run_params));
421}
422
423// Weak 3G-style link: 250kbps, 1% loss, 100ms delay, 15 packets queue.
424// Packet rate and loss are low enough that loss will happen with ~3s interval.
425// This triggers protection overhead to toggle between zero and non-zero.
426// Link queue is restrictive enough to trigger loss on probes.
Jeremy Leconte4100d552020-09-11 18:02:36 +0200427TEST(PCFullStackTest, Pc_Foreman_Cif_Link_250kbps_Delay100ms_10pkts_Loss1) {
Artem Titov137f6c82019-05-17 10:51:15 +0200428 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
429 CreateNetworkEmulationManager();
430 BuiltInNetworkBehaviorConfig config;
431 config.link_capacity_kbps = 250;
432 config.queue_length_packets = 10;
433 config.queue_delay_ms = 100;
434 config.loss_percent = 1;
435 auto fixture = CreateTestFixture(
436 "pc_foreman_cif_link_250kbps_delay100ms_10pkts_loss1",
Artem Titov1ff3c582020-07-01 15:20:37 +0200437 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200438 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
439 [](PeerConfigurer* alice) {
440 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200441 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000442 auto frame_generator = CreateFromYuvFileFrameGenerator(
443 video, ClipNameToClipPath("foreman_cif"));
444 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200445 },
446 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100447 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titov137f6c82019-05-17 10:51:15 +0200448 run_params.use_flex_fec = false;
449 run_params.use_ulp_fec = false;
450 run_params.video_encoder_bitrate_multiplier = 1.30;
451 fixture->Run(std::move(run_params));
452}
453
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200454TEST(PCGenericDescriptorTest,
455 Pc_Foreman_Cif_Delay_50_0_Plr_5_Generic_Descriptor) {
Artem Titov137f6c82019-05-17 10:51:15 +0200456 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
457 CreateNetworkEmulationManager();
458 BuiltInNetworkBehaviorConfig config;
459 config.loss_percent = 5;
460 config.queue_delay_ms = 50;
461 auto fixture = CreateTestFixture(
Danil Chapovalov636865e2020-06-03 14:11:26 +0200462 "pc_foreman_cif_delay_50_0_plr_5_generic_descriptor",
Artem Titov1ff3c582020-07-01 15:20:37 +0200463 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200464 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
465 [](PeerConfigurer* alice) {
466 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200467 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000468 auto frame_generator = CreateFromYuvFileFrameGenerator(
469 video, ClipNameToClipPath("foreman_cif"));
470 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200471 },
472 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100473 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titov137f6c82019-05-17 10:51:15 +0200474 run_params.use_flex_fec = false;
475 run_params.use_ulp_fec = false;
476 fixture->Run(std::move(run_params));
477}
478
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200479TEST(PCGenericDescriptorTest,
480 Pc_Foreman_Cif_Delay_50_0_Plr_5_Ulpfec_Generic_Descriptor) {
Artem Titov137f6c82019-05-17 10:51:15 +0200481 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
482 CreateNetworkEmulationManager();
483 BuiltInNetworkBehaviorConfig config;
484 config.loss_percent = 5;
485 config.queue_delay_ms = 50;
486 auto fixture = CreateTestFixture(
Danil Chapovalov636865e2020-06-03 14:11:26 +0200487 "pc_foreman_cif_delay_50_0_plr_5_ulpfec_generic_descriptor",
Artem Titov1ff3c582020-07-01 15:20:37 +0200488 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200489 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
490 [](PeerConfigurer* alice) {
491 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200492 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000493 auto frame_generator = CreateFromYuvFileFrameGenerator(
494 video, ClipNameToClipPath("foreman_cif"));
495 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200496 },
497 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100498 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titov137f6c82019-05-17 10:51:15 +0200499 run_params.use_flex_fec = false;
500 run_params.use_ulp_fec = true;
501 fixture->Run(std::move(run_params));
502}
503
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200504TEST(PCFullStackTest, Pc_Foreman_Cif_Delay_50_0_Plr_5_Flexfec) {
Artem Titov137f6c82019-05-17 10:51:15 +0200505 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
506 CreateNetworkEmulationManager();
507 BuiltInNetworkBehaviorConfig config;
508 config.loss_percent = 5;
509 config.queue_delay_ms = 50;
510 auto fixture = CreateTestFixture(
511 "pc_foreman_cif_delay_50_0_plr_5_flexfec",
Artem Titov1ff3c582020-07-01 15:20:37 +0200512 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200513 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
514 [](PeerConfigurer* alice) {
515 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200516 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000517 auto frame_generator = CreateFromYuvFileFrameGenerator(
518 video, ClipNameToClipPath("foreman_cif"));
519 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200520 },
521 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100522 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titov137f6c82019-05-17 10:51:15 +0200523 run_params.use_flex_fec = true;
524 run_params.use_ulp_fec = false;
525 fixture->Run(std::move(run_params));
526}
527
Jeremy Leconte4100d552020-09-11 18:02:36 +0200528TEST(PCFullStackTest, Pc_Foreman_Cif_500kbps_Delay_50_0_Plr_3_Flexfec) {
Artem Titov137f6c82019-05-17 10:51:15 +0200529 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
530 CreateNetworkEmulationManager();
531 BuiltInNetworkBehaviorConfig config;
532 config.loss_percent = 3;
533 config.link_capacity_kbps = 500;
534 config.queue_delay_ms = 50;
535 auto fixture = CreateTestFixture(
536 "pc_foreman_cif_500kbps_delay_50_0_plr_3_flexfec",
Artem Titov1ff3c582020-07-01 15:20:37 +0200537 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200538 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
539 [](PeerConfigurer* alice) {
540 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200541 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000542 auto frame_generator = CreateFromYuvFileFrameGenerator(
543 video, ClipNameToClipPath("foreman_cif"));
544 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200545 },
546 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100547 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titov137f6c82019-05-17 10:51:15 +0200548 run_params.use_flex_fec = true;
549 run_params.use_ulp_fec = false;
550 fixture->Run(std::move(run_params));
551}
552
Jeremy Leconte4100d552020-09-11 18:02:36 +0200553TEST(PCFullStackTest, Pc_Foreman_Cif_500kbps_Delay_50_0_Plr_3_Ulpfec) {
Artem Titov137f6c82019-05-17 10:51:15 +0200554 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
555 CreateNetworkEmulationManager();
556 BuiltInNetworkBehaviorConfig config;
557 config.loss_percent = 3;
558 config.link_capacity_kbps = 500;
559 config.queue_delay_ms = 50;
560 auto fixture = CreateTestFixture(
561 "pc_foreman_cif_500kbps_delay_50_0_plr_3_ulpfec",
Artem Titov1ff3c582020-07-01 15:20:37 +0200562 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200563 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
564 [](PeerConfigurer* alice) {
565 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200566 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000567 auto frame_generator = CreateFromYuvFileFrameGenerator(
568 video, ClipNameToClipPath("foreman_cif"));
569 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200570 },
571 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100572 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titov137f6c82019-05-17 10:51:15 +0200573 run_params.use_flex_fec = false;
574 run_params.use_ulp_fec = true;
575 fixture->Run(std::move(run_params));
576}
577
578#if defined(WEBRTC_USE_H264)
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200579TEST(PCFullStackTest, Pc_Foreman_Cif_Net_Delay_0_0_Plr_0_H264) {
Artem Titov137f6c82019-05-17 10:51:15 +0200580 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
581 CreateNetworkEmulationManager();
582 auto fixture = CreateTestFixture(
583 "pc_foreman_cif_net_delay_0_0_plr_0_H264",
Artem Titov1ff3c582020-07-01 15:20:37 +0200584 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200585 CreateTwoNetworkLinks(network_emulation_manager.get(),
586 BuiltInNetworkBehaviorConfig()),
587 [](PeerConfigurer* alice) {
588 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200589 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000590 auto frame_generator = CreateFromYuvFileFrameGenerator(
591 video, ClipNameToClipPath("foreman_cif"));
592 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200593 alice->SetVideoCodecs({VideoCodecConfig(cricket::kH264CodecName)});
Artem Titov137f6c82019-05-17 10:51:15 +0200594 },
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200595 [](PeerConfigurer* bob) {
596 bob->SetVideoCodecs({VideoCodecConfig(cricket::kH264CodecName)});
597 });
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100598 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titov137f6c82019-05-17 10:51:15 +0200599 run_params.use_flex_fec = false;
600 run_params.use_ulp_fec = false;
601 fixture->Run(std::move(run_params));
602}
603
Jeremy Leconte4100d552020-09-11 18:02:36 +0200604TEST(PCFullStackTest, Pc_Foreman_Cif_30kbps_Net_Delay_0_0_Plr_0_H264) {
Artem Titov137f6c82019-05-17 10:51:15 +0200605 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
606 CreateNetworkEmulationManager();
607 BuiltInNetworkBehaviorConfig config;
Artem Titov137f6c82019-05-17 10:51:15 +0200608 auto fixture = CreateTestFixture(
Artem Titoved4d1582019-05-20 12:04:05 +0200609 "pc_foreman_cif_30kbps_net_delay_0_0_plr_0_H264",
Artem Titov1ff3c582020-07-01 15:20:37 +0200610 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200611 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
612 [](PeerConfigurer* alice) {
613 VideoConfig video(352, 288, 10);
Artem Titov137f6c82019-05-17 10:51:15 +0200614 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000615 auto frame_generator = CreateFromYuvFileFrameGenerator(
616 video, ClipNameToClipPath("foreman_cif"));
617 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov85a9d912019-05-29 14:36:50 +0200618
Niels Möller29d59a12020-06-22 14:48:10 +0200619 BitrateSettings bitrate_settings;
620 bitrate_settings.min_bitrate_bps = 30000;
621 bitrate_settings.start_bitrate_bps = 30000;
622 bitrate_settings.max_bitrate_bps = 30000;
623 alice->SetBitrateSettings(bitrate_settings);
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200624 alice->SetVideoCodecs({VideoCodecConfig(cricket::kH264CodecName)});
Artem Titov137f6c82019-05-17 10:51:15 +0200625 },
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200626 [](PeerConfigurer* bob) {
627 bob->SetVideoCodecs({VideoCodecConfig(cricket::kH264CodecName)});
628 });
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100629 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titov137f6c82019-05-17 10:51:15 +0200630 run_params.use_flex_fec = false;
631 run_params.use_ulp_fec = false;
632 fixture->Run(std::move(run_params));
633}
634
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200635TEST(PCGenericDescriptorTest,
636 Pc_Foreman_Cif_Delay_50_0_Plr_5_H264_Generic_Descriptor) {
Artem Titov137f6c82019-05-17 10:51:15 +0200637 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
638 CreateNetworkEmulationManager();
639 BuiltInNetworkBehaviorConfig config;
640 config.loss_percent = 5;
641 config.queue_delay_ms = 50;
642 auto fixture = CreateTestFixture(
Danil Chapovalov636865e2020-06-03 14:11:26 +0200643 "pc_foreman_cif_delay_50_0_plr_5_H264_generic_descriptor",
Artem Titov1ff3c582020-07-01 15:20:37 +0200644 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200645 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
646 [](PeerConfigurer* alice) {
647 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200648 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000649 auto frame_generator = CreateFromYuvFileFrameGenerator(
650 video, ClipNameToClipPath("foreman_cif"));
651 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200652 alice->SetVideoCodecs({VideoCodecConfig(cricket::kH264CodecName)});
Artem Titov137f6c82019-05-17 10:51:15 +0200653 },
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200654 [](PeerConfigurer* bob) {
655 bob->SetVideoCodecs({VideoCodecConfig(cricket::kH264CodecName)});
656 });
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100657 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titov137f6c82019-05-17 10:51:15 +0200658 run_params.use_flex_fec = false;
659 run_params.use_ulp_fec = false;
660 fixture->Run(std::move(run_params));
661}
662
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200663TEST(PCFullStackTest, Pc_Foreman_Cif_Delay_50_0_Plr_5_H264_Sps_Pps_Idr) {
Artem Titov137f6c82019-05-17 10:51:15 +0200664 test::ScopedFieldTrials override_field_trials(
665 AppendFieldTrials("WebRTC-SpsPpsIdrIsH264Keyframe/Enabled/"));
666
667 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
668 CreateNetworkEmulationManager();
669 BuiltInNetworkBehaviorConfig config;
670 config.loss_percent = 5;
671 config.queue_delay_ms = 50;
672 auto fixture = CreateTestFixture(
673 "pc_foreman_cif_delay_50_0_plr_5_H264_sps_pps_idr",
Artem Titov1ff3c582020-07-01 15:20:37 +0200674 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200675 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
676 [](PeerConfigurer* alice) {
677 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200678 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000679 auto frame_generator = CreateFromYuvFileFrameGenerator(
680 video, ClipNameToClipPath("foreman_cif"));
681 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200682 alice->SetVideoCodecs({VideoCodecConfig(cricket::kH264CodecName)});
Artem Titov137f6c82019-05-17 10:51:15 +0200683 },
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200684 [](PeerConfigurer* bob) {
685 bob->SetVideoCodecs({VideoCodecConfig(cricket::kH264CodecName)});
686 });
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100687 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titov137f6c82019-05-17 10:51:15 +0200688 run_params.use_flex_fec = false;
689 run_params.use_ulp_fec = false;
690 fixture->Run(std::move(run_params));
691}
692
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200693TEST(PCFullStackTest, Pc_Foreman_Cif_Delay_50_0_Plr_5_H264_Flexfec) {
Artem Titov137f6c82019-05-17 10:51:15 +0200694 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
695 CreateNetworkEmulationManager();
696 BuiltInNetworkBehaviorConfig config;
697 config.loss_percent = 5;
698 config.queue_delay_ms = 50;
699 auto fixture = CreateTestFixture(
700 "pc_foreman_cif_delay_50_0_plr_5_H264_flexfec",
Artem Titov1ff3c582020-07-01 15:20:37 +0200701 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200702 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
703 [](PeerConfigurer* alice) {
704 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200705 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000706 auto frame_generator = CreateFromYuvFileFrameGenerator(
707 video, ClipNameToClipPath("foreman_cif"));
708 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200709 alice->SetVideoCodecs({VideoCodecConfig(cricket::kH264CodecName)});
Artem Titov137f6c82019-05-17 10:51:15 +0200710 },
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200711 [](PeerConfigurer* bob) {
712 bob->SetVideoCodecs({VideoCodecConfig(cricket::kH264CodecName)});
713 });
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100714 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titov137f6c82019-05-17 10:51:15 +0200715 run_params.use_flex_fec = true;
716 run_params.use_ulp_fec = false;
717 fixture->Run(std::move(run_params));
718}
719
720// Ulpfec with H264 is an unsupported combination, so this test is only useful
721// for debugging. It is therefore disabled by default.
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200722TEST(PCFullStackTest, DISABLED_Pc_Foreman_Cif_Delay_50_0_Plr_5_H264_Ulpfec) {
Artem Titov137f6c82019-05-17 10:51:15 +0200723 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
724 CreateNetworkEmulationManager();
725 BuiltInNetworkBehaviorConfig config;
726 config.loss_percent = 5;
727 config.queue_delay_ms = 50;
728 auto fixture = CreateTestFixture(
Artem Titoved4d1582019-05-20 12:04:05 +0200729 "pc_foreman_cif_delay_50_0_plr_5_H264_ulpfec",
Artem Titov1ff3c582020-07-01 15:20:37 +0200730 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200731 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
732 [](PeerConfigurer* alice) {
733 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200734 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000735 auto frame_generator = CreateFromYuvFileFrameGenerator(
736 video, ClipNameToClipPath("foreman_cif"));
737 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200738 alice->SetVideoCodecs({VideoCodecConfig(cricket::kH264CodecName)});
Artem Titov137f6c82019-05-17 10:51:15 +0200739 },
Mirko Bonadei9d58f972021-07-15 17:14:54 +0200740 [](PeerConfigurer* bob) {
741 bob->SetVideoCodecs({VideoCodecConfig(cricket::kH264CodecName)});
742 });
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100743 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titov137f6c82019-05-17 10:51:15 +0200744 run_params.use_flex_fec = false;
745 run_params.use_ulp_fec = true;
746 fixture->Run(std::move(run_params));
747}
748#endif // defined(WEBRTC_USE_H264)
749
Jeremy Leconte4100d552020-09-11 18:02:36 +0200750TEST(PCFullStackTest, Pc_Foreman_Cif_500kbps) {
Artem Titov137f6c82019-05-17 10:51:15 +0200751 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
752 CreateNetworkEmulationManager();
753 BuiltInNetworkBehaviorConfig config;
754 config.queue_length_packets = 0;
755 config.queue_delay_ms = 0;
756 config.link_capacity_kbps = 500;
757 auto fixture = CreateTestFixture(
Artem Titov1ff3c582020-07-01 15:20:37 +0200758 "pc_foreman_cif_500kbps", *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200759 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
760 [](PeerConfigurer* alice) {
761 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200762 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000763 auto frame_generator = CreateFromYuvFileFrameGenerator(
764 video, ClipNameToClipPath("foreman_cif"));
765 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200766 },
767 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100768 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titov137f6c82019-05-17 10:51:15 +0200769 run_params.use_flex_fec = false;
770 run_params.use_ulp_fec = false;
771 fixture->Run(std::move(run_params));
772}
773
Jeremy Leconte4100d552020-09-11 18:02:36 +0200774TEST(PCFullStackTest, Pc_Foreman_Cif_500kbps_32pkts_Queue) {
Artem Titov137f6c82019-05-17 10:51:15 +0200775 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
776 CreateNetworkEmulationManager();
777 BuiltInNetworkBehaviorConfig config;
778 config.queue_length_packets = 32;
779 config.queue_delay_ms = 0;
780 config.link_capacity_kbps = 500;
781 auto fixture = CreateTestFixture(
782 "pc_foreman_cif_500kbps_32pkts_queue",
Artem Titov1ff3c582020-07-01 15:20:37 +0200783 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200784 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
785 [](PeerConfigurer* alice) {
786 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200787 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000788 auto frame_generator = CreateFromYuvFileFrameGenerator(
789 video, ClipNameToClipPath("foreman_cif"));
790 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200791 },
792 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100793 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titov137f6c82019-05-17 10:51:15 +0200794 run_params.use_flex_fec = false;
795 run_params.use_ulp_fec = false;
796 fixture->Run(std::move(run_params));
797}
798
Jeremy Leconte4100d552020-09-11 18:02:36 +0200799TEST(PCFullStackTest, Pc_Foreman_Cif_500kbps_100ms) {
Artem Titov137f6c82019-05-17 10:51:15 +0200800 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
801 CreateNetworkEmulationManager();
802 BuiltInNetworkBehaviorConfig config;
803 config.queue_length_packets = 0;
804 config.queue_delay_ms = 100;
805 config.link_capacity_kbps = 500;
806 auto fixture = CreateTestFixture(
807 "pc_foreman_cif_500kbps_100ms",
Artem Titov1ff3c582020-07-01 15:20:37 +0200808 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200809 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
810 [](PeerConfigurer* alice) {
811 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200812 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000813 auto frame_generator = CreateFromYuvFileFrameGenerator(
814 video, ClipNameToClipPath("foreman_cif"));
815 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200816 },
817 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100818 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titov137f6c82019-05-17 10:51:15 +0200819 run_params.use_flex_fec = false;
820 run_params.use_ulp_fec = false;
821 fixture->Run(std::move(run_params));
822}
823
Jeremy Lecontec8850cb2020-09-10 20:46:33 +0200824TEST(PCGenericDescriptorTest,
Jeremy Leconte4100d552020-09-11 18:02:36 +0200825 Pc_Foreman_Cif_500kbps_100ms_32pkts_Queue_Generic_Descriptor) {
Artem Titov137f6c82019-05-17 10:51:15 +0200826 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
827 CreateNetworkEmulationManager();
828 BuiltInNetworkBehaviorConfig config;
829 config.queue_length_packets = 32;
830 config.queue_delay_ms = 100;
831 config.link_capacity_kbps = 500;
832 auto fixture = CreateTestFixture(
Danil Chapovalov636865e2020-06-03 14:11:26 +0200833 "pc_foreman_cif_500kbps_100ms_32pkts_queue_generic_descriptor",
Artem Titov1ff3c582020-07-01 15:20:37 +0200834 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200835 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
836 [](PeerConfigurer* alice) {
837 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200838 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000839 auto frame_generator = CreateFromYuvFileFrameGenerator(
840 video, ClipNameToClipPath("foreman_cif"));
841 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200842 },
843 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100844 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titov137f6c82019-05-17 10:51:15 +0200845 run_params.use_flex_fec = false;
846 run_params.use_ulp_fec = false;
847 fixture->Run(std::move(run_params));
848}
849
850/*
851// TODO(bugs.webrtc.org/10639) we need to disable send side bwe, but it isn't
Artem Titov39483c62019-07-19 17:03:52 +0200852// supported in PC level framework.
Artem Titov137f6c82019-05-17 10:51:15 +0200853TEST(PCFullStackTest, ForemanCif500kbps100msLimitedQueueRecvBwe) {
854 auto fixture = CreateVideoQualityTestFixture();
855 ParamsWithLogging foreman_cif;
856 foreman_cif.call.send_side_bwe = false;
857 foreman_cif.video[0] = {
858 true, 352, 288, 30,
859 30000, 500000, 2000000, false,
860 "VP8", 1, 0, 0,
861 false, false, true, ClipNameToClipPath("foreman_cif")};
862 foreman_cif.analyzer = {"foreman_cif_500kbps_100ms_32pkts_queue_recv_bwe",
863 0.0, 0.0, kTestDurationSec};
864 foreman_cif.config->queue_length_packets = 32;
865 foreman_cif.config->queue_delay_ms = 100;
866 foreman_cif.config->link_capacity_kbps = 500;
867 fixture->RunWithAnalyzer(foreman_cif);
868}
869*/
870
Jeremy Leconte4100d552020-09-11 18:02:36 +0200871TEST(PCFullStackTest, Pc_Foreman_Cif_1000kbps_100ms_32pkts_Queue) {
Artem Titov137f6c82019-05-17 10:51:15 +0200872 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
873 CreateNetworkEmulationManager();
874 BuiltInNetworkBehaviorConfig config;
875 config.queue_length_packets = 32;
876 config.queue_delay_ms = 100;
877 config.link_capacity_kbps = 1000;
878 auto fixture = CreateTestFixture(
879 "pc_foreman_cif_1000kbps_100ms_32pkts_queue",
Artem Titov1ff3c582020-07-01 15:20:37 +0200880 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200881 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
882 [](PeerConfigurer* alice) {
883 VideoConfig video(352, 288, 30);
Artem Titov137f6c82019-05-17 10:51:15 +0200884 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000885 auto frame_generator = CreateFromYuvFileFrameGenerator(
886 video, ClipNameToClipPath("foreman_cif"));
887 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200888 },
889 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100890 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titov137f6c82019-05-17 10:51:15 +0200891 run_params.use_flex_fec = false;
892 run_params.use_ulp_fec = false;
893 fixture->Run(std::move(run_params));
894}
895
896// TODO(sprang): Remove this if we have the similar ModerateLimits below?
Jeremy Leconte4100d552020-09-11 18:02:36 +0200897TEST(PCFullStackTest, Pc_Conference_Motion_Hd_2000kbps_100ms_32pkts_Queue) {
Artem Titov137f6c82019-05-17 10:51:15 +0200898 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
899 CreateNetworkEmulationManager();
900 BuiltInNetworkBehaviorConfig config;
901 config.queue_length_packets = 32;
902 config.queue_delay_ms = 100;
903 config.link_capacity_kbps = 2000;
904 auto fixture = CreateTestFixture(
905 "pc_conference_motion_hd_2000kbps_100ms_32pkts_queue",
Artem Titov1ff3c582020-07-01 15:20:37 +0200906 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +0200907 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
908 [](PeerConfigurer* alice) {
909 VideoConfig video(1280, 720, 50);
Artem Titov137f6c82019-05-17 10:51:15 +0200910 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +0000911 auto frame_generator = CreateFromYuvFileFrameGenerator(
912 video, ClipNameToClipPath("ConferenceMotion_1280_720_50"));
913 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov137f6c82019-05-17 10:51:15 +0200914 },
915 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +0100916 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titov137f6c82019-05-17 10:51:15 +0200917 run_params.use_flex_fec = false;
918 run_params.use_ulp_fec = false;
919 fixture->Run(std::move(run_params));
920}
921
Artem Titov137f6c82019-05-17 10:51:15 +0200922/*
923// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
Danil Chapovalov636865e2020-06-03 14:11:26 +0200924TEST(PCGenericDescriptorTest, ConferenceMotionHd2TLModerateLimits) {
Artem Titov137f6c82019-05-17 10:51:15 +0200925 auto fixture = CreateVideoQualityTestFixture();
926 ParamsWithLogging conf_motion_hd;
927 conf_motion_hd.call.send_side_bwe = true;
928 conf_motion_hd.video[0] = {
929 true, 1280,
930 720, 50,
931 30000, 3000000,
932 3000000, false,
933 "VP8", 2,
934 -1, 0,
935 false, false,
936 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
937 conf_motion_hd.analyzer = {
Danil Chapovalov636865e2020-06-03 14:11:26 +0200938 "conference_motion_hd_2tl_moderate_limits_generic_descriptor", 0.0, 0.0,
Artem Titov137f6c82019-05-17 10:51:15 +0200939 kTestDurationSec};
940 conf_motion_hd.config->queue_length_packets = 50;
941 conf_motion_hd.config->loss_percent = 3;
942 conf_motion_hd.config->queue_delay_ms = 100;
943 conf_motion_hd.config->link_capacity_kbps = 2000;
944 conf_motion_hd.call.generic_descriptor = GenericDescriptorEnabled();
945 fixture->RunWithAnalyzer(conf_motion_hd);
946}
947
948// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
949TEST(PCFullStackTest, ConferenceMotionHd3TLModerateLimits) {
950 auto fixture = CreateVideoQualityTestFixture();
951 ParamsWithLogging conf_motion_hd;
952 conf_motion_hd.call.send_side_bwe = true;
953 conf_motion_hd.video[0] = {
954 true, 1280,
955 720, 50,
956 30000, 3000000,
957 3000000, false,
958 "VP8", 3,
959 -1, 0,
960 false, false,
961 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
962 conf_motion_hd.analyzer = {"conference_motion_hd_3tl_moderate_limits", 0.0,
963 0.0, kTestDurationSec};
964 conf_motion_hd.config->queue_length_packets = 50;
965 conf_motion_hd.config->loss_percent = 3;
966 conf_motion_hd.config->queue_delay_ms = 100;
967 conf_motion_hd.config->link_capacity_kbps = 2000;
968 fixture->RunWithAnalyzer(conf_motion_hd);
969}
970
971// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
972TEST(PCFullStackTest, ConferenceMotionHd4TLModerateLimits) {
973 auto fixture = CreateVideoQualityTestFixture();
974 ParamsWithLogging conf_motion_hd;
975 conf_motion_hd.call.send_side_bwe = true;
976 conf_motion_hd.video[0] = {
977 true, 1280,
978 720, 50,
979 30000, 3000000,
980 3000000, false,
981 "VP8", 4,
982 -1, 0,
983 false, false,
984 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
985 conf_motion_hd.analyzer = {"conference_motion_hd_4tl_moderate_limits", 0.0,
986 0.0, kTestDurationSec};
987 conf_motion_hd.config->queue_length_packets = 50;
988 conf_motion_hd.config->loss_percent = 3;
989 conf_motion_hd.config->queue_delay_ms = 100;
990 conf_motion_hd.config->link_capacity_kbps = 2000;
991 fixture->RunWithAnalyzer(conf_motion_hd);
992}
993
994// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
995TEST(PCFullStackTest, ConferenceMotionHd3TLModerateLimitsAltTLPattern) {
996 test::ScopedFieldTrials field_trial(
997 AppendFieldTrials("WebRTC-UseShortVP8TL3Pattern/Enabled/"));
998 auto fixture = CreateVideoQualityTestFixture();
999 ParamsWithLogging conf_motion_hd;
1000 conf_motion_hd.call.send_side_bwe = true;
1001 conf_motion_hd.video[0] = {
1002 true, 1280,
1003 720, 50,
1004 30000, 3000000,
1005 3000000, false,
1006 "VP8", 3,
1007 -1, 0,
1008 false, false,
1009 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
1010 conf_motion_hd.analyzer = {"conference_motion_hd_3tl_alt_moderate_limits",
1011 0.0, 0.0, kTestDurationSec};
1012 conf_motion_hd.config->queue_length_packets = 50;
1013 conf_motion_hd.config->loss_percent = 3;
1014 conf_motion_hd.config->queue_delay_ms = 100;
1015 conf_motion_hd.config->link_capacity_kbps = 2000;
1016 fixture->RunWithAnalyzer(conf_motion_hd);
1017}
1018
1019// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1020TEST(PCFullStackTest,
1021 ConferenceMotionHd3TLModerateLimitsAltTLPatternAndBaseHeavyTLAllocation) {
1022 auto fixture = CreateVideoQualityTestFixture();
1023 test::ScopedFieldTrials field_trial(
1024 AppendFieldTrials("WebRTC-UseShortVP8TL3Pattern/Enabled/"
1025 "WebRTC-UseBaseHeavyVP8TL3RateAllocation/Enabled/"));
1026 ParamsWithLogging conf_motion_hd;
1027 conf_motion_hd.call.send_side_bwe = true;
1028 conf_motion_hd.video[0] = {
1029 true, 1280,
1030 720, 50,
1031 30000, 3000000,
1032 3000000, false,
1033 "VP8", 3,
1034 -1, 0,
1035 false, false,
1036 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
1037 conf_motion_hd.analyzer = {
1038 "conference_motion_hd_3tl_alt_heavy_moderate_limits", 0.0, 0.0,
1039 kTestDurationSec};
1040 conf_motion_hd.config->queue_length_packets = 50;
1041 conf_motion_hd.config->loss_percent = 3;
1042 conf_motion_hd.config->queue_delay_ms = 100;
1043 conf_motion_hd.config->link_capacity_kbps = 2000;
1044 fixture->RunWithAnalyzer(conf_motion_hd);
1045}
1046*/
1047
1048#if defined(RTC_ENABLE_VP9)
Jeremy Leconte4100d552020-09-11 18:02:36 +02001049TEST(PCFullStackTest, Pc_Conference_Motion_Hd_2000kbps_100ms_32pkts_Queue_Vp9) {
Artem Titov137f6c82019-05-17 10:51:15 +02001050 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1051 CreateNetworkEmulationManager();
1052 BuiltInNetworkBehaviorConfig config;
1053 config.queue_length_packets = 32;
1054 config.queue_delay_ms = 100;
1055 config.link_capacity_kbps = 2000;
1056 auto fixture = CreateTestFixture(
1057 "pc_conference_motion_hd_2000kbps_100ms_32pkts_queue_vp9",
Artem Titov1ff3c582020-07-01 15:20:37 +02001058 *network_emulation_manager->time_controller(),
Artem Titov137f6c82019-05-17 10:51:15 +02001059 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
1060 [](PeerConfigurer* alice) {
1061 VideoConfig video(1280, 720, 50);
Artem Titov137f6c82019-05-17 10:51:15 +02001062 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +00001063 auto frame_generator = CreateFromYuvFileFrameGenerator(
1064 video, ClipNameToClipPath("ConferenceMotion_1280_720_50"));
1065 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Mirko Bonadei9d58f972021-07-15 17:14:54 +02001066 alice->SetVideoCodecs({VideoCodecConfig(
1067 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
1068 {kVP9FmtpProfileId,
1069 VP9ProfileToString(VP9Profile::kProfile0)}})});
Artem Titov137f6c82019-05-17 10:51:15 +02001070 },
Mirko Bonadei9d58f972021-07-15 17:14:54 +02001071 [](PeerConfigurer* bob) {
1072 bob->SetVideoCodecs({VideoCodecConfig(
1073 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
1074 {kVP9FmtpProfileId,
1075 VP9ProfileToString(VP9Profile::kProfile0)}})});
1076 });
Danil Chapovalov0c626af2020-02-10 11:16:00 +01001077 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titov137f6c82019-05-17 10:51:15 +02001078 run_params.use_flex_fec = false;
1079 run_params.use_ulp_fec = false;
1080 fixture->Run(std::move(run_params));
1081}
1082#endif
1083
Jeremy Lecontec8850cb2020-09-10 20:46:33 +02001084TEST(PCFullStackTest, Pc_Screenshare_Slides_No_Conference_Mode) {
Artem Titov39483c62019-07-19 17:03:52 +02001085 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1086 CreateNetworkEmulationManager();
1087 auto fixture = CreateTestFixture(
1088 "pc_screenshare_slides_no_conference_mode",
Artem Titov1ff3c582020-07-01 15:20:37 +02001089 *network_emulation_manager->time_controller(),
Artem Titov39483c62019-07-19 17:03:52 +02001090 CreateTwoNetworkLinks(network_emulation_manager.get(),
1091 BuiltInNetworkBehaviorConfig()),
1092 [](PeerConfigurer* alice) {
1093 VideoConfig video(1850, 1110, 5);
Artem Titov39483c62019-07-19 17:03:52 +02001094 video.stream_label = "alice-video";
Andrey Logvin435fb9a2020-05-08 08:02:49 +00001095 video.content_hint = VideoTrackInterface::ContentHint::kText;
1096 auto frame_generator = CreateScreenShareFrameGenerator(
1097 video, ScreenShareConfig(TimeDelta::Seconds(10)));
Andrey Logvinc0644672020-05-05 10:33:01 +00001098 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov39483c62019-07-19 17:03:52 +02001099 },
1100 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +01001101 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titov39483c62019-07-19 17:03:52 +02001102 run_params.use_flex_fec = false;
1103 run_params.use_ulp_fec = false;
1104 fixture->Run(std::move(run_params));
Artem Titov137f6c82019-05-17 10:51:15 +02001105}
1106
Jeremy Lecontec8850cb2020-09-10 20:46:33 +02001107TEST(PCFullStackTest, Pc_Screenshare_Slides) {
Artem Titov39483c62019-07-19 17:03:52 +02001108 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1109 CreateNetworkEmulationManager();
1110 auto fixture = CreateTestFixture(
Artem Titov1ff3c582020-07-01 15:20:37 +02001111 "pc_screenshare_slides", *network_emulation_manager->time_controller(),
Artem Titov39483c62019-07-19 17:03:52 +02001112 CreateTwoNetworkLinks(network_emulation_manager.get(),
1113 BuiltInNetworkBehaviorConfig()),
1114 [](PeerConfigurer* alice) {
1115 VideoConfig video(1850, 1110, 5);
Artem Titov39483c62019-07-19 17:03:52 +02001116 video.stream_label = "alice-video";
Andrey Logvin435fb9a2020-05-08 08:02:49 +00001117 video.content_hint = VideoTrackInterface::ContentHint::kText;
1118 auto frame_generator = CreateScreenShareFrameGenerator(
1119 video, ScreenShareConfig(TimeDelta::Seconds(10)));
Andrey Logvinc0644672020-05-05 10:33:01 +00001120 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov39483c62019-07-19 17:03:52 +02001121 },
1122 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +01001123 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titov39483c62019-07-19 17:03:52 +02001124 run_params.use_flex_fec = false;
1125 run_params.use_ulp_fec = false;
1126 run_params.use_conference_mode = true;
1127 fixture->Run(std::move(run_params));
1128}
1129
1130// TODO(bugs.webrtc.org/9840): Investigate why is this test flaky on Win/Mac.
1131#if !defined(WEBRTC_MAC) && !defined(WEBRTC_WIN)
Jeremy Lecontec8850cb2020-09-10 20:46:33 +02001132TEST(PCFullStackTest, Pc_Screenshare_Slides_Simulcast_No_Conference_Mode) {
Artem Titov39483c62019-07-19 17:03:52 +02001133 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1134 CreateNetworkEmulationManager();
1135 auto fixture = CreateTestFixture(
1136 "pc_screenshare_slides_simulcast_no_conference_mode",
Artem Titov1ff3c582020-07-01 15:20:37 +02001137 *network_emulation_manager->time_controller(),
Artem Titov39483c62019-07-19 17:03:52 +02001138 CreateTwoNetworkLinks(network_emulation_manager.get(),
1139 BuiltInNetworkBehaviorConfig()),
1140 [](PeerConfigurer* alice) {
Artem Titov4b9701e2019-08-28 13:48:02 +02001141 VideoConfig video(1850, 1110, 30);
Artem Titov4b9701e2019-08-28 13:48:02 +02001142 video.simulcast_config = VideoSimulcastConfig(2, 1);
1143 video.temporal_layers_count = 2;
Artem Titov39483c62019-07-19 17:03:52 +02001144 video.stream_label = "alice-video";
Andrey Logvin435fb9a2020-05-08 08:02:49 +00001145 video.content_hint = VideoTrackInterface::ContentHint::kText;
1146 auto frame_generator = CreateScreenShareFrameGenerator(
1147 video, ScreenShareConfig(TimeDelta::Seconds(10)));
Andrey Logvinc0644672020-05-05 10:33:01 +00001148 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov39483c62019-07-19 17:03:52 +02001149 },
1150 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +01001151 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titov39483c62019-07-19 17:03:52 +02001152 run_params.use_flex_fec = false;
1153 run_params.use_ulp_fec = false;
1154 fixture->Run(std::move(run_params));
1155}
1156
Jeremy Lecontec8850cb2020-09-10 20:46:33 +02001157TEST(PCFullStackTest, Pc_Screenshare_Slides_Simulcast) {
Artem Titov39483c62019-07-19 17:03:52 +02001158 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1159 CreateNetworkEmulationManager();
1160 auto fixture = CreateTestFixture(
1161 "pc_screenshare_slides_simulcast",
Artem Titov1ff3c582020-07-01 15:20:37 +02001162 *network_emulation_manager->time_controller(),
Artem Titov39483c62019-07-19 17:03:52 +02001163 CreateTwoNetworkLinks(network_emulation_manager.get(),
1164 BuiltInNetworkBehaviorConfig()),
1165 [](PeerConfigurer* alice) {
Artem Titov4b9701e2019-08-28 13:48:02 +02001166 VideoConfig video(1850, 1110, 30);
Artem Titov4b9701e2019-08-28 13:48:02 +02001167 video.simulcast_config = VideoSimulcastConfig(2, 1);
1168 video.temporal_layers_count = 2;
Artem Titov39483c62019-07-19 17:03:52 +02001169 video.stream_label = "alice-video";
Andrey Logvin435fb9a2020-05-08 08:02:49 +00001170 video.content_hint = VideoTrackInterface::ContentHint::kText;
1171 auto frame_generator = CreateScreenShareFrameGenerator(
1172 video, ScreenShareConfig(TimeDelta::Seconds(10)));
Andrey Logvinc0644672020-05-05 10:33:01 +00001173 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov39483c62019-07-19 17:03:52 +02001174 },
1175 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +01001176 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titov39483c62019-07-19 17:03:52 +02001177 run_params.use_flex_fec = false;
1178 run_params.use_ulp_fec = false;
1179 run_params.use_conference_mode = true;
1180 fixture->Run(std::move(run_params));
1181}
1182#endif // !defined(WEBRTC_MAC) && !defined(WEBRTC_WIN)
1183
1184/*
Artem Titov137f6c82019-05-17 10:51:15 +02001185#if !defined(WEBRTC_MAC)
Artem Titov137f6c82019-05-17 10:51:15 +02001186// TODO(bugs.webrtc.org/9840): Investigate why is this test flaky on Win/Mac.
1187#if !defined(WEBRTC_WIN)
Artem Titov137f6c82019-05-17 10:51:15 +02001188// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1189TEST(PCFullStackTest, ScreenshareSlidesVP8_2TL_Simulcast_low) {
Artem Titov137f6c82019-05-17 10:51:15 +02001190 auto fixture = CreateVideoQualityTestFixture();
1191 ParamsWithLogging screenshare;
1192 screenshare.call.send_side_bwe = true;
1193 screenshare.screenshare[0] = {true, false, 10};
1194 screenshare.video[0] = {true, 1850, 1110, 30, 800000, 2500000,
1195 2500000, false, "VP8", 2, 1, 400000,
1196 false, false, false, ""};
1197 screenshare.analyzer = {"screenshare_slides_simulcast_low", 0.0, 0.0,
1198 kTestDurationSec};
1199 VideoQualityTest::Params screenshare_params_high;
1200 screenshare_params_high.video[0] = {
1201 true, 1850, 1110, 60, 600000, 1250000, 1250000, false,
1202 "VP8", 2, 0, 400000, false, false, false, ""};
1203 VideoQualityTest::Params screenshare_params_low;
1204 screenshare_params_low.video[0] = {true, 1850, 1110, 5, 30000, 200000,
1205 1000000, false, "VP8", 2, 0, 400000,
1206 false, false, false, ""};
1207
1208 std::vector<VideoStream> streams = {
1209 VideoQualityTest::DefaultVideoStream(screenshare_params_low, 0),
1210 VideoQualityTest::DefaultVideoStream(screenshare_params_high, 0)};
1211 screenshare.ss[0] = {
1212 streams, 0, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1213 false};
1214 fixture->RunWithAnalyzer(screenshare);
1215}
1216
1217#endif // !defined(WEBRTC_WIN)
1218#endif // !defined(WEBRTC_MAC)
1219
1220// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1221TEST(PCFullStackTest, ScreenshareSlidesVP8_2TL_Scroll) {
1222 auto fixture = CreateVideoQualityTestFixture();
1223 ParamsWithLogging config;
1224 config.call.send_side_bwe = true;
1225 config.video[0] = {true, 1850, 1110 / 2, 5, 50000, 200000,
1226 1000000, false, "VP8", 2, 1, 400000,
1227 false, false, false, ""};
1228 config.screenshare[0] = {true, false, 10, 2};
1229 config.analyzer = {"screenshare_slides_scrolling", 0.0, 0.0,
1230 kTestDurationSec};
1231 fixture->RunWithAnalyzer(config);
1232}
1233
1234// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
Jeremy Lecontec8850cb2020-09-10 20:46:33 +02001235TEST(PCGenericDescriptorTest, Screenshare_Slides_Lossy_Net_Generic_Descriptor) {
Artem Titov137f6c82019-05-17 10:51:15 +02001236 auto fixture = CreateVideoQualityTestFixture();
1237 ParamsWithLogging screenshare;
1238 screenshare.call.send_side_bwe = true;
1239 screenshare.video[0] = {true, 1850, 1110, 5, 50000, 200000,
1240 1000000, false, "VP8", 2, 1, 400000,
1241 false, false, false, ""};
1242 screenshare.screenshare[0] = {true, false, 10};
Danil Chapovalov636865e2020-06-03 14:11:26 +02001243 screenshare.analyzer = {"screenshare_slides_lossy_net_generic_descriptor",
1244 0.0, 0.0, kTestDurationSec};
Artem Titov137f6c82019-05-17 10:51:15 +02001245 screenshare.config->loss_percent = 5;
1246 screenshare.config->queue_delay_ms = 200;
1247 screenshare.config->link_capacity_kbps = 500;
Danil Chapovalov636865e2020-06-03 14:11:26 +02001248 screenshare.call.generic_descriptor = true;
Artem Titov137f6c82019-05-17 10:51:15 +02001249 fixture->RunWithAnalyzer(screenshare);
1250}
1251
1252// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1253TEST(PCFullStackTest, ScreenshareSlidesVP8_2TL_VeryLossyNet) {
1254 auto fixture = CreateVideoQualityTestFixture();
1255 ParamsWithLogging screenshare;
1256 screenshare.call.send_side_bwe = true;
1257 screenshare.video[0] = {true, 1850, 1110, 5, 50000, 200000,
1258 1000000, false, "VP8", 2, 1, 400000,
1259 false, false, false, ""};
1260 screenshare.screenshare[0] = {true, false, 10};
1261 screenshare.analyzer = {"screenshare_slides_very_lossy", 0.0, 0.0,
1262 kTestDurationSec};
1263 screenshare.config->loss_percent = 10;
1264 screenshare.config->queue_delay_ms = 200;
1265 screenshare.config->link_capacity_kbps = 500;
1266 fixture->RunWithAnalyzer(screenshare);
1267}
1268
1269// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1270TEST(PCFullStackTest, ScreenshareSlidesVP8_2TL_LossyNetRestrictedQueue) {
1271 auto fixture = CreateVideoQualityTestFixture();
1272 ParamsWithLogging screenshare;
1273 screenshare.call.send_side_bwe = true;
1274 screenshare.video[0] = {true, 1850, 1110, 5, 50000, 200000,
1275 1000000, false, "VP8", 2, 1, 400000,
1276 false, false, false, ""};
1277 screenshare.screenshare[0] = {true, false, 10};
1278 screenshare.analyzer = {"screenshare_slides_lossy_limited", 0.0, 0.0,
1279 kTestDurationSec};
1280 screenshare.config->loss_percent = 5;
1281 screenshare.config->link_capacity_kbps = 200;
1282 screenshare.config->queue_length_packets = 30;
1283
1284 fixture->RunWithAnalyzer(screenshare);
1285}
1286
1287// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1288TEST(PCFullStackTest, ScreenshareSlidesVP8_2TL_ModeratelyRestricted) {
1289 auto fixture = CreateVideoQualityTestFixture();
1290 ParamsWithLogging screenshare;
1291 screenshare.call.send_side_bwe = true;
1292 screenshare.video[0] = {true, 1850, 1110, 5, 50000, 200000,
1293 1000000, false, "VP8", 2, 1, 400000,
1294 false, false, false, ""};
1295 screenshare.screenshare[0] = {true, false, 10};
1296 screenshare.analyzer = {"screenshare_slides_moderately_restricted", 0.0, 0.0,
1297 kTestDurationSec};
1298 screenshare.config->loss_percent = 1;
1299 screenshare.config->link_capacity_kbps = 1200;
1300 screenshare.config->queue_length_packets = 30;
1301
1302 fixture->RunWithAnalyzer(screenshare);
1303}
1304
1305namespace {
1306// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1307// Since ParamsWithLogging::Video is not trivially destructible, we can't
1308// store these structs as const globals.
1309ParamsWithLogging::Video SvcVp9Video() {
1310 return ParamsWithLogging::Video{
1311 true, 1280,
1312 720, 30,
1313 800000, 2500000,
1314 2500000, false,
1315 "VP9", 3,
1316 2, 400000,
1317 false, false,
1318 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
1319}
1320
1321ParamsWithLogging::Video SimulcastVp8VideoHigh() {
1322 return ParamsWithLogging::Video{
1323 true, 1280,
1324 720, 30,
1325 800000, 2500000,
1326 2500000, false,
1327 "VP8", 3,
1328 2, 400000,
1329 false, false,
1330 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
1331}
1332
1333ParamsWithLogging::Video SimulcastVp8VideoMedium() {
1334 return ParamsWithLogging::Video{
1335 true, 640,
1336 360, 30,
1337 150000, 500000,
1338 700000, false,
1339 "VP8", 3,
1340 2, 400000,
1341 false, false,
1342 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
1343}
1344
1345ParamsWithLogging::Video SimulcastVp8VideoLow() {
1346 return ParamsWithLogging::Video{
1347 true, 320,
1348 180, 30,
1349 30000, 150000,
1350 200000, false,
1351 "VP8", 3,
1352 2, 400000,
1353 false, false,
1354 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
1355}
1356} // namespace
Artem Titov733a7812019-07-24 14:53:15 +02001357*/
Artem Titov137f6c82019-05-17 10:51:15 +02001358
1359#if defined(RTC_ENABLE_VP9)
1360
Jeremy Leconte4100d552020-09-11 18:02:36 +02001361TEST(PCFullStackTest, Pc_Screenshare_Slides_Vp9_3sl_High_Fps) {
Artem Titov1e49ab22019-07-30 13:17:25 +02001362 webrtc::test::ScopedFieldTrials override_trials(
1363 AppendFieldTrials("WebRTC-Vp9InterLayerPred/"
1364 "Enabled,inter_layer_pred_mode:on/"));
Artem Titov733a7812019-07-24 14:53:15 +02001365 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1366 CreateNetworkEmulationManager();
1367 auto fixture = CreateTestFixture(
1368 "pc_screenshare_slides_vp9_3sl_high_fps",
Artem Titov1ff3c582020-07-01 15:20:37 +02001369 *network_emulation_manager->time_controller(),
Artem Titov733a7812019-07-24 14:53:15 +02001370 CreateTwoNetworkLinks(network_emulation_manager.get(),
1371 BuiltInNetworkBehaviorConfig()),
1372 [](PeerConfigurer* alice) {
1373 VideoConfig video(1850, 1110, 30);
1374 video.stream_label = "alice-video";
Artem Titov733a7812019-07-24 14:53:15 +02001375 video.simulcast_config = VideoSimulcastConfig(3, 2);
Andrey Logvin435fb9a2020-05-08 08:02:49 +00001376 video.content_hint = VideoTrackInterface::ContentHint::kText;
1377 auto frame_generator = CreateScreenShareFrameGenerator(
1378 video, ScreenShareConfig(TimeDelta::Seconds(10)));
Andrey Logvinc0644672020-05-05 10:33:01 +00001379 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Mirko Bonadei9d58f972021-07-15 17:14:54 +02001380 alice->SetVideoCodecs({VideoCodecConfig(
1381 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
1382 {kVP9FmtpProfileId,
1383 VP9ProfileToString(VP9Profile::kProfile0)}})});
Artem Titov733a7812019-07-24 14:53:15 +02001384 },
Mirko Bonadei9d58f972021-07-15 17:14:54 +02001385 [](PeerConfigurer* bob) {
1386 bob->SetVideoCodecs({VideoCodecConfig(
1387 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
1388 {kVP9FmtpProfileId,
1389 VP9ProfileToString(VP9Profile::kProfile0)}})});
1390 });
Danil Chapovalov0c626af2020-02-10 11:16:00 +01001391 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titov733a7812019-07-24 14:53:15 +02001392 run_params.use_flex_fec = false;
1393 run_params.use_ulp_fec = false;
1394 fixture->Run(std::move(run_params));
Artem Titov137f6c82019-05-17 10:51:15 +02001395}
1396
Jeremy Leconte4100d552020-09-11 18:02:36 +02001397TEST(PCFullStackTest, Pc_Vp9svc_3sl_High) {
Artem Titov1e49ab22019-07-30 13:17:25 +02001398 webrtc::test::ScopedFieldTrials override_trials(
1399 AppendFieldTrials("WebRTC-Vp9InterLayerPred/"
1400 "Enabled,inter_layer_pred_mode:on/"));
1401 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1402 CreateNetworkEmulationManager();
1403 auto fixture = CreateTestFixture(
Artem Titov1ff3c582020-07-01 15:20:37 +02001404 "pc_vp9svc_3sl_high", *network_emulation_manager->time_controller(),
Artem Titov1e49ab22019-07-30 13:17:25 +02001405 CreateTwoNetworkLinks(network_emulation_manager.get(),
1406 BuiltInNetworkBehaviorConfig()),
1407 [](PeerConfigurer* alice) {
1408 VideoConfig video(1280, 720, 30);
1409 video.stream_label = "alice-video";
Artem Titov1e49ab22019-07-30 13:17:25 +02001410 video.simulcast_config = VideoSimulcastConfig(3, 2);
1411 video.temporal_layers_count = 3;
Andrey Logvinc0644672020-05-05 10:33:01 +00001412 auto frame_generator = CreateFromYuvFileFrameGenerator(
1413 video, ClipNameToClipPath("ConferenceMotion_1280_720_50"));
1414 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Mirko Bonadei9d58f972021-07-15 17:14:54 +02001415 alice->SetVideoCodecs({VideoCodecConfig(
1416 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
1417 {kVP9FmtpProfileId,
1418 VP9ProfileToString(VP9Profile::kProfile0)}})});
Artem Titov1e49ab22019-07-30 13:17:25 +02001419 },
Mirko Bonadei9d58f972021-07-15 17:14:54 +02001420 [](PeerConfigurer* bob) {
1421 bob->SetVideoCodecs({VideoCodecConfig(
1422 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
1423 {kVP9FmtpProfileId,
1424 VP9ProfileToString(VP9Profile::kProfile0)}})});
1425 });
Danil Chapovalov0c626af2020-02-10 11:16:00 +01001426 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titov1e49ab22019-07-30 13:17:25 +02001427 run_params.use_flex_fec = false;
1428 run_params.use_ulp_fec = false;
1429 fixture->Run(std::move(run_params));
1430}
1431
Jeremy Leconte4100d552020-09-11 18:02:36 +02001432TEST(PCFullStackTest, Pc_Vp9svc_3sl_Low) {
Artem Titov1e49ab22019-07-30 13:17:25 +02001433 webrtc::test::ScopedFieldTrials override_trials(
1434 AppendFieldTrials("WebRTC-Vp9InterLayerPred/"
1435 "Enabled,inter_layer_pred_mode:on/"));
1436 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1437 CreateNetworkEmulationManager();
1438 auto fixture = CreateTestFixture(
Artem Titov1ff3c582020-07-01 15:20:37 +02001439 "pc_vp9svc_3sl_low", *network_emulation_manager->time_controller(),
Artem Titov1e49ab22019-07-30 13:17:25 +02001440 CreateTwoNetworkLinks(network_emulation_manager.get(),
1441 BuiltInNetworkBehaviorConfig()),
1442 [](PeerConfigurer* alice) {
1443 VideoConfig video(1280, 720, 30);
1444 video.stream_label = "alice-video";
Artem Titov1e49ab22019-07-30 13:17:25 +02001445 video.simulcast_config = VideoSimulcastConfig(3, 0);
1446 video.temporal_layers_count = 3;
Andrey Logvinc0644672020-05-05 10:33:01 +00001447 auto frame_generator = CreateFromYuvFileFrameGenerator(
1448 video, ClipNameToClipPath("ConferenceMotion_1280_720_50"));
1449 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Mirko Bonadei9d58f972021-07-15 17:14:54 +02001450 alice->SetVideoCodecs({VideoCodecConfig(
1451 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
1452 {kVP9FmtpProfileId,
1453 VP9ProfileToString(VP9Profile::kProfile0)}})});
Artem Titov1e49ab22019-07-30 13:17:25 +02001454 },
Mirko Bonadei9d58f972021-07-15 17:14:54 +02001455 [](PeerConfigurer* bob) {
1456 bob->SetVideoCodecs({VideoCodecConfig(
1457 /*name=*/cricket::kVp9CodecName, /*required_params=*/{
1458 {kVP9FmtpProfileId,
1459 VP9ProfileToString(VP9Profile::kProfile0)}})});
1460 });
Danil Chapovalov0c626af2020-02-10 11:16:00 +01001461 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titov1e49ab22019-07-30 13:17:25 +02001462 run_params.use_flex_fec = false;
1463 run_params.use_ulp_fec = false;
1464 fixture->Run(std::move(run_params));
1465}
1466
Artem Titov733a7812019-07-24 14:53:15 +02001467#endif // defined(RTC_ENABLE_VP9)
1468
1469/*
Artem Titov137f6c82019-05-17 10:51:15 +02001470// bugs.webrtc.org/9506
1471#if !defined(WEBRTC_MAC)
1472
1473// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1474TEST(PCFullStackTest, VP9KSVC_3SL_High) {
1475 webrtc::test::ScopedFieldTrials override_trials(
1476 AppendFieldTrials("WebRTC-Vp9IssueKeyFrameOnLayerDeactivation/Enabled/"));
1477 auto fixture = CreateVideoQualityTestFixture();
1478 ParamsWithLogging simulcast;
1479 simulcast.call.send_side_bwe = true;
1480 simulcast.video[0] = SvcVp9Video();
1481 simulcast.analyzer = {"vp9ksvc_3sl_high", 0.0, 0.0, kTestDurationSec};
1482 simulcast.ss[0] = {
1483 std::vector<VideoStream>(), 0, 3, 2, InterLayerPredMode::kOnKeyPic,
1484 std::vector<SpatialLayer>(), false};
1485 fixture->RunWithAnalyzer(simulcast);
1486}
1487
1488// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1489TEST(PCFullStackTest, VP9KSVC_3SL_Medium) {
1490 webrtc::test::ScopedFieldTrials override_trials(
1491 AppendFieldTrials("WebRTC-Vp9IssueKeyFrameOnLayerDeactivation/Enabled/"));
1492 auto fixture = CreateVideoQualityTestFixture();
1493 ParamsWithLogging simulcast;
1494 simulcast.call.send_side_bwe = true;
1495 simulcast.video[0] = SvcVp9Video();
1496 simulcast.analyzer = {"vp9ksvc_3sl_medium", 0.0, 0.0, kTestDurationSec};
1497 simulcast.ss[0] = {
1498 std::vector<VideoStream>(), 0, 3, 1, InterLayerPredMode::kOnKeyPic,
1499 std::vector<SpatialLayer>(), false};
1500 fixture->RunWithAnalyzer(simulcast);
1501}
1502
1503// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1504TEST(PCFullStackTest, VP9KSVC_3SL_Low) {
1505 webrtc::test::ScopedFieldTrials override_trials(
1506 AppendFieldTrials("WebRTC-Vp9IssueKeyFrameOnLayerDeactivation/Enabled/"));
1507 auto fixture = CreateVideoQualityTestFixture();
1508 ParamsWithLogging simulcast;
1509 simulcast.call.send_side_bwe = true;
1510 simulcast.video[0] = SvcVp9Video();
1511 simulcast.analyzer = {"vp9ksvc_3sl_low", 0.0, 0.0, kTestDurationSec};
1512 simulcast.ss[0] = {
1513 std::vector<VideoStream>(), 0, 3, 0, InterLayerPredMode::kOnKeyPic,
1514 std::vector<SpatialLayer>(), false};
1515 fixture->RunWithAnalyzer(simulcast);
1516}
1517
1518// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1519TEST(PCFullStackTest, VP9KSVC_3SL_Medium_Network_Restricted) {
1520 webrtc::test::ScopedFieldTrials override_trials(
1521 AppendFieldTrials("WebRTC-Vp9IssueKeyFrameOnLayerDeactivation/Enabled/"));
1522 auto fixture = CreateVideoQualityTestFixture();
1523 ParamsWithLogging simulcast;
1524 simulcast.call.send_side_bwe = true;
1525 simulcast.video[0] = SvcVp9Video();
1526 simulcast.analyzer = {"vp9ksvc_3sl_medium_network_restricted", 0.0, 0.0,
1527 kTestDurationSec};
1528 simulcast.ss[0] = {
1529 std::vector<VideoStream>(), 0, 3, -1, InterLayerPredMode::kOnKeyPic,
1530 std::vector<SpatialLayer>(), false};
1531 simulcast.config->link_capacity_kbps = 1000;
1532 simulcast.config->queue_delay_ms = 100;
1533 fixture->RunWithAnalyzer(simulcast);
1534}
1535
1536// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1537// TODO(webrtc:9722): Remove when experiment is cleaned up.
1538TEST(PCFullStackTest, VP9KSVC_3SL_Medium_Network_Restricted_Trusted_Rate) {
1539 webrtc::test::ScopedFieldTrials override_trials(
Mirko Bonadeie39b3782020-09-24 14:02:39 +02001540 AppendFieldTrials("WebRTC-Vp9IssueKeyFrameOnLayerDeactivation/Enabled/"));
Artem Titov137f6c82019-05-17 10:51:15 +02001541 auto fixture = CreateVideoQualityTestFixture();
1542 ParamsWithLogging simulcast;
1543 simulcast.call.send_side_bwe = true;
1544 simulcast.video[0] = SvcVp9Video();
1545 simulcast.analyzer = {"vp9ksvc_3sl_medium_network_restricted_trusted_rate",
1546 0.0, 0.0, kTestDurationSec};
1547 simulcast.ss[0] = {
1548 std::vector<VideoStream>(), 0, 3, -1, InterLayerPredMode::kOnKeyPic,
1549 std::vector<SpatialLayer>(), false};
1550 simulcast.config->link_capacity_kbps = 1000;
1551 simulcast.config->queue_delay_ms = 100;
1552 fixture->RunWithAnalyzer(simulcast);
1553}
1554#endif // !defined(WEBRTC_MAC)
1555
1556#endif // defined(RTC_ENABLE_VP9)
Artem Titov39483c62019-07-19 17:03:52 +02001557*/
Artem Titov137f6c82019-05-17 10:51:15 +02001558
1559// Android bots can't handle FullHD, so disable the test.
1560// TODO(bugs.webrtc.org/9220): Investigate source of flakiness on Mac.
1561#if defined(WEBRTC_ANDROID) || defined(WEBRTC_MAC)
Jeremy Lecontec8850cb2020-09-10 20:46:33 +02001562#define MAYBE_Pc_Simulcast_HD_High DISABLED_Pc_Simulcast_HD_High
Artem Titov137f6c82019-05-17 10:51:15 +02001563#else
Jeremy Lecontec8850cb2020-09-10 20:46:33 +02001564#define MAYBE_Pc_Simulcast_HD_High Pc_Simulcast_HD_High
Artem Titov137f6c82019-05-17 10:51:15 +02001565#endif
Jeremy Lecontec8850cb2020-09-10 20:46:33 +02001566TEST(PCFullStackTest, MAYBE_Pc_Simulcast_HD_High) {
Artem Titov137f6c82019-05-17 10:51:15 +02001567 webrtc::test::ScopedFieldTrials override_trials(AppendFieldTrials(
1568 "WebRTC-ForceSimulatedOveruseIntervalMs/1000-50000-300/"));
Artem Titov39483c62019-07-19 17:03:52 +02001569 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1570 CreateNetworkEmulationManager();
1571 BuiltInNetworkBehaviorConfig config;
1572 config.loss_percent = 0;
1573 config.queue_delay_ms = 100;
1574 auto fixture = CreateTestFixture(
Artem Titov1ff3c582020-07-01 15:20:37 +02001575 "pc_simulcast_HD_high", *network_emulation_manager->time_controller(),
Artem Titov39483c62019-07-19 17:03:52 +02001576 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
1577 [](PeerConfigurer* alice) {
1578 VideoConfig video(1920, 1080, 30);
Artem Titov39483c62019-07-19 17:03:52 +02001579 video.simulcast_config = VideoSimulcastConfig(3, 2);
Artem Titov4b9701e2019-08-28 13:48:02 +02001580 video.temporal_layers_count = 3;
Artem Titov39483c62019-07-19 17:03:52 +02001581 video.stream_label = "alice-video";
Andrey Logvin42c59522020-05-06 12:18:26 +00001582 alice->AddVideoConfig(std::move(video));
Artem Titov39483c62019-07-19 17:03:52 +02001583 },
1584 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +01001585 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titov39483c62019-07-19 17:03:52 +02001586 run_params.use_flex_fec = false;
1587 run_params.use_ulp_fec = false;
1588 fixture->Run(std::move(run_params));
Artem Titov137f6c82019-05-17 10:51:15 +02001589}
1590
Jeremy Leconte4100d552020-09-11 18:02:36 +02001591TEST(PCFullStackTest, Pc_Simulcast_Vp8_3sl_High) {
Artem Titov39483c62019-07-19 17:03:52 +02001592 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1593 CreateNetworkEmulationManager();
1594 BuiltInNetworkBehaviorConfig config;
1595 config.loss_percent = 0;
1596 config.queue_delay_ms = 100;
1597 auto fixture = CreateTestFixture(
1598 "pc_simulcast_vp8_3sl_high",
Artem Titov1ff3c582020-07-01 15:20:37 +02001599 *network_emulation_manager->time_controller(),
Artem Titov39483c62019-07-19 17:03:52 +02001600 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
1601 [](PeerConfigurer* alice) {
1602 VideoConfig video(1280, 720, 30);
Artem Titov39483c62019-07-19 17:03:52 +02001603 video.simulcast_config = VideoSimulcastConfig(3, 2);
1604 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +00001605 auto frame_generator = CreateFromYuvFileFrameGenerator(
1606 video, ClipNameToClipPath("ConferenceMotion_1280_720_50"));
1607 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov39483c62019-07-19 17:03:52 +02001608 },
1609 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +01001610 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titov39483c62019-07-19 17:03:52 +02001611 run_params.use_flex_fec = false;
1612 run_params.use_ulp_fec = false;
1613 fixture->Run(std::move(run_params));
Artem Titov137f6c82019-05-17 10:51:15 +02001614}
1615
Jeremy Leconte4100d552020-09-11 18:02:36 +02001616TEST(PCFullStackTest, Pc_Simulcast_Vp8_3sl_Low) {
Artem Titov39483c62019-07-19 17:03:52 +02001617 std::unique_ptr<NetworkEmulationManager> network_emulation_manager =
1618 CreateNetworkEmulationManager();
1619 BuiltInNetworkBehaviorConfig config;
1620 config.loss_percent = 0;
1621 config.queue_delay_ms = 100;
1622 auto fixture = CreateTestFixture(
Artem Titov1ff3c582020-07-01 15:20:37 +02001623 "pc_simulcast_vp8_3sl_low", *network_emulation_manager->time_controller(),
Artem Titov39483c62019-07-19 17:03:52 +02001624 CreateTwoNetworkLinks(network_emulation_manager.get(), config),
1625 [](PeerConfigurer* alice) {
1626 VideoConfig video(1280, 720, 30);
Artem Titov39483c62019-07-19 17:03:52 +02001627 video.simulcast_config = VideoSimulcastConfig(3, 0);
1628 video.stream_label = "alice-video";
Andrey Logvinc0644672020-05-05 10:33:01 +00001629 auto frame_generator = CreateFromYuvFileFrameGenerator(
1630 video, ClipNameToClipPath("ConferenceMotion_1280_720_50"));
1631 alice->AddVideoConfig(std::move(video), std::move(frame_generator));
Artem Titov39483c62019-07-19 17:03:52 +02001632 },
1633 [](PeerConfigurer* bob) {});
Danil Chapovalov0c626af2020-02-10 11:16:00 +01001634 RunParams run_params(TimeDelta::Seconds(kTestDurationSec));
Artem Titov39483c62019-07-19 17:03:52 +02001635 run_params.use_flex_fec = false;
1636 run_params.use_ulp_fec = false;
1637 fixture->Run(std::move(run_params));
Artem Titov137f6c82019-05-17 10:51:15 +02001638}
1639
Artem Titov39483c62019-07-19 17:03:52 +02001640/*
Artem Titov137f6c82019-05-17 10:51:15 +02001641// This test assumes ideal network conditions with target bandwidth being
1642// available and exercises WebRTC calls with a high target bitrate(100 Mbps).
1643// Android32 bots can't handle this high bitrate, so disable test for those.
1644#if defined(WEBRTC_ANDROID)
1645#define MAYBE_HighBitrateWithFakeCodec DISABLED_HighBitrateWithFakeCodec
1646#else
1647#define MAYBE_HighBitrateWithFakeCodec HighBitrateWithFakeCodec
1648#endif // defined(WEBRTC_ANDROID)
1649// TODO(bugs.webrtc.org/10639) Disabled because target bitrate can't be
1650configured yet. TEST(PCFullStackTest, MAYBE_HighBitrateWithFakeCodec) { auto
1651fixture = CreateVideoQualityTestFixture(); const int target_bitrate = 100000000;
1652 ParamsWithLogging generator;
1653 generator.call.send_side_bwe = true;
1654 generator.call.call_bitrate_config.min_bitrate_bps = target_bitrate;
1655 generator.call.call_bitrate_config.start_bitrate_bps = target_bitrate;
1656 generator.call.call_bitrate_config.max_bitrate_bps = target_bitrate;
1657 generator.video[0] = {true,
1658 360,
1659 240,
1660 30,
1661 target_bitrate / 2,
1662 target_bitrate,
1663 target_bitrate * 2,
1664 false,
1665 "FakeCodec",
1666 1,
1667 0,
1668 0,
1669 false,
1670 false,
1671 false,
1672 "Generator"};
1673 generator.analyzer = {"high_bitrate_with_fake_codec", 0.0, 0.0,
1674 kTestDurationSec};
1675 fixture->RunWithAnalyzer(generator);
1676}
1677
1678// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1679TEST(PCFullStackTest, LargeRoomVP8_5thumb) {
1680 auto fixture = CreateVideoQualityTestFixture();
1681 ParamsWithLogging large_room;
1682 large_room.call.send_side_bwe = true;
1683 large_room.video[0] = SimulcastVp8VideoHigh();
1684 large_room.analyzer = {"largeroom_5thumb", 0.0, 0.0, kTestDurationSec};
1685 large_room.config->loss_percent = 0;
1686 large_room.config->queue_delay_ms = 100;
1687 ParamsWithLogging video_params_high;
1688 video_params_high.video[0] = SimulcastVp8VideoHigh();
1689 ParamsWithLogging video_params_medium;
1690 video_params_medium.video[0] = SimulcastVp8VideoMedium();
1691 ParamsWithLogging video_params_low;
1692 video_params_low.video[0] = SimulcastVp8VideoLow();
1693
1694 std::vector<VideoStream> streams = {
1695 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
1696 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
1697 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
1698 large_room.call.num_thumbnails = 5;
1699 large_room.ss[0] = {
1700 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1701 false};
1702 fixture->RunWithAnalyzer(large_room);
1703}
1704
1705#if defined(WEBRTC_ANDROID) || defined(WEBRTC_IOS)
1706// Fails on mobile devices:
1707// https://bugs.chromium.org/p/webrtc/issues/detail?id=7301
1708#define MAYBE_LargeRoomVP8_50thumb DISABLED_LargeRoomVP8_50thumb
1709#define MAYBE_LargeRoomVP8_15thumb DISABLED_LargeRoomVP8_15thumb
1710#else
1711#define MAYBE_LargeRoomVP8_50thumb LargeRoomVP8_50thumb
1712#define MAYBE_LargeRoomVP8_15thumb LargeRoomVP8_15thumb
1713#endif
1714// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1715TEST(PCFullStackTest, MAYBE_LargeRoomVP8_15thumb) {
1716 auto fixture = CreateVideoQualityTestFixture();
1717 ParamsWithLogging large_room;
1718 large_room.call.send_side_bwe = true;
1719 large_room.video[0] = SimulcastVp8VideoHigh();
1720 large_room.analyzer = {"largeroom_15thumb", 0.0, 0.0, kTestDurationSec};
1721 large_room.config->loss_percent = 0;
1722 large_room.config->queue_delay_ms = 100;
1723 ParamsWithLogging video_params_high;
1724 video_params_high.video[0] = SimulcastVp8VideoHigh();
1725 ParamsWithLogging video_params_medium;
1726 video_params_medium.video[0] = SimulcastVp8VideoMedium();
1727 ParamsWithLogging video_params_low;
1728 video_params_low.video[0] = SimulcastVp8VideoLow();
1729
1730 std::vector<VideoStream> streams = {
1731 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
1732 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
1733 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
1734 large_room.call.num_thumbnails = 15;
1735 large_room.ss[0] = {
1736 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1737 false};
1738 fixture->RunWithAnalyzer(large_room);
1739}
1740
1741// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1742TEST(PCFullStackTest, MAYBE_LargeRoomVP8_50thumb) {
1743 auto fixture = CreateVideoQualityTestFixture();
1744 ParamsWithLogging large_room;
1745 large_room.call.send_side_bwe = true;
1746 large_room.video[0] = SimulcastVp8VideoHigh();
1747 large_room.analyzer = {"largeroom_50thumb", 0.0, 0.0, kTestDurationSec};
1748 large_room.config->loss_percent = 0;
1749 large_room.config->queue_delay_ms = 100;
1750 ParamsWithLogging video_params_high;
1751 video_params_high.video[0] = SimulcastVp8VideoHigh();
1752 ParamsWithLogging video_params_medium;
1753 video_params_medium.video[0] = SimulcastVp8VideoMedium();
1754 ParamsWithLogging video_params_low;
1755 video_params_low.video[0] = SimulcastVp8VideoLow();
1756
1757 std::vector<VideoStream> streams = {
1758 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
1759 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
1760 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
1761 large_room.call.num_thumbnails = 50;
1762 large_room.ss[0] = {
1763 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1764 false};
1765 fixture->RunWithAnalyzer(large_room);
1766}
1767*/
1768
Bjorn Terelius83e6ece2021-03-03 17:53:45 +01001769/*
Artem Titov137f6c82019-05-17 10:51:15 +02001770class PCDualStreamsTest : public ::testing::TestWithParam<int> {};
1771
Artem Titov137f6c82019-05-17 10:51:15 +02001772// Disable dual video test on mobile device becuase it's too heavy.
1773// TODO(bugs.webrtc.org/9840): Investigate why is this test flaky on MAC.
1774#if !defined(WEBRTC_ANDROID) && !defined(WEBRTC_IOS) && !defined(WEBRTC_MAC)
1775// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1776TEST_P(PCDualStreamsTest,
1777 ModeratelyRestricted_SlidesVp8_2TL_Simulcast_Video_Simulcast_High) {
Artem Titov137f6c82019-05-17 10:51:15 +02001778 const int first_stream = GetParam();
1779 ParamsWithLogging dual_streams;
1780
1781 // Screenshare Settings.
1782 dual_streams.screenshare[first_stream] = {true, false, 10};
1783 dual_streams.video[first_stream] = {true, 1850, 1110, 5, 800000, 2500000,
1784 2500000, false, "VP8", 2, 1, 400000,
1785 false, false, false, ""};
1786
1787 ParamsWithLogging screenshare_params_high;
1788 screenshare_params_high.video[0] = {
1789 true, 1850, 1110, 60, 600000, 1250000, 1250000, false,
1790 "VP8", 2, 0, 400000, false, false, false, ""};
1791 VideoQualityTest::Params screenshare_params_low;
1792 screenshare_params_low.video[0] = {true, 1850, 1110, 5, 30000, 200000,
1793 1000000, false, "VP8", 2, 0, 400000,
1794 false, false, false, ""};
1795 std::vector<VideoStream> screenhsare_streams = {
1796 VideoQualityTest::DefaultVideoStream(screenshare_params_low, 0),
1797 VideoQualityTest::DefaultVideoStream(screenshare_params_high, 0)};
1798
1799 dual_streams.ss[first_stream] = {
1800 screenhsare_streams, 1, 1, 0, InterLayerPredMode::kOn,
1801 std::vector<SpatialLayer>(), false};
1802
1803 // Video settings.
1804 dual_streams.video[1 - first_stream] = SimulcastVp8VideoHigh();
1805
1806 ParamsWithLogging video_params_high;
1807 video_params_high.video[0] = SimulcastVp8VideoHigh();
1808 ParamsWithLogging video_params_medium;
1809 video_params_medium.video[0] = SimulcastVp8VideoMedium();
1810 ParamsWithLogging video_params_low;
1811 video_params_low.video[0] = SimulcastVp8VideoLow();
1812 std::vector<VideoStream> streams = {
1813 VideoQualityTest::DefaultVideoStream(video_params_low, 0),
1814 VideoQualityTest::DefaultVideoStream(video_params_medium, 0),
1815 VideoQualityTest::DefaultVideoStream(video_params_high, 0)};
1816
1817 dual_streams.ss[1 - first_stream] = {
1818 streams, 2, 1, 0, InterLayerPredMode::kOn, std::vector<SpatialLayer>(),
1819 false};
1820
1821 // Call settings.
1822 dual_streams.call.send_side_bwe = true;
1823 dual_streams.call.dual_video = true;
1824 std::string test_label = "dualstreams_moderately_restricted_screenshare_" +
1825 std::to_string(first_stream);
1826 dual_streams.analyzer = {test_label, 0.0, 0.0, kTestDurationSec};
1827 dual_streams.config->loss_percent = 1;
1828 dual_streams.config->link_capacity_kbps = 7500;
1829 dual_streams.config->queue_length_packets = 30;
1830 dual_streams.config->queue_delay_ms = 100;
1831
1832 auto fixture = CreateVideoQualityTestFixture();
1833 fixture->RunWithAnalyzer(dual_streams);
1834}
1835#endif // !defined(WEBRTC_ANDROID) && !defined(WEBRTC_IOS) &&
1836 // !defined(WEBRTC_MAC)
1837
1838// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
1839TEST_P(PCDualStreamsTest, Conference_Restricted) {
1840 const int first_stream = GetParam();
1841 ParamsWithLogging dual_streams;
1842
1843 // Screenshare Settings.
1844 dual_streams.screenshare[first_stream] = {true, false, 10};
1845 dual_streams.video[first_stream] = {true, 1850, 1110, 5, 800000, 2500000,
1846 2500000, false, "VP8", 3, 2, 400000,
1847 false, false, false, ""};
1848 // Video settings.
1849 dual_streams.video[1 - first_stream] = {
1850 true, 1280,
1851 720, 30,
1852 150000, 500000,
1853 700000, false,
1854 "VP8", 3,
1855 2, 400000,
1856 false, false,
1857 false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
1858
1859 // Call settings.
1860 dual_streams.call.send_side_bwe = true;
1861 dual_streams.call.dual_video = true;
1862 std::string test_label = "dualstreams_conference_restricted_screenshare_" +
1863 std::to_string(first_stream);
1864 dual_streams.analyzer = {test_label, 0.0, 0.0, kTestDurationSec};
1865 dual_streams.config->loss_percent = 1;
1866 dual_streams.config->link_capacity_kbps = 5000;
1867 dual_streams.config->queue_length_packets = 30;
1868 dual_streams.config->queue_delay_ms = 100;
1869
1870 auto fixture = CreateVideoQualityTestFixture();
1871 fixture->RunWithAnalyzer(dual_streams);
1872}
Artem Titov137f6c82019-05-17 10:51:15 +02001873
1874INSTANTIATE_TEST_SUITE_P(PCFullStackTest,
1875 PCDualStreamsTest,
1876 ::testing::Values(0, 1));
Bjorn Terelius83e6ece2021-03-03 17:53:45 +01001877*/
Artem Titov137f6c82019-05-17 10:51:15 +02001878
1879} // namespace webrtc