tjbenchtest.in revision 7a6ed075ea161e35469b6fddb2608c4e5f1db396
1#!/bin/bash 2 3set -u 4set -e 5trap onexit INT 6trap onexit TERM 7trap onexit EXIT 8 9onexit() 10{ 11 if [ -d $OUTDIR ]; then 12 rm -rf $OUTDIR 13 fi 14} 15 16runme() 17{ 18 echo \*\*\* $* 19 $* 20} 21 22EXT=bmp 23IMAGES="vgl_5674_0098.${EXT} vgl_6434_0018a.${EXT} vgl_6548_0026a.${EXT} nightshot_iso_100.${EXT}" 24IMGDIR=@srcdir@/testimages 25OUTDIR=__tjbenchtest_output 26EXEDIR=. 27BMPARG= 28NSARG= 29YUVARG= 30if [ "$EXT" = "bmp" ]; then BMPARG=-bmp; fi 31 32if [ -d $OUTDIR ]; then 33 rm -rf $OUTDIR 34fi 35mkdir -p $OUTDIR 36 37exec >$EXEDIR/tjbenchtest.log 38 39if [ $# -gt 0 ]; then 40 if [ "$1" = "-yuv" ]; then 41 NSARG=-nosmooth 42 YUVARG=-yuv 43 44# NOTE: The combination of tjEncodeYUV*() and tjCompressFromYUV*() does not 45# always produce bitwise-identical results to tjCompress*() if subsampling is 46# enabled. In both cases, if the image width or height are not evenly 47# divisible by the MCU width/height, then the bottom and/or right edge are 48# expanded. However, the libjpeg code performs this expansion prior to 49# downsampling, and TurboJPEG performs it in tjCompressFromYUV*(), which is 50# after downsampling. Thus, the two will agree only if the width/height along 51# each downsampled dimension is an odd number or is evenly divisible by the MCU 52# width/height. This disagreement basically amounts to a round-off error, but 53# there is no easy way around it, so for now, we just test the only image that 54# works. (NOTE: nightshot_iso_100 does not suffer from the above issue, but 55# it suffers from an unrelated problem whereby the combination of 56# tjDecompressToYUV*() and tjDecodeYUV*() do not produce bitwise-identical 57# results to tjDecompress*() if decompression scaling is enabled. This latter 58# phenomenon is not yet fully understood but is also believed to be some sort 59# of round-off error.) 60 IMAGES="vgl_6548_0026a.${EXT}" 61 fi 62fi 63 64# Standard tests 65for image in $IMAGES; do 66 67 cp $IMGDIR/$image $OUTDIR 68 basename=`basename $image .${EXT}` 69 runme $EXEDIR/cjpeg -quality 95 -dct fast -grayscale -outfile $OUTDIR/${basename}_GRAY_fast_cjpeg.jpg $IMGDIR/${basename}.${EXT} 70 runme $EXEDIR/cjpeg -quality 95 -dct fast -sample 2x2 -outfile $OUTDIR/${basename}_420_fast_cjpeg.jpg $IMGDIR/${basename}.${EXT} 71 runme $EXEDIR/cjpeg -quality 95 -dct fast -sample 2x1 -outfile $OUTDIR/${basename}_422_fast_cjpeg.jpg $IMGDIR/${basename}.${EXT} 72 runme $EXEDIR/cjpeg -quality 95 -dct fast -sample 1x1 -outfile $OUTDIR/${basename}_444_fast_cjpeg.jpg $IMGDIR/${basename}.${EXT} 73 runme $EXEDIR/cjpeg -quality 95 -dct int -grayscale -outfile $OUTDIR/${basename}_GRAY_accurate_cjpeg.jpg $IMGDIR/${basename}.${EXT} 74 runme $EXEDIR/cjpeg -quality 95 -dct int -sample 2x2 -outfile $OUTDIR/${basename}_420_accurate_cjpeg.jpg $IMGDIR/${basename}.${EXT} 75 runme $EXEDIR/cjpeg -quality 95 -dct int -sample 2x1 -outfile $OUTDIR/${basename}_422_accurate_cjpeg.jpg $IMGDIR/${basename}.${EXT} 76 runme $EXEDIR/cjpeg -quality 95 -dct int -sample 1x1 -outfile $OUTDIR/${basename}_444_accurate_cjpeg.jpg $IMGDIR/${basename}.${EXT} 77 for samp in GRAY 420 422 444; do 78 runme $EXEDIR/djpeg -rgb $NSARG $BMPARG -outfile $OUTDIR/${basename}_${samp}_default_djpeg.${EXT} $OUTDIR/${basename}_${samp}_fast_cjpeg.jpg 79 runme $EXEDIR/djpeg -dct fast -rgb $NSARG $BMPARG -outfile $OUTDIR/${basename}_${samp}_fast_djpeg.${EXT} $OUTDIR/${basename}_${samp}_fast_cjpeg.jpg 80 runme $EXEDIR/djpeg -dct int -rgb $NSARG $BMPARG -outfile $OUTDIR/${basename}_${samp}_accurate_djpeg.${EXT} $OUTDIR/${basename}_${samp}_accurate_cjpeg.jpg 81 done 82 for samp in 420 422; do 83 runme $EXEDIR/djpeg -nosmooth $BMPARG -outfile $OUTDIR/${basename}_${samp}_default_nosmooth_djpeg.${EXT} $OUTDIR/${basename}_${samp}_fast_cjpeg.jpg 84 runme $EXEDIR/djpeg -dct fast -nosmooth $BMPARG -outfile $OUTDIR/${basename}_${samp}_fast_nosmooth_djpeg.${EXT} $OUTDIR/${basename}_${samp}_fast_cjpeg.jpg 85 runme $EXEDIR/djpeg -dct int -nosmooth $BMPARG -outfile $OUTDIR/${basename}_${samp}_accurate_nosmooth_djpeg.${EXT} $OUTDIR/${basename}_${samp}_accurate_cjpeg.jpg 86 done 87 88 # Compression 89 for dct in accurate fast; do 90 runme $EXEDIR/tjbench $OUTDIR/$image 95 -rgb -quiet -benchtime 0.01 -warmup 0 -${dct}dct $YUVARG 91 for samp in GRAY 420 422 444; do 92 runme cmp $OUTDIR/${basename}_${samp}_Q95.jpg $OUTDIR/${basename}_${samp}_${dct}_cjpeg.jpg 93 done 94 done 95 96 for dct in fast accurate default; do 97 dctarg=-${dct}dct 98 if [ "${dct}" = "default" ]; then 99 dctarg= 100 fi 101 102 # Tiled compression & decompression 103 runme $EXEDIR/tjbench $OUTDIR/$image 95 -rgb -tile -quiet -benchtime 0.01 -warmup 0 ${dctarg} $YUVARG 104 for samp in GRAY 444; do 105 for i in $OUTDIR/${basename}_${samp}_Q95_[0-9]*[0-9]x[0-9]*[0-9].${EXT} \ 106 $OUTDIR/${basename}_${samp}_Q95_full.${EXT}; do 107 runme cmp $i $OUTDIR/${basename}_${samp}_${dct}_djpeg.${EXT} 108 rm $i 109 done 110 done 111 runme $EXEDIR/tjbench $OUTDIR/$image 95 -rgb -tile -quiet -benchtime 0.01 -warmup 0 -fastupsample ${dctarg} $YUVARG 112 for samp in 420 422; do 113 for i in $OUTDIR/${basename}_${samp}_Q95_[0-9]*[0-9]x[0-9]*[0-9].${EXT} \ 114 $OUTDIR/${basename}_${samp}_Q95_full.${EXT}; do 115 runme cmp $i $OUTDIR/${basename}_${samp}_${dct}_nosmooth_djpeg.${EXT} 116 rm $i 117 done 118 done 119 120 # Tiled decompression 121 for samp in GRAY 444; do 122 runme $EXEDIR/tjbench $OUTDIR/${basename}_${samp}_Q95.jpg $BMPARG -tile -quiet -benchtime 0.01 -warmup 0 ${dctarg} $YUVARG 123 for i in $OUTDIR/${basename}_${samp}_Q95_[0-9]*[0-9]x[0-9]*[0-9].${EXT} \ 124 $OUTDIR/${basename}_${samp}_Q95_full.${EXT}; do 125 runme cmp $i $OUTDIR/${basename}_${samp}_${dct}_djpeg.${EXT} 126 rm $i 127 done 128 done 129 for samp in 420 422; do 130 runme $EXEDIR/tjbench $OUTDIR/${basename}_${samp}_Q95.jpg $BMPARG -tile -quiet -benchtime 0.01 -warmup 0 -fastupsample ${dctarg} $YUVARG 131 for i in $OUTDIR/${basename}_${samp}_Q95_[0-9]*[0-9]x[0-9]*[0-9].${EXT} \ 132 $OUTDIR/${basename}_${samp}_Q95_full.${EXT}; do 133 runme cmp $i $OUTDIR/${basename}_${samp}_${dct}_nosmooth_djpeg.${EXT} 134 rm $i 135 done 136 done 137 done 138 139 # Scaled decompression 140 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 141 scalearg=`echo $scale | sed s@_@/@g` 142 for samp in GRAY 420 422 444; do 143 runme $EXEDIR/djpeg -rgb -scale ${scalearg} $NSARG $BMPARG -outfile $OUTDIR/${basename}_${samp}_${scale}_djpeg.${EXT} $OUTDIR/${basename}_${samp}_fast_cjpeg.jpg 144 runme $EXEDIR/tjbench $OUTDIR/${basename}_${samp}_Q95.jpg $BMPARG -scale ${scalearg} -quiet -benchtime 0.01 -warmup 0 $YUVARG 145 runme cmp $OUTDIR/${basename}_${samp}_Q95_${scale}.${EXT} $OUTDIR/${basename}_${samp}_${scale}_djpeg.${EXT} 146 rm $OUTDIR/${basename}_${samp}_Q95_${scale}.${EXT} 147 done 148 done 149 150 # Transforms 151 for samp in GRAY 420 422 444; do 152 runme $EXEDIR/jpegtran -flip horizontal -trim -outfile $OUTDIR/${basename}_${samp}_hflip_jpegtran.jpg $OUTDIR/${basename}_${samp}_Q95.jpg 153 runme $EXEDIR/jpegtran -flip vertical -trim -outfile $OUTDIR/${basename}_${samp}_vflip_jpegtran.jpg $OUTDIR/${basename}_${samp}_Q95.jpg 154 runme $EXEDIR/jpegtran -transpose -trim -outfile $OUTDIR/${basename}_${samp}_transpose_jpegtran.jpg $OUTDIR/${basename}_${samp}_Q95.jpg 155 runme $EXEDIR/jpegtran -transverse -trim -outfile $OUTDIR/${basename}_${samp}_transverse_jpegtran.jpg $OUTDIR/${basename}_${samp}_Q95.jpg 156 runme $EXEDIR/jpegtran -rotate 90 -trim -outfile $OUTDIR/${basename}_${samp}_rot90_jpegtran.jpg $OUTDIR/${basename}_${samp}_Q95.jpg 157 runme $EXEDIR/jpegtran -rotate 180 -trim -outfile $OUTDIR/${basename}_${samp}_rot180_jpegtran.jpg $OUTDIR/${basename}_${samp}_Q95.jpg 158 runme $EXEDIR/jpegtran -rotate 270 -trim -outfile $OUTDIR/${basename}_${samp}_rot270_jpegtran.jpg $OUTDIR/${basename}_${samp}_Q95.jpg 159 done 160 for xform in hflip vflip transpose transverse rot90 rot180 rot270; do 161 for samp in GRAY 444; do 162 runme $EXEDIR/djpeg -rgb $BMPARG -outfile $OUTDIR/${basename}_${samp}_${xform}_jpegtran.${EXT} $OUTDIR/${basename}_${samp}_${xform}_jpegtran.jpg 163 runme $EXEDIR/tjbench $OUTDIR/${basename}_${samp}_Q95.jpg $BMPARG -$xform -tile -quiet -benchtime 0.01 -warmup 0 $YUVARG 164 for i in $OUTDIR/${basename}_${samp}_Q95_[0-9]*[0-9]x[0-9]*[0-9].${EXT} \ 165 $OUTDIR/${basename}_${samp}_Q95_full.${EXT}; do 166 runme cmp $i $OUTDIR/${basename}_${samp}_${xform}_jpegtran.${EXT} 167 rm $i 168 done 169 done 170 for samp in 420 422; do 171 runme $EXEDIR/djpeg -nosmooth -rgb $BMPARG -outfile $OUTDIR/${basename}_${samp}_${xform}_jpegtran.${EXT} $OUTDIR/${basename}_${samp}_${xform}_jpegtran.jpg 172 runme $EXEDIR/tjbench $OUTDIR/${basename}_${samp}_Q95.jpg $BMPARG -$xform -tile -quiet -benchtime 0.01 -warmup 0 -fastupsample $YUVARG 173 for i in $OUTDIR/${basename}_${samp}_Q95_[0-9]*[0-9]x[0-9]*[0-9].${EXT} \ 174 $OUTDIR/${basename}_${samp}_Q95_full.${EXT}; do 175 runme cmp $i $OUTDIR/${basename}_${samp}_${xform}_jpegtran.${EXT} 176 rm $i 177 done 178 done 179 done 180 181 # Grayscale transform 182 for xform in hflip vflip transpose transverse rot90 rot180 rot270; do 183 for samp in GRAY 444 422 420; do 184 runme $EXEDIR/tjbench $OUTDIR/${basename}_${samp}_Q95.jpg $BMPARG -$xform -tile -quiet -benchtime 0.01 -warmup 0 -grayscale $YUVARG 185 for i in $OUTDIR/${basename}_${samp}_Q95_[0-9]*[0-9]x[0-9]*[0-9].${EXT} \ 186 $OUTDIR/${basename}_${samp}_Q95_full.${EXT}; do 187 runme cmp $i $OUTDIR/${basename}_GRAY_${xform}_jpegtran.${EXT} 188 rm $i 189 done 190 done 191 done 192 193 # Transforms with scaling 194 for xform in hflip vflip transpose transverse rot90 rot180 rot270; do 195 for samp in GRAY 444 422 420; do 196 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 197 scalearg=`echo $scale | sed s@_@/@g` 198 runme $EXEDIR/djpeg -rgb -scale ${scalearg} $NSARG $BMPARG -outfile $OUTDIR/${basename}_${samp}_${xform}_${scale}_jpegtran.${EXT} $OUTDIR/${basename}_${samp}_${xform}_jpegtran.jpg 199 runme $EXEDIR/tjbench $OUTDIR/${basename}_${samp}_Q95.jpg $BMPARG -$xform -scale ${scalearg} -quiet -benchtime 0.01 -warmup 0 $YUVARG 200 runme cmp $OUTDIR/${basename}_${samp}_Q95_${scale}.${EXT} $OUTDIR/${basename}_${samp}_${xform}_${scale}_jpegtran.${EXT} 201 rm $OUTDIR/${basename}_${samp}_Q95_${scale}.${EXT} 202 done 203 done 204 done 205 206done 207 208echo SUCCESS! 209