Index: webrtc/video/screenshare_loopback.cc |
diff --git a/webrtc/video/screenshare_loopback.cc b/webrtc/video/screenshare_loopback.cc |
index 9897783eb9ddf8ff59d644722b624943b403978c..6479aa4ebba9c09b51efa3d78163c50a4f981af4 100644 |
--- a/webrtc/video/screenshare_loopback.cc |
+++ b/webrtc/video/screenshare_loopback.cc |
@@ -20,6 +20,7 @@ |
namespace webrtc { |
namespace flags { |
+// Flags common with video loopback, with different default values. |
DEFINE_int32(width, 1850, "Video width (crops source)."); |
size_t Width() { |
return static_cast<size_t>(FLAGS_width); |
@@ -35,21 +36,6 @@ int Fps() { |
return static_cast<int>(FLAGS_fps); |
} |
-DEFINE_int32(slide_change_interval, |
- 10, |
- "Interval (in seconds) between simulated slide changes."); |
-int SlideChangeInterval() { |
- return static_cast<int>(FLAGS_slide_change_interval); |
-} |
- |
-DEFINE_int32( |
- scroll_duration, |
- 0, |
- "Duration (in seconds) during which a slide will be scrolled into place."); |
-int ScrollDuration() { |
- return static_cast<int>(FLAGS_scroll_duration); |
-} |
- |
DEFINE_int32(min_bitrate, 50, "Call and stream min bitrate in kbps."); |
int MinBitrateKbps() { |
return static_cast<int>(FLAGS_min_bitrate); |
@@ -71,26 +57,41 @@ int MaxBitrateKbps() { |
} |
DEFINE_int32(num_temporal_layers, 2, "Number of temporal layers to use."); |
-size_t NumTemporalLayers() { |
- return static_cast<size_t>(FLAGS_num_temporal_layers); |
+int NumTemporalLayers() { |
+ return static_cast<int>(FLAGS_num_temporal_layers); |
+} |
+ |
+// Flags common with video loopback, with equal default values. |
+DEFINE_string(codec, "VP8", "Video codec to use."); |
+std::string Codec() { |
+ return static_cast<std::string>(FLAGS_codec); |
+} |
+ |
+DEFINE_int32(selected_tl, |
+ -1, |
+ "Temporal layer to show or analyze. -1 to disable filtering."); |
+int SelectedTL() { |
+ return static_cast<int>(FLAGS_selected_tl); |
} |
DEFINE_int32( |
- tl_discard_threshold, |
+ duration, |
0, |
- "Discard TLs with id greater or equal the threshold. 0 to disable."); |
-size_t TLDiscardThreshold() { |
- return static_cast<size_t>(FLAGS_tl_discard_threshold); |
+ "Duration of the test in seconds. If 0, rendered will be shown instead."); |
+int DurationSecs() { |
+ return static_cast<int>(FLAGS_duration); |
} |
-DEFINE_int32(min_transmit_bitrate, 400, "Min transmit bitrate incl. padding."); |
-int MinTransmitBitrateKbps() { |
- return FLAGS_min_transmit_bitrate; |
+DEFINE_string(output_filename, "", "Target graph data filename."); |
+std::string OutputFilename() { |
+ return static_cast<std::string>(FLAGS_output_filename); |
} |
-DEFINE_string(codec, "VP8", "Video codec to use."); |
-std::string Codec() { |
- return static_cast<std::string>(FLAGS_codec); |
+DEFINE_string(graph_title, |
+ "", |
+ "If empty, title will be generated automatically."); |
+std::string GraphTitle() { |
+ return static_cast<std::string>(FLAGS_graph_title); |
} |
DEFINE_int32(loss_percent, 0, "Percentage of packets randomly lost."); |
@@ -124,21 +125,53 @@ int StdPropagationDelayMs() { |
return static_cast<int>(FLAGS_std_propagation_delay_ms); |
} |
-DEFINE_bool(logs, false, "print logs to stderr"); |
+DEFINE_int32(selected_stream, 0, "ID of the stream to show or analyze."); |
+int SelectedStream() { |
+ return static_cast<int>(FLAGS_selected_stream); |
+} |
-DEFINE_string( |
- output_filename, |
- "", |
- "Name of a target graph data file. If set, no preview will be shown."); |
-std::string OutputFilename() { |
- return static_cast<std::string>(FLAGS_output_filename); |
+DEFINE_int32(num_spatial_layers, 1, "Number of spatial layers to use."); |
+int NumSpatialLayers() { |
+ return static_cast<int>(FLAGS_num_spatial_layers); |
} |
-DEFINE_int32(duration, 60, "Duration of the test in seconds."); |
-int DurationSecs() { |
- return static_cast<int>(FLAGS_duration); |
+DEFINE_int32(selected_sl, |
+ -1, |
+ "Spatial layer to show or analyze. -1 to disable filtering."); |
+int SelectedSL() { |
+ return static_cast<int>(FLAGS_selected_sl); |
+} |
+ |
+DEFINE_string(stream0, |
+ "", |
+ "Comma separated values describing VideoStream for stream #0."); |
+std::string Stream0() { |
+ return static_cast<std::string>(FLAGS_stream0); |
} |
+DEFINE_string(stream1, |
+ "", |
+ "Comma separated values describing VideoStream for stream #1."); |
+std::string Stream1() { |
+ return static_cast<std::string>(FLAGS_stream1); |
+} |
+ |
+DEFINE_string(sl0, |
+ "", |
+ "Comma separated values describing SpatialLayer for layer #0."); |
+std::string SL0() { |
+ return static_cast<std::string>(FLAGS_sl0); |
+} |
+ |
+DEFINE_string(sl1, |
+ "", |
+ "Comma separated values describing SpatialLayer for layer #1."); |
+std::string SL1() { |
+ return static_cast<std::string>(FLAGS_sl1); |
+} |
+ |
+DEFINE_bool(logs, false, "print logs to stderr"); |
+ |
DEFINE_bool(send_side_bwe, true, "Use send-side bandwidth estimation"); |
DEFINE_string( |
@@ -148,6 +181,28 @@ DEFINE_string( |
"E.g. running with --force_fieldtrials=WebRTC-FooFeature/Enable/" |
" will assign the group Enable to field trial WebRTC-FooFeature. Multiple " |
"trials are separated by \"/\""); |
+ |
+// Screenshare-specific flags. |
+DEFINE_int32(min_transmit_bitrate, 400, "Min transmit bitrate incl. padding."); |
+int MinTransmitBitrateKbps() { |
+ return FLAGS_min_transmit_bitrate; |
+} |
+ |
+DEFINE_int32(slide_change_interval, |
+ 10, |
+ "Interval (in seconds) between simulated slide changes."); |
+int SlideChangeInterval() { |
+ return static_cast<int>(FLAGS_slide_change_interval); |
+} |
+ |
+DEFINE_int32( |
+ scroll_duration, |
+ 0, |
+ "Duration (in seconds) during which a slide will be scrolled into place."); |
+int ScrollDuration() { |
+ return static_cast<int>(FLAGS_scroll_duration); |
+} |
+ |
} // namespace flags |
void Loopback() { |
@@ -167,20 +222,32 @@ void Loopback() { |
{flags::Width(), flags::Height(), flags::Fps(), |
flags::MinBitrateKbps() * 1000, flags::TargetBitrateKbps() * 1000, |
flags::MaxBitrateKbps() * 1000, flags::Codec(), |
- flags::NumTemporalLayers(), flags::MinTransmitBitrateKbps() * 1000, |
- call_bitrate_config, flags::TLDiscardThreshold(), |
+ flags::NumTemporalLayers(), flags::SelectedTL(), |
+ flags::MinTransmitBitrateKbps() * 1000, call_bitrate_config, |
flags::FLAGS_send_side_bwe}, |
{}, // Video specific. |
{true, flags::SlideChangeInterval(), flags::ScrollDuration()}, |
- {"screenshare", 0.0, 0.0, flags::DurationSecs(), flags::OutputFilename()}, |
+ {"screenshare", 0.0, 0.0, flags::DurationSecs(), flags::OutputFilename(), |
+ flags::GraphTitle()}, |
pipe_config, |
flags::FLAGS_logs}; |
+ std::vector<std::string> stream_descriptors; |
+ stream_descriptors.push_back(flags::Stream0()); |
+ stream_descriptors.push_back(flags::Stream1()); |
+ std::vector<std::string> SL_descriptors; |
+ SL_descriptors.push_back(flags::SL0()); |
+ SL_descriptors.push_back(flags::SL1()); |
+ VideoQualityTest::FillScalabilitySettings( |
+ ¶ms, stream_descriptors, flags::SelectedStream(), |
+ flags::NumSpatialLayers(), flags::SelectedSL(), SL_descriptors); |
+ |
VideoQualityTest test; |
- if (flags::OutputFilename().empty()) |
- test.RunWithVideoRenderer(params); |
- else |
+ if (flags::DurationSecs()) { |
test.RunWithAnalyzer(params); |
+ } else { |
+ test.RunWithVideoRenderer(params); |
+ } |
} |
} // namespace webrtc |