Add pixdesctest filter and corresponding test.
[ffmpeg.git] / tests / lavfi-regression.sh
index 49f740e..220d43c 100755 (executable)
@@ -24,6 +24,19 @@ get_common_elements() (
     echo $res
 )
 
+# Returns the elements present in $1 but not in $2.
+get_exclusive_elements() (
+    for elt1 in $1; do
+        common=""
+        for elt2 in $2; do
+            [ $elt1 = $elt2 ] && common="true" && break;
+        done
+        [ -z "$common" ] && res="$res $elt1"
+    done
+
+    echo $res
+)
+
 do_lavfi() {
     test_name=$1
     eval test=\$do_$test_name
@@ -55,7 +68,11 @@ vflip
 "
 
 if [ -n "$do_lavfi_pix_fmts" ]; then
+    # exclude pixel formats which are not supported as input
+    excluded_pix_fmts="$(ffmpeg -pix_fmts list 2>/dev/null | sed -ne '9,$p' | grep '^\..\.' | cut -d' ' -f2)"
+
     scale_out_pix_fmts=$(tools/lavfi-showfiltfmts scale | grep "^OUTPUT" | cut -d: -f2)
+    scale_out_pix_fmts=$(get_exclusive_elements "$scale_out_pix_fmts" "$excluded_pix_fmts")
 
     for filter_args in $filters_args; do
         filter=$(echo $filter_args | sed -e 's/\([^=]\+\)=.*/\1/')
@@ -69,6 +86,26 @@ if [ -n "$do_lavfi_pix_fmts" ]; then
     done
 fi
 
+if [ -n "$do_lavfi_pixdesc" ]; then
+    pix_fmts="$($ffmpeg -pix_fmts list 2>/dev/null | sed -ne '9,$p' | grep '^IO' | cut -d' ' -f2)"
+
+    ref_file=tests/ref/lavfi/lavfi_pixdesc
+    rm -f $ref_file
+    res_file=$logfile
+
+    for pix_fmt in $pix_fmts; do
+        # print to the reference logfile
+        logfile=$ref_file
+        do_video_encoding "lavfi_pixdesc-${pix_fmt}.nut" "" \
+            "-vf slicify=random,format=$pix_fmt -vcodec rawvideo -pix_fmt $pix_fmt"
+
+        # print to the result logfile
+        logfile=$res_file
+        do_video_encoding "lavfi_pixdesc-${pix_fmt}.nut" "" \
+            "-vf slicify=random,format=$pix_fmt,pixdesctest -vcodec rawvideo -pix_fmt $pix_fmt"
+    done
+fi
+
 # TODO: add tests for
 # direct rendering,
 # chains with feedback loops