[FFmpeg-devel] [PATCH] fate: add tests for psnr and ssim filter

Nicolas George george at nsup.org
Sun Jul 23 14:30:41 EEST 2017


Le quartidi 4 thermidor, an CCXXV, Michael Niedermayer a écrit :
> we might be able to get away with strings and lower precission.

We might be lucky like that, but we cannot expect it to work always: the
value always has a small chance to be too near the cutoff value between
two rounded numbers.

Also, decreasing the precision increases the risk of missing a
regression.

I just wrote the attached script, it may or may not be of use.

Regards,

-- 
  Nicolas George
-------------- next part --------------
#!/usr/bin/env perl

# Compare two text files with fuzzy nummeric values
# The numbers in the first (reference) file must be written:
# ~value~precision~
# For example ~42~0.1~ will accept any number between 41.9 and 42.1.
# The files must contain no '~' and the end of numbers must be unambiguous.
#
# Public domain.

use strict;
use warnings;

die "Usage: $0 reference test\n" unless @ARGV == 2;

sub read_file($) {
  my ($filename) = @_;
  open my $f, "<", $filename or die "$filename: $!\n";
  local $/;
  return <$f>;
}

my ($ref_filename, $cmp_filename) = @ARGV;
my $ref = read_file $ref_filename;
my $cmp = read_file $cmp_filename;

my $ref_pos = pos($ref) = 0;
my $cmp_pos = 0;

sub show_position() {
  return " at ${ref_filename}:${ref_pos} vs ${cmp_filename}:${cmp_pos}\n";
}

while (1) {
  $ref_pos = pos($ref);
  if ($ref =~ /\G[^~]+/gc) {
    my $len = pos($ref) - $ref_pos;
    substr($ref, $ref_pos, $len) eq substr($cmp, $cmp_pos, $len)
      or die "Raw mismatch", show_position;
    $cmp_pos += $len;
  } elsif ($ref =~ /\G\~(.*?)\~(.*?)\~/gc) {
    my ($ref_val, $precision) = ($1 + 0, $2 + 0);
    pos($cmp) = $cmp_pos;
    my ($cmp_val) = $cmp =~ /\G([+-]?\d+(?:\.\d+)?)/
      or die "Expected number", show_position;
    $cmp_pos += length($cmp_val);
    abs($cmp_val - $ref_val) <= $precision
      or die "| ${cmp_val} - ${ref_val} | > ${precision}", show_position;
  } elsif ($ref =~ /\G\z/) {
    last;
  } else {
    die "$ref_filename: syntax error at position $ref_pos\n";
  }
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: Digital signature
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20170723/69ce6290/attachment.sig>


More information about the ffmpeg-devel mailing list