1131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org/* 2131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. 3131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org * 4131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org * Use of this source code is governed by a BSD-style license 5131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org * that can be found in the LICENSE file in the root of the source 6131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org * tree. An additional intellectual property rights grant can be found 7131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org * in the file PATENTS. All contributing project authors may 8131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org * be found in the AUTHORS file in the root of the source tree. 9131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org */ 10131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org 11131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org#include <stdio.h> 12131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org 13131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org#include "gflags/gflags.h" 14131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org#include "testing/gtest/include/gtest/gtest.h" 15131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org 16131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org#include "webrtc/test/field_trial.h" 17131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org#include "webrtc/test/run_test.h" 185d6a06c1d29a2061bcf4b321ffceab477a404d51ivica#include "webrtc/video/video_quality_test.h" 19131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org 20131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.orgnamespace webrtc { 21131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.orgnamespace flags { 22131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org 23ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang// Flags common with video loopback, with different default values. 24d63589579a66df028efe7ec63cf465082f3857fasprangDEFINE_int32(width, 1850, "Video width (crops source)."); 25131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.orgsize_t Width() { 26d63589579a66df028efe7ec63cf465082f3857fasprang return static_cast<size_t>(FLAGS_width); 27131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org} 28d63589579a66df028efe7ec63cf465082f3857fasprang 29d63589579a66df028efe7ec63cf465082f3857fasprangDEFINE_int32(height, 1110, "Video height (crops source)."); 30131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.orgsize_t Height() { 31d63589579a66df028efe7ec63cf465082f3857fasprang return static_cast<size_t>(FLAGS_height); 32131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org} 33131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org 34131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.orgDEFINE_int32(fps, 5, "Frames per second."); 35131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.orgint Fps() { 36131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org return static_cast<int>(FLAGS_fps); 37131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org} 38131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org 395d6a06c1d29a2061bcf4b321ffceab477a404d51ivicaDEFINE_int32(min_bitrate, 50, "Call and stream min bitrate in kbps."); 405d6a06c1d29a2061bcf4b321ffceab477a404d51ivicaint MinBitrateKbps() { 415d6a06c1d29a2061bcf4b321ffceab477a404d51ivica return static_cast<int>(FLAGS_min_bitrate); 42131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org} 43131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org 445d6a06c1d29a2061bcf4b321ffceab477a404d51ivicaDEFINE_int32(start_bitrate, 200, "Call start bitrate in kbps."); 455d6a06c1d29a2061bcf4b321ffceab477a404d51ivicaint StartBitrateKbps() { 465d6a06c1d29a2061bcf4b321ffceab477a404d51ivica return static_cast<int>(FLAGS_start_bitrate); 47131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org} 48131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org 495d6a06c1d29a2061bcf4b321ffceab477a404d51ivicaDEFINE_int32(target_bitrate, 2000, "Stream target bitrate in kbps."); 505d6a06c1d29a2061bcf4b321ffceab477a404d51ivicaint TargetBitrateKbps() { 515d6a06c1d29a2061bcf4b321ffceab477a404d51ivica return static_cast<int>(FLAGS_target_bitrate); 52131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org} 53131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org 545d6a06c1d29a2061bcf4b321ffceab477a404d51ivicaDEFINE_int32(max_bitrate, 2000, "Call and stream max bitrate in kbps."); 555d6a06c1d29a2061bcf4b321ffceab477a404d51ivicaint MaxBitrateKbps() { 565d6a06c1d29a2061bcf4b321ffceab477a404d51ivica return static_cast<int>(FLAGS_max_bitrate); 57ef7228cfa00cd6eb72754e923b1ac7348c1dfb22sprang} 58ef7228cfa00cd6eb72754e923b1ac7348c1dfb22sprang 595d6a06c1d29a2061bcf4b321ffceab477a404d51ivicaDEFINE_int32(num_temporal_layers, 2, "Number of temporal layers to use."); 60ce4aef16eec96862199e89b6d3ffe059558ac2c0sprangint NumTemporalLayers() { 61ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang return static_cast<int>(FLAGS_num_temporal_layers); 62ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang} 63ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang 64ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang// Flags common with video loopback, with equal default values. 65ce4aef16eec96862199e89b6d3ffe059558ac2c0sprangDEFINE_string(codec, "VP8", "Video codec to use."); 66ce4aef16eec96862199e89b6d3ffe059558ac2c0sprangstd::string Codec() { 67ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang return static_cast<std::string>(FLAGS_codec); 68ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang} 69ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang 70ce4aef16eec96862199e89b6d3ffe059558ac2c0sprangDEFINE_int32(selected_tl, 71ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang -1, 72ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang "Temporal layer to show or analyze. -1 to disable filtering."); 73ce4aef16eec96862199e89b6d3ffe059558ac2c0sprangint SelectedTL() { 74ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang return static_cast<int>(FLAGS_selected_tl); 757f6a6fc0b23795cd4f0aacbf707618c1f3d0a878ivica} 767f6a6fc0b23795cd4f0aacbf707618c1f3d0a878ivica 777f6a6fc0b23795cd4f0aacbf707618c1f3d0a878ivicaDEFINE_int32( 78ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang duration, 797f6a6fc0b23795cd4f0aacbf707618c1f3d0a878ivica 0, 80ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang "Duration of the test in seconds. If 0, rendered will be shown instead."); 81ce4aef16eec96862199e89b6d3ffe059558ac2c0sprangint DurationSecs() { 82ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang return static_cast<int>(FLAGS_duration); 837f6a6fc0b23795cd4f0aacbf707618c1f3d0a878ivica} 847f6a6fc0b23795cd4f0aacbf707618c1f3d0a878ivica 85ce4aef16eec96862199e89b6d3ffe059558ac2c0sprangDEFINE_string(output_filename, "", "Target graph data filename."); 86ce4aef16eec96862199e89b6d3ffe059558ac2c0sprangstd::string OutputFilename() { 87ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang return static_cast<std::string>(FLAGS_output_filename); 88131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org} 89131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org 90ce4aef16eec96862199e89b6d3ffe059558ac2c0sprangDEFINE_string(graph_title, 91ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang "", 92ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang "If empty, title will be generated automatically."); 93ce4aef16eec96862199e89b6d3ffe059558ac2c0sprangstd::string GraphTitle() { 94ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang return static_cast<std::string>(FLAGS_graph_title); 95131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org} 96131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org 97131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.orgDEFINE_int32(loss_percent, 0, "Percentage of packets randomly lost."); 98131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.orgint LossPercent() { 99131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org return static_cast<int>(FLAGS_loss_percent); 100131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org} 101131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org 102131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.orgDEFINE_int32(link_capacity, 103131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org 0, 104131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org "Capacity (kbps) of the fake link. 0 means infinite."); 1055d6a06c1d29a2061bcf4b321ffceab477a404d51ivicaint LinkCapacityKbps() { 106131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org return static_cast<int>(FLAGS_link_capacity); 107131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org} 108131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org 109131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.orgDEFINE_int32(queue_size, 0, "Size of the bottleneck link queue in packets."); 110131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.orgint QueueSize() { 111131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org return static_cast<int>(FLAGS_queue_size); 112131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org} 113131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org 114131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.orgDEFINE_int32(avg_propagation_delay_ms, 115131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org 0, 116131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org "Average link propagation delay in ms."); 117131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.orgint AvgPropagationDelayMs() { 118131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org return static_cast<int>(FLAGS_avg_propagation_delay_ms); 119131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org} 120131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org 121131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.orgDEFINE_int32(std_propagation_delay_ms, 122131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org 0, 123131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org "Link propagation delay standard deviation in ms."); 124131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.orgint StdPropagationDelayMs() { 125131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org return static_cast<int>(FLAGS_std_propagation_delay_ms); 126131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org} 127131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org 128ce4aef16eec96862199e89b6d3ffe059558ac2c0sprangDEFINE_int32(selected_stream, 0, "ID of the stream to show or analyze."); 129ce4aef16eec96862199e89b6d3ffe059558ac2c0sprangint SelectedStream() { 130ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang return static_cast<int>(FLAGS_selected_stream); 131ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang} 132131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org 133ce4aef16eec96862199e89b6d3ffe059558ac2c0sprangDEFINE_int32(num_spatial_layers, 1, "Number of spatial layers to use."); 134ce4aef16eec96862199e89b6d3ffe059558ac2c0sprangint NumSpatialLayers() { 135ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang return static_cast<int>(FLAGS_num_spatial_layers); 1365d6a06c1d29a2061bcf4b321ffceab477a404d51ivica} 1375d6a06c1d29a2061bcf4b321ffceab477a404d51ivica 138ce4aef16eec96862199e89b6d3ffe059558ac2c0sprangDEFINE_int32(selected_sl, 139ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang -1, 140ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang "Spatial layer to show or analyze. -1 to disable filtering."); 141ce4aef16eec96862199e89b6d3ffe059558ac2c0sprangint SelectedSL() { 142ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang return static_cast<int>(FLAGS_selected_sl); 143ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang} 144ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang 145ce4aef16eec96862199e89b6d3ffe059558ac2c0sprangDEFINE_string(stream0, 146ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang "", 147ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang "Comma separated values describing VideoStream for stream #0."); 148ce4aef16eec96862199e89b6d3ffe059558ac2c0sprangstd::string Stream0() { 149ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang return static_cast<std::string>(FLAGS_stream0); 1505d6a06c1d29a2061bcf4b321ffceab477a404d51ivica} 1515d6a06c1d29a2061bcf4b321ffceab477a404d51ivica 152ce4aef16eec96862199e89b6d3ffe059558ac2c0sprangDEFINE_string(stream1, 153ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang "", 154ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang "Comma separated values describing VideoStream for stream #1."); 155ce4aef16eec96862199e89b6d3ffe059558ac2c0sprangstd::string Stream1() { 156ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang return static_cast<std::string>(FLAGS_stream1); 157ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang} 158ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang 159ce4aef16eec96862199e89b6d3ffe059558ac2c0sprangDEFINE_string(sl0, 160ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang "", 161ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang "Comma separated values describing SpatialLayer for layer #0."); 162ce4aef16eec96862199e89b6d3ffe059558ac2c0sprangstd::string SL0() { 163ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang return static_cast<std::string>(FLAGS_sl0); 164ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang} 165ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang 166ce4aef16eec96862199e89b6d3ffe059558ac2c0sprangDEFINE_string(sl1, 167ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang "", 168ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang "Comma separated values describing SpatialLayer for layer #1."); 169ce4aef16eec96862199e89b6d3ffe059558ac2c0sprangstd::string SL1() { 170ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang return static_cast<std::string>(FLAGS_sl1); 171ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang} 172ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang 173ce4aef16eec96862199e89b6d3ffe059558ac2c0sprangDEFINE_bool(logs, false, "print logs to stderr"); 174ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang 1756b8d3551681f40b880507cecc88f478a12383cc7Erik SprÃ¥ngDEFINE_bool(send_side_bwe, true, "Use send-side bandwidth estimation"); 1766b8d3551681f40b880507cecc88f478a12383cc7Erik SprÃ¥ng 1775d6a06c1d29a2061bcf4b321ffceab477a404d51ivicaDEFINE_string( 178131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org force_fieldtrials, 179131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org "", 180131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org "Field trials control experimental feature code which can be forced. " 181131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org "E.g. running with --force_fieldtrials=WebRTC-FooFeature/Enable/" 182131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org " will assign the group Enable to field trial WebRTC-FooFeature. Multiple " 183131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org "trials are separated by \"/\""); 184ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang 185ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang// Screenshare-specific flags. 186ce4aef16eec96862199e89b6d3ffe059558ac2c0sprangDEFINE_int32(min_transmit_bitrate, 400, "Min transmit bitrate incl. padding."); 187ce4aef16eec96862199e89b6d3ffe059558ac2c0sprangint MinTransmitBitrateKbps() { 188ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang return FLAGS_min_transmit_bitrate; 189ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang} 190ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang 191ce4aef16eec96862199e89b6d3ffe059558ac2c0sprangDEFINE_int32(slide_change_interval, 192ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang 10, 193ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang "Interval (in seconds) between simulated slide changes."); 194ce4aef16eec96862199e89b6d3ffe059558ac2c0sprangint SlideChangeInterval() { 195ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang return static_cast<int>(FLAGS_slide_change_interval); 196ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang} 197ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang 198ce4aef16eec96862199e89b6d3ffe059558ac2c0sprangDEFINE_int32( 199ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang scroll_duration, 200ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang 0, 201ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang "Duration (in seconds) during which a slide will be scrolled into place."); 202ce4aef16eec96862199e89b6d3ffe059558ac2c0sprangint ScrollDuration() { 203ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang return static_cast<int>(FLAGS_scroll_duration); 204ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang} 205ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang 206131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org} // namespace flags 207131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org 208131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.orgvoid Loopback() { 2095d6a06c1d29a2061bcf4b321ffceab477a404d51ivica FakeNetworkPipe::Config pipe_config; 2105d6a06c1d29a2061bcf4b321ffceab477a404d51ivica pipe_config.loss_percent = flags::LossPercent(); 2115d6a06c1d29a2061bcf4b321ffceab477a404d51ivica pipe_config.link_capacity_kbps = flags::LinkCapacityKbps(); 2125d6a06c1d29a2061bcf4b321ffceab477a404d51ivica pipe_config.queue_length_packets = flags::QueueSize(); 2135d6a06c1d29a2061bcf4b321ffceab477a404d51ivica pipe_config.queue_delay_ms = flags::AvgPropagationDelayMs(); 2145d6a06c1d29a2061bcf4b321ffceab477a404d51ivica pipe_config.delay_standard_deviation_ms = flags::StdPropagationDelayMs(); 2155d6a06c1d29a2061bcf4b321ffceab477a404d51ivica 2165d6a06c1d29a2061bcf4b321ffceab477a404d51ivica Call::Config::BitrateConfig call_bitrate_config; 2175d6a06c1d29a2061bcf4b321ffceab477a404d51ivica call_bitrate_config.min_bitrate_bps = flags::MinBitrateKbps() * 1000; 2185d6a06c1d29a2061bcf4b321ffceab477a404d51ivica call_bitrate_config.start_bitrate_bps = flags::StartBitrateKbps() * 1000; 2195d6a06c1d29a2061bcf4b321ffceab477a404d51ivica call_bitrate_config.max_bitrate_bps = flags::MaxBitrateKbps() * 1000; 2205d6a06c1d29a2061bcf4b321ffceab477a404d51ivica 2215d6a06c1d29a2061bcf4b321ffceab477a404d51ivica VideoQualityTest::Params params{ 2226b8d3551681f40b880507cecc88f478a12383cc7Erik SprÃ¥ng {flags::Width(), flags::Height(), flags::Fps(), 2236b8d3551681f40b880507cecc88f478a12383cc7Erik SprÃ¥ng flags::MinBitrateKbps() * 1000, flags::TargetBitrateKbps() * 1000, 2246b8d3551681f40b880507cecc88f478a12383cc7Erik SprÃ¥ng flags::MaxBitrateKbps() * 1000, flags::Codec(), 225ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang flags::NumTemporalLayers(), flags::SelectedTL(), 226ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang flags::MinTransmitBitrateKbps() * 1000, call_bitrate_config, 2276b8d3551681f40b880507cecc88f478a12383cc7Erik SprÃ¥ng flags::FLAGS_send_side_bwe}, 2285d6a06c1d29a2061bcf4b321ffceab477a404d51ivica {}, // Video specific. 2295d6a06c1d29a2061bcf4b321ffceab477a404d51ivica {true, flags::SlideChangeInterval(), flags::ScrollDuration()}, 230ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang {"screenshare", 0.0, 0.0, flags::DurationSecs(), flags::OutputFilename(), 231ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang flags::GraphTitle()}, 2325d6a06c1d29a2061bcf4b321ffceab477a404d51ivica pipe_config, 2335d6a06c1d29a2061bcf4b321ffceab477a404d51ivica flags::FLAGS_logs}; 2345d6a06c1d29a2061bcf4b321ffceab477a404d51ivica 235ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang std::vector<std::string> stream_descriptors; 236ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang stream_descriptors.push_back(flags::Stream0()); 237ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang stream_descriptors.push_back(flags::Stream1()); 238ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang std::vector<std::string> SL_descriptors; 239ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang SL_descriptors.push_back(flags::SL0()); 240ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang SL_descriptors.push_back(flags::SL1()); 241ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang VideoQualityTest::FillScalabilitySettings( 242ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang ¶ms, stream_descriptors, flags::SelectedStream(), 243ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang flags::NumSpatialLayers(), flags::SelectedSL(), SL_descriptors); 244ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang 2455d6a06c1d29a2061bcf4b321ffceab477a404d51ivica VideoQualityTest test; 246ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang if (flags::DurationSecs()) { 2477a975f75e7fa7a9335411ef22b6687f78f7b297fsprang test.RunWithAnalyzer(params); 248ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang } else { 249ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang test.RunWithVideoRenderer(params); 250ce4aef16eec96862199e89b6d3ffe059558ac2c0sprang } 251131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org} 252131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org} // namespace webrtc 253131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org 254131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.orgint main(int argc, char* argv[]) { 255131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org ::testing::InitGoogleTest(&argc, argv); 256131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org google::ParseCommandLineFlags(&argc, &argv, true); 257131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org webrtc::test::InitFieldTrialsFromString( 258131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org webrtc::flags::FLAGS_force_fieldtrials); 259131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org webrtc::test::RunTest(webrtc::Loopback); 260131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org return 0; 261131bea89d6f3742e649be84c91f8fd6c43b62d28sprang@webrtc.org} 262