diff options
Diffstat (limited to 'webrtc/video/screenshare_loopback.cc')
-rw-r--r-- | webrtc/video/screenshare_loopback.cc | 153 |
1 files changed, 110 insertions, 43 deletions
diff --git a/webrtc/video/screenshare_loopback.cc b/webrtc/video/screenshare_loopback.cc index 9897783eb9..6479aa4ebb 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 |