TJBench: Allow abbreviated command-line options

... using the same matching algorithm as cjpeg/djpeg/jpegtran and, where
possible, the same abbreviations:

-a for -arithmetic
-b for -bmp
-cr for -crop
-g for -grayscale
-l for -lossless
-max for -maxmemory
-o for -optimize
-pre for -precision
-p for -progressive
-r for -restart
-s for -scale
-t for -transpose
-transv for -transverse
This commit is contained in:
DRC
2024-08-20 08:01:50 -04:00
parent 0737844235
commit ab203704dd
3 changed files with 382 additions and 368 deletions

View File

@@ -772,8 +772,8 @@ final class TJBench {
System.out.println(" java " + className);
System.out.println(" <Inputimage (JPG)> [options]");
System.out.println("\nGENERAL OPTIONS");
System.out.println("---------------");
System.out.println("\nGENERAL OPTIONS (CAN BE ABBREVIATED)");
System.out.println("------------------------------------");
System.out.println("-benchtime T = Run each benchmark for at least T seconds [default = 5.0]");
System.out.println("-bmp = Use Windows Bitmap format for output images [default = PPM or PGM]");
System.out.println(" ** 8-bit data precision only **");
@@ -810,8 +810,8 @@ final class TJBench {
System.out.println(" the timer, in order to prime the caches and thus improve the consistency");
System.out.println(" of the benchmark results");
System.out.println("\nLOSSY JPEG OPTIONS");
System.out.println("------------------");
System.out.println("\nLOSSY JPEG OPTIONS (CAN BE ABBREVIATED)");
System.out.println("---------------------------------------");
System.out.println("-arithmetic = Use arithmetic entropy coding in JPEG images generated by");
System.out.println(" compression and transform operations (can be combined with -progressive)");
System.out.println("-crop WxH+X+Y = Decompress only the specified region of the JPEG image, where W");
@@ -867,6 +867,17 @@ final class TJBench {
}
static boolean matchArg(String arg, String string, int minChars) {
if (arg.length() > string.length() || arg.length() < minChars)
return false;
int cmpChars = Math.max(arg.length(), minChars);
string = string.substring(0, cmpChars);
return arg.equalsIgnoreCase(string);
}
public static void main(String[] argv) {
Object srcBuf = null;
int w = 0, h = 0, minQual = -1, maxQual = -1;
@@ -906,9 +917,97 @@ final class TJBench {
if (argv.length > minArg) {
for (int i = minArg; i < argv.length; i++) {
if (argv[i].equalsIgnoreCase("-tile")) {
doTile = true; xformOpt |= TJTransform.OPT_CROP;
} else if (argv[i].equalsIgnoreCase("-precision") &&
if (matchArg(argv[i], "-arithmetic", 2)) {
System.out.println("Using arithmetic entropy coding\n");
arithmetic = true;
xformOpt |= TJTransform.OPT_ARITHMETIC;
} else if (matchArg(argv[i], "-benchtime", 3) &&
i < argv.length - 1) {
double temp = -1;
try {
temp = Double.parseDouble(argv[++i]);
} catch (NumberFormatException e) {}
if (temp > 0.0)
benchTime = temp;
else
usage();
} else if (argv[i].equalsIgnoreCase("-bgr"))
pf = TJ.PF_BGR;
else if (argv[i].equalsIgnoreCase("-bgrx"))
pf = TJ.PF_BGRX;
else if (matchArg(argv[i], "-bottomup", 3))
bottomUp = true;
else if (matchArg(argv[i], "-bmp", 2)) {
if (ext == null)
ext = new String("bmp");
} else if (matchArg(argv[i], "-cmyk", 3))
pf = TJ.PF_CMYK;
else if (matchArg(argv[i], "-componly", 4))
compOnly = true;
else if (matchArg(argv[i], "-copynone", 4))
xformOpt |= TJTransform.OPT_COPYNONE;
else if (matchArg(argv[i], "-crop", 3) && i < argv.length - 1) {
int temp1 = -1, temp2 = -1, temp3 = -1, temp4 = -1;
Scanner scanner = new Scanner(argv[++i]).useDelimiter("x|\\+");
try {
temp1 = scanner.nextInt();
temp2 = scanner.nextInt();
temp3 = scanner.nextInt();
temp4 = scanner.nextInt();
} catch (Exception e) {}
if (temp1 < 0 || temp2 < 0 || temp3 < 0 || temp4 < 0)
usage();
cr.width = temp1; cr.height = temp2; cr.x = temp3; cr.y = temp4;
} else if (matchArg(argv[i], "-custom", 3))
customFilter = new DummyDCTFilter();
else if (matchArg(argv[i], "-fastdct", 6)) {
System.out.println("Using fastest DCT/IDCT algorithm\n");
fastDCT = true;
} else if (matchArg(argv[i], "-fastupsample", 6)) {
System.out.println("Using fastest upsampling algorithm\n");
fastUpsample = true;
} else if (argv[i].equalsIgnoreCase("-gray"))
pf = TJ.PF_GRAY;
else if (matchArg(argv[i], "-grayscale", 2))
xformOpt |= TJTransform.OPT_GRAY;
else if (matchArg(argv[i], "-hflip", 2))
xformOp = TJTransform.OP_HFLIP;
else if (matchArg(argv[i], "-limitscans", 3))
limitScans = true;
else if (matchArg(argv[i], "-lossless", 2)) {
lossless = true;
subsamp = TJ.SAMP_444;
} else if (matchArg(argv[i], "-maxpixels", 5) &&
i < argv.length - 1) {
int temp = -1;
try {
temp = Integer.parseInt(argv[++i]);
} catch (NumberFormatException e) {}
if (temp < 0)
usage();
maxPixels = temp;
} else if (matchArg(argv[i], "-maxmemory", 4) &&
i < argv.length - 1) {
int temp = -1;
try {
temp = Integer.parseInt(argv[++i]);
} catch (NumberFormatException e) {}
if (temp < 0)
usage();
maxMemory = temp;
} else if (matchArg(argv[i], "-nooutput", 4))
xformOpt |= TJTransform.OPT_NOOUTPUT;
else if (matchArg(argv[i], "-nowrite", 4))
write = false;
else if (matchArg(argv[i], "-optimize", 2)) {
optimize = true;
xformOpt |= TJTransform.OPT_OPTIMIZE;
} else if (matchArg(argv[i], "-precision", 4) &&
i < argv.length - 1) {
int temp = 0;
@@ -919,49 +1018,60 @@ final class TJBench {
precision = temp;
else
usage();
} else if (argv[i].equalsIgnoreCase("-fastupsample")) {
System.out.println("Using fastest upsampling algorithm\n");
fastUpsample = true;
} else if (argv[i].equalsIgnoreCase("-fastdct")) {
System.out.println("Using fastest DCT/IDCT algorithm\n");
fastDCT = true;
} else if (argv[i].equalsIgnoreCase("-optimize")) {
optimize = true;
xformOpt |= TJTransform.OPT_OPTIMIZE;
} else if (argv[i].equalsIgnoreCase("-progressive")) {
} else if (matchArg(argv[i], "-progressive", 2)) {
System.out.println("Generating progressive JPEG images\n");
progressive = true;
xformOpt |= TJTransform.OPT_PROGRESSIVE;
} else if (argv[i].equalsIgnoreCase("-arithmetic")) {
System.out.println("Using arithmetic entropy coding\n");
arithmetic = true;
xformOpt |= TJTransform.OPT_ARITHMETIC;
} else if (argv[i].equalsIgnoreCase("-lossless")) {
lossless = true;
subsamp = TJ.SAMP_444;
} else if (argv[i].equalsIgnoreCase("-rgb"))
} else if (argv[i].equalsIgnoreCase("-qq"))
quiet = 2;
else if (matchArg(argv[i], "-quiet", 2))
quiet = 1;
else if (argv[i].equalsIgnoreCase("-rgb"))
pf = TJ.PF_RGB;
else if (argv[i].equalsIgnoreCase("-rgbx"))
pf = TJ.PF_RGBX;
else if (argv[i].equalsIgnoreCase("-bgr"))
pf = TJ.PF_BGR;
else if (argv[i].equalsIgnoreCase("-bgrx"))
pf = TJ.PF_BGRX;
else if (argv[i].equalsIgnoreCase("-xbgr"))
pf = TJ.PF_XBGR;
else if (argv[i].equalsIgnoreCase("-xrgb"))
pf = TJ.PF_XRGB;
else if (argv[i].equalsIgnoreCase("-gray"))
pf = TJ.PF_GRAY;
else if (argv[i].equalsIgnoreCase("-cmyk"))
pf = TJ.PF_CMYK;
else if (argv[i].equalsIgnoreCase("-bottomup"))
bottomUp = true;
else if (argv[i].equalsIgnoreCase("-quiet"))
quiet = 1;
else if (argv[i].equalsIgnoreCase("-qq"))
quiet = 2;
else if (argv[i].equalsIgnoreCase("-scale") && i < argv.length - 1) {
else if (argv[i].equalsIgnoreCase("-rot90"))
xformOp = TJTransform.OP_ROT90;
else if (argv[i].equalsIgnoreCase("-rot180"))
xformOp = TJTransform.OP_ROT180;
else if (argv[i].equalsIgnoreCase("-rot270"))
xformOp = TJTransform.OP_ROT270;
else if (matchArg(argv[i], "-restart", 2) && i < argv.length - 1) {
int temp = -1;
String arg = argv[++i];
Scanner scanner = new Scanner(arg).useDelimiter("b|B");
try {
temp = scanner.nextInt();
} catch (Exception e) {}
if (temp < 0 || temp > 65535 || scanner.hasNext())
usage();
if (arg.endsWith("B") || arg.endsWith("b"))
restartIntervalBlocks = temp;
else
restartIntervalRows = temp;
} else if (matchArg(argv[i], "-stoponwarning", 3))
stopOnWarning = true;
else if (matchArg(argv[i], "-subsamp", 3) && i < argv.length - 1) {
i++;
if (argv[i].toUpperCase().startsWith("G"))
subsamp = TJ.SAMP_GRAY;
else if (argv[i].equals("444"))
subsamp = TJ.SAMP_444;
else if (argv[i].equals("422"))
subsamp = TJ.SAMP_422;
else if (argv[i].equals("440"))
subsamp = TJ.SAMP_440;
else if (argv[i].equals("420"))
subsamp = TJ.SAMP_420;
else if (argv[i].equals("411"))
subsamp = TJ.SAMP_411;
else if (argv[i].equals("441"))
subsamp = TJ.SAMP_441;
else
usage();
} else if (matchArg(argv[i], "-scale", 2) && i < argv.length - 1) {
int temp1 = 0, temp2 = 0;
boolean match = false, scanned = true;
Scanner scanner = new Scanner(argv[++i]).useDelimiter("/");
@@ -985,56 +1095,15 @@ final class TJBench {
if (!match) usage();
} else
usage();
} else if (argv[i].equalsIgnoreCase("-crop") &&
i < argv.length - 1) {
int temp1 = -1, temp2 = -1, temp3 = -1, temp4 = -1;
Scanner scanner = new Scanner(argv[++i]).useDelimiter("x|\\+");
try {
temp1 = scanner.nextInt();
temp2 = scanner.nextInt();
temp3 = scanner.nextInt();
temp4 = scanner.nextInt();
} catch (Exception e) {}
if (temp1 < 0 || temp2 < 0 || temp3 < 0 || temp4 < 0)
usage();
cr.width = temp1; cr.height = temp2; cr.x = temp3; cr.y = temp4;
} else if (argv[i].equalsIgnoreCase("-hflip"))
xformOp = TJTransform.OP_HFLIP;
else if (argv[i].equalsIgnoreCase("-vflip"))
xformOp = TJTransform.OP_VFLIP;
else if (argv[i].equalsIgnoreCase("-transpose"))
xformOp = TJTransform.OP_TRANSPOSE;
else if (argv[i].equalsIgnoreCase("-transverse"))
} else if (matchArg(argv[i], "-tile", 3)) {
doTile = true; xformOpt |= TJTransform.OPT_CROP;
} else if (matchArg(argv[i], "-transverse", 7))
xformOp = TJTransform.OP_TRANSVERSE;
else if (argv[i].equalsIgnoreCase("-rot90"))
xformOp = TJTransform.OP_ROT90;
else if (argv[i].equalsIgnoreCase("-rot180"))
xformOp = TJTransform.OP_ROT180;
else if (argv[i].equalsIgnoreCase("-rot270"))
xformOp = TJTransform.OP_ROT270;
else if (argv[i].equalsIgnoreCase("-grayscale"))
xformOpt |= TJTransform.OPT_GRAY;
else if (argv[i].equalsIgnoreCase("-custom"))
customFilter = new DummyDCTFilter();
else if (argv[i].equalsIgnoreCase("-nooutput"))
xformOpt |= TJTransform.OPT_NOOUTPUT;
else if (argv[i].equalsIgnoreCase("-copynone"))
xformOpt |= TJTransform.OPT_COPYNONE;
else if (argv[i].equalsIgnoreCase("-benchtime") &&
i < argv.length - 1) {
double temp = -1;
try {
temp = Double.parseDouble(argv[++i]);
} catch (NumberFormatException e) {}
if (temp > 0.0)
benchTime = temp;
else
usage();
} else if (argv[i].equalsIgnoreCase("-warmup") &&
i < argv.length - 1) {
else if (matchArg(argv[i], "-transpose", 2))
xformOp = TJTransform.OP_TRANSPOSE;
else if (matchArg(argv[i], "-vflip", 2))
xformOp = TJTransform.OP_VFLIP;
else if (matchArg(argv[i], "-warmup", 2) && i < argv.length - 1) {
double temp = -1;
try {
@@ -1045,14 +1114,14 @@ final class TJBench {
System.out.format("Warmup time = %.1f seconds\n\n", warmup);
} else
usage();
} else if (argv[i].equalsIgnoreCase("-bmp")) {
if (ext == null)
ext = new String("bmp");
} else if (argv[i].equalsIgnoreCase("-yuv")) {
} else if (matchArg(argv[i], "-xbgr", 3))
pf = TJ.PF_XBGR;
else if (matchArg(argv[i], "-xrgb", 3))
pf = TJ.PF_XRGB;
else if (argv[i].equalsIgnoreCase("-yuv")) {
System.out.println("Testing planar YUV encoding/decoding\n");
doYUV = true;
} else if (argv[i].equalsIgnoreCase("-yuvpad") &&
i < argv.length - 1) {
} else if (matchArg(argv[i], "-yuvpad", 5) && i < argv.length - 1) {
int temp = 0;
try {
@@ -1062,70 +1131,7 @@ final class TJBench {
yuvAlign = temp;
else
usage();
} else if (argv[i].equalsIgnoreCase("-subsamp") &&
i < argv.length - 1) {
i++;
if (argv[i].toUpperCase().startsWith("G"))
subsamp = TJ.SAMP_GRAY;
else if (argv[i].equals("444"))
subsamp = TJ.SAMP_444;
else if (argv[i].equals("422"))
subsamp = TJ.SAMP_422;
else if (argv[i].equals("440"))
subsamp = TJ.SAMP_440;
else if (argv[i].equals("420"))
subsamp = TJ.SAMP_420;
else if (argv[i].equals("411"))
subsamp = TJ.SAMP_411;
else if (argv[i].equals("441"))
subsamp = TJ.SAMP_441;
else
usage();
} else if (argv[i].equalsIgnoreCase("-componly"))
compOnly = true;
else if (argv[i].equalsIgnoreCase("-nowrite"))
write = false;
else if (argv[i].equalsIgnoreCase("-limitscans"))
limitScans = true;
else if (argv[i].equalsIgnoreCase("-maxmemory") &&
i < argv.length - 1) {
int temp = -1;
try {
temp = Integer.parseInt(argv[++i]);
} catch (NumberFormatException e) {}
if (temp < 0)
usage();
maxMemory = temp;
} else if (argv[i].equalsIgnoreCase("-maxpixels") &&
i < argv.length - 1) {
int temp = -1;
try {
temp = Integer.parseInt(argv[++i]);
} catch (NumberFormatException e) {}
if (temp < 0)
usage();
maxPixels = temp;
} else if (argv[i].equalsIgnoreCase("-restart") &&
i < argv.length - 1) {
int temp = -1;
String arg = argv[++i];
Scanner scanner = new Scanner(arg).useDelimiter("b|B");
try {
temp = scanner.nextInt();
} catch (Exception e) {}
if (temp < 0 || temp > 65535 || scanner.hasNext())
usage();
if (arg.endsWith("B") || arg.endsWith("b"))
restartIntervalBlocks = temp;
else
restartIntervalRows = temp;
} else if (argv[i].equalsIgnoreCase("-stoponwarning"))
stopOnWarning = true;
else usage();
} else usage();
}
}

View File

@@ -45,6 +45,9 @@
#include "./turbojpeg.h"
#define MATCH_ARG(arg, string, minChars) \
!strncasecmp(arg, string, max(strlen(arg), minChars))
#define THROW(op, err) { \
printf("ERROR in line %d while %s:\n%s\n", __LINE__, op, err); \
retval = -1; goto bailout; \
@@ -908,8 +911,8 @@ static void usage(char *progName)
printf(" %s\n", progName);
printf(" <Inputimage (JPG)> [options]\n");
printf("\nGENERAL OPTIONS\n");
printf("---------------\n");
printf("\nGENERAL OPTIONS (CAN BE ABBREVIATED)\n");
printf("------------------------------------\n");
printf("-alloc = Dynamically allocate JPEG buffers\n");
printf("-benchtime T = Run each benchmark for at least T seconds [default = 5.0]\n");
printf("-bmp = Use Windows Bitmap format for output images [default = PPM or PGM]\n");
@@ -947,8 +950,8 @@ static void usage(char *progName)
printf(" the timer, in order to prime the caches and thus improve the consistency\n");
printf(" of the benchmark results\n");
printf("\nLOSSY JPEG OPTIONS\n");
printf("------------------\n");
printf("\nLOSSY JPEG OPTIONS (CAN BE ABBREVIATED)\n");
printf("---------------------------------------\n");
printf("-arithmetic = Use arithmetic entropy coding in JPEG images generated by\n");
printf(" compression and transform operations (can be combined with -progressive)\n");
printf("-crop WxH+X+Y = Decompress only the specified region of the JPEG image, where W\n");
@@ -1032,57 +1035,132 @@ int main(int argc, char *argv[])
if (argc > minArg) {
for (i = minArg; i < argc; i++) {
if (!strcasecmp(argv[i], "-tile")) {
doTile = 1; xformOpt |= TJXOPT_CROP;
} else if (!strcasecmp(argv[i], "-precision") && i < argc - 1) {
if (MATCH_ARG(argv[i], "-alloc", 3))
noRealloc = 0;
else if (MATCH_ARG(argv[i], "-arithmetic", 2)) {
printf("Using arithmetic entropy coding\n\n");
arithmetic = 1;
xformOpt |= TJXOPT_ARITHMETIC;
} else if (MATCH_ARG(argv[i], "-benchtime", 3) && i < argc - 1) {
double tempd = atof(argv[++i]);
if (tempd > 0.0) benchTime = tempd;
else usage(argv[0]);
} else if (!strcasecmp(argv[i], "-bgr"))
pf = TJPF_BGR;
else if (!strcasecmp(argv[i], "-bgrx"))
pf = TJPF_BGRX;
else if (MATCH_ARG(argv[i], "-bottomup", 3))
bottomUp = 1;
else if (MATCH_ARG(argv[i], "-bmp", 2))
ext = "bmp";
else if (MATCH_ARG(argv[i], "-cmyk", 3))
pf = TJPF_CMYK;
else if (MATCH_ARG(argv[i], "-componly", 4))
compOnly = 1;
else if (MATCH_ARG(argv[i], "-copynone", 4))
xformOpt |= TJXOPT_COPYNONE;
else if (MATCH_ARG(argv[i], "-crop", 3) && i < argc - 1) {
int temp1 = -1, temp2 = -1, temp3 = -1, temp4 = -1;
if (sscanf(argv[++i], "%dx%d+%d+%d", &temp1, &temp2, &temp3,
&temp4) == 4 && temp1 >= 0 && temp2 >= 0 && temp3 >= 0 &&
temp4 >= 0) {
cr.w = temp1; cr.h = temp2; cr.x = temp3; cr.y = temp4;
} else usage(argv[0]);
} else if (MATCH_ARG(argv[i], "-custom", 3))
customFilter = dummyDCTFilter;
else if (MATCH_ARG(argv[i], "-fastdct", 6)) {
printf("Using fastest DCT/IDCT algorithm\n\n");
fastDCT = 1;
} else if (MATCH_ARG(argv[i], "-fastupsample", 6)) {
printf("Using fastest upsampling algorithm\n\n");
fastUpsample = 1;
} else if (!strcasecmp(argv[i], "-gray"))
pf = TJPF_GRAY;
else if (MATCH_ARG(argv[i], "-grayscale", 2))
xformOpt |= TJXOPT_GRAY;
else if (MATCH_ARG(argv[i], "-hflip", 2))
xformOp = TJXOP_HFLIP;
else if (MATCH_ARG(argv[i], "-limitscans", 3))
limitScans = 1;
else if (MATCH_ARG(argv[i], "-lossless", 2)) {
lossless = 1;
subsamp = TJSAMP_444;
} else if (MATCH_ARG(argv[i], "-maxpixels", 5) && i < argc - 1) {
int tempi = atoi(argv[++i]);
if (tempi < 0) usage(argv[0]);
maxPixels = tempi;
} else if (MATCH_ARG(argv[i], "-maxmemory", 4) && i < argc - 1) {
int tempi = atoi(argv[++i]);
if (tempi < 0) usage(argv[0]);
maxMemory = tempi;
} else if (MATCH_ARG(argv[i], "-nooutput", 4))
xformOpt |= TJXOPT_NOOUTPUT;
else if (MATCH_ARG(argv[i], "-nowrite", 4))
doWrite = 0;
else if (MATCH_ARG(argv[i], "-optimize", 2)) {
optimize = 1;
xformOpt |= TJXOPT_OPTIMIZE;
} else if (MATCH_ARG(argv[i], "-precision", 4) && i < argc - 1) {
int tempi = atoi(argv[++i]);
if (tempi < 2 || tempi > 16)
usage(argv[0]);
precision = tempi;
} else if (!strcasecmp(argv[i], "-fastupsample")) {
printf("Using fastest upsampling algorithm\n\n");
fastUpsample = 1;
} else if (!strcasecmp(argv[i], "-fastdct")) {
printf("Using fastest DCT/IDCT algorithm\n\n");
fastDCT = 1;
} else if (!strcasecmp(argv[i], "-optimize")) {
optimize = 1;
xformOpt |= TJXOPT_OPTIMIZE;
} else if (!strcasecmp(argv[i], "-progressive")) {
} else if (MATCH_ARG(argv[i], "-progressive", 2)) {
printf("Generating progressive JPEG images\n\n");
progressive = 1;
xformOpt |= TJXOPT_PROGRESSIVE;
} else if (!strcasecmp(argv[i], "-arithmetic")) {
printf("Using arithmetic entropy coding\n\n");
arithmetic = 1;
xformOpt |= TJXOPT_ARITHMETIC;
} else if (!strcasecmp(argv[i], "-lossless")) {
lossless = 1;
subsamp = TJSAMP_444;
} else if (!strcasecmp(argv[i], "-rgb"))
} else if (!strcasecmp(argv[i], "-qq"))
quiet = 2;
else if (MATCH_ARG(argv[i], "-quiet", 2))
quiet = 1;
else if (!strcasecmp(argv[i], "-rgb"))
pf = TJPF_RGB;
else if (!strcasecmp(argv[i], "-rgbx"))
pf = TJPF_RGBX;
else if (!strcasecmp(argv[i], "-bgr"))
pf = TJPF_BGR;
else if (!strcasecmp(argv[i], "-bgrx"))
pf = TJPF_BGRX;
else if (!strcasecmp(argv[i], "-xbgr"))
pf = TJPF_XBGR;
else if (!strcasecmp(argv[i], "-xrgb"))
pf = TJPF_XRGB;
else if (!strcasecmp(argv[i], "-gray"))
pf = TJPF_GRAY;
else if (!strcasecmp(argv[i], "-cmyk"))
pf = TJPF_CMYK;
else if (!strcasecmp(argv[i], "-bottomup"))
bottomUp = 1;
else if (!strcasecmp(argv[i], "-quiet"))
quiet = 1;
else if (!strcasecmp(argv[i], "-qq"))
quiet = 2;
else if (!strcasecmp(argv[i], "-scale") && i < argc - 1) {
else if (!strcasecmp(argv[i], "-rot90"))
xformOp = TJXOP_ROT90;
else if (!strcasecmp(argv[i], "-rot180"))
xformOp = TJXOP_ROT180;
else if (!strcasecmp(argv[i], "-rot270"))
xformOp = TJXOP_ROT270;
else if (MATCH_ARG(argv[i], "-restart", 2) && i < argc - 1) {
int tempi = -1, nscan; char tempc = 0;
if ((nscan = sscanf(argv[++i], "%d%c", &tempi, &tempc)) < 1 ||
tempi < 0 || tempi > 65535 ||
(nscan == 2 && tempc != 'B' && tempc != 'b'))
usage(argv[0]);
if (tempc == 'B' || tempc == 'b')
restartIntervalBlocks = tempi;
else
restartIntervalRows = tempi;
} else if (MATCH_ARG(argv[i], "-stoponwarning", 3))
stopOnWarning = 1;
else if (MATCH_ARG(argv[i], "-subsamp", 3) && i < argc - 1) {
i++;
if (MATCH_ARG(argv[i], "gray", 1))
subsamp = TJSAMP_GRAY;
else if (MATCH_ARG(argv[i], "444", 3))
subsamp = TJSAMP_444;
else if (MATCH_ARG(argv[i], "422", 3))
subsamp = TJSAMP_422;
else if (MATCH_ARG(argv[i], "440", 3))
subsamp = TJSAMP_440;
else if (MATCH_ARG(argv[i], "420", 3))
subsamp = TJSAMP_420;
else if (MATCH_ARG(argv[i], "411", 3))
subsamp = TJSAMP_411;
else if (MATCH_ARG(argv[i], "441", 3))
subsamp = TJSAMP_441;
else
usage(argv[0]);
} else if (MATCH_ARG(argv[i], "-scale", 2) && i < argc - 1) {
int temp1 = 0, temp2 = 0, match = 0;
if (sscanf(argv[++i], "%d/%d", &temp1, &temp2) == 2) {
@@ -1095,106 +1173,33 @@ int main(int argc, char *argv[])
}
if (!match) usage(argv[0]);
} else usage(argv[0]);
} else if (!strcasecmp(argv[i], "-crop") && i < argc - 1) {
int temp1 = -1, temp2 = -1, temp3 = -1, temp4 = -1;
if (sscanf(argv[++i], "%dx%d+%d+%d", &temp1, &temp2, &temp3,
&temp4) == 4 && temp1 >= 0 && temp2 >= 0 && temp3 >= 0 &&
temp4 >= 0) {
cr.w = temp1; cr.h = temp2; cr.x = temp3; cr.y = temp4;
} else usage(argv[0]);
} else if (!strcasecmp(argv[i], "-hflip"))
xformOp = TJXOP_HFLIP;
else if (!strcasecmp(argv[i], "-vflip"))
xformOp = TJXOP_VFLIP;
else if (!strcasecmp(argv[i], "-transpose"))
xformOp = TJXOP_TRANSPOSE;
else if (!strcasecmp(argv[i], "-transverse"))
} else if (MATCH_ARG(argv[i], "-tile", 3)) {
doTile = 1; xformOpt |= TJXOPT_CROP;
} else if (MATCH_ARG(argv[i], "-transverse", 7))
xformOp = TJXOP_TRANSVERSE;
else if (!strcasecmp(argv[i], "-rot90"))
xformOp = TJXOP_ROT90;
else if (!strcasecmp(argv[i], "-rot180"))
xformOp = TJXOP_ROT180;
else if (!strcasecmp(argv[i], "-rot270"))
xformOp = TJXOP_ROT270;
else if (!strcasecmp(argv[i], "-grayscale"))
xformOpt |= TJXOPT_GRAY;
else if (!strcasecmp(argv[i], "-custom"))
customFilter = dummyDCTFilter;
else if (!strcasecmp(argv[i], "-nooutput"))
xformOpt |= TJXOPT_NOOUTPUT;
else if (!strcasecmp(argv[i], "-copynone"))
xformOpt |= TJXOPT_COPYNONE;
else if (!strcasecmp(argv[i], "-benchtime") && i < argc - 1) {
double tempd = atof(argv[++i]);
if (tempd > 0.0) benchTime = tempd;
else usage(argv[0]);
} else if (!strcasecmp(argv[i], "-warmup") && i < argc - 1) {
else if (MATCH_ARG(argv[i], "-transpose", 2))
xformOp = TJXOP_TRANSPOSE;
else if (MATCH_ARG(argv[i], "-vflip", 2))
xformOp = TJXOP_VFLIP;
else if (MATCH_ARG(argv[i], "-warmup", 2) && i < argc - 1) {
double tempd = atof(argv[++i]);
if (tempd >= 0.0) warmup = tempd;
else usage(argv[0]);
printf("Warmup time = %.1f seconds\n\n", warmup);
} else if (!strcasecmp(argv[i], "-alloc"))
noRealloc = 0;
else if (!strcasecmp(argv[i], "-bmp"))
ext = "bmp";
} else if (MATCH_ARG(argv[i], "-xbgr", 3))
pf = TJPF_XBGR;
else if (MATCH_ARG(argv[i], "-xrgb", 3))
pf = TJPF_XRGB;
else if (!strcasecmp(argv[i], "-yuv")) {
printf("Testing planar YUV encoding/decoding\n\n");
doYUV = 1;
} else if (!strcasecmp(argv[i], "-yuvpad") && i < argc - 1) {
} else if (MATCH_ARG(argv[i], "-yuvpad", 5) && i < argc - 1) {
int tempi = atoi(argv[++i]);
if (tempi >= 1 && (tempi & (tempi - 1)) == 0) yuvAlign = tempi;
else usage(argv[0]);
} else if (!strcasecmp(argv[i], "-subsamp") && i < argc - 1) {
i++;
if (toupper(argv[i][0]) == 'G') subsamp = TJSAMP_GRAY;
else {
int tempi = atoi(argv[i]);
switch (tempi) {
case 444: subsamp = TJSAMP_444; break;
case 422: subsamp = TJSAMP_422; break;
case 440: subsamp = TJSAMP_440; break;
case 420: subsamp = TJSAMP_420; break;
case 411: subsamp = TJSAMP_411; break;
case 441: subsamp = TJSAMP_441; break;
default: usage(argv[0]);
}
}
} else if (!strcasecmp(argv[i], "-componly"))
compOnly = 1;
else if (!strcasecmp(argv[i], "-nowrite"))
doWrite = 0;
else if (!strcasecmp(argv[i], "-limitscans"))
limitScans = 1;
else if (!strcasecmp(argv[i], "-maxmemory") && i < argc - 1) {
int tempi = atoi(argv[++i]);
if (tempi < 0) usage(argv[0]);
maxMemory = tempi;
} else if (!strcasecmp(argv[i], "-maxpixels") && i < argc - 1) {
int tempi = atoi(argv[++i]);
if (tempi < 0) usage(argv[0]);
maxPixels = tempi;
} else if (!strcasecmp(argv[i], "-restart") && i < argc - 1) {
int tempi = -1, nscan; char tempc = 0;
if ((nscan = sscanf(argv[++i], "%d%c", &tempi, &tempc)) < 1 ||
tempi < 0 || tempi > 65535 ||
(nscan == 2 && tempc != 'B' && tempc != 'b'))
usage(argv[0]);
if (tempc == 'B' || tempc == 'b')
restartIntervalBlocks = tempi;
else
restartIntervalRows = tempi;
} else if (!strcasecmp(argv[i], "-stoponwarning"))
stopOnWarning = 1;
else usage(argv[0]);
} else usage(argv[0]);
}
}

View File

@@ -41,7 +41,7 @@ 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 [ "$EXT" = "bmp" ]; then BMPARG=-b; fi
if [ -d $OUTDIR ]; then
rm -rf $OUTDIR
@@ -51,7 +51,7 @@ mkdir -p $OUTDIR
while [ $# -gt 0 ]; do
case "$1" in
-yuv)
NSARG=-nosmooth
NSARG=-nos
YUVARG=-yuv
# NOTE: The combination of tj3EncodeYUV*() and tj3CompressFromYUV*() does not
@@ -131,52 +131,55 @@ fi
exec >$EXEDIR/tjbenchtest$JAVAARG$YUVARG$ALLOCARG$ENTROPYARG$LOSSLSARG-$PRECISION.log
if [ "$ENTROPYARG" = "-progressive-arithmetic" ]; then
ENTROPYARG="-progressive -arithmetic"
fi
ALLOCARG=${ALLOCARG//-alloc/-al}
ENTROPYARG=${ENTROPYARG//-optimize/-o}
ENTROPYARG=${ENTROPYARG//-progressive-arithmetic/-pro -a}
ENTROPYARG=${ENTROPYARG//-progressive/-pro}
ENTROPYARG=${ENTROPYARG//-arithmetic/-a}
LOSSLSARG=${LOSSLSARG//-lossless/-l}
# 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}
runme $EXEDIR/cjpeg -q 95 -pre $PRECISION -dc fa $ENTROPYARG $LOSSLSARG $LOSSLSPSV -gr -outf $OUTDIR/${basename}_GRAY_fast_cjpeg.jpg $IMGDIR/${basename}.${EXT}
runme $EXEDIR/cjpeg -q 95 -pre $PRECISION -dc fa $ENTROPYARG $LOSSLSARG $LOSSLSPSV -sa 1x4 -outf $OUTDIR/${basename}_441_fast_cjpeg.jpg $IMGDIR/${basename}.${EXT}
runme $EXEDIR/cjpeg -q 95 -pre $PRECISION -dc fa $ENTROPYARG $LOSSLSARG $LOSSLSPSV -sa 4x1 -outf $OUTDIR/${basename}_411_fast_cjpeg.jpg $IMGDIR/${basename}.${EXT}
runme $EXEDIR/cjpeg -q 95 -pre $PRECISION -dc fa $ENTROPYARG $LOSSLSARG $LOSSLSPSV -sa 2x2 -outf $OUTDIR/${basename}_420_fast_cjpeg.jpg $IMGDIR/${basename}.${EXT}
runme $EXEDIR/cjpeg -q 95 -pre $PRECISION -dc fa $ENTROPYARG $LOSSLSARG $LOSSLSPSV -sa 1x2 -outf $OUTDIR/${basename}_440_fast_cjpeg.jpg $IMGDIR/${basename}.${EXT}
runme $EXEDIR/cjpeg -q 95 -pre $PRECISION -dc fa $ENTROPYARG $LOSSLSARG $LOSSLSPSV -sa 2x1 -outf $OUTDIR/${basename}_422_fast_cjpeg.jpg $IMGDIR/${basename}.${EXT}
runme $EXEDIR/cjpeg -q 95 -pre $PRECISION -dc fa $ENTROPYARG $LOSSLSARG $LOSSLSPSV -sa 1x1 -outf $OUTDIR/${basename}_444_fast_cjpeg.jpg $IMGDIR/${basename}.${EXT}
runme $EXEDIR/cjpeg -q 95 -pre $PRECISION -dc i $ENTROPYARG $LOSSLSARG $LOSSLSPSV -gr -outf $OUTDIR/${basename}_GRAY_accurate_cjpeg.jpg $IMGDIR/${basename}.${EXT}
runme $EXEDIR/cjpeg -q 95 -pre $PRECISION -dc i $ENTROPYARG $LOSSLSARG $LOSSLSPSV -sa 1x4 -outf $OUTDIR/${basename}_441_accurate_cjpeg.jpg $IMGDIR/${basename}.${EXT}
runme $EXEDIR/cjpeg -q 95 -pre $PRECISION -dc i $ENTROPYARG $LOSSLSARG $LOSSLSPSV -sa 4x1 -outf $OUTDIR/${basename}_411_accurate_cjpeg.jpg $IMGDIR/${basename}.${EXT}
runme $EXEDIR/cjpeg -q 95 -pre $PRECISION -dc i $ENTROPYARG $LOSSLSARG $LOSSLSPSV -sa 2x2 -outf $OUTDIR/${basename}_420_accurate_cjpeg.jpg $IMGDIR/${basename}.${EXT}
runme $EXEDIR/cjpeg -q 95 -pre $PRECISION -dc i $ENTROPYARG $LOSSLSARG $LOSSLSPSV -sa 1x2 -outf $OUTDIR/${basename}_440_accurate_cjpeg.jpg $IMGDIR/${basename}.${EXT}
runme $EXEDIR/cjpeg -q 95 -pre $PRECISION -dc i $ENTROPYARG $LOSSLSARG $LOSSLSPSV -sa 2x1 -outf $OUTDIR/${basename}_422_accurate_cjpeg.jpg $IMGDIR/${basename}.${EXT}
runme $EXEDIR/cjpeg -q 95 -pre $PRECISION -dc i $ENTROPYARG $LOSSLSARG $LOSSLSPSV -sa 1x1 -outf $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
runme $EXEDIR/djpeg -dc fa -rg $NSARG $BMPARG -outf $OUTDIR/${basename}_${samp}_fast_djpeg.${EXT} $OUTDIR/${basename}_${samp}_fast_cjpeg.jpg
runme $EXEDIR/djpeg -dc i -rg $NSARG $BMPARG -outf $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
runme $EXEDIR/djpeg -dc fa -nos $BMPARG -outf $OUTDIR/${basename}_${samp}_fast_nosmooth_djpeg.${EXT} $OUTDIR/${basename}_${samp}_fast_cjpeg.jpg
runme $EXEDIR/djpeg -dc i -nos $BMPARG -outf $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
dctarg=-fastd
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
runme $TJBENCH $OUTDIR/$image $TJQUAL -pre $PRECISION -rgb -q -be 0.01 -w 0 ${dctarg} $YUVARG $ALLOCARG $ENTROPYARG $LOSSLSARG
if [ "$LOSSLSARG" != "-l" ]; then
runme $TJBENCH $OUTDIR/$image $TJQUAL -pre $PRECISION -su 440 -rgb -q -be 0.01 -w 0 ${dctarg} $YUVARG $ALLOCARG $ENTROPYARG $LOSSLSARG
runme $TJBENCH $OUTDIR/$image $TJQUAL -pre $PRECISION -su 411 -rgb -q -be 0.01 -w 0 ${dctarg} $YUVARG $ALLOCARG $ENTROPYARG $LOSSLSARG
runme $TJBENCH $OUTDIR/$image $TJQUAL -pre $PRECISION -su 441 -rgb -q -be 0.01 -w 0 ${dctarg} $YUVARG $ALLOCARG $ENTROPYARG $LOSSLSARG
fi
for samp in $ALLSUBSAMP; do
if [ "$LOSSLSARG" = "-lossless" ]; then
if [ "$LOSSLSARG" = "-l" ]; 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
@@ -187,14 +190,14 @@ for image in $IMAGES; do
for dct in fast accurate; do
dctarg=
if [ "${dct}" = "fast" ]; then
dctarg=-fastdct
dctarg=-fastd
fi
# Tiled compression & decompression
runme $TJBENCH $OUTDIR/$image $TJQUAL -precision $PRECISION -rgb -tile -quiet -benchtime 0.01 -warmup 0 ${dctarg} $YUVARG $ALLOCARG $ENTROPYARG $LOSSLSARG
runme $TJBENCH $OUTDIR/$image $TJQUAL -pre $PRECISION -rgb -ti -q -be 0.01 -w 0 ${dctarg} $YUVARG $ALLOCARG $ENTROPYARG $LOSSLSARG
for samp in $x1SUBSAMP; do
if [ $ALLOC = 1 ]; then
if [ "$LOSSLSARG" = "-lossless" ]; then
if [ "$LOSSLSARG" = "-l" ]; 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
@@ -202,7 +205,7 @@ for image in $IMAGES; do
rm $OUTDIR/${basename}_${samp}_Q${TJQUAL}_full.${EXT}
fi
else
if [ "$LOSSLSARG" = "-lossless" ]; then
if [ "$LOSSLSARG" = "-l" ]; 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}
@@ -217,15 +220,15 @@ for image in $IMAGES; do
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
runme $TJBENCH $OUTDIR/$image $TJQUAL -pre $PRECISION -rgb -ti -q -be 0.01 -w 0 -fastu ${dctarg} $YUVARG $ALLOCARG $ENTROPYARG $LOSSLSARG
if [ "$LOSSLSARG" != "-l" ]; then
runme $TJBENCH $OUTDIR/$image $TJQUAL -pre $PRECISION -su 440 -rgb -ti -q -be 0.01 -w 0 -fastu ${dctarg} $YUVARG $ALLOCARG $ENTROPYARG $LOSSLSARG
runme $TJBENCH $OUTDIR/$image $TJQUAL -pre $PRECISION -su 411 -rgb -ti -q -be 0.01 -w 0 -fastu ${dctarg} $YUVARG $ALLOCARG $ENTROPYARG $LOSSLSARG
runme $TJBENCH $OUTDIR/$image $TJQUAL -pre $PRECISION -su 441 -rgb -ti -q -be 0.01 -w 0 -fastu ${dctarg} $YUVARG $ALLOCARG $ENTROPYARG $LOSSLSARG
fi
for samp in $x24SUBSAMP; do
if [ $ALLOC = 1 ]; then
if [ "$LOSSLSARG" = "-lossless" ]; then
if [ "$LOSSLSARG" = "-l" ]; 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
@@ -233,7 +236,7 @@ for image in $IMAGES; do
rm $OUTDIR/${basename}_${samp}_Q${TJQUAL}_full.${EXT}
fi
else
if [ "$LOSSLSARG" = "-lossless" ]; then
if [ "$LOSSLSARG" = "-l" ]; 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}
@@ -261,9 +264,9 @@ for image in $IMAGES; do
done
# Tiled decompression
if [ "$LOSSLSARG" != "-lossless" ]; then
if [ "$LOSSLSARG" != "-l" ]; 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
runme $TJBENCH $OUTDIR/${basename}_${samp}_Q95.jpg $BMPARG -ti -q -be 0.01 -w 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}
@@ -276,7 +279,7 @@ for image in $IMAGES; do
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
runme $TJBENCH $OUTDIR/${basename}_${samp}_Q95.jpg $BMPARG -ti -q -be 0.01 -w 0 -fastu ${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}
@@ -300,7 +303,7 @@ for image in $IMAGES; do
done
# Partial decompression
if [ "$LOSSLSARG" != "-lossless" -a "$YUVARG" != "-yuv" ]; then
if [ "$LOSSLSARG" != "-l" -a "$YUVARG" != "-yuv" ]; then
for samp in $ALLSUBSAMP; do
CROPW8_8=103
CROPL8_8=16
@@ -312,18 +315,18 @@ for image in $IMAGES; do
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 $EXEDIR/djpeg -rg -cr ${CROPW8_8}x90+${CROPL8_8}+5 $NSARG -outf $OUTDIR/${basename}_${samp}_scale_crop_djpeg.ppm $OUTDIR/${basename}_${samp}_accurate_cjpeg.jpg
runme $TJBENCH $OUTDIR/${basename}_${samp}_Q${TJQUAL}.jpg -cr ${CROPW8_8}x90+${CROPL8_8}+5 -q -be 0.01 -w 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 7/8 -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 $EXEDIR/djpeg -rg -s 7/8 -cr ${CROPW7_8}x81+${CROPL7_8}+3 $NSARG -outf $OUTDIR/${basename}_${samp}_scale_crop_djpeg.ppm $OUTDIR/${basename}_${samp}_accurate_cjpeg.jpg
runme $TJBENCH $OUTDIR/${basename}_${samp}_Q${TJQUAL}.jpg -s 7/8 -cr ${CROPW7_8}x81+${CROPL7_8}+3 -q -be 0.01 -w 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 1/2 -crop 40x40+0+0 -quiet -benchtime 0.01 -warmup 0 ${dctarg} $YUVARG $ALLOCARG $ENTROPYARG $LOSSLSARG
runme $EXEDIR/djpeg -rg -s 1/2 -cr 40x40+0+0 $NSARG -outf $OUTDIR/${basename}_${samp}_scale_crop_djpeg.ppm $OUTDIR/${basename}_${samp}_accurate_cjpeg.jpg
runme $TJBENCH $OUTDIR/${basename}_${samp}_Q${TJQUAL}.jpg -s 1/2 -cr 40x40+0+0 -q -be 0.01 -w 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
@@ -333,17 +336,17 @@ for image in $IMAGES; 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'`
SCALE=$scale
if [ "$LOSSLSARG" = "-lossless" ]; then
if [ "$LOSSLSARG" = "-l" ]; 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 $EXEDIR/djpeg -rg -s ${scalearg} $NSARG $BMPARG -outf $OUTDIR/${basename}_${samp}_${scale}_djpeg.${EXT} $OUTDIR/${basename}_${samp}_accurate_cjpeg.jpg
if [ "$LOSSLSARG" = "-l" ]; then
runme $TJBENCH $OUTDIR/${basename}_LOSSLS_PSV${TJQUAL}.jpg $BMPARG -s ${scalearg} -q -be 0.01 -w 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 $TJBENCH $OUTDIR/${basename}_${samp}_Q${TJQUAL}.jpg $BMPARG -s ${scalearg} -q -be 0.01 -w 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
@@ -351,20 +354,20 @@ for image in $IMAGES; do
done
# Transforms
if [ "$LOSSLSARG" != "-lossless" ]; then
if [ "$LOSSLSARG" != "-l" ]; 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
runme $EXEDIR/jpegtran -f h -tri -outf $OUTDIR/${basename}_${samp}_h_jpegtran.jpg $OUTDIR/${basename}_${samp}_Q95.jpg
runme $EXEDIR/jpegtran -f v -tri -outf $OUTDIR/${basename}_${samp}_v_jpegtran.jpg $OUTDIR/${basename}_${samp}_Q95.jpg
runme $EXEDIR/jpegtran -t -tri -outf $OUTDIR/${basename}_${samp}_t_jpegtran.jpg $OUTDIR/${basename}_${samp}_Q95.jpg
runme $EXEDIR/jpegtran -transv -tri -outf $OUTDIR/${basename}_${samp}_transv_jpegtran.jpg $OUTDIR/${basename}_${samp}_Q95.jpg
runme $EXEDIR/jpegtran -ro 90 -tri -outf $OUTDIR/${basename}_${samp}_rot90_jpegtran.jpg $OUTDIR/${basename}_${samp}_Q95.jpg
runme $EXEDIR/jpegtran -ro 180 -tri -outf $OUTDIR/${basename}_${samp}_rot180_jpegtran.jpg $OUTDIR/${basename}_${samp}_Q95.jpg
runme $EXEDIR/jpegtran -ro 270 -tri -outf $OUTDIR/${basename}_${samp}_rot270_jpegtran.jpg $OUTDIR/${basename}_${samp}_Q95.jpg
done
for xform in hflip vflip transpose transverse rot90 rot180 rot270; do
for xform in h v t transv 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
runme $EXEDIR/djpeg -rg $BMPARG -outf $OUTDIR/${basename}_${samp}_${xform}_jpegtran.${EXT} $OUTDIR/${basename}_${samp}_${xform}_jpegtran.jpg
runme $TJBENCH $OUTDIR/${basename}_${samp}_Q95.jpg $BMPARG -$xform -ti -q -be 0.01 -w 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}
@@ -377,8 +380,8 @@ for image in $IMAGES; do
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
runme $EXEDIR/djpeg -nos -rg $BMPARG -outf $OUTDIR/${basename}_${samp}_${xform}_jpegtran.${EXT} $OUTDIR/${basename}_${samp}_${xform}_jpegtran.jpg
runme $TJBENCH $OUTDIR/${basename}_${samp}_Q95.jpg $BMPARG -$xform -ti -q -be 0.01 -w 0 -fastu $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}
@@ -401,9 +404,9 @@ for image in $IMAGES; do
done
# Grayscale transform
for xform in hflip vflip transpose transverse rot90 rot180 rot270; do
for xform in h v t transv 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
runme $TJBENCH $OUTDIR/${basename}_${samp}_Q95.jpg $BMPARG -$xform -ti -q -be 0.01 -w 0 -grays $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}
@@ -427,12 +430,12 @@ for image in $IMAGES; do
done
# Transforms with scaling
for xform in hflip vflip transpose transverse rot90 rot180 rot270; do
for xform in h v t transv 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 $EXEDIR/djpeg -rg -s ${scalearg} $NSARG $BMPARG -outf $OUTDIR/${basename}_${samp}_${xform}_${scale}_jpegtran.${EXT} $OUTDIR/${basename}_${samp}_${xform}_jpegtran.jpg
runme $TJBENCH $OUTDIR/${basename}_${samp}_Q95.jpg $BMPARG -$xform -s ${scalearg} -q -be 0.01 -w 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