---
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