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