For reasons I can't recall, fc01f4673b
(the TurboJPEG 3 API overhaul) changed the C version of TJBench, but not
the Java version, so that it requires an exact scaling factor match (as
opposed to allowing unreduced scaling factors, as djpeg does and prior
versions of TJBench did.) That might have been temporary testing code
that was accidentally committed.
446 lines
20 KiB
Bash
Executable File
446 lines
20 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
set -u
|
|
set -e
|
|
trap onexit INT
|
|
trap onexit TERM
|
|
trap onexit EXIT
|
|
|
|
onexit()
|
|
{
|
|
if [ -d $OUTDIR ]; then
|
|
rm -rf $OUTDIR
|
|
fi
|
|
}
|
|
|
|
runme()
|
|
{
|
|
echo \*\*\* $*
|
|
"$@"
|
|
}
|
|
|
|
EXT=bmp
|
|
IMAGES="vgl_5674_0098.${EXT} vgl_6434_0018a.${EXT} vgl_6548_0026a.${EXT} big_tree8.${EXT}"
|
|
IMGDIR=@CMAKE_CURRENT_SOURCE_DIR@/testimages
|
|
OUTDIR=`mktemp -d /tmp/__tjbenchtest_output.XXXXXX`
|
|
EXEDIR=@CMAKE_CURRENT_BINARY_DIR@
|
|
JAVA="@Java_JAVA_EXECUTABLE@"
|
|
JAVAARGS="-cp $EXEDIR/java/turbojpeg.jar -Djava.library.path=$EXEDIR"
|
|
TJBENCH=$EXEDIR/tjbench
|
|
BMPARG=
|
|
NSARG=
|
|
YUVARG=
|
|
ALLOC=0
|
|
ALLOCARG=
|
|
ENTROPYARG=
|
|
JAVAARG=
|
|
LOSSLSARG=
|
|
LOSSLSPSV=
|
|
TJQUAL=95
|
|
x1SUBSAMP="444 GRAY"
|
|
x24SUBSAMP="422 440 420 411 441"
|
|
ALLSUBSAMP="444 422 440 420 411 441 GRAY"
|
|
PRECISION=8
|
|
if [ "$EXT" = "bmp" ]; then BMPARG=-bmp; fi
|
|
|
|
if [ -d $OUTDIR ]; then
|
|
rm -rf $OUTDIR
|
|
fi
|
|
mkdir -p $OUTDIR
|
|
|
|
while [ $# -gt 0 ]; do
|
|
case "$1" in
|
|
-yuv)
|
|
NSARG=-nosmooth
|
|
YUVARG=-yuv
|
|
|
|
# NOTE: The combination of tj3EncodeYUV*() and tj3CompressFromYUV*() does not
|
|
# always produce bitwise-identical results to tj3Compress*() if subsampling is
|
|
# enabled. In both cases, if the image width or height are not evenly
|
|
# divisible by the MCU width/height, then the bottom and/or right edge are
|
|
# expanded. However, the libjpeg code performs this expansion prior to
|
|
# downsampling, and TurboJPEG performs it in tj3CompressFromYUV*(), which is
|
|
# after downsampling. Thus, the two will agree only if the width/height along
|
|
# each downsampled dimension is an odd number or is evenly divisible by the MCU
|
|
# width/height. This disagreement basically amounts to a round-off error, but
|
|
# there is no easy way around it, so for now, we just test the only image that
|
|
# works. (NOTE: big_tree8 does not suffer from the above issue, but it suffers
|
|
# from an unrelated problem whereby the combination of tj3DecompressToYUV*()
|
|
# and tj3DecodeYUV*() do not produce bitwise-identical results to
|
|
# tj3Decompress*() if decompression scaling is enabled. This latter phenomenon
|
|
# is not yet fully understood but is also believed to be some sort of round-off
|
|
# error.)
|
|
IMAGES="vgl_6548_0026a.${EXT}"
|
|
;;
|
|
-alloc)
|
|
ALLOCARG=-alloc
|
|
ALLOC=1
|
|
;;
|
|
-java)
|
|
JAVAARG=-java
|
|
TJBENCH="$JAVA $JAVAARGS TJBench"
|
|
;;
|
|
-optimize)
|
|
ENTROPYARG=-optimize
|
|
;;
|
|
-progressive)
|
|
if [ "$ENTROPYARG" = "-arithmetic" ]; then
|
|
ENTROPYARG=-progressive-arithmetic
|
|
else
|
|
ENTROPYARG=-progressive
|
|
fi
|
|
;;
|
|
-arithmetic)
|
|
if [ "$ENTROPYARG" = "-progressive" ]; then
|
|
ENTROPYARG=-progressive-arithmetic
|
|
else
|
|
ENTROPYARG=-arithmetic
|
|
fi
|
|
;;
|
|
-lossless)
|
|
LOSSLSARG="-lossless"
|
|
LOSSLSPSV=4
|
|
TJQUAL=4
|
|
x1SUBSAMP=444
|
|
x24SUBSAMP=444
|
|
ALLSUBSAMP=444
|
|
;;
|
|
-precision)
|
|
shift
|
|
PRECISION=$1
|
|
if [ $PRECISION != 8 ]; then
|
|
EXT=ppm
|
|
IMAGES="big_building16.${EXT}"
|
|
BMPARG=
|
|
fi
|
|
;;
|
|
esac
|
|
shift
|
|
done
|
|
|
|
if [ $PRECISION = 8 -a "$YUVARG" = "" ]; then
|
|
if [ "$ENTROPYARG" = "-optimize" ]; then
|
|
IMAGES="vgl_6434_0018a.${EXT}"
|
|
elif [ "$ENTROPYARG" = "-progressive" ]; then
|
|
IMAGES="vgl_6548_0026a.${EXT}"
|
|
elif [ "$ENTROPYARG" = "-arithmetic" -o \
|
|
"$ENTROPYARG" = "-progressive-arithmetic" ]; then
|
|
IMAGES="big_tree8.${EXT}"
|
|
fi
|
|
fi
|
|
|
|
exec >$EXEDIR/tjbenchtest$JAVAARG$YUVARG$ALLOCARG$ENTROPYARG$LOSSLSARG-$PRECISION.log
|
|
|
|
if [ "$ENTROPYARG" = "-progressive-arithmetic" ]; then
|
|
ENTROPYARG="-progressive -arithmetic"
|
|
fi
|
|
|
|
# Standard tests
|
|
for image in $IMAGES; do
|
|
|
|
cp $IMGDIR/$image $OUTDIR
|
|
basename=`basename $image .${EXT}`
|
|
runme $EXEDIR/cjpeg -quality 95 -precision $PRECISION -dct fast $ENTROPYARG $LOSSLSARG $LOSSLSPSV -grayscale -outfile $OUTDIR/${basename}_GRAY_fast_cjpeg.jpg $IMGDIR/${basename}.${EXT}
|
|
runme $EXEDIR/cjpeg -quality 95 -precision $PRECISION -dct fast $ENTROPYARG $LOSSLSARG $LOSSLSPSV -sample 1x4 -outfile $OUTDIR/${basename}_441_fast_cjpeg.jpg $IMGDIR/${basename}.${EXT}
|
|
runme $EXEDIR/cjpeg -quality 95 -precision $PRECISION -dct fast $ENTROPYARG $LOSSLSARG $LOSSLSPSV -sample 4x1 -outfile $OUTDIR/${basename}_411_fast_cjpeg.jpg $IMGDIR/${basename}.${EXT}
|
|
runme $EXEDIR/cjpeg -quality 95 -precision $PRECISION -dct fast $ENTROPYARG $LOSSLSARG $LOSSLSPSV -sample 2x2 -outfile $OUTDIR/${basename}_420_fast_cjpeg.jpg $IMGDIR/${basename}.${EXT}
|
|
runme $EXEDIR/cjpeg -quality 95 -precision $PRECISION -dct fast $ENTROPYARG $LOSSLSARG $LOSSLSPSV -sample 1x2 -outfile $OUTDIR/${basename}_440_fast_cjpeg.jpg $IMGDIR/${basename}.${EXT}
|
|
runme $EXEDIR/cjpeg -quality 95 -precision $PRECISION -dct fast $ENTROPYARG $LOSSLSARG $LOSSLSPSV -sample 2x1 -outfile $OUTDIR/${basename}_422_fast_cjpeg.jpg $IMGDIR/${basename}.${EXT}
|
|
runme $EXEDIR/cjpeg -quality 95 -precision $PRECISION -dct fast $ENTROPYARG $LOSSLSARG $LOSSLSPSV -sample 1x1 -outfile $OUTDIR/${basename}_444_fast_cjpeg.jpg $IMGDIR/${basename}.${EXT}
|
|
runme $EXEDIR/cjpeg -quality 95 -precision $PRECISION -dct int $ENTROPYARG $LOSSLSARG $LOSSLSPSV -grayscale -outfile $OUTDIR/${basename}_GRAY_accurate_cjpeg.jpg $IMGDIR/${basename}.${EXT}
|
|
runme $EXEDIR/cjpeg -quality 95 -precision $PRECISION -dct int $ENTROPYARG $LOSSLSARG $LOSSLSPSV -sample 1x4 -outfile $OUTDIR/${basename}_441_accurate_cjpeg.jpg $IMGDIR/${basename}.${EXT}
|
|
runme $EXEDIR/cjpeg -quality 95 -precision $PRECISION -dct int $ENTROPYARG $LOSSLSARG $LOSSLSPSV -sample 4x1 -outfile $OUTDIR/${basename}_411_accurate_cjpeg.jpg $IMGDIR/${basename}.${EXT}
|
|
runme $EXEDIR/cjpeg -quality 95 -precision $PRECISION -dct int $ENTROPYARG $LOSSLSARG $LOSSLSPSV -sample 2x2 -outfile $OUTDIR/${basename}_420_accurate_cjpeg.jpg $IMGDIR/${basename}.${EXT}
|
|
runme $EXEDIR/cjpeg -quality 95 -precision $PRECISION -dct int $ENTROPYARG $LOSSLSARG $LOSSLSPSV -sample 1x2 -outfile $OUTDIR/${basename}_440_accurate_cjpeg.jpg $IMGDIR/${basename}.${EXT}
|
|
runme $EXEDIR/cjpeg -quality 95 -precision $PRECISION -dct int $ENTROPYARG $LOSSLSARG $LOSSLSPSV -sample 2x1 -outfile $OUTDIR/${basename}_422_accurate_cjpeg.jpg $IMGDIR/${basename}.${EXT}
|
|
runme $EXEDIR/cjpeg -quality 95 -precision $PRECISION -dct int $ENTROPYARG $LOSSLSARG $LOSSLSPSV -sample 1x1 -outfile $OUTDIR/${basename}_444_accurate_cjpeg.jpg $IMGDIR/${basename}.${EXT}
|
|
for samp in $ALLSUBSAMP; do
|
|
runme $EXEDIR/djpeg -dct fast -rgb $NSARG $BMPARG -outfile $OUTDIR/${basename}_${samp}_fast_djpeg.${EXT} $OUTDIR/${basename}_${samp}_fast_cjpeg.jpg
|
|
runme $EXEDIR/djpeg -dct int -rgb $NSARG $BMPARG -outfile $OUTDIR/${basename}_${samp}_accurate_djpeg.${EXT} $OUTDIR/${basename}_${samp}_accurate_cjpeg.jpg
|
|
done
|
|
for samp in $x24SUBSAMP; do
|
|
runme $EXEDIR/djpeg -dct fast -nosmooth $BMPARG -outfile $OUTDIR/${basename}_${samp}_fast_nosmooth_djpeg.${EXT} $OUTDIR/${basename}_${samp}_fast_cjpeg.jpg
|
|
runme $EXEDIR/djpeg -dct int -nosmooth $BMPARG -outfile $OUTDIR/${basename}_${samp}_accurate_nosmooth_djpeg.${EXT} $OUTDIR/${basename}_${samp}_accurate_cjpeg.jpg
|
|
done
|
|
|
|
# Compression
|
|
for dct in accurate fast; do
|
|
dctarg=
|
|
if [ "${dct}" = "fast" ]; then
|
|
dctarg=-fastdct
|
|
fi
|
|
runme $TJBENCH $OUTDIR/$image $TJQUAL -precision $PRECISION -rgb -quiet -benchtime 0.01 -warmup 0 ${dctarg} $YUVARG $ALLOCARG $ENTROPYARG $LOSSLSARG
|
|
if [ "$LOSSLSARG" != "-lossless" ]; then
|
|
runme $TJBENCH $OUTDIR/$image $TJQUAL -precision $PRECISION -subsamp 440 -rgb -quiet -benchtime 0.01 -warmup 0 ${dctarg} $YUVARG $ALLOCARG $ENTROPYARG $LOSSLSARG
|
|
runme $TJBENCH $OUTDIR/$image $TJQUAL -precision $PRECISION -subsamp 411 -rgb -quiet -benchtime 0.01 -warmup 0 ${dctarg} $YUVARG $ALLOCARG $ENTROPYARG $LOSSLSARG
|
|
runme $TJBENCH $OUTDIR/$image $TJQUAL -precision $PRECISION -subsamp 441 -rgb -quiet -benchtime 0.01 -warmup 0 ${dctarg} $YUVARG $ALLOCARG $ENTROPYARG $LOSSLSARG
|
|
fi
|
|
for samp in $ALLSUBSAMP; do
|
|
if [ "$LOSSLSARG" = "-lossless" ]; then
|
|
runme cmp $OUTDIR/${basename}_LOSSLS_PSV${TJQUAL}.jpg $OUTDIR/${basename}_${samp}_${dct}_cjpeg.jpg
|
|
else
|
|
runme cmp $OUTDIR/${basename}_${samp}_Q${TJQUAL}.jpg $OUTDIR/${basename}_${samp}_${dct}_cjpeg.jpg
|
|
fi
|
|
done
|
|
done
|
|
|
|
for dct in fast accurate; do
|
|
dctarg=
|
|
if [ "${dct}" = "fast" ]; then
|
|
dctarg=-fastdct
|
|
fi
|
|
|
|
# Tiled compression & decompression
|
|
runme $TJBENCH $OUTDIR/$image $TJQUAL -precision $PRECISION -rgb -tile -quiet -benchtime 0.01 -warmup 0 ${dctarg} $YUVARG $ALLOCARG $ENTROPYARG $LOSSLSARG
|
|
for samp in $x1SUBSAMP; do
|
|
if [ $ALLOC = 1 ]; then
|
|
if [ "$LOSSLSARG" = "-lossless" ]; then
|
|
runme cmp $OUTDIR/${basename}_LOSSLS_PSV${TJQUAL}_full.${EXT} $OUTDIR/${basename}_${samp}_${dct}_djpeg.${EXT}
|
|
rm $OUTDIR/${basename}_LOSSLS_PSV${TJQUAL}_full.${EXT}
|
|
else
|
|
runme cmp $OUTDIR/${basename}_${samp}_Q${TJQUAL}_full.${EXT} $OUTDIR/${basename}_${samp}_${dct}_djpeg.${EXT}
|
|
rm $OUTDIR/${basename}_${samp}_Q${TJQUAL}_full.${EXT}
|
|
fi
|
|
else
|
|
if [ "$LOSSLSARG" = "-lossless" ]; then
|
|
for i in $OUTDIR/${basename}_LOSSLS_PSV${TJQUAL}_[0-9]*x[0-9]*.${EXT} \
|
|
$OUTDIR/${basename}_LOSSLS_PSV${TJQUAL}_full.${EXT}; do
|
|
runme cmp $i $OUTDIR/${basename}_${samp}_${dct}_djpeg.${EXT}
|
|
rm $i
|
|
done
|
|
else
|
|
for i in $OUTDIR/${basename}_${samp}_Q${TJQUAL}_[0-9]*x[0-9]*.${EXT} \
|
|
$OUTDIR/${basename}_${samp}_Q${TJQUAL}_full.${EXT}; do
|
|
runme cmp $i $OUTDIR/${basename}_${samp}_${dct}_djpeg.${EXT}
|
|
rm $i
|
|
done
|
|
fi
|
|
fi
|
|
done
|
|
runme $TJBENCH $OUTDIR/$image $TJQUAL -precision $PRECISION -rgb -tile -quiet -benchtime 0.01 -warmup 0 -fastupsample ${dctarg} $YUVARG $ALLOCARG $ENTROPYARG $LOSSLSARG
|
|
if [ "$LOSSLSARG" != "-lossless" ]; then
|
|
runme $TJBENCH $OUTDIR/$image $TJQUAL -precision $PRECISION -subsamp 440 -rgb -tile -quiet -benchtime 0.01 -warmup 0 -fastupsample ${dctarg} $YUVARG $ALLOCARG $ENTROPYARG $LOSSLSARG
|
|
runme $TJBENCH $OUTDIR/$image $TJQUAL -precision $PRECISION -subsamp 411 -rgb -tile -quiet -benchtime 0.01 -warmup 0 -fastupsample ${dctarg} $YUVARG $ALLOCARG $ENTROPYARG $LOSSLSARG
|
|
runme $TJBENCH $OUTDIR/$image $TJQUAL -precision $PRECISION -subsamp 441 -rgb -tile -quiet -benchtime 0.01 -warmup 0 -fastupsample ${dctarg} $YUVARG $ALLOCARG $ENTROPYARG $LOSSLSARG
|
|
fi
|
|
for samp in $x24SUBSAMP; do
|
|
if [ $ALLOC = 1 ]; then
|
|
if [ "$LOSSLSARG" = "-lossless" ]; then
|
|
runme cmp $OUTDIR/${basename}_LOSSLS_PSV${TJQUAL}_full.${EXT} $OUTDIR/${basename}_${samp}_${dct}_nosmooth_djpeg.${EXT}
|
|
rm $OUTDIR/${basename}_LOSSLS_PSV${TJQUAL}_full.${EXT}
|
|
else
|
|
runme cmp $OUTDIR/${basename}_${samp}_Q${TJQUAL}_full.${EXT} $OUTDIR/${basename}_${samp}_${dct}_nosmooth_djpeg.${EXT}
|
|
rm $OUTDIR/${basename}_${samp}_Q${TJQUAL}_full.${EXT}
|
|
fi
|
|
else
|
|
if [ "$LOSSLSARG" = "-lossless" ]; then
|
|
for i in $OUTDIR/${basename}_LOSSLS_PSV${TJQUAL}_[0-9]*x[0-9]*.${EXT} \
|
|
$OUTDIR/${basename}_LOSSLS_PSV${TJQUAL}_full.${EXT}; do
|
|
runme cmp $i $OUTDIR/${basename}_${samp}_${dct}_nosmooth_djpeg.${EXT}
|
|
rm $i
|
|
done
|
|
else
|
|
for i in $OUTDIR/${basename}_${samp}_Q${TJQUAL}_[0-9]*x[0-9]*.${EXT} \
|
|
$OUTDIR/${basename}_${samp}_Q${TJQUAL}_full.${EXT}; do
|
|
# If the tile size is smaller than the MCU size, then there will be
|
|
# edge artifacts at the tile boundaries, so the decompressed image
|
|
# will not be identical to the untiled decompressed image.
|
|
TILESIZE=$(basename $(echo $i | sed 's/.*_//g') .${EXT})
|
|
if [ "$TILESIZE" = "8x8" ]; then
|
|
continue
|
|
fi
|
|
if [ "$TILESIZE" = "16x16" -a \
|
|
\( "${samp}" = "411" -o "${samp}" = "441" \) ]; then
|
|
continue
|
|
fi
|
|
runme cmp $i $OUTDIR/${basename}_${samp}_${dct}_nosmooth_djpeg.${EXT}
|
|
rm $i
|
|
done
|
|
fi
|
|
fi
|
|
done
|
|
|
|
# Tiled decompression
|
|
if [ "$LOSSLSARG" != "-lossless" ]; then
|
|
for samp in $x1SUBSAMP; do
|
|
runme $TJBENCH $OUTDIR/${basename}_${samp}_Q95.jpg $BMPARG -tile -quiet -benchtime 0.01 -warmup 0 ${dctarg} $YUVARG $ALLOCARG $ENTROPYARG
|
|
if [ $ALLOC = 1 ]; then
|
|
runme cmp $OUTDIR/${basename}_${samp}_Q95_full.${EXT} $OUTDIR/${basename}_${samp}_${dct}_djpeg.${EXT}
|
|
rm $OUTDIR/${basename}_${samp}_Q95_full.${EXT}
|
|
else
|
|
for i in $OUTDIR/${basename}_${samp}_Q95_[0-9]*x[0-9]*.${EXT} \
|
|
$OUTDIR/${basename}_${samp}_Q95_full.${EXT}; do
|
|
runme cmp $i $OUTDIR/${basename}_${samp}_${dct}_djpeg.${EXT}
|
|
rm $i
|
|
done
|
|
fi
|
|
done
|
|
for samp in $x24SUBSAMP; do
|
|
runme $TJBENCH $OUTDIR/${basename}_${samp}_Q95.jpg $BMPARG -tile -quiet -benchtime 0.01 -warmup 0 -fastupsample ${dctarg} $YUVARG $ALLOCARG $ENTROPYARG
|
|
if [ $ALLOC = 1 ]; then
|
|
runme cmp $OUTDIR/${basename}_${samp}_Q95_full.${EXT} $OUTDIR/${basename}_${samp}_${dct}_nosmooth_djpeg.${EXT}
|
|
rm $OUTDIR/${basename}_${samp}_Q95_full.${EXT}
|
|
else
|
|
for i in $OUTDIR/${basename}_${samp}_Q95_[0-9]*x[0-9]*.${EXT} \
|
|
$OUTDIR/${basename}_${samp}_Q95_full.${EXT}; do
|
|
TILESIZE=$(basename $(echo $i | sed 's/.*_//g') .${EXT})
|
|
if [ "$TILESIZE" = "8x8" ]; then
|
|
continue
|
|
fi
|
|
if [ "$TILESIZE" = "16x16" -a \
|
|
\( "${samp}" = "411" -o "${samp}" = "441" \) ]; then
|
|
continue
|
|
fi
|
|
runme cmp $i $OUTDIR/${basename}_${samp}_${dct}_nosmooth_djpeg.${EXT}
|
|
rm $i
|
|
done
|
|
fi
|
|
done
|
|
fi
|
|
done
|
|
|
|
# Partial decompression
|
|
if [ "$LOSSLSARG" != "-lossless" -a "$YUVARG" != "-yuv" ]; then
|
|
for samp in $ALLSUBSAMP; do
|
|
CROPW8_8=103
|
|
CROPL8_8=16
|
|
CROPW7_8=91
|
|
CROPL7_8=14
|
|
if [ "${samp}" = "411" ]; then
|
|
CROPW8_8=87
|
|
CROPL8_8=32
|
|
CROPW7_8=77
|
|
CROPL7_8=28
|
|
fi
|
|
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
|
|
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
|
|
runme cmp $OUTDIR/${basename}_${samp}_Q${TJQUAL}_full.ppm $OUTDIR/${basename}_${samp}_scale_crop_djpeg.ppm
|
|
rm $OUTDIR/${basename}_${samp}_Q${TJQUAL}_full.ppm $OUTDIR/${basename}_${samp}_scale_crop_djpeg.ppm
|
|
|
|
runme $EXEDIR/djpeg -rgb -scale 14/16 -crop ${CROPW7_8}x81+${CROPL7_8}+3 $NSARG -outfile $OUTDIR/${basename}_${samp}_scale_crop_djpeg.ppm $OUTDIR/${basename}_${samp}_accurate_cjpeg.jpg
|
|
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
|
|
runme cmp $OUTDIR/${basename}_${samp}_Q${TJQUAL}_7_8.ppm $OUTDIR/${basename}_${samp}_scale_crop_djpeg.ppm
|
|
rm $OUTDIR/${basename}_${samp}_Q${TJQUAL}_7_8.ppm $OUTDIR/${basename}_${samp}_scale_crop_djpeg.ppm
|
|
|
|
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
|
|
runme $TJBENCH $OUTDIR/${basename}_${samp}_Q${TJQUAL}.jpg -scale 4/8 -crop 40x40+0+0 -quiet -benchtime 0.01 -warmup 0 ${dctarg} $YUVARG $ALLOCARG $ENTROPYARG $LOSSLSARG
|
|
runme cmp $OUTDIR/${basename}_${samp}_Q${TJQUAL}_1_2.ppm $OUTDIR/${basename}_${samp}_scale_crop_djpeg.ppm
|
|
rm $OUTDIR/${basename}_${samp}_Q${TJQUAL}_1_2.ppm $OUTDIR/${basename}_${samp}_scale_crop_djpeg.ppm
|
|
done
|
|
fi
|
|
|
|
# Scaled decompression
|
|
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
|
|
scalearg=`echo $scale | sed 's/\_/\//g'`
|
|
SCALE=$scale
|
|
if [ "$LOSSLSARG" = "-lossless" ]; then
|
|
SCALE=full
|
|
fi
|
|
for samp in $ALLSUBSAMP; do
|
|
runme $EXEDIR/djpeg -rgb -scale ${scalearg} $NSARG $BMPARG -outfile $OUTDIR/${basename}_${samp}_${scale}_djpeg.${EXT} $OUTDIR/${basename}_${samp}_accurate_cjpeg.jpg
|
|
if [ "$LOSSLSARG" = "-lossless" ]; then
|
|
runme $TJBENCH $OUTDIR/${basename}_LOSSLS_PSV${TJQUAL}.jpg $BMPARG -scale ${scalearg} -quiet -benchtime 0.01 -warmup 0 $YUVARG $ALLOCARG $ENTROPYARG $LOSSLSARG
|
|
runme cmp $OUTDIR/${basename}_LOSSLS_PSV${TJQUAL}_${SCALE}.${EXT} $OUTDIR/${basename}_${samp}_${scale}_djpeg.${EXT}
|
|
rm $OUTDIR/${basename}_LOSSLS_PSV${TJQUAL}_${SCALE}.${EXT}
|
|
else
|
|
runme $TJBENCH $OUTDIR/${basename}_${samp}_Q${TJQUAL}.jpg $BMPARG -scale ${scalearg} -quiet -benchtime 0.01 -warmup 0 $YUVARG $ALLOCARG $ENTROPYARG $LOSSLSARG
|
|
runme cmp $OUTDIR/${basename}_${samp}_Q${TJQUAL}_${SCALE}.${EXT} $OUTDIR/${basename}_${samp}_${scale}_djpeg.${EXT}
|
|
rm $OUTDIR/${basename}_${samp}_Q${TJQUAL}_${SCALE}.${EXT}
|
|
fi
|
|
done
|
|
done
|
|
|
|
# Transforms
|
|
if [ "$LOSSLSARG" != "-lossless" ]; then
|
|
for samp in $ALLSUBSAMP; do
|
|
runme $EXEDIR/jpegtran -flip horizontal -trim -outfile $OUTDIR/${basename}_${samp}_hflip_jpegtran.jpg $OUTDIR/${basename}_${samp}_Q95.jpg
|
|
runme $EXEDIR/jpegtran -flip vertical -trim -outfile $OUTDIR/${basename}_${samp}_vflip_jpegtran.jpg $OUTDIR/${basename}_${samp}_Q95.jpg
|
|
runme $EXEDIR/jpegtran -transpose -trim -outfile $OUTDIR/${basename}_${samp}_transpose_jpegtran.jpg $OUTDIR/${basename}_${samp}_Q95.jpg
|
|
runme $EXEDIR/jpegtran -transverse -trim -outfile $OUTDIR/${basename}_${samp}_transverse_jpegtran.jpg $OUTDIR/${basename}_${samp}_Q95.jpg
|
|
runme $EXEDIR/jpegtran -rotate 90 -trim -outfile $OUTDIR/${basename}_${samp}_rot90_jpegtran.jpg $OUTDIR/${basename}_${samp}_Q95.jpg
|
|
runme $EXEDIR/jpegtran -rotate 180 -trim -outfile $OUTDIR/${basename}_${samp}_rot180_jpegtran.jpg $OUTDIR/${basename}_${samp}_Q95.jpg
|
|
runme $EXEDIR/jpegtran -rotate 270 -trim -outfile $OUTDIR/${basename}_${samp}_rot270_jpegtran.jpg $OUTDIR/${basename}_${samp}_Q95.jpg
|
|
done
|
|
for xform in hflip vflip transpose transverse rot90 rot180 rot270; do
|
|
for samp in $x1SUBSAMP; do
|
|
runme $EXEDIR/djpeg -rgb $BMPARG -outfile $OUTDIR/${basename}_${samp}_${xform}_jpegtran.${EXT} $OUTDIR/${basename}_${samp}_${xform}_jpegtran.jpg
|
|
runme $TJBENCH $OUTDIR/${basename}_${samp}_Q95.jpg $BMPARG -$xform -tile -quiet -benchtime 0.01 -warmup 0 $YUVARG $ALLOCARG $ENTROPYARG
|
|
if [ $ALLOC = 1 ]; then
|
|
runme cmp $OUTDIR/${basename}_${samp}_Q95_full.${EXT} $OUTDIR/${basename}_${samp}_${xform}_jpegtran.${EXT}
|
|
rm $OUTDIR/${basename}_${samp}_Q95_full.${EXT}
|
|
else
|
|
for i in $OUTDIR/${basename}_${samp}_Q95_[0-9]*x[0-9]*.${EXT} \
|
|
$OUTDIR/${basename}_${samp}_Q95_full.${EXT}; do
|
|
runme cmp $i $OUTDIR/${basename}_${samp}_${xform}_jpegtran.${EXT}
|
|
rm $i
|
|
done
|
|
fi
|
|
done
|
|
for samp in $x24SUBSAMP; do
|
|
runme $EXEDIR/djpeg -nosmooth -rgb $BMPARG -outfile $OUTDIR/${basename}_${samp}_${xform}_jpegtran.${EXT} $OUTDIR/${basename}_${samp}_${xform}_jpegtran.jpg
|
|
runme $TJBENCH $OUTDIR/${basename}_${samp}_Q95.jpg $BMPARG -$xform -tile -quiet -benchtime 0.01 -warmup 0 -fastupsample $YUVARG $ALLOCARG $ENTROPYARG
|
|
if [ $ALLOC = 1 ]; then
|
|
runme cmp $OUTDIR/${basename}_${samp}_Q95_full.${EXT} $OUTDIR/${basename}_${samp}_${xform}_jpegtran.${EXT}
|
|
rm $OUTDIR/${basename}_${samp}_Q95_full.${EXT}
|
|
else
|
|
for i in $OUTDIR/${basename}_${samp}_Q95_[0-9]*x[0-9]*.${EXT} \
|
|
$OUTDIR/${basename}_${samp}_Q95_full.${EXT}; do
|
|
TILESIZE=$(basename $(echo $i | sed 's/.*_//g') .${EXT})
|
|
if [ "$TILESIZE" = "8x8" ]; then
|
|
continue
|
|
fi
|
|
if [ "$TILESIZE" = "16x16" -a \
|
|
\( "${samp}" = "411" -o "${samp}" = "441" \) ]; then
|
|
continue
|
|
fi
|
|
runme cmp $i $OUTDIR/${basename}_${samp}_${xform}_jpegtran.${EXT}
|
|
rm $i
|
|
done
|
|
fi
|
|
done
|
|
done
|
|
|
|
# Grayscale transform
|
|
for xform in hflip vflip transpose transverse rot90 rot180 rot270; do
|
|
for samp in $ALLSUBSAMP; do
|
|
runme $TJBENCH $OUTDIR/${basename}_${samp}_Q95.jpg $BMPARG -$xform -tile -quiet -benchtime 0.01 -warmup 0 -grayscale $YUVARG $ALLOCARG $ENTROPYARG
|
|
if [ $ALLOC = 1 ]; then
|
|
runme cmp $OUTDIR/${basename}_${samp}_Q95_full.${EXT} $OUTDIR/${basename}_GRAY_${xform}_jpegtran.${EXT}
|
|
rm $OUTDIR/${basename}_${samp}_Q95_full.${EXT}
|
|
else
|
|
for i in $OUTDIR/${basename}_${samp}_Q95_[0-9]*x[0-9]*.${EXT} \
|
|
$OUTDIR/${basename}_${samp}_Q95_full.${EXT}; do
|
|
TILESIZE=$(basename $(echo $i | sed 's/.*_//g') .${EXT})
|
|
if [ "$TILESIZE" = "8x8" -a \
|
|
"${samp}" != "444" -a "${samp}" != "GRAY" ]; then
|
|
continue
|
|
fi
|
|
if [ "$TILESIZE" = "16x16" -a \
|
|
\( "${samp}" = "411" -o "${samp}" = "441" \) ]; then
|
|
continue
|
|
fi
|
|
runme cmp $i $OUTDIR/${basename}_GRAY_${xform}_jpegtran.${EXT}
|
|
rm $i
|
|
done
|
|
fi
|
|
done
|
|
done
|
|
|
|
# Transforms with scaling
|
|
for xform in hflip vflip transpose transverse rot90 rot180 rot270; do
|
|
for samp in $ALLSUBSAMP; do
|
|
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
|
|
scalearg=`echo $scale | sed 's/\_/\//g'`
|
|
runme $EXEDIR/djpeg -rgb -scale ${scalearg} $NSARG $BMPARG -outfile $OUTDIR/${basename}_${samp}_${xform}_${scale}_jpegtran.${EXT} $OUTDIR/${basename}_${samp}_${xform}_jpegtran.jpg
|
|
runme $TJBENCH $OUTDIR/${basename}_${samp}_Q95.jpg $BMPARG -$xform -scale ${scalearg} -quiet -benchtime 0.01 -warmup 0 $YUVARG $ALLOCARG $ENTROPYARG
|
|
runme cmp $OUTDIR/${basename}_${samp}_Q95_${scale}.${EXT} $OUTDIR/${basename}_${samp}_${xform}_${scale}_jpegtran.${EXT}
|
|
rm $OUTDIR/${basename}_${samp}_Q95_${scale}.${EXT}
|
|
done
|
|
done
|
|
done
|
|
fi
|
|
|
|
done
|
|
|
|
echo SUCCESS!
|