tjbenchtest.in 11 KB

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