Merge branch 'upstream' into tizen_base
[platform/upstream/libjpeg-turbo.git] / tjbenchtest.in
1 #!/bin/bash
2
3 set -u
4 set -e
5 trap onexit INT
6 trap onexit TERM
7 trap onexit EXIT
8
9 onexit()
10 {
11         if [ -d $OUTDIR ]; then
12                 rm -rf $OUTDIR
13         fi
14 }
15
16 runme()
17 {
18         echo \*\*\* $*
19         "$@"
20 }
21
22 EXT=bmp
23 IMAGES="vgl_5674_0098.${EXT} vgl_6434_0018a.${EXT} vgl_6548_0026a.${EXT} big_tree8.${EXT}"
24 IMGDIR=@CMAKE_CURRENT_SOURCE_DIR@/testimages
25 OUTDIR=`mktemp -d /tmp/__tjbenchtest_output.XXXXXX`
26 EXEDIR=@CMAKE_CURRENT_BINARY_DIR@
27 JAVA="@Java_JAVA_EXECUTABLE@"
28 JAVAARGS="-cp $EXEDIR/java/turbojpeg.jar -Djava.library.path=$EXEDIR"
29 TJBENCH=$EXEDIR/tjbench
30 BMPARG=
31 NSARG=
32 YUVARG=
33 ALLOC=0
34 ALLOCARG=
35 ENTROPYARG=
36 JAVAARG=
37 LOSSLSARG=
38 LOSSLSPSV=
39 TJQUAL=95
40 x1SUBSAMP="444 GRAY"
41 x24SUBSAMP="422 440 420 411 441"
42 ALLSUBSAMP="444 422 440 420 411 441 GRAY"
43 PRECISION=8
44 if [ "$EXT" = "bmp" ]; then BMPARG=-bmp; fi
45
46 if [ -d $OUTDIR ]; then
47         rm -rf $OUTDIR
48 fi
49 mkdir -p $OUTDIR
50
51 while [ $# -gt 0 ]; do
52         case "$1" in
53         -yuv)
54                 NSARG=-nosmooth
55                 YUVARG=-yuv
56
57 # NOTE: The combination of tj3EncodeYUV*() and tj3CompressFromYUV*() does not
58 # always produce bitwise-identical results to tj3Compress*() if subsampling is
59 # enabled.  In both cases, if the image width or height are not evenly
60 # divisible by the MCU width/height, then the bottom and/or right edge are
61 # expanded.  However, the libjpeg code performs this expansion prior to
62 # downsampling, and TurboJPEG performs it in tj3CompressFromYUV*(), which is
63 # after downsampling.  Thus, the two will agree only if the width/height along
64 # each downsampled dimension is an odd number or is evenly divisible by the MCU
65 # width/height.  This disagreement basically amounts to a round-off error, but
66 # there is no easy way around it, so for now, we just test the only image that
67 # works.  (NOTE: big_tree8 does not suffer from the above issue, but it suffers
68 # from an unrelated problem whereby the combination of tj3DecompressToYUV*()
69 # and tj3DecodeYUV*() do not produce bitwise-identical results to
70 # tj3Decompress*() if decompression scaling is enabled.  This latter phenomenon
71 # is not yet fully understood but is also believed to be some sort of round-off
72 # error.)
73                 IMAGES="vgl_6548_0026a.${EXT}"
74                 ;;
75         -alloc)
76                 ALLOCARG=-alloc
77                 ALLOC=1
78                 ;;
79         -java)
80                 JAVAARG=-java
81                 TJBENCH="$JAVA $JAVAARGS TJBench"
82                 ;;
83         -optimize)
84                 ENTROPYARG=-optimize
85                 ;;
86         -progressive)
87                 if [ "$ENTROPYARG" = "-arithmetic" ]; then
88                         ENTROPYARG=-progressive-arithmetic
89                 else
90                         ENTROPYARG=-progressive
91                 fi
92                 ;;
93         -arithmetic)
94                 if [ "$ENTROPYARG" = "-progressive" ]; then
95                         ENTROPYARG=-progressive-arithmetic
96                 else
97                         ENTROPYARG=-arithmetic
98                 fi
99                 ;;
100         -lossless)
101                 LOSSLSARG="-lossless"
102                 LOSSLSPSV=4
103                 TJQUAL=4
104                 x1SUBSAMP=444
105                 x24SUBSAMP=444
106                 ALLSUBSAMP=444
107                 ;;
108         -precision)
109                 shift
110                 PRECISION=$1
111                 if [ $PRECISION != 8 ]; then
112                         EXT=ppm
113                         IMAGES="big_building16.${EXT}"
114                         BMPARG=
115                 fi
116                 ;;
117         esac
118         shift
119 done
120
121 if [ $PRECISION = 8 -a "$YUVARG" = "" ]; then
122         if [ "$ENTROPYARG" = "-optimize" ]; then
123                 IMAGES="vgl_6434_0018a.${EXT}"
124         elif [ "$ENTROPYARG" = "-progressive" ]; then
125                 IMAGES="vgl_6548_0026a.${EXT}"
126         elif [ "$ENTROPYARG" = "-arithmetic" -o \
127                 "$ENTROPYARG" = "-progressive-arithmetic" ]; then
128                 IMAGES="big_tree8.${EXT}"
129         fi
130 fi
131
132 exec >$EXEDIR/tjbenchtest$JAVAARG$YUVARG$ALLOCARG$ENTROPYARG$LOSSLSARG-$PRECISION.log
133
134 if [ "$ENTROPYARG" = "-progressive-arithmetic" ]; then
135         ENTROPYARG="-progressive -arithmetic"
136 fi
137
138 # Standard tests
139 for image in $IMAGES; do
140
141         cp $IMGDIR/$image $OUTDIR
142         basename=`basename $image .${EXT}`
143         runme $EXEDIR/cjpeg -quality 95 -precision $PRECISION -dct fast $ENTROPYARG $LOSSLSARG $LOSSLSPSV -grayscale -outfile $OUTDIR/${basename}_GRAY_fast_cjpeg.jpg $IMGDIR/${basename}.${EXT}
144         runme $EXEDIR/cjpeg -quality 95 -precision $PRECISION -dct fast $ENTROPYARG $LOSSLSARG $LOSSLSPSV -sample 1x4 -outfile $OUTDIR/${basename}_441_fast_cjpeg.jpg $IMGDIR/${basename}.${EXT}
145         runme $EXEDIR/cjpeg -quality 95 -precision $PRECISION -dct fast $ENTROPYARG $LOSSLSARG $LOSSLSPSV -sample 4x1 -outfile $OUTDIR/${basename}_411_fast_cjpeg.jpg $IMGDIR/${basename}.${EXT}
146         runme $EXEDIR/cjpeg -quality 95 -precision $PRECISION -dct fast $ENTROPYARG $LOSSLSARG $LOSSLSPSV -sample 2x2 -outfile $OUTDIR/${basename}_420_fast_cjpeg.jpg $IMGDIR/${basename}.${EXT}
147         runme $EXEDIR/cjpeg -quality 95 -precision $PRECISION -dct fast $ENTROPYARG $LOSSLSARG $LOSSLSPSV -sample 1x2 -outfile $OUTDIR/${basename}_440_fast_cjpeg.jpg $IMGDIR/${basename}.${EXT}
148         runme $EXEDIR/cjpeg -quality 95 -precision $PRECISION -dct fast $ENTROPYARG $LOSSLSARG $LOSSLSPSV -sample 2x1 -outfile $OUTDIR/${basename}_422_fast_cjpeg.jpg $IMGDIR/${basename}.${EXT}
149         runme $EXEDIR/cjpeg -quality 95 -precision $PRECISION -dct fast $ENTROPYARG $LOSSLSARG $LOSSLSPSV -sample 1x1 -outfile $OUTDIR/${basename}_444_fast_cjpeg.jpg $IMGDIR/${basename}.${EXT}
150         runme $EXEDIR/cjpeg -quality 95 -precision $PRECISION -dct int $ENTROPYARG $LOSSLSARG $LOSSLSPSV -grayscale -outfile $OUTDIR/${basename}_GRAY_accurate_cjpeg.jpg $IMGDIR/${basename}.${EXT}
151         runme $EXEDIR/cjpeg -quality 95 -precision $PRECISION -dct int $ENTROPYARG $LOSSLSARG $LOSSLSPSV -sample 1x4 -outfile $OUTDIR/${basename}_441_accurate_cjpeg.jpg $IMGDIR/${basename}.${EXT}
152         runme $EXEDIR/cjpeg -quality 95 -precision $PRECISION -dct int $ENTROPYARG $LOSSLSARG $LOSSLSPSV -sample 4x1 -outfile $OUTDIR/${basename}_411_accurate_cjpeg.jpg $IMGDIR/${basename}.${EXT}
153         runme $EXEDIR/cjpeg -quality 95 -precision $PRECISION -dct int $ENTROPYARG $LOSSLSARG $LOSSLSPSV -sample 2x2 -outfile $OUTDIR/${basename}_420_accurate_cjpeg.jpg $IMGDIR/${basename}.${EXT}
154         runme $EXEDIR/cjpeg -quality 95 -precision $PRECISION -dct int $ENTROPYARG $LOSSLSARG $LOSSLSPSV -sample 1x2 -outfile $OUTDIR/${basename}_440_accurate_cjpeg.jpg $IMGDIR/${basename}.${EXT}
155         runme $EXEDIR/cjpeg -quality 95 -precision $PRECISION -dct int $ENTROPYARG $LOSSLSARG $LOSSLSPSV -sample 2x1 -outfile $OUTDIR/${basename}_422_accurate_cjpeg.jpg $IMGDIR/${basename}.${EXT}
156         runme $EXEDIR/cjpeg -quality 95 -precision $PRECISION -dct int $ENTROPYARG $LOSSLSARG $LOSSLSPSV -sample 1x1 -outfile $OUTDIR/${basename}_444_accurate_cjpeg.jpg $IMGDIR/${basename}.${EXT}
157         for samp in $ALLSUBSAMP; do
158                 runme $EXEDIR/djpeg -dct fast -rgb $NSARG $BMPARG -outfile $OUTDIR/${basename}_${samp}_fast_djpeg.${EXT} $OUTDIR/${basename}_${samp}_fast_cjpeg.jpg
159                 runme $EXEDIR/djpeg -dct int -rgb $NSARG $BMPARG -outfile $OUTDIR/${basename}_${samp}_accurate_djpeg.${EXT} $OUTDIR/${basename}_${samp}_accurate_cjpeg.jpg
160         done
161         for samp in $x24SUBSAMP; do
162                 runme $EXEDIR/djpeg -dct fast -nosmooth $BMPARG -outfile $OUTDIR/${basename}_${samp}_fast_nosmooth_djpeg.${EXT} $OUTDIR/${basename}_${samp}_fast_cjpeg.jpg
163                 runme $EXEDIR/djpeg -dct int -nosmooth $BMPARG -outfile $OUTDIR/${basename}_${samp}_accurate_nosmooth_djpeg.${EXT} $OUTDIR/${basename}_${samp}_accurate_cjpeg.jpg
164         done
165
166         # Compression
167         for dct in accurate fast; do
168                 dctarg=
169                 if [ "${dct}" = "fast" ]; then
170                         dctarg=-fastdct
171                 fi
172                 runme $TJBENCH $OUTDIR/$image $TJQUAL -precision $PRECISION -rgb -quiet -benchtime 0.01 -warmup 0 ${dctarg} $YUVARG $ALLOCARG $ENTROPYARG $LOSSLSARG
173                 if [ "$LOSSLSARG" != "-lossless" ]; then
174                         runme $TJBENCH $OUTDIR/$image $TJQUAL -precision $PRECISION -subsamp 440 -rgb -quiet -benchtime 0.01 -warmup 0 ${dctarg} $YUVARG $ALLOCARG $ENTROPYARG $LOSSLSARG
175                         runme $TJBENCH $OUTDIR/$image $TJQUAL -precision $PRECISION -subsamp 411 -rgb -quiet -benchtime 0.01 -warmup 0 ${dctarg} $YUVARG $ALLOCARG $ENTROPYARG $LOSSLSARG
176                         runme $TJBENCH $OUTDIR/$image $TJQUAL -precision $PRECISION -subsamp 441 -rgb -quiet -benchtime 0.01 -warmup 0 ${dctarg} $YUVARG $ALLOCARG $ENTROPYARG $LOSSLSARG
177                 fi
178                 for samp in $ALLSUBSAMP; do
179                         if [ "$LOSSLSARG" = "-lossless" ]; then
180                                 runme cmp $OUTDIR/${basename}_LOSSLS_PSV${TJQUAL}.jpg $OUTDIR/${basename}_${samp}_${dct}_cjpeg.jpg
181                         else
182                                 runme cmp $OUTDIR/${basename}_${samp}_Q${TJQUAL}.jpg $OUTDIR/${basename}_${samp}_${dct}_cjpeg.jpg
183                         fi
184                 done
185         done
186
187         for dct in fast accurate; do
188                 dctarg=
189                 if [ "${dct}" = "fast" ]; then
190                         dctarg=-fastdct
191                 fi
192
193                 # Tiled compression & decompression
194                 runme $TJBENCH $OUTDIR/$image $TJQUAL -precision $PRECISION -rgb -tile -quiet -benchtime 0.01 -warmup 0 ${dctarg} $YUVARG $ALLOCARG $ENTROPYARG $LOSSLSARG
195                 for samp in $x1SUBSAMP; do
196                         if [ $ALLOC = 1 ]; then
197                                 if [ "$LOSSLSARG" = "-lossless" ]; then
198                                         runme cmp $OUTDIR/${basename}_LOSSLS_PSV${TJQUAL}_full.${EXT} $OUTDIR/${basename}_${samp}_${dct}_djpeg.${EXT}
199                                         rm $OUTDIR/${basename}_LOSSLS_PSV${TJQUAL}_full.${EXT}
200                                 else
201                                         runme cmp $OUTDIR/${basename}_${samp}_Q${TJQUAL}_full.${EXT} $OUTDIR/${basename}_${samp}_${dct}_djpeg.${EXT}
202                                         rm $OUTDIR/${basename}_${samp}_Q${TJQUAL}_full.${EXT}
203                                 fi
204                         else
205                                 if [ "$LOSSLSARG" = "-lossless" ]; then
206                                         for i in $OUTDIR/${basename}_LOSSLS_PSV${TJQUAL}_[0-9]*x[0-9]*.${EXT} \
207                                                 $OUTDIR/${basename}_LOSSLS_PSV${TJQUAL}_full.${EXT}; do
208                                                 runme cmp $i $OUTDIR/${basename}_${samp}_${dct}_djpeg.${EXT}
209                                                 rm $i
210                                         done
211                                 else
212                                         for i in $OUTDIR/${basename}_${samp}_Q${TJQUAL}_[0-9]*x[0-9]*.${EXT} \
213                                                 $OUTDIR/${basename}_${samp}_Q${TJQUAL}_full.${EXT}; do
214                                                 runme cmp $i $OUTDIR/${basename}_${samp}_${dct}_djpeg.${EXT}
215                                                 rm $i
216                                         done
217                                 fi
218                         fi
219                 done
220                 runme $TJBENCH $OUTDIR/$image $TJQUAL -precision $PRECISION -rgb -tile -quiet -benchtime 0.01 -warmup 0 -fastupsample ${dctarg} $YUVARG $ALLOCARG $ENTROPYARG $LOSSLSARG
221                 if [ "$LOSSLSARG" != "-lossless" ]; then
222                         runme $TJBENCH $OUTDIR/$image $TJQUAL -precision $PRECISION -subsamp 440 -rgb -tile -quiet -benchtime 0.01 -warmup 0 -fastupsample ${dctarg} $YUVARG $ALLOCARG $ENTROPYARG $LOSSLSARG
223                         runme $TJBENCH $OUTDIR/$image $TJQUAL -precision $PRECISION -subsamp 411 -rgb -tile -quiet -benchtime 0.01 -warmup 0 -fastupsample ${dctarg} $YUVARG $ALLOCARG $ENTROPYARG $LOSSLSARG
224                         runme $TJBENCH $OUTDIR/$image $TJQUAL -precision $PRECISION -subsamp 441 -rgb -tile -quiet -benchtime 0.01 -warmup 0 -fastupsample ${dctarg} $YUVARG $ALLOCARG $ENTROPYARG $LOSSLSARG
225                 fi
226                 for samp in $x24SUBSAMP; do
227                         if [ $ALLOC = 1 ]; then
228                                 if [ "$LOSSLSARG" = "-lossless" ]; then
229                                         runme cmp $OUTDIR/${basename}_LOSSLS_PSV${TJQUAL}_full.${EXT} $OUTDIR/${basename}_${samp}_${dct}_nosmooth_djpeg.${EXT}
230                                         rm $OUTDIR/${basename}_LOSSLS_PSV${TJQUAL}_full.${EXT}
231                                 else
232                                         runme cmp $OUTDIR/${basename}_${samp}_Q${TJQUAL}_full.${EXT} $OUTDIR/${basename}_${samp}_${dct}_nosmooth_djpeg.${EXT}
233                                         rm $OUTDIR/${basename}_${samp}_Q${TJQUAL}_full.${EXT}
234                                 fi
235                         else
236                                 if [ "$LOSSLSARG" = "-lossless" ]; then
237                                         for i in $OUTDIR/${basename}_LOSSLS_PSV${TJQUAL}_[0-9]*x[0-9]*.${EXT} \
238                                                 $OUTDIR/${basename}_LOSSLS_PSV${TJQUAL}_full.${EXT}; do
239                                                 runme cmp $i $OUTDIR/${basename}_${samp}_${dct}_nosmooth_djpeg.${EXT}
240                                                 rm $i
241                                         done
242                                 else
243                                         for i in $OUTDIR/${basename}_${samp}_Q${TJQUAL}_[0-9]*x[0-9]*.${EXT} \
244                                                 $OUTDIR/${basename}_${samp}_Q${TJQUAL}_full.${EXT}; do
245                                                 # If the tile size is smaller than the MCU size, then there will be
246                                                 # edge artifacts at the tile boundaries, so the decompressed image
247                                                 # will not be identical to the untiled decompressed image.
248                                                 TILESIZE=$(basename $(echo $i | sed 's/.*_//g') .${EXT})
249                                                 if [ "$TILESIZE" = "8x8" ]; then
250                                                         continue
251                                                 fi
252                                                 if [ "$TILESIZE" = "16x16" -a \
253                                                         \( "${samp}" = "411" -o "${samp}" = "441" \) ]; then
254                                                         continue
255                                                 fi
256                                                 runme cmp $i $OUTDIR/${basename}_${samp}_${dct}_nosmooth_djpeg.${EXT}
257                                                 rm $i
258                                         done
259                                 fi
260                         fi
261                 done
262
263                 # Tiled decompression
264                 if [ "$LOSSLSARG" != "-lossless" ]; then
265                         for samp in $x1SUBSAMP; do
266                                 runme $TJBENCH $OUTDIR/${basename}_${samp}_Q95.jpg $BMPARG -tile -quiet -benchtime 0.01 -warmup 0 ${dctarg} $YUVARG $ALLOCARG $ENTROPYARG
267                                 if [ $ALLOC = 1 ]; then
268                                         runme cmp $OUTDIR/${basename}_${samp}_Q95_full.${EXT} $OUTDIR/${basename}_${samp}_${dct}_djpeg.${EXT}
269                                         rm $OUTDIR/${basename}_${samp}_Q95_full.${EXT}
270                                 else
271                                         for i in $OUTDIR/${basename}_${samp}_Q95_[0-9]*x[0-9]*.${EXT} \
272                                                 $OUTDIR/${basename}_${samp}_Q95_full.${EXT}; do
273                                                 runme cmp $i $OUTDIR/${basename}_${samp}_${dct}_djpeg.${EXT}
274                                                 rm $i
275                                         done
276                                 fi
277                         done
278                         for samp in $x24SUBSAMP; do
279                                 runme $TJBENCH $OUTDIR/${basename}_${samp}_Q95.jpg $BMPARG -tile -quiet -benchtime 0.01 -warmup 0 -fastupsample ${dctarg} $YUVARG $ALLOCARG $ENTROPYARG
280                                 if [ $ALLOC = 1 ]; then
281                                         runme cmp $OUTDIR/${basename}_${samp}_Q95_full.${EXT} $OUTDIR/${basename}_${samp}_${dct}_nosmooth_djpeg.${EXT}
282                                         rm $OUTDIR/${basename}_${samp}_Q95_full.${EXT}
283                                 else
284                                         for i in $OUTDIR/${basename}_${samp}_Q95_[0-9]*x[0-9]*.${EXT} \
285                                                 $OUTDIR/${basename}_${samp}_Q95_full.${EXT}; do
286                                                 TILESIZE=$(basename $(echo $i | sed 's/.*_//g') .${EXT})
287                                                 if [ "$TILESIZE" = "8x8" ]; then
288                                                         continue
289                                                 fi
290                                                 if [ "$TILESIZE" = "16x16" -a \
291                                                         \( "${samp}" = "411" -o "${samp}" = "441" \) ]; then
292                                                         continue
293                                                 fi
294                                                 runme cmp $i $OUTDIR/${basename}_${samp}_${dct}_nosmooth_djpeg.${EXT}
295                                                 rm $i
296                                         done
297                                 fi
298                         done
299                 fi
300         done
301
302         # Partial decompression
303         if [ "$LOSSLSARG" != "-lossless" -a "$YUVARG" != "-yuv" ]; then
304                 for samp in $ALLSUBSAMP; do
305                         CROPW8_8=103
306                         CROPL8_8=16
307                         CROPW7_8=91
308                         CROPL7_8=14
309                         if [ "${samp}" = "411" ]; then
310                                 CROPW8_8=87
311                                 CROPL8_8=32
312                                 CROPW7_8=77
313                                 CROPL7_8=28
314                         fi
315                         runme $EXEDIR/djpeg -rgb -crop ${CROPW8_8}x90+${CROPL8_8}+5 $NSARG -outfile $OUTDIR/${basename}_${samp}_scale_crop_djpeg.ppm $OUTDIR/${basename}_${samp}_accurate_cjpeg.jpg
316                         runme $TJBENCH $OUTDIR/${basename}_${samp}_Q${TJQUAL}.jpg -crop ${CROPW8_8}x90+${CROPL8_8}+5 -quiet -benchtime 0.01 -warmup 0 ${dctarg} $YUVARG $ALLOCARG $ENTROPYARG $LOSSLSARG
317                         runme cmp $OUTDIR/${basename}_${samp}_Q${TJQUAL}_full.ppm $OUTDIR/${basename}_${samp}_scale_crop_djpeg.ppm
318                         rm $OUTDIR/${basename}_${samp}_Q${TJQUAL}_full.ppm $OUTDIR/${basename}_${samp}_scale_crop_djpeg.ppm
319
320                         runme $EXEDIR/djpeg -rgb -scale 7/8 -crop ${CROPW7_8}x81+${CROPL7_8}+3 $NSARG -outfile $OUTDIR/${basename}_${samp}_scale_crop_djpeg.ppm $OUTDIR/${basename}_${samp}_accurate_cjpeg.jpg
321                         runme $TJBENCH $OUTDIR/${basename}_${samp}_Q${TJQUAL}.jpg -scale 7/8 -crop ${CROPW7_8}x81+${CROPL7_8}+3 -quiet -benchtime 0.01 -warmup 0 ${dctarg} $YUVARG $ALLOCARG $ENTROPYARG $LOSSLSARG
322                         runme cmp $OUTDIR/${basename}_${samp}_Q${TJQUAL}_7_8.ppm $OUTDIR/${basename}_${samp}_scale_crop_djpeg.ppm
323                         rm $OUTDIR/${basename}_${samp}_Q${TJQUAL}_7_8.ppm $OUTDIR/${basename}_${samp}_scale_crop_djpeg.ppm
324
325                         runme $EXEDIR/djpeg -rgb -scale 1/2 -crop 40x40+0+0 $NSARG -outfile $OUTDIR/${basename}_${samp}_scale_crop_djpeg.ppm $OUTDIR/${basename}_${samp}_accurate_cjpeg.jpg
326                         runme $TJBENCH $OUTDIR/${basename}_${samp}_Q${TJQUAL}.jpg -scale 1/2 -crop 40x40+0+0 -quiet -benchtime 0.01 -warmup 0 ${dctarg} $YUVARG $ALLOCARG $ENTROPYARG $LOSSLSARG
327                         runme cmp $OUTDIR/${basename}_${samp}_Q${TJQUAL}_1_2.ppm $OUTDIR/${basename}_${samp}_scale_crop_djpeg.ppm
328                         rm $OUTDIR/${basename}_${samp}_Q${TJQUAL}_1_2.ppm $OUTDIR/${basename}_${samp}_scale_crop_djpeg.ppm
329                 done
330         fi
331
332         # Scaled decompression
333         for scale in 2_1 15_8 7_4 13_8 3_2 11_8 5_4 9_8 7_8 3_4 5_8 1_2 3_8 1_4 1_8; do
334                 scalearg=`echo $scale | sed 's/\_/\//g'`
335                 SCALE=$scale
336                 if [ "$LOSSLSARG" = "-lossless" ]; then
337                         SCALE=full
338                 fi
339                 for samp in $ALLSUBSAMP; do
340                         runme $EXEDIR/djpeg -rgb -scale ${scalearg} $NSARG $BMPARG -outfile $OUTDIR/${basename}_${samp}_${scale}_djpeg.${EXT} $OUTDIR/${basename}_${samp}_accurate_cjpeg.jpg
341                         if [ "$LOSSLSARG" = "-lossless" ]; then
342                                 runme $TJBENCH $OUTDIR/${basename}_LOSSLS_PSV${TJQUAL}.jpg $BMPARG -scale ${scalearg} -quiet -benchtime 0.01 -warmup 0 $YUVARG $ALLOCARG $ENTROPYARG $LOSSLSARG
343                                 runme cmp $OUTDIR/${basename}_LOSSLS_PSV${TJQUAL}_${SCALE}.${EXT} $OUTDIR/${basename}_${samp}_${scale}_djpeg.${EXT}
344                                 rm $OUTDIR/${basename}_LOSSLS_PSV${TJQUAL}_${SCALE}.${EXT}
345                         else
346                                 runme $TJBENCH $OUTDIR/${basename}_${samp}_Q${TJQUAL}.jpg $BMPARG -scale ${scalearg} -quiet -benchtime 0.01 -warmup 0 $YUVARG $ALLOCARG $ENTROPYARG $LOSSLSARG
347                                 runme cmp $OUTDIR/${basename}_${samp}_Q${TJQUAL}_${SCALE}.${EXT} $OUTDIR/${basename}_${samp}_${scale}_djpeg.${EXT}
348                                 rm $OUTDIR/${basename}_${samp}_Q${TJQUAL}_${SCALE}.${EXT}
349                         fi
350                 done
351         done
352
353         # Transforms
354         if [ "$LOSSLSARG" != "-lossless" ]; then
355                 for samp in $ALLSUBSAMP; do
356                         runme $EXEDIR/jpegtran -flip horizontal -trim -outfile $OUTDIR/${basename}_${samp}_hflip_jpegtran.jpg $OUTDIR/${basename}_${samp}_Q95.jpg
357                         runme $EXEDIR/jpegtran -flip vertical -trim -outfile $OUTDIR/${basename}_${samp}_vflip_jpegtran.jpg $OUTDIR/${basename}_${samp}_Q95.jpg
358                         runme $EXEDIR/jpegtran -transpose -trim -outfile $OUTDIR/${basename}_${samp}_transpose_jpegtran.jpg $OUTDIR/${basename}_${samp}_Q95.jpg
359                         runme $EXEDIR/jpegtran -transverse -trim -outfile $OUTDIR/${basename}_${samp}_transverse_jpegtran.jpg $OUTDIR/${basename}_${samp}_Q95.jpg
360                         runme $EXEDIR/jpegtran -rotate 90 -trim -outfile $OUTDIR/${basename}_${samp}_rot90_jpegtran.jpg $OUTDIR/${basename}_${samp}_Q95.jpg
361                         runme $EXEDIR/jpegtran -rotate 180 -trim -outfile $OUTDIR/${basename}_${samp}_rot180_jpegtran.jpg $OUTDIR/${basename}_${samp}_Q95.jpg
362                         runme $EXEDIR/jpegtran -rotate 270 -trim -outfile $OUTDIR/${basename}_${samp}_rot270_jpegtran.jpg $OUTDIR/${basename}_${samp}_Q95.jpg
363                 done
364                 for xform in hflip vflip transpose transverse rot90 rot180 rot270; do
365                         for samp in $x1SUBSAMP; do
366                                 runme $EXEDIR/djpeg -rgb $BMPARG -outfile $OUTDIR/${basename}_${samp}_${xform}_jpegtran.${EXT} $OUTDIR/${basename}_${samp}_${xform}_jpegtran.jpg
367                                 runme $TJBENCH $OUTDIR/${basename}_${samp}_Q95.jpg $BMPARG -$xform -tile -quiet -benchtime 0.01 -warmup 0 $YUVARG $ALLOCARG $ENTROPYARG
368                                 if [ $ALLOC = 1 ]; then
369                                         runme cmp $OUTDIR/${basename}_${samp}_Q95_full.${EXT} $OUTDIR/${basename}_${samp}_${xform}_jpegtran.${EXT}
370                                         rm $OUTDIR/${basename}_${samp}_Q95_full.${EXT}
371                                 else
372                                         for i in $OUTDIR/${basename}_${samp}_Q95_[0-9]*x[0-9]*.${EXT} \
373                                                 $OUTDIR/${basename}_${samp}_Q95_full.${EXT}; do
374                                                 runme cmp $i $OUTDIR/${basename}_${samp}_${xform}_jpegtran.${EXT}
375                                                 rm $i
376                                         done
377                                 fi
378                         done
379                         for samp in $x24SUBSAMP; do
380                                 runme $EXEDIR/djpeg -nosmooth -rgb $BMPARG -outfile $OUTDIR/${basename}_${samp}_${xform}_jpegtran.${EXT} $OUTDIR/${basename}_${samp}_${xform}_jpegtran.jpg
381                                 runme $TJBENCH $OUTDIR/${basename}_${samp}_Q95.jpg $BMPARG -$xform -tile -quiet -benchtime 0.01 -warmup 0 -fastupsample $YUVARG $ALLOCARG $ENTROPYARG
382                                 if [ $ALLOC = 1 ]; then
383                                         runme cmp $OUTDIR/${basename}_${samp}_Q95_full.${EXT} $OUTDIR/${basename}_${samp}_${xform}_jpegtran.${EXT}
384                                         rm $OUTDIR/${basename}_${samp}_Q95_full.${EXT}
385                                 else
386                                         for i in $OUTDIR/${basename}_${samp}_Q95_[0-9]*x[0-9]*.${EXT} \
387                                                 $OUTDIR/${basename}_${samp}_Q95_full.${EXT}; do
388                                                 TILESIZE=$(basename $(echo $i | sed 's/.*_//g') .${EXT})
389                                                 if [ "$TILESIZE" = "8x8" ]; then
390                                                         continue
391                                                 fi
392                                                 if [ "$TILESIZE" = "16x16" -a \
393                                                         \( "${samp}" = "411" -o "${samp}" = "441" \) ]; then
394                                                         continue
395                                                 fi
396                                                 runme cmp $i $OUTDIR/${basename}_${samp}_${xform}_jpegtran.${EXT}
397                                                 rm $i
398                                         done
399                                 fi
400                         done
401                 done
402
403                 # Grayscale transform
404                 for xform in hflip vflip transpose transverse rot90 rot180 rot270; do
405                         for samp in $ALLSUBSAMP; do
406                                 runme $TJBENCH $OUTDIR/${basename}_${samp}_Q95.jpg $BMPARG -$xform -tile -quiet -benchtime 0.01 -warmup 0 -grayscale $YUVARG $ALLOCARG $ENTROPYARG
407                                 if [ $ALLOC = 1 ]; then
408                                         runme cmp $OUTDIR/${basename}_${samp}_Q95_full.${EXT} $OUTDIR/${basename}_GRAY_${xform}_jpegtran.${EXT}
409                                         rm $OUTDIR/${basename}_${samp}_Q95_full.${EXT}
410                                 else
411                                         for i in $OUTDIR/${basename}_${samp}_Q95_[0-9]*x[0-9]*.${EXT} \
412                                                 $OUTDIR/${basename}_${samp}_Q95_full.${EXT}; do
413                                                 TILESIZE=$(basename $(echo $i | sed 's/.*_//g') .${EXT})
414                                                 if [ "$TILESIZE" = "8x8" -a \
415                                                         "${samp}" != "444" -a "${samp}" != "GRAY" ]; then
416                                                         continue
417                                                 fi
418                                                 if [ "$TILESIZE" = "16x16" -a \
419                                                         \( "${samp}" = "411" -o "${samp}" = "441" \) ]; then
420                                                         continue
421                                                 fi
422                                                 runme cmp $i $OUTDIR/${basename}_GRAY_${xform}_jpegtran.${EXT}
423                                                 rm $i
424                                         done
425                                 fi
426                         done
427                 done
428
429                 # Transforms with scaling
430                 for xform in hflip vflip transpose transverse rot90 rot180 rot270; do
431                         for samp in $ALLSUBSAMP; do
432                                 for scale in 2_1 15_8 7_4 13_8 3_2 11_8 5_4 9_8 7_8 3_4 5_8 1_2 3_8 1_4 1_8; do
433                                         scalearg=`echo $scale | sed 's/\_/\//g'`
434                                         runme $EXEDIR/djpeg -rgb -scale ${scalearg} $NSARG $BMPARG -outfile $OUTDIR/${basename}_${samp}_${xform}_${scale}_jpegtran.${EXT} $OUTDIR/${basename}_${samp}_${xform}_jpegtran.jpg
435                                         runme $TJBENCH $OUTDIR/${basename}_${samp}_Q95.jpg $BMPARG -$xform -scale ${scalearg} -quiet -benchtime 0.01 -warmup 0 $YUVARG $ALLOCARG $ENTROPYARG
436                                         runme cmp $OUTDIR/${basename}_${samp}_Q95_${scale}.${EXT} $OUTDIR/${basename}_${samp}_${xform}_${scale}_jpegtran.${EXT}
437                                         rm $OUTDIR/${basename}_${samp}_Q95_${scale}.${EXT}
438                                 done
439                         done
440                 done
441         fi
442
443 done
444
445 echo SUCCESS!