1*d9f75844SAndroid Build Coastguard Worker /*
2*d9f75844SAndroid Build Coastguard Worker * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved.
3*d9f75844SAndroid Build Coastguard Worker *
4*d9f75844SAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license
5*d9f75844SAndroid Build Coastguard Worker * that can be found in the LICENSE file in the root of the source
6*d9f75844SAndroid Build Coastguard Worker * tree. An additional intellectual property rights grant can be found
7*d9f75844SAndroid Build Coastguard Worker * in the file PATENTS. All contributing project authors may
8*d9f75844SAndroid Build Coastguard Worker * be found in the AUTHORS file in the root of the source tree.
9*d9f75844SAndroid Build Coastguard Worker */
10*d9f75844SAndroid Build Coastguard Worker
11*d9f75844SAndroid Build Coastguard Worker #include <stdio.h>
12*d9f75844SAndroid Build Coastguard Worker
13*d9f75844SAndroid Build Coastguard Worker #include <memory>
14*d9f75844SAndroid Build Coastguard Worker #include <string>
15*d9f75844SAndroid Build Coastguard Worker #include <vector>
16*d9f75844SAndroid Build Coastguard Worker
17*d9f75844SAndroid Build Coastguard Worker #include "absl/flags/flag.h"
18*d9f75844SAndroid Build Coastguard Worker #include "absl/flags/parse.h"
19*d9f75844SAndroid Build Coastguard Worker #include "absl/types/optional.h"
20*d9f75844SAndroid Build Coastguard Worker #include "api/test/simulated_network.h"
21*d9f75844SAndroid Build Coastguard Worker #include "api/test/video_quality_test_fixture.h"
22*d9f75844SAndroid Build Coastguard Worker #include "api/transport/bitrate_settings.h"
23*d9f75844SAndroid Build Coastguard Worker #include "api/video_codecs/video_codec.h"
24*d9f75844SAndroid Build Coastguard Worker #include "rtc_base/checks.h"
25*d9f75844SAndroid Build Coastguard Worker #include "rtc_base/logging.h"
26*d9f75844SAndroid Build Coastguard Worker #include "rtc_base/string_encode.h"
27*d9f75844SAndroid Build Coastguard Worker #include "system_wrappers/include/field_trial.h"
28*d9f75844SAndroid Build Coastguard Worker #include "test/field_trial.h"
29*d9f75844SAndroid Build Coastguard Worker #include "test/gtest.h"
30*d9f75844SAndroid Build Coastguard Worker #include "test/run_test.h"
31*d9f75844SAndroid Build Coastguard Worker #include "video/video_quality_test.h"
32*d9f75844SAndroid Build Coastguard Worker
33*d9f75844SAndroid Build Coastguard Worker // Flags for video.
34*d9f75844SAndroid Build Coastguard Worker ABSL_FLAG(int, vwidth, 640, "Video width.");
35*d9f75844SAndroid Build Coastguard Worker
36*d9f75844SAndroid Build Coastguard Worker ABSL_FLAG(int, vheight, 480, "Video height.");
37*d9f75844SAndroid Build Coastguard Worker
38*d9f75844SAndroid Build Coastguard Worker ABSL_FLAG(int, vfps, 30, "Video frames per second.");
39*d9f75844SAndroid Build Coastguard Worker
40*d9f75844SAndroid Build Coastguard Worker ABSL_FLAG(int,
41*d9f75844SAndroid Build Coastguard Worker capture_device_index,
42*d9f75844SAndroid Build Coastguard Worker 0,
43*d9f75844SAndroid Build Coastguard Worker "Capture device to select for video stream");
44*d9f75844SAndroid Build Coastguard Worker
45*d9f75844SAndroid Build Coastguard Worker ABSL_FLAG(int, vtarget_bitrate, 400, "Video stream target bitrate in kbps.");
46*d9f75844SAndroid Build Coastguard Worker
47*d9f75844SAndroid Build Coastguard Worker ABSL_FLAG(int, vmin_bitrate, 100, "Video stream min bitrate in kbps.");
48*d9f75844SAndroid Build Coastguard Worker
49*d9f75844SAndroid Build Coastguard Worker ABSL_FLAG(int, vmax_bitrate, 2000, "Video stream max bitrate in kbps.");
50*d9f75844SAndroid Build Coastguard Worker
51*d9f75844SAndroid Build Coastguard Worker ABSL_FLAG(bool,
52*d9f75844SAndroid Build Coastguard Worker suspend_below_min_bitrate,
53*d9f75844SAndroid Build Coastguard Worker false,
54*d9f75844SAndroid Build Coastguard Worker "Suspends video below the configured min bitrate.");
55*d9f75844SAndroid Build Coastguard Worker
56*d9f75844SAndroid Build Coastguard Worker ABSL_FLAG(int,
57*d9f75844SAndroid Build Coastguard Worker vnum_temporal_layers,
58*d9f75844SAndroid Build Coastguard Worker 1,
59*d9f75844SAndroid Build Coastguard Worker "Number of temporal layers for video. Set to 1-4 to override.");
60*d9f75844SAndroid Build Coastguard Worker
61*d9f75844SAndroid Build Coastguard Worker ABSL_FLAG(int, vnum_streams, 0, "Number of video streams to show or analyze.");
62*d9f75844SAndroid Build Coastguard Worker
63*d9f75844SAndroid Build Coastguard Worker ABSL_FLAG(int,
64*d9f75844SAndroid Build Coastguard Worker vnum_spatial_layers,
65*d9f75844SAndroid Build Coastguard Worker 1,
66*d9f75844SAndroid Build Coastguard Worker "Number of video spatial layers to use.");
67*d9f75844SAndroid Build Coastguard Worker
68*d9f75844SAndroid Build Coastguard Worker ABSL_FLAG(int,
69*d9f75844SAndroid Build Coastguard Worker vinter_layer_pred,
70*d9f75844SAndroid Build Coastguard Worker 2,
71*d9f75844SAndroid Build Coastguard Worker "Video inter-layer prediction mode. "
72*d9f75844SAndroid Build Coastguard Worker "0 - enabled, 1 - disabled, 2 - enabled only for key pictures.");
73*d9f75844SAndroid Build Coastguard Worker
74*d9f75844SAndroid Build Coastguard Worker ABSL_FLAG(std::string,
75*d9f75844SAndroid Build Coastguard Worker vstream0,
76*d9f75844SAndroid Build Coastguard Worker "",
77*d9f75844SAndroid Build Coastguard Worker "Comma separated values describing VideoStream for video stream #0.");
78*d9f75844SAndroid Build Coastguard Worker
79*d9f75844SAndroid Build Coastguard Worker ABSL_FLAG(std::string,
80*d9f75844SAndroid Build Coastguard Worker vstream1,
81*d9f75844SAndroid Build Coastguard Worker "",
82*d9f75844SAndroid Build Coastguard Worker "Comma separated values describing VideoStream for video stream #1.");
83*d9f75844SAndroid Build Coastguard Worker
84*d9f75844SAndroid Build Coastguard Worker ABSL_FLAG(std::string,
85*d9f75844SAndroid Build Coastguard Worker vsl0,
86*d9f75844SAndroid Build Coastguard Worker "",
87*d9f75844SAndroid Build Coastguard Worker "Comma separated values describing SpatialLayer for video layer #0.");
88*d9f75844SAndroid Build Coastguard Worker
89*d9f75844SAndroid Build Coastguard Worker ABSL_FLAG(std::string,
90*d9f75844SAndroid Build Coastguard Worker vsl1,
91*d9f75844SAndroid Build Coastguard Worker "",
92*d9f75844SAndroid Build Coastguard Worker "Comma separated values describing SpatialLayer for video layer #1.");
93*d9f75844SAndroid Build Coastguard Worker
94*d9f75844SAndroid Build Coastguard Worker ABSL_FLAG(int,
95*d9f75844SAndroid Build Coastguard Worker vselected_tl,
96*d9f75844SAndroid Build Coastguard Worker -1,
97*d9f75844SAndroid Build Coastguard Worker "Temporal layer to show or analyze for screenshare. -1 to disable "
98*d9f75844SAndroid Build Coastguard Worker "filtering.");
99*d9f75844SAndroid Build Coastguard Worker
100*d9f75844SAndroid Build Coastguard Worker ABSL_FLAG(int,
101*d9f75844SAndroid Build Coastguard Worker vselected_stream,
102*d9f75844SAndroid Build Coastguard Worker 0,
103*d9f75844SAndroid Build Coastguard Worker "ID of the stream to show or analyze for screenshare."
104*d9f75844SAndroid Build Coastguard Worker "Set to the number of streams to show them all.");
105*d9f75844SAndroid Build Coastguard Worker
106*d9f75844SAndroid Build Coastguard Worker ABSL_FLAG(int,
107*d9f75844SAndroid Build Coastguard Worker vselected_sl,
108*d9f75844SAndroid Build Coastguard Worker -1,
109*d9f75844SAndroid Build Coastguard Worker "Spatial layer to show or analyze for screenshare. -1 to disable "
110*d9f75844SAndroid Build Coastguard Worker "filtering.");
111*d9f75844SAndroid Build Coastguard Worker
112*d9f75844SAndroid Build Coastguard Worker // Flags for screenshare.
113*d9f75844SAndroid Build Coastguard Worker ABSL_FLAG(int,
114*d9f75844SAndroid Build Coastguard Worker min_transmit_bitrate,
115*d9f75844SAndroid Build Coastguard Worker 400,
116*d9f75844SAndroid Build Coastguard Worker "Min transmit bitrate incl. padding for screenshare.");
117*d9f75844SAndroid Build Coastguard Worker
118*d9f75844SAndroid Build Coastguard Worker ABSL_FLAG(int, swidth, 1850, "Screenshare width (crops source).");
119*d9f75844SAndroid Build Coastguard Worker
120*d9f75844SAndroid Build Coastguard Worker ABSL_FLAG(int, sheight, 1110, "Screenshare height (crops source).");
121*d9f75844SAndroid Build Coastguard Worker
122*d9f75844SAndroid Build Coastguard Worker ABSL_FLAG(int, sfps, 5, "Frames per second for screenshare.");
123*d9f75844SAndroid Build Coastguard Worker
124*d9f75844SAndroid Build Coastguard Worker ABSL_FLAG(int,
125*d9f75844SAndroid Build Coastguard Worker starget_bitrate,
126*d9f75844SAndroid Build Coastguard Worker 100,
127*d9f75844SAndroid Build Coastguard Worker "Screenshare stream target bitrate in kbps.");
128*d9f75844SAndroid Build Coastguard Worker
129*d9f75844SAndroid Build Coastguard Worker ABSL_FLAG(int, smin_bitrate, 100, "Screenshare stream min bitrate in kbps.");
130*d9f75844SAndroid Build Coastguard Worker
131*d9f75844SAndroid Build Coastguard Worker ABSL_FLAG(int, smax_bitrate, 2000, "Screenshare stream max bitrate in kbps.");
132*d9f75844SAndroid Build Coastguard Worker
133*d9f75844SAndroid Build Coastguard Worker ABSL_FLAG(int,
134*d9f75844SAndroid Build Coastguard Worker snum_temporal_layers,
135*d9f75844SAndroid Build Coastguard Worker 2,
136*d9f75844SAndroid Build Coastguard Worker "Number of temporal layers to use in screenshare.");
137*d9f75844SAndroid Build Coastguard Worker
138*d9f75844SAndroid Build Coastguard Worker ABSL_FLAG(int,
139*d9f75844SAndroid Build Coastguard Worker snum_streams,
140*d9f75844SAndroid Build Coastguard Worker 0,
141*d9f75844SAndroid Build Coastguard Worker "Number of screenshare streams to show or analyze.");
142*d9f75844SAndroid Build Coastguard Worker
143*d9f75844SAndroid Build Coastguard Worker ABSL_FLAG(int,
144*d9f75844SAndroid Build Coastguard Worker snum_spatial_layers,
145*d9f75844SAndroid Build Coastguard Worker 1,
146*d9f75844SAndroid Build Coastguard Worker "Number of screenshare spatial layers to use.");
147*d9f75844SAndroid Build Coastguard Worker
148*d9f75844SAndroid Build Coastguard Worker ABSL_FLAG(int,
149*d9f75844SAndroid Build Coastguard Worker sinter_layer_pred,
150*d9f75844SAndroid Build Coastguard Worker 0,
151*d9f75844SAndroid Build Coastguard Worker "Screenshare inter-layer prediction mode. "
152*d9f75844SAndroid Build Coastguard Worker "0 - enabled, 1 - disabled, 2 - enabled only for key pictures.");
153*d9f75844SAndroid Build Coastguard Worker
154*d9f75844SAndroid Build Coastguard Worker ABSL_FLAG(
155*d9f75844SAndroid Build Coastguard Worker std::string,
156*d9f75844SAndroid Build Coastguard Worker sstream0,
157*d9f75844SAndroid Build Coastguard Worker "",
158*d9f75844SAndroid Build Coastguard Worker "Comma separated values describing VideoStream for screenshare stream #0.");
159*d9f75844SAndroid Build Coastguard Worker
160*d9f75844SAndroid Build Coastguard Worker ABSL_FLAG(
161*d9f75844SAndroid Build Coastguard Worker std::string,
162*d9f75844SAndroid Build Coastguard Worker sstream1,
163*d9f75844SAndroid Build Coastguard Worker "",
164*d9f75844SAndroid Build Coastguard Worker "Comma separated values describing VideoStream for screenshare stream #1.");
165*d9f75844SAndroid Build Coastguard Worker
166*d9f75844SAndroid Build Coastguard Worker ABSL_FLAG(
167*d9f75844SAndroid Build Coastguard Worker std::string,
168*d9f75844SAndroid Build Coastguard Worker ssl0,
169*d9f75844SAndroid Build Coastguard Worker "",
170*d9f75844SAndroid Build Coastguard Worker "Comma separated values describing SpatialLayer for screenshare layer #0.");
171*d9f75844SAndroid Build Coastguard Worker
172*d9f75844SAndroid Build Coastguard Worker ABSL_FLAG(
173*d9f75844SAndroid Build Coastguard Worker std::string,
174*d9f75844SAndroid Build Coastguard Worker ssl1,
175*d9f75844SAndroid Build Coastguard Worker "",
176*d9f75844SAndroid Build Coastguard Worker "Comma separated values describing SpatialLayer for screenshare layer #1.");
177*d9f75844SAndroid Build Coastguard Worker
178*d9f75844SAndroid Build Coastguard Worker ABSL_FLAG(int,
179*d9f75844SAndroid Build Coastguard Worker sselected_tl,
180*d9f75844SAndroid Build Coastguard Worker -1,
181*d9f75844SAndroid Build Coastguard Worker "Temporal layer to show or analyze for screenshare. -1 to disable "
182*d9f75844SAndroid Build Coastguard Worker "filtering.");
183*d9f75844SAndroid Build Coastguard Worker
184*d9f75844SAndroid Build Coastguard Worker ABSL_FLAG(int,
185*d9f75844SAndroid Build Coastguard Worker sselected_stream,
186*d9f75844SAndroid Build Coastguard Worker 0,
187*d9f75844SAndroid Build Coastguard Worker "ID of the stream to show or analyze for screenshare."
188*d9f75844SAndroid Build Coastguard Worker "Set to the number of streams to show them all.");
189*d9f75844SAndroid Build Coastguard Worker
190*d9f75844SAndroid Build Coastguard Worker ABSL_FLAG(int,
191*d9f75844SAndroid Build Coastguard Worker sselected_sl,
192*d9f75844SAndroid Build Coastguard Worker -1,
193*d9f75844SAndroid Build Coastguard Worker "Spatial layer to show or analyze for screenshare. -1 to disable "
194*d9f75844SAndroid Build Coastguard Worker "filtering.");
195*d9f75844SAndroid Build Coastguard Worker
196*d9f75844SAndroid Build Coastguard Worker ABSL_FLAG(bool,
197*d9f75844SAndroid Build Coastguard Worker generate_slides,
198*d9f75844SAndroid Build Coastguard Worker false,
199*d9f75844SAndroid Build Coastguard Worker "Whether to use randomly generated slides or read them from files.");
200*d9f75844SAndroid Build Coastguard Worker
201*d9f75844SAndroid Build Coastguard Worker ABSL_FLAG(int,
202*d9f75844SAndroid Build Coastguard Worker slide_change_interval,
203*d9f75844SAndroid Build Coastguard Worker 10,
204*d9f75844SAndroid Build Coastguard Worker "Interval (in seconds) between simulated slide changes.");
205*d9f75844SAndroid Build Coastguard Worker
206*d9f75844SAndroid Build Coastguard Worker ABSL_FLAG(
207*d9f75844SAndroid Build Coastguard Worker int,
208*d9f75844SAndroid Build Coastguard Worker scroll_duration,
209*d9f75844SAndroid Build Coastguard Worker 0,
210*d9f75844SAndroid Build Coastguard Worker "Duration (in seconds) during which a slide will be scrolled into place.");
211*d9f75844SAndroid Build Coastguard Worker
212*d9f75844SAndroid Build Coastguard Worker ABSL_FLAG(std::string,
213*d9f75844SAndroid Build Coastguard Worker slides,
214*d9f75844SAndroid Build Coastguard Worker "",
215*d9f75844SAndroid Build Coastguard Worker "Comma-separated list of *.yuv files to display as slides.");
216*d9f75844SAndroid Build Coastguard Worker
217*d9f75844SAndroid Build Coastguard Worker // Flags common with screenshare and video loopback, with equal default values.
218*d9f75844SAndroid Build Coastguard Worker ABSL_FLAG(int, start_bitrate, 600, "Call start bitrate in kbps.");
219*d9f75844SAndroid Build Coastguard Worker
220*d9f75844SAndroid Build Coastguard Worker ABSL_FLAG(std::string, codec, "VP8", "Video codec to use.");
221*d9f75844SAndroid Build Coastguard Worker
222*d9f75844SAndroid Build Coastguard Worker ABSL_FLAG(bool,
223*d9f75844SAndroid Build Coastguard Worker analyze_video,
224*d9f75844SAndroid Build Coastguard Worker false,
225*d9f75844SAndroid Build Coastguard Worker "Analyze video stream (if --duration is present)");
226*d9f75844SAndroid Build Coastguard Worker
227*d9f75844SAndroid Build Coastguard Worker ABSL_FLAG(bool,
228*d9f75844SAndroid Build Coastguard Worker analyze_screenshare,
229*d9f75844SAndroid Build Coastguard Worker false,
230*d9f75844SAndroid Build Coastguard Worker "Analyze screenshare stream (if --duration is present)");
231*d9f75844SAndroid Build Coastguard Worker
232*d9f75844SAndroid Build Coastguard Worker ABSL_FLAG(
233*d9f75844SAndroid Build Coastguard Worker int,
234*d9f75844SAndroid Build Coastguard Worker duration,
235*d9f75844SAndroid Build Coastguard Worker 0,
236*d9f75844SAndroid Build Coastguard Worker "Duration of the test in seconds. If 0, rendered will be shown instead.");
237*d9f75844SAndroid Build Coastguard Worker
238*d9f75844SAndroid Build Coastguard Worker ABSL_FLAG(std::string, output_filename, "", "Target graph data filename.");
239*d9f75844SAndroid Build Coastguard Worker
240*d9f75844SAndroid Build Coastguard Worker ABSL_FLAG(std::string,
241*d9f75844SAndroid Build Coastguard Worker graph_title,
242*d9f75844SAndroid Build Coastguard Worker "",
243*d9f75844SAndroid Build Coastguard Worker "If empty, title will be generated automatically.");
244*d9f75844SAndroid Build Coastguard Worker
245*d9f75844SAndroid Build Coastguard Worker ABSL_FLAG(int, loss_percent, 0, "Percentage of packets randomly lost.");
246*d9f75844SAndroid Build Coastguard Worker
247*d9f75844SAndroid Build Coastguard Worker ABSL_FLAG(int,
248*d9f75844SAndroid Build Coastguard Worker avg_burst_loss_length,
249*d9f75844SAndroid Build Coastguard Worker -1,
250*d9f75844SAndroid Build Coastguard Worker "Average burst length of lost packets.");
251*d9f75844SAndroid Build Coastguard Worker
252*d9f75844SAndroid Build Coastguard Worker ABSL_FLAG(int,
253*d9f75844SAndroid Build Coastguard Worker link_capacity,
254*d9f75844SAndroid Build Coastguard Worker 0,
255*d9f75844SAndroid Build Coastguard Worker "Capacity (kbps) of the fake link. 0 means infinite.");
256*d9f75844SAndroid Build Coastguard Worker
257*d9f75844SAndroid Build Coastguard Worker ABSL_FLAG(int, queue_size, 0, "Size of the bottleneck link queue in packets.");
258*d9f75844SAndroid Build Coastguard Worker
259*d9f75844SAndroid Build Coastguard Worker ABSL_FLAG(int,
260*d9f75844SAndroid Build Coastguard Worker avg_propagation_delay_ms,
261*d9f75844SAndroid Build Coastguard Worker 0,
262*d9f75844SAndroid Build Coastguard Worker "Average link propagation delay in ms.");
263*d9f75844SAndroid Build Coastguard Worker
264*d9f75844SAndroid Build Coastguard Worker ABSL_FLAG(std::string,
265*d9f75844SAndroid Build Coastguard Worker rtc_event_log_name,
266*d9f75844SAndroid Build Coastguard Worker "",
267*d9f75844SAndroid Build Coastguard Worker "Filename for rtc event log. Two files "
268*d9f75844SAndroid Build Coastguard Worker "with \"_send\" and \"_recv\" suffixes will be created. "
269*d9f75844SAndroid Build Coastguard Worker "Works only when --duration is set.");
270*d9f75844SAndroid Build Coastguard Worker
271*d9f75844SAndroid Build Coastguard Worker ABSL_FLAG(std::string,
272*d9f75844SAndroid Build Coastguard Worker rtp_dump_name,
273*d9f75844SAndroid Build Coastguard Worker "",
274*d9f75844SAndroid Build Coastguard Worker "Filename for dumped received RTP stream.");
275*d9f75844SAndroid Build Coastguard Worker
276*d9f75844SAndroid Build Coastguard Worker ABSL_FLAG(int,
277*d9f75844SAndroid Build Coastguard Worker std_propagation_delay_ms,
278*d9f75844SAndroid Build Coastguard Worker 0,
279*d9f75844SAndroid Build Coastguard Worker "Link propagation delay standard deviation in ms.");
280*d9f75844SAndroid Build Coastguard Worker
281*d9f75844SAndroid Build Coastguard Worker ABSL_FLAG(std::string,
282*d9f75844SAndroid Build Coastguard Worker encoded_frame_path,
283*d9f75844SAndroid Build Coastguard Worker "",
284*d9f75844SAndroid Build Coastguard Worker "The base path for encoded frame logs. Created files will have "
285*d9f75844SAndroid Build Coastguard Worker "the form <encoded_frame_path>.<n>.(recv|send.<m>).ivf");
286*d9f75844SAndroid Build Coastguard Worker
287*d9f75844SAndroid Build Coastguard Worker ABSL_FLAG(bool, logs, false, "print logs to stderr");
288*d9f75844SAndroid Build Coastguard Worker
289*d9f75844SAndroid Build Coastguard Worker ABSL_FLAG(bool, send_side_bwe, true, "Use send-side bandwidth estimation");
290*d9f75844SAndroid Build Coastguard Worker
291*d9f75844SAndroid Build Coastguard Worker ABSL_FLAG(bool, generic_descriptor, false, "Use the generic frame descriptor.");
292*d9f75844SAndroid Build Coastguard Worker
293*d9f75844SAndroid Build Coastguard Worker ABSL_FLAG(bool, allow_reordering, false, "Allow packet reordering to occur");
294*d9f75844SAndroid Build Coastguard Worker
295*d9f75844SAndroid Build Coastguard Worker ABSL_FLAG(bool, use_ulpfec, false, "Use RED+ULPFEC forward error correction.");
296*d9f75844SAndroid Build Coastguard Worker
297*d9f75844SAndroid Build Coastguard Worker ABSL_FLAG(bool, use_flexfec, false, "Use FlexFEC forward error correction.");
298*d9f75844SAndroid Build Coastguard Worker
299*d9f75844SAndroid Build Coastguard Worker ABSL_FLAG(bool, audio, false, "Add audio stream");
300*d9f75844SAndroid Build Coastguard Worker
301*d9f75844SAndroid Build Coastguard Worker ABSL_FLAG(bool,
302*d9f75844SAndroid Build Coastguard Worker audio_video_sync,
303*d9f75844SAndroid Build Coastguard Worker false,
304*d9f75844SAndroid Build Coastguard Worker "Sync audio and video stream (no effect if"
305*d9f75844SAndroid Build Coastguard Worker " audio is false)");
306*d9f75844SAndroid Build Coastguard Worker
307*d9f75844SAndroid Build Coastguard Worker ABSL_FLAG(bool,
308*d9f75844SAndroid Build Coastguard Worker audio_dtx,
309*d9f75844SAndroid Build Coastguard Worker false,
310*d9f75844SAndroid Build Coastguard Worker "Enable audio DTX (no effect if audio is false)");
311*d9f75844SAndroid Build Coastguard Worker
312*d9f75844SAndroid Build Coastguard Worker ABSL_FLAG(bool, video, true, "Add video stream");
313*d9f75844SAndroid Build Coastguard Worker
314*d9f75844SAndroid Build Coastguard Worker ABSL_FLAG(
315*d9f75844SAndroid Build Coastguard Worker std::string,
316*d9f75844SAndroid Build Coastguard Worker force_fieldtrials,
317*d9f75844SAndroid Build Coastguard Worker "",
318*d9f75844SAndroid Build Coastguard Worker "Field trials control experimental feature code which can be forced. "
319*d9f75844SAndroid Build Coastguard Worker "E.g. running with --force_fieldtrials=WebRTC-FooFeature/Enable/"
320*d9f75844SAndroid Build Coastguard Worker " will assign the group Enable to field trial WebRTC-FooFeature. Multiple "
321*d9f75844SAndroid Build Coastguard Worker "trials are separated by \"/\"");
322*d9f75844SAndroid Build Coastguard Worker
323*d9f75844SAndroid Build Coastguard Worker // Video-specific flags.
324*d9f75844SAndroid Build Coastguard Worker ABSL_FLAG(std::string,
325*d9f75844SAndroid Build Coastguard Worker vclip,
326*d9f75844SAndroid Build Coastguard Worker "",
327*d9f75844SAndroid Build Coastguard Worker "Name of the clip to show. If empty, the camera is used. Use "
328*d9f75844SAndroid Build Coastguard Worker "\"Generator\" for chroma generator.");
329*d9f75844SAndroid Build Coastguard Worker
330*d9f75844SAndroid Build Coastguard Worker namespace webrtc {
331*d9f75844SAndroid Build Coastguard Worker namespace {
332*d9f75844SAndroid Build Coastguard Worker
IntToInterLayerPredMode(int inter_layer_pred)333*d9f75844SAndroid Build Coastguard Worker InterLayerPredMode IntToInterLayerPredMode(int inter_layer_pred) {
334*d9f75844SAndroid Build Coastguard Worker if (inter_layer_pred == 0) {
335*d9f75844SAndroid Build Coastguard Worker return InterLayerPredMode::kOn;
336*d9f75844SAndroid Build Coastguard Worker } else if (inter_layer_pred == 1) {
337*d9f75844SAndroid Build Coastguard Worker return InterLayerPredMode::kOff;
338*d9f75844SAndroid Build Coastguard Worker } else {
339*d9f75844SAndroid Build Coastguard Worker RTC_DCHECK_EQ(inter_layer_pred, 2);
340*d9f75844SAndroid Build Coastguard Worker return InterLayerPredMode::kOnKeyPic;
341*d9f75844SAndroid Build Coastguard Worker }
342*d9f75844SAndroid Build Coastguard Worker }
343*d9f75844SAndroid Build Coastguard Worker
VideoWidth()344*d9f75844SAndroid Build Coastguard Worker size_t VideoWidth() {
345*d9f75844SAndroid Build Coastguard Worker return static_cast<size_t>(absl::GetFlag(FLAGS_vwidth));
346*d9f75844SAndroid Build Coastguard Worker }
347*d9f75844SAndroid Build Coastguard Worker
VideoHeight()348*d9f75844SAndroid Build Coastguard Worker size_t VideoHeight() {
349*d9f75844SAndroid Build Coastguard Worker return static_cast<size_t>(absl::GetFlag(FLAGS_vheight));
350*d9f75844SAndroid Build Coastguard Worker }
351*d9f75844SAndroid Build Coastguard Worker
VideoFps()352*d9f75844SAndroid Build Coastguard Worker int VideoFps() {
353*d9f75844SAndroid Build Coastguard Worker return absl::GetFlag(FLAGS_vfps);
354*d9f75844SAndroid Build Coastguard Worker }
355*d9f75844SAndroid Build Coastguard Worker
GetCaptureDevice()356*d9f75844SAndroid Build Coastguard Worker size_t GetCaptureDevice() {
357*d9f75844SAndroid Build Coastguard Worker return static_cast<size_t>(absl::GetFlag(FLAGS_capture_device_index));
358*d9f75844SAndroid Build Coastguard Worker }
359*d9f75844SAndroid Build Coastguard Worker
VideoTargetBitrateKbps()360*d9f75844SAndroid Build Coastguard Worker int VideoTargetBitrateKbps() {
361*d9f75844SAndroid Build Coastguard Worker return absl::GetFlag(FLAGS_vtarget_bitrate);
362*d9f75844SAndroid Build Coastguard Worker }
363*d9f75844SAndroid Build Coastguard Worker
VideoMinBitrateKbps()364*d9f75844SAndroid Build Coastguard Worker int VideoMinBitrateKbps() {
365*d9f75844SAndroid Build Coastguard Worker return absl::GetFlag(FLAGS_vmin_bitrate);
366*d9f75844SAndroid Build Coastguard Worker }
367*d9f75844SAndroid Build Coastguard Worker
VideoMaxBitrateKbps()368*d9f75844SAndroid Build Coastguard Worker int VideoMaxBitrateKbps() {
369*d9f75844SAndroid Build Coastguard Worker return absl::GetFlag(FLAGS_vmax_bitrate);
370*d9f75844SAndroid Build Coastguard Worker }
371*d9f75844SAndroid Build Coastguard Worker
VideoNumTemporalLayers()372*d9f75844SAndroid Build Coastguard Worker int VideoNumTemporalLayers() {
373*d9f75844SAndroid Build Coastguard Worker return absl::GetFlag(FLAGS_vnum_temporal_layers);
374*d9f75844SAndroid Build Coastguard Worker }
375*d9f75844SAndroid Build Coastguard Worker
VideoNumStreams()376*d9f75844SAndroid Build Coastguard Worker int VideoNumStreams() {
377*d9f75844SAndroid Build Coastguard Worker return absl::GetFlag(FLAGS_vnum_streams);
378*d9f75844SAndroid Build Coastguard Worker }
379*d9f75844SAndroid Build Coastguard Worker
VideoNumSpatialLayers()380*d9f75844SAndroid Build Coastguard Worker int VideoNumSpatialLayers() {
381*d9f75844SAndroid Build Coastguard Worker return absl::GetFlag(FLAGS_vnum_spatial_layers);
382*d9f75844SAndroid Build Coastguard Worker }
383*d9f75844SAndroid Build Coastguard Worker
VideoInterLayerPred()384*d9f75844SAndroid Build Coastguard Worker InterLayerPredMode VideoInterLayerPred() {
385*d9f75844SAndroid Build Coastguard Worker return IntToInterLayerPredMode(absl::GetFlag(FLAGS_vinter_layer_pred));
386*d9f75844SAndroid Build Coastguard Worker }
387*d9f75844SAndroid Build Coastguard Worker
VideoStream0()388*d9f75844SAndroid Build Coastguard Worker std::string VideoStream0() {
389*d9f75844SAndroid Build Coastguard Worker return absl::GetFlag(FLAGS_vstream0);
390*d9f75844SAndroid Build Coastguard Worker }
391*d9f75844SAndroid Build Coastguard Worker
VideoStream1()392*d9f75844SAndroid Build Coastguard Worker std::string VideoStream1() {
393*d9f75844SAndroid Build Coastguard Worker return absl::GetFlag(FLAGS_vstream1);
394*d9f75844SAndroid Build Coastguard Worker }
395*d9f75844SAndroid Build Coastguard Worker
VideoSL0()396*d9f75844SAndroid Build Coastguard Worker std::string VideoSL0() {
397*d9f75844SAndroid Build Coastguard Worker return absl::GetFlag(FLAGS_vsl0);
398*d9f75844SAndroid Build Coastguard Worker }
399*d9f75844SAndroid Build Coastguard Worker
VideoSL1()400*d9f75844SAndroid Build Coastguard Worker std::string VideoSL1() {
401*d9f75844SAndroid Build Coastguard Worker return absl::GetFlag(FLAGS_vsl1);
402*d9f75844SAndroid Build Coastguard Worker }
403*d9f75844SAndroid Build Coastguard Worker
VideoSelectedTL()404*d9f75844SAndroid Build Coastguard Worker int VideoSelectedTL() {
405*d9f75844SAndroid Build Coastguard Worker return absl::GetFlag(FLAGS_vselected_tl);
406*d9f75844SAndroid Build Coastguard Worker }
407*d9f75844SAndroid Build Coastguard Worker
VideoSelectedStream()408*d9f75844SAndroid Build Coastguard Worker int VideoSelectedStream() {
409*d9f75844SAndroid Build Coastguard Worker return absl::GetFlag(FLAGS_vselected_stream);
410*d9f75844SAndroid Build Coastguard Worker }
411*d9f75844SAndroid Build Coastguard Worker
VideoSelectedSL()412*d9f75844SAndroid Build Coastguard Worker int VideoSelectedSL() {
413*d9f75844SAndroid Build Coastguard Worker return absl::GetFlag(FLAGS_vselected_sl);
414*d9f75844SAndroid Build Coastguard Worker }
415*d9f75844SAndroid Build Coastguard Worker
ScreenshareMinTransmitBitrateKbps()416*d9f75844SAndroid Build Coastguard Worker int ScreenshareMinTransmitBitrateKbps() {
417*d9f75844SAndroid Build Coastguard Worker return absl::GetFlag(FLAGS_min_transmit_bitrate);
418*d9f75844SAndroid Build Coastguard Worker }
419*d9f75844SAndroid Build Coastguard Worker
ScreenshareWidth()420*d9f75844SAndroid Build Coastguard Worker size_t ScreenshareWidth() {
421*d9f75844SAndroid Build Coastguard Worker return static_cast<size_t>(absl::GetFlag(FLAGS_swidth));
422*d9f75844SAndroid Build Coastguard Worker }
423*d9f75844SAndroid Build Coastguard Worker
ScreenshareHeight()424*d9f75844SAndroid Build Coastguard Worker size_t ScreenshareHeight() {
425*d9f75844SAndroid Build Coastguard Worker return static_cast<size_t>(absl::GetFlag(FLAGS_sheight));
426*d9f75844SAndroid Build Coastguard Worker }
427*d9f75844SAndroid Build Coastguard Worker
ScreenshareFps()428*d9f75844SAndroid Build Coastguard Worker int ScreenshareFps() {
429*d9f75844SAndroid Build Coastguard Worker return absl::GetFlag(FLAGS_sfps);
430*d9f75844SAndroid Build Coastguard Worker }
431*d9f75844SAndroid Build Coastguard Worker
ScreenshareTargetBitrateKbps()432*d9f75844SAndroid Build Coastguard Worker int ScreenshareTargetBitrateKbps() {
433*d9f75844SAndroid Build Coastguard Worker return absl::GetFlag(FLAGS_starget_bitrate);
434*d9f75844SAndroid Build Coastguard Worker }
435*d9f75844SAndroid Build Coastguard Worker
ScreenshareMinBitrateKbps()436*d9f75844SAndroid Build Coastguard Worker int ScreenshareMinBitrateKbps() {
437*d9f75844SAndroid Build Coastguard Worker return absl::GetFlag(FLAGS_smin_bitrate);
438*d9f75844SAndroid Build Coastguard Worker }
439*d9f75844SAndroid Build Coastguard Worker
ScreenshareMaxBitrateKbps()440*d9f75844SAndroid Build Coastguard Worker int ScreenshareMaxBitrateKbps() {
441*d9f75844SAndroid Build Coastguard Worker return absl::GetFlag(FLAGS_smax_bitrate);
442*d9f75844SAndroid Build Coastguard Worker }
443*d9f75844SAndroid Build Coastguard Worker
ScreenshareNumTemporalLayers()444*d9f75844SAndroid Build Coastguard Worker int ScreenshareNumTemporalLayers() {
445*d9f75844SAndroid Build Coastguard Worker return absl::GetFlag(FLAGS_snum_temporal_layers);
446*d9f75844SAndroid Build Coastguard Worker }
447*d9f75844SAndroid Build Coastguard Worker
ScreenshareNumStreams()448*d9f75844SAndroid Build Coastguard Worker int ScreenshareNumStreams() {
449*d9f75844SAndroid Build Coastguard Worker return absl::GetFlag(FLAGS_snum_streams);
450*d9f75844SAndroid Build Coastguard Worker }
451*d9f75844SAndroid Build Coastguard Worker
ScreenshareNumSpatialLayers()452*d9f75844SAndroid Build Coastguard Worker int ScreenshareNumSpatialLayers() {
453*d9f75844SAndroid Build Coastguard Worker return absl::GetFlag(FLAGS_snum_spatial_layers);
454*d9f75844SAndroid Build Coastguard Worker }
455*d9f75844SAndroid Build Coastguard Worker
ScreenshareInterLayerPred()456*d9f75844SAndroid Build Coastguard Worker InterLayerPredMode ScreenshareInterLayerPred() {
457*d9f75844SAndroid Build Coastguard Worker return IntToInterLayerPredMode(absl::GetFlag(FLAGS_sinter_layer_pred));
458*d9f75844SAndroid Build Coastguard Worker }
459*d9f75844SAndroid Build Coastguard Worker
ScreenshareStream0()460*d9f75844SAndroid Build Coastguard Worker std::string ScreenshareStream0() {
461*d9f75844SAndroid Build Coastguard Worker return absl::GetFlag(FLAGS_sstream0);
462*d9f75844SAndroid Build Coastguard Worker }
463*d9f75844SAndroid Build Coastguard Worker
ScreenshareStream1()464*d9f75844SAndroid Build Coastguard Worker std::string ScreenshareStream1() {
465*d9f75844SAndroid Build Coastguard Worker return absl::GetFlag(FLAGS_sstream1);
466*d9f75844SAndroid Build Coastguard Worker }
467*d9f75844SAndroid Build Coastguard Worker
ScreenshareSL0()468*d9f75844SAndroid Build Coastguard Worker std::string ScreenshareSL0() {
469*d9f75844SAndroid Build Coastguard Worker return absl::GetFlag(FLAGS_ssl0);
470*d9f75844SAndroid Build Coastguard Worker }
471*d9f75844SAndroid Build Coastguard Worker
ScreenshareSL1()472*d9f75844SAndroid Build Coastguard Worker std::string ScreenshareSL1() {
473*d9f75844SAndroid Build Coastguard Worker return absl::GetFlag(FLAGS_ssl1);
474*d9f75844SAndroid Build Coastguard Worker }
475*d9f75844SAndroid Build Coastguard Worker
ScreenshareSelectedTL()476*d9f75844SAndroid Build Coastguard Worker int ScreenshareSelectedTL() {
477*d9f75844SAndroid Build Coastguard Worker return absl::GetFlag(FLAGS_sselected_tl);
478*d9f75844SAndroid Build Coastguard Worker }
479*d9f75844SAndroid Build Coastguard Worker
ScreenshareSelectedStream()480*d9f75844SAndroid Build Coastguard Worker int ScreenshareSelectedStream() {
481*d9f75844SAndroid Build Coastguard Worker return absl::GetFlag(FLAGS_sselected_stream);
482*d9f75844SAndroid Build Coastguard Worker }
483*d9f75844SAndroid Build Coastguard Worker
ScreenshareSelectedSL()484*d9f75844SAndroid Build Coastguard Worker int ScreenshareSelectedSL() {
485*d9f75844SAndroid Build Coastguard Worker return absl::GetFlag(FLAGS_sselected_sl);
486*d9f75844SAndroid Build Coastguard Worker }
487*d9f75844SAndroid Build Coastguard Worker
GenerateSlides()488*d9f75844SAndroid Build Coastguard Worker bool GenerateSlides() {
489*d9f75844SAndroid Build Coastguard Worker return absl::GetFlag(FLAGS_generate_slides);
490*d9f75844SAndroid Build Coastguard Worker }
491*d9f75844SAndroid Build Coastguard Worker
SlideChangeInterval()492*d9f75844SAndroid Build Coastguard Worker int SlideChangeInterval() {
493*d9f75844SAndroid Build Coastguard Worker return absl::GetFlag(FLAGS_slide_change_interval);
494*d9f75844SAndroid Build Coastguard Worker }
495*d9f75844SAndroid Build Coastguard Worker
ScrollDuration()496*d9f75844SAndroid Build Coastguard Worker int ScrollDuration() {
497*d9f75844SAndroid Build Coastguard Worker return absl::GetFlag(FLAGS_scroll_duration);
498*d9f75844SAndroid Build Coastguard Worker }
499*d9f75844SAndroid Build Coastguard Worker
Slides()500*d9f75844SAndroid Build Coastguard Worker std::vector<std::string> Slides() {
501*d9f75844SAndroid Build Coastguard Worker std::vector<std::string> slides;
502*d9f75844SAndroid Build Coastguard Worker std::string slides_list = absl::GetFlag(FLAGS_slides);
503*d9f75844SAndroid Build Coastguard Worker rtc::tokenize(slides_list, ',', &slides);
504*d9f75844SAndroid Build Coastguard Worker return slides;
505*d9f75844SAndroid Build Coastguard Worker }
506*d9f75844SAndroid Build Coastguard Worker
StartBitrateKbps()507*d9f75844SAndroid Build Coastguard Worker int StartBitrateKbps() {
508*d9f75844SAndroid Build Coastguard Worker return absl::GetFlag(FLAGS_start_bitrate);
509*d9f75844SAndroid Build Coastguard Worker }
510*d9f75844SAndroid Build Coastguard Worker
Codec()511*d9f75844SAndroid Build Coastguard Worker std::string Codec() {
512*d9f75844SAndroid Build Coastguard Worker return absl::GetFlag(FLAGS_codec);
513*d9f75844SAndroid Build Coastguard Worker }
514*d9f75844SAndroid Build Coastguard Worker
AnalyzeVideo()515*d9f75844SAndroid Build Coastguard Worker bool AnalyzeVideo() {
516*d9f75844SAndroid Build Coastguard Worker return absl::GetFlag(FLAGS_analyze_video);
517*d9f75844SAndroid Build Coastguard Worker }
518*d9f75844SAndroid Build Coastguard Worker
AnalyzeScreenshare()519*d9f75844SAndroid Build Coastguard Worker bool AnalyzeScreenshare() {
520*d9f75844SAndroid Build Coastguard Worker return absl::GetFlag(FLAGS_analyze_screenshare);
521*d9f75844SAndroid Build Coastguard Worker }
522*d9f75844SAndroid Build Coastguard Worker
DurationSecs()523*d9f75844SAndroid Build Coastguard Worker int DurationSecs() {
524*d9f75844SAndroid Build Coastguard Worker return absl::GetFlag(FLAGS_duration);
525*d9f75844SAndroid Build Coastguard Worker }
526*d9f75844SAndroid Build Coastguard Worker
OutputFilename()527*d9f75844SAndroid Build Coastguard Worker std::string OutputFilename() {
528*d9f75844SAndroid Build Coastguard Worker return absl::GetFlag(FLAGS_output_filename);
529*d9f75844SAndroid Build Coastguard Worker }
530*d9f75844SAndroid Build Coastguard Worker
GraphTitle()531*d9f75844SAndroid Build Coastguard Worker std::string GraphTitle() {
532*d9f75844SAndroid Build Coastguard Worker return absl::GetFlag(FLAGS_graph_title);
533*d9f75844SAndroid Build Coastguard Worker }
534*d9f75844SAndroid Build Coastguard Worker
LossPercent()535*d9f75844SAndroid Build Coastguard Worker int LossPercent() {
536*d9f75844SAndroid Build Coastguard Worker return absl::GetFlag(FLAGS_loss_percent);
537*d9f75844SAndroid Build Coastguard Worker }
538*d9f75844SAndroid Build Coastguard Worker
AvgBurstLossLength()539*d9f75844SAndroid Build Coastguard Worker int AvgBurstLossLength() {
540*d9f75844SAndroid Build Coastguard Worker return absl::GetFlag(FLAGS_avg_burst_loss_length);
541*d9f75844SAndroid Build Coastguard Worker }
542*d9f75844SAndroid Build Coastguard Worker
LinkCapacityKbps()543*d9f75844SAndroid Build Coastguard Worker int LinkCapacityKbps() {
544*d9f75844SAndroid Build Coastguard Worker return absl::GetFlag(FLAGS_link_capacity);
545*d9f75844SAndroid Build Coastguard Worker }
546*d9f75844SAndroid Build Coastguard Worker
QueueSize()547*d9f75844SAndroid Build Coastguard Worker int QueueSize() {
548*d9f75844SAndroid Build Coastguard Worker return absl::GetFlag(FLAGS_queue_size);
549*d9f75844SAndroid Build Coastguard Worker }
550*d9f75844SAndroid Build Coastguard Worker
AvgPropagationDelayMs()551*d9f75844SAndroid Build Coastguard Worker int AvgPropagationDelayMs() {
552*d9f75844SAndroid Build Coastguard Worker return absl::GetFlag(FLAGS_avg_propagation_delay_ms);
553*d9f75844SAndroid Build Coastguard Worker }
554*d9f75844SAndroid Build Coastguard Worker
RtcEventLogName()555*d9f75844SAndroid Build Coastguard Worker std::string RtcEventLogName() {
556*d9f75844SAndroid Build Coastguard Worker return absl::GetFlag(FLAGS_rtc_event_log_name);
557*d9f75844SAndroid Build Coastguard Worker }
558*d9f75844SAndroid Build Coastguard Worker
RtpDumpName()559*d9f75844SAndroid Build Coastguard Worker std::string RtpDumpName() {
560*d9f75844SAndroid Build Coastguard Worker return absl::GetFlag(FLAGS_rtp_dump_name);
561*d9f75844SAndroid Build Coastguard Worker }
562*d9f75844SAndroid Build Coastguard Worker
StdPropagationDelayMs()563*d9f75844SAndroid Build Coastguard Worker int StdPropagationDelayMs() {
564*d9f75844SAndroid Build Coastguard Worker return absl::GetFlag(FLAGS_std_propagation_delay_ms);
565*d9f75844SAndroid Build Coastguard Worker }
566*d9f75844SAndroid Build Coastguard Worker
EncodedFramePath()567*d9f75844SAndroid Build Coastguard Worker std::string EncodedFramePath() {
568*d9f75844SAndroid Build Coastguard Worker return absl::GetFlag(FLAGS_encoded_frame_path);
569*d9f75844SAndroid Build Coastguard Worker }
570*d9f75844SAndroid Build Coastguard Worker
VideoClip()571*d9f75844SAndroid Build Coastguard Worker std::string VideoClip() {
572*d9f75844SAndroid Build Coastguard Worker return absl::GetFlag(FLAGS_vclip);
573*d9f75844SAndroid Build Coastguard Worker }
574*d9f75844SAndroid Build Coastguard Worker
575*d9f75844SAndroid Build Coastguard Worker } // namespace
576*d9f75844SAndroid Build Coastguard Worker
Loopback()577*d9f75844SAndroid Build Coastguard Worker void Loopback() {
578*d9f75844SAndroid Build Coastguard Worker int camera_idx, screenshare_idx;
579*d9f75844SAndroid Build Coastguard Worker RTC_CHECK(!(AnalyzeScreenshare() && AnalyzeVideo()))
580*d9f75844SAndroid Build Coastguard Worker << "Select only one of video or screenshare.";
581*d9f75844SAndroid Build Coastguard Worker RTC_CHECK(!DurationSecs() || AnalyzeScreenshare() || AnalyzeVideo())
582*d9f75844SAndroid Build Coastguard Worker << "If duration is set, exactly one of analyze_* flags should be set.";
583*d9f75844SAndroid Build Coastguard Worker // Default: camera feed first, if nothing selected.
584*d9f75844SAndroid Build Coastguard Worker if (AnalyzeVideo() || !AnalyzeScreenshare()) {
585*d9f75844SAndroid Build Coastguard Worker camera_idx = 0;
586*d9f75844SAndroid Build Coastguard Worker screenshare_idx = 1;
587*d9f75844SAndroid Build Coastguard Worker } else {
588*d9f75844SAndroid Build Coastguard Worker camera_idx = 1;
589*d9f75844SAndroid Build Coastguard Worker screenshare_idx = 0;
590*d9f75844SAndroid Build Coastguard Worker }
591*d9f75844SAndroid Build Coastguard Worker
592*d9f75844SAndroid Build Coastguard Worker BuiltInNetworkBehaviorConfig pipe_config;
593*d9f75844SAndroid Build Coastguard Worker pipe_config.loss_percent = LossPercent();
594*d9f75844SAndroid Build Coastguard Worker pipe_config.avg_burst_loss_length = AvgBurstLossLength();
595*d9f75844SAndroid Build Coastguard Worker pipe_config.link_capacity_kbps = LinkCapacityKbps();
596*d9f75844SAndroid Build Coastguard Worker pipe_config.queue_length_packets = QueueSize();
597*d9f75844SAndroid Build Coastguard Worker pipe_config.queue_delay_ms = AvgPropagationDelayMs();
598*d9f75844SAndroid Build Coastguard Worker pipe_config.delay_standard_deviation_ms = StdPropagationDelayMs();
599*d9f75844SAndroid Build Coastguard Worker pipe_config.allow_reordering = absl::GetFlag(FLAGS_allow_reordering);
600*d9f75844SAndroid Build Coastguard Worker
601*d9f75844SAndroid Build Coastguard Worker BitrateConstraints call_bitrate_config;
602*d9f75844SAndroid Build Coastguard Worker call_bitrate_config.min_bitrate_bps =
603*d9f75844SAndroid Build Coastguard Worker (ScreenshareMinBitrateKbps() + VideoMinBitrateKbps()) * 1000;
604*d9f75844SAndroid Build Coastguard Worker call_bitrate_config.start_bitrate_bps = StartBitrateKbps() * 1000;
605*d9f75844SAndroid Build Coastguard Worker call_bitrate_config.max_bitrate_bps =
606*d9f75844SAndroid Build Coastguard Worker (ScreenshareMaxBitrateKbps() + VideoMaxBitrateKbps()) * 1000;
607*d9f75844SAndroid Build Coastguard Worker
608*d9f75844SAndroid Build Coastguard Worker VideoQualityTest::Params params;
609*d9f75844SAndroid Build Coastguard Worker params.call.send_side_bwe = absl::GetFlag(FLAGS_send_side_bwe);
610*d9f75844SAndroid Build Coastguard Worker params.call.generic_descriptor = absl::GetFlag(FLAGS_generic_descriptor);
611*d9f75844SAndroid Build Coastguard Worker params.call.call_bitrate_config = call_bitrate_config;
612*d9f75844SAndroid Build Coastguard Worker params.call.dual_video = true;
613*d9f75844SAndroid Build Coastguard Worker params.video[screenshare_idx].enabled = true;
614*d9f75844SAndroid Build Coastguard Worker params.video[screenshare_idx].width = ScreenshareWidth();
615*d9f75844SAndroid Build Coastguard Worker params.video[screenshare_idx].height = ScreenshareHeight();
616*d9f75844SAndroid Build Coastguard Worker params.video[screenshare_idx].fps = ScreenshareFps();
617*d9f75844SAndroid Build Coastguard Worker params.video[screenshare_idx].min_bitrate_bps =
618*d9f75844SAndroid Build Coastguard Worker ScreenshareMinBitrateKbps() * 1000;
619*d9f75844SAndroid Build Coastguard Worker params.video[screenshare_idx].target_bitrate_bps =
620*d9f75844SAndroid Build Coastguard Worker ScreenshareTargetBitrateKbps() * 1000;
621*d9f75844SAndroid Build Coastguard Worker params.video[screenshare_idx].max_bitrate_bps =
622*d9f75844SAndroid Build Coastguard Worker ScreenshareMaxBitrateKbps() * 1000;
623*d9f75844SAndroid Build Coastguard Worker params.video[screenshare_idx].codec = Codec();
624*d9f75844SAndroid Build Coastguard Worker params.video[screenshare_idx].num_temporal_layers =
625*d9f75844SAndroid Build Coastguard Worker ScreenshareNumTemporalLayers();
626*d9f75844SAndroid Build Coastguard Worker params.video[screenshare_idx].selected_tl = ScreenshareSelectedTL();
627*d9f75844SAndroid Build Coastguard Worker params.video[screenshare_idx].min_transmit_bps =
628*d9f75844SAndroid Build Coastguard Worker ScreenshareMinTransmitBitrateKbps() * 1000;
629*d9f75844SAndroid Build Coastguard Worker params.video[camera_idx].enabled = absl::GetFlag(FLAGS_video);
630*d9f75844SAndroid Build Coastguard Worker params.video[camera_idx].width = VideoWidth();
631*d9f75844SAndroid Build Coastguard Worker params.video[camera_idx].height = VideoHeight();
632*d9f75844SAndroid Build Coastguard Worker params.video[camera_idx].fps = VideoFps();
633*d9f75844SAndroid Build Coastguard Worker params.video[camera_idx].min_bitrate_bps = VideoMinBitrateKbps() * 1000;
634*d9f75844SAndroid Build Coastguard Worker params.video[camera_idx].target_bitrate_bps = VideoTargetBitrateKbps() * 1000;
635*d9f75844SAndroid Build Coastguard Worker params.video[camera_idx].max_bitrate_bps = VideoMaxBitrateKbps() * 1000;
636*d9f75844SAndroid Build Coastguard Worker params.video[camera_idx].suspend_below_min_bitrate =
637*d9f75844SAndroid Build Coastguard Worker absl::GetFlag(FLAGS_suspend_below_min_bitrate);
638*d9f75844SAndroid Build Coastguard Worker params.video[camera_idx].codec = Codec();
639*d9f75844SAndroid Build Coastguard Worker params.video[camera_idx].num_temporal_layers = VideoNumTemporalLayers();
640*d9f75844SAndroid Build Coastguard Worker params.video[camera_idx].selected_tl = VideoSelectedTL();
641*d9f75844SAndroid Build Coastguard Worker params.video[camera_idx].ulpfec = absl::GetFlag(FLAGS_use_ulpfec);
642*d9f75844SAndroid Build Coastguard Worker params.video[camera_idx].flexfec = absl::GetFlag(FLAGS_use_flexfec);
643*d9f75844SAndroid Build Coastguard Worker params.video[camera_idx].clip_path = VideoClip();
644*d9f75844SAndroid Build Coastguard Worker params.video[camera_idx].capture_device_index = GetCaptureDevice();
645*d9f75844SAndroid Build Coastguard Worker params.audio.enabled = absl::GetFlag(FLAGS_audio);
646*d9f75844SAndroid Build Coastguard Worker params.audio.sync_video = absl::GetFlag(FLAGS_audio_video_sync);
647*d9f75844SAndroid Build Coastguard Worker params.audio.dtx = absl::GetFlag(FLAGS_audio_dtx);
648*d9f75844SAndroid Build Coastguard Worker params.logging.rtc_event_log_name = RtcEventLogName();
649*d9f75844SAndroid Build Coastguard Worker params.logging.rtp_dump_name = RtpDumpName();
650*d9f75844SAndroid Build Coastguard Worker params.logging.encoded_frame_base_path = EncodedFramePath();
651*d9f75844SAndroid Build Coastguard Worker params.analyzer.test_label = "dual_streams";
652*d9f75844SAndroid Build Coastguard Worker params.analyzer.test_durations_secs = DurationSecs();
653*d9f75844SAndroid Build Coastguard Worker params.analyzer.graph_data_output_filename = OutputFilename();
654*d9f75844SAndroid Build Coastguard Worker params.analyzer.graph_title = GraphTitle();
655*d9f75844SAndroid Build Coastguard Worker params.config = pipe_config;
656*d9f75844SAndroid Build Coastguard Worker
657*d9f75844SAndroid Build Coastguard Worker params.screenshare[camera_idx].enabled = false;
658*d9f75844SAndroid Build Coastguard Worker params.screenshare[screenshare_idx].enabled = true;
659*d9f75844SAndroid Build Coastguard Worker params.screenshare[screenshare_idx].generate_slides = GenerateSlides();
660*d9f75844SAndroid Build Coastguard Worker params.screenshare[screenshare_idx].slide_change_interval =
661*d9f75844SAndroid Build Coastguard Worker SlideChangeInterval();
662*d9f75844SAndroid Build Coastguard Worker params.screenshare[screenshare_idx].scroll_duration = ScrollDuration();
663*d9f75844SAndroid Build Coastguard Worker params.screenshare[screenshare_idx].slides = Slides();
664*d9f75844SAndroid Build Coastguard Worker
665*d9f75844SAndroid Build Coastguard Worker if (VideoNumStreams() > 1 && VideoStream0().empty() &&
666*d9f75844SAndroid Build Coastguard Worker VideoStream1().empty()) {
667*d9f75844SAndroid Build Coastguard Worker params.ss[camera_idx].infer_streams = true;
668*d9f75844SAndroid Build Coastguard Worker }
669*d9f75844SAndroid Build Coastguard Worker
670*d9f75844SAndroid Build Coastguard Worker if (ScreenshareNumStreams() > 1 && ScreenshareStream0().empty() &&
671*d9f75844SAndroid Build Coastguard Worker ScreenshareStream1().empty()) {
672*d9f75844SAndroid Build Coastguard Worker params.ss[screenshare_idx].infer_streams = true;
673*d9f75844SAndroid Build Coastguard Worker }
674*d9f75844SAndroid Build Coastguard Worker
675*d9f75844SAndroid Build Coastguard Worker std::vector<std::string> stream_descriptors;
676*d9f75844SAndroid Build Coastguard Worker stream_descriptors.push_back(ScreenshareStream0());
677*d9f75844SAndroid Build Coastguard Worker stream_descriptors.push_back(ScreenshareStream1());
678*d9f75844SAndroid Build Coastguard Worker std::vector<std::string> SL_descriptors;
679*d9f75844SAndroid Build Coastguard Worker SL_descriptors.push_back(ScreenshareSL0());
680*d9f75844SAndroid Build Coastguard Worker SL_descriptors.push_back(ScreenshareSL1());
681*d9f75844SAndroid Build Coastguard Worker VideoQualityTest::FillScalabilitySettings(
682*d9f75844SAndroid Build Coastguard Worker ¶ms, screenshare_idx, stream_descriptors, ScreenshareNumStreams(),
683*d9f75844SAndroid Build Coastguard Worker ScreenshareSelectedStream(), ScreenshareNumSpatialLayers(),
684*d9f75844SAndroid Build Coastguard Worker ScreenshareSelectedSL(), ScreenshareInterLayerPred(), SL_descriptors);
685*d9f75844SAndroid Build Coastguard Worker
686*d9f75844SAndroid Build Coastguard Worker stream_descriptors.clear();
687*d9f75844SAndroid Build Coastguard Worker stream_descriptors.push_back(VideoStream0());
688*d9f75844SAndroid Build Coastguard Worker stream_descriptors.push_back(VideoStream1());
689*d9f75844SAndroid Build Coastguard Worker SL_descriptors.clear();
690*d9f75844SAndroid Build Coastguard Worker SL_descriptors.push_back(VideoSL0());
691*d9f75844SAndroid Build Coastguard Worker SL_descriptors.push_back(VideoSL1());
692*d9f75844SAndroid Build Coastguard Worker VideoQualityTest::FillScalabilitySettings(
693*d9f75844SAndroid Build Coastguard Worker ¶ms, camera_idx, stream_descriptors, VideoNumStreams(),
694*d9f75844SAndroid Build Coastguard Worker VideoSelectedStream(), VideoNumSpatialLayers(), VideoSelectedSL(),
695*d9f75844SAndroid Build Coastguard Worker VideoInterLayerPred(), SL_descriptors);
696*d9f75844SAndroid Build Coastguard Worker
697*d9f75844SAndroid Build Coastguard Worker auto fixture = std::make_unique<VideoQualityTest>(nullptr);
698*d9f75844SAndroid Build Coastguard Worker if (DurationSecs()) {
699*d9f75844SAndroid Build Coastguard Worker fixture->RunWithAnalyzer(params);
700*d9f75844SAndroid Build Coastguard Worker } else {
701*d9f75844SAndroid Build Coastguard Worker fixture->RunWithRenderers(params);
702*d9f75844SAndroid Build Coastguard Worker }
703*d9f75844SAndroid Build Coastguard Worker }
704*d9f75844SAndroid Build Coastguard Worker } // namespace webrtc
705*d9f75844SAndroid Build Coastguard Worker
main(int argc,char * argv[])706*d9f75844SAndroid Build Coastguard Worker int main(int argc, char* argv[]) {
707*d9f75844SAndroid Build Coastguard Worker ::testing::InitGoogleTest(&argc, argv);
708*d9f75844SAndroid Build Coastguard Worker absl::ParseCommandLine(argc, argv);
709*d9f75844SAndroid Build Coastguard Worker
710*d9f75844SAndroid Build Coastguard Worker rtc::LogMessage::SetLogToStderr(absl::GetFlag(FLAGS_logs));
711*d9f75844SAndroid Build Coastguard Worker
712*d9f75844SAndroid Build Coastguard Worker // InitFieldTrialsFromString stores the char*, so the char array must outlive
713*d9f75844SAndroid Build Coastguard Worker // the application.
714*d9f75844SAndroid Build Coastguard Worker const std::string field_trials = absl::GetFlag(FLAGS_force_fieldtrials);
715*d9f75844SAndroid Build Coastguard Worker webrtc::field_trial::InitFieldTrialsFromString(field_trials.c_str());
716*d9f75844SAndroid Build Coastguard Worker
717*d9f75844SAndroid Build Coastguard Worker webrtc::test::RunTest(webrtc::Loopback);
718*d9f75844SAndroid Build Coastguard Worker return 0;
719*d9f75844SAndroid Build Coastguard Worker }
720