From 911b893e0cb1e47d54e52cc87d7a0299a9c7f7f9 Mon Sep 17 00:00:00 2001 From: Jed Reynolds Date: Wed, 29 Jan 2020 10:02:56 -0800 Subject: [PATCH] l3_video: listing sorted bps rates --- l3_video_em.pl | 94 ++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 80 insertions(+), 14 deletions(-) diff --git a/l3_video_em.pl b/l3_video_em.pl index c9f46815..55103b29 100755 --- a/l3_video_em.pl +++ b/l3_video_em.pl @@ -34,8 +34,8 @@ our $cx_name = ""; our $tx_side = "B"; our $min_tx = undef; our $max_tx = -1; -our $est_buf_size = -1; -our $log_cli = 0; +our $buf_size = -1; +our $log_cli = "unset"; # do not set to 0, it turns into logfile "./0" our $stream_res = undef; our @frame_rates = ( 10, 12, 15, 24, 25, 29.97, 30, 50, 59.94, 60); our $frame_rates_desc = join(", ", @::frame_rates); @@ -51,6 +51,26 @@ our @audio_rates = 128000; # 128k # https://blog.forret.com/2006/09/27/hd-720p-1080i-and-1080p/ # Framerate is highly subjective in digital formats, because there are # variable frame rates dictated by min- and max-frame rate. +our %stream_keys = ( + 'w' => 0, + 'width' => 0, + 'x' => 0, + 'h' => 1, + 'height' => 1, + 'y' => 1, + 'i' => 2, + 'interlaced' => 2, + 'audio' => 3, + 'audio_bps' => 3, + 'video' => 4, + 'video_bps' => 4, + 'stream' => 5, + 'stream_bps' => 5, + 'fps' => 6, + 'frames' => 6, + 'framerate' => 6, + ); + our %avail_stream_res = ( # nicname w, h, interlaced, audio, vid bps, tt bps framerate "sqvga-4:3" => [ 160, 120, 0, 16000, 32000, 48000, 30], @@ -71,7 +91,7 @@ our %avail_stream_res = ( "d1-1200k-4:3" => [ 640, 480, 0, 32000, 1168000, 1200000, 30], "d1-1200k-16:9" => [ 852, 480, 0, 32000, 1168000, 1200000, 30], "hd-1800k-16:9" => [ 1280, 720, 0, 64000, 1736000, 1800000, 59.94], - "hd-2400k-16:9" => [ 1280, 720, 0, 64000, 2272000, 2400000, 59.94], + "hd-2400k-16:9" => [ 1280, 720, 0, 64000, 2272000, 2336000, 59.94], "108p4:3" => [ 144, 108, 0, 16000, 32000, 48000, 30], @@ -121,22 +141,23 @@ our %avail_stream_res = ( "yt-hdr-2160p60" => [ 3840, 2160, 0, 512000, 75500000, 1800000, 60], - "raw720p30" => [ 1280, 720, 0, 64000, 1736000, 221184000, 30], - "raw720p60" => [ 1280, 720, 0, 64000, 1736000, 442368000, 60], + "raw720p30" => [ 1280, 720, 0, 64000, 221120000, 221184000, 30], + "raw720p60" => [ 1280, 720, 0, 64000, 442304000, 442368000, 60], # frame size 6.2MB # 1080i60 1920x1080 186MBps - "raw1080i" => [ 1920, 540, 1, 128000, 1736000, 1486512000, 59.94], - "raw1080i30" => [ 1920, 540, 1, 128000, 1736000, 1488000000, 30], - "raw1080i60" => [ 1920, 540, 1, 128000, 1736000, 1488000000, 60], + "raw1080i" => [ 1920, 540, 1, 128000, 1486384000, 1486512000, 59.94], + "raw1080i30" => [ 1920, 540, 1, 128000, 1487872000, 1488000000, 30], + "raw1080i60" => [ 1920, 540, 1, 128000, 1487872000, 1488000000, 60], # 1080p60 1920x1080 373MBps, 6.2Mbps frame size - "raw1080p" => [ 1920, 1080, 0, 128000, 1736000, 2976000000, 60], + "raw1080p" => [ 1920, 1080, 0, 128000, 2975872000, 2976000000, 60], ); our $avail_stream_desc = join(", ", keys(%avail_stream_res)); our $resolution = "720p"; +my $list_streams = 0; our $usage = "$0 # modulates a Layer 3 CX to emulate a video server --mgr {hostname | IP} @@ -147,12 +168,16 @@ our $usage = "$0 # modulates a Layer 3 CX to emulate a video server # default $tx_side --min_tx {speed in bps} --max_tx {speed in bps|SAME} - --est_buf_size {kilobytes} # fill a buffer at max_tx for this long - --frame_rate {$frame_rates_desc} + --buf_size {kilobytes} # fill a buffer at max_tx for this long + # default $frame_rate --stream_res {$avail_stream_desc} + --list_streams # show stream bps table and exit # default $resolution + --log_cli {0|1} "; +# --frame_rate {$frame_rates_desc} # not really applicable +# the stream resolution (kbps) is really a better burn rate my $show_help = 0; @@ -163,12 +188,17 @@ if (@ARGV < 2) { GetOptions ( 'help|h' => \$show_help, - 'cx_name|e=s' => \$::cx_name, - 'set_tx|side|s=s' => \$::tx_side, 'mgr|m=s' => \$::lfmgr_host, 'mgr_port|p=i' => \$::lfmgr_port, + 'log_cli=s{0,1}' => \$log_cli, 'tx_style|style=s' => \$::tx_style, - 'est_buf_size|buf=i' => \$::est_buf_size, + 'cx_name|e=s' => \$::cx_name, + 'set_tx|side|s=s' => \$::tx_side, + 'min_tx=i' => \$::min_tx, + 'max_tx=i' => \$::max_tx, + 'buf_size|buf=i' => \$::buf_size, + 'stream_res=s' => \$::stream_res, + 'list_streams' => \$list_streams, ) || die($::usage); @@ -177,6 +207,36 @@ if ($show_help) { exit 0; } +if ($list_streams) { + print "Predefined Video Streams\n"; + print "=" x 72; + print "\n"; + my %sortedkeys = (); + foreach my $oldkey (keys(%::avail_stream_res)) { + my $ra_row = $::avail_stream_res{$oldkey}; + my $x = 10000 + int(@$ra_row[$stream_keys{x}]); + my $y = 10000 + int(@$ra_row[$stream_keys{y}]); + my $newkey = "${x}_${y}_${oldkey}"; + $sortedkeys{$newkey} = $oldkey; + } + foreach my $sorted_key (sort(keys(%sortedkeys))) { + my $key = $sortedkeys{$sorted_key}; + my $ra_row1 = $::avail_stream_res{$key}; + my $x = @$ra_row1[$stream_keys{x}]; + my $y = @$ra_row1[$stream_keys{y}]; + my $bps = int(@$ra_row1[$stream_keys{stream_bps}]); + my $bps_sum = int(@$ra_row1[$stream_keys{video_bps}]) + int(@$ra_row1[$stream_keys{audio_bps}]); + #my $warning = ""; + printf("[ %15s ] %5s x %5s using %13s", $key, $x, $y, $bps); + if ($bps != $bps_sum) { + print " Invalid BPS $bps, correct to $bps_sum"; + } + print "\n"; + + } + exit 0; +} + if ($::quiet eq "0") { $::quiet = "no"; } @@ -189,9 +249,11 @@ if (defined $log_cli) { # here is how we reset the variable if it was used as a flag if ($log_cli eq "") { $ENV{'LOG_CLI'} = 1; + #print "LOG_CLI now 1\n"; } else { $ENV{'LOG_CLI'} = $log_cli; + #print "LOG_CLI now $log_cli\n"; } } } @@ -229,4 +291,8 @@ else { $::utils->log_cli("# $0 ".`date "+%Y-%m-%d %H:%M:%S"`); +die ("Please provide cx_name") + unless((defined $::cx_name) && ("" ne $::cx_name)); # print out choices for now +print $::utils->doAsyncCmd($::utils->fmt_cmd("show_cx", "all", $::cx_name)); +# \ No newline at end of file