summaryrefslogtreecommitdiffstats
path: root/TOOLS
diff options
context:
space:
mode:
authorjonas <jonas@b3059339-0415-0410-9bf9-f77b7e298cf2>2003-02-09 13:06:05 +0000
committerjonas <jonas@b3059339-0415-0410-9bf9-f77b7e298cf2>2003-02-09 13:06:05 +0000
commita79bd0aa92f7a2182f03f11501f9bd72e51f8329 (patch)
treeb801a0369438c5a4286a1cdcb629726f325605b9 /TOOLS
parentf8824d05a39d8d176752e23ee01b1e9b6e97711c (diff)
downloadmpv-a79bd0aa92f7a2182f03f11501f9bd72e51f8329.tar.bz2
mpv-a79bd0aa92f7a2182f03f11501f9bd72e51f8329.tar.xz
PSNR plotting tool using gnuplot (yes, it's ugly ;)
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@9367 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'TOOLS')
-rwxr-xr-xTOOLS/plotpsnr.pl234
1 files changed, 234 insertions, 0 deletions
diff --git a/TOOLS/plotpsnr.pl b/TOOLS/plotpsnr.pl
new file mode 100755
index 0000000000..6b975c6b2b
--- /dev/null
+++ b/TOOLS/plotpsnr.pl
@@ -0,0 +1,234 @@
+#!/usr/bin/perl
+#
+# Licence: GPL
+#
+# 2003/02/09 Jonas Jermann <jjermann@gmx.net>
+#
+# Script: Draw PSNR log graphs using gnuplot
+#
+# requires: gnuplot
+
+use Getopt::Long;
+
+# MAIN
+my %options;
+my $dem_file="psnr.dem";
+
+commandline();
+demo_file();
+
+system ("gnuplot $dem_file");
+#system("rm $dem_file $options{file}.[IPB] $options{file}.diff* 2>/dev/null");
+exit 0;
+
+
+# DEMO FILE
+sub demo_file {
+
+if ($options{file2}) {
+ my @file1_cont = ();
+ my @file2_cont = ();
+ my $NewRow,$i,$j;
+
+ open(LIST_IN, "$options{file}"); while( <LIST_IN> ) {
+ $NewRow=[];
+ @$NewRow = split(/[ ,]+/, $_);
+ push( @file1_cont, $NewRow );
+ }
+ close(LIST_IN);
+
+ open(LIST_IN2, "$options{file2}"); while( <LIST_IN2> ) {
+ $NewRow=[];
+ @$NewRow = split(/[ ,]+/, $_);
+ push( @file2_cont, $NewRow );
+ }
+ close(LIST_IN2);
+
+ open(LIST_OUT, ">$options{file}.diff");
+ for($i=0; $i<=$#file2_cont; $i++) {
+ print LIST_OUT " $file2_cont[$i]->[1],\ ";
+ for($j=2; $j<=7; $j++) {
+ $file2_cont[$i]->[$j] -= $file1_cont[$i]->[$j];
+ print LIST_OUT " $file2_cont[$i]->[$j],\ ";
+ }
+ print LIST_OUT " $file2_cont[$i]->[8]\n";
+ }
+ close(LIST_OUT);
+ $options{file}="$options{file}.diff";
+}
+
+if ($options{iframes}) { system("cat $options{file} | grep I > $options{file}.I"); }
+if ($options{pframes}) { system("cat $options{file} | grep P > $options{file}.P"); }
+if ($options{bframes}) { system("cat $options{file} | grep B > $options{file}.B"); }
+
+open(DEM_FILE,">$dem_file");
+
+print DEM_FILE "#PSNR Statistics
+#---------------
+
+set title \"PSNR Statistics\"
+set data style fsteps
+set xlabel \"Frames\"
+set grid
+
+
+";
+
+if ($options{quant}) {
+print DEM_FILE "# Quantizers
+plot [] [0:] \\";
+if ($options{pframes}) {
+ print DEM_FILE "
+ \"$options{file}.P\" using 1:2 t \"Quantizer: P frames\" w $options{qs}";
+ if ($options{bframes} || $options{iframes}) { print DEM_FILE ",\\"; }
+}
+if ($options{bframes}) {
+ print DEM_FILE "
+ \"$options{file}.B\" using 1:2 t \"Quantizer: B frames\" w $options{qs}";
+ if ($options{iframes}) { print DEM_FILE ",\\"; }
+}
+if ($options{iframes}) {
+ print DEM_FILE "
+ \"$options{file}.I\" using 1:2 t \"Quantizer: I frames\" w $options{qs}";
+}
+if (!($options{pframes} || $options{bframes} || $options{iframes})) {
+ print DEM_FILE "
+ \"$options{file}\" using 1:2 t \"Quantizer\" w $options{qs}";
+}
+
+print DEM_FILE "
+pause -1
+
+";
+}
+
+
+if ($options{size}) {
+print DEM_FILE "# Frame size
+plot \\";
+if ($options{pframes}) {
+ print DEM_FILE "
+ \"$options{file}.P\" using 1:3 t \"Size: P frames\" w $options{ss}";
+ if ($options{bframes}||$options{iframes}) { print DEM_FILE ",\\"; }
+}
+if ($options{bframes}) {
+ print DEM_FILE "
+ \"$options{file}.B\" using 1:3 t \"Size: B frames\" w $options{ss}";
+ if ($options{iframes}) { print DEM_FILE ",\\"; }
+}
+if ($options{iframes}) {
+ print DEM_FILE "
+ \"$options{file}.I\" using 1:3 t \"Size: I frames\" w $options{ss}";
+}
+if (!($options{pframes}||$options{bframes}||$options{iframes})) {
+ print DEM_FILE "
+ \"$options{file}\" using 1:3 t \"Size\" w $options{ss}";
+}
+
+print DEM_FILE "
+pause -1
+
+";
+}
+
+if ($options{psnr}) {
+print DEM_FILE "# PSNR
+plot \\";
+if ($options{pframes}) {
+ print DEM_FILE "
+ \"$options{file}.P\" using (\$1):(\$7) t \"PSNR (All): P frames\" w $options{ps}";
+ if ($options{bframes}||$options{iframes}) { print DEM_FILE ",\\"; }
+}
+if ($options{bframes}) {
+ print DEM_FILE "
+ \"$options{file}.B\" using (\$1):(\$7) t \"PSNR (All): B frames\" w $options{ps}";
+ if ($options{iframes}) { print DEM_FILE ",\\"; }
+}
+if ($options{iframes}) {
+ print DEM_FILE "
+ \"$options{file}.I\" using (\$1):(\$7) t \"PSNR (All): I frames\" w $options{ps}";
+}
+if (!($options{pframes}||$options{bframes}||$options{iframes})) {
+ print DEM_FILE "
+ \"$options{file}\" using (\$1):(\$7) t \"PSNR (All)\" w $options{ps}";
+}
+
+print DEM_FILE "
+#\"$options{file}\" using (\$1):(\$4) t \"PSNR (Y)\" w $options{ps} \\
+#\"$options{file}\" using (\$1):(\$5) t \"PSNR (Cb)\" w $options{ps} \\
+#\"$options{file}\" using (\$1):(\$6) t \"PSNR (Cr)\" w $options{ps}
+pause -1
+
+";
+}
+
+print DEM_FILE "
+reset";
+
+close (DEM_FILE);
+}
+
+
+
+# USAGE
+sub usage {
+print STDERR <<EOF;
+
+Usage: plotpsnr.pl [options] 'file'
+
+Options:
+ -h, --help Display this help message
+ -quant Display quantizers
+ -size Display size
+ -psnr Display PSNR
+ -iframes Display I frames
+ -pframes Display P frames
+ -bframes Display B frames
+ -aframes Display all frames in different colors
+ -cmp <file2> Compare two files
+ -qs <style> Quantizer style
+ -ss <style> Size style
+ -ps <style> PSNR style
+
+Default: -quant -size -psnr -qs "p" -ss "i" -ps "p"
+
+Notes:
+ Comparison is based on file2.
+ Comparison assumes that the frame numbers of both files fit.
+
+EOF
+ exit 1;
+}
+
+
+# COMMAND LINE
+sub commandline {
+ $options{qs}="p";
+ $options{ss}="i";
+ $options{ps}="p";
+
+ GetOptions(
+ "help|h" => \&usage,
+ "quant" => \$options{quant},
+ "size" => \$options{size},
+ "psnr" => \$options{psnr},
+ "cmp=s" => \$options{file2},
+ "iframes" => \$options{iframes},
+ "pframes" => \$options{pframes},
+ "bframes" => \$options{bframes},
+ "aframes" => sub { $options{iframes} = 1;
+ $options{pframes} = 1;
+ $options{bframes} = 1; },
+ "qs=s" => \$options{qs},
+ "ss=s" => \$options{ss},
+ "ps=s" => \$options{ps},
+ ) || usage();
+
+if (!($options{quant}||$options{size}||$options{psnr})) {
+ $options{quant}=1;
+ $options{size}=1;
+ $options{psnr}=1;
+}
+
+$options{file}="@ARGV";
+}