Code formatting tweaks
git-svn-id: svn+ssh://svn.code.sf.net/p/libjpeg-turbo/code/branches/1.3.x@968 632fc199-4ca6-4c93-a231-07263d6284db
diff --git a/java/TJBench.java b/java/TJBench.java
index 2f27b8e..c8cca5f 100644
--- a/java/TJBench.java
+++ b/java/TJBench.java
@@ -32,40 +32,37 @@
import java.util.*;
import org.libjpegturbo.turbojpeg.*;
-class TJBench
-{
+class TJBench {
+
static final int YUVENCODE = 1;
static final int YUVDECODE = 2;
static int flags = 0, yuv = 0, quiet = 0, pf = TJ.PF_BGR;
static boolean decompOnly, doTile;
- static final String pixFormatStr[] = {
+ static final String[] pixFormatStr = {
"RGB", "BGR", "RGBX", "BGRX", "XBGR", "XRGB", "GRAY"
};
- static final String subNameLong[] = {
+ static final String[] subNameLong = {
"4:4:4", "4:2:2", "4:2:0", "GRAY", "4:4:0"
};
- static final String subName[] = {
+ static final String[] subName = {
"444", "422", "420", "GRAY", "440"
};
static TJScalingFactor sf;
- static int nsf = 0;
static int xformOp = TJTransform.OP_NONE, xformOpt = 0;
static double benchTime = 5.0;
- static final double getTime()
- {
+ static final double getTime() {
return (double)System.nanoTime() / 1.0e9;
}
- static String sigFig(double val, int figs)
- {
+ static String sigFig(double val, int figs) {
String format;
int digitsAfterDecimal = figs - (int)Math.ceil(Math.log10(Math.abs(val)));
if (digitsAfterDecimal < 1)
@@ -76,19 +73,18 @@
}
- static byte[] loadImage(String fileName, int[] w, int[] h, int pf)
- throws Exception
- {
+ static byte[] loadImage(String fileName, int[] w, int[] h, int pixelFormat)
+ throws Exception {
BufferedImage img = ImageIO.read(new File(fileName));
if (img == null)
throw new Exception("Could not read " + fileName);
w[0] = img.getWidth();
h[0] = img.getHeight();
- int rgb[] = img.getRGB(0, 0, w[0], h[0], null, 0, w[0]);
- int ps = TJ.getPixelSize(pf);
- int rindex = TJ.getRedOffset(pf);
- int gindex = TJ.getGreenOffset(pf);
- int bindex = TJ.getBlueOffset(pf);
+ int[] rgb = img.getRGB(0, 0, w[0], h[0], null, 0, w[0]);
+ int ps = TJ.getPixelSize(pixelFormat);
+ int rindex = TJ.getRedOffset(pixelFormat);
+ int gindex = TJ.getGreenOffset(pixelFormat);
+ int bindex = TJ.getBlueOffset(pixelFormat);
byte[] dstBuf = new byte[w[0] * h[0] * ps];
int pixels = w[0] * h[0], dstPtr = 0, rgbPtr = 0;
while (pixels-- > 0) {
@@ -102,15 +98,14 @@
}
- static void saveImage(String fileName, byte[] srcBuf, int w, int h, int pf)
- throws Exception
- {
+ static void saveImage(String fileName, byte[] srcBuf, int w, int h,
+ int pixelFormat) throws Exception {
BufferedImage img = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
int pixels = w * h, srcPtr = 0;
- int ps = TJ.getPixelSize(pf);
- int rindex = TJ.getRedOffset(pf);
- int gindex = TJ.getGreenOffset(pf);
- int bindex = TJ.getBlueOffset(pf);
+ int ps = TJ.getPixelSize(pixelFormat);
+ int rindex = TJ.getRedOffset(pixelFormat);
+ int gindex = TJ.getGreenOffset(pixelFormat);
+ int bindex = TJ.getBlueOffset(pixelFormat);
for (int y = 0; y < h; y++) {
for (int x = 0; x < w; x++, srcPtr += ps) {
int pixel = (srcBuf[srcPtr + rindex] & 0xff) << 16 |
@@ -127,8 +122,7 @@
static void decompTest(byte[] srcBuf, byte[][] jpegBuf, int[] jpegSize,
byte[] dstBuf, int w, int h, int subsamp,
int jpegQual, String fileName, int tilew, int tileh)
- throws Exception
- {
+ throws Exception {
String qualStr = new String(""), sizeStr, tempStr;
TJDecompressor tjd;
double start, elapsed;
@@ -137,12 +131,12 @@
int scaledw = (yuv == YUVDECODE) ? w : sf.getScaled(w);
int scaledh = (yuv == YUVDECODE) ? h : sf.getScaled(h);
int pitch = scaledw * ps;
-
+
if (jpegQual > 0)
qualStr = new String("_Q" + jpegQual);
-
+
tjd = new TJDecompressor();
-
+
int bufSize = (yuv == YUVDECODE ? yuvSize : pitch * scaledh);
if (dstBuf == null)
dstBuf = new byte[bufSize];
@@ -150,18 +144,18 @@
/* Set the destination buffer to gray so we know whether the decompressor
attempted to write to it */
Arrays.fill(dstBuf, (byte)127);
-
+
/* Execute once to preload cache */
tjd.setJPEGImage(jpegBuf[0], jpegSize[0]);
if (yuv == YUVDECODE)
tjd.decompressToYUV(dstBuf, flags);
else
tjd.decompress(dstBuf, scaledw, pitch, scaledh, pf, flags);
-
+
/* Benchmark */
for (i = 0, start = getTime(); (elapsed = getTime() - start) < benchTime;
i++) {
- int tile=0;
+ int tile = 0;
if (yuv == YUVDECODE)
tjd.decompressToYUV(dstBuf, flags);
else {
@@ -188,7 +182,7 @@
System.out.format(" Dest. throughput: %f Megapixels/sec\n",
(double)(w * h) / 1000000. * (double)i / elapsed);
}
-
+
if (yuv == YUVDECODE) {
tempStr = fileName + "_" + subName[subsamp] + qualStr + ".yuv";
FileOutputStream fos = new FileOutputStream(tempStr);
@@ -221,7 +215,8 @@
int lum = (int)((double)(srcBuf[rindex] & 0xff) * 0.299 +
(double)(srcBuf[gindex] & 0xff) * 0.587 +
(double)(srcBuf[bindex] & 0xff) * 0.114 + 0.5);
- if (lum > 255) lum = 255; if (lum < 0) lum = 0;
+ if (lum > 255) lum = 255;
+ if (lum < 0) lum = 0;
dstBuf[rindex] = (byte)Math.abs((dstBuf[rindex] & 0xff) - lum);
dstBuf[gindex] = (byte)Math.abs((dstBuf[gindex] & 0xff) - lum);
dstBuf[bindex] = (byte)Math.abs((dstBuf[bindex] & 0xff) - lum);
@@ -241,39 +236,38 @@
static void doTestYUV(byte[] srcBuf, int w, int h, int subsamp,
- String fileName) throws Exception
- {
+ String fileName) throws Exception {
TJCompressor tjc;
byte[] dstBuf;
double start, elapsed;
int ps = TJ.getPixelSize(pf), i;
int yuvSize = 0;
-
+
yuvSize = TJ.bufSizeYUV(w, h, subsamp);
dstBuf = new byte[yuvSize];
-
+
if (quiet == 0)
System.out.format(">>>>> %s (%s) <--> YUV %s <<<<<\n",
pixFormatStr[pf],
(flags & TJ.FLAG_BOTTOMUP) != 0 ? "Bottom-up" : "Top-down",
subNameLong[subsamp]);
-
+
if (quiet == 1)
System.out.format("%s\t%s\t%s\tN/A\t", pixFormatStr[pf],
(flags & TJ.FLAG_BOTTOMUP) != 0 ? "BU" : "TD",
subNameLong[subsamp]);
-
+
tjc = new TJCompressor(srcBuf, w, 0, h, pf);
tjc.setSubsamp(subsamp);
-
+
/* Execute once to preload cache */
tjc.encodeYUV(dstBuf, flags);
-
+
/* Benchmark */
for (i = 0, start = getTime();
(elapsed = getTime() - start) < benchTime; i++)
tjc.encodeYUV(dstBuf, flags);
-
+
if (quiet == 1)
System.out.format("%-4d %-4d\t", w, h);
if (quiet != 0) {
@@ -301,11 +295,10 @@
if (quiet == 0)
System.out.println("Reference image written to " + tempStr);
}
-
+
static void doTest(byte[] srcBuf, int w, int h, int subsamp, int jpegQual,
- String fileName) throws Exception
- {
+ String fileName) throws Exception {
TJCompressor tjc;
byte[] tmpBuf;
byte[][] jpegBuf;
@@ -313,12 +306,12 @@
double start, elapsed;
int totalJpegSize = 0, tilew, tileh, i;
int ps = TJ.getPixelSize(pf), ntilesw = 1, ntilesh = 1, pitch = w * ps;
-
+
if (yuv == YUVENCODE) {
doTestYUV(srcBuf, w, h, subsamp, fileName);
return;
}
-
+
tmpBuf = new byte[pitch * h];
if (quiet == 0)
@@ -328,7 +321,7 @@
subNameLong[subsamp], jpegQual);
tjc = new TJCompressor();
-
+
for (tilew = doTile ? 8 : w, tileh = doTile ? 8 : h; ;
tilew *= 2, tileh *= 2) {
if (tilew > w)
@@ -340,7 +333,7 @@
jpegBuf = new byte[ntilesw * ntilesh][TJ.bufSize(tilew, tileh, subsamp)];
jpegSize = new int[ntilesw * ntilesh];
-
+
/* Compression test */
if (quiet == 1)
System.out.format("%s\t%s\t%s\t%d\t", pixFormatStr[pf],
@@ -354,7 +347,7 @@
/* Execute once to preload cache */
tjc.compress(jpegBuf[0], flags);
-
+
/* Benchmark */
for (i = 0, start = getTime();
(elapsed = getTime() - start) < benchTime; i++) {
@@ -403,11 +396,11 @@
if (quiet == 0)
System.out.println("Reference image written to " + tempStr);
}
-
+
/* Decompression test */
decompTest(srcBuf, jpegBuf, jpegSize, tmpBuf, w, h, subsamp, jpegQual,
fileName, tilew, tileh);
-
+
for (i = 0; i < ntilesw * ntilesh; i++)
jpegBuf[i] = null;
jpegBuf = null; jpegSize = null;
@@ -418,8 +411,7 @@
}
- static void doDecompTest(String fileName) throws Exception
- {
+ static void doDecompTest(String fileName) throws Exception {
TJTransformer tjt;
byte[][] jpegBuf;
byte[] srcBuf;
@@ -430,7 +422,7 @@
int ntilesw = 1, ntilesh = 1;
double start, elapsed;
int ps = TJ.getPixelSize(pf), tile;
-
+
FileInputStream fis = new FileInputStream(fileName);
int srcSize = (int)fis.getChannel().size();
srcBuf = new byte[srcSize];
@@ -447,7 +439,7 @@
w = tjt.getWidth();
h = tjt.getHeight();
subsamp = tjt.getSubsamp();
-
+
if (quiet == 1) {
System.out.println("All performance values in Mpixels/sec\n");
System.out.format("Bitmap\tBitmap\tJPEG\t%s %s \tXform\tComp\tDecomp\n",
@@ -459,7 +451,7 @@
subNameLong[subsamp], pixFormatStr[pf],
(flags & TJ.FLAG_BOTTOMUP) != 0 ? "Bottom-up" : "Top-down");
}
-
+
for (int tilew = doTile ? 16 : w, tileh = doTile ? 16 : h; ;
tilew *= 2, tileh *= 2) {
if (tilew > w)
@@ -468,7 +460,7 @@
tileh = h;
ntilesw = (w + tilew - 1) / tilew;
ntilesh = (h + tileh - 1) / tileh;
-
+
_w = w; _h = h; _tilew = tilew; _tileh = tileh;
if (quiet == 0) {
System.out.format("\n%s size: %d x %d", (doTile ? "Tile" : "Image"),
@@ -477,13 +469,13 @@
System.out.format(" --> %d x %d", sf.getScaled(_w),
sf.getScaled(_h));
System.out.println("");
- } else if (quiet==1) {
+ } else if (quiet == 1) {
System.out.format("%s\t%s\t%s\t", pixFormatStr[pf],
(flags & TJ.FLAG_BOTTOMUP) != 0 ? "BU" : "TD",
subNameLong[subsamp]);
System.out.format("%-4d %-4d\t", tilew, tileh);
}
-
+
_subsamp = subsamp;
if (doTile || xformOp != TJTransform.OP_NONE || xformOpt != 0) {
if (xformOp == TJTransform.OP_TRANSPOSE ||
@@ -492,7 +484,7 @@
xformOp == TJTransform.OP_ROT270) {
_w = h; _h = w; _tilew = tileh; _tileh = tilew;
}
-
+
if ((xformOpt & TJTransform.OPT_GRAY) != 0)
_subsamp = TJ.SAMP_GRAY;
if (xformOp == TJTransform.OP_HFLIP ||
@@ -509,8 +501,8 @@
_h = _h - (_h % TJ.getMCUWidth(_subsamp));
_ntilesw = (_w + _tilew - 1) / _tilew;
_ntilesh = (_h + _tileh - 1) / _tileh;
-
- TJTransform t[] = new TJTransform[_ntilesw * _ntilesh];
+
+ TJTransform[] t = new TJTransform[_ntilesw * _ntilesh];
jpegBuf = new byte[_ntilesw * _ntilesh][TJ.bufSize(_tilew, _tileh, subsamp)];
for (y = 0, tile = 0; y < _h; y += _tileh) {
@@ -527,17 +519,17 @@
jpegBuf[tile] = null;
}
}
-
+
start = getTime();
tjt.transform(jpegBuf, t, flags);
jpegSize = tjt.getTransformedSizes();
elapsed = getTime() - start;
-
+
t = null;
-
+
for (tile = 0, totalJpegSize = 0; tile < _ntilesw * _ntilesh; tile++)
totalJpegSize += jpegSize[tile];
-
+
if (quiet != 0) {
System.out.format("%s%c%s%c",
sigFig((double)(w * h) / 1000000. / elapsed, 4),
@@ -564,7 +556,7 @@
jpegSize[0] = srcSize;
System.arraycopy(srcBuf, 0, jpegBuf[0], 0, srcSize);
}
-
+
if (w == tilew)
_tilew = _w;
if (h == tileh)
@@ -574,19 +566,18 @@
fileName, _tilew, _tileh);
else if (quiet == 1)
System.out.println("N/A");
-
+
jpegBuf = null;
jpegSize = null;
-
+
if (tilew == w && tileh == h) break;
}
}
-
-
- static void usage() throws Exception
- {
+
+
+ static void usage() throws Exception {
int i;
- TJScalingFactor scalingFactors[] = TJ.getScalingFactors();
+ TJScalingFactor[] scalingFactors = TJ.getScalingFactors();
int nsf = scalingFactors.length;
String className = new TJBench().getClass().getName();
@@ -639,224 +630,223 @@
System.out.println("test will be performed for all quality values in the range.\n");
System.exit(1);
}
-
-
- public static void main(String argv[])
- {
+
+
+ public static void main(String[] argv) {
byte[] srcBuf = null; int w = 0, h = 0;
int minQual = -1, maxQual = -1;
int minArg = 1; int retval = 0;
try {
- if (argv.length < minArg)
- usage();
-
- String tempStr = argv[0].toLowerCase();
- if (tempStr.endsWith(".jpg") || tempStr.endsWith(".jpeg"))
- decompOnly = true;
-
- System.out.println("");
-
- if (argv.length > minArg) {
- for (int i = minArg; i < argv.length; i++) {
- if (argv[i].equalsIgnoreCase("-yuvencode")) {
- System.out.println("Testing YUV planar encoding\n");
- yuv = YUVENCODE; maxQual = minQual = 100;
- }
- if (argv[i].equalsIgnoreCase("-yuvdecode")) {
- System.out.println("Testing YUV planar decoding\n");
- yuv = YUVDECODE;
- }
- }
- }
-
- if (!decompOnly && yuv != YUVENCODE) {
- minArg = 2;
if (argv.length < minArg)
usage();
- try {
- minQual = Integer.parseInt(argv[1]);
- } catch (NumberFormatException e) {}
- if (minQual < 1 || minQual > 100)
- throw new Exception("Quality must be between 1 and 100.");
- int dashIndex = argv[1].indexOf('-');
- if (dashIndex > 0 && argv[1].length() > dashIndex + 1) {
- try {
- maxQual = Integer.parseInt(argv[1].substring(dashIndex + 1));
- } catch (NumberFormatException e) {}
- }
- if (maxQual < 1 || maxQual > 100)
- maxQual = minQual;
- }
-
- if (argv.length > minArg) {
- for (int i = minArg; i < argv.length; i++) {
- if (argv[i].equalsIgnoreCase("-tile")) {
- doTile = true; xformOpt |= TJTransform.OPT_CROP;
- }
- if (argv[i].equalsIgnoreCase("-forcesse3")) {
- System.out.println("Forcing SSE3 code\n");
- flags |= TJ.FLAG_FORCESSE3;
- }
- if (argv[i].equalsIgnoreCase("-forcesse2")) {
- System.out.println("Forcing SSE2 code\n");
- flags |= TJ.FLAG_FORCESSE2;
- }
- if (argv[i].equalsIgnoreCase("-forcesse")) {
- System.out.println("Forcing SSE code\n");
- flags |= TJ.FLAG_FORCESSE;
- }
- if (argv[i].equalsIgnoreCase("-forcemmx")) {
- System.out.println("Forcing MMX code\n");
- flags |= TJ.FLAG_FORCEMMX;
- }
- if (argv[i].equalsIgnoreCase("-fastupsample")) {
- System.out.println("Using fast upsampling code\n");
- flags |= TJ.FLAG_FASTUPSAMPLE;
- }
- if (argv[i].equalsIgnoreCase("-fastdct")) {
- System.out.println("Using fastest DCT/IDCT algorithm\n");
- flags |= TJ.FLAG_FASTDCT;
- }
- if (argv[i].equalsIgnoreCase("-accuratedct")) {
- System.out.println("Using most accurate DCT/IDCT algorithm\n");
- flags |= TJ.FLAG_ACCURATEDCT;
- }
- if (argv[i].equalsIgnoreCase("-rgb"))
- pf = TJ.PF_RGB;
- if (argv[i].equalsIgnoreCase("-rgbx"))
- pf = TJ.PF_RGBX;
- if (argv[i].equalsIgnoreCase("-bgr"))
- pf = TJ.PF_BGR;
- if (argv[i].equalsIgnoreCase("-bgrx"))
- pf = TJ.PF_BGRX;
- if (argv[i].equalsIgnoreCase("-xbgr"))
- pf = TJ.PF_XBGR;
- if (argv[i].equalsIgnoreCase("-xrgb"))
- pf = TJ.PF_XRGB;
- if (argv[i].equalsIgnoreCase("-bottomup"))
- flags |= TJ.FLAG_BOTTOMUP;
- if (argv[i].equalsIgnoreCase("-quiet"))
- quiet = 1;
- if (argv[i].equalsIgnoreCase("-qq"))
- quiet = 2;
- if (argv[i].equalsIgnoreCase("-scale") && i < argv.length - 1) {
- int temp1 = 0, temp2 = 0;
- boolean match = false, scanned = true;
- Scanner scanner = new Scanner(argv[++i]).useDelimiter("/");
- try {
- temp1 = scanner.nextInt();
- temp2 = scanner.nextInt();
- } catch(Exception e) {}
- if (temp2 <= 0) temp2 = 1;
- if (temp1 > 0) {
- TJScalingFactor scalingFactors[] = TJ.getScalingFactors();
- for (int j = 0; j < scalingFactors.length; j++) {
- if ((double)temp1 / (double)temp2 ==
- (double)scalingFactors[j].getNum() /
- (double)scalingFactors[j].getDenom()) {
- sf = scalingFactors[j];
- match = true; break;
- }
- }
- if (!match) usage();
- } else
- usage();
- }
- if (argv[i].equalsIgnoreCase("-hflip"))
- xformOp = TJTransform.OP_HFLIP;
- if (argv[i].equalsIgnoreCase("-vflip"))
- xformOp = TJTransform.OP_VFLIP;
- if (argv[i].equalsIgnoreCase("-transpose"))
- xformOp = TJTransform.OP_TRANSPOSE;
- if (argv[i].equalsIgnoreCase("-transverse"))
- xformOp = TJTransform.OP_TRANSVERSE;
- if (argv[i].equalsIgnoreCase("-rot90"))
- xformOp = TJTransform.OP_ROT90;
- if (argv[i].equalsIgnoreCase("-rot180"))
- xformOp = TJTransform.OP_ROT180;
- if (argv[i].equalsIgnoreCase("-rot270"))
- xformOp = TJTransform.OP_ROT270;
- if (argv[i].equalsIgnoreCase("-grayscale"))
- xformOpt |= TJTransform.OPT_GRAY;
- if (argv[i].equalsIgnoreCase("-nooutput"))
- xformOpt |= TJTransform.OPT_NOOUTPUT;
- 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();
- }
- if (argv[i].equalsIgnoreCase("-?"))
- usage();
- }
- }
- if (sf == null)
- sf = new TJScalingFactor(1, 1);
-
- if ((sf.getNum() != 1 || sf.getDenom() != 1) && doTile) {
- System.out.println("Disabling tiled compression/decompression tests, because those tests do not");
- System.out.println("work when scaled decompression is enabled.");
- doTile = false;
- }
-
- if (yuv != 0 && doTile) {
- System.out.println("Disabling tiled compression/decompression tests, because those tests do not");
- System.out.println("work when YUV encoding or decoding is enabled.\n");
- doTile = false;
- }
-
- if (!decompOnly) {
- int[] width = new int[1], height = new int[1];
- srcBuf = loadImage(argv[0], width, height, pf);
- w = width[0]; h = height[0];
- int index = -1;
- if ((index = argv[0].indexOf('.')) >= 0)
- argv[0] = argv[0].substring(0, index);
- }
-
- if (quiet == 1 && !decompOnly) {
- System.out.println("All performance values in Mpixels/sec\n");
- System.out.format("Bitmap\tBitmap\tJPEG\tJPEG\t%s %s \tComp\tComp\tDecomp\n",
- (doTile ? "Tile " : "Image"), (doTile ? "Tile " : "Image"));
- System.out.println("Format\tOrder\tSubsamp\tQual\tWidth Height\tPerf \tRatio\tPerf\n");
- }
-
- if (decompOnly) {
- doDecompTest(argv[0]);
+ String tempStr = argv[0].toLowerCase();
+ if (tempStr.endsWith(".jpg") || tempStr.endsWith(".jpeg"))
+ decompOnly = true;
+
System.out.println("");
- System.exit(retval);
- }
- System.gc();
- for (int i = maxQual; i >= minQual; i--)
- doTest(srcBuf, w, h, TJ.SAMP_GRAY, i, argv[0]);
- System.out.println("");
- System.gc();
- for (int i = maxQual; i >= minQual; i--)
- doTest(srcBuf, w, h, TJ.SAMP_420, i, argv[0]);
- System.out.println("");
- System.gc();
- for (int i = maxQual; i >= minQual; i--)
- doTest(srcBuf, w, h, TJ.SAMP_422, i, argv[0]);
- System.out.println("");
- System.gc();
- for (int i = maxQual; i >= minQual; i--)
- doTest(srcBuf, w, h, TJ.SAMP_444, i, argv[0]);
- System.out.println("");
+ if (argv.length > minArg) {
+ for (int i = minArg; i < argv.length; i++) {
+ if (argv[i].equalsIgnoreCase("-yuvencode")) {
+ System.out.println("Testing YUV planar encoding\n");
+ yuv = YUVENCODE; maxQual = minQual = 100;
+ }
+ if (argv[i].equalsIgnoreCase("-yuvdecode")) {
+ System.out.println("Testing YUV planar decoding\n");
+ yuv = YUVDECODE;
+ }
+ }
+ }
+
+ if (!decompOnly && yuv != YUVENCODE) {
+ minArg = 2;
+ if (argv.length < minArg)
+ usage();
+ try {
+ minQual = Integer.parseInt(argv[1]);
+ } catch (NumberFormatException e) {}
+ if (minQual < 1 || minQual > 100)
+ throw new Exception("Quality must be between 1 and 100.");
+ int dashIndex = argv[1].indexOf('-');
+ if (dashIndex > 0 && argv[1].length() > dashIndex + 1) {
+ try {
+ maxQual = Integer.parseInt(argv[1].substring(dashIndex + 1));
+ } catch (NumberFormatException e) {}
+ }
+ if (maxQual < 1 || maxQual > 100)
+ maxQual = minQual;
+ }
+
+ if (argv.length > minArg) {
+ for (int i = minArg; i < argv.length; i++) {
+ if (argv[i].equalsIgnoreCase("-tile")) {
+ doTile = true; xformOpt |= TJTransform.OPT_CROP;
+ }
+ if (argv[i].equalsIgnoreCase("-forcesse3")) {
+ System.out.println("Forcing SSE3 code\n");
+ flags |= TJ.FLAG_FORCESSE3;
+ }
+ if (argv[i].equalsIgnoreCase("-forcesse2")) {
+ System.out.println("Forcing SSE2 code\n");
+ flags |= TJ.FLAG_FORCESSE2;
+ }
+ if (argv[i].equalsIgnoreCase("-forcesse")) {
+ System.out.println("Forcing SSE code\n");
+ flags |= TJ.FLAG_FORCESSE;
+ }
+ if (argv[i].equalsIgnoreCase("-forcemmx")) {
+ System.out.println("Forcing MMX code\n");
+ flags |= TJ.FLAG_FORCEMMX;
+ }
+ if (argv[i].equalsIgnoreCase("-fastupsample")) {
+ System.out.println("Using fast upsampling code\n");
+ flags |= TJ.FLAG_FASTUPSAMPLE;
+ }
+ if (argv[i].equalsIgnoreCase("-fastdct")) {
+ System.out.println("Using fastest DCT/IDCT algorithm\n");
+ flags |= TJ.FLAG_FASTDCT;
+ }
+ if (argv[i].equalsIgnoreCase("-accuratedct")) {
+ System.out.println("Using most accurate DCT/IDCT algorithm\n");
+ flags |= TJ.FLAG_ACCURATEDCT;
+ }
+ if (argv[i].equalsIgnoreCase("-rgb"))
+ pf = TJ.PF_RGB;
+ if (argv[i].equalsIgnoreCase("-rgbx"))
+ pf = TJ.PF_RGBX;
+ if (argv[i].equalsIgnoreCase("-bgr"))
+ pf = TJ.PF_BGR;
+ if (argv[i].equalsIgnoreCase("-bgrx"))
+ pf = TJ.PF_BGRX;
+ if (argv[i].equalsIgnoreCase("-xbgr"))
+ pf = TJ.PF_XBGR;
+ if (argv[i].equalsIgnoreCase("-xrgb"))
+ pf = TJ.PF_XRGB;
+ if (argv[i].equalsIgnoreCase("-bottomup"))
+ flags |= TJ.FLAG_BOTTOMUP;
+ if (argv[i].equalsIgnoreCase("-quiet"))
+ quiet = 1;
+ if (argv[i].equalsIgnoreCase("-qq"))
+ quiet = 2;
+ if (argv[i].equalsIgnoreCase("-scale") && i < argv.length - 1) {
+ int temp1 = 0, temp2 = 0;
+ boolean match = false, scanned = true;
+ Scanner scanner = new Scanner(argv[++i]).useDelimiter("/");
+ try {
+ temp1 = scanner.nextInt();
+ temp2 = scanner.nextInt();
+ } catch(Exception e) {}
+ if (temp2 <= 0) temp2 = 1;
+ if (temp1 > 0) {
+ TJScalingFactor[] scalingFactors = TJ.getScalingFactors();
+ for (int j = 0; j < scalingFactors.length; j++) {
+ if ((double)temp1 / (double)temp2 ==
+ (double)scalingFactors[j].getNum() /
+ (double)scalingFactors[j].getDenom()) {
+ sf = scalingFactors[j];
+ match = true; break;
+ }
+ }
+ if (!match) usage();
+ } else
+ usage();
+ }
+ if (argv[i].equalsIgnoreCase("-hflip"))
+ xformOp = TJTransform.OP_HFLIP;
+ if (argv[i].equalsIgnoreCase("-vflip"))
+ xformOp = TJTransform.OP_VFLIP;
+ if (argv[i].equalsIgnoreCase("-transpose"))
+ xformOp = TJTransform.OP_TRANSPOSE;
+ if (argv[i].equalsIgnoreCase("-transverse"))
+ xformOp = TJTransform.OP_TRANSVERSE;
+ if (argv[i].equalsIgnoreCase("-rot90"))
+ xformOp = TJTransform.OP_ROT90;
+ if (argv[i].equalsIgnoreCase("-rot180"))
+ xformOp = TJTransform.OP_ROT180;
+ if (argv[i].equalsIgnoreCase("-rot270"))
+ xformOp = TJTransform.OP_ROT270;
+ if (argv[i].equalsIgnoreCase("-grayscale"))
+ xformOpt |= TJTransform.OPT_GRAY;
+ if (argv[i].equalsIgnoreCase("-nooutput"))
+ xformOpt |= TJTransform.OPT_NOOUTPUT;
+ 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();
+ }
+ if (argv[i].equalsIgnoreCase("-?"))
+ usage();
+ }
+ }
+
+ if (sf == null)
+ sf = new TJScalingFactor(1, 1);
+
+ if ((sf.getNum() != 1 || sf.getDenom() != 1) && doTile) {
+ System.out.println("Disabling tiled compression/decompression tests, because those tests do not");
+ System.out.println("work when scaled decompression is enabled.");
+ doTile = false;
+ }
+
+ if (yuv != 0 && doTile) {
+ System.out.println("Disabling tiled compression/decompression tests, because those tests do not");
+ System.out.println("work when YUV encoding or decoding is enabled.\n");
+ doTile = false;
+ }
+
+ if (!decompOnly) {
+ int[] width = new int[1], height = new int[1];
+ srcBuf = loadImage(argv[0], width, height, pf);
+ w = width[0]; h = height[0];
+ int index = -1;
+ if ((index = argv[0].indexOf('.')) >= 0)
+ argv[0] = argv[0].substring(0, index);
+ }
+
+ if (quiet == 1 && !decompOnly) {
+ System.out.println("All performance values in Mpixels/sec\n");
+ System.out.format("Bitmap\tBitmap\tJPEG\tJPEG\t%s %s \tComp\tComp\tDecomp\n",
+ (doTile ? "Tile " : "Image"), (doTile ? "Tile " : "Image"));
+ System.out.println("Format\tOrder\tSubsamp\tQual\tWidth Height\tPerf \tRatio\tPerf\n");
+ }
+
+ if (decompOnly) {
+ doDecompTest(argv[0]);
+ System.out.println("");
+ System.exit(retval);
+ }
+
+ System.gc();
+ for (int i = maxQual; i >= minQual; i--)
+ doTest(srcBuf, w, h, TJ.SAMP_GRAY, i, argv[0]);
+ System.out.println("");
+ System.gc();
+ for (int i = maxQual; i >= minQual; i--)
+ doTest(srcBuf, w, h, TJ.SAMP_420, i, argv[0]);
+ System.out.println("");
+ System.gc();
+ for (int i = maxQual; i >= minQual; i--)
+ doTest(srcBuf, w, h, TJ.SAMP_422, i, argv[0]);
+ System.out.println("");
+ System.gc();
+ for (int i = maxQual; i >= minQual; i--)
+ doTest(srcBuf, w, h, TJ.SAMP_444, i, argv[0]);
+ System.out.println("");
} catch (Exception e) {
System.out.println("ERROR: " + e.getMessage());
e.printStackTrace();
retval = -1;
}
-
+
System.exit(retval);
}
diff --git a/java/TJExample.java b/java/TJExample.java
index 1480941..a4971a4 100644
--- a/java/TJExample.java
+++ b/java/TJExample.java
@@ -51,12 +51,15 @@
System.out.println("Options:\n");
System.out.println("-scale M/N = if the input image is a JPEG file, scale the width/height of the");
System.out.print(" output image by a factor of M/N (M/N = ");
- for(int i = 0; i < sf.length; i++) {
+ for (int i = 0; i < sf.length; i++) {
System.out.print(sf[i].getNum() + "/" + sf[i].getDenom());
- if(sf.length == 2 && i != sf.length - 1) System.out.print(" or ");
- else if(sf.length > 2) {
- if(i != sf.length - 1) System.out.print(", ");
- if(i == sf.length - 2) System.out.print("or ");
+ if (sf.length == 2 && i != sf.length - 1)
+ System.out.print(" or ");
+ else if (sf.length > 2) {
+ if (i != sf.length - 1)
+ System.out.print(", ");
+ if (i == sf.length - 2)
+ System.out.print("or ");
}
}
System.out.println(")\n");
@@ -90,13 +93,14 @@
System.exit(1);
}
- private final static String sampName[] = {
+ private static final String[] sampName = {
"4:4:4", "4:2:2", "4:2:0", "Grayscale", "4:4:0"
};
- public static void main(String argv[]) {
+ public static void main(String[] argv) {
- BufferedImage img = null; byte[] bmpBuf = null;
+ BufferedImage img = null;
+ byte[] bmpBuf = null;
TJTransform xform = new TJTransform();
int flags = 0;
@@ -104,7 +108,7 @@
sf = TJ.getScalingFactors();
- if(argv.length < 2) {
+ if (argv.length < 2) {
usage();
}
@@ -113,119 +117,134 @@
int outSubsamp = -1, outQual = 95;
boolean display = false;
- if(argv.length > 1) {
- for(int i = 1; i < argv.length; i++) {
- if(argv[i].length() < 2) continue;
- if(argv[i].length() > 2
- && argv[i].substring(0, 3).equalsIgnoreCase("-sc")) {
+ if (argv.length > 1) {
+ for (int i = 1; i < argv.length; i++) {
+ if (argv[i].length() < 2)
+ continue;
+ if (argv[i].length() > 2 &&
+ argv[i].substring(0, 3).equalsIgnoreCase("-sc")) {
int match = 0;
- if(i < argv.length - 1) {
+ if (i < argv.length - 1) {
String[] scaleArg = argv[++i].split("/");
- if(scaleArg.length == 2) {
+ if (scaleArg.length == 2) {
TJScalingFactor tempsf =
new TJScalingFactor(Integer.parseInt(scaleArg[0]),
- Integer.parseInt(scaleArg[1]));
- for(int j = 0; j < sf.length; j++) {
- if(tempsf.equals(sf[j])) {
+ Integer.parseInt(scaleArg[1]));
+ for (int j = 0; j < sf.length; j++) {
+ if (tempsf.equals(sf[j])) {
scaleFactor = sf[j];
- match = 1; break;
+ match = 1;
+ break;
}
}
}
}
- if(match != 1) usage();
+ if (match != 1) usage();
}
- if(argv[i].equalsIgnoreCase("-h") || argv[i].equalsIgnoreCase("-?"))
+ if (argv[i].equalsIgnoreCase("-h") || argv[i].equalsIgnoreCase("-?"))
usage();
- if(argv[i].length() > 2
- && argv[i].substring(0, 3).equalsIgnoreCase("-sa")) {
- if(i < argv.length - 1) {
+ if (argv[i].length() > 2 &&
+ argv[i].substring(0, 3).equalsIgnoreCase("-sa")) {
+ if (i < argv.length - 1) {
i++;
- if(argv[i].substring(0, 1).equalsIgnoreCase("g"))
+ if (argv[i].substring(0, 1).equalsIgnoreCase("g"))
outSubsamp = TJ.SAMP_GRAY;
- else if(argv[i].equals("444")) outSubsamp = TJ.SAMP_444;
- else if(argv[i].equals("422")) outSubsamp = TJ.SAMP_422;
- else if(argv[i].equals("420")) outSubsamp = TJ.SAMP_420;
- else usage();
- }
- else usage();
+ else if (argv[i].equals("444"))
+ outSubsamp = TJ.SAMP_444;
+ else if (argv[i].equals("422"))
+ outSubsamp = TJ.SAMP_422;
+ else if (argv[i].equals("420"))
+ outSubsamp = TJ.SAMP_420;
+ else
+ usage();
+ } else
+ usage();
}
- if(argv[i].substring(0, 2).equalsIgnoreCase("-q")) {
- if(i < argv.length - 1) {
+ if (argv[i].substring(0, 2).equalsIgnoreCase("-q")) {
+ if (i < argv.length - 1) {
int qual = Integer.parseInt(argv[++i]);
- if(qual >= 1 && qual <= 100) outQual = qual;
- else usage();
- }
- else usage();
+ if (qual >= 1 && qual <= 100)
+ outQual = qual;
+ else
+ usage();
+ } else
+ usage();
}
- if(argv[i].substring(0, 2).equalsIgnoreCase("-g"))
+ if (argv[i].substring(0, 2).equalsIgnoreCase("-g"))
xform.options |= TJTransform.OPT_GRAY;
- if(argv[i].equalsIgnoreCase("-hflip"))
+ if (argv[i].equalsIgnoreCase("-hflip"))
xform.op = TJTransform.OP_HFLIP;
- if(argv[i].equalsIgnoreCase("-vflip"))
+ if (argv[i].equalsIgnoreCase("-vflip"))
xform.op = TJTransform.OP_VFLIP;
- if(argv[i].equalsIgnoreCase("-transpose"))
+ if (argv[i].equalsIgnoreCase("-transpose"))
xform.op = TJTransform.OP_TRANSPOSE;
- if(argv[i].equalsIgnoreCase("-transverse"))
+ if (argv[i].equalsIgnoreCase("-transverse"))
xform.op = TJTransform.OP_TRANSVERSE;
- if(argv[i].equalsIgnoreCase("-rot90"))
+ if (argv[i].equalsIgnoreCase("-rot90"))
xform.op = TJTransform.OP_ROT90;
- if(argv[i].equalsIgnoreCase("-rot180"))
+ if (argv[i].equalsIgnoreCase("-rot180"))
xform.op = TJTransform.OP_ROT180;
- if(argv[i].equalsIgnoreCase("-rot270"))
+ if (argv[i].equalsIgnoreCase("-rot270"))
xform.op = TJTransform.OP_ROT270;
- if(argv[i].equalsIgnoreCase("-custom"))
+ if (argv[i].equalsIgnoreCase("-custom"))
xform.cf = new TJExample();
- else if(argv[i].length() > 2
- && argv[i].substring(0, 2).equalsIgnoreCase("-c")) {
- if(i >= argv.length - 1) usage();
+ else if (argv[i].length() > 2 &&
+ argv[i].substring(0, 2).equalsIgnoreCase("-c")) {
+ if (i >= argv.length - 1)
+ usage();
String[] cropArg = argv[++i].split(",");
- if(cropArg.length != 3) usage();
+ if (cropArg.length != 3)
+ usage();
String[] dimArg = cropArg[2].split("[xX]");
- if(dimArg.length != 2) usage();
+ if (dimArg.length != 2)
+ usage();
int tempx = Integer.parseInt(cropArg[0]);
int tempy = Integer.parseInt(cropArg[1]);
int tempw = Integer.parseInt(dimArg[0]);
int temph = Integer.parseInt(dimArg[1]);
- if(tempx < 0 || tempy < 0 || tempw < 0 || temph < 0) usage();
- xform.x = tempx; xform.y = tempy;
- xform.width = tempw; xform.height = temph;
+ if (tempx < 0 || tempy < 0 || tempw < 0 || temph < 0)
+ usage();
+ xform.x = tempx;
+ xform.y = tempy;
+ xform.width = tempw;
+ xform.height = temph;
xform.options |= TJTransform.OPT_CROP;
}
- if(argv[i].substring(0, 2).equalsIgnoreCase("-d"))
+ if (argv[i].substring(0, 2).equalsIgnoreCase("-d"))
display = true;
- if(argv[i].equalsIgnoreCase("-fastupsample")) {
+ if (argv[i].equalsIgnoreCase("-fastupsample")) {
System.out.println("Using fast upsampling code");
flags |= TJ.FLAG_FASTUPSAMPLE;
}
- if(argv[i].equalsIgnoreCase("-fastdct")) {
+ if (argv[i].equalsIgnoreCase("-fastdct")) {
System.out.println("Using fastest DCT/IDCT algorithm");
flags |= TJ.FLAG_FASTDCT;
}
- if(argv[i].equalsIgnoreCase("-accuratedct")) {
+ if (argv[i].equalsIgnoreCase("-accuratedct")) {
System.out.println("Using most accurate DCT/IDCT algorithm");
flags |= TJ.FLAG_ACCURATEDCT;
}
}
}
String[] inFileTokens = argv[0].split("\\.");
- if(inFileTokens.length > 1)
+ if (inFileTokens.length > 1)
inFormat = inFileTokens[inFileTokens.length - 1];
String[] outFileTokens;
- if(display) outFormat = "bmp";
+ if (display)
+ outFormat = "bmp";
else {
outFileTokens = argv[1].split("\\.");
- if(outFileTokens.length > 1)
+ if (outFileTokens.length > 1)
outFormat = outFileTokens[outFileTokens.length - 1];
}
File file = new File(argv[0]);
int width, height;
- if(inFormat.equalsIgnoreCase("jpg")) {
+ if (inFormat.equalsIgnoreCase("jpg")) {
FileInputStream fis = new FileInputStream(file);
int inputSize = fis.available();
- if(inputSize < 1) {
+ if (inputSize < 1) {
System.out.println("Input file contains no data");
System.exit(1);
}
@@ -234,27 +253,28 @@
fis.close();
TJDecompressor tjd;
- if(xform.op != TJTransform.OP_NONE || xform.options != 0
- || xform.cf != null) {
+ if (xform.op != TJTransform.OP_NONE || xform.options != 0 ||
+ xform.cf != null) {
TJTransformer tjt = new TJTransformer(inputBuf);
- TJTransform t[] = new TJTransform[1];
+ TJTransform[] t = new TJTransform[1];
t[0] = xform;
t[0].options |= TJTransform.OPT_TRIM;
TJDecompressor[] tjdx = tjt.transform(t, 0);
tjd = tjdx[0];
- }
- else tjd = new TJDecompressor(inputBuf);
+ } else
+ tjd = new TJDecompressor(inputBuf);
width = tjd.getWidth();
height = tjd.getHeight();
int inSubsamp = tjd.getSubsamp();
- System.out.println("Source Image: " + width + " x " + height
- + " pixels, " + sampName[inSubsamp] + " subsampling");
- if(outSubsamp < 0) outSubsamp = inSubsamp;
+ System.out.println("Source Image: " + width + " x " + height +
+ " pixels, " + sampName[inSubsamp] + " subsampling");
+ if (outSubsamp < 0)
+ outSubsamp = inSubsamp;
- if(outFormat.equalsIgnoreCase("jpg")
- && (xform.op != TJTransform.OP_NONE || xform.options != 0)
- && scaleFactor.isOne()) {
+ if (outFormat.equalsIgnoreCase("jpg") &&
+ (xform.op != TJTransform.OP_NONE || xform.options != 0) &&
+ scaleFactor.isOne()) {
file = new File(argv[1]);
FileOutputStream fos = new FileOutputStream(file);
fos.write(tjd.getJPEGBuf(), 0, tjd.getJPEGSize());
@@ -265,45 +285,45 @@
width = scaleFactor.getScaled(width);
height = scaleFactor.getScaled(height);
- if(!outFormat.equalsIgnoreCase("jpg"))
+ if (!outFormat.equalsIgnoreCase("jpg"))
img = tjd.decompress(width, height, BufferedImage.TYPE_INT_RGB,
flags);
- else bmpBuf = tjd.decompress(width, 0, height, TJ.PF_BGRX, flags);
+ else
+ bmpBuf = tjd.decompress(width, 0, height, TJ.PF_BGRX, flags);
tjd.close();
- }
- else {
+ } else {
img = ImageIO.read(file);
if (img == null)
throw new Exception("Input image type not supported.");
width = img.getWidth();
height = img.getHeight();
- if(outSubsamp < 0) {
- if(img.getType() == BufferedImage.TYPE_BYTE_GRAY)
+ if (outSubsamp < 0) {
+ if (img.getType() == BufferedImage.TYPE_BYTE_GRAY)
outSubsamp = TJ.SAMP_GRAY;
- else outSubsamp = TJ.SAMP_444;
+ else
+ outSubsamp = TJ.SAMP_444;
}
}
System.gc();
- if(!display)
- System.out.print("Dest. Image (" + outFormat + "): " + width + " x "
- + height + " pixels");
+ if (!display)
+ System.out.print("Dest. Image (" + outFormat + "): " + width + " x " +
+ height + " pixels");
- if(display) {
+ if (display) {
ImageIcon icon = new ImageIcon(img);
JLabel label = new JLabel(icon, JLabel.CENTER);
JOptionPane.showMessageDialog(null, label, "Output Image",
- JOptionPane.PLAIN_MESSAGE);
- }
- else if(outFormat.equalsIgnoreCase("jpg")) {
- System.out.println(", " + sampName[outSubsamp]
- + " subsampling, quality = " + outQual);
+ JOptionPane.PLAIN_MESSAGE);
+ } else if (outFormat.equalsIgnoreCase("jpg")) {
+ System.out.println(", " + sampName[outSubsamp] +
+ " subsampling, quality = " + outQual);
TJCompressor tjc = new TJCompressor();
int jpegSize;
byte[] jpegBuf;
tjc.setSubsamp(outSubsamp);
tjc.setJPEGQuality(outQual);
- if(img != null)
+ if (img != null)
jpegBuf = tjc.compress(img, flags);
else {
tjc.setSourceImage(bmpBuf, width, 0, height, TJ.PF_BGRX);
@@ -316,27 +336,26 @@
FileOutputStream fos = new FileOutputStream(file);
fos.write(jpegBuf, 0, jpegSize);
fos.close();
- }
- else {
+ } else {
System.out.print("\n");
file = new File(argv[1]);
ImageIO.write(img, outFormat, file);
}
- }
- catch(Exception e) {
+ } catch(Exception e) {
e.printStackTrace();
System.exit(-1);
}
}
public void customFilter(ShortBuffer coeffBuffer, Rectangle bufferRegion,
- Rectangle planeRegion, int componentIndex, int transformIndex,
- TJTransform transform) throws Exception {
- for(int i=0; i<bufferRegion.width*bufferRegion.height; i++) {
- coeffBuffer.put(i, (short)(-coeffBuffer.get(i)));
+ Rectangle planeRegion, int componentIndex,
+ int transformIndex, TJTransform transform)
+ throws Exception {
+ for (int i = 0; i < bufferRegion.width * bufferRegion.height; i++) {
+ coeffBuffer.put(i, (short)(-coeffBuffer.get(i)));
}
}
- static TJScalingFactor sf [] = null;
+ static TJScalingFactor[] sf = null;
};
diff --git a/java/TJUnitTest.java b/java/TJUnitTest.java
index b88b28e..d0a609a 100644
--- a/java/TJUnitTest.java
+++ b/java/TJUnitTest.java
@@ -50,48 +50,48 @@
System.exit(1);
}
- private final static String subNameLong[] = {
+ private static final String[] subNameLong = {
"4:4:4", "4:2:2", "4:2:0", "GRAY", "4:4:0"
};
- private final static String subName[] = {
+ private static final String[] subName = {
"444", "422", "420", "GRAY", "440"
};
- private final static String pixFormatStr[] = {
+ private static final String[] pixFormatStr = {
"RGB", "BGR", "RGBX", "BGRX", "XBGR", "XRGB", "Grayscale",
"RGBA", "BGRA", "ABGR", "ARGB"
};
- private final static int alphaOffset[] = {
+ private static final int[] alphaOffset = {
-1, -1, -1, -1, -1, -1, -1, 3, 3, 0, 0
};
- private final static int _3byteFormats[] = {
+ private static final int[] _3byteFormats = {
TJ.PF_RGB, TJ.PF_BGR
};
- private final static int _3byteFormatsBI[] = {
+ private static final int[] _3byteFormatsBI = {
BufferedImage.TYPE_3BYTE_BGR
};
- private final static int _4byteFormats[] = {
+ private static final int[] _4byteFormats = {
TJ.PF_RGBX, TJ.PF_BGRX, TJ.PF_XBGR, TJ.PF_XRGB
};
- private final static int _4byteFormatsBI[] = {
+ private static final int[] _4byteFormatsBI = {
BufferedImage.TYPE_INT_BGR, BufferedImage.TYPE_INT_RGB,
BufferedImage.TYPE_4BYTE_ABGR, BufferedImage.TYPE_4BYTE_ABGR_PRE,
BufferedImage.TYPE_INT_ARGB, BufferedImage.TYPE_INT_ARGB_PRE
};
- private final static int onlyGray[] = {
+ private static final int[] onlyGray = {
TJ.PF_GRAY
};
- private final static int onlyGrayBI[] = {
+ private static final int[] onlyGrayBI = {
BufferedImage.TYPE_BYTE_GRAY
};
- private final static int onlyRGB[] = {
+ private static final int[] onlyRGB = {
TJ.PF_RGB
};
- private final static int YUVENCODE = 1;
- private final static int YUVDECODE = 2;
+ private static final int YUVENCODE = 1;
+ private static final int YUVDECODE = 2;
private static int yuv = 0;
private static boolean bi = false;
@@ -108,18 +108,18 @@
case BufferedImage.TYPE_BYTE_GRAY:
return TJ.PF_GRAY;
case BufferedImage.TYPE_INT_BGR:
- if(byteOrder == ByteOrder.BIG_ENDIAN)
+ if (byteOrder == ByteOrder.BIG_ENDIAN)
return TJ.PF_XBGR;
else
return TJ.PF_RGBX;
case BufferedImage.TYPE_INT_RGB:
- if(byteOrder == ByteOrder.BIG_ENDIAN)
+ if (byteOrder == ByteOrder.BIG_ENDIAN)
return TJ.PF_XRGB;
else
return TJ.PF_BGRX;
case BufferedImage.TYPE_INT_ARGB:
case BufferedImage.TYPE_INT_ARGB_PRE:
- if(byteOrder == ByteOrder.BIG_ENDIAN)
+ if (byteOrder == ByteOrder.BIG_ENDIAN)
return TJ.PF_ARGB;
else
return TJ.PF_BGRA;
@@ -148,14 +148,13 @@
}
return "Unknown";
}
-
private static double getTime() {
return (double)System.nanoTime() / 1.0e9;
}
private static void initBuf(byte[] buf, int w, int pitch, int h, int pf,
- int flags) throws Exception {
+ int flags) throws Exception {
int roffset = TJ.getRedOffset(pf);
int goffset = TJ.getGreenOffset(pf);
int boffset = TJ.getBlueOffset(pf);
@@ -164,42 +163,46 @@
int index, row, col, halfway = 16;
Arrays.fill(buf, (byte)0);
- if(pf == TJ.PF_GRAY) {
- for(row = 0; row < h; row++) {
- for(col = 0; col < w; col++) {
- if((flags & TJ.FLAG_BOTTOMUP) != 0)
+ if (pf == TJ.PF_GRAY) {
+ for (row = 0; row < h; row++) {
+ for (col = 0; col < w; col++) {
+ if ((flags & TJ.FLAG_BOTTOMUP) != 0)
index = pitch * (h - row - 1) + col;
- else index = pitch * row + col;
- if(((row / 8) + (col / 8)) % 2 == 0)
+ else
+ index = pitch * row + col;
+ if (((row / 8) + (col / 8)) % 2 == 0)
buf[index] = (row < halfway) ? (byte)255 : 0;
- else buf[index] = (row < halfway) ? 76 : (byte)226;
+ else
+ buf[index] = (row < halfway) ? 76 : (byte)226;
}
}
return;
}
- for(row = 0; row < h; row++) {
- for(col = 0; col < w; col++) {
- if((flags & TJ.FLAG_BOTTOMUP) != 0)
+ for (row = 0; row < h; row++) {
+ for (col = 0; col < w; col++) {
+ if ((flags & TJ.FLAG_BOTTOMUP) != 0)
index = pitch * (h - row - 1) + col * ps;
- else index = pitch * row + col * ps;
- if(((row / 8) + (col / 8)) % 2 == 0) {
- if(row < halfway) {
+ else
+ index = pitch * row + col * ps;
+ if (((row / 8) + (col / 8)) % 2 == 0) {
+ if (row < halfway) {
buf[index + roffset] = (byte)255;
buf[index + goffset] = (byte)255;
buf[index + boffset] = (byte)255;
}
- }
- else {
+ } else {
buf[index + roffset] = (byte)255;
- if(row >= halfway) buf[index + goffset] = (byte)255;
+ if (row >= halfway)
+ buf[index + goffset] = (byte)255;
}
- if (aoffset >= 0) buf[index + aoffset] = (byte)255;
+ if (aoffset >= 0)
+ buf[index + aoffset] = (byte)255;
}
}
}
private static void initIntBuf(int[] buf, int w, int pitch, int h, int pf,
- int flags) throws Exception {
+ int flags) throws Exception {
int rshift = TJ.getRedOffset(pf) * 8;
int gshift = TJ.getGreenOffset(pf) * 8;
int bshift = TJ.getBlueOffset(pf) * 8;
@@ -207,43 +210,44 @@
int index, row, col, halfway = 16;
Arrays.fill(buf, 0);
- for(row = 0; row < h; row++) {
- for(col = 0; col < w; col++) {
- if((flags & TJ.FLAG_BOTTOMUP) != 0)
+ for (row = 0; row < h; row++) {
+ for (col = 0; col < w; col++) {
+ if ((flags & TJ.FLAG_BOTTOMUP) != 0)
index = pitch * (h - row - 1) + col;
- else index = pitch * row + col;
- if(((row / 8) + (col / 8)) % 2 == 0) {
- if(row < halfway) {
+ else
+ index = pitch * row + col;
+ if (((row / 8) + (col / 8)) % 2 == 0) {
+ if (row < halfway) {
buf[index] |= (255 << rshift);
buf[index] |= (255 << gshift);
buf[index] |= (255 << bshift);
}
- }
- else {
+ } else {
buf[index] |= (255 << rshift);
- if(row >= halfway) buf[index] |= (255 << gshift);
+ if (row >= halfway)
+ buf[index] |= (255 << gshift);
}
- if (ashift >= 0) buf[index] |= (255 << ashift);
+ if (ashift >= 0)
+ buf[index] |= (255 << ashift);
}
}
}
private static void initImg(BufferedImage img, int pf, int flags)
- throws Exception {
+ throws Exception {
WritableRaster wr = img.getRaster();
int imgType = img.getType();
- if(imgType == BufferedImage.TYPE_INT_RGB
- || imgType == BufferedImage.TYPE_INT_BGR
- || imgType == BufferedImage.TYPE_INT_ARGB
- || imgType == BufferedImage.TYPE_INT_ARGB_PRE) {
+ if (imgType == BufferedImage.TYPE_INT_RGB ||
+ imgType == BufferedImage.TYPE_INT_BGR ||
+ imgType == BufferedImage.TYPE_INT_ARGB ||
+ imgType == BufferedImage.TYPE_INT_ARGB_PRE) {
SinglePixelPackedSampleModel sm =
(SinglePixelPackedSampleModel)img.getSampleModel();
int pitch = sm.getScanlineStride();
DataBufferInt db = (DataBufferInt)wr.getDataBuffer();
int[] buf = db.getData();
initIntBuf(buf, img.getWidth(), pitch, img.getHeight(), pf, flags);
- }
- else {
+ } else {
ComponentSampleModel sm = (ComponentSampleModel)img.getSampleModel();
int pitch = sm.getScanlineStride();
DataBufferByte db = (DataBufferByte)wr.getDataBuffer();
@@ -253,34 +257,35 @@
}
private static void checkVal(int row, int col, int v, String vname, int cv)
- throws Exception {
+ throws Exception {
v = (v < 0) ? v + 256 : v;
- if(v < cv - 1 || v > cv + 1) {
- throw new Exception("\nComp. " + vname + " at " + row + "," + col
- + " should be " + cv + ", not " + v + "\n");
+ if (v < cv - 1 || v > cv + 1) {
+ throw new Exception("\nComp. " + vname + " at " + row + "," + col +
+ " should be " + cv + ", not " + v + "\n");
}
}
private static void checkVal0(int row, int col, int v, String vname)
- throws Exception {
+ throws Exception {
v = (v < 0) ? v + 256 : v;
- if(v > 1) {
- throw new Exception("\nComp. " + vname + " at " + row + "," + col
- + " should be 0, not " + v + "\n");
+ if (v > 1) {
+ throw new Exception("\nComp. " + vname + " at " + row + "," + col +
+ " should be 0, not " + v + "\n");
}
}
private static void checkVal255(int row, int col, int v, String vname)
- throws Exception {
+ throws Exception {
v = (v < 0) ? v + 256 : v;
- if(v < 254) {
- throw new Exception("\nComp. " + vname + " at " + row + "," + col
- + " should be 255, not " + v + "\n");
+ if (v < 254) {
+ throw new Exception("\nComp. " + vname + " at " + row + "," + col +
+ " should be 255, not " + v + "\n");
}
}
private static int checkBuf(byte[] buf, int w, int pitch, int h, int pf,
- int subsamp, TJScalingFactor sf, int flags) throws Exception {
+ int subsamp, TJScalingFactor sf, int flags)
+ throws Exception {
int roffset = TJ.getRedOffset(pf);
int goffset = TJ.getGreenOffset(pf);
int boffset = TJ.getBlueOffset(pf);
@@ -291,68 +296,65 @@
int blockSize = 8 * sf.getNum() / sf.getDenom();
try {
- for(row = 0; row < halfway; row++) {
- for(col = 0; col < w; col++) {
- if((flags & TJ.FLAG_BOTTOMUP) != 0)
+ for (row = 0; row < halfway; row++) {
+ for (col = 0; col < w; col++) {
+ if ((flags & TJ.FLAG_BOTTOMUP) != 0)
index = pitch * (h - row - 1) + col * ps;
- else index = pitch * row + col * ps;
+ else
+ index = pitch * row + col * ps;
byte r = buf[index + roffset];
byte g = buf[index + goffset];
byte b = buf[index + boffset];
byte a = aoffset >= 0 ? buf[index + aoffset] : (byte)255;
- if(((row / blockSize) + (col / blockSize)) % 2 == 0) {
- if(row < halfway) {
+ if (((row / blockSize) + (col / blockSize)) % 2 == 0) {
+ if (row < halfway) {
checkVal255(row, col, r, "R");
checkVal255(row, col, g, "G");
checkVal255(row, col, b, "B");
- }
- else {
+ } else {
checkVal0(row, col, r, "R");
checkVal0(row, col, g, "G");
checkVal0(row, col, b, "B");
}
- }
- else {
- if(subsamp == TJ.SAMP_GRAY) {
- if(row < halfway) {
+ } else {
+ if (subsamp == TJ.SAMP_GRAY) {
+ if (row < halfway) {
checkVal(row, col, r, "R", 76);
checkVal(row, col, g, "G", 76);
checkVal(row, col, b, "B", 76);
- }
- else {
+ } else {
checkVal(row, col, r, "R", 226);
checkVal(row, col, g, "G", 226);
checkVal(row, col, b, "B", 226);
}
- }
- else {
+ } else {
checkVal255(row, col, r, "R");
- if(row < halfway) {
+ if (row < halfway) {
checkVal0(row, col, g, "G");
- }
- else {
+ } else {
checkVal255(row, col, g, "G");
}
- checkVal0(row, col, b, "B");
+ checkVal0(row, col, b, "B");
}
}
checkVal255(row, col, a, "A");
}
}
- }
- catch(Exception e) {
+ } catch(Exception e) {
System.out.println(e);
retval = 0;
}
- if(retval == 0) {
+ if (retval == 0) {
System.out.print("\n");
- for(row = 0; row < h; row++) {
- for(col = 0; col < w; col++) {
+ for (row = 0; row < h; row++) {
+ for (col = 0; col < w; col++) {
int r = buf[pitch * row + col * ps + roffset];
int g = buf[pitch * row + col * ps + goffset];
int b = buf[pitch * row + col * ps + boffset];
- if(r < 0) r += 256; if(g < 0) g += 256; if(b < 0) b += 256;
+ if (r < 0) r += 256;
+ if (g < 0) g += 256;
+ if (b < 0) b += 256;
System.out.format("%3d/%3d/%3d ", r, g, b);
}
System.out.print("\n");
@@ -362,7 +364,8 @@
}
private static int checkIntBuf(int[] buf, int w, int pitch, int h, int pf,
- int subsamp, TJScalingFactor sf, int flags) throws Exception {
+ int subsamp, TJScalingFactor sf, int flags)
+ throws Exception {
int rshift = TJ.getRedOffset(pf) * 8;
int gshift = TJ.getGreenOffset(pf) * 8;
int bshift = TJ.getBlueOffset(pf) * 8;
@@ -372,46 +375,42 @@
int blockSize = 8 * sf.getNum() / sf.getDenom();
try {
- for(row = 0; row < halfway; row++) {
- for(col = 0; col < w; col++) {
- if((flags & TJ.FLAG_BOTTOMUP) != 0)
+ for (row = 0; row < halfway; row++) {
+ for (col = 0; col < w; col++) {
+ if ((flags & TJ.FLAG_BOTTOMUP) != 0)
index = pitch * (h - row - 1) + col;
- else index = pitch * row + col;
+ else
+ index = pitch * row + col;
int r = (buf[index] >> rshift) & 0xFF;
int g = (buf[index] >> gshift) & 0xFF;
int b = (buf[index] >> bshift) & 0xFF;
int a = ashift >= 0 ? (buf[index] >> ashift) & 0xFF : 255;
- if(((row / blockSize) + (col / blockSize)) % 2 == 0) {
- if(row < halfway) {
+ if (((row / blockSize) + (col / blockSize)) % 2 == 0) {
+ if (row < halfway) {
checkVal255(row, col, r, "R");
checkVal255(row, col, g, "G");
checkVal255(row, col, b, "B");
- }
- else {
+ } else {
checkVal0(row, col, r, "R");
checkVal0(row, col, g, "G");
checkVal0(row, col, b, "B");
}
- }
- else {
- if(subsamp == TJ.SAMP_GRAY) {
- if(row < halfway) {
+ } else {
+ if (subsamp == TJ.SAMP_GRAY) {
+ if (row < halfway) {
checkVal(row, col, r, "R", 76);
checkVal(row, col, g, "G", 76);
checkVal(row, col, b, "B", 76);
- }
- else {
+ } else {
checkVal(row, col, r, "R", 226);
checkVal(row, col, g, "G", 226);
checkVal(row, col, b, "B", 226);
}
- }
- else {
+ } else {
checkVal255(row, col, r, "R");
- if(row < halfway) {
+ if (row < halfway) {
checkVal0(row, col, g, "G");
- }
- else {
+ } else {
checkVal255(row, col, g, "G");
}
checkVal0(row, col, b, "B");
@@ -420,20 +419,21 @@
checkVal255(row, col, a, "A");
}
}
- }
- catch(Exception e) {
+ } catch(Exception e) {
System.out.println(e);
retval = 0;
}
- if(retval == 0) {
+ if (retval == 0) {
System.out.print("\n");
- for(row = 0; row < h; row++) {
- for(col = 0; col < w; col++) {
+ for (row = 0; row < h; row++) {
+ for (col = 0; col < w; col++) {
int r = (buf[pitch * row + col] >> rshift) & 0xFF;
int g = (buf[pitch * row + col] >> gshift) & 0xFF;
int b = (buf[pitch * row + col] >> bshift) & 0xFF;
- if(r < 0) r += 256; if(g < 0) g += 256; if(b < 0) b += 256;
+ if (r < 0) r += 256;
+ if (g < 0) g += 256;
+ if (b < 0) b += 256;
System.out.format("%3d/%3d/%3d ", r, g, b);
}
System.out.print("\n");
@@ -442,29 +442,28 @@
return retval;
}
- private static int checkImg(BufferedImage img, int pf,
- int subsamp, TJScalingFactor sf, int flags) throws Exception {
+ private static int checkImg(BufferedImage img, int pf, int subsamp,
+ TJScalingFactor sf, int flags) throws Exception {
WritableRaster wr = img.getRaster();
int imgType = img.getType();
- if(imgType == BufferedImage.TYPE_INT_RGB
- || imgType == BufferedImage.TYPE_INT_BGR
- || imgType == BufferedImage.TYPE_INT_ARGB
- || imgType == BufferedImage.TYPE_INT_ARGB_PRE) {
- SinglePixelPackedSampleModel sm =
+ if (imgType == BufferedImage.TYPE_INT_RGB ||
+ imgType == BufferedImage.TYPE_INT_BGR ||
+ imgType == BufferedImage.TYPE_INT_ARGB ||
+ imgType == BufferedImage.TYPE_INT_ARGB_PRE) {
+ SinglePixelPackedSampleModel sm =
(SinglePixelPackedSampleModel)img.getSampleModel();
int pitch = sm.getScanlineStride();
DataBufferInt db = (DataBufferInt)wr.getDataBuffer();
int[] buf = db.getData();
return checkIntBuf(buf, img.getWidth(), pitch, img.getHeight(), pf,
- subsamp, sf, flags);
- }
- else {
+ subsamp, sf, flags);
+ } else {
ComponentSampleModel sm = (ComponentSampleModel)img.getSampleModel();
int pitch = sm.getScanlineStride();
DataBufferByte db = (DataBufferByte)wr.getDataBuffer();
byte[] buf = db.getData();
return checkBuf(buf, img.getWidth(), pitch, img.getHeight(), pf, subsamp,
- sf, flags);
+ sf, flags);
}
}
@@ -473,51 +472,52 @@
}
private static int checkBufYUV(byte[] buf, int size, int w, int h,
- int subsamp) throws Exception {
+ int subsamp) throws Exception {
int row, col;
- int hsf = TJ.getMCUWidth(subsamp)/8, vsf = TJ.getMCUHeight(subsamp)/8;
+ int hsf = TJ.getMCUWidth(subsamp) / 8, vsf = TJ.getMCUHeight(subsamp) / 8;
int pw = PAD(w, hsf), ph = PAD(h, vsf);
int cw = pw / hsf, ch = ph / vsf;
int ypitch = PAD(pw, 4), uvpitch = PAD(cw, 4);
int retval = 1;
- int correctsize = ypitch * ph
- + (subsamp == TJ.SAMP_GRAY ? 0 : uvpitch * ch * 2);
+ int correctsize = ypitch * ph +
+ (subsamp == TJ.SAMP_GRAY ? 0 : uvpitch * ch * 2);
int halfway = 16;
try {
- if(size != correctsize)
- throw new Exception("\nIncorrect size " + size + ". Should be "
- + correctsize);
+ if (size != correctsize)
+ throw new Exception("\nIncorrect size " + size + ". Should be " +
+ correctsize);
- for(row = 0; row < ph; row++) {
- for(col = 0; col < pw; col++) {
+ for (row = 0; row < ph; row++) {
+ for (col = 0; col < pw; col++) {
byte y = buf[ypitch * row + col];
- if(((row / 8) + (col / 8)) % 2 == 0) {
- if(row < halfway) checkVal255(row, col, y, "Y");
- else checkVal0(row, col, y, "Y");
- }
- else {
- if(row < halfway) checkVal(row, col, y, "Y", 76);
- else checkVal(row, col, y, "Y", 226);
+ if (((row / 8) + (col / 8)) % 2 == 0) {
+ if (row < halfway)
+ checkVal255(row, col, y, "Y");
+ else
+ checkVal0(row, col, y, "Y");
+ } else {
+ if (row < halfway)
+ checkVal(row, col, y, "Y", 76);
+ else
+ checkVal(row, col, y, "Y", 226);
}
}
}
- if(subsamp != TJ.SAMP_GRAY) {
+ if (subsamp != TJ.SAMP_GRAY) {
halfway = 16 / vsf;
- for(row = 0; row < ch; row++) {
- for(col = 0; col < cw; col++) {
+ for (row = 0; row < ch; row++) {
+ for (col = 0; col < cw; col++) {
byte u = buf[ypitch * ph + (uvpitch * row + col)],
- v = buf[ypitch * ph + uvpitch * ch + (uvpitch * row + col)];
- if(((row * vsf / 8) + (col * hsf / 8)) % 2 == 0) {
+ v = buf[ypitch * ph + uvpitch * ch + (uvpitch * row + col)];
+ if (((row * vsf / 8) + (col * hsf / 8)) % 2 == 0) {
checkVal(row, col, u, "U", 128);
checkVal(row, col, v, "V", 128);
- }
- else {
- if(row < halfway) {
+ } else {
+ if (row < halfway) {
checkVal(row, col, u, "U", 85);
checkVal255(row, col, v, "V");
- }
- else {
+ } else {
checkVal0(row, col, u, "U");
checkVal(row, col, v, "V", 149);
}
@@ -525,35 +525,34 @@
}
}
}
- }
- catch(Exception e) {
+ } catch(Exception e) {
System.out.println(e);
retval = 0;
}
- if(retval == 0) {
- for(row = 0; row < ph; row++) {
- for(col = 0; col < pw; col++) {
+ if (retval == 0) {
+ for (row = 0; row < ph; row++) {
+ for (col = 0; col < pw; col++) {
int y = buf[ypitch * row + col];
- if(y < 0) y += 256;
+ if (y < 0) y += 256;
System.out.format("%3d ", y);
}
System.out.print("\n");
}
System.out.print("\n");
- for(row = 0; row < ch; row++) {
- for(col = 0; col < cw; col++) {
+ for (row = 0; row < ch; row++) {
+ for (col = 0; col < cw; col++) {
int u = buf[ypitch * ph + (uvpitch * row + col)];
- if(u < 0) u += 256;
+ if (u < 0) u += 256;
System.out.format("%3d ", u);
}
System.out.print("\n");
}
System.out.print("\n");
- for(row = 0; row < ch; row++) {
- for(col = 0; col < cw; col++) {
+ for (row = 0; row < ch; row++) {
+ for (col = 0; col < cw; col++) {
int v = buf[ypitch * ph + uvpitch * ch + (uvpitch * row + col)];
- if(v < 0) v += 256;
+ if (v < 0) v += 256;
System.out.format("%3d ", v);
}
System.out.print("\n");
@@ -565,7 +564,7 @@
}
private static void writeJPEG(byte[] jpegBuf, int jpegBufSize,
- String filename) throws Exception {
+ String filename) throws Exception {
File file = new File(filename);
FileOutputStream fos = new FileOutputStream(file);
fos.write(jpegBuf, 0, jpegBufSize);
@@ -573,8 +572,8 @@
}
private static int compTest(TJCompressor tjc, byte[] dstBuf, int w,
- int h, int pf, String baseName, int subsamp, int jpegQual,
- int flags) throws Exception {
+ int h, int pf, String baseName, int subsamp,
+ int jpegQual, int flags) throws Exception {
String tempstr;
byte[] srcBuf = null;
BufferedImage img = null;
@@ -585,28 +584,32 @@
if (bi) {
pf = biTypePF(imgType);
pfStr = biTypeStr(imgType);
- }
- else pfStr = pixFormatStr[pf];
+ } else
+ pfStr = pixFormatStr[pf];
ps = TJ.getPixelSize(pf);
System.out.print(pfStr + " ");
- if(bi) System.out.print("(" + pixFormatStr[pf] + ") ");
- if((flags & TJ.FLAG_BOTTOMUP) != 0) System.out.print("Bottom-Up");
- else System.out.print("Top-Down ");
+ if (bi)
+ System.out.print("(" + pixFormatStr[pf] + ") ");
+ if ((flags & TJ.FLAG_BOTTOMUP) != 0)
+ System.out.print("Bottom-Up");
+ else
+ System.out.print("Top-Down ");
System.out.print(" -> " + subNameLong[subsamp] + " ");
- if(yuv == YUVENCODE) System.out.print("YUV ... ");
- else System.out.print("Q" + jpegQual + " ... ");
+ if (yuv == YUVENCODE)
+ System.out.print("YUV ... ");
+ else
+ System.out.print("Q" + jpegQual + " ... ");
- if(bi) {
+ if (bi) {
img = new BufferedImage(w, h, imgType);
initImg(img, pf, flags);
- tempstr = baseName + "_enc_" + pfStr + "_"
- + (((flags & TJ.FLAG_BOTTOMUP) != 0) ? "BU" : "TD") + "_"
- + subName[subsamp] + "_Q" + jpegQual + ".png";
+ tempstr = baseName + "_enc_" + pfStr + "_" +
+ (((flags & TJ.FLAG_BOTTOMUP) != 0) ? "BU" : "TD") + "_" +
+ subName[subsamp] + "_Q" + jpegQual + ".png";
File file = new File(tempstr);
ImageIO.write(img, "png", file);
- }
- else {
+ } else {
srcBuf = new byte[w * h * ps + 1];
initBuf(srcBuf, w, w * ps, h, pf, flags);
}
@@ -615,36 +618,40 @@
t = getTime();
tjc.setSubsamp(subsamp);
tjc.setJPEGQuality(jpegQual);
- if(bi) {
- if(yuv == YUVENCODE) tjc.encodeYUV(img, dstBuf, flags);
- else tjc.compress(img, dstBuf, flags);
- }
- else {
+ if (bi) {
+ if (yuv == YUVENCODE)
+ tjc.encodeYUV(img, dstBuf, flags);
+ else
+ tjc.compress(img, dstBuf, flags);
+ } else {
tjc.setSourceImage(srcBuf, w, 0, h, pf);
- if(yuv == YUVENCODE) tjc.encodeYUV(dstBuf, flags);
- else tjc.compress(dstBuf, flags);
+ if (yuv == YUVENCODE)
+ tjc.encodeYUV(dstBuf, flags);
+ else
+ tjc.compress(dstBuf, flags);
}
size = tjc.getCompressedSize();
t = getTime() - t;
- if(yuv == YUVENCODE)
- tempstr = baseName + "_enc_" + pfStr + "_"
- + (((flags & TJ.FLAG_BOTTOMUP) != 0) ? "BU" : "TD") + "_"
- + subName[subsamp] + ".yuv";
+ if (yuv == YUVENCODE)
+ tempstr = baseName + "_enc_" + pfStr + "_" +
+ (((flags & TJ.FLAG_BOTTOMUP) != 0) ? "BU" : "TD") + "_" +
+ subName[subsamp] + ".yuv";
else
- tempstr = baseName + "_enc_" + pfStr + "_"
- + (((flags & TJ.FLAG_BOTTOMUP) != 0) ? "BU" : "TD") + "_"
- + subName[subsamp] + "_Q" + jpegQual + ".jpg";
+ tempstr = baseName + "_enc_" + pfStr + "_" +
+ (((flags & TJ.FLAG_BOTTOMUP) != 0) ? "BU" : "TD") + "_" +
+ subName[subsamp] + "_Q" + jpegQual + ".jpg";
writeJPEG(dstBuf, size, tempstr);
- if(yuv == YUVENCODE) {
- if(checkBufYUV(dstBuf, size, w, h, subsamp) == 1)
+ if (yuv == YUVENCODE) {
+ if (checkBufYUV(dstBuf, size, w, h, subsamp) == 1)
System.out.print("Passed.");
else {
- System.out.print("FAILED!"); exitStatus = -1;
+ System.out.print("FAILED!");
+ exitStatus = -1;
}
- }
- else System.out.print("Done.");
+ } else
+ System.out.print("Done.");
System.out.format(" %.6f ms\n", t * 1000.);
System.out.println(" Result in " + tempstr);
@@ -652,8 +659,9 @@
}
private static void decompTest(TJDecompressor tjd, byte[] jpegBuf,
- int jpegSize, int w, int h, int pf, String baseName, int subsamp,
- int flags, TJScalingFactor sf) throws Exception {
+ int jpegSize, int w, int h, int pf,
+ String baseName, int subsamp, int flags,
+ TJScalingFactor sf) throws Exception {
String pfStr, tempstr;
double t;
int scaledWidth = sf.getScaled(w);
@@ -662,134 +670,144 @@
BufferedImage img = null;
byte[] dstBuf = null;
- if(yuv == YUVENCODE) return;
+ if (yuv == YUVENCODE) return;
if (bi) {
pf = biTypePF(imgType);
pfStr = biTypeStr(imgType);
- }
- else pfStr = pixFormatStr[pf];
+ } else
+ pfStr = pixFormatStr[pf];
System.out.print("JPEG -> ");
- if(yuv == YUVDECODE)
+ if (yuv == YUVDECODE)
System.out.print("YUV " + subName[subsamp] + " ... ");
else {
System.out.print(pfStr + " ");
- if(bi) System.out.print("(" + pixFormatStr[pf] + ") ");
- if((flags & TJ.FLAG_BOTTOMUP) != 0) System.out.print("Bottom-Up ");
- else System.out.print("Top-Down ");
- if(!sf.isOne())
+ if (bi)
+ System.out.print("(" + pixFormatStr[pf] + ") ");
+ if ((flags & TJ.FLAG_BOTTOMUP) != 0)
+ System.out.print("Bottom-Up ");
+ else
+ System.out.print("Top-Down ");
+ if (!sf.isOne())
System.out.print(sf.getNum() + "/" + sf.getDenom() + " ... ");
- else System.out.print("... ");
+ else
+ System.out.print("... ");
}
t = getTime();
tjd.setJPEGImage(jpegBuf, jpegSize);
- if(tjd.getWidth() != w || tjd.getHeight() != h
- || tjd.getSubsamp() != subsamp)
+ if (tjd.getWidth() != w || tjd.getHeight() != h ||
+ tjd.getSubsamp() != subsamp)
throw new Exception("Incorrect JPEG header");
temp1 = scaledWidth;
temp2 = scaledHeight;
temp1 = tjd.getScaledWidth(temp1, temp2);
temp2 = tjd.getScaledHeight(temp1, temp2);
- if(temp1 != scaledWidth || temp2 != scaledHeight)
+ if (temp1 != scaledWidth || temp2 != scaledHeight)
throw new Exception("Scaled size mismatch");
- if(yuv == YUVDECODE) dstBuf = tjd.decompressToYUV(flags);
+ if (yuv == YUVDECODE)
+ dstBuf = tjd.decompressToYUV(flags);
else {
- if(bi)
+ if (bi)
img = tjd.decompress(scaledWidth, scaledHeight, imgType, flags);
- else dstBuf = tjd.decompress(scaledWidth, 0, scaledHeight, pf, flags);
+ else
+ dstBuf = tjd.decompress(scaledWidth, 0, scaledHeight, pf, flags);
}
t = getTime() - t;
- if(bi) {
- tempstr = baseName + "_dec_" + pfStr + "_"
- + (((flags & TJ.FLAG_BOTTOMUP) != 0) ? "BU" : "TD") + "_"
- + subName[subsamp] + "_" + (double)sf.getNum() / (double)sf.getDenom()
- + "x" + ".png";
+ if (bi) {
+ tempstr = baseName + "_dec_" + pfStr + "_" +
+ (((flags & TJ.FLAG_BOTTOMUP) != 0) ? "BU" : "TD") + "_" +
+ subName[subsamp] + "_" +
+ (double)sf.getNum() / (double)sf.getDenom() + "x" + ".png";
File file = new File(tempstr);
ImageIO.write(img, "png", file);
}
- if(yuv == YUVDECODE) {
- if(checkBufYUV(dstBuf, dstBuf.length, w, h, subsamp) == 1)
+ if (yuv == YUVDECODE) {
+ if (checkBufYUV(dstBuf, dstBuf.length, w, h, subsamp) == 1)
System.out.print("Passed.");
else {
System.out.print("FAILED!"); exitStatus = -1;
}
- }
- else {
- if((bi && checkImg(img, pf, subsamp, sf, flags) == 1)
- || (!bi && checkBuf(dstBuf, scaledWidth, scaledWidth
- * TJ.getPixelSize(pf), scaledHeight, pf, subsamp, sf, flags) == 1))
+ } else {
+ if ((bi && checkImg(img, pf, subsamp, sf, flags) == 1) ||
+ (!bi && checkBuf(dstBuf, scaledWidth,
+ scaledWidth * TJ.getPixelSize(pf), scaledHeight, pf,
+ subsamp, sf, flags) == 1))
System.out.print("Passed.");
else {
- System.out.print("FAILED!"); exitStatus = -1;
+ System.out.print("FAILED!");
+ exitStatus = -1;
}
}
System.out.format(" %.6f ms\n", t * 1000.);
}
private static void decompTest(TJDecompressor tjd, byte[] jpegBuf,
- int jpegSize, int w, int h, int pf, String baseName, int subsamp,
- int flags) throws Exception {
+ int jpegSize, int w, int h, int pf,
+ String baseName, int subsamp,
+ int flags) throws Exception {
int i;
- if((subsamp == TJ.SAMP_444 || subsamp == TJ.SAMP_GRAY) && yuv == 0) {
- TJScalingFactor sf[] = TJ.getScalingFactors();
- for(i = 0; i < sf.length; i++)
+ if ((subsamp == TJ.SAMP_444 || subsamp == TJ.SAMP_GRAY) && yuv == 0) {
+ TJScalingFactor[] sf = TJ.getScalingFactors();
+ for (i = 0; i < sf.length; i++)
decompTest(tjd, jpegBuf, jpegSize, w, h, pf, baseName, subsamp,
- flags, sf[i]);
- }
- else
+ flags, sf[i]);
+ } else
decompTest(tjd, jpegBuf, jpegSize, w, h, pf, baseName, subsamp,
- flags, new TJScalingFactor(1, 1));
+ flags, new TJScalingFactor(1, 1));
System.out.print("\n");
}
private static void doTest(int w, int h, int[] formats, int subsamp,
- String baseName) throws Exception {
+ String baseName) throws Exception {
TJCompressor tjc = null;
TJDecompressor tjd = null;
int size;
byte[] dstBuf;
- if(yuv == YUVENCODE) dstBuf = new byte[TJ.bufSizeYUV(w, h, subsamp)];
- else dstBuf = new byte[TJ.bufSize(w, h, subsamp)];
+ if (yuv == YUVENCODE)
+ dstBuf = new byte[TJ.bufSizeYUV(w, h, subsamp)];
+ else
+ dstBuf = new byte[TJ.bufSize(w, h, subsamp)];
try {
tjc = new TJCompressor();
- tjd = new TJDecompressor();
+ tjd = new TJDecompressor();
- for(int pf : formats) {
- for(int i = 0; i < 2; i++) {
+ for (int pf : formats) {
+ for (int i = 0; i < 2; i++) {
int flags = 0;
- if (subsamp == TJ.SAMP_422 || subsamp == TJ.SAMP_420
- || subsamp == TJ.SAMP_440)
+ if (subsamp == TJ.SAMP_422 || subsamp == TJ.SAMP_420 ||
+ subsamp == TJ.SAMP_440)
flags |= TJ.FLAG_FASTUPSAMPLE;
- if(i == 1) {
- if(yuv == YUVDECODE) {
- tjc.close(); tjd.close(); return;
- }
- else flags |= TJ.FLAG_BOTTOMUP;
+ if (i == 1) {
+ if (yuv == YUVDECODE) {
+ tjc.close();
+ tjd.close();
+ return;
+ } else
+ flags |= TJ.FLAG_BOTTOMUP;
}
size = compTest(tjc, dstBuf, w, h, pf, baseName, subsamp, 100,
- flags);
+ flags);
decompTest(tjd, dstBuf, size, w, h, pf, baseName, subsamp, flags);
- if(pf >= TJ.PF_RGBX && pf <= TJ.PF_XRGB && !bi)
+ if (pf >= TJ.PF_RGBX && pf <= TJ.PF_XRGB && !bi)
decompTest(tjd, dstBuf, size, w, h, pf + (TJ.PF_RGBA - TJ.PF_RGBX),
- baseName, subsamp, flags);
+ baseName, subsamp, flags);
}
}
- }
- catch(Exception e) {
- if(tjc != null) tjc.close();
- if(tjd != null) tjd.close();
+ } catch(Exception e) {
+ if (tjc != null) tjc.close();
+ if (tjd != null) tjd.close();
throw e;
}
- if(tjc != null) tjc.close();
- if(tjd != null) tjd.close();
+ if (tjc != null) tjc.close();
+ if (tjd != null) tjd.close();
}
private static void bufSizeTest() throws Exception {
@@ -801,15 +819,15 @@
try {
tjc = new TJCompressor();
System.out.println("Buffer size regression test");
- for(subsamp = 0; subsamp < TJ.NUMSAMP; subsamp++) {
- for(w = 1; w < 48; w++) {
+ for (subsamp = 0; subsamp < TJ.NUMSAMP; subsamp++) {
+ for (w = 1; w < 48; w++) {
int maxh = (w == 1) ? 2048 : 48;
- for(h = 1; h < maxh; h++) {
- if(h % 100 == 0)
+ for (h = 1; h < maxh; h++) {
+ if (h % 100 == 0)
System.out.format("%04d x %04d\b\b\b\b\b\b\b\b\b\b\b", w, h);
srcBuf = new byte[w * h * 4];
jpegBuf = new byte[TJ.bufSize(w, h, subsamp)];
- for(i = 0; i < w * h * 4; i++) {
+ for (i = 0; i < w * h * 4; i++) {
srcBuf[i] = (byte)(r.nextInt(2) * 255);
}
tjc.setSourceImage(srcBuf, w, 0, h, TJ.PF_BGRX);
@@ -819,7 +837,7 @@
srcBuf = new byte[h * w * 4];
jpegBuf = new byte[TJ.bufSize(h, w, subsamp)];
- for(i = 0; i < h * w * 4; i++) {
+ for (i = 0; i < h * w * 4; i++) {
srcBuf[i] = (byte)(r.nextInt(2) * 255);
}
tjc.setSourceImage(srcBuf, h, 0, w, TJ.PF_BGRX);
@@ -828,50 +846,53 @@
}
}
System.out.println("Done. ");
- }
- catch(Exception e) {
- if(tjc != null) tjc.close();
+ } catch(Exception e) {
+ if (tjc != null) tjc.close();
throw e;
}
- if(tjc != null) tjc.close();
+ if (tjc != null) tjc.close();
}
- public static void main(String argv[]) {
+ public static void main(String[] argv) {
try {
String testName = "javatest";
boolean doyuv = false;
- for(int i = 0; i < argv.length; i++) {
- if(argv[i].equalsIgnoreCase("-yuv")) doyuv = true;
- if(argv[i].substring(0, 1).equalsIgnoreCase("-h")
- || argv[i].equalsIgnoreCase("-?"))
+ for (int i = 0; i < argv.length; i++) {
+ if (argv[i].equalsIgnoreCase("-yuv"))
+ doyuv = true;
+ if (argv[i].substring(0, 1).equalsIgnoreCase("-h") ||
+ argv[i].equalsIgnoreCase("-?"))
usage();
- if(argv[i].equalsIgnoreCase("-bi")) {
+ if (argv[i].equalsIgnoreCase("-bi")) {
bi = true;
testName = "javabitest";
}
}
- if(doyuv) yuv = YUVENCODE;
- doTest(35, 39, bi ? _3byteFormatsBI : _3byteFormats, TJ.SAMP_444, testName);
- doTest(39, 41, bi ? _4byteFormatsBI : _4byteFormats, TJ.SAMP_444, testName);
+ if (doyuv) yuv = YUVENCODE;
+ doTest(35, 39, bi ? _3byteFormatsBI : _3byteFormats, TJ.SAMP_444,
+ testName);
+ doTest(39, 41, bi ? _4byteFormatsBI : _4byteFormats, TJ.SAMP_444,
+ testName);
doTest(41, 35, bi ? _3byteFormatsBI : _3byteFormats, TJ.SAMP_422,
- testName);
+ testName);
doTest(35, 39, bi ? _4byteFormatsBI : _4byteFormats, TJ.SAMP_422,
- testName);
+ testName);
doTest(39, 41, bi ? _3byteFormatsBI : _3byteFormats, TJ.SAMP_420,
- testName);
+ testName);
doTest(41, 35, bi ? _4byteFormatsBI : _4byteFormats, TJ.SAMP_420,
- testName);
+ testName);
doTest(35, 39, bi ? _3byteFormatsBI : _3byteFormats, TJ.SAMP_440,
- testName);
+ testName);
doTest(39, 41, bi ? _4byteFormatsBI : _4byteFormats, TJ.SAMP_440,
- testName);
+ testName);
doTest(35, 39, bi ? onlyGrayBI : onlyGray, TJ.SAMP_GRAY, testName);
doTest(39, 41, bi ? _3byteFormatsBI : _3byteFormats, TJ.SAMP_GRAY,
- testName);
+ testName);
doTest(41, 35, bi ? _4byteFormatsBI : _4byteFormats, TJ.SAMP_GRAY,
- testName);
- if(!doyuv && !bi) bufSizeTest();
- if(doyuv && !bi) {
+ testName);
+ if (!doyuv && !bi)
+ bufSizeTest();
+ if (doyuv && !bi) {
yuv = YUVDECODE;
doTest(48, 48, onlyRGB, TJ.SAMP_444, "javatest_yuv0");
doTest(35, 39, onlyRGB, TJ.SAMP_444, "javatest_yuv1");
@@ -886,8 +907,7 @@
doTest(48, 48, onlyGray, TJ.SAMP_GRAY, "javatest_yuv0");
doTest(39, 41, onlyGray, TJ.SAMP_GRAY, "javatest_yuv1");
}
- }
- catch(Exception e) {
+ } catch(Exception e) {
e.printStackTrace();
exitStatus = -1;
}
diff --git a/java/org/libjpegturbo/turbojpeg/TJ.java b/java/org/libjpegturbo/turbojpeg/TJ.java
index ca6616d..f182f96 100644
--- a/java/org/libjpegturbo/turbojpeg/TJ.java
+++ b/java/org/libjpegturbo/turbojpeg/TJ.java
@@ -31,38 +31,38 @@
/**
* TurboJPEG utility class (cannot be instantiated)
*/
-final public class TJ {
+public final class TJ {
/**
* The number of chrominance subsampling options
*/
- final public static int NUMSAMP = 5;
+ public static final int NUMSAMP = 5;
/**
* 4:4:4 chrominance subsampling (no chrominance subsampling). The JPEG
* or YUV image will contain one chrominance component for every pixel in the
* source image.
*/
- final public static int SAMP_444 = 0;
+ public static final int SAMP_444 = 0;
/**
* 4:2:2 chrominance subsampling. The JPEG or YUV image will contain one
* chrominance component for every 2x1 block of pixels in the source image.
*/
- final public static int SAMP_422 = 1;
+ public static final int SAMP_422 = 1;
/**
* 4:2:0 chrominance subsampling. The JPEG or YUV image will contain one
* chrominance component for every 2x2 block of pixels in the source image.
*/
- final public static int SAMP_420 = 2;
+ public static final int SAMP_420 = 2;
/**
* Grayscale. The JPEG or YUV image will contain no chrominance components.
*/
- final public static int SAMP_GRAY = 3;
+ public static final int SAMP_GRAY = 3;
/**
* 4:4:0 chrominance subsampling. The JPEG or YUV image will contain one
* chrominance component for every 1x2 block of pixels in the source image.
*/
- final public static int SAMP_440 = 4;
+ public static final int SAMP_440 = 4;
/**
@@ -75,12 +75,12 @@
* @return the MCU block width for the given level of chrominance subsampling
*/
public static int getMCUWidth(int subsamp) throws Exception {
- if(subsamp < 0 || subsamp >= NUMSAMP)
+ if (subsamp < 0 || subsamp >= NUMSAMP)
throw new Exception("Invalid subsampling type");
return mcuWidth[subsamp];
}
- final private static int mcuWidth[] = {
+ private static final int[] mcuWidth = {
8, 16, 16, 8, 8
};
@@ -96,12 +96,12 @@
* subsampling
*/
public static int getMCUHeight(int subsamp) throws Exception {
- if(subsamp < 0 || subsamp >= NUMSAMP)
+ if (subsamp < 0 || subsamp >= NUMSAMP)
throw new Exception("Invalid subsampling type");
return mcuHeight[subsamp];
}
- final private static int mcuHeight[] = {
+ private static final int[] mcuHeight = {
8, 8, 16, 8, 16
};
@@ -109,76 +109,76 @@
/**
* The number of pixel formats
*/
- final public static int NUMPF = 11;
+ public static final int NUMPF = 11;
/**
* RGB pixel format. The red, green, and blue components in the image are
* stored in 3-byte pixels in the order R, G, B from lowest to highest byte
* address within each pixel.
*/
- final public static int PF_RGB = 0;
+ public static final int PF_RGB = 0;
/**
* BGR pixel format. The red, green, and blue components in the image are
* stored in 3-byte pixels in the order B, G, R from lowest to highest byte
* address within each pixel.
*/
- final public static int PF_BGR = 1;
+ public static final int PF_BGR = 1;
/**
* RGBX pixel format. The red, green, and blue components in the image are
* stored in 4-byte pixels in the order R, G, B from lowest to highest byte
* address within each pixel. The X component is ignored when compressing
* and undefined when decompressing.
*/
- final public static int PF_RGBX = 2;
+ public static final int PF_RGBX = 2;
/**
* BGRX pixel format. The red, green, and blue components in the image are
* stored in 4-byte pixels in the order B, G, R from lowest to highest byte
* address within each pixel. The X component is ignored when compressing
* and undefined when decompressing.
*/
- final public static int PF_BGRX = 3;
+ public static final int PF_BGRX = 3;
/**
* XBGR pixel format. The red, green, and blue components in the image are
* stored in 4-byte pixels in the order R, G, B from highest to lowest byte
* address within each pixel. The X component is ignored when compressing
* and undefined when decompressing.
*/
- final public static int PF_XBGR = 4;
+ public static final int PF_XBGR = 4;
/**
* XRGB pixel format. The red, green, and blue components in the image are
* stored in 4-byte pixels in the order B, G, R from highest to lowest byte
* address within each pixel. The X component is ignored when compressing
* and undefined when decompressing.
*/
- final public static int PF_XRGB = 5;
+ public static final int PF_XRGB = 5;
/**
* Grayscale pixel format. Each 1-byte pixel represents a luminance
* (brightness) level from 0 to 255.
*/
- final public static int PF_GRAY = 6;
+ public static final int PF_GRAY = 6;
/**
* RGBA pixel format. This is the same as {@link #PF_RGBX}, except that when
* decompressing, the X byte is guaranteed to be 0xFF, which can be
* interpreted as an opaque alpha channel.
*/
- final public static int PF_RGBA = 7;
+ public static final int PF_RGBA = 7;
/**
* BGRA pixel format. This is the same as {@link #PF_BGRX}, except that when
* decompressing, the X byte is guaranteed to be 0xFF, which can be
* interpreted as an opaque alpha channel.
*/
- final public static int PF_BGRA = 8;
+ public static final int PF_BGRA = 8;
/**
* ABGR pixel format. This is the same as {@link #PF_XBGR}, except that when
* decompressing, the X byte is guaranteed to be 0xFF, which can be
* interpreted as an opaque alpha channel.
*/
- final public static int PF_ABGR = 9;
+ public static final int PF_ABGR = 9;
/**
* ARGB pixel format. This is the same as {@link #PF_XRGB}, except that when
* decompressing, the X byte is guaranteed to be 0xFF, which can be
* interpreted as an opaque alpha channel.
*/
- final public static int PF_ARGB = 10;
+ public static final int PF_ARGB = 10;
/**
@@ -189,12 +189,12 @@
* @return the pixel size (in bytes) for the given pixel format
*/
public static int getPixelSize(int pixelFormat) throws Exception {
- if(pixelFormat < 0 || pixelFormat >= NUMPF)
+ if (pixelFormat < 0 || pixelFormat >= NUMPF)
throw new Exception("Invalid pixel format");
return pixelSize[pixelFormat];
}
- final private static int pixelSize[] = {
+ private static final int[] pixelSize = {
3, 3, 4, 4, 4, 4, 1, 4, 4, 4, 4
};
@@ -211,12 +211,12 @@
* @return the red offset for the given pixel format
*/
public static int getRedOffset(int pixelFormat) throws Exception {
- if(pixelFormat < 0 || pixelFormat >= NUMPF)
+ if (pixelFormat < 0 || pixelFormat >= NUMPF)
throw new Exception("Invalid pixel format");
return redOffset[pixelFormat];
}
- final private static int redOffset[] = {
+ private static final int[] redOffset = {
0, 2, 0, 2, 3, 1, 0, 0, 2, 3, 1
};
@@ -233,12 +233,12 @@
* @return the green offset for the given pixel format
*/
public static int getGreenOffset(int pixelFormat) throws Exception {
- if(pixelFormat < 0 || pixelFormat >= NUMPF)
+ if (pixelFormat < 0 || pixelFormat >= NUMPF)
throw new Exception("Invalid pixel format");
return greenOffset[pixelFormat];
}
- final private static int greenOffset[] = {
+ private static final int[] greenOffset = {
1, 1, 1, 1, 2, 2, 0, 1, 1, 2, 2
};
@@ -255,12 +255,12 @@
* @return the blue offset for the given pixel format
*/
public static int getBlueOffset(int pixelFormat) throws Exception {
- if(pixelFormat < 0 || pixelFormat >= NUMPF)
+ if (pixelFormat < 0 || pixelFormat >= NUMPF)
throw new Exception("Invalid pixel format");
return blueOffset[pixelFormat];
}
- final private static int blueOffset[] = {
+ private static final int[] blueOffset = {
2, 0, 2, 0, 1, 3, 0, 2, 0, 1, 3
};
@@ -269,27 +269,27 @@
* The uncompressed source/destination image is stored in bottom-up (Windows,
* OpenGL) order, not top-down (X11) order.
*/
- final public static int FLAG_BOTTOMUP = 2;
+ public static final int FLAG_BOTTOMUP = 2;
/**
* Turn off CPU auto-detection and force TurboJPEG to use MMX code
* (if the underlying codec supports it.)
*/
- final public static int FLAG_FORCEMMX = 8;
+ public static final int FLAG_FORCEMMX = 8;
/**
* Turn off CPU auto-detection and force TurboJPEG to use SSE code
* (if the underlying codec supports it.)
*/
- final public static int FLAG_FORCESSE = 16;
+ public static final int FLAG_FORCESSE = 16;
/**
* Turn off CPU auto-detection and force TurboJPEG to use SSE2 code
* (if the underlying codec supports it.)
*/
- final public static int FLAG_FORCESSE2 = 32;
+ public static final int FLAG_FORCESSE2 = 32;
/**
* Turn off CPU auto-detection and force TurboJPEG to use SSE3 code
* (if the underlying codec supports it.)
*/
- final public static int FLAG_FORCESSE3 = 128;
+ public static final int FLAG_FORCESSE3 = 128;
/**
* When decompressing an image that was compressed using chrominance
* subsampling, use the fastest chrominance upsampling algorithm available in
@@ -297,7 +297,7 @@
* creates a smooth transition between neighboring chrominance components in
* order to reduce upsampling artifacts in the decompressed image.
*/
- final public static int FLAG_FASTUPSAMPLE = 256;
+ public static final int FLAG_FASTUPSAMPLE = 256;
/**
* Use the fastest DCT/IDCT algorithm available in the underlying codec. The
* default if this flag is not specified is implementation-specific. The
@@ -306,7 +306,7 @@
* effect on accuracy, but it uses the accurate algorithm when decompressing,
* because this has been shown to have a larger effect.
*/
- final public static int FLAG_FASTDCT = 2048;
+ public static final int FLAG_FASTDCT = 2048;
/**
* Use the most accurate DCT/IDCT algorithm available in the underlying
* codec. The default if this flag is not specified is
@@ -316,7 +316,7 @@
* accurate algorithm when decompressing, because this has been shown to have
* a larger effect.
*/
- final public static int FLAG_ACCURATEDCT = 4096;
+ public static final int FLAG_ACCURATEDCT = 4096;
/**
@@ -333,7 +333,7 @@
* @return the maximum size of the buffer (in bytes) required to hold a JPEG
* image with the given width, height, and level of chrominance subsampling
*/
- public native static int bufSize(int width, int height, int jpegSubsamp)
+ public static native int bufSize(int width, int height, int jpegSubsamp)
throws Exception;
/**
@@ -350,7 +350,7 @@
* @return the size of the buffer (in bytes) required to hold a YUV planar
* image with the given width, height, and level of chrominance subsampling
*/
- public native static int bufSizeYUV(int width, int height,
+ public static native int bufSizeYUV(int width, int height,
int subsamp)
throws Exception;
@@ -361,7 +361,7 @@
* @return a list of fractional scaling factors that the JPEG decompressor in
* this implementation of TurboJPEG supports
*/
- public native static TJScalingFactor[] getScalingFactors()
+ public static native TJScalingFactor[] getScalingFactors()
throws Exception;
static {
diff --git a/java/org/libjpegturbo/turbojpeg/TJCompressor.java b/java/org/libjpegturbo/turbojpeg/TJCompressor.java
index f46eee9..24c122b 100644
--- a/java/org/libjpegturbo/turbojpeg/TJCompressor.java
+++ b/java/org/libjpegturbo/turbojpeg/TJCompressor.java
@@ -36,7 +36,7 @@
*/
public class TJCompressor {
- private final static String NO_ASSOC_ERROR =
+ private static final String NO_ASSOC_ERROR =
"No source image is associated with this instance";
/**
@@ -63,7 +63,7 @@
* {@link TJ TJ.PF_*})
*/
public TJCompressor(byte[] srcImage, int width, int pitch, int height,
- int pixelFormat) throws Exception {
+ int pixelFormat) throws Exception {
setSourceImage(srcImage, width, pitch, height, pixelFormat);
}
@@ -88,7 +88,7 @@
* {@link TJ TJ.PF_*})
*/
public TJCompressor(byte[] srcImage, int x, int y, int width, int pitch,
- int height, int pixelFormat) throws Exception {
+ int height, int pixelFormat) throws Exception {
setSourceImage(srcImage, x, y, width, pitch, height, pixelFormat);
}
@@ -123,15 +123,18 @@
* {@link TJ TJ.PF_*})
*/
public void setSourceImage(byte[] srcImage, int x, int y, int width,
- int pitch, int height, int pixelFormat) throws Exception {
- if(handle == 0) init();
- if(srcImage == null || x < 0 || y < 0 || width < 1 || height < 1
- || pitch < 0 || pixelFormat < 0 || pixelFormat >= TJ.NUMPF)
+ int pitch, int height, int pixelFormat)
+ throws Exception {
+ if (handle == 0) init();
+ if (srcImage == null || x < 0 || y < 0 || width < 1 || height < 1 ||
+ pitch < 0 || pixelFormat < 0 || pixelFormat >= TJ.NUMPF)
throw new Exception("Invalid argument in setSourceImage()");
srcBuf = srcImage;
srcWidth = width;
- if(pitch == 0) srcPitch = width * TJ.getPixelSize(pixelFormat);
- else srcPitch = pitch;
+ if (pitch == 0)
+ srcPitch = width * TJ.getPixelSize(pixelFormat);
+ else
+ srcPitch = pitch;
srcHeight = height;
srcPixelFormat = pixelFormat;
srcX = x;
@@ -143,7 +146,7 @@
* {@link #setSourceImage(byte[], int, int, int, int, int, int)} instead.
*/
public void setSourceImage(byte[] srcImage, int width, int pitch,
- int height, int pixelFormat) throws Exception {
+ int height, int pixelFormat) throws Exception {
setSourceImage(srcImage, 0, 0, width, pitch, height, pixelFormat);
srcX = srcY = -1;
}
@@ -157,7 +160,7 @@
* {@link TJ TJ.SAMP_*})
*/
public void setSubsamp(int newSubsamp) throws Exception {
- if(newSubsamp < 0 || newSubsamp >= TJ.NUMSAMP)
+ if (newSubsamp < 0 || newSubsamp >= TJ.NUMSAMP)
throw new Exception("Invalid argument in setSubsamp()");
subsamp = newSubsamp;
}
@@ -169,7 +172,7 @@
* 100 = best)
*/
public void setJPEGQuality(int quality) throws Exception {
- if(quality < 1 || quality > 100)
+ if (quality < 1 || quality > 100)
throw new Exception("Invalid argument in setJPEGQuality()");
jpegQuality = quality;
}
@@ -185,17 +188,22 @@
* @param flags the bitwise OR of one or more of {@link TJ TJ.FLAG_*}
*/
public void compress(byte[] dstBuf, int flags) throws Exception {
- if(dstBuf == null || flags < 0)
+ if (dstBuf == null || flags < 0)
throw new Exception("Invalid argument in compress()");
- if(srcBuf == null) throw new Exception(NO_ASSOC_ERROR);
- if(jpegQuality < 0) throw new Exception("JPEG Quality not set");
- if(subsamp < 0) throw new Exception("Subsampling level not set");
+ if (srcBuf == null)
+ throw new Exception(NO_ASSOC_ERROR);
+ if (jpegQuality < 0)
+ throw new Exception("JPEG Quality not set");
+ if (subsamp < 0)
+ throw new Exception("Subsampling level not set");
if (srcX >= 0 && srcY >= 0)
compressedSize = compress(srcBuf, srcX, srcY, srcWidth, srcPitch,
- srcHeight, srcPixelFormat, dstBuf, subsamp, jpegQuality, flags);
+ srcHeight, srcPixelFormat, dstBuf, subsamp,
+ jpegQuality, flags);
else
- compressedSize = compress(srcBuf, srcWidth, srcPitch,
- srcHeight, srcPixelFormat, dstBuf, subsamp, jpegQuality, flags);
+ compressedSize = compress(srcBuf, srcWidth, srcPitch, srcHeight,
+ srcPixelFormat, dstBuf, subsamp, jpegQuality,
+ flags);
}
/**
@@ -209,7 +217,7 @@
* #getCompressedSize} to obtain the size of the JPEG image.
*/
public byte[] compress(int flags) throws Exception {
- if(srcWidth < 1 || srcHeight < 1)
+ if (srcWidth < 1 || srcHeight < 1)
throw new Exception(NO_ASSOC_ERROR);
byte[] buf = new byte[TJ.bufSize(srcWidth, srcHeight, subsamp)];
compress(buf, flags);
@@ -230,13 +238,14 @@
* @param flags the bitwise OR of one or more of {@link TJ TJ.FLAG_*}
*/
public void compress(BufferedImage srcImage, byte[] dstBuf, int flags)
- throws Exception {
- if(srcImage == null || dstBuf == null || flags < 0)
+ throws Exception {
+ if (srcImage == null || dstBuf == null || flags < 0)
throw new Exception("Invalid argument in compress()");
int width = srcImage.getWidth();
int height = srcImage.getHeight();
- int pixelFormat; boolean intPixels = false;
- if(byteOrder == null)
+ int pixelFormat;
+ boolean intPixels = false;
+ if (byteOrder == null)
byteOrder = ByteOrder.nativeOrder();
switch(srcImage.getType()) {
case BufferedImage.TYPE_3BYTE_BGR:
@@ -247,7 +256,7 @@
case BufferedImage.TYPE_BYTE_GRAY:
pixelFormat = TJ.PF_GRAY; break;
case BufferedImage.TYPE_INT_BGR:
- if(byteOrder == ByteOrder.BIG_ENDIAN)
+ if (byteOrder == ByteOrder.BIG_ENDIAN)
pixelFormat = TJ.PF_XBGR;
else
pixelFormat = TJ.PF_RGBX;
@@ -255,7 +264,7 @@
case BufferedImage.TYPE_INT_RGB:
case BufferedImage.TYPE_INT_ARGB:
case BufferedImage.TYPE_INT_ARGB_PRE:
- if(byteOrder == ByteOrder.BIG_ENDIAN)
+ if (byteOrder == ByteOrder.BIG_ENDIAN)
pixelFormat = TJ.PF_XRGB;
else
pixelFormat = TJ.PF_BGRX;
@@ -264,9 +273,11 @@
throw new Exception("Unsupported BufferedImage format");
}
WritableRaster wr = srcImage.getRaster();
- if(jpegQuality < 0) throw new Exception("JPEG Quality not set");
- if(subsamp < 0) throw new Exception("Subsampling level not set");
- if(intPixels) {
+ if (jpegQuality < 0)
+ throw new Exception("JPEG Quality not set");
+ if (subsamp < 0)
+ throw new Exception("Subsampling level not set");
+ if (intPixels) {
SinglePixelPackedSampleModel sm =
(SinglePixelPackedSampleModel)srcImage.getSampleModel();
int pitch = sm.getScanlineStride();
@@ -274,26 +285,27 @@
int[] buf = db.getData();
if (srcX >= 0 && srcY >= 0)
compressedSize = compress(buf, srcX, srcY, width, pitch, height,
- pixelFormat, dstBuf, subsamp, jpegQuality, flags);
+ pixelFormat, dstBuf, subsamp, jpegQuality,
+ flags);
else
compressedSize = compress(buf, width, pitch, height, pixelFormat,
- dstBuf, subsamp, jpegQuality, flags);
- }
- else {
+ dstBuf, subsamp, jpegQuality, flags);
+ } else {
ComponentSampleModel sm =
(ComponentSampleModel)srcImage.getSampleModel();
int pixelSize = sm.getPixelStride();
- if(pixelSize != TJ.getPixelSize(pixelFormat))
+ if (pixelSize != TJ.getPixelSize(pixelFormat))
throw new Exception("Inconsistency between pixel format and pixel size in BufferedImage");
int pitch = sm.getScanlineStride();
DataBufferByte db = (DataBufferByte)wr.getDataBuffer();
byte[] buf = db.getData();
if (srcX >= 0 && srcY >= 0)
compressedSize = compress(buf, srcX, srcY, width, pitch, height,
- pixelFormat, dstBuf, subsamp, jpegQuality, flags);
+ pixelFormat, dstBuf, subsamp, jpegQuality,
+ flags);
else
compressedSize = compress(buf, width, pitch, height, pixelFormat,
- dstBuf, subsamp, jpegQuality, flags);
+ dstBuf, subsamp, jpegQuality, flags);
}
}
@@ -340,12 +352,14 @@
* @param flags the bitwise OR of one or more of {@link TJ TJ.FLAG_*}
*/
public void encodeYUV(byte[] dstBuf, int flags) throws Exception {
- if(dstBuf == null || flags < 0)
+ if (dstBuf == null || flags < 0)
throw new Exception("Invalid argument in compress()");
- if(srcBuf == null) throw new Exception(NO_ASSOC_ERROR);
- if(subsamp < 0) throw new Exception("Subsampling level not set");
+ if (srcBuf == null)
+ throw new Exception(NO_ASSOC_ERROR);
+ if (subsamp < 0)
+ throw new Exception("Subsampling level not set");
encodeYUV(srcBuf, srcWidth, srcPitch, srcHeight,
- srcPixelFormat, dstBuf, subsamp, flags);
+ srcPixelFormat, dstBuf, subsamp, flags);
compressedSize = TJ.bufSizeYUV(srcWidth, srcHeight, subsamp);
}
@@ -359,9 +373,10 @@
* @return a buffer containing a YUV planar image
*/
public byte[] encodeYUV(int flags) throws Exception {
- if(srcWidth < 1 || srcHeight < 1)
+ if (srcWidth < 1 || srcHeight < 1)
throw new Exception(NO_ASSOC_ERROR);
- if(subsamp < 0) throw new Exception("Subsampling level not set");
+ if (subsamp < 0)
+ throw new Exception("Subsampling level not set");
byte[] buf = new byte[TJ.bufSizeYUV(srcWidth, srcHeight, subsamp)];
encodeYUV(buf, flags);
return buf;
@@ -383,12 +398,12 @@
*/
public void encodeYUV(BufferedImage srcImage, byte[] dstBuf, int flags)
throws Exception {
- if(srcImage == null || dstBuf == null || flags < 0)
+ if (srcImage == null || dstBuf == null || flags < 0)
throw new Exception("Invalid argument in encodeYUV()");
int width = srcImage.getWidth();
int height = srcImage.getHeight();
int pixelFormat; boolean intPixels = false;
- if(byteOrder == null)
+ if (byteOrder == null)
byteOrder = ByteOrder.nativeOrder();
switch(srcImage.getType()) {
case BufferedImage.TYPE_3BYTE_BGR:
@@ -399,7 +414,7 @@
case BufferedImage.TYPE_BYTE_GRAY:
pixelFormat = TJ.PF_GRAY; break;
case BufferedImage.TYPE_INT_BGR:
- if(byteOrder == ByteOrder.BIG_ENDIAN)
+ if (byteOrder == ByteOrder.BIG_ENDIAN)
pixelFormat = TJ.PF_XBGR;
else
pixelFormat = TJ.PF_RGBX;
@@ -407,7 +422,7 @@
case BufferedImage.TYPE_INT_RGB:
case BufferedImage.TYPE_INT_ARGB:
case BufferedImage.TYPE_INT_ARGB_PRE:
- if(byteOrder == ByteOrder.BIG_ENDIAN)
+ if (byteOrder == ByteOrder.BIG_ENDIAN)
pixelFormat = TJ.PF_XRGB;
else
pixelFormat = TJ.PF_BGRX;
@@ -416,27 +431,26 @@
throw new Exception("Unsupported BufferedImage format");
}
WritableRaster wr = srcImage.getRaster();
- if(subsamp < 0) throw new Exception("Subsampling level not set");
- if(intPixels) {
+ if (subsamp < 0) throw new Exception("Subsampling level not set");
+ if (intPixels) {
SinglePixelPackedSampleModel sm =
(SinglePixelPackedSampleModel)srcImage.getSampleModel();
int pitch = sm.getScanlineStride();
DataBufferInt db = (DataBufferInt)wr.getDataBuffer();
int[] buf = db.getData();
encodeYUV(buf, width, pitch, height, pixelFormat, dstBuf, subsamp,
- flags);
- }
- else {
+ flags);
+ } else {
ComponentSampleModel sm =
(ComponentSampleModel)srcImage.getSampleModel();
int pixelSize = sm.getPixelStride();
- if(pixelSize != TJ.getPixelSize(pixelFormat))
+ if (pixelSize != TJ.getPixelSize(pixelFormat))
throw new Exception("Inconsistency between pixel format and pixel size in BufferedImage");
int pitch = sm.getScanlineStride();
DataBufferByte db = (DataBufferByte)wr.getDataBuffer();
byte[] buf = db.getData();
encodeYUV(buf, width, pitch, height, pixelFormat, dstBuf, subsamp,
- flags);
+ flags);
}
compressedSize = TJ.bufSizeYUV(width, height, subsamp);
}
@@ -453,9 +467,9 @@
*
* @return a buffer containing a YUV planar image
*/
- public byte[] encodeYUV(BufferedImage srcImage, int flags)
- throws Exception {
- if(subsamp < 0) throw new Exception("Subsampling level not set");
+ public byte[] encodeYUV(BufferedImage srcImage, int flags) throws Exception {
+ if (subsamp < 0)
+ throw new Exception("Subsampling level not set");
int width = srcImage.getWidth();
int height = srcImage.getHeight();
byte[] buf = new byte[TJ.bufSizeYUV(width, height, subsamp)];
@@ -484,9 +498,8 @@
protected void finalize() throws Throwable {
try {
close();
- }
- catch(Exception e) {}
- finally {
+ } catch(Exception e) {
+ } finally {
super.finalize();
}
};
diff --git a/java/org/libjpegturbo/turbojpeg/TJCustomFilter.java b/java/org/libjpegturbo/turbojpeg/TJCustomFilter.java
index 412e6a5..6e46fa1 100644
--- a/java/org/libjpegturbo/turbojpeg/TJCustomFilter.java
+++ b/java/org/libjpegturbo/turbojpeg/TJCustomFilter.java
@@ -69,8 +69,8 @@
* @param transform a {@link TJTransform} instance that specifies the
* parameters and/or cropping region for this transform
*/
- public void customFilter(ShortBuffer coeffBuffer, Rectangle bufferRegion,
- Rectangle planeRegion, int componentID, int transformID,
- TJTransform transform)
+ void customFilter(ShortBuffer coeffBuffer, Rectangle bufferRegion,
+ Rectangle planeRegion, int componentID, int transformID,
+ TJTransform transform)
throws Exception;
}
diff --git a/java/org/libjpegturbo/turbojpeg/TJDecompressor.java b/java/org/libjpegturbo/turbojpeg/TJDecompressor.java
index 4530d41..c4bb5a3 100644
--- a/java/org/libjpegturbo/turbojpeg/TJDecompressor.java
+++ b/java/org/libjpegturbo/turbojpeg/TJDecompressor.java
@@ -36,7 +36,7 @@
*/
public class TJDecompressor {
- private final static String NO_ASSOC_ERROR =
+ private static final String NO_ASSOC_ERROR =
"No JPEG image is associated with this instance";
/**
@@ -82,7 +82,7 @@
* @param imageSize size of the JPEG image (in bytes)
*/
public void setJPEGImage(byte[] jpegImage, int imageSize) throws Exception {
- if(jpegImage == null || imageSize < 1)
+ if (jpegImage == null || imageSize < 1)
throw new Exception("Invalid argument in setJPEGImage()");
jpegBuf = jpegImage;
jpegBufSize = imageSize;
@@ -97,7 +97,8 @@
* instance
*/
public int getWidth() throws Exception {
- if(jpegWidth < 1) throw new Exception(NO_ASSOC_ERROR);
+ if (jpegWidth < 1)
+ throw new Exception(NO_ASSOC_ERROR);
return jpegWidth;
}
@@ -109,7 +110,8 @@
* instance
*/
public int getHeight() throws Exception {
- if(jpegHeight < 1) throw new Exception(NO_ASSOC_ERROR);
+ if (jpegHeight < 1)
+ throw new Exception(NO_ASSOC_ERROR);
return jpegHeight;
}
@@ -121,8 +123,9 @@
* associated with this decompressor instance
*/
public int getSubsamp() throws Exception {
- if(jpegSubsamp < 0) throw new Exception(NO_ASSOC_ERROR);
- if(jpegSubsamp >= TJ.NUMSAMP)
+ if (jpegSubsamp < 0)
+ throw new Exception(NO_ASSOC_ERROR);
+ if (jpegSubsamp >= TJ.NUMSAMP)
throw new Exception("JPEG header information is invalid");
return jpegSubsamp;
}
@@ -133,7 +136,8 @@
* @return the JPEG image buffer associated with this decompressor instance
*/
public byte[] getJPEGBuf() throws Exception {
- if(jpegBuf == null) throw new Exception(NO_ASSOC_ERROR);
+ if (jpegBuf == null)
+ throw new Exception(NO_ASSOC_ERROR);
return jpegBuf;
}
@@ -145,7 +149,8 @@
* decompressor instance
*/
public int getJPEGSize() throws Exception {
- if(jpegBufSize < 1) throw new Exception(NO_ASSOC_ERROR);
+ if (jpegBufSize < 1)
+ throw new Exception(NO_ASSOC_ERROR);
return jpegBufSize;
}
@@ -170,22 +175,24 @@
* height
*/
public int getScaledWidth(int desiredWidth, int desiredHeight)
- throws Exception {
- if(jpegWidth < 1 || jpegHeight < 1)
+ throws Exception {
+ if (jpegWidth < 1 || jpegHeight < 1)
throw new Exception(NO_ASSOC_ERROR);
- if(desiredWidth < 0 || desiredHeight < 0)
+ if (desiredWidth < 0 || desiredHeight < 0)
throw new Exception("Invalid argument in getScaledWidth()");
- TJScalingFactor sf[] = TJ.getScalingFactors();
- if(desiredWidth == 0) desiredWidth = jpegWidth;
- if(desiredHeight == 0) desiredHeight = jpegHeight;
+ TJScalingFactor[] sf = TJ.getScalingFactors();
+ if (desiredWidth == 0)
+ desiredWidth = jpegWidth;
+ if (desiredHeight == 0)
+ desiredHeight = jpegHeight;
int scaledWidth = jpegWidth, scaledHeight = jpegHeight;
- for(int i = 0; i < sf.length; i++) {
+ for (int i = 0; i < sf.length; i++) {
scaledWidth = sf[i].getScaled(jpegWidth);
scaledHeight = sf[i].getScaled(jpegHeight);
- if(scaledWidth <= desiredWidth && scaledHeight <= desiredHeight)
+ if (scaledWidth <= desiredWidth && scaledHeight <= desiredHeight)
break;
}
- if(scaledWidth > desiredWidth || scaledHeight > desiredHeight)
+ if (scaledWidth > desiredWidth || scaledHeight > desiredHeight)
throw new Exception("Could not scale down to desired image dimensions");
return scaledWidth;
}
@@ -210,22 +217,24 @@
* height
*/
public int getScaledHeight(int desiredWidth, int desiredHeight)
- throws Exception {
- if(jpegWidth < 1 || jpegHeight < 1)
+ throws Exception {
+ if (jpegWidth < 1 || jpegHeight < 1)
throw new Exception(NO_ASSOC_ERROR);
- if(desiredWidth < 0 || desiredHeight < 0)
+ if (desiredWidth < 0 || desiredHeight < 0)
throw new Exception("Invalid argument in getScaledHeight()");
- TJScalingFactor sf[] = TJ.getScalingFactors();
- if(desiredWidth == 0) desiredWidth = jpegWidth;
- if(desiredHeight == 0) desiredHeight = jpegHeight;
+ TJScalingFactor[] sf = TJ.getScalingFactors();
+ if (desiredWidth == 0)
+ desiredWidth = jpegWidth;
+ if (desiredHeight == 0)
+ desiredHeight = jpegHeight;
int scaledWidth = jpegWidth, scaledHeight = jpegHeight;
- for(int i = 0; i < sf.length; i++) {
+ for (int i = 0; i < sf.length; i++) {
scaledWidth = sf[i].getScaled(jpegWidth);
scaledHeight = sf[i].getScaled(jpegHeight);
- if(scaledWidth <= desiredWidth && scaledHeight <= desiredHeight)
+ if (scaledWidth <= desiredWidth && scaledHeight <= desiredHeight)
break;
}
- if(scaledWidth > desiredWidth || scaledHeight > desiredHeight)
+ if (scaledWidth > desiredWidth || scaledHeight > desiredHeight)
throw new Exception("Could not scale down to desired image dimensions");
return scaledHeight;
}
@@ -284,15 +293,16 @@
* @param flags the bitwise OR of one or more of {@link TJ TJ.FLAG_*}
*/
public void decompress(byte[] dstBuf, int x, int y, int desiredWidth,
- int pitch, int desiredHeight, int pixelFormat, int flags)
- throws Exception {
- if(jpegBuf == null) throw new Exception(NO_ASSOC_ERROR);
- if(dstBuf == null || x < 0 || y < 0 || desiredWidth < 0 || pitch < 0
- || desiredHeight < 0 || pixelFormat < 0 || pixelFormat >= TJ.NUMPF
- || flags < 0)
+ int pitch, int desiredHeight, int pixelFormat,
+ int flags) throws Exception {
+ if (jpegBuf == null)
+ throw new Exception(NO_ASSOC_ERROR);
+ if (dstBuf == null || x < 0 || y < 0 || desiredWidth < 0 || pitch < 0 ||
+ desiredHeight < 0 || pixelFormat < 0 || pixelFormat >= TJ.NUMPF ||
+ flags < 0)
throw new Exception("Invalid argument in decompress()");
decompress(jpegBuf, jpegBufSize, dstBuf, x, y, desiredWidth, pitch,
- desiredHeight, pixelFormat, flags);
+ desiredHeight, pixelFormat, flags);
}
/**
@@ -300,10 +310,10 @@
* {@link #decompress(byte[], int, int, int, int, int, int, int)} instead.
*/
public void decompress(byte[] dstBuf, int desiredWidth, int pitch,
- int desiredHeight, int pixelFormat, int flags)
- throws Exception {
+ int desiredHeight, int pixelFormat, int flags)
+ throws Exception {
decompress(dstBuf, 0, 0, desiredWidth, pitch, desiredHeight, pixelFormat,
- flags);
+ flags);
}
/**
@@ -330,14 +340,15 @@
* @return a buffer containing the decompressed image
*/
public byte[] decompress(int desiredWidth, int pitch, int desiredHeight,
- int pixelFormat, int flags) throws Exception {
- if(desiredWidth < 0 || pitch < 0 || desiredHeight < 0
- || pixelFormat < 0 || pixelFormat >= TJ.NUMPF || flags < 0)
+ int pixelFormat, int flags) throws Exception {
+ if (desiredWidth < 0 || pitch < 0 || desiredHeight < 0 ||
+ pixelFormat < 0 || pixelFormat >= TJ.NUMPF || flags < 0)
throw new Exception("Invalid argument in decompress()");
int pixelSize = TJ.getPixelSize(pixelFormat);
int scaledWidth = getScaledWidth(desiredWidth, desiredHeight);
int scaledHeight = getScaledHeight(desiredWidth, desiredHeight);
- if(pitch == 0) pitch = scaledWidth * pixelSize;
+ if (pitch == 0)
+ pitch = scaledWidth * pixelSize;
byte[] buf = new byte[pitch * scaledHeight];
decompress(buf, desiredWidth, pitch, desiredHeight, pixelFormat, flags);
return buf;
@@ -361,13 +372,14 @@
* @param flags the bitwise OR of one or more of {@link TJ TJ.FLAG_*}
*/
public void decompressToYUV(byte[] dstBuf, int flags) throws Exception {
- if(jpegBuf == null) throw new Exception(NO_ASSOC_ERROR);
- if(dstBuf == null || flags < 0)
+ if (jpegBuf == null)
+ throw new Exception(NO_ASSOC_ERROR);
+ if (dstBuf == null || flags < 0)
throw new Exception("Invalid argument in decompressToYUV()");
decompressToYUV(jpegBuf, jpegBufSize, dstBuf, flags);
}
-
+
/**
* Decompress the JPEG source image associated with this decompressor
* instance and return a buffer containing a YUV planar image. See {@link
@@ -378,11 +390,11 @@
* @return a buffer containing a YUV planar image
*/
public byte[] decompressToYUV(int flags) throws Exception {
- if(flags < 0)
+ if (flags < 0)
throw new Exception("Invalid argument in decompressToYUV()");
- if(jpegWidth < 1 || jpegHeight < 1 || jpegSubsamp < 0)
+ if (jpegWidth < 1 || jpegHeight < 1 || jpegSubsamp < 0)
throw new Exception(NO_ASSOC_ERROR);
- if(jpegSubsamp >= TJ.NUMSAMP)
+ if (jpegSubsamp >= TJ.NUMSAMP)
throw new Exception("JPEG header information is invalid");
byte[] buf = new byte[TJ.bufSizeYUV(jpegWidth, jpegHeight, jpegSubsamp)];
decompressToYUV(buf, flags);
@@ -440,15 +452,16 @@
* @param flags the bitwise OR of one or more of {@link TJ TJ.FLAG_*}
*/
public void decompress(int[] dstBuf, int x, int y, int desiredWidth,
- int stride, int desiredHeight, int pixelFormat, int flags)
- throws Exception {
- if(jpegBuf == null) throw new Exception(NO_ASSOC_ERROR);
- if(dstBuf == null || x < 0 || y < 0 || desiredWidth < 0 || stride < 0
- || desiredHeight < 0 || pixelFormat < 0 || pixelFormat >= TJ.NUMPF
- || flags < 0)
+ int stride, int desiredHeight, int pixelFormat,
+ int flags) throws Exception {
+ if (jpegBuf == null)
+ throw new Exception(NO_ASSOC_ERROR);
+ if (dstBuf == null || x < 0 || y < 0 || desiredWidth < 0 || stride < 0 ||
+ desiredHeight < 0 || pixelFormat < 0 || pixelFormat >= TJ.NUMPF ||
+ flags < 0)
throw new Exception("Invalid argument in decompress()");
decompress(jpegBuf, jpegBufSize, dstBuf, x, y, desiredWidth, stride,
- desiredHeight, pixelFormat, flags);
+ desiredHeight, pixelFormat, flags);
}
/**
@@ -462,16 +475,16 @@
* @param flags the bitwise OR of one or more of {@link TJ TJ.FLAG_*}
*/
public void decompress(BufferedImage dstImage, int flags) throws Exception {
- if(dstImage == null || flags < 0)
+ if (dstImage == null || flags < 0)
throw new Exception("Invalid argument in decompress()");
int desiredWidth = dstImage.getWidth();
int desiredHeight = dstImage.getHeight();
int scaledWidth = getScaledWidth(desiredWidth, desiredHeight);
int scaledHeight = getScaledHeight(desiredWidth, desiredHeight);
- if(scaledWidth != desiredWidth || scaledHeight != desiredHeight)
+ if (scaledWidth != desiredWidth || scaledHeight != desiredHeight)
throw new Exception("BufferedImage dimensions do not match a scaled image size that TurboJPEG is capable of generating.");
int pixelFormat; boolean intPixels = false;
- if(byteOrder == null)
+ if (byteOrder == null)
byteOrder = ByteOrder.nativeOrder();
switch(dstImage.getType()) {
case BufferedImage.TYPE_3BYTE_BGR:
@@ -482,20 +495,20 @@
case BufferedImage.TYPE_BYTE_GRAY:
pixelFormat = TJ.PF_GRAY; break;
case BufferedImage.TYPE_INT_BGR:
- if(byteOrder == ByteOrder.BIG_ENDIAN)
+ if (byteOrder == ByteOrder.BIG_ENDIAN)
pixelFormat = TJ.PF_XBGR;
else
pixelFormat = TJ.PF_RGBX;
intPixels = true; break;
case BufferedImage.TYPE_INT_RGB:
- if(byteOrder == ByteOrder.BIG_ENDIAN)
+ if (byteOrder == ByteOrder.BIG_ENDIAN)
pixelFormat = TJ.PF_XRGB;
else
pixelFormat = TJ.PF_BGRX;
intPixels = true; break;
case BufferedImage.TYPE_INT_ARGB:
case BufferedImage.TYPE_INT_ARGB_PRE:
- if(byteOrder == ByteOrder.BIG_ENDIAN)
+ if (byteOrder == ByteOrder.BIG_ENDIAN)
pixelFormat = TJ.PF_ARGB;
else
pixelFormat = TJ.PF_BGRA;
@@ -504,21 +517,21 @@
throw new Exception("Unsupported BufferedImage format");
}
WritableRaster wr = dstImage.getRaster();
- if(intPixels) {
+ if (intPixels) {
SinglePixelPackedSampleModel sm =
(SinglePixelPackedSampleModel)dstImage.getSampleModel();
int pitch = sm.getScanlineStride();
DataBufferInt db = (DataBufferInt)wr.getDataBuffer();
int[] buf = db.getData();
- if(jpegBuf == null) throw new Exception(NO_ASSOC_ERROR);
+ if (jpegBuf == null)
+ throw new Exception(NO_ASSOC_ERROR);
decompress(jpegBuf, jpegBufSize, buf, scaledWidth, pitch, scaledHeight,
- pixelFormat, flags);
- }
- else {
+ pixelFormat, flags);
+ } else {
ComponentSampleModel sm =
(ComponentSampleModel)dstImage.getSampleModel();
int pixelSize = sm.getPixelStride();
- if(pixelSize != TJ.getPixelSize(pixelFormat))
+ if (pixelSize != TJ.getPixelSize(pixelFormat))
throw new Exception("Inconsistency between pixel format and pixel size in BufferedImage");
int pitch = sm.getScanlineStride();
DataBufferByte db = (DataBufferByte)wr.getDataBuffer();
@@ -550,13 +563,14 @@
* decompressed image
*/
public BufferedImage decompress(int desiredWidth, int desiredHeight,
- int bufferedImageType, int flags) throws Exception {
- if(desiredWidth < 0 || desiredHeight < 0 || flags < 0)
+ int bufferedImageType, int flags)
+ throws Exception {
+ if (desiredWidth < 0 || desiredHeight < 0 || flags < 0)
throw new Exception("Invalid argument in decompress()");
int scaledWidth = getScaledWidth(desiredWidth, desiredHeight);
int scaledHeight = getScaledHeight(desiredWidth, desiredHeight);
BufferedImage img = new BufferedImage(scaledWidth, scaledHeight,
- bufferedImageType);
+ bufferedImageType);
decompress(img, flags);
return img;
}
@@ -571,9 +585,8 @@
protected void finalize() throws Throwable {
try {
close();
- }
- catch(Exception e) {}
- finally {
+ } catch(Exception e) {
+ } finally {
super.finalize();
}
};
diff --git a/java/org/libjpegturbo/turbojpeg/TJScalingFactor.java b/java/org/libjpegturbo/turbojpeg/TJScalingFactor.java
index d71ceee..4e7363f 100644
--- a/java/org/libjpegturbo/turbojpeg/TJScalingFactor.java
+++ b/java/org/libjpegturbo/turbojpeg/TJScalingFactor.java
@@ -34,7 +34,7 @@
public class TJScalingFactor {
public TJScalingFactor(int num, int denom) throws Exception {
- if(num < 1 || denom < 1)
+ if (num < 1 || denom < 1)
throw new Exception("Numerator and denominator must be >= 1");
this.num = num;
this.denom = denom;
diff --git a/java/org/libjpegturbo/turbojpeg/TJTransform.java b/java/org/libjpegturbo/turbojpeg/TJTransform.java
index cfbc896..b464ffd 100644
--- a/java/org/libjpegturbo/turbojpeg/TJTransform.java
+++ b/java/org/libjpegturbo/turbojpeg/TJTransform.java
@@ -40,54 +40,54 @@
/**
* The number of lossless transform operations
*/
- final public static int NUMOP = 8;
+ public static final int NUMOP = 8;
/**
* Do not transform the position of the image pixels.
*/
- final public static int OP_NONE = 0;
+ public static final int OP_NONE = 0;
/**
* Flip (mirror) image horizontally. This transform is imperfect if there
* are any partial MCU blocks on the right edge.
* @see #OPT_PERFECT
*/
- final public static int OP_HFLIP = 1;
+ public static final int OP_HFLIP = 1;
/**
* Flip (mirror) image vertically. This transform is imperfect if there are
* any partial MCU blocks on the bottom edge.
* @see #OPT_PERFECT
*/
- final public static int OP_VFLIP = 2;
+ public static final int OP_VFLIP = 2;
/**
* Transpose image (flip/mirror along upper left to lower right axis). This
* transform is always perfect.
* @see #OPT_PERFECT
*/
- final public static int OP_TRANSPOSE = 3;
+ public static final int OP_TRANSPOSE = 3;
/**
* Transverse transpose image (flip/mirror along upper right to lower left
* axis). This transform is imperfect if there are any partial MCU blocks in
* the image.
* @see #OPT_PERFECT
*/
- final public static int OP_TRANSVERSE = 4;
+ public static final int OP_TRANSVERSE = 4;
/**
* Rotate image clockwise by 90 degrees. This transform is imperfect if
* there are any partial MCU blocks on the bottom edge.
* @see #OPT_PERFECT
*/
- final public static int OP_ROT90 = 5;
+ public static final int OP_ROT90 = 5;
/**
* Rotate image 180 degrees. This transform is imperfect if there are any
* partial MCU blocks in the image.
* @see #OPT_PERFECT
*/
- final public static int OP_ROT180 = 6;
+ public static final int OP_ROT180 = 6;
/**
* Rotate image counter-clockwise by 90 degrees. This transform is imperfect
* if there are any partial MCU blocks on the right edge.
* @see #OPT_PERFECT
*/
- final public static int OP_ROT270 = 7;
+ public static final int OP_ROT270 = 7;
/**
@@ -103,21 +103,21 @@
* partial MCU blocks that cannot be transformed will be left in place, which
* will create odd-looking strips on the right or bottom edge of the image.
*/
- final public static int OPT_PERFECT = 1;
+ public static final int OPT_PERFECT = 1;
/**
* This option will discard any partial MCU blocks that cannot be
* transformed.
*/
- final public static int OPT_TRIM = 2;
+ public static final int OPT_TRIM = 2;
/**
* This option will enable lossless cropping.
*/
- final public static int OPT_CROP = 4;
+ public static final int OPT_CROP = 4;
/**
* This option will discard the color data in the input image and produce
* a grayscale output image.
*/
- final public static int OPT_GRAY = 8;
+ public static final int OPT_GRAY = 8;
/**
* This option will prevent {@link TJTransformer#transform
* TJTransformer.transform()} from outputting a JPEG image for this
@@ -125,9 +125,9 @@
* filter to capture the transformed DCT coefficients without transcoding
* them.
*/
- final public static int OPT_NOOUTPUT = 16;
+ public static final int OPT_NOOUTPUT = 16;
-
+
/**
* Create a new lossless transform instance.
*/
@@ -160,9 +160,11 @@
* TJCustomFilter} interface, or null if no custom filter is needed
*/
public TJTransform(int x, int y, int w, int h, int op, int options,
- TJCustomFilter cf) throws Exception {
+ TJCustomFilter cf) throws Exception {
super(x, y, w, h);
- this.op = op; this.options = options; this.cf = cf;
+ this.op = op;
+ this.options = options;
+ this.cf = cf;
}
/**
@@ -182,9 +184,11 @@
* TJCustomFilter} interface, or null if no custom filter is needed
*/
public TJTransform(Rectangle r, int op, int options,
- TJCustomFilter cf) throws Exception {
+ TJCustomFilter cf) throws Exception {
super(r);
- this.op = op; this.options = options; this.cf = cf;
+ this.op = op;
+ this.options = options;
+ this.cf = cf;
}
/**
diff --git a/java/org/libjpegturbo/turbojpeg/TJTransformer.java b/java/org/libjpegturbo/turbojpeg/TJTransformer.java
index 72c87cd..f84eaa1 100644
--- a/java/org/libjpegturbo/turbojpeg/TJTransformer.java
+++ b/java/org/libjpegturbo/turbojpeg/TJTransformer.java
@@ -93,12 +93,13 @@
* @param flags the bitwise OR of one or more of {@link TJ TJ.FLAG_*}
*/
public void transform(byte[][] dstBufs, TJTransform[] transforms,
- int flags) throws Exception {
- if(jpegBuf == null) throw new Exception("JPEG buffer not initialized");
+ int flags) throws Exception {
+ if (jpegBuf == null)
+ throw new Exception("JPEG buffer not initialized");
transformedSizes = transform(jpegBuf, jpegBufSize, dstBufs, transforms,
- flags);
+ flags);
}
-
+
/**
* Losslessly transform the JPEG image associated with this transformer
* instance and return an array of {@link TJDecompressor} instances, each of
@@ -116,23 +117,23 @@
public TJDecompressor[] transform(TJTransform[] transforms, int flags)
throws Exception {
byte[][] dstBufs = new byte[transforms.length][];
- if(jpegWidth < 1 || jpegHeight < 1)
+ if (jpegWidth < 1 || jpegHeight < 1)
throw new Exception("JPEG buffer not initialized");
- for(int i = 0; i < transforms.length; i++) {
+ for (int i = 0; i < transforms.length; i++) {
int w = jpegWidth, h = jpegHeight;
- if((transforms[i].options & TJTransform.OPT_CROP) != 0) {
- if(transforms[i].width != 0) w = transforms[i].width;
- if(transforms[i].height != 0) h = transforms[i].height;
+ if ((transforms[i].options & TJTransform.OPT_CROP) != 0) {
+ if (transforms[i].width != 0) w = transforms[i].width;
+ if (transforms[i].height != 0) h = transforms[i].height;
}
dstBufs[i] = new byte[TJ.bufSize(w, h, jpegSubsamp)];
}
TJDecompressor[] tjd = new TJDecompressor[transforms.length];
transform(dstBufs, transforms, flags);
- for(int i = 0; i < transforms.length; i++)
+ for (int i = 0; i < transforms.length; i++)
tjd[i] = new TJDecompressor(dstBufs[i], transformedSizes[i]);
return tjd;
}
-
+
/**
* Returns an array containing the sizes of the transformed JPEG images from
* the most recent call to {@link #transform transform()}.
@@ -141,7 +142,7 @@
* the most recent call to {@link #transform transform()}
*/
public int[] getTransformedSizes() throws Exception {
- if(transformedSizes == null)
+ if (transformedSizes == null)
throw new Exception("No image has been transformed yet");
return transformedSizes;
}