---
This is not a complete solution, but I thought I would put it out there for
some suggestions.

The goal is to compare decoded output stddev against a reference stddev but
using a tolerance for float rounding differences.

 tests/Makefile               |    2 +-
 tests/fate-run.sh            |   36 +++++++++++++++++++++++++++++++++++-
 tests/fate2.mak              |   14 ++++++++++++++
 tests/ref/fate/ac3-encode-1  |    1 +
 tests/ref/fate/eac3-encode-1 |    1 +
 5 files changed, 52 insertions(+), 2 deletions(-)
 create mode 100644 tests/ref/fate/ac3-encode-1
 create mode 100644 tests/ref/fate/eac3-encode-1

diff --git a/tests/Makefile b/tests/Makefile
index 87ec025..6787420 100644
--- a/tests/Makefile
+++ b/tests/Makefile
@@ -103,7 +103,7 @@ fate: $(FATE)
 
 $(FATE): ffmpeg$(EXESUF) $(FATE_UTILS:%=tests/%$(HOSTEXESUF))
        @echo "TEST    $(@:fate-%=%)"
-       $(Q)$(SRC_PATH)/tests/fate-run.sh $@ "$(SAMPLES)" "$(TARGET_EXEC)" 
"$(TARGET_PATH)" '$(CMD)' '$(CMP)' '$(REF)' '$(FUZZ)' '$(THREADS)' 
'$(THREAD_TYPE)'
+       $(Q)$(SRC_PATH)/tests/fate-run.sh $@ "$(SAMPLES)" "$(TARGET_EXEC)" 
"$(TARGET_PATH)" '$(CMD)' '$(CMP)' '$(REF)' '$(FUZZ)' '$(THREADS)' 
'$(THREAD_TYPE)' '$(PSNR_SHIFT)'
 
 fate-list:
        @printf '%s\n' $(sort $(FATE))
diff --git a/tests/fate-run.sh b/tests/fate-run.sh
index 2c744b8..71a999f 100755
--- a/tests/fate-run.sh
+++ b/tests/fate-run.sh
@@ -17,13 +17,19 @@ ref=${7:-"${base}/ref/fate/${test}"}
 fuzz=$8
 threads=${9:-1}
 thread_type=${10:-3}
+psnr_shift=${11:-0}
 
-outdir="tests/data/fate"
+datadir="tests/data"
+outdir="${datadir}/fate"
 outfile="${outdir}/${test}"
 errfile="${outdir}/${test}.err"
 cmpfile="${outdir}/${test}.diff"
 repfile="${outdir}/${test}.rep"
 
+target_datadir="${target_path}/${datadir}"
+pcm_src="$target_datadir/asynth1.sw"
+psnr_ref=$ref
+
 do_tiny_psnr(){
     psnr=$(tests/tiny_psnr "$1" "$2" 2 0 0)
     val=$(expr "$psnr" : ".*$3: *\([0-9.]*\)")
@@ -36,6 +42,21 @@ do_tiny_psnr(){
     fi
 }
 
+do_tiny_psnr2(){
+    psnr=$(tests/tiny_psnr "$1" "$2" 2 $3 0)
+    psnr1=$(cat $psnr_ref)
+    val=$(expr "$psnr" : ".*$4: *\([0-9.]*\)")
+    ref_val=$(expr "$psnr1" : ".*$4: *\([0-9.]*\)")
+    res=$(echo "if ($val >= $ref_val) { $val - $ref_val } else { $ref_val - 
$val }" | bc)
+    res=$(echo "if ($res <= $5) 1" | bc)
+    if [ "$res" != 1 ]; then
+        echo "-$psnr1"
+        echo "+$psnr"
+        echo "$4 fuzz=$5"
+        return 1
+    fi
+}
+
 oneoff(){
     do_tiny_psnr "$1" "$2" MAXDIFF '<=' ${fuzz:-1}
 }
@@ -44,6 +65,10 @@ stddev(){
     do_tiny_psnr "$1" "$2" stddev  '<=' ${fuzz:-1}
 }
 
+stddev2(){
+    do_tiny_psnr2 "$1" "$2" $psnr_shift stddev  ${fuzz:-1}
+}
+
 run(){
     test "${V:-0}" -gt 0 && echo "$target_exec" $target_path/"$@" >&3
     $target_exec $target_path/"$@"
@@ -73,6 +98,14 @@ pcm(){
     ffmpeg "$@" -vn -f s16le -
 }
 
+enc_dec_pcm(){
+    encfile="${outdir}/${test}.${1}"
+    shift 1
+    ffmpeg -ac 2 -ar 44100 -f s16le -i $pcm_src "$@" -y $encfile
+    ref=$pcm_src
+    pcm -i $encfile
+}
+
 regtest(){
     t="${test#$2-}"
     ref=${base}/ref/$2/$t
@@ -123,6 +156,7 @@ if test -e "$ref"; then
         diff)   diff -u -w "$ref" "$outfile"            >$cmpfile ;;
         oneoff) oneoff     "$ref" "$outfile" "$fuzz"    >$cmpfile ;;
         stddev) stddev     "$ref" "$outfile" "$fuzz"    >$cmpfile ;;
+        stddev2) stddev2   "$ref" "$outfile" "$fuzz"    >$cmpfile ;;
     esac
     cmperr=$?
     test $err = 0 && err=$cmperr
diff --git a/tests/fate2.mak b/tests/fate2.mak
index b4139f3..9b571b1 100644
--- a/tests/fate2.mak
+++ b/tests/fate2.mak
@@ -330,3 +330,17 @@ fate-amrwb-23k85-2: CMD = pcm -i 
$(SAMPLES)/amrwb/deus-23k85.awb
 fate-amrwb-23k85-2: CMP = stddev
 fate-amrwb-23k85-2: REF = $(SAMPLES)/amrwb/deus-23k85.pcm
 fate-amrwb-23k85-2: FUZZ = 1
+
+FATE_TESTS += fate-ac3-encode-1
+fate-ac3-encode-1: tests/data/asynth1.sw
+fate-ac3-encode-1: CMD = enc_dec_pcm ac3 -ab 192k
+fate-ac3-encode-1: CMP = stddev2
+fate-ac3-encode-1: FUZZ = 0.15
+fate-ac3-encode-1: PSNR_SHIFT = -1024
+
+FATE_TESTS += fate-eac3-encode-1
+fate-eac3-encode-1: tests/data/asynth1.sw
+fate-eac3-encode-1: CMD = enc_dec_pcm eac3 -ab 192k
+fate-eac3-encode-1: CMP = stddev2
+fate-eac3-encode-1: FUZZ = 0.15
+fate-eac3-encode-1: PSNR_SHIFT = -1024
diff --git a/tests/ref/fate/ac3-encode-1 b/tests/ref/fate/ac3-encode-1
new file mode 100644
index 0000000..c8b4186
--- /dev/null
+++ b/tests/ref/fate/ac3-encode-1
@@ -0,0 +1 @@
+stddev: 1608.37 PSNR: 32.20 MAXDIFF:24229 bytes:  1058400/  1061888
diff --git a/tests/ref/fate/eac3-encode-1 b/tests/ref/fate/eac3-encode-1
new file mode 100644
index 0000000..6b86c84
--- /dev/null
+++ b/tests/ref/fate/eac3-encode-1
@@ -0,0 +1 @@
+stddev: 1616.32 PSNR: 32.16 MAXDIFF:25480 bytes:  1058400/  1061888
-- 
1.7.1

_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to