added first version of regression tests - simply type 'make test' to test every codec...
[ffmpeg.git] / tests / regression.sh
1 #!/bin/sh
2 #
3 # automatic regression test for ffmpeg
4 #
5 #
6 #set -x
7 set -e
8
9 # tests to do
10 if [ "$1" = "mpeg4" ] ; then
11     do_mpeg4=y
12 elif [ "$1" = "mpeg" ] ; then
13     do_mpeg=y
14 else
15     do_mpeg=y
16     do_msmpeg4=y
17     do_h263=y
18     do_mpeg4=y
19     do_mjpeg=y
20     #do_rv10=y #broken!
21     do_mp2=y
22     do_ac3=y
23 fi
24
25
26 # various files
27 ffmpeg="../ffmpeg"
28 outfile="/tmp/a-"
29 reffile="$2"
30 logfile="/tmp/ffmpeg.regression"
31 benchfile="/tmp/ffmpeg.bench"
32 raw_src="vsynth1/%d.pgm"
33 raw_dst="/tmp/out.yuv"
34 pcm_src="asynth1.sw"
35 pcm_dst="/tmp/out.wav"
36
37 function do_ffmpeg ()
38 {
39     f="$1"
40     shift
41     echo $ffmpeg $*
42     $ffmpeg -benchmark $* > /tmp/bench.tmp
43     md5sum $f >> $logfile
44     expr match "`cat /tmp/bench.tmp`" '.*utime=\(.*s\)' > /tmp/bench2.tmp
45     echo `cat /tmp/bench2.tmp` $f >> $benchfile
46 }
47
48
49 echo "ffmpeg regression test" > $logfile
50 echo "ffmpeg benchmarks" > $benchfile
51
52 ###################################
53 if [ -n "$do_mpeg" ] ; then
54 # mpeg1 encoding
55 file=${outfile}mpeg1.mpg
56 do_ffmpeg $file -y -qscale 10 -f pgmyuv -i $raw_src -f mpegvideo $file 
57
58 # mpeg1 decoding
59 do_ffmpeg $raw_dst -y -f mpegvideo -i $file -f rawvideo $raw_dst
60
61 # mpeg2 decoding
62 #do_ffmpeg /tmp/out-mpeg2.yuv -y -f mpegvideo -i a.vob \
63 #          -f rawvideo /tmp/out-mpeg2.yuv
64 fi
65
66 ###################################
67 if [ -n "$do_msmpeg4" ] ; then
68 # msmpeg4 encoding
69 file=${outfile}msmpeg4.avi
70 do_ffmpeg $file -y -qscale 10 -f pgmyuv -i $raw_src -an -vcodec msmpeg4 $file
71
72 # msmpeg4 decoding
73 do_ffmpeg $raw_dst -y -i $file -f rawvideo $raw_dst 
74 fi
75
76 ###################################
77 if [ -n "$do_h263" ] ; then
78 # h263 encoding
79 file=${outfile}h263.avi
80 do_ffmpeg $file -y -qscale 10 -f pgmyuv -i $raw_src -s 352x288 -an -vcodec h263 $file
81
82 # h263p decoding
83 do_ffmpeg $raw_dst -y -i $file -f rawvideo $raw_dst 
84 fi
85
86 ###################################
87 if [ -n "$do_mpeg4" ] ; then
88 # mpeg4
89 file=${outfile}odivx.avi
90 do_ffmpeg $file -y -qscale 10 -f pgmyuv -i $raw_src -an -vcodec mpeg4 $file
91
92 # mpeg4 decoding
93 do_ffmpeg $raw_dst -y -i $file -f rawvideo $raw_dst 
94 fi
95
96 ###################################
97 if [ -n "$do_mjpeg" ] ; then
98 # mjpeg
99 file=${outfile}mjpeg.avi
100 do_ffmpeg $file -y -qscale 10 -f pgmyuv -i $raw_src -an -vcodec mjpeg $file
101
102 # mjpeg decoding
103 do_ffmpeg $raw_dst -y -i $file -f rawvideo $raw_dst 
104 fi
105
106 ###################################
107 if [ -n "$do_rv10" ] ; then
108 # rv10 encoding
109 file=${outfile}rv10.rm
110 do_ffmpeg $file -y -qscale 10 -f pgmyuv -i $raw_src -an $file 
111
112 # rv10 decoding
113 do_ffmpeg $raw_dst -y -i $file -f rawvideo $raw_dst 
114 fi
115
116 ###################################
117 if [ -n "$do_mp2" ] ; then
118 # mp2 encoding
119 file=${outfile}mp2.mp2
120 do_ffmpeg $file -y -ab 128 -ac 2 -ar 44100 -f s16le -i $pcm_src $file 
121
122 # mp2 decoding
123 do_ffmpeg $pcm_dst -y -i $file -f wav $pcm_dst 
124 fi
125
126 ###################################
127 if [ -n "$do_ac3" ] ; then
128 # ac3 encoding
129 file=${outfile}ac3.rm
130 do_ffmpeg $file -y -ab 128 -ac 2 -f s16le  -i $pcm_src -vn $file 
131
132 # ac3 decoding
133 do_ffmpeg $pcm_dst -y -i $file -f wav $pcm_dst 
134 fi
135
136
137 if diff -u $logfile $reffile ; then
138     echo 
139     echo Regression test succeeded.
140     exit 0
141 else
142     echo 
143     echo Regression test: Error.
144     exit 1
145 fi