Changes for SPARC/Solaris compatibility. Now it should be possible to
[ffmpeg.git] / tests / regression.sh
1 #!/bin/sh
2 #
3 # automatic regression test for ffmpeg
4 #
5 #
6 #set -x
7 # Even in the 21st century some diffs are not supporting -u.
8 diff -u $0 $0 > /dev/null 2>&1
9 if [ $? -eq 0 ]; then
10   diff_cmd="diff -u"
11 else
12   diff_cmd="diff"
13 fi
14
15 set -e
16
17 datadir="./data"
18
19 logfile="$datadir/ffmpeg.regression"
20
21 # tests to do
22 if [ "$1" = "mpeg4" ] ; then
23     do_mpeg4=y
24 elif [ "$1" = "mpeg" ] ; then
25     do_mpeg=y
26 elif [ "$1" = "ac3" ] ; then
27     do_ac3=y
28 elif [ "$1" = "libavtest" ] ; then
29     do_libav=y
30     logfile="$datadir/libav.regression"
31 else
32     do_mpeg=y
33     do_msmpeg4v2=y
34     do_msmpeg4=y
35     do_wmv1=y
36     do_wmv2=y
37     do_h263=y
38     do_h263p=y
39     do_mpeg4=y
40     do_huffyuv=y
41     do_mjpeg=y
42     do_rv10=y
43     do_mp2=y
44     do_ac3=y
45     do_rc=y
46     do_mpeg4adv=y
47     do_mpeg1b=y
48 fi
49
50
51 # various files
52 ffmpeg="../ffmpeg_g"
53 tiny_psnr="./tiny_psnr"
54 outfile="$datadir/a-"
55 reffile="$2"
56 benchfile="$datadir/ffmpeg.bench"
57 raw_src="$3/%d.pgm"
58 raw_dst="$datadir/out.yuv"
59 raw_ref="$datadir/ref.yuv"
60 pcm_src="asynth1.sw"
61 pcm_dst="$datadir/out.wav"
62
63 # create the data directory if it does not exists
64 mkdir -p $datadir
65
66 do_ffmpeg()
67 {
68     f="$1"
69     shift
70     echo $ffmpeg -bitexact -dct_algo 1 -idct_algo 2 $*
71     $ffmpeg -bitexact -dct_algo 1 -idct_algo 2 -benchmark $* > $datadir/bench.tmp 2> /tmp/ffmpeg$$
72     egrep -v "^(Stream|Press|Input|Output|frame|  Stream)" /tmp/ffmpeg$$ || true
73     rm -f /tmp/ffmpeg$$
74     md5sum -b $f >> $logfile
75     if [ $f = $raw_dst ] ; then
76         $tiny_psnr $f $raw_ref >> $logfile
77     fi
78     expr "`cat $datadir/bench.tmp`" : '.*utime=\(.*s\)' > $datadir/bench2.tmp
79     echo `cat $datadir/bench2.tmp` $f >> $benchfile
80 }
81
82 do_ffmpeg_crc()
83 {
84     f="$1"
85     shift
86     echo $ffmpeg -y -bitexact -dct_algo 1 -idct_algo 2 $* -f crc $datadir/ffmpeg.crc
87     $ffmpeg -y -bitexact -dct_algo 1 -idct_algo 2 $* -f crc $datadir/ffmpeg.crc
88     echo -n "$f " >> $logfile
89     cat $datadir/ffmpeg.crc >> $logfile
90 }
91
92 do_ffmpeg_nocheck()
93 {
94     f="$1"
95     shift
96     echo $ffmpeg -bitexact -dct_algo 1 -idct_algo 2 $*
97     $ffmpeg -bitexact -dct_algo 1 -idct_algo 2 -benchmark $* > $datadir/bench.tmp
98     expr "`cat $datadir/bench.tmp`" : '.*utime=\(.*s\)' > $datadir/bench2.tmp
99     echo `cat $datadir/bench2.tmp` $f >> $benchfile
100 }
101
102 echo "ffmpeg regression test" > $logfile
103 echo "ffmpeg benchmarks" > $benchfile
104
105 ###################################
106 # generate reference for quality check
107 do_ffmpeg_nocheck $raw_ref -y -f pgmyuv -i $raw_src -an -f rawvideo $raw_ref
108
109 ###################################
110 if [ -n "$do_mpeg" ] ; then
111 # mpeg1 encoding
112 file=${outfile}mpeg1.mpg
113 do_ffmpeg $file -y -qscale 10 -f pgmyuv -i $raw_src -f mpeg1video $file 
114
115 # mpeg1 decoding
116 do_ffmpeg $raw_dst -y -i $file -f rawvideo $raw_dst
117
118 # mpeg2 decoding
119 #do_ffmpeg /tmp/out-mpeg2.yuv -y -f mpegvideo -i a.vob \
120 #          -f rawvideo /tmp/out-mpeg2.yuv
121 fi
122
123 ###################################
124 if [ -n "$do_msmpeg4v2" ] ; then
125 # msmpeg4 encoding
126 file=${outfile}msmpeg4v2.avi
127 do_ffmpeg $file -y -qscale 10 -f pgmyuv -i $raw_src -an -vcodec msmpeg4v2 $file
128
129 # msmpeg4v2 decoding
130 do_ffmpeg $raw_dst -y -i $file -f rawvideo $raw_dst 
131 fi
132
133 ###################################
134 if [ -n "$do_msmpeg4" ] ; then
135 # msmpeg4 encoding
136 file=${outfile}msmpeg4.avi
137 do_ffmpeg $file -y -qscale 10 -f pgmyuv -i $raw_src -an -vcodec msmpeg4 $file
138
139 # msmpeg4 decoding
140 do_ffmpeg $raw_dst -y -i $file -f rawvideo $raw_dst 
141 fi
142
143 ###################################
144 if [ -n "$do_wmv1" ] ; then
145 # wmv1 encoding
146 file=${outfile}wmv1.avi
147 do_ffmpeg $file -y -qscale 10 -f pgmyuv -i $raw_src -an -vcodec wmv1 $file
148
149 # wmv1 decoding
150 do_ffmpeg $raw_dst -y -i $file -f rawvideo $raw_dst 
151 fi
152
153 ###################################
154 if [ -n "$do_wmv2" ] ; then
155 # wmv2 encoding
156 file=${outfile}wmv2.avi
157 do_ffmpeg $file -y -qscale 10 -f pgmyuv -i $raw_src -an -vcodec wmv2 $file
158
159 # wmv2 decoding
160 do_ffmpeg $raw_dst -y -i $file -f rawvideo $raw_dst 
161 fi
162
163 ###################################
164 if [ -n "$do_h263" ] ; then
165 # h263 encoding
166 file=${outfile}h263.avi
167 do_ffmpeg $file -y -qscale 10 -f pgmyuv -i $raw_src -s 352x288 -an -vcodec h263 $file
168
169 # h263 decoding
170 do_ffmpeg $raw_dst -y -i $file -f rawvideo $raw_dst 
171 fi
172
173 ###################################
174 if [ -n "$do_h263p" ] ; then
175 # h263p encoding
176 file=${outfile}h263p.avi
177 do_ffmpeg $file -y -qscale 2 -umv -f pgmyuv -i $raw_src -s 352x288 -an -vcodec h263p -ps 300 $file
178
179 # h263p decoding
180 do_ffmpeg $raw_dst -y -i $file -f rawvideo $raw_dst 
181 fi
182
183 ###################################
184 if [ -n "$do_mpeg4" ] ; then
185 # mpeg4
186 file=${outfile}odivx.avi
187 do_ffmpeg $file -y -4mv -qscale 10 -f pgmyuv -i $raw_src -an -vcodec mpeg4 $file
188
189 # mpeg4 decoding
190 do_ffmpeg $raw_dst -y -i $file -f rawvideo $raw_dst 
191 fi
192
193 ###################################
194 if [ -n "$do_huffyuv" ] ; then
195 # huffyuv
196 file=${outfile}huffyuv.avi
197 do_ffmpeg $file -y -qscale 10 -f pgmyuv -i $raw_src -an -vcodec huffyuv -strict -1 $file
198
199 # huffyuv decoding
200 do_ffmpeg $raw_dst -y -i $file -f rawvideo -strict -1 $raw_dst
201 fi
202
203 ###################################
204 if [ -n "$do_rc" ] ; then
205 # mpeg4 rate control
206 file=${outfile}mpeg4-rc.avi
207 do_ffmpeg $file -y -b 400 -bf 2 -f pgmyuv -i $raw_src -an -vcodec mpeg4 $file
208
209 # mpeg4 rate control decoding
210 do_ffmpeg $raw_dst -y -i $file -f rawvideo $raw_dst 
211 fi
212
213 ###################################
214 if [ -n "$do_mpeg4adv" ] ; then
215 # mpeg4
216 file=${outfile}mpeg4-adv.avi
217 do_ffmpeg $file -y -qscale 9 -4mv -hq -part -ps 200 -f pgmyuv -i $raw_src -an -vcodec mpeg4 $file
218
219 # mpeg4 decoding
220 do_ffmpeg $raw_dst -y -i $file -f rawvideo $raw_dst 
221 fi
222
223 ###################################
224 if [ -n "$do_mpeg1b" ] ; then
225 # mpeg1
226 file=${outfile}mpeg1b.mpg
227 do_ffmpeg $file -y -qscale 8 -bf 3 -ps 200 -f pgmyuv -i $raw_src -an -vcodec mpeg1video $file
228
229 # mpeg1 decoding
230 do_ffmpeg $raw_dst -y -i $file -f rawvideo $raw_dst 
231 fi
232
233 ###################################
234 if [ -n "$do_mjpeg" ] ; then
235 # mjpeg
236 file=${outfile}mjpeg.avi
237 do_ffmpeg $file -y -qscale 10 -f pgmyuv -i $raw_src -an -vcodec mjpeg $file
238
239 # mjpeg decoding
240 do_ffmpeg $raw_dst -y -i $file -f rawvideo $raw_dst 
241 fi
242
243 ###################################
244 if [ -n "$do_rv10" ] ; then
245 # rv10 encoding
246 file=${outfile}rv10.rm
247 do_ffmpeg $file -y -qscale 10 -f pgmyuv -i $raw_src -an $file 
248
249 # rv10 decoding
250 do_ffmpeg $raw_dst -y -i $file -f rawvideo $raw_dst 
251 fi
252
253 ###################################
254 if [ -n "$do_mp2" ] ; then
255 # mp2 encoding
256 file=${outfile}mp2.mp2
257 do_ffmpeg $file -y -ab 128 -ac 2 -ar 44100 -f s16le -i $pcm_src $file 
258
259 # mp2 decoding
260 do_ffmpeg $pcm_dst -y -i $file -f wav $pcm_dst 
261 fi
262
263 ###################################
264 if [ -n "$do_ac3" ] ; then
265 # ac3 encoding
266 file=${outfile}ac3.rm
267 do_ffmpeg $file -y -ab 128 -ac 2 -f s16le  -i $pcm_src -vn $file 
268
269 # ac3 decoding
270 #do_ffmpeg $pcm_dst -y -i $file -f wav $pcm_dst 
271 fi
272
273 ###################################
274 # libav testing
275 ###################################
276
277 if [ -n "$do_libav" ] ; then
278
279 # avi
280 file=${outfile}libav.avi
281 do_ffmpeg $file -t 1 -y -qscale 10 -f pgmyuv -i $raw_src -f s16le -i $pcm_src $file
282 do_ffmpeg_crc $file -i $file
283
284 # asf
285 file=${outfile}libav.asf
286 do_ffmpeg $file -t 1 -y -qscale 10 -f pgmyuv -i $raw_src -f s16le -i $pcm_src $file
287 do_ffmpeg_crc $file -i $file
288
289 # rm
290 file=${outfile}libav.rm
291 do_ffmpeg $file -t 1 -y -qscale 10 -f pgmyuv -i $raw_src -f s16le -i $pcm_src $file
292 # broken
293 #do_ffmpeg_crc $file -i $file
294
295 # mpegps
296 file=${outfile}libav.mpg
297 do_ffmpeg $file -t 1 -y -qscale 10 -f pgmyuv -i $raw_src -f s16le -i $pcm_src $file
298 do_ffmpeg_crc $file -i $file
299
300 # swf (decode audio only)
301 file=${outfile}libav.swf
302 do_ffmpeg $file -t 1 -y -qscale 10 -f pgmyuv -i $raw_src -f s16le -i $pcm_src $file
303 do_ffmpeg_crc $file -i $file
304
305 # ffm
306 file=${outfile}libav.ffm
307 do_ffmpeg $file -t 1 -y -qscale 10 -f pgmyuv -i $raw_src -f s16le -i $pcm_src $file
308 do_ffmpeg_crc $file -i $file
309
310 # XXX: need mov and mpegts tests (add bitstreams or add output capability in ffmpeg)
311
312 ####################
313 # streamed images
314 # mjpeg
315 file=${outfile}libav.mjpeg
316 do_ffmpeg $file -t 1 -y -qscale 10 -f pgmyuv -i $raw_src $file
317 do_ffmpeg_crc $file -i $file
318
319 # pbmpipe
320 file=${outfile}libav.pbm
321 do_ffmpeg $file -t 1 -y -qscale 10 -f pgmyuv -i $raw_src -f imagepipe $file
322 do_ffmpeg_crc $file -f imagepipe -i $file
323
324 # pgmpipe
325 file=${outfile}libav.pgm
326 do_ffmpeg $file -t 1 -y -qscale 10 -f pgmyuv -i $raw_src -f imagepipe $file
327 do_ffmpeg_crc $file -f imagepipe -i $file
328
329 # ppmpipe
330 file=${outfile}libav.ppm
331 do_ffmpeg $file -t 1 -y -qscale 10 -f pgmyuv -i $raw_src -f imagepipe $file
332 do_ffmpeg_crc $file -f imagepipe -i $file
333
334 # gif
335 file=${outfile}libav.gif
336 do_ffmpeg $file -t 1 -y -qscale 10 -f pgmyuv -i $raw_src $file
337 #do_ffmpeg_crc $file -i $file
338
339 # yuv4mpeg
340 file=${outfile}libav.yuv4mpeg
341 do_ffmpeg $file -t 1 -y -qscale 10 -f pgmyuv -i $raw_src $file
342 #do_ffmpeg_crc $file -i $file
343
344 ####################
345 # image formats
346 # pgm (we do not do md5 on image files yet)
347 file=${outfile}libav%d.pgm
348 $ffmpeg -t 0.5 -y -qscale 10 -f pgmyuv -i $raw_src $file
349 do_ffmpeg_crc $file -i $file
350
351 # ppm (we do not do md5 on image files yet)
352 file=${outfile}libav%d.ppm
353 $ffmpeg -t 0.5 -y -qscale 10 -f pgmyuv -i $raw_src $file
354 do_ffmpeg_crc $file -i $file
355
356 # jpeg (we do not do md5 on image files yet)
357 file=${outfile}libav%d.jpg
358 $ffmpeg -t 0.5 -y -qscale 10 -f pgmyuv -i $raw_src $file
359 do_ffmpeg_crc $file -i $file
360
361 ####################
362 # audio only
363
364 # wav
365 file=${outfile}libav.wav
366 do_ffmpeg $file -t 1 -y -qscale 10 -f s16le -i $pcm_src $file
367 do_ffmpeg_crc $file -i $file
368
369 # alaw
370 file=${outfile}libav.al
371 do_ffmpeg $file -t 1 -y -qscale 10 -f s16le -i $pcm_src $file
372 do_ffmpeg_crc $file -i $file
373
374 # mulaw
375 file=${outfile}libav.ul
376 do_ffmpeg $file -t 1 -y -qscale 10 -f s16le -i $pcm_src $file
377 do_ffmpeg_crc $file -i $file
378
379 # au
380 file=${outfile}libav.au
381 do_ffmpeg $file -t 1 -y -qscale 10 -f s16le -i $pcm_src $file
382 do_ffmpeg_crc $file -i $file
383
384 fi
385
386
387
388 if $diff_cmd $logfile $reffile ; then
389     echo 
390     echo Regression test succeeded.
391     exit 0
392 else
393     echo 
394     echo Regression test: Error.
395     exit 1
396 fi