You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

162 lines
3.5KB

  1. #! /bin/sh
  2. export LC_ALL=C
  3. base=$(dirname $0)
  4. . "${base}/md5.sh"
  5. base64=tests/base64
  6. test="${1#fate-}"
  7. samples=$2
  8. target_exec=$3
  9. target_path=$4
  10. command=$5
  11. cmp=${6:-diff}
  12. ref=${7:-"${base}/ref/fate/${test}"}
  13. fuzz=${8:-1}
  14. threads=${9:-1}
  15. thread_type=${10:-frame+slice}
  16. cpuflags=${11:-all}
  17. cmp_shift=${12:-0}
  18. cmp_target=${13:-0}
  19. size_tolerance=${14:-0}
  20. outdir="tests/data/fate"
  21. outfile="${outdir}/${test}"
  22. errfile="${outdir}/${test}.err"
  23. cmpfile="${outdir}/${test}.diff"
  24. repfile="${outdir}/${test}.rep"
  25. # $1=value1, $2=value2, $3=threshold
  26. # prints 0 if absolute difference between value1 and value2 is <= threshold
  27. compare(){
  28. v=$(echo "scale=2; if ($1 >= $2) { $1 - $2 } else { $2 - $1 }" | bc)
  29. echo "if ($v <= $3) { 0 } else { 1 }" | bc
  30. }
  31. do_tiny_psnr(){
  32. psnr=$(tests/tiny_psnr "$1" "$2" 2 $cmp_shift 0)
  33. val=$(expr "$psnr" : ".*$3: *\([0-9.]*\)")
  34. size1=$(expr "$psnr" : '.*bytes: *\([0-9]*\)')
  35. size2=$(expr "$psnr" : '.*bytes:[ 0-9]*/ *\([0-9]*\)')
  36. val_cmp=$(compare $val $cmp_target $fuzz)
  37. size_cmp=$(compare $size1 $size2 $size_tolerance)
  38. if [ "$val_cmp" != 0 ] || [ "$size_cmp" != 0 ]; then
  39. echo "$psnr"
  40. return 1
  41. fi
  42. }
  43. oneoff(){
  44. do_tiny_psnr "$1" "$2" MAXDIFF
  45. }
  46. stddev(){
  47. do_tiny_psnr "$1" "$2" stddev
  48. }
  49. run(){
  50. test "${V:-0}" -gt 0 && echo "$target_exec" $target_path/"$@" >&3
  51. $target_exec $target_path/"$@"
  52. }
  53. avconv(){
  54. run avconv -nostats -threads $threads -thread_type $thread_type -cpuflags $cpuflags "$@"
  55. }
  56. framecrc(){
  57. avconv "$@" -f framecrc -
  58. }
  59. framemd5(){
  60. avconv "$@" -f framemd5 -
  61. }
  62. crc(){
  63. avconv "$@" -f crc -
  64. }
  65. md5(){
  66. avconv "$@" md5:
  67. }
  68. pcm(){
  69. avconv "$@" -vn -f s16le -
  70. }
  71. enc_dec_pcm(){
  72. out_fmt=$1
  73. pcm_fmt=$2
  74. shift 2
  75. encfile="${outdir}/${test}.${out_fmt}"
  76. cleanfiles=$encfile
  77. avconv -i $ref "$@" -f $out_fmt -y $encfile || return
  78. avconv -i $encfile -c:a pcm_${pcm_fmt} -f wav -
  79. }
  80. regtest(){
  81. t="${test#$2-}"
  82. ref=${base}/ref/$2/$t
  83. ${base}/${1}-regression.sh $t $2 $3 "$target_exec" "$target_path" "$threads" "$thread_type" "$cpuflags"
  84. }
  85. codectest(){
  86. regtest codec $1 tests/$1
  87. }
  88. lavftest(){
  89. regtest lavf lavf tests/vsynth1
  90. }
  91. lavfitest(){
  92. cleanfiles="tests/data/lavfi/${test#lavfi-}.nut"
  93. regtest lavfi lavfi tests/vsynth1
  94. }
  95. seektest(){
  96. t="${test#seek-}"
  97. ref=${base}/ref/seek/$t
  98. case $t in
  99. image_*) file="tests/data/images/${t#image_}/%02d.${t#image_}" ;;
  100. *) file=$(echo $t | tr _ '?')
  101. for d in acodec vsynth2 lavf; do
  102. test -f tests/data/$d/$file && break
  103. done
  104. file=$(echo tests/data/$d/$file)
  105. ;;
  106. esac
  107. run libavformat/seek-test $target_path/$file
  108. }
  109. mkdir -p "$outdir"
  110. exec 3>&2
  111. $command > "$outfile" 2>$errfile
  112. err=$?
  113. if [ $err -gt 128 ]; then
  114. sig=$(kill -l $err 2>/dev/null)
  115. test "${sig}" = "${sig%[!A-Za-z]*}" || unset sig
  116. fi
  117. if test -e "$ref"; then
  118. case $cmp in
  119. diff) diff -u -w "$ref" "$outfile" >$cmpfile ;;
  120. oneoff) oneoff "$ref" "$outfile" >$cmpfile ;;
  121. stddev) stddev "$ref" "$outfile" >$cmpfile ;;
  122. null) cat "$outfile" >$cmpfile ;;
  123. esac
  124. cmperr=$?
  125. test $err = 0 && err=$cmperr
  126. test $err = 0 || cat $cmpfile
  127. else
  128. echo "reference file '$ref' not found"
  129. err=1
  130. fi
  131. echo "${test}:${sig:-$err}:$($base64 <$cmpfile):$($base64 <$errfile)" >$repfile
  132. test $err = 0 && rm -f $outfile $errfile $cmpfile $cleanfiles
  133. exit $err