Extend the YUV decode functionality to the TurboJPEG Java API, and port the TJUnitTest modifications that treat YUV encoding/decoding as an intermediate step of the JPEG compression/decompression pipeline rather than a separate test case; Add the ability to encode YUV images from an arbitrary position in a large image buffer; Significantly refactor the handling of YUV images; numerous doc tweaks; other Java API cleanup and usability improvements
git-svn-id: svn+ssh://svn.code.sf.net/p/libjpeg-turbo/code/trunk@1176 632fc199-4ca6-4c93-a231-07263d6284db
diff --git a/java/Makefile.am b/java/Makefile.am
index 1307d69..23e3412 100644
--- a/java/Makefile.am
+++ b/java/Makefile.am
@@ -13,6 +13,7 @@
org/libjpegturbo/turbojpeg/TJScalingFactor.java \
org/libjpegturbo/turbojpeg/TJTransform.java \
org/libjpegturbo/turbojpeg/TJTransformer.java \
+ org/libjpegturbo/turbojpeg/YUVImage.java \
TJExample.java \
TJUnitTest.java \
TJBench.java
@@ -34,6 +35,7 @@
org/libjpegturbo/turbojpeg/TJScalingFactor.class \
org/libjpegturbo/turbojpeg/TJTransform.class \
org/libjpegturbo/turbojpeg/TJTransformer.class \
+ org/libjpegturbo/turbojpeg/YUVImage.class \
TJExample.class \
TJUnitTest.class \
TJBench.class
diff --git a/java/TJBench.java b/java/TJBench.java
index 50cbadf..7df0ce2 100644
--- a/java/TJBench.java
+++ b/java/TJBench.java
@@ -146,6 +146,7 @@
int scaledh = sf.getScaled(h);
int yuvSize = TJ.bufSizeYUV(scaledw, yuvpad, scaledh, subsamp), bufsize;
int pitch = scaledw * ps;
+ YUVImage yuvImage = null;
if (jpegQual > 0)
qualStr = new String("_Q" + jpegQual);
@@ -161,9 +162,11 @@
Arrays.fill(dstBuf, (byte)127);
/* Execute once to preload cache */
- tjd.setJPEGImage(jpegBuf[0], jpegSize[0]);
- if (yuv == YUVDECODE)
- tjd.decompressToYUV(dstBuf, scaledw, yuvpad, scaledh, flags);
+ tjd.setSourceImage(jpegBuf[0], jpegSize[0]);
+ if (yuv == YUVDECODE) {
+ yuvImage = new YUVImage(dstBuf, scaledw, yuvpad, scaledh, subsamp);
+ tjd.decompressToYUV(yuvImage, flags);
+ }
else
tjd.decompress(dstBuf, 0, 0, scaledw, pitch, scaledh, pf, flags);
@@ -172,13 +175,13 @@
i++) {
int tile = 0;
if (yuv == YUVDECODE)
- tjd.decompressToYUV(dstBuf, scaledw, yuvpad, scaledh, flags);
+ tjd.decompressToYUV(yuvImage, flags);
else {
for (int y = 0; y < h; y += tileh) {
for (int x = 0; x < w; x += tilew, tile++) {
int width = doTile ? Math.min(tilew, w - x) : scaledw;
int height = doTile ? Math.min(tileh, h - y) : scaledh;
- tjd.setJPEGImage(jpegBuf[tile], jpegSize[tile]);
+ tjd.setSourceImage(jpegBuf[tile], jpegSize[tile]);
tjd.decompress(dstBuf, x, y, width, pitch, height, pf, flags);
}
}
@@ -258,6 +261,7 @@
double start, elapsed;
int ps = TJ.getPixelSize(pf), i;
int yuvSize = 0;
+ YUVImage yuvImage;
yuvSize = TJ.bufSizeYUV(w, yuvpad, h, subsamp);
dstBuf = new byte[yuvSize];
@@ -277,12 +281,13 @@
tjc.setSubsamp(subsamp);
/* Execute once to preload cache */
- tjc.encodeYUV(dstBuf, flags);
+ yuvImage = new YUVImage(dstBuf, w, yuvpad, h, subsamp);
+ tjc.encodeYUV(yuvImage, flags);
/* Benchmark */
for (i = 0, start = getTime();
(elapsed = getTime() - start) < benchTime; i++)
- tjc.encodeYUV(dstBuf, flags);
+ tjc.encodeYUV(yuvImage, flags);
if (quiet == 1)
System.out.format("%-4d %-4d\t", w, h);
@@ -360,7 +365,8 @@
for (i = 0; i < h; i++)
System.arraycopy(srcBuf, w * ps * i, tmpBuf, pitch * i, w * ps);
if (yuv == YUVCOMPRESS)
- tjc.setSourceImageYUV(srcBuf, tilew, yuvpad, tileh);
+ tjc.setSourceImage(new YUVImage(srcBuf, tilew, yuvpad, tileh,
+ subsamp));
else
tjc.setSourceImage(srcBuf, 0, 0, tilew, pitch, tileh, pf);
tjc.setJPEGQuality(jpegQual);
@@ -458,7 +464,7 @@
tjt = new TJTransformer();
- tjt.setJPEGImage(srcBuf, srcSize);
+ tjt.setSourceImage(srcBuf, srcSize);
w = tjt.getWidth();
h = tjt.getHeight();
subsamp = tjt.getSubsamp();
diff --git a/java/TJExample.java b/java/TJExample.java
index 7562114..2c6324d 100644
--- a/java/TJExample.java
+++ b/java/TJExample.java
@@ -277,7 +277,7 @@
scaleFactor.isOne()) {
file = new File(argv[1]);
FileOutputStream fos = new FileOutputStream(file);
- fos.write(tjd.getJPEGBuf(), 0, tjd.getJPEGSize());
+ fos.write(tjd.getSourceBuf(), 0, tjd.getSourceSize());
fos.close();
System.exit(0);
}
diff --git a/java/TJUnitTest.java b/java/TJUnitTest.java
index 0bf8367..d8b5c85 100644
--- a/java/TJUnitTest.java
+++ b/java/TJUnitTest.java
@@ -92,9 +92,7 @@
TJ.PF_RGB
};
- private static final int YUVENCODE = 1;
- private static final int YUVDECODE = 2;
- private static int yuv = 0;
+ private static boolean doYUV = false;
private static int pad = 4;
private static boolean bi = false;
@@ -534,54 +532,6 @@
return ((v + (p) - 1) & (~((p) - 1)));
}
- private static void initBufYUV(byte[] buf, int w, int pad, int h,
- int subsamp) throws Exception {
- int row, col;
- 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, pad), uvpitch = PAD(cw, pad);
- int halfway = 16, blockSize = 8;
-
- Arrays.fill(buf, (byte)0);
- for (row = 0; row < ph; row++) {
- for (col = 0; col < pw; col++) {
- int index = ypitch * row + col;
- if (((row / blockSize) + (col / blockSize)) % 2 == 0) {
- if (row < halfway)
- buf[index] = (byte)255;
- else
- buf[index] = 0;
- } else {
- if (row < halfway)
- buf[index] = 76;
- else
- buf[index] = (byte)226;
- }
- }
- }
- if (subsamp != TJ.SAMP_GRAY) {
- halfway = 16 / vsf;
- for (row = 0; row < ch; row++) {
- for (col = 0; col < cw; col++) {
- int uindex = ypitch * ph + (uvpitch * row + col),
- vindex = ypitch * ph + uvpitch * ch + (uvpitch * row + col);
- if (((row * vsf / blockSize) + (col * hsf / blockSize)) % 2 == 0) {
- buf[uindex] = buf[vindex] = (byte)128;
- } else {
- if (row < halfway) {
- buf[uindex] = 85;
- buf[vindex] = (byte)255;
- } else {
- buf[uindex] = 0;
- buf[vindex] = (byte)149;
- }
- }
- }
- }
- }
- }
-
private static int checkBufYUV(byte[] buf, int size, int w, int h,
int subsamp, TJScalingFactor sf)
throws Exception {
@@ -686,87 +636,68 @@
private static int compTest(TJCompressor tjc, byte[] dstBuf, int w,
int h, int pf, String baseName, int subsamp,
int jpegQual, int flags) throws Exception {
- String tempstr;
+ String tempStr;
byte[] srcBuf = null;
BufferedImage img = null;
- String pfStr;
+ String pfStr, pfStrLong;
+ String buStr = (flags & TJ.FLAG_BOTTOMUP) != 0 ? "BU" : "TD";
String buStrLong = (flags & TJ.FLAG_BOTTOMUP) != 0 ?
"Bottom-Up" : "Top-Down ";
- String buStr = (flags & TJ.FLAG_BOTTOMUP) != 0 ? "BU" : "TD";
int size = 0, ps, imgType = pf;
- if (yuv == YUVDECODE) {
- System.out.format("YUV %s %s --> JPEG Q%d ... ", subNameLong[subsamp],
- buStrLong, jpegQual);
- srcBuf = new byte[TJ.bufSizeYUV(w, pad, h, subsamp)];
- initBufYUV(srcBuf, w, pad, h, subsamp);
- pfStr = "YUV";
+ if (bi) {
+ pf = biTypePF(imgType);
+ pfStr = biTypeStr(imgType);
+ pfStrLong = pfStr + " (" + pixFormatStr[pf] + ")";
} else {
- if (bi) {
- pf = biTypePF(imgType);
- pfStr = biTypeStr(imgType);
- } else
- pfStr = pixFormatStr[pf];
- ps = TJ.getPixelSize(pf);
+ pfStr = pixFormatStr[pf];
+ pfStrLong = pfStr;
+ }
+ ps = TJ.getPixelSize(pf);
- System.out.print(pfStr + " ");
- if (bi)
- System.out.print("(" + pixFormatStr[pf] + ") ");
- if (yuv == YUVENCODE)
- System.out.format("%s -> %s YUV ... ", buStrLong,
- subNameLong[subsamp]);
- else
- System.out.format("%s -> %s Q%d ... ", buStrLong, subNameLong[subsamp],
- jpegQual);
-
- if (bi) {
- img = new BufferedImage(w, h, imgType);
- initImg(img, pf, flags);
- tempstr = baseName + "_enc_" + pfStr + "_" + buStr + "_" +
- subName[subsamp] + "_Q" + jpegQual + ".png";
- File file = new File(tempstr);
- ImageIO.write(img, "png", file);
- } else {
- srcBuf = new byte[w * h * ps + 1];
- initBuf(srcBuf, w, w * ps, h, pf, flags);
- }
+ if (bi) {
+ img = new BufferedImage(w, h, imgType);
+ initImg(img, pf, flags);
+ tempStr = baseName + "_enc_" + pfStr + "_" + buStr + "_" +
+ subName[subsamp] + "_Q" + jpegQual + ".png";
+ File file = new File(tempStr);
+ ImageIO.write(img, "png", file);
+ tjc.setSourceImage(img, 0, 0, 0, 0);
+ } else {
+ srcBuf = new byte[w * h * ps + 1];
+ initBuf(srcBuf, w, w * ps, h, pf, flags);
+ tjc.setSourceImage(srcBuf, 0, 0, w, 0, h, pf);
}
Arrays.fill(dstBuf, (byte)0);
tjc.setSubsamp(subsamp);
tjc.setJPEGQuality(jpegQual);
- tjc.setYUVPad(pad);
- if (yuv == YUVDECODE)
- tjc.setSourceImageYUV(srcBuf, w, pad, h);
- else if (bi)
- tjc.setSourceImage(img, 0, 0, 0, 0);
- else
- tjc.setSourceImage(srcBuf, 0, 0, w, 0, h, pf);
- if (yuv == YUVENCODE)
- tjc.encodeYUV(dstBuf, flags);
- else
- tjc.compress(dstBuf, flags);
- size = tjc.getCompressedSize();
-
- if (yuv == YUVENCODE)
- tempstr = baseName + "_enc_" + pfStr + "_" + buStr + "_" +
- subName[subsamp] + ".yuv";
- else
- tempstr = baseName + "_enc_" + pfStr + "_" + buStr + "_" +
- subName[subsamp] + "_Q" + jpegQual + ".jpg";
- writeJPEG(dstBuf, size, tempstr);
-
- if (yuv == YUVENCODE) {
- if (checkBufYUV(dstBuf, size, w, h, subsamp,
- new TJScalingFactor(1, 1)) == 1)
- System.out.print("Passed.");
+ if (doYUV) {
+ System.out.format("%s %s -> YUV %s ... ", pfStrLong, buStrLong,
+ subNameLong[subsamp]);
+ YUVImage yuvImage = tjc.encodeYUV(pad, flags);
+ if (checkBufYUV(yuvImage.getBuf(), yuvImage.getSize(), w, h, subsamp,
+ new TJScalingFactor(1, 1)) == 1)
+ System.out.print("Passed.\n");
else {
- System.out.print("FAILED!");
+ System.out.print("FAILED!\n");
exitStatus = -1;
}
- } else
- System.out.print("Done.");
- System.out.println("\n Result in " + tempstr);
+
+ System.out.format("YUV %s %s -> JPEG Q%d ... ", subNameLong[subsamp],
+ buStrLong, jpegQual);
+ tjc.setSourceImage(yuvImage);
+ } else {
+ System.out.format("%s %s -> %s Q%d ... ", pfStrLong, buStrLong,
+ subNameLong[subsamp], jpegQual);
+ }
+ tjc.compress(dstBuf, flags);
+ size = tjc.getCompressedSize();
+
+ tempStr = baseName + "_enc_" + pfStr + "_" + buStr + "_" +
+ subName[subsamp] + "_Q" + jpegQual + ".jpg";
+ writeJPEG(dstBuf, size, tempStr);
+ System.out.println("Done.\n Result in " + tempStr);
return size;
}
@@ -775,39 +706,25 @@
int jpegSize, int w, int h, int pf,
String baseName, int subsamp, int flags,
TJScalingFactor sf) throws Exception {
- String pfStr, tempstr;
+ String pfStr, pfStrLong, tempStr;
+ String buStrLong = (flags & TJ.FLAG_BOTTOMUP) != 0 ?
+ "Bottom-Up" : "Top-Down ";
int scaledWidth = sf.getScaled(w);
int scaledHeight = sf.getScaled(h);
int temp1, temp2, imgType = pf;
BufferedImage img = null;
byte[] dstBuf = null;
- if (yuv == YUVENCODE) return;
-
if (bi) {
pf = biTypePF(imgType);
pfStr = biTypeStr(imgType);
- } else
+ pfStrLong = pfStr + " (" + pixFormatStr[pf] + ")";
+ } else {
pfStr = pixFormatStr[pf];
-
- System.out.print("JPEG -> ");
- if (yuv == YUVDECODE)
- System.out.print("YUV " + subNameLong[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 ");
+ pfStrLong = pfStr;
}
- if (!sf.isOne())
- System.out.print(sf.getNum() + "/" + sf.getDenom() + " ... ");
- else
- System.out.print("... ");
- tjd.setJPEGImage(jpegBuf, jpegSize);
+ tjd.setSourceImage(jpegBuf, jpegSize);
if (tjd.getWidth() != w || tjd.getHeight() != h ||
tjd.getSubsamp() != subsamp)
throw new Exception("Incorrect JPEG header");
@@ -819,43 +736,52 @@
if (temp1 != scaledWidth || temp2 != scaledHeight)
throw new Exception("Scaled size mismatch");
- if (yuv == YUVDECODE)
- dstBuf = tjd.decompressToYUV(scaledWidth, pad, scaledHeight, flags);
- else {
- if (bi)
- img = tjd.decompress(scaledWidth, scaledHeight, imgType, flags);
- else
- dstBuf = tjd.decompress(scaledWidth, 0, scaledHeight, pf, flags);
+ if (doYUV) {
+ System.out.format("JPEG -> YUV %s ", subNameLong[subsamp]);
+ if(!sf.isOne())
+ System.out.format("%d/%d ... ", sf.getNum(), sf.getDenom());
+ else System.out.print("... ");
+ YUVImage yuvImage = tjd.decompressToYUV(scaledWidth, pad, scaledHeight,
+ flags);
+ if (checkBufYUV(yuvImage.getBuf(), yuvImage.getSize(), scaledWidth,
+ scaledHeight, subsamp, sf) == 1)
+ System.out.print("Passed.\n");
+ else {
+ System.out.print("FAILED!\n"); exitStatus = -1;
+ }
+
+ System.out.format("YUV %s -> %s %s ... ", subNameLong[subsamp],
+ pfStrLong, buStrLong);
+ tjd.setSourceImage(yuvImage);
+ } else {
+ System.out.format("JPEG -> %s %s ", pfStrLong, buStrLong);
+ if(!sf.isOne())
+ System.out.format("%d/%d ... ", sf.getNum(), sf.getDenom());
+ else System.out.print("... ");
}
+ if (bi)
+ img = tjd.decompress(scaledWidth, scaledHeight, imgType, flags);
+ else
+ dstBuf = tjd.decompress(scaledWidth, 0, scaledHeight, pf, flags);
if (bi) {
- tempstr = baseName + "_dec_" + pfStr + "_" +
+ 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);
+ File file = new File(tempStr);
ImageIO.write(img, "png", file);
}
- if (yuv == YUVDECODE) {
- if (checkBufYUV(dstBuf, dstBuf.length, scaledWidth, scaledHeight,
- subsamp, sf) == 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))
- System.out.print("Passed.");
- else {
- System.out.print("FAILED!");
- exitStatus = -1;
- }
+ 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.\n");
+ else {
+ System.out.print("FAILED!\n");
+ exitStatus = -1;
}
- System.out.print("\n");
}
private static void decompTest(TJDecompressor tjd, byte[] jpegBuf,
@@ -884,10 +810,7 @@
int size;
byte[] dstBuf;
- if (yuv == YUVENCODE)
- dstBuf = new byte[TJ.bufSizeYUV(w, pad, h, subsamp)];
- else
- dstBuf = new byte[TJ.bufSize(w, h, subsamp)];
+ dstBuf = new byte[TJ.bufSize(w, h, subsamp)];
try {
tjc = new TJCompressor();
@@ -900,20 +823,16 @@
if (subsamp == TJ.SAMP_422 || subsamp == TJ.SAMP_420 ||
subsamp == TJ.SAMP_440 || subsamp == TJ.SAMP_411)
flags |= TJ.FLAG_FASTUPSAMPLE;
- if (i == 1) {
- if (yuv == YUVDECODE) {
- tjc.close();
- tjd.close();
- return;
- } else
- flags |= TJ.FLAG_BOTTOMUP;
- }
+ if (i == 1)
+ flags |= TJ.FLAG_BOTTOMUP;
size = compTest(tjc, dstBuf, w, h, pf, baseName, subsamp, 100,
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) {
+ System.out.print("\n");
decompTest(tjd, dstBuf, size, w, h, pf + (TJ.PF_RGBA - TJ.PF_RGBX),
baseName, subsamp, flags);
+ }
System.out.print("\n");
}
}
@@ -929,7 +848,8 @@
private static void bufSizeTest() throws Exception {
int w, h, i, subsamp;
- byte[] srcBuf, dstBuf;
+ byte[] srcBuf, dstBuf = null;
+ YUVImage dstImage = null;
TJCompressor tjc = null;
Random r = new Random();
@@ -943,8 +863,8 @@
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];
- if (yuv == YUVENCODE)
- dstBuf = new byte[TJ.bufSizeYUV(w, pad, h, subsamp)];
+ if (doYUV)
+ dstImage = new YUVImage(w, pad, h, subsamp);
else
dstBuf = new byte[TJ.bufSize(w, h, subsamp)];
for (i = 0; i < w * h * 4; i++) {
@@ -953,23 +873,22 @@
tjc.setSourceImage(srcBuf, 0, 0, w, 0, h, TJ.PF_BGRX);
tjc.setSubsamp(subsamp);
tjc.setJPEGQuality(100);
- tjc.setYUVPad(pad);
- if (yuv == YUVENCODE)
- tjc.encodeYUV(dstBuf, 0);
+ if (doYUV)
+ tjc.encodeYUV(dstImage, 0);
else
tjc.compress(dstBuf, 0);
srcBuf = new byte[h * w * 4];
- if (yuv == YUVENCODE)
- dstBuf = new byte[TJ.bufSizeYUV(h, pad, w, subsamp)];
+ if (doYUV)
+ dstImage = new YUVImage(h, pad, w, subsamp);
else
dstBuf = new byte[TJ.bufSize(h, w, subsamp)];
for (i = 0; i < h * w * 4; i++) {
srcBuf[i] = (byte)(r.nextInt(2) * 255);
}
tjc.setSourceImage(srcBuf, 0, 0, h, 0, w, TJ.PF_BGRX);
- if (yuv == YUVENCODE)
- tjc.encodeYUV(dstBuf, 0);
+ if (doYUV)
+ tjc.encodeYUV(dstImage, 0);
else
tjc.compress(dstBuf, 0);
}
@@ -986,10 +905,9 @@
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;
+ doYUV = true;
if (argv[i].equalsIgnoreCase("-noyuvpad"))
pad = 1;
if (argv[i].substring(0, 1).equalsIgnoreCase("-h") ||
@@ -1000,10 +918,8 @@
testName = "javabitest";
}
}
- if (doyuv) {
- yuv = YUVENCODE;
+ if (doYUV)
_4byteFormats[4] = -1;
- }
doTest(35, 39, bi ? _3byteFormatsBI : _3byteFormats, TJ.SAMP_444,
testName);
doTest(39, 41, bi ? _4byteFormatsBI : _4byteFormats, TJ.SAMP_444,
@@ -1032,23 +948,15 @@
testName);
if (!bi)
bufSizeTest();
- if (doyuv && !bi) {
+ if (doYUV && !bi) {
System.out.print("\n--------------------\n\n");
- yuv = YUVDECODE;
doTest(48, 48, onlyRGB, TJ.SAMP_444, "javatest_yuv0");
- doTest(35, 39, onlyRGB, TJ.SAMP_444, "javatest_yuv1");
doTest(48, 48, onlyRGB, TJ.SAMP_422, "javatest_yuv0");
- doTest(39, 41, onlyRGB, TJ.SAMP_422, "javatest_yuv1");
doTest(48, 48, onlyRGB, TJ.SAMP_420, "javatest_yuv0");
- doTest(41, 35, onlyRGB, TJ.SAMP_420, "javatest_yuv1");
doTest(48, 48, onlyRGB, TJ.SAMP_440, "javatest_yuv0");
- doTest(35, 39, onlyRGB, TJ.SAMP_440, "javatest_yuv1");
doTest(48, 48, onlyRGB, TJ.SAMP_411, "javatest_yuv0");
- doTest(39, 41, onlyRGB, TJ.SAMP_411, "javatest_yuv1");
doTest(48, 48, onlyRGB, TJ.SAMP_GRAY, "javatest_yuv0");
- doTest(41, 35, onlyRGB, TJ.SAMP_GRAY, "javatest_yuv1");
doTest(48, 48, onlyGray, TJ.SAMP_GRAY, "javatest_yuv0");
- doTest(35, 39, onlyGray, TJ.SAMP_GRAY, "javatest_yuv1");
}
} catch(Exception e) {
e.printStackTrace();
diff --git a/java/doc/allclasses-frame.html b/java/doc/allclasses-frame.html
index b2810b5..2183aa4 100644
--- a/java/doc/allclasses-frame.html
+++ b/java/doc/allclasses-frame.html
@@ -33,6 +33,8 @@
<BR>
<A HREF="org/libjpegturbo/turbojpeg/TJTransformer.html" title="class in org.libjpegturbo.turbojpeg" target="classFrame">TJTransformer</A>
<BR>
+<A HREF="org/libjpegturbo/turbojpeg/YUVImage.html" title="class in org.libjpegturbo.turbojpeg" target="classFrame">YUVImage</A>
+<BR>
</FONT></TD>
</TR>
</TABLE>
diff --git a/java/doc/allclasses-noframe.html b/java/doc/allclasses-noframe.html
index ddc3d63..41ed55e 100644
--- a/java/doc/allclasses-noframe.html
+++ b/java/doc/allclasses-noframe.html
@@ -33,6 +33,8 @@
<BR>
<A HREF="org/libjpegturbo/turbojpeg/TJTransformer.html" title="class in org.libjpegturbo.turbojpeg">TJTransformer</A>
<BR>
+<A HREF="org/libjpegturbo/turbojpeg/YUVImage.html" title="class in org.libjpegturbo.turbojpeg">YUVImage</A>
+<BR>
</FONT></TD>
</TR>
</TABLE>
diff --git a/java/doc/deprecated-list.html b/java/doc/deprecated-list.html
index bcf6858..a0a67a6 100644
--- a/java/doc/deprecated-list.html
+++ b/java/doc/deprecated-list.html
@@ -149,8 +149,7 @@
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="org/libjpegturbo/turbojpeg/TJDecompressor.html#decompressToYUV(byte[], int)">org.libjpegturbo.turbojpeg.TJDecompressor.decompressToYUV(byte[], int)</A>
<BR>
- <I>Use <A HREF="org/libjpegturbo/turbojpeg/TJDecompressor.html#decompressToYUV(byte[], int, int, int, int)"><CODE>TJDecompressor.decompressToYUV(byte[], int, int, int, int)</CODE></A>
- instead.</I> </TD>
+ <I>Use <A HREF="org/libjpegturbo/turbojpeg/TJDecompressor.html#decompressToYUV(org.libjpegturbo.turbojpeg.YUVImage, int)"><CODE>TJDecompressor.decompressToYUV(YUVImage, int)</CODE></A> instead.</I> </TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="org/libjpegturbo/turbojpeg/TJDecompressor.html#decompressToYUV(int)">org.libjpegturbo.turbojpeg.TJDecompressor.decompressToYUV(int)</A>
@@ -172,6 +171,31 @@
<A HREF="org/libjpegturbo/turbojpeg/TJCompressor.html#encodeYUV(int)"><CODE>TJCompressor.encodeYUV(int)</CODE></A> instead.</I> </TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="org/libjpegturbo/turbojpeg/TJCompressor.html#encodeYUV(byte[], int)">org.libjpegturbo.turbojpeg.TJCompressor.encodeYUV(byte[], int)</A>
+<BR>
+ <I>Use <A HREF="org/libjpegturbo/turbojpeg/TJCompressor.html#encodeYUV(org.libjpegturbo.turbojpeg.YUVImage, int)"><CODE>TJCompressor.encodeYUV(YUVImage, int)</CODE></A> instead.</I> </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="org/libjpegturbo/turbojpeg/TJCompressor.html#encodeYUV(int)">org.libjpegturbo.turbojpeg.TJCompressor.encodeYUV(int)</A>
+<BR>
+ <I>Use <A HREF="org/libjpegturbo/turbojpeg/TJCompressor.html#encodeYUV(int, int)"><CODE>TJCompressor.encodeYUV(int, int)</CODE></A> instead.</I> </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="org/libjpegturbo/turbojpeg/TJDecompressor.html#getJPEGBuf()">org.libjpegturbo.turbojpeg.TJDecompressor.getJPEGBuf()</A>
+<BR>
+ <I>Use <A HREF="org/libjpegturbo/turbojpeg/TJDecompressor.html#getSourceBuf()"><CODE>TJDecompressor.getSourceBuf()</CODE></A> instead.</I> </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="org/libjpegturbo/turbojpeg/TJDecompressor.html#getJPEGSize()">org.libjpegturbo.turbojpeg.TJDecompressor.getJPEGSize()</A>
+<BR>
+ <I>Use <A HREF="org/libjpegturbo/turbojpeg/TJDecompressor.html#getSourceSize()"><CODE>TJDecompressor.getSourceSize()</CODE></A> instead.</I> </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="org/libjpegturbo/turbojpeg/TJDecompressor.html#setJPEGImage(byte[], int)">org.libjpegturbo.turbojpeg.TJDecompressor.setJPEGImage(byte[], int)</A>
+<BR>
+ <I>Use <A HREF="org/libjpegturbo/turbojpeg/TJDecompressor.html#setSourceImage(byte[], int)"><CODE>TJDecompressor.setSourceImage(byte[], int)</CODE></A> instead.</I> </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><A HREF="org/libjpegturbo/turbojpeg/TJCompressor.html#setSourceImage(byte[], int, int, int, int)">org.libjpegturbo.turbojpeg.TJCompressor.setSourceImage(byte[], int, int, int, int)</A>
<BR>
<I>Use
diff --git a/java/doc/index-all.html b/java/doc/index-all.html
index 9db1075..df71bde 100644
--- a/java/doc/index-all.html
+++ b/java/doc/index-all.html
@@ -74,7 +74,7 @@
<A NAME="skip-navbar_top"></A>
<!-- ========= END OF TOP NAVBAR ========= -->
-<A HREF="#_B_">B</A> <A HREF="#_C_">C</A> <A HREF="#_D_">D</A> <A HREF="#_E_">E</A> <A HREF="#_F_">F</A> <A HREF="#_G_">G</A> <A HREF="#_H_">H</A> <A HREF="#_I_">I</A> <A HREF="#_J_">J</A> <A HREF="#_N_">N</A> <A HREF="#_O_">O</A> <A HREF="#_P_">P</A> <A HREF="#_S_">S</A> <A HREF="#_T_">T</A> <HR>
+<A HREF="#_B_">B</A> <A HREF="#_C_">C</A> <A HREF="#_D_">D</A> <A HREF="#_E_">E</A> <A HREF="#_F_">F</A> <A HREF="#_G_">G</A> <A HREF="#_H_">H</A> <A HREF="#_I_">I</A> <A HREF="#_J_">J</A> <A HREF="#_N_">N</A> <A HREF="#_O_">O</A> <A HREF="#_P_">P</A> <A HREF="#_S_">S</A> <A HREF="#_T_">T</A> <A HREF="#_Y_">Y</A> <HR>
<A NAME="_B_"><!-- --></A><H2>
<B>B</B></H2>
<DL>
@@ -148,8 +148,9 @@
<DL>
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(byte[], int, int, int, int, int, int, int)"><B>decompress(byte[], int, int, int, int, int, int, int)</B></A> -
Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html" title="class in org.libjpegturbo.turbojpeg">TJDecompressor</A>
-<DD>Decompress the JPEG source image associated with this decompressor
- instance and output a decompressed image to the given destination buffer.
+<DD>Decompress the JPEG source image or decode the YUV source image associated
+ with this decompressor instance and output a grayscale, RGB, or CMYK image
+ to the given destination buffer.
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(byte[], int, int, int, int, int)"><B>decompress(byte[], int, int, int, int, int)</B></A> -
Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html" title="class in org.libjpegturbo.turbojpeg">TJDecompressor</A>
<DD><B>Deprecated.</B> <I>Use
@@ -160,30 +161,32 @@
instance and return a buffer containing the decompressed image.
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(int[], int, int, int, int, int, int, int)"><B>decompress(int[], int, int, int, int, int, int, int)</B></A> -
Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html" title="class in org.libjpegturbo.turbojpeg">TJDecompressor</A>
-<DD>Decompress the JPEG source image associated with this decompressor
- instance and output a decompressed image to the given destination buffer.
+<DD>Decompress the JPEG source image or decode the YUV source image associated
+ with this decompressor instance and output a grayscale, RGB, or CMYK image
+ to the given destination buffer.
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(java.awt.image.BufferedImage, int)"><B>decompress(BufferedImage, int)</B></A> -
Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html" title="class in org.libjpegturbo.turbojpeg">TJDecompressor</A>
-<DD>Decompress the JPEG source image associated with this decompressor
- instance and output a decompressed image to the given
- <code>BufferedImage</code> instance.
+<DD>Decompress the JPEG source image or decode the YUV source image associated
+ with this decompressor instance and output a decompressed/decoded image to
+ the given <code>BufferedImage</code> instance.
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(int, int, int, int)"><B>decompress(int, int, int, int)</B></A> -
Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html" title="class in org.libjpegturbo.turbojpeg">TJDecompressor</A>
-<DD>Decompress the JPEG source image associated with this decompressor
- instance and return a <code>BufferedImage</code> instance containing the
- decompressed image.
-<DT><A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html#decompressToYUV(byte[], int, int, int, int)"><B>decompressToYUV(byte[], int, int, int, int)</B></A> -
+<DD>Decompress the JPEG source image or decode the YUV source image associated
+ with this decompressor instance and return a <code>BufferedImage</code>
+ instance containing the decompressed/decoded image.
+<DT><A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html#decompressToYUV(org.libjpegturbo.turbojpeg.YUVImage, int)"><B>decompressToYUV(YUVImage, int)</B></A> -
Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html" title="class in org.libjpegturbo.turbojpeg">TJDecompressor</A>
<DD>Decompress the JPEG source image associated with this decompressor
- instance and output a YUV planar image to the given destination buffer.
+ instance into a YUV planar image and store it in the given
+ <code>YUVImage</code> instance.
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html#decompressToYUV(byte[], int)"><B>decompressToYUV(byte[], int)</B></A> -
Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html" title="class in org.libjpegturbo.turbojpeg">TJDecompressor</A>
-<DD><B>Deprecated.</B> <I>Use <A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html#decompressToYUV(byte[], int, int, int, int)"><CODE>TJDecompressor.decompressToYUV(byte[], int, int, int, int)</CODE></A>
- instead.</I>
+<DD><B>Deprecated.</B> <I>Use <A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html#decompressToYUV(org.libjpegturbo.turbojpeg.YUVImage, int)"><CODE>TJDecompressor.decompressToYUV(YUVImage, int)</CODE></A> instead.</I>
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html#decompressToYUV(int, int, int, int)"><B>decompressToYUV(int, int, int, int)</B></A> -
Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html" title="class in org.libjpegturbo.turbojpeg">TJDecompressor</A>
<DD>Decompress the JPEG source image associated with this decompressor
- instance and return a buffer containing a YUV planar image.
+ instance into a YUV planar image and return a <code>YUVImage</code>
+ instance containing the decompressed image.
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html#decompressToYUV(int)"><B>decompressToYUV(int)</B></A> -
Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html" title="class in org.libjpegturbo.turbojpeg">TJDecompressor</A>
<DD><B>Deprecated.</B> <I>Use <A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html#decompressToYUV(int, int, int, int)"><CODE>TJDecompressor.decompressToYUV(int, int, int, int)</CODE></A> instead.</I>
@@ -192,14 +195,22 @@
<A NAME="_E_"><!-- --></A><H2>
<B>E</B></H2>
<DL>
+<DT><A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html#encodeYUV(org.libjpegturbo.turbojpeg.YUVImage, int)"><B>encodeYUV(YUVImage, int)</B></A> -
+Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html" title="class in org.libjpegturbo.turbojpeg">TJCompressor</A>
+<DD>Encode the uncompressed source image associated with this compressor
+ instance into a YUV planar image and store it in the given
+ <code>YUVImage</code> instance.
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html#encodeYUV(byte[], int)"><B>encodeYUV(byte[], int)</B></A> -
Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html" title="class in org.libjpegturbo.turbojpeg">TJCompressor</A>
-<DD>Encode the uncompressed source image associated with this compressor
- instance and output a YUV planar image to the given destination buffer.
-<DT><A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html#encodeYUV(int)"><B>encodeYUV(int)</B></A> -
+<DD><B>Deprecated.</B> <I>Use <A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html#encodeYUV(org.libjpegturbo.turbojpeg.YUVImage, int)"><CODE>TJCompressor.encodeYUV(YUVImage, int)</CODE></A> instead.</I>
+<DT><A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html#encodeYUV(int, int)"><B>encodeYUV(int, int)</B></A> -
Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html" title="class in org.libjpegturbo.turbojpeg">TJCompressor</A>
<DD>Encode the uncompressed source image associated with this compressor
- instance and return a buffer containing a YUV planar image.
+ instance into a YUV planar image and return a <code>YUVImage</code>
+ instance containing the encoded image.
+<DT><A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html#encodeYUV(int)"><B>encodeYUV(int)</B></A> -
+Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html" title="class in org.libjpegturbo.turbojpeg">TJCompressor</A>
+<DD><B>Deprecated.</B> <I>Use <A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html#encodeYUV(int, int)"><CODE>TJCompressor.encodeYUV(int, int)</CODE></A> instead.</I>
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html#encodeYUV(java.awt.image.BufferedImage, byte[], int)"><B>encodeYUV(BufferedImage, byte[], int)</B></A> -
Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html" title="class in org.libjpegturbo.turbojpeg">TJCompressor</A>
<DD><B>Deprecated.</B> <I>Use
@@ -262,10 +273,13 @@
Static method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg">TJ</A>
<DD>For the given pixel format, returns the number of bytes that the blue
component is offset from the start of the pixel.
+<DT><A HREF="./org/libjpegturbo/turbojpeg/YUVImage.html#getBuf()"><B>getBuf()</B></A> -
+Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/YUVImage.html" title="class in org.libjpegturbo.turbojpeg">YUVImage</A>
+<DD>Returns the YUV image buffer
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html#getColorspace()"><B>getColorspace()</B></A> -
Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html" title="class in org.libjpegturbo.turbojpeg">TJDecompressor</A>
-<DD>Returns the colorspace used in the JPEG image associated with this
- decompressor instance.
+<DD>Returns the colorspace used in the source image (JPEG or YUV) associated
+ with this decompressor instance.
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html#getCompressedSize()"><B>getCompressedSize()</B></A> -
Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html" title="class in org.libjpegturbo.turbojpeg">TJCompressor</A>
<DD>Returns the size of the image (in bytes) generated by the most recent
@@ -279,15 +293,17 @@
component is offset from the start of the pixel.
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html#getHeight()"><B>getHeight()</B></A> -
Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html" title="class in org.libjpegturbo.turbojpeg">TJDecompressor</A>
-<DD>Returns the height of the JPEG image associated with this decompressor
- instance.
+<DD>Returns the height of the source image (JPEG or YUV) associated with this
+ decompressor instance.
+<DT><A HREF="./org/libjpegturbo/turbojpeg/YUVImage.html#getHeight()"><B>getHeight()</B></A> -
+Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/YUVImage.html" title="class in org.libjpegturbo.turbojpeg">YUVImage</A>
+<DD>Returns the height of the YUV image.
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html#getJPEGBuf()"><B>getJPEGBuf()</B></A> -
Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html" title="class in org.libjpegturbo.turbojpeg">TJDecompressor</A>
-<DD>Returns the JPEG image buffer associated with this decompressor instance.
+<DD><B>Deprecated.</B> <I>Use <A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html#getSourceBuf()"><CODE>TJDecompressor.getSourceBuf()</CODE></A> instead.</I>
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html#getJPEGSize()"><B>getJPEGSize()</B></A> -
Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html" title="class in org.libjpegturbo.turbojpeg">TJDecompressor</A>
-<DD>Returns the size of the JPEG image (in bytes) associated with this
- decompressor instance.
+<DD><B>Deprecated.</B> <I>Use <A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html#getSourceSize()"><CODE>TJDecompressor.getSourceSize()</CODE></A> instead.</I>
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJ.html#getMCUHeight(int)"><B>getMCUHeight(int)</B></A> -
Static method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg">TJ</A>
<DD>Returns the MCU block height for the given level of chrominance
@@ -299,6 +315,9 @@
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJScalingFactor.html#getNum()"><B>getNum()</B></A> -
Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJScalingFactor.html" title="class in org.libjpegturbo.turbojpeg">TJScalingFactor</A>
<DD>Returns numerator
+<DT><A HREF="./org/libjpegturbo/turbojpeg/YUVImage.html#getPad()"><B>getPad()</B></A> -
+Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/YUVImage.html" title="class in org.libjpegturbo.turbojpeg">YUVImage</A>
+<DD>Returns the line padding used in the YUV image buffer.
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJ.html#getPixelSize(int)"><B>getPixelSize(int)</B></A> -
Static method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg">TJ</A>
<DD>Returns the pixel size (in bytes) for the given pixel format.
@@ -323,18 +342,35 @@
Static method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg">TJ</A>
<DD>Returns a list of fractional scaling factors that the JPEG decompressor in
this implementation of TurboJPEG supports.
+<DT><A HREF="./org/libjpegturbo/turbojpeg/YUVImage.html#getSize()"><B>getSize()</B></A> -
+Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/YUVImage.html" title="class in org.libjpegturbo.turbojpeg">YUVImage</A>
+<DD>Returns the size (in bytes) of the YUV image buffer
+<DT><A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html#getSourceBuf()"><B>getSourceBuf()</B></A> -
+Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html" title="class in org.libjpegturbo.turbojpeg">TJDecompressor</A>
+<DD>Returns the source image buffer associated with this decompressor
+ instance.
+<DT><A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html#getSourceSize()"><B>getSourceSize()</B></A> -
+Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html" title="class in org.libjpegturbo.turbojpeg">TJDecompressor</A>
+<DD>Returns the size of the source image (in bytes) associated with this
+ decompressor instance.
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html#getSubsamp()"><B>getSubsamp()</B></A> -
Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html" title="class in org.libjpegturbo.turbojpeg">TJDecompressor</A>
-<DD>Returns the level of chrominance subsampling used in the JPEG image
- associated with this decompressor instance.
+<DD>Returns the level of chrominance subsampling used in the source image
+ (JPEG or YUV) associated with this decompressor instance.
+<DT><A HREF="./org/libjpegturbo/turbojpeg/YUVImage.html#getSubsamp()"><B>getSubsamp()</B></A> -
+Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/YUVImage.html" title="class in org.libjpegturbo.turbojpeg">YUVImage</A>
+<DD>Returns the level of chrominance subsampling used in the YUV image.
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJTransformer.html#getTransformedSizes()"><B>getTransformedSizes()</B></A> -
Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJTransformer.html" title="class in org.libjpegturbo.turbojpeg">TJTransformer</A>
-<DD>Returns an array containing the sizes of the transformed JPEG images from
- the most recent call to <A HREF="./org/libjpegturbo/turbojpeg/TJTransformer.html#transform(byte[][], org.libjpegturbo.turbojpeg.TJTransform[], int)"><CODE>transform()</CODE></A>.
+<DD>Returns an array containing the sizes of the transformed JPEG images
+ generated by the most recent transform operation.
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html#getWidth()"><B>getWidth()</B></A> -
Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html" title="class in org.libjpegturbo.turbojpeg">TJDecompressor</A>
-<DD>Returns the width of the JPEG image associated with this decompressor
- instance.
+<DD>Returns the width of the source image (JPEG or YUV) associated with this
+ decompressor instance.
+<DT><A HREF="./org/libjpegturbo/turbojpeg/YUVImage.html#getWidth()"><B>getWidth()</B></A> -
+Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/YUVImage.html" title="class in org.libjpegturbo.turbojpeg">YUVImage</A>
+<DD>Returns the width of the YUV image.
</DL>
<HR>
<A NAME="_H_"><!-- --></A><H2>
@@ -343,6 +379,9 @@
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html#handle"><B>handle</B></A> -
Variable in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html" title="class in org.libjpegturbo.turbojpeg">TJDecompressor</A>
<DD>
+<DT><A HREF="./org/libjpegturbo/turbojpeg/YUVImage.html#handle"><B>handle</B></A> -
+Variable in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/YUVImage.html" title="class in org.libjpegturbo.turbojpeg">YUVImage</A>
+<DD>
</DL>
<HR>
<A NAME="_I_"><!-- --></A><H2>
@@ -363,18 +402,6 @@
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html#jpegBufSize"><B>jpegBufSize</B></A> -
Variable in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html" title="class in org.libjpegturbo.turbojpeg">TJDecompressor</A>
<DD>
-<DT><A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html#jpegColorspace"><B>jpegColorspace</B></A> -
-Variable in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html" title="class in org.libjpegturbo.turbojpeg">TJDecompressor</A>
-<DD>
-<DT><A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html#jpegHeight"><B>jpegHeight</B></A> -
-Variable in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html" title="class in org.libjpegturbo.turbojpeg">TJDecompressor</A>
-<DD>
-<DT><A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html#jpegSubsamp"><B>jpegSubsamp</B></A> -
-Variable in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html" title="class in org.libjpegturbo.turbojpeg">TJDecompressor</A>
-<DD>
-<DT><A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html#jpegWidth"><B>jpegWidth</B></A> -
-Variable in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html" title="class in org.libjpegturbo.turbojpeg">TJDecompressor</A>
-<DD>
</DL>
<HR>
<A NAME="_N_"><!-- --></A><H2>
@@ -513,32 +540,50 @@
<DD>Grayscale.
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html#setJPEGImage(byte[], int)"><B>setJPEGImage(byte[], int)</B></A> -
Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html" title="class in org.libjpegturbo.turbojpeg">TJDecompressor</A>
-<DD>Associate the JPEG image of length <code>imageSize</code> bytes stored in
- <code>jpegImage</code> with this decompressor instance.
+<DD><B>Deprecated.</B> <I>Use <A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html#setSourceImage(byte[], int)"><CODE>TJDecompressor.setSourceImage(byte[], int)</CODE></A> instead.</I>
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html#setJPEGQuality(int)"><B>setJPEGQuality(int)</B></A> -
Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html" title="class in org.libjpegturbo.turbojpeg">TJCompressor</A>
<DD>Set the JPEG image quality level for subsequent compress operations.
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html#setSourceImage(byte[], int, int, int, int, int, int)"><B>setSourceImage(byte[], int, int, int, int, int, int)</B></A> -
Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html" title="class in org.libjpegturbo.turbojpeg">TJCompressor</A>
-<DD>Associate an uncompressed source image with this compressor instance.
+<DD>Associate an uncompressed RGB, grayscale, or CMYK source image with this
+ compressor instance.
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html#setSourceImage(byte[], int, int, int, int)"><B>setSourceImage(byte[], int, int, int, int)</B></A> -
Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html" title="class in org.libjpegturbo.turbojpeg">TJCompressor</A>
<DD><B>Deprecated.</B> <I>Use
<A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html#setSourceImage(byte[], int, int, int, int, int, int)"><CODE>TJCompressor.setSourceImage(byte[], int, int, int, int, int, int)</CODE></A> instead.</I>
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html#setSourceImage(java.awt.image.BufferedImage, int, int, int, int)"><B>setSourceImage(BufferedImage, int, int, int, int)</B></A> -
Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html" title="class in org.libjpegturbo.turbojpeg">TJCompressor</A>
-<DD>Associate an uncompressed source image with this compressor instance.
-<DT><A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html#setSourceImageYUV(byte[], int, int, int)"><B>setSourceImageYUV(byte[], int, int, int)</B></A> -
+<DD>Associate an uncompressed RGB or grayscale source image with this
+ compressor instance.
+<DT><A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html#setSourceImage(org.libjpegturbo.turbojpeg.YUVImage)"><B>setSourceImage(YUVImage)</B></A> -
Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html" title="class in org.libjpegturbo.turbojpeg">TJCompressor</A>
<DD>Associate an uncompressed YUV planar source image with this compressor
instance.
+<DT><A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html#setSourceImage(byte[], int)"><B>setSourceImage(byte[], int)</B></A> -
+Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html" title="class in org.libjpegturbo.turbojpeg">TJDecompressor</A>
+<DD>Associate the JPEG image of length <code>imageSize</code> bytes stored in
+ <code>srcImage</code> with this decompressor instance.
+<DT><A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html#setSourceImage(org.libjpegturbo.turbojpeg.YUVImage)"><B>setSourceImage(YUVImage)</B></A> -
+Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html" title="class in org.libjpegturbo.turbojpeg">TJDecompressor</A>
+<DD>Associate the specified YUV planar source image with this decompressor
+ instance.
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html#setSubsamp(int)"><B>setSubsamp(int)</B></A> -
Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html" title="class in org.libjpegturbo.turbojpeg">TJCompressor</A>
<DD>Set the level of chrominance subsampling for subsequent compress/encode
operations.
-<DT><A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html#setYUVPad(int)"><B>setYUVPad(int)</B></A> -
-Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html" title="class in org.libjpegturbo.turbojpeg">TJCompressor</A>
-<DD>Set the plane padding for subsequent YUV encode operations.
+<DT><A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html#srcColorspace"><B>srcColorspace</B></A> -
+Variable in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html" title="class in org.libjpegturbo.turbojpeg">TJDecompressor</A>
+<DD>
+<DT><A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html#srcHeight"><B>srcHeight</B></A> -
+Variable in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html" title="class in org.libjpegturbo.turbojpeg">TJDecompressor</A>
+<DD>
+<DT><A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html#srcSubsamp"><B>srcSubsamp</B></A> -
+Variable in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html" title="class in org.libjpegturbo.turbojpeg">TJDecompressor</A>
+<DD>
+<DT><A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html#srcWidth"><B>srcWidth</B></A> -
+Variable in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html" title="class in org.libjpegturbo.turbojpeg">TJDecompressor</A>
+<DD>
</DL>
<HR>
<A NAME="_T_"><!-- --></A><H2>
@@ -550,32 +595,37 @@
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html" title="class in org.libjpegturbo.turbojpeg"><B>TJCompressor</B></A> - Class in <A HREF="./org/libjpegturbo/turbojpeg/package-summary.html">org.libjpegturbo.turbojpeg</A><DD>TurboJPEG compressor<DT><A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html#TJCompressor()"><B>TJCompressor()</B></A> -
Constructor for class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html" title="class in org.libjpegturbo.turbojpeg">TJCompressor</A>
<DD>Create a TurboJPEG compressor instance.
+<DT><A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html#TJCompressor(byte[], int, int, int, int, int, int)"><B>TJCompressor(byte[], int, int, int, int, int, int)</B></A> -
+Constructor for class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html" title="class in org.libjpegturbo.turbojpeg">TJCompressor</A>
+<DD>Create a TurboJPEG compressor instance and associate the uncompressed
+ source image stored in <code>srcImage</code> with the newly created
+ instance.
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html#TJCompressor(byte[], int, int, int, int)"><B>TJCompressor(byte[], int, int, int, int)</B></A> -
Constructor for class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html" title="class in org.libjpegturbo.turbojpeg">TJCompressor</A>
<DD><B>Deprecated.</B> <I>Use
<A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html#TJCompressor(byte[], int, int, int, int, int, int)"><CODE>TJCompressor.TJCompressor(byte[], int, int, int, int, int, int)</CODE></A> instead.</I>
-<DT><A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html#TJCompressor(byte[], int, int, int, int, int, int)"><B>TJCompressor(byte[], int, int, int, int, int, int)</B></A> -
-Constructor for class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html" title="class in org.libjpegturbo.turbojpeg">TJCompressor</A>
-<DD>Create a TurboJPEG compressor instance and associate the uncompressed
- source image stored in <code>srcImage</code> with the newly-created
- instance.
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html#TJCompressor(java.awt.image.BufferedImage, int, int, int, int)"><B>TJCompressor(BufferedImage, int, int, int, int)</B></A> -
Constructor for class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJCompressor.html" title="class in org.libjpegturbo.turbojpeg">TJCompressor</A>
<DD>Create a TurboJPEG compressor instance and associate the uncompressed
- source image stored in <code>srcImage</code> with the newly-created
+ source image stored in <code>srcImage</code> with the newly created
instance.
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJCustomFilter.html" title="interface in org.libjpegturbo.turbojpeg"><B>TJCustomFilter</B></A> - Interface in <A HREF="./org/libjpegturbo/turbojpeg/package-summary.html">org.libjpegturbo.turbojpeg</A><DD>Custom filter callback interface<DT><A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html" title="class in org.libjpegturbo.turbojpeg"><B>TJDecompressor</B></A> - Class in <A HREF="./org/libjpegturbo/turbojpeg/package-summary.html">org.libjpegturbo.turbojpeg</A><DD>TurboJPEG decompressor<DT><A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html#TJDecompressor()"><B>TJDecompressor()</B></A> -
Constructor for class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html" title="class in org.libjpegturbo.turbojpeg">TJDecompressor</A>
<DD>Create a TurboJPEG decompresssor instance.
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html#TJDecompressor(byte[])"><B>TJDecompressor(byte[])</B></A> -
Constructor for class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html" title="class in org.libjpegturbo.turbojpeg">TJDecompressor</A>
-<DD>Create a TurboJPEG decompressor instance and associate the JPEG image
- stored in <code>jpegImage</code> with the newly-created instance.
+<DD>Create a TurboJPEG decompressor instance and associate the JPEG source
+ image stored in <code>jpegImage</code> with the newly created instance.
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html#TJDecompressor(byte[], int)"><B>TJDecompressor(byte[], int)</B></A> -
Constructor for class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html" title="class in org.libjpegturbo.turbojpeg">TJDecompressor</A>
-<DD>Create a TurboJPEG decompressor instance and associate the JPEG image
- of length <code>imageSize</code> bytes stored in <code>jpegImage</code>
- with the newly-created instance.
+<DD>Create a TurboJPEG decompressor instance and associate the JPEG source
+ image of length <code>imageSize</code> bytes stored in
+ <code>jpegImage</code> with the newly created instance.
+<DT><A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html#TJDecompressor(org.libjpegturbo.turbojpeg.YUVImage)"><B>TJDecompressor(YUVImage)</B></A> -
+Constructor for class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html" title="class in org.libjpegturbo.turbojpeg">TJDecompressor</A>
+<DD>Create a TurboJPEG decompressor instance and associate the YUV planar
+ source image stored in <code>yuvImage</code> with the newly created
+ instance.
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJScalingFactor.html" title="class in org.libjpegturbo.turbojpeg"><B>TJScalingFactor</B></A> - Class in <A HREF="./org/libjpegturbo/turbojpeg/package-summary.html">org.libjpegturbo.turbojpeg</A><DD>Fractional scaling factor<DT><A HREF="./org/libjpegturbo/turbojpeg/TJScalingFactor.html#TJScalingFactor(int, int)"><B>TJScalingFactor(int, int)</B></A> -
Constructor for class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJScalingFactor.html" title="class in org.libjpegturbo.turbojpeg">TJScalingFactor</A>
<DD>
@@ -594,12 +644,12 @@
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJTransformer.html#TJTransformer(byte[])"><B>TJTransformer(byte[])</B></A> -
Constructor for class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJTransformer.html" title="class in org.libjpegturbo.turbojpeg">TJTransformer</A>
<DD>Create a TurboJPEG lossless transformer instance and associate the JPEG
- image stored in <code>jpegImage</code> with the newly-created instance.
+ image stored in <code>jpegImage</code> with the newly created instance.
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJTransformer.html#TJTransformer(byte[], int)"><B>TJTransformer(byte[], int)</B></A> -
Constructor for class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJTransformer.html" title="class in org.libjpegturbo.turbojpeg">TJTransformer</A>
<DD>Create a TurboJPEG lossless transformer instance and associate the JPEG
image of length <code>imageSize</code> bytes stored in
- <code>jpegImage</code> with the newly-created instance.
+ <code>jpegImage</code> with the newly created instance.
<DT><A HREF="./org/libjpegturbo/turbojpeg/TJTransformer.html#transform(byte[][], org.libjpegturbo.turbojpeg.TJTransform[], int)"><B>transform(byte[][], TJTransform[], int)</B></A> -
Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJTransformer.html" title="class in org.libjpegturbo.turbojpeg">TJTransformer</A>
<DD>Losslessly transform the JPEG image associated with this transformer
@@ -612,7 +662,38 @@
which has a transformed JPEG image associated with it.
</DL>
<HR>
-<A HREF="#_B_">B</A> <A HREF="#_C_">C</A> <A HREF="#_D_">D</A> <A HREF="#_E_">E</A> <A HREF="#_F_">F</A> <A HREF="#_G_">G</A> <A HREF="#_H_">H</A> <A HREF="#_I_">I</A> <A HREF="#_J_">J</A> <A HREF="#_N_">N</A> <A HREF="#_O_">O</A> <A HREF="#_P_">P</A> <A HREF="#_S_">S</A> <A HREF="#_T_">T</A>
+<A NAME="_Y_"><!-- --></A><H2>
+<B>Y</B></H2>
+<DL>
+<DT><A HREF="./org/libjpegturbo/turbojpeg/YUVImage.html#yuvBuf"><B>yuvBuf</B></A> -
+Variable in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/YUVImage.html" title="class in org.libjpegturbo.turbojpeg">YUVImage</A>
+<DD>
+<DT><A HREF="./org/libjpegturbo/turbojpeg/YUVImage.html#yuvHeight"><B>yuvHeight</B></A> -
+Variable in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/YUVImage.html" title="class in org.libjpegturbo.turbojpeg">YUVImage</A>
+<DD>
+<DT><A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html#yuvImage"><B>yuvImage</B></A> -
+Variable in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html" title="class in org.libjpegturbo.turbojpeg">TJDecompressor</A>
+<DD>
+<DT><A HREF="./org/libjpegturbo/turbojpeg/YUVImage.html" title="class in org.libjpegturbo.turbojpeg"><B>YUVImage</B></A> - Class in <A HREF="./org/libjpegturbo/turbojpeg/package-summary.html">org.libjpegturbo.turbojpeg</A><DD>This class encapsulates a YUV planar image buffer and the metadata
+ associated with it.<DT><A HREF="./org/libjpegturbo/turbojpeg/YUVImage.html#YUVImage(int, int, int, int)"><B>YUVImage(int, int, int, int)</B></A> -
+Constructor for class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/YUVImage.html" title="class in org.libjpegturbo.turbojpeg">YUVImage</A>
+<DD>Create a <code>YUVImage</code> instance with a new image buffer.
+<DT><A HREF="./org/libjpegturbo/turbojpeg/YUVImage.html#YUVImage(byte[], int, int, int, int)"><B>YUVImage(byte[], int, int, int, int)</B></A> -
+Constructor for class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/YUVImage.html" title="class in org.libjpegturbo.turbojpeg">YUVImage</A>
+<DD>Create a <code>YUVImage</code> instance from an existing YUV planar image
+ buffer.
+<DT><A HREF="./org/libjpegturbo/turbojpeg/YUVImage.html#yuvPad"><B>yuvPad</B></A> -
+Variable in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/YUVImage.html" title="class in org.libjpegturbo.turbojpeg">YUVImage</A>
+<DD>
+<DT><A HREF="./org/libjpegturbo/turbojpeg/YUVImage.html#yuvSubsamp"><B>yuvSubsamp</B></A> -
+Variable in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/YUVImage.html" title="class in org.libjpegturbo.turbojpeg">YUVImage</A>
+<DD>
+<DT><A HREF="./org/libjpegturbo/turbojpeg/YUVImage.html#yuvWidth"><B>yuvWidth</B></A> -
+Variable in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/YUVImage.html" title="class in org.libjpegturbo.turbojpeg">YUVImage</A>
+<DD>
+</DL>
+<HR>
+<A HREF="#_B_">B</A> <A HREF="#_C_">C</A> <A HREF="#_D_">D</A> <A HREF="#_E_">E</A> <A HREF="#_F_">F</A> <A HREF="#_G_">G</A> <A HREF="#_H_">H</A> <A HREF="#_I_">I</A> <A HREF="#_J_">J</A> <A HREF="#_N_">N</A> <A HREF="#_O_">O</A> <A HREF="#_P_">P</A> <A HREF="#_S_">S</A> <A HREF="#_T_">T</A> <A HREF="#_Y_">Y</A>
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<A NAME="navbar_bottom"><!-- --></A>
diff --git a/java/doc/org/libjpegturbo/turbojpeg/TJCompressor.html b/java/doc/org/libjpegturbo/turbojpeg/TJCompressor.html
index b6452f3..3c24544 100644
--- a/java/doc/org/libjpegturbo/turbojpeg/TJCompressor.html
+++ b/java/doc/org/libjpegturbo/turbojpeg/TJCompressor.html
@@ -128,7 +128,7 @@
<BR>
Create a TurboJPEG compressor instance and associate the uncompressed
- source image stored in <code>srcImage</code> with the newly-created
+ source image stored in <code>srcImage</code> with the newly created
instance.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
@@ -153,7 +153,7 @@
<BR>
Create a TurboJPEG compressor instance and associate the uncompressed
- source image stored in <code>srcImage</code> with the newly-created
+ source image stored in <code>srcImage</code> with the newly created
instance.</TD>
</TR>
</TABLE>
@@ -246,8 +246,7 @@
int flags)</CODE>
<BR>
- Encode the uncompressed source image associated with this compressor
- instance and output a YUV planar image to the given destination buffer.</TD>
+ <B>Deprecated.</B> <I>Use <A HREF="../../../org/libjpegturbo/turbojpeg/TJCompressor.html#encodeYUV(org.libjpegturbo.turbojpeg.YUVImage, int)"><CODE>encodeYUV(YUVImage, int)</CODE></A> instead.</I></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -255,8 +254,29 @@
<TD><CODE><B><A HREF="../../../org/libjpegturbo/turbojpeg/TJCompressor.html#encodeYUV(int)">encodeYUV</A></B>(int flags)</CODE>
<BR>
+ <B>Deprecated.</B> <I>Use <A HREF="../../../org/libjpegturbo/turbojpeg/TJCompressor.html#encodeYUV(int, int)"><CODE>encodeYUV(int, int)</CODE></A> instead.</I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> <A HREF="../../../org/libjpegturbo/turbojpeg/YUVImage.html" title="class in org.libjpegturbo.turbojpeg">YUVImage</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../org/libjpegturbo/turbojpeg/TJCompressor.html#encodeYUV(int, int)">encodeYUV</A></B>(int pad,
+ int flags)</CODE>
+
+<BR>
Encode the uncompressed source image associated with this compressor
- instance and return a buffer containing a YUV planar image.</TD>
+ instance into a YUV planar image and return a <code>YUVImage</code>
+ instance containing the encoded image.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../org/libjpegturbo/turbojpeg/TJCompressor.html#encodeYUV(org.libjpegturbo.turbojpeg.YUVImage, int)">encodeYUV</A></B>(<A HREF="../../../org/libjpegturbo/turbojpeg/YUVImage.html" title="class in org.libjpegturbo.turbojpeg">YUVImage</A> dstImage,
+ int flags)</CODE>
+
+<BR>
+ Encode the uncompressed source image associated with this compressor
+ instance into a YUV planar image and store it in the given
+ <code>YUVImage</code> instance.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -293,7 +313,8 @@
int height)</CODE>
<BR>
- Associate an uncompressed source image with this compressor instance.</TD>
+ Associate an uncompressed RGB or grayscale source image with this
+ compressor instance.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -320,15 +341,13 @@
int pixelFormat)</CODE>
<BR>
- Associate an uncompressed source image with this compressor instance.</TD>
+ Associate an uncompressed RGB, grayscale, or CMYK source image with this
+ compressor instance.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE> void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../org/libjpegturbo/turbojpeg/TJCompressor.html#setSourceImageYUV(byte[], int, int, int)">setSourceImageYUV</A></B>(byte[] srcImage,
- int width,
- int pad,
- int height)</CODE>
+<TD><CODE><B><A HREF="../../../org/libjpegturbo/turbojpeg/TJCompressor.html#setSourceImage(org.libjpegturbo.turbojpeg.YUVImage)">setSourceImage</A></B>(<A HREF="../../../org/libjpegturbo/turbojpeg/YUVImage.html" title="class in org.libjpegturbo.turbojpeg">YUVImage</A> srcImage)</CODE>
<BR>
Associate an uncompressed YUV planar source image with this compressor
@@ -343,14 +362,6 @@
Set the level of chrominance subsampling for subsequent compress/encode
operations.</TD>
</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE> void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../org/libjpegturbo/turbojpeg/TJCompressor.html#setYUVPad(int)">setYUVPad</A></B>(int pad)</CODE>
-
-<BR>
- Set the plane padding for subsequent YUV encode operations.</TD>
-</TR>
</TABLE>
<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
@@ -389,6 +400,30 @@
</DL>
<HR>
+<A NAME="TJCompressor(byte[], int, int, int, int, int, int)"><!-- --></A><H3>
+TJCompressor</H3>
+<PRE>
+public <B>TJCompressor</B>(byte[] srcImage,
+ int x,
+ int y,
+ int width,
+ int pitch,
+ int height,
+ int pixelFormat)
+ throws java.lang.Exception</PRE>
+<DL>
+<DD>Create a TurboJPEG compressor instance and associate the uncompressed
+ source image stored in <code>srcImage</code> with the newly created
+ instance.
+<P>
+<DL>
+<DT><B>Parameters:</B><DD><CODE>srcImage</CODE> - see <A HREF="../../../org/libjpegturbo/turbojpeg/TJCompressor.html#setSourceImage(byte[], int, int, int, int, int, int)"><CODE>setSourceImage(byte[], int, int, int, int, int, int)</CODE></A> for description<DD><CODE>x</CODE> - see <A HREF="../../../org/libjpegturbo/turbojpeg/TJCompressor.html#setSourceImage(byte[], int, int, int, int, int, int)"><CODE>setSourceImage(byte[], int, int, int, int, int, int)</CODE></A> for description<DD><CODE>y</CODE> - see <A HREF="../../../org/libjpegturbo/turbojpeg/TJCompressor.html#setSourceImage(byte[], int, int, int, int, int, int)"><CODE>setSourceImage(byte[], int, int, int, int, int, int)</CODE></A> for description<DD><CODE>width</CODE> - see <A HREF="../../../org/libjpegturbo/turbojpeg/TJCompressor.html#setSourceImage(byte[], int, int, int, int, int, int)"><CODE>setSourceImage(byte[], int, int, int, int, int, int)</CODE></A> for description<DD><CODE>pitch</CODE> - see <A HREF="../../../org/libjpegturbo/turbojpeg/TJCompressor.html#setSourceImage(byte[], int, int, int, int, int, int)"><CODE>setSourceImage(byte[], int, int, int, int, int, int)</CODE></A> for description<DD><CODE>height</CODE> - see <A HREF="../../../org/libjpegturbo/turbojpeg/TJCompressor.html#setSourceImage(byte[], int, int, int, int, int, int)"><CODE>setSourceImage(byte[], int, int, int, int, int, int)</CODE></A> for description<DD><CODE>pixelFormat</CODE> - pixel format of the source image (one of
+ <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#PF_RGB"><CODE>TJ.PF_*</CODE></A>)
+<DT><B>Throws:</B>
+<DD><CODE>java.lang.Exception</CODE></DL>
+</DL>
+<HR>
+
<A NAME="TJCompressor(byte[], int, int, int, int)"><!-- --></A><H3>
TJCompressor</H3>
<PRE>
@@ -410,30 +445,6 @@
</DL>
<HR>
-<A NAME="TJCompressor(byte[], int, int, int, int, int, int)"><!-- --></A><H3>
-TJCompressor</H3>
-<PRE>
-public <B>TJCompressor</B>(byte[] srcImage,
- int x,
- int y,
- int width,
- int pitch,
- int height,
- int pixelFormat)
- throws java.lang.Exception</PRE>
-<DL>
-<DD>Create a TurboJPEG compressor instance and associate the uncompressed
- source image stored in <code>srcImage</code> with the newly-created
- instance.
-<P>
-<DL>
-<DT><B>Parameters:</B><DD><CODE>srcImage</CODE> - see <A HREF="../../../org/libjpegturbo/turbojpeg/TJCompressor.html#setSourceImage(byte[], int, int, int, int, int, int)"><CODE>setSourceImage(byte[], int, int, int, int, int, int)</CODE></A> for description<DD><CODE>x</CODE> - see <A HREF="../../../org/libjpegturbo/turbojpeg/TJCompressor.html#setSourceImage(byte[], int, int, int, int, int, int)"><CODE>setSourceImage(byte[], int, int, int, int, int, int)</CODE></A> for description<DD><CODE>y</CODE> - see <A HREF="../../../org/libjpegturbo/turbojpeg/TJCompressor.html#setSourceImage(byte[], int, int, int, int, int, int)"><CODE>setSourceImage(byte[], int, int, int, int, int, int)</CODE></A> for description<DD><CODE>width</CODE> - see <A HREF="../../../org/libjpegturbo/turbojpeg/TJCompressor.html#setSourceImage(byte[], int, int, int, int, int, int)"><CODE>setSourceImage(byte[], int, int, int, int, int, int)</CODE></A> for description<DD><CODE>pitch</CODE> - see <A HREF="../../../org/libjpegturbo/turbojpeg/TJCompressor.html#setSourceImage(byte[], int, int, int, int, int, int)"><CODE>setSourceImage(byte[], int, int, int, int, int, int)</CODE></A> for description<DD><CODE>height</CODE> - see <A HREF="../../../org/libjpegturbo/turbojpeg/TJCompressor.html#setSourceImage(byte[], int, int, int, int, int, int)"><CODE>setSourceImage(byte[], int, int, int, int, int, int)</CODE></A> for description<DD><CODE>pixelFormat</CODE> - pixel format of the source image (one of
- <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJ.PF_*</CODE></A>)
-<DT><B>Throws:</B>
-<DD><CODE>java.lang.Exception</CODE></DL>
-</DL>
-<HR>
-
<A NAME="TJCompressor(java.awt.image.BufferedImage, int, int, int, int)"><!-- --></A><H3>
TJCompressor</H3>
<PRE>
@@ -445,7 +456,7 @@
throws java.lang.Exception</PRE>
<DL>
<DD>Create a TurboJPEG compressor instance and associate the uncompressed
- source image stored in <code>srcImage</code> with the newly-created
+ source image stored in <code>srcImage</code> with the newly created
instance.
<P>
<DL>
@@ -481,23 +492,24 @@
int pixelFormat)
throws java.lang.Exception</PRE>
<DL>
-<DD>Associate an uncompressed source image with this compressor instance.
+<DD>Associate an uncompressed RGB, grayscale, or CMYK source image with this
+ compressor instance.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>srcImage</CODE> - image buffer containing RGB, grayscale, or CMYK pixels to
- be compressed<DD><CODE>x</CODE> - x offset (in pixels) of the region from which the JPEG image
- should be compressed, relative to the start of <code>srcImage</code>.<DD><CODE>y</CODE> - y offset (in pixels) of the region from which the JPEG image
- should be compressed, relative to the start of <code>srcImage</code>.<DD><CODE>width</CODE> - width (in pixels) of the region in the source image from
- which the JPEG image should be compressed.<DD><CODE>pitch</CODE> - bytes per line of the source image. Normally, this should be
+ be compressed or encoded<DD><CODE>x</CODE> - x offset (in pixels) of the region in the source image from which
+ the JPEG or YUV image should be compressed/encoded<DD><CODE>y</CODE> - y offset (in pixels) of the region in the source image from which
+ the JPEG or YUV image should be compressed/encoded<DD><CODE>width</CODE> - width (in pixels) of the region in the source image from
+ which the JPEG or YUV image should be compressed/encoded<DD><CODE>pitch</CODE> - bytes per line of the source image. Normally, this should be
<code>width * TJ.pixelSize(pixelFormat)</code> if the source image is
unpadded, but you can use this parameter to, for instance, specify that
the scanlines in the source image are padded to a 4-byte boundary or to
- compress a JPEG image from a region of a larger source image. You can
- also be clever and use this parameter to skip lines, etc. Setting this
- parameter to 0 is the equivalent of setting it to <code>width *
- TJ.pixelSize(pixelFormat)</code>.<DD><CODE>height</CODE> - height (in pixels) of the region in the source image from
- which the JPEG image should be compressed.<DD><CODE>pixelFormat</CODE> - pixel format of the source image (one of
- <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJ.PF_*</CODE></A>)
+ compress/encode a JPEG or YUV image from a region of a larger source
+ image. You can also be clever and use this parameter to skip lines, etc.
+ Setting this parameter to 0 is the equivalent of setting it to
+ <code>width * TJ.pixelSize(pixelFormat)</code>.<DD><CODE>height</CODE> - height (in pixels) of the region in the source image from
+ which the JPEG or YUV image should be compressed/encoded<DD><CODE>pixelFormat</CODE> - pixel format of the source image (one of
+ <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#PF_RGB"><CODE>TJ.PF_*</CODE></A>)
<DT><B>Throws:</B>
<DD><CODE>java.lang.Exception</CODE></DL>
</DD>
@@ -536,47 +548,35 @@
int height)
throws java.lang.Exception</PRE>
<DL>
-<DD>Associate an uncompressed source image with this compressor instance.
+<DD>Associate an uncompressed RGB or grayscale source image with this
+ compressor instance.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>srcImage</CODE> - a <code>BufferedImage</code> instance containing RGB or
- grayscale pixels to be compressed<DD><CODE>x</CODE> - x offset (in pixels) of the region in the source image from which
- the JPEG image should be compressed<DD><CODE>y</CODE> - y offset (in pixels) of the region in the source image from which
- the JPEG image should be compressed<DD><CODE>width</CODE> - width (in pixels) of the region in the source image from
- which the JPEG image should be compressed (0 = compress the whole image)<DD><CODE>height</CODE> - height (in pixels) of the region in the source image from
- which the JPEG image should be compressed (0 = compress the whole image)
+ grayscale pixels to be compressed or encoded<DD><CODE>x</CODE> - x offset (in pixels) of the region in the source image from which
+ the JPEG or YUV image should be compressed/encoded<DD><CODE>y</CODE> - y offset (in pixels) of the region in the source image from which
+ the JPEG or YUV image should be compressed/encoded<DD><CODE>width</CODE> - width (in pixels) of the region in the source image from
+ which the JPEG or YUV image should be compressed/encoded (0 = use the
+ width of the source image)<DD><CODE>height</CODE> - height (in pixels) of the region in the source image from
+ which the JPEG or YUV image should be compressed/encoded (0 = use the
+ height of the source image)
<DT><B>Throws:</B>
<DD><CODE>java.lang.Exception</CODE></DL>
</DD>
</DL>
<HR>
-<A NAME="setSourceImageYUV(byte[], int, int, int)"><!-- --></A><H3>
-setSourceImageYUV</H3>
+<A NAME="setSourceImage(org.libjpegturbo.turbojpeg.YUVImage)"><!-- --></A><H3>
+setSourceImage</H3>
<PRE>
-public void <B>setSourceImageYUV</B>(byte[] srcImage,
- int width,
- int pad,
- int height)
- throws java.lang.Exception</PRE>
+public void <B>setSourceImage</B>(<A HREF="../../../org/libjpegturbo/turbojpeg/YUVImage.html" title="class in org.libjpegturbo.turbojpeg">YUVImage</A> srcImage)
+ throws java.lang.Exception</PRE>
<DL>
<DD>Associate an uncompressed YUV planar source image with this compressor
instance.
<P>
<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>srcImage</CODE> - image buffer containing a YUV planar image to be
- compressed. The Y, U (Cb), and V (Cr) image planes should be stored
- sequentially in the buffer, and the size of each plane is determined by
- the specified width, height, and padding, as well as the level of
- chrominance subsampling (specified using <A HREF="../../../org/libjpegturbo/turbojpeg/TJCompressor.html#setSubsamp(int)"><CODE>setSubsamp(int)</CODE></A>.) If the
- chrominance components are subsampled along the horizontal dimension, then
- the width of the luminance plane should be padded to the nearest multiple
- of 2 (same goes for the height of the luminance plane, if the chrominance
- components are subsampled along the vertical dimension.) This is
- irrespective of any additional padding specified in the <code>pad</code>
- parameter.<DD><CODE>width</CODE> - width (in pixels) of the source image<DD><CODE>pad</CODE> - the line padding used in the source image. For instance, if
- each line in each plane of the YUV image is padded to the nearest multiple
- of 4 bytes, then <code>pad</code> should be set to 4.<DD><CODE>height</CODE> - height (in pixels) of the source image
+<DT><B>Parameters:</B><DD><CODE>srcImage</CODE> - YUV planar image to be compressed
<DT><B>Throws:</B>
<DD><CODE>java.lang.Exception</CODE></DL>
</DD>
@@ -598,13 +598,17 @@
sensitive to small changes in brightness than to small changes in color.)
This is called "chrominance subsampling".
<p>
- NOTE: When compressing a YUV planar image into a JPEG image, this method
- also specifies the level of chrominance subsampling used in the source
- image.
+ NOTE: This method has no effect when compressing a JPEG image from a YUV
+ planar source. In that case, the level of chrominance subsampling in
+ the JPEG image is determined by the source. Further, this method has no
+ effect when encoding to a pre-allocated <A HREF="../../../org/libjpegturbo/turbojpeg/YUVImage.html" title="class in org.libjpegturbo.turbojpeg"><CODE>YUVImage</CODE></A> instance. In
+ that case, the level of chrominance subsampling is determined by the
+ destination.
<P>
<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>newSubsamp</CODE> - the new level of chrominance subsampling (one of
- <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJ.SAMP_*</CODE></A>)
+<DT><B>Parameters:</B><DD><CODE>newSubsamp</CODE> - the level of chrominance subsampling to use in
+ subsequent compress/encode oeprations (one of
+ <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#SAMP_444"><CODE>TJ.SAMP_*</CODE></A>)
<DT><B>Throws:</B>
<DD><CODE>java.lang.Exception</CODE></DL>
</DD>
@@ -641,7 +645,9 @@
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>dstBuf</CODE> - buffer that will receive the JPEG image. Use
<A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#bufSize(int, int, int)"><CODE>TJ.bufSize(int, int, int)</CODE></A> to determine the maximum size for this buffer based on
- the image width, height, and level of chrominance subsampling.<DD><CODE>flags</CODE> - the bitwise OR of one or more of <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJ.FLAG_*</CODE></A>
+ the source image's width and height and the desired level of chrominance
+ subsampling.<DD><CODE>flags</CODE> - the bitwise OR of one or more of
+ <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#FLAG_BOTTOMUP"><CODE>TJ.FLAG_*</CODE></A>
<DT><B>Throws:</B>
<DD><CODE>java.lang.Exception</CODE></DL>
</DD>
@@ -658,7 +664,8 @@
instance and return a buffer containing a JPEG image.
<P>
<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>flags</CODE> - the bitwise OR of one or more of <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJ.FLAG_*</CODE></A>
+<DT><B>Parameters:</B><DD><CODE>flags</CODE> - the bitwise OR of one or more of
+ <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#FLAG_BOTTOMUP"><CODE>TJ.FLAG_*</CODE></A>
<DT><B>Returns:</B><DD>a buffer containing a JPEG image. The length of this buffer will
not be equal to the size of the JPEG image. Use <A HREF="../../../org/libjpegturbo/turbojpeg/TJCompressor.html#getCompressedSize()"><CODE>getCompressedSize()</CODE></A> to obtain the size of the JPEG image.
<DT><B>Throws:</B>
@@ -708,19 +715,24 @@
</DL>
<HR>
-<A NAME="setYUVPad(int)"><!-- --></A><H3>
-setYUVPad</H3>
+<A NAME="encodeYUV(org.libjpegturbo.turbojpeg.YUVImage, int)"><!-- --></A><H3>
+encodeYUV</H3>
<PRE>
-public void <B>setYUVPad</B>(int pad)
+public void <B>encodeYUV</B>(<A HREF="../../../org/libjpegturbo/turbojpeg/YUVImage.html" title="class in org.libjpegturbo.turbojpeg">YUVImage</A> dstImage,
+ int flags)
throws java.lang.Exception</PRE>
<DL>
-<DD>Set the plane padding for subsequent YUV encode operations.
+<DD>Encode the uncompressed source image associated with this compressor
+ instance into a YUV planar image and store it in the given
+ <code>YUVImage</code> instance. This method uses the accelerated color
+ conversion routines in TurboJPEG's underlying codec but does not execute
+ any of the other steps in the JPEG compression process. Encoding
+ CMYK source images to YUV is not supported.
<P>
<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>pad</CODE> - the width of each line in each plane of the YUV image will be
- padded to the nearest multiple of this number of bytes (must be a
- power of 2.) The default padding is 4 bytes, which generates
- images suitable for direct video display.
+<DT><B>Parameters:</B><DD><CODE>dstImage</CODE> - <A HREF="../../../org/libjpegturbo/turbojpeg/YUVImage.html" title="class in org.libjpegturbo.turbojpeg"><CODE>YUVImage</CODE></A> instance that will receive the YUV planar
+ image<DD><CODE>flags</CODE> - the bitwise OR of one or more of
+ <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#FLAG_BOTTOMUP"><CODE>TJ.FLAG_*</CODE></A>
<DT><B>Throws:</B>
<DD><CODE>java.lang.Exception</CODE></DL>
</DD>
@@ -730,31 +742,41 @@
<A NAME="encodeYUV(byte[], int)"><!-- --></A><H3>
encodeYUV</H3>
<PRE>
-public void <B>encodeYUV</B>(byte[] dstBuf,
- int flags)
+<FONT SIZE="-1">@Deprecated
+</FONT>public void <B>encodeYUV</B>(byte[] dstBuf,
+ int flags)
throws java.lang.Exception</PRE>
<DL>
-<DD>Encode the uncompressed source image associated with this compressor
- instance and output a YUV planar image to the given destination buffer.
- This method uses the accelerated color conversion routines in TurboJPEG's
- underlying codec but does not execute any of the other steps in the JPEG
- compression process. The Y, U (Cb), and V (Cr) image planes are stored
- sequentially into the destination buffer, and the size of each plane is
- determined by the width and height of the source image, as well as the
- specified padding and level of chrominance subsampling. If the
- chrominance components are subsampled along the horizontal dimension, then
- the width of the luminance plane is padded to the nearest multiple of 2 in
- the output image (same goes for the height of the luminance plane, if the
- chrominance components are subsampled along the vertical dimension.)
- <p>
- NOTE: Technically, the JPEG format uses the YCbCr colorspace, but per the
- convention of the digital video community, the TurboJPEG API uses "YUV" to
- refer to an image format consisting of Y, Cb, and Cr image planes.
+<DD><B>Deprecated.</B> <I>Use <A HREF="../../../org/libjpegturbo/turbojpeg/TJCompressor.html#encodeYUV(org.libjpegturbo.turbojpeg.YUVImage, int)"><CODE>encodeYUV(YUVImage, int)</CODE></A> instead.</I>
<P>
<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>dstBuf</CODE> - buffer that will receive the YUV planar image. Use
- <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#bufSizeYUV(int, int, int, int)"><CODE>TJ.bufSizeYUV(int, int, int, int)</CODE></A> to determine the appropriate size for this buffer
- based on the image width, height, and level of chrominance subsampling.<DD><CODE>flags</CODE> - the bitwise OR of one or more of <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJ.FLAG_*</CODE></A>
+
+<DT><B>Throws:</B>
+<DD><CODE>java.lang.Exception</CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="encodeYUV(int, int)"><!-- --></A><H3>
+encodeYUV</H3>
+<PRE>
+public <A HREF="../../../org/libjpegturbo/turbojpeg/YUVImage.html" title="class in org.libjpegturbo.turbojpeg">YUVImage</A> <B>encodeYUV</B>(int pad,
+ int flags)
+ throws java.lang.Exception</PRE>
+<DL>
+<DD>Encode the uncompressed source image associated with this compressor
+ instance into a YUV planar image and return a <code>YUVImage</code>
+ instance containing the encoded image. This method uses the accelerated
+ color conversion routines in TurboJPEG's underlying codec but does not
+ execute any of the other steps in the JPEG compression process. Encoding
+ CMYK source images to YUV is not supported.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>pad</CODE> - the width of each line in each plane of the YUV image will be
+ padded to the nearest multiple of this number of bytes (must be a power of
+ 2.)<DD><CODE>flags</CODE> - the bitwise OR of one or more of
+ <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#FLAG_BOTTOMUP"><CODE>TJ.FLAG_*</CODE></A>
+<DT><B>Returns:</B><DD>a YUV planar image
<DT><B>Throws:</B>
<DD><CODE>java.lang.Exception</CODE></DL>
</DD>
@@ -764,16 +786,14 @@
<A NAME="encodeYUV(int)"><!-- --></A><H3>
encodeYUV</H3>
<PRE>
-public byte[] <B>encodeYUV</B>(int flags)
+<FONT SIZE="-1">@Deprecated
+</FONT>public byte[] <B>encodeYUV</B>(int flags)
throws java.lang.Exception</PRE>
<DL>
-<DD>Encode the uncompressed source image associated with this compressor
- instance and return a buffer containing a YUV planar image. See
- <A HREF="../../../org/libjpegturbo/turbojpeg/TJCompressor.html#encodeYUV(byte[], int)"><CODE>encodeYUV(byte[], int)</CODE></A> for more detail.
+<DD><B>Deprecated.</B> <I>Use <A HREF="../../../org/libjpegturbo/turbojpeg/TJCompressor.html#encodeYUV(int, int)"><CODE>encodeYUV(int, int)</CODE></A> instead.</I>
<P>
<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>flags</CODE> - the bitwise OR of one or more of <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJ.FLAG_*</CODE></A>
-<DT><B>Returns:</B><DD>a buffer containing a YUV planar image
+
<DT><B>Throws:</B>
<DD><CODE>java.lang.Exception</CODE></DL>
</DD>
diff --git a/java/doc/org/libjpegturbo/turbojpeg/TJDecompressor.html b/java/doc/org/libjpegturbo/turbojpeg/TJDecompressor.html
index 2dc3cc6..01007b3 100644
--- a/java/doc/org/libjpegturbo/turbojpeg/TJDecompressor.html
+++ b/java/doc/org/libjpegturbo/turbojpeg/TJDecompressor.html
@@ -142,7 +142,7 @@
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>protected int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#jpegColorspace">jpegColorspace</A></B></CODE>
+<TD><CODE><B><A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#srcColorspace">srcColorspace</A></B></CODE>
<BR>
</TD>
@@ -150,7 +150,7 @@
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>protected int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#jpegHeight">jpegHeight</A></B></CODE>
+<TD><CODE><B><A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#srcHeight">srcHeight</A></B></CODE>
<BR>
</TD>
@@ -158,7 +158,7 @@
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>protected int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#jpegSubsamp">jpegSubsamp</A></B></CODE>
+<TD><CODE><B><A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#srcSubsamp">srcSubsamp</A></B></CODE>
<BR>
</TD>
@@ -166,7 +166,15 @@
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>protected int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#jpegWidth">jpegWidth</A></B></CODE>
+<TD><CODE><B><A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#srcWidth">srcWidth</A></B></CODE>
+
+<BR>
+ </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>protected <A HREF="../../../org/libjpegturbo/turbojpeg/YUVImage.html" title="class in org.libjpegturbo.turbojpeg">YUVImage</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#yuvImage">yuvImage</A></B></CODE>
<BR>
</TD>
@@ -191,17 +199,25 @@
<TD><CODE><B><A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#TJDecompressor(byte[])">TJDecompressor</A></B>(byte[] jpegImage)</CODE>
<BR>
- Create a TurboJPEG decompressor instance and associate the JPEG image
- stored in <code>jpegImage</code> with the newly-created instance.</TD>
+ Create a TurboJPEG decompressor instance and associate the JPEG source
+ image stored in <code>jpegImage</code> with the newly created instance.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#TJDecompressor(byte[], int)">TJDecompressor</A></B>(byte[] jpegImage,
int imageSize)</CODE>
<BR>
- Create a TurboJPEG decompressor instance and associate the JPEG image
- of length <code>imageSize</code> bytes stored in <code>jpegImage</code>
- with the newly-created instance.</TD>
+ Create a TurboJPEG decompressor instance and associate the JPEG source
+ image of length <code>imageSize</code> bytes stored in
+ <code>jpegImage</code> with the newly created instance.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#TJDecompressor(org.libjpegturbo.turbojpeg.YUVImage)">TJDecompressor</A></B>(<A HREF="../../../org/libjpegturbo/turbojpeg/YUVImage.html" title="class in org.libjpegturbo.turbojpeg">YUVImage</A> yuvImage)</CODE>
+
+<BR>
+ Create a TurboJPEG decompressor instance and associate the YUV planar
+ source image stored in <code>yuvImage</code> with the newly created
+ instance.</TD>
</TR>
</TABLE>
@@ -228,9 +244,9 @@
int flags)</CODE>
<BR>
- Decompress the JPEG source image associated with this decompressor
- instance and output a decompressed image to the given
- <code>BufferedImage</code> instance.</TD>
+ Decompress the JPEG source image or decode the YUV source image associated
+ with this decompressor instance and output a decompressed/decoded image to
+ the given <code>BufferedImage</code> instance.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -259,8 +275,9 @@
int flags)</CODE>
<BR>
- Decompress the JPEG source image associated with this decompressor
- instance and output a decompressed image to the given destination buffer.</TD>
+ Decompress the JPEG source image or decode the YUV source image associated
+ with this decompressor instance and output a grayscale, RGB, or CMYK image
+ to the given destination buffer.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -275,8 +292,9 @@
int flags)</CODE>
<BR>
- Decompress the JPEG source image associated with this decompressor
- instance and output a decompressed image to the given destination buffer.</TD>
+ Decompress the JPEG source image or decode the YUV source image associated
+ with this decompressor instance and output a grayscale, RGB, or CMYK image
+ to the given destination buffer.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -287,9 +305,9 @@
int flags)</CODE>
<BR>
- Decompress the JPEG source image associated with this decompressor
- instance and return a <code>BufferedImage</code> instance containing the
- decompressed image.</TD>
+ Decompress the JPEG source image or decode the YUV source image associated
+ with this decompressor instance and return a <code>BufferedImage</code>
+ instance containing the decompressed/decoded image.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -311,21 +329,7 @@
int flags)</CODE>
<BR>
- <B>Deprecated.</B> <I>Use <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompressToYUV(byte[], int, int, int, int)"><CODE>decompressToYUV(byte[], int, int, int, int)</CODE></A>
- instead.</I></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE> void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompressToYUV(byte[], int, int, int, int)">decompressToYUV</A></B>(byte[] dstBuf,
- int desiredWidth,
- int pad,
- int desiredHeight,
- int flags)</CODE>
-
-<BR>
- Decompress the JPEG source image associated with this decompressor
- instance and output a YUV planar image to the given destination buffer.</TD>
+ <B>Deprecated.</B> <I>Use <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompressToYUV(org.libjpegturbo.turbojpeg.YUVImage, int)"><CODE>decompressToYUV(YUVImage, int)</CODE></A> instead.</I></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -337,7 +341,7 @@
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE> byte[]</CODE></FONT></TD>
+<CODE> <A HREF="../../../org/libjpegturbo/turbojpeg/YUVImage.html" title="class in org.libjpegturbo.turbojpeg">YUVImage</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompressToYUV(int, int, int, int)">decompressToYUV</A></B>(int desiredWidth,
int pad,
int desiredHeight,
@@ -345,7 +349,19 @@
<BR>
Decompress the JPEG source image associated with this decompressor
- instance and return a buffer containing a YUV planar image.</TD>
+ instance into a YUV planar image and return a <code>YUVImage</code>
+ instance containing the decompressed image.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompressToYUV(org.libjpegturbo.turbojpeg.YUVImage, int)">decompressToYUV</A></B>(<A HREF="../../../org/libjpegturbo/turbojpeg/YUVImage.html" title="class in org.libjpegturbo.turbojpeg">YUVImage</A> dstImage,
+ int flags)</CODE>
+
+<BR>
+ Decompress the JPEG source image associated with this decompressor
+ instance into a YUV planar image and store it in the given
+ <code>YUVImage</code> instance.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -361,8 +377,8 @@
<TD><CODE><B><A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getColorspace()">getColorspace</A></B>()</CODE>
<BR>
- Returns the colorspace used in the JPEG image associated with this
- decompressor instance.</TD>
+ Returns the colorspace used in the source image (JPEG or YUV) associated
+ with this decompressor instance.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -370,8 +386,8 @@
<TD><CODE><B><A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getHeight()">getHeight</A></B>()</CODE>
<BR>
- Returns the height of the JPEG image associated with this decompressor
- instance.</TD>
+ Returns the height of the source image (JPEG or YUV) associated with this
+ decompressor instance.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -379,7 +395,7 @@
<TD><CODE><B><A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getJPEGBuf()">getJPEGBuf</A></B>()</CODE>
<BR>
- Returns the JPEG image buffer associated with this decompressor instance.</TD>
+ <B>Deprecated.</B> <I>Use <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getSourceBuf()"><CODE>getSourceBuf()</CODE></A> instead.</I></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -387,8 +403,7 @@
<TD><CODE><B><A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getJPEGSize()">getJPEGSize</A></B>()</CODE>
<BR>
- Returns the size of the JPEG image (in bytes) associated with this
- decompressor instance.</TD>
+ <B>Deprecated.</B> <I>Use <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getSourceSize()"><CODE>getSourceSize()</CODE></A> instead.</I></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -414,12 +429,30 @@
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> byte[]</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getSourceBuf()">getSourceBuf</A></B>()</CODE>
+
+<BR>
+ Returns the source image buffer associated with this decompressor
+ instance.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getSourceSize()">getSourceSize</A></B>()</CODE>
+
+<BR>
+ Returns the size of the source image (in bytes) associated with this
+ decompressor instance.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE> int</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getSubsamp()">getSubsamp</A></B>()</CODE>
<BR>
- Returns the level of chrominance subsampling used in the JPEG image
- associated with this decompressor instance.</TD>
+ Returns the level of chrominance subsampling used in the source image
+ (JPEG or YUV) associated with this decompressor instance.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -427,8 +460,8 @@
<TD><CODE><B><A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getWidth()">getWidth</A></B>()</CODE>
<BR>
- Returns the width of the JPEG image associated with this decompressor
- instance.</TD>
+ Returns the width of the source image (JPEG or YUV) associated with this
+ decompressor instance.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -437,8 +470,26 @@
int imageSize)</CODE>
<BR>
+ <B>Deprecated.</B> <I>Use <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#setSourceImage(byte[], int)"><CODE>setSourceImage(byte[], int)</CODE></A> instead.</I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#setSourceImage(byte[], int)">setSourceImage</A></B>(byte[] srcImage,
+ int imageSize)</CODE>
+
+<BR>
Associate the JPEG image of length <code>imageSize</code> bytes stored in
- <code>jpegImage</code> with this decompressor instance.</TD>
+ <code>srcImage</code> with this decompressor instance.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#setSourceImage(org.libjpegturbo.turbojpeg.YUVImage)">setSourceImage</A></B>(<A HREF="../../../org/libjpegturbo/turbojpeg/YUVImage.html" title="class in org.libjpegturbo.turbojpeg">YUVImage</A> srcImage)</CODE>
+
+<BR>
+ Associate the specified YUV planar source image with this decompressor
+ instance.</TD>
</TR>
</TABLE>
<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
@@ -493,40 +544,50 @@
</DL>
<HR>
-<A NAME="jpegWidth"><!-- --></A><H3>
-jpegWidth</H3>
+<A NAME="yuvImage"><!-- --></A><H3>
+yuvImage</H3>
<PRE>
-protected int <B>jpegWidth</B></PRE>
+protected <A HREF="../../../org/libjpegturbo/turbojpeg/YUVImage.html" title="class in org.libjpegturbo.turbojpeg">YUVImage</A> <B>yuvImage</B></PRE>
<DL>
<DL>
</DL>
</DL>
<HR>
-<A NAME="jpegHeight"><!-- --></A><H3>
-jpegHeight</H3>
+<A NAME="srcWidth"><!-- --></A><H3>
+srcWidth</H3>
<PRE>
-protected int <B>jpegHeight</B></PRE>
+protected int <B>srcWidth</B></PRE>
<DL>
<DL>
</DL>
</DL>
<HR>
-<A NAME="jpegSubsamp"><!-- --></A><H3>
-jpegSubsamp</H3>
+<A NAME="srcHeight"><!-- --></A><H3>
+srcHeight</H3>
<PRE>
-protected int <B>jpegSubsamp</B></PRE>
+protected int <B>srcHeight</B></PRE>
<DL>
<DL>
</DL>
</DL>
<HR>
-<A NAME="jpegColorspace"><!-- --></A><H3>
-jpegColorspace</H3>
+<A NAME="srcSubsamp"><!-- --></A><H3>
+srcSubsamp</H3>
<PRE>
-protected int <B>jpegColorspace</B></PRE>
+protected int <B>srcSubsamp</B></PRE>
+<DL>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="srcColorspace"><!-- --></A><H3>
+srcColorspace</H3>
+<PRE>
+protected int <B>srcColorspace</B></PRE>
<DL>
<DL>
</DL>
@@ -563,8 +624,8 @@
public <B>TJDecompressor</B>(byte[] jpegImage)
throws java.lang.Exception</PRE>
<DL>
-<DD>Create a TurboJPEG decompressor instance and associate the JPEG image
- stored in <code>jpegImage</code> with the newly-created instance.
+<DD>Create a TurboJPEG decompressor instance and associate the JPEG source
+ image stored in <code>jpegImage</code> with the newly created instance.
<P>
<DL>
<DT><B>Parameters:</B><DD><CODE>jpegImage</CODE> - JPEG image buffer (size of the JPEG image is assumed to
@@ -581,15 +642,33 @@
int imageSize)
throws java.lang.Exception</PRE>
<DL>
-<DD>Create a TurboJPEG decompressor instance and associate the JPEG image
- of length <code>imageSize</code> bytes stored in <code>jpegImage</code>
- with the newly-created instance.
+<DD>Create a TurboJPEG decompressor instance and associate the JPEG source
+ image of length <code>imageSize</code> bytes stored in
+ <code>jpegImage</code> with the newly created instance.
<P>
<DL>
<DT><B>Parameters:</B><DD><CODE>jpegImage</CODE> - JPEG image buffer<DD><CODE>imageSize</CODE> - size of the JPEG image (in bytes)
<DT><B>Throws:</B>
<DD><CODE>java.lang.Exception</CODE></DL>
</DL>
+<HR>
+
+<A NAME="TJDecompressor(org.libjpegturbo.turbojpeg.YUVImage)"><!-- --></A><H3>
+TJDecompressor</H3>
+<PRE>
+public <B>TJDecompressor</B>(<A HREF="../../../org/libjpegturbo/turbojpeg/YUVImage.html" title="class in org.libjpegturbo.turbojpeg">YUVImage</A> yuvImage)
+ throws java.lang.Exception</PRE>
+<DL>
+<DD>Create a TurboJPEG decompressor instance and associate the YUV planar
+ source image stored in <code>yuvImage</code> with the newly created
+ instance.
+<P>
+<DL>
+<DT><B>Parameters:</B><DD><CODE>yuvImage</CODE> - <A HREF="../../../org/libjpegturbo/turbojpeg/YUVImage.html" title="class in org.libjpegturbo.turbojpeg"><CODE>YUVImage</CODE></A> instance containing a YUV planar
+ image to be decoded
+<DT><B>Throws:</B>
+<DD><CODE>java.lang.Exception</CODE></DL>
+</DL>
<!-- ============ METHOD DETAIL ========== -->
@@ -601,19 +680,56 @@
</TR>
</TABLE>
-<A NAME="setJPEGImage(byte[], int)"><!-- --></A><H3>
-setJPEGImage</H3>
+<A NAME="setSourceImage(byte[], int)"><!-- --></A><H3>
+setSourceImage</H3>
<PRE>
-public void <B>setJPEGImage</B>(byte[] jpegImage,
- int imageSize)
- throws java.lang.Exception</PRE>
+public void <B>setSourceImage</B>(byte[] srcImage,
+ int imageSize)
+ throws java.lang.Exception</PRE>
<DL>
<DD>Associate the JPEG image of length <code>imageSize</code> bytes stored in
- <code>jpegImage</code> with this decompressor instance. This image will
+ <code>srcImage</code> with this decompressor instance. This image will
be used as the source image for subsequent decompress operations.
<P>
<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>jpegImage</CODE> - JPEG image buffer<DD><CODE>imageSize</CODE> - size of the JPEG image (in bytes)
+<DT><B>Parameters:</B><DD><CODE>srcImage</CODE> - JPEG image buffer<DD><CODE>imageSize</CODE> - size of the JPEG image (in bytes)
+<DT><B>Throws:</B>
+<DD><CODE>java.lang.Exception</CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setJPEGImage(byte[], int)"><!-- --></A><H3>
+setJPEGImage</H3>
+<PRE>
+<FONT SIZE="-1">@Deprecated
+</FONT>public void <B>setJPEGImage</B>(byte[] jpegImage,
+ int imageSize)
+ throws java.lang.Exception</PRE>
+<DL>
+<DD><B>Deprecated.</B> <I>Use <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#setSourceImage(byte[], int)"><CODE>setSourceImage(byte[], int)</CODE></A> instead.</I>
+<P>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE>java.lang.Exception</CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setSourceImage(org.libjpegturbo.turbojpeg.YUVImage)"><!-- --></A><H3>
+setSourceImage</H3>
+<PRE>
+public void <B>setSourceImage</B>(<A HREF="../../../org/libjpegturbo/turbojpeg/YUVImage.html" title="class in org.libjpegturbo.turbojpeg">YUVImage</A> srcImage)
+ throws java.lang.Exception</PRE>
+<DL>
+<DD>Associate the specified YUV planar source image with this decompressor
+ instance. Subsequent decompress operations will decode this image into an
+ RGB or grayscale destination image.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>srcImage</CODE> - <A HREF="../../../org/libjpegturbo/turbojpeg/YUVImage.html" title="class in org.libjpegturbo.turbojpeg"><CODE>YUVImage</CODE></A> instance containing a YUV planar image to
+ be decoded
<DT><B>Throws:</B>
<DD><CODE>java.lang.Exception</CODE></DL>
</DD>
@@ -626,13 +742,13 @@
public int <B>getWidth</B>()
throws java.lang.Exception</PRE>
<DL>
-<DD>Returns the width of the JPEG image associated with this decompressor
- instance.
+<DD>Returns the width of the source image (JPEG or YUV) associated with this
+ decompressor instance.
<P>
<DD><DL>
-<DT><B>Returns:</B><DD>the width of the JPEG image associated with this decompressor
- instance
+<DT><B>Returns:</B><DD>the width of the source image (JPEG or YUV) associated with this
+ decompressor instance
<DT><B>Throws:</B>
<DD><CODE>java.lang.Exception</CODE></DL>
</DD>
@@ -645,13 +761,13 @@
public int <B>getHeight</B>()
throws java.lang.Exception</PRE>
<DL>
-<DD>Returns the height of the JPEG image associated with this decompressor
- instance.
+<DD>Returns the height of the source image (JPEG or YUV) associated with this
+ decompressor instance.
<P>
<DD><DL>
-<DT><B>Returns:</B><DD>the height of the JPEG image associated with this decompressor
- instance
+<DT><B>Returns:</B><DD>the height of the source image (JPEG or YUV) associated with this
+ decompressor instance
<DT><B>Throws:</B>
<DD><CODE>java.lang.Exception</CODE></DL>
</DD>
@@ -664,13 +780,14 @@
public int <B>getSubsamp</B>()
throws java.lang.Exception</PRE>
<DL>
-<DD>Returns the level of chrominance subsampling used in the JPEG image
- associated with this decompressor instance. See <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJ.SAMP_*</CODE></A>.
+<DD>Returns the level of chrominance subsampling used in the source image
+ (JPEG or YUV) associated with this decompressor instance. See
+ <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#SAMP_444"><CODE>TJ.SAMP_*</CODE></A>.
<P>
<DD><DL>
-<DT><B>Returns:</B><DD>the level of chrominance subsampling used in the JPEG image
- associated with this decompressor instance
+<DT><B>Returns:</B><DD>the level of chrominance subsampling used in the source image
+ (JPEG or YUV) associated with this decompressor instance
<DT><B>Throws:</B>
<DD><CODE>java.lang.Exception</CODE></DL>
</DD>
@@ -683,13 +800,32 @@
public int <B>getColorspace</B>()
throws java.lang.Exception</PRE>
<DL>
-<DD>Returns the colorspace used in the JPEG image associated with this
- decompressor instance. See <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJ.CS_*</CODE></A>.
+<DD>Returns the colorspace used in the source image (JPEG or YUV) associated
+ with this decompressor instance. See <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#CS_RGB"><CODE>TJ.CS_*</CODE></A>. If the
+ source image is YUV, then this always returns <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#CS_YCbCr"><CODE>TJ.CS_YCbCr</CODE></A>.
<P>
<DD><DL>
-<DT><B>Returns:</B><DD>the colorspace used in the JPEG image associated with this
- decompressor instance
+<DT><B>Returns:</B><DD>the colorspace used in the source image (JPEG or YUV) associated
+ with this decompressor instance
+<DT><B>Throws:</B>
+<DD><CODE>java.lang.Exception</CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getSourceBuf()"><!-- --></A><H3>
+getSourceBuf</H3>
+<PRE>
+public byte[] <B>getSourceBuf</B>()
+ throws java.lang.Exception</PRE>
+<DL>
+<DD>Returns the source image buffer associated with this decompressor
+ instance.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the source image buffer associated with this decompressor instance
<DT><B>Throws:</B>
<DD><CODE>java.lang.Exception</CODE></DL>
</DD>
@@ -699,14 +835,33 @@
<A NAME="getJPEGBuf()"><!-- --></A><H3>
getJPEGBuf</H3>
<PRE>
-public byte[] <B>getJPEGBuf</B>()
+<FONT SIZE="-1">@Deprecated
+</FONT>public byte[] <B>getJPEGBuf</B>()
throws java.lang.Exception</PRE>
<DL>
-<DD>Returns the JPEG image buffer associated with this decompressor instance.
+<DD><B>Deprecated.</B> <I>Use <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getSourceBuf()"><CODE>getSourceBuf()</CODE></A> instead.</I>
<P>
<DD><DL>
-<DT><B>Returns:</B><DD>the JPEG image buffer associated with this decompressor instance
+<DT><B>Throws:</B>
+<DD><CODE>java.lang.Exception</CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getSourceSize()"><!-- --></A><H3>
+getSourceSize</H3>
+<PRE>
+public int <B>getSourceSize</B>()
+ throws java.lang.Exception</PRE>
+<DL>
+<DD>Returns the size of the source image (in bytes) associated with this
+ decompressor instance.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the size of the source image (in bytes) associated with this
+ decompressor instance
<DT><B>Throws:</B>
<DD><CODE>java.lang.Exception</CODE></DL>
</DD>
@@ -716,16 +871,14 @@
<A NAME="getJPEGSize()"><!-- --></A><H3>
getJPEGSize</H3>
<PRE>
-public int <B>getJPEGSize</B>()
+<FONT SIZE="-1">@Deprecated
+</FONT>public int <B>getJPEGSize</B>()
throws java.lang.Exception</PRE>
<DL>
-<DD>Returns the size of the JPEG image (in bytes) associated with this
- decompressor instance.
+<DD><B>Deprecated.</B> <I>Use <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getSourceSize()"><CODE>getSourceSize()</CODE></A> instead.</I>
<P>
<DD><DL>
-<DT><B>Returns:</B><DD>the size of the JPEG image (in bytes) associated with this
- decompressor instance
<DT><B>Throws:</B>
<DD><CODE>java.lang.Exception</CODE></DL>
</DD>
@@ -801,43 +954,54 @@
int flags)
throws java.lang.Exception</PRE>
<DL>
-<DD>Decompress the JPEG source image associated with this decompressor
- instance and output a decompressed image to the given destination buffer.
+<DD>Decompress the JPEG source image or decode the YUV source image associated
+ with this decompressor instance and output a grayscale, RGB, or CMYK image
+ to the given destination buffer.
<P>
<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>dstBuf</CODE> - buffer that will receive the decompressed image. This
- buffer should normally be <code>pitch * scaledHeight</code> bytes in size,
- where <code>scaledHeight</code> can be determined by calling <code>
+<DT><B>Parameters:</B><DD><CODE>dstBuf</CODE> - buffer that will receive the decompressed/decoded image.
+ If the source image is a JPEG image, then this buffer should normally be
+ <code>pitch * scaledHeight</code> bytes in size, where
+ <code>scaledHeight</code> can be determined by calling <code>
scalingFactor.<A HREF="../../../org/libjpegturbo/turbojpeg/TJScalingFactor.html#getScaled(int)"><CODE>getScaled</CODE></A>(jpegHeight)
- </code> with one of the scaling factors returned from <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#getScalingFactors()"><CODE>TJ.getScalingFactors()</CODE></A> or by calling <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getScaledHeight(int, int)"><CODE>getScaledHeight(int, int)</CODE></A>. However,
- the buffer may also be larger than the dimensions of the JPEG image, in
- which case the <code>x</code>, <code>y</code>, and <code>pitch</code>
- parameters can be used to specify the region into which the JPEG image
- should be decompressed.<DD><CODE>x</CODE> - x offset (in pixels) of the region into which the JPEG image
- should be decompressed, relative to the start of <code>dstBuf</code>.<DD><CODE>y</CODE> - y offset (in pixels) of the region into which the JPEG image
- should be decompressed, relative to the start of <code>dstBuf</code>.<DD><CODE>desiredWidth</CODE> - desired width (in pixels) of the decompressed image
- (or image region.) If the desired image dimensions are different than the
- dimensions of the JPEG image being decompressed, then TurboJPEG will use
- scaling in the JPEG decompressor to generate the largest possible image
- that will fit within the desired dimensions. Setting this to 0 is the
- same as setting it to the width of the JPEG image (in other words, the
- width will not be considered when determining the scaled image size.)<DD><CODE>pitch</CODE> - bytes per line of the destination image. Normally, this
+ </code> with one of the scaling factors returned from <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#getScalingFactors()"><CODE>TJ.getScalingFactors()</CODE></A> or by calling <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getScaledHeight(int, int)"><CODE>getScaledHeight(int, int)</CODE></A>. If the
+ source image is a YUV image, then this buffer should normally be
+ <code>pitch * height</code> bytes in size, where <code>height</code> is
+ the height of the YUV image. However, the buffer may also be larger than
+ the dimensions of the source image, in which case the <code>x</code>,
+ <code>y</code>, and <code>pitch</code> parameters can be used to specify
+ the region into which the source image should be decompressed/decoded.<DD><CODE>x</CODE> - x offset (in pixels) of the region in the destination image into
+ which the source image should be decompressed/decoded<DD><CODE>y</CODE> - y offset (in pixels) of the region in the destination image into
+ which the source image should be decompressed/decoded<DD><CODE>desiredWidth</CODE> - If the source image is a JPEG image, then this
+ specifies the desired width (in pixels) of the decompressed image (or
+ image region.) If the desired destination image dimensions are different
+ than the source image dimensions, then TurboJPEG will use scaling in the
+ JPEG decompressor to generate the largest possible image that will fit
+ within the desired dimensions. Setting this to 0 is the same as setting
+ it to the width of the JPEG image (in other words, the width will not be
+ considered when determining the scaled image size.) This parameter is
+ ignored if the source image is a YUV image.<DD><CODE>pitch</CODE> - bytes per line of the destination image. Normally, this
should be set to <code>scaledWidth * TJ.pixelSize(pixelFormat)</code> if
- the decompressed image is unpadded, but you can use this to, for instance,
- pad each line of the decompressed image to a 4-byte boundary or to
- decompress the JPEG image into a region of a larger image. NOTE:
- <code>scaledWidth</code> can be determined by calling <code>
+ the destination image is unpadded, but you can use this to, for instance,
+ pad each line of the destination image to a 4-byte boundary or to
+ decompress/decode the source image into a region of a larger image. NOTE:
+ if the source image is a JPEG image, then <code>scaledWidth</code> can be
+ determined by calling <code>
scalingFactor.<A HREF="../../../org/libjpegturbo/turbojpeg/TJScalingFactor.html#getScaled(int)"><CODE>getScaled</CODE></A>(jpegWidth)
- </code> or by calling <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getScaledWidth(int, int)"><CODE>getScaledWidth(int, int)</CODE></A>. Setting this parameter to
- 0 is the equivalent of setting it to <code>scaledWidth *
- TJ.pixelSize(pixelFormat)</code>.<DD><CODE>desiredHeight</CODE> - desired height (in pixels) of the decompressed image
- (or image region.) If the desired image dimensions are different than the
- dimensions of the JPEG image being decompressed, then TurboJPEG will use
- scaling in the JPEG decompressor to generate the largest possible image
- that will fit within the desired dimensions. Setting this to 0 is the
- same as setting it to the height of the JPEG image (in other words, the
- height will not be considered when determining the scaled image size.)<DD><CODE>pixelFormat</CODE> - pixel format of the decompressed image (one of
- <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJ.PF_*</CODE></A>)<DD><CODE>flags</CODE> - the bitwise OR of one or more of <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJ.FLAG_*</CODE></A>
+ </code> or by calling <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getScaledWidth(int, int)"><CODE>getScaledWidth(int, int)</CODE></A>. If the source image is a
+ YUV image, then <code>scaledWidth</code> is the width of the YUV image.
+ Setting this parameter to 0 is the equivalent of setting it to
+ <code>scaledWidth * TJ.pixelSize(pixelFormat)</code>.<DD><CODE>desiredHeight</CODE> - If the source image is a JPEG image, then this
+ specifies the desired height (in pixels) of the decompressed image (or
+ image region.) If the desired destination image dimensions are different
+ than the source image dimensions, then TurboJPEG will use scaling in the
+ JPEG decompressor to generate the largest possible image that will fit
+ within the desired dimensions. Setting this to 0 is the same as setting
+ it to the height of the JPEG image (in other words, the height will not be
+ considered when determining the scaled image size.) This parameter is
+ ignored if the source image is a YUV image.<DD><CODE>pixelFormat</CODE> - pixel format of the decompressed/decoded image (one of
+ <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#PF_RGB"><CODE>TJ.PF_*</CODE></A>)<DD><CODE>flags</CODE> - the bitwise OR of one or more of
+ <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#FLAG_BOTTOMUP"><CODE>TJ.FLAG_*</CODE></A>
<DT><B>Throws:</B>
<DD><CODE>java.lang.Exception</CODE></DL>
</DD>
@@ -888,7 +1052,8 @@
for description<DD><CODE>desiredHeight</CODE> - see
<A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(byte[], int, int, int, int, int, int, int)"><CODE>decompress(byte[], int, int, int, int, int, int, int)</CODE></A>
for description<DD><CODE>pixelFormat</CODE> - pixel format of the decompressed image (one of
- <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJ.PF_*</CODE></A>)<DD><CODE>flags</CODE> - the bitwise OR of one or more of <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJ.FLAG_*</CODE></A>
+ <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#PF_RGB"><CODE>TJ.PF_*</CODE></A>)<DD><CODE>flags</CODE> - the bitwise OR of one or more of
+ <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#FLAG_BOTTOMUP"><CODE>TJ.FLAG_*</CODE></A>
<DT><B>Returns:</B><DD>a buffer containing the decompressed image
<DT><B>Throws:</B>
<DD><CODE>java.lang.Exception</CODE></DL>
@@ -896,48 +1061,28 @@
</DL>
<HR>
-<A NAME="decompressToYUV(byte[], int, int, int, int)"><!-- --></A><H3>
+<A NAME="decompressToYUV(org.libjpegturbo.turbojpeg.YUVImage, int)"><!-- --></A><H3>
decompressToYUV</H3>
<PRE>
-public void <B>decompressToYUV</B>(byte[] dstBuf,
- int desiredWidth,
- int pad,
- int desiredHeight,
+public void <B>decompressToYUV</B>(<A HREF="../../../org/libjpegturbo/turbojpeg/YUVImage.html" title="class in org.libjpegturbo.turbojpeg">YUVImage</A> dstImage,
int flags)
throws java.lang.Exception</PRE>
<DL>
<DD>Decompress the JPEG source image associated with this decompressor
- instance and output a YUV planar image to the given destination buffer.
- This method performs JPEG decompression but leaves out the color
- conversion step, so a planar YUV image is generated instead of an RGB
- image. The padding of the planes in this image is the same as in the
- images generated by <A HREF="../../../org/libjpegturbo/turbojpeg/TJCompressor.html#encodeYUV(byte[], int)"><CODE>TJCompressor.encodeYUV(byte[], int)</CODE></A>. Note
- that, if the width or height of the image is not an even multiple of the
- MCU block size (see <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#getMCUWidth(int)"><CODE>TJ.getMCUWidth(int)</CODE></A> and <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#getMCUHeight(int)"><CODE>TJ.getMCUHeight(int)</CODE></A>),
- then an intermediate buffer copy will be performed within TurboJPEG.
- <p>
- NOTE: Technically, the JPEG format uses the YCbCr colorspace, but per the
- convention of the digital video community, the TurboJPEG API uses "YUV" to
- refer to an image format consisting of Y, Cb, and Cr image planes.
+ instance into a YUV planar image and store it in the given
+ <code>YUVImage</code> instance. This method performs JPEG decompression
+ but leaves out the color conversion step, so a planar YUV image is
+ generated instead of an RGB or grayscale image. This method cannot be
+ used to decompress JPEG source images with the CMYK or YCCK colorspace.
<P>
<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>dstBuf</CODE> - buffer that will receive the YUV planar image. Use
- <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#bufSizeYUV(int, int, int, int)"><CODE>TJ.bufSizeYUV(int, int, int, int)</CODE></A> to determine the appropriate size for this buffer
- based on the image width, height, and level of chrominance subsampling.<DD><CODE>desiredWidth</CODE> - desired width (in pixels) of the YUV image. If the
- desired image dimensions are different than the dimensions of the JPEG
- image being decompressed, then TurboJPEG will use scaling in the JPEG
- decompressor to generate the largest possible image that will fit within
- the desired dimensions. Setting this to 0 is the same as setting it to
- the width of the JPEG image (in other words, the width will not be
- considered when determining the scaled image size.)<DD><CODE>pad</CODE> - the width of each line in each plane of the YUV image will be
- padded to the nearest multiple of this number of bytes (must be a power of
- 2.)<DD><CODE>desiredHeight</CODE> - desired height (in pixels) of the YUV image. If the
- desired image dimensions are different than the dimensions of the JPEG
- image being decompressed, then TurboJPEG will use scaling in the JPEG
- decompressor to generate the largest possible image that will fit within
- the desired dimensions. Setting this to 0 is the same as setting it to
- the height of the JPEG image (in other words, the height will not be
- considered when determining the scaled image size.)<DD><CODE>flags</CODE> - the bitwise OR of one or more of <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJ.FLAG_*</CODE></A>
+<DT><B>Parameters:</B><DD><CODE>dstImage</CODE> - <A HREF="../../../org/libjpegturbo/turbojpeg/YUVImage.html" title="class in org.libjpegturbo.turbojpeg"><CODE>YUVImage</CODE></A> instance that will receive the YUV planar
+ image. The level of subsampling specified in this <code>YUVImage</code>
+ instance must match that of the JPEG image, and the width and height
+ specified in the <code>YUVImage</code> instance must match one of the
+ scaled image sizes that TurboJPEG is capable of generating from the JPEG
+ source image.<DD><CODE>flags</CODE> - the bitwise OR of one or more of
+ <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#FLAG_BOTTOMUP"><CODE>TJ.FLAG_*</CODE></A>
<DT><B>Throws:</B>
<DD><CODE>java.lang.Exception</CODE></DL>
</DD>
@@ -952,8 +1097,7 @@
int flags)
throws java.lang.Exception</PRE>
<DL>
-<DD><B>Deprecated.</B> <I>Use <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompressToYUV(byte[], int, int, int, int)"><CODE>decompressToYUV(byte[], int, int, int, int)</CODE></A>
- instead.</I>
+<DD><B>Deprecated.</B> <I>Use <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompressToYUV(org.libjpegturbo.turbojpeg.YUVImage, int)"><CODE>decompressToYUV(YUVImage, int)</CODE></A> instead.</I>
<P>
<DD><DL>
@@ -966,20 +1110,38 @@
<A NAME="decompressToYUV(int, int, int, int)"><!-- --></A><H3>
decompressToYUV</H3>
<PRE>
-public byte[] <B>decompressToYUV</B>(int desiredWidth,
- int pad,
- int desiredHeight,
- int flags)
- throws java.lang.Exception</PRE>
+public <A HREF="../../../org/libjpegturbo/turbojpeg/YUVImage.html" title="class in org.libjpegturbo.turbojpeg">YUVImage</A> <B>decompressToYUV</B>(int desiredWidth,
+ int pad,
+ int desiredHeight,
+ int flags)
+ throws java.lang.Exception</PRE>
<DL>
<DD>Decompress the JPEG source image associated with this decompressor
- instance and return a buffer containing a YUV planar image. See <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompressToYUV(byte[], int, int, int, int)"><CODE>decompressToYUV(byte[], int, int, int, int)</CODE></A> for more detail.
+ instance into a YUV planar image and return a <code>YUVImage</code>
+ instance containing the decompressed image. This method performs JPEG
+ decompression but leaves out the color conversion step, so a planar YUV
+ image is generated instead of an RGB or grayscale image. This method
+ cannot be used to decompress JPEG source images with the CMYK or YCCK
+ colorspace.
<P>
<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>desiredWidth</CODE> - see
- <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompressToYUV(byte[], int, int, int, int)"><CODE>decompressToYUV(byte[], int, int, int, int)</CODE></A> for description<DD><CODE>pad</CODE> - see <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompressToYUV(byte[], int, int, int, int)"><CODE>decompressToYUV(byte[], int, int, int, int)</CODE></A> for
- description<DD><CODE>desiredHeight</CODE> - see <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompressToYUV(byte[], int, int, int, int)"><CODE>decompressToYUV(byte[], int, int, int, int)</CODE></A> for description<DD><CODE>flags</CODE> - the bitwise OR of one or more of <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJ.FLAG_*</CODE></A>
-<DT><B>Returns:</B><DD>a buffer containing a YUV planar image
+<DT><B>Parameters:</B><DD><CODE>desiredWidth</CODE> - desired width (in pixels) of the YUV image. If the
+ desired image dimensions are different than the dimensions of the JPEG
+ image being decompressed, then TurboJPEG will use scaling in the JPEG
+ decompressor to generate the largest possible image that will fit within
+ the desired dimensions. Setting this to 0 is the same as setting it to
+ the width of the JPEG image (in other words, the width will not be
+ considered when determining the scaled image size.)<DD><CODE>pad</CODE> - the width of each line in each plane of the YUV image will be
+ padded to the nearest multiple of this number of bytes (must be a power of
+ 2.)<DD><CODE>desiredHeight</CODE> - desired height (in pixels) of the YUV image. If the
+ desired image dimensions are different than the dimensions of the JPEG
+ image being decompressed, then TurboJPEG will use scaling in the JPEG
+ decompressor to generate the largest possible image that will fit within
+ the desired dimensions. Setting this to 0 is the same as setting it to
+ the height of the JPEG image (in other words, the height will not be
+ considered when determining the scaled image size.)<DD><CODE>flags</CODE> - the bitwise OR of one or more of
+ <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#FLAG_BOTTOMUP"><CODE>TJ.FLAG_*</CODE></A>
+<DT><B>Returns:</B><DD>a YUV planar image
<DT><B>Throws:</B>
<DD><CODE>java.lang.Exception</CODE></DL>
</DD>
@@ -1016,40 +1178,52 @@
int flags)
throws java.lang.Exception</PRE>
<DL>
-<DD>Decompress the JPEG source image associated with this decompressor
- instance and output a decompressed image to the given destination buffer.
+<DD>Decompress the JPEG source image or decode the YUV source image associated
+ with this decompressor instance and output a grayscale, RGB, or CMYK image
+ to the given destination buffer.
<P>
<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>dstBuf</CODE> - buffer that will receive the decompressed image. This
- buffer should normally be <code>stride * scaledHeight</code> pixels in
- size, where <code>scaledHeight</code> can be determined by calling <code>
+<DT><B>Parameters:</B><DD><CODE>dstBuf</CODE> - buffer that will receive the decompressed/decoded image.
+ If the source image is a JPEG image, then this buffer should normally be
+ <code>stride * scaledHeight</code> pixels in size, where
+ <code>scaledHeight</code> can be determined by calling <code>
scalingFactor.<A HREF="../../../org/libjpegturbo/turbojpeg/TJScalingFactor.html#getScaled(int)"><CODE>getScaled</CODE></A>(jpegHeight)
- </code> with one of the scaling factors returned from <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#getScalingFactors()"><CODE>TJ.getScalingFactors()</CODE></A> or by calling <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getScaledHeight(int, int)"><CODE>getScaledHeight(int, int)</CODE></A>. However,
- the buffer may also be larger than the dimensions of the JPEG image, in
- which case the <code>x</code>, <code>y</code>, and <code>stride</code>
- parameters can be used to specify the region into which the JPEG image
- should be decompressed.<DD><CODE>x</CODE> - x offset (in pixels) of the region into which the JPEG image
- should be decompressed, relative to the start of <code>dstBuf</code>.<DD><CODE>y</CODE> - y offset (in pixels) of the region into which the JPEG image
- should be decompressed, relative to the start of <code>dstBuf</code>.<DD><CODE>desiredWidth</CODE> - desired width (in pixels) of the decompressed image
- (or image region.) If the desired image dimensions are different than the
- dimensions of the JPEG image being decompressed, then TurboJPEG will use
- scaling in the JPEG decompressor to generate the largest possible image
- that will fit within the desired dimensions. Setting this to 0 is the
- same as setting it to the width of the JPEG image (in other words, the
- width will not be considered when determining the scaled image size.)<DD><CODE>stride</CODE> - pixels per line of the destination image. Normally, this
+ </code> with one of the scaling factors returned from <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#getScalingFactors()"><CODE>TJ.getScalingFactors()</CODE></A> or by calling <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getScaledHeight(int, int)"><CODE>getScaledHeight(int, int)</CODE></A>. If the
+ source image is a YUV image, then this buffer should normally be
+ <code>stride * height</code> pixels in size, where <code>height</code> is
+ the height of the YUV image. However, the buffer may also be larger than
+ the dimensions of the JPEG image, in which case the <code>x</code>,
+ <code>y</code>, and <code>stride</code> parameters can be used to specify
+ the region into which the source image should be decompressed.<DD><CODE>x</CODE> - x offset (in pixels) of the region in the destination image into
+ which the source image should be decompressed/decoded<DD><CODE>y</CODE> - y offset (in pixels) of the region in the destination image into
+ which the source image should be decompressed/decoded<DD><CODE>desiredWidth</CODE> - If the source image is a JPEG image, then this
+ specifies the desired width (in pixels) of the decompressed image (or
+ image region.) If the desired destination image dimensions are different
+ than the source image dimensions, then TurboJPEG will use scaling in the
+ JPEG decompressor to generate the largest possible image that will fit
+ within the desired dimensions. Setting this to 0 is the same as setting
+ it to the width of the JPEG image (in other words, the width will not be
+ considered when determining the scaled image size.) This parameter is
+ ignored if the source image is a YUV image.<DD><CODE>stride</CODE> - pixels per line of the destination image. Normally, this
should be set to <code>scaledWidth</code>, but you can use this to, for
instance, decompress the JPEG image into a region of a larger image.
- NOTE: <code>scaledWidth</code> can be determined by calling <code>
+ NOTE: if the source image is a JPEG image, then <code>scaledWidth</code>
+ can be determined by calling <code>
scalingFactor.<A HREF="../../../org/libjpegturbo/turbojpeg/TJScalingFactor.html#getScaled(int)"><CODE>getScaled</CODE></A>(jpegWidth)
- </code> or by calling <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getScaledWidth(int, int)"><CODE>getScaledWidth(int, int)</CODE></A>. Setting this parameter to
- 0 is the equivalent of setting it to <code>scaledWidth</code>.<DD><CODE>desiredHeight</CODE> - desired height (in pixels) of the decompressed image
- (or image region.) If the desired image dimensions are different than the
- dimensions of the JPEG image being decompressed, then TurboJPEG will use
- scaling in the JPEG decompressor to generate the largest possible image
- that will fit within the desired dimensions. Setting this to 0 is the
- same as setting it to the height of the JPEG image (in other words, the
- height will not be considered when determining the scaled image size.)<DD><CODE>pixelFormat</CODE> - pixel format of the decompressed image (one of
- <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJ.PF_*</CODE></A>)<DD><CODE>flags</CODE> - the bitwise OR of one or more of <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJ.FLAG_*</CODE></A>
+ </code> or by calling <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getScaledWidth(int, int)"><CODE>getScaledWidth(int, int)</CODE></A>. If the source image is a
+ YUV image, then <code>scaledWidth</code> is the width of the YUV image.
+ Setting this parameter to 0 is the equivalent of setting it to
+ <code>scaledWidth</code>.<DD><CODE>desiredHeight</CODE> - If the source image is a JPEG image, then this
+ specifies the desired height (in pixels) of the decompressed image (or
+ image region.) If the desired destination image dimensions are different
+ than the source image dimensions, then TurboJPEG will use scaling in the
+ JPEG decompressor to generate the largest possible image that will fit
+ within the desired dimensions. Setting this to 0 is the same as setting
+ it to the height of the JPEG image (in other words, the height will not be
+ considered when determining the scaled image size.) This parameter is
+ ignored if the source image is a YUV image.<DD><CODE>pixelFormat</CODE> - pixel format of the decompressed image (one of
+ <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#PF_RGB"><CODE>TJ.PF_*</CODE></A>)<DD><CODE>flags</CODE> - the bitwise OR of one or more of
+ <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#FLAG_BOTTOMUP"><CODE>TJ.FLAG_*</CODE></A>
<DT><B>Throws:</B>
<DD><CODE>java.lang.Exception</CODE></DL>
</DD>
@@ -1063,13 +1237,19 @@
int flags)
throws java.lang.Exception</PRE>
<DL>
-<DD>Decompress the JPEG source image associated with this decompressor
- instance and output a decompressed image to the given
- <code>BufferedImage</code> instance.
+<DD>Decompress the JPEG source image or decode the YUV source image associated
+ with this decompressor instance and output a decompressed/decoded image to
+ the given <code>BufferedImage</code> instance.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>dstImage</CODE> - a <code>BufferedImage</code> instance that will receive
- the decompressed image<DD><CODE>flags</CODE> - the bitwise OR of one or more of <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJ.FLAG_*</CODE></A>
+ the decompressed/decoded image. If the source image is a JPEG image, then
+ the width and height of the <code>BufferedImage</code> instance must match
+ one of the scaled image sizes that TurboJPEG is capable of generating from
+ the JPEG image. If the source image is a YUV image, then the width and
+ height of the <code>BufferedImage</code> instance must match the width and
+ height of the YUV image.<DD><CODE>flags</CODE> - the bitwise OR of one or more of
+ <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#FLAG_BOTTOMUP"><CODE>TJ.FLAG_*</CODE></A>
<DT><B>Throws:</B>
<DD><CODE>java.lang.Exception</CODE></DL>
</DD>
@@ -1085,20 +1265,21 @@
int flags)
throws java.lang.Exception</PRE>
<DL>
-<DD>Decompress the JPEG source image associated with this decompressor
- instance and return a <code>BufferedImage</code> instance containing the
- decompressed image.
+<DD>Decompress the JPEG source image or decode the YUV source image associated
+ with this decompressor instance and return a <code>BufferedImage</code>
+ instance containing the decompressed/decoded image.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>desiredWidth</CODE> - see
<A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(byte[], int, int, int, int, int, int, int)"><CODE>decompress(byte[], int, int, int, int, int, int, int)</CODE></A> for
description<DD><CODE>desiredHeight</CODE> - see
<A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(byte[], int, int, int, int, int, int, int)"><CODE>decompress(byte[], int, int, int, int, int, int, int)</CODE></A> for
- description<DD><CODE>bufferedImageType</CODE> - the image type of the newly-created
- <code>BufferedImage</code> instance (for instance,
- <code>BufferedImage.TYPE_INT_RGB</code>)<DD><CODE>flags</CODE> - the bitwise OR of one or more of <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJ.FLAG_*</CODE></A>
+ description<DD><CODE>bufferedImageType</CODE> - the image type of the <code>BufferedImage</code>
+ instance that will be created (for instance,
+ <code>BufferedImage.TYPE_INT_RGB</code>)<DD><CODE>flags</CODE> - the bitwise OR of one or more of
+ <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#FLAG_BOTTOMUP"><CODE>TJ.FLAG_*</CODE></A>
<DT><B>Returns:</B><DD>a <code>BufferedImage</code> instance containing the
- decompressed image
+ decompressed/decoded image
<DT><B>Throws:</B>
<DD><CODE>java.lang.Exception</CODE></DL>
</DD>
diff --git a/java/doc/org/libjpegturbo/turbojpeg/TJTransformer.html b/java/doc/org/libjpegturbo/turbojpeg/TJTransformer.html
index 0811b51..75fedf7 100644
--- a/java/doc/org/libjpegturbo/turbojpeg/TJTransformer.html
+++ b/java/doc/org/libjpegturbo/turbojpeg/TJTransformer.html
@@ -52,7 +52,7 @@
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
<A HREF="../../../org/libjpegturbo/turbojpeg/TJTransform.html" title="class in org.libjpegturbo.turbojpeg"><B>PREV CLASS</B></A>
- NEXT CLASS</FONT></TD>
+ <A HREF="../../../org/libjpegturbo/turbojpeg/YUVImage.html" title="class in org.libjpegturbo.turbojpeg"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
<A HREF="../../../index.html?org/libjpegturbo/turbojpeg/TJTransformer.html" target="_top"><B>FRAMES</B></A>
<A HREF="TJTransformer.html" target="_top"><B>NO FRAMES</B></A>
@@ -120,7 +120,7 @@
<TH ALIGN="left"><B>Fields inherited from class org.libjpegturbo.turbojpeg.<A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html" title="class in org.libjpegturbo.turbojpeg">TJDecompressor</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#handle">handle</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#jpegBuf">jpegBuf</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#jpegBufSize">jpegBufSize</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#jpegColorspace">jpegColorspace</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#jpegHeight">jpegHeight</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#jpegSubsamp">jpegSubsamp</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#jpegWidth">jpegWidth</A></CODE></TD>
+<TD><CODE><A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#handle">handle</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#jpegBuf">jpegBuf</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#jpegBufSize">jpegBufSize</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#srcColorspace">srcColorspace</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#srcHeight">srcHeight</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#srcSubsamp">srcSubsamp</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#srcWidth">srcWidth</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#yuvImage">yuvImage</A></CODE></TD>
</TR>
</TABLE>
@@ -143,7 +143,7 @@
<BR>
Create a TurboJPEG lossless transformer instance and associate the JPEG
- image stored in <code>jpegImage</code> with the newly-created instance.</TD>
+ image stored in <code>jpegImage</code> with the newly created instance.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../org/libjpegturbo/turbojpeg/TJTransformer.html#TJTransformer(byte[], int)">TJTransformer</A></B>(byte[] jpegImage,
@@ -152,7 +152,7 @@
<BR>
Create a TurboJPEG lossless transformer instance and associate the JPEG
image of length <code>imageSize</code> bytes stored in
- <code>jpegImage</code> with the newly-created instance.</TD>
+ <code>jpegImage</code> with the newly created instance.</TD>
</TR>
</TABLE>
@@ -170,8 +170,8 @@
<TD><CODE><B><A HREF="../../../org/libjpegturbo/turbojpeg/TJTransformer.html#getTransformedSizes()">getTransformedSizes</A></B>()</CODE>
<BR>
- Returns an array containing the sizes of the transformed JPEG images from
- the most recent call to <A HREF="../../../org/libjpegturbo/turbojpeg/TJTransformer.html#transform(byte[][], org.libjpegturbo.turbojpeg.TJTransform[], int)"><CODE>transform()</CODE></A>.</TD>
+ Returns an array containing the sizes of the transformed JPEG images
+ generated by the most recent transform operation.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -203,7 +203,7 @@
<TH ALIGN="left"><B>Methods inherited from class org.libjpegturbo.turbojpeg.<A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html" title="class in org.libjpegturbo.turbojpeg">TJDecompressor</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#close()">close</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(java.awt.image.BufferedImage, int)">decompress</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(byte[], int, int, int, int, int)">decompress</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(byte[], int, int, int, int, int, int, int)">decompress</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(int[], int, int, int, int, int, int, int)">decompress</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(int, int, int, int)">decompress</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(int, int, int, int, int)">decompress</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompressToYUV(byte[], int)">decompressToYUV</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompressToYUV(byte[], int, int, int, int)">decompressToYUV</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompressToYUV(int)">decompressToYUV</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompressToYUV(int, int, int, int)">decompressToYUV</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#finalize()">finalize</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getColorspace()">getColorspace</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getHeight()">getHeight</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getJPEGBuf()">getJPEGBuf</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getJPEGSize()">getJPEGSize</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getScaledHeight(int, int)">getScaledHeight</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getScaledWidth(int, int)">getScaledWidth</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getSubsamp()">getSubsamp</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getWidth()">getWidth</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#setJPEGImage(byte[], int)">setJPEGImage</A></CODE></TD>
+<TD><CODE><A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#close()">close</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(java.awt.image.BufferedImage, int)">decompress</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(byte[], int, int, int, int, int)">decompress</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(byte[], int, int, int, int, int, int, int)">decompress</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(int[], int, int, int, int, int, int, int)">decompress</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(int, int, int, int)">decompress</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompress(int, int, int, int, int)">decompress</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompressToYUV(byte[], int)">decompressToYUV</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompressToYUV(int)">decompressToYUV</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompressToYUV(int, int, int, int)">decompressToYUV</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#decompressToYUV(org.libjpegturbo.turbojpeg.YUVImage, int)">decompressToYUV</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#finalize()">finalize</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getColorspace()">getColorspace</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getHeight()">getHeight</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getJPEGBuf()">getJPEGBuf</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getJPEGSize()">getJPEGSize</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getScaledHeight(int, int)">getScaledHeight</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getScaledWidth(int, int)">getScaledWidth</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getSourceBuf()">getSourceBuf</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getSourceSize()">getSourceSize</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getSubsamp()">getSubsamp</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#getWidth()">getWidth</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#setJPEGImage(byte[], int)">setJPEGImage</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#setSourceImage(byte[], int)">setSourceImage</A>, <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html#setSourceImage(org.libjpegturbo.turbojpeg.YUVImage)">setSourceImage</A></CODE></TD>
</TR>
</TABLE>
<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
@@ -250,7 +250,7 @@
throws java.lang.Exception</PRE>
<DL>
<DD>Create a TurboJPEG lossless transformer instance and associate the JPEG
- image stored in <code>jpegImage</code> with the newly-created instance.
+ image stored in <code>jpegImage</code> with the newly created instance.
<P>
<DL>
<DT><B>Parameters:</B><DD><CODE>jpegImage</CODE> - JPEG image buffer (size of the JPEG image is assumed to
@@ -269,7 +269,7 @@
<DL>
<DD>Create a TurboJPEG lossless transformer instance and associate the JPEG
image of length <code>imageSize</code> bytes stored in
- <code>jpegImage</code> with the newly-created instance.
+ <code>jpegImage</code> with the newly created instance.
<P>
<DL>
<DT><B>Parameters:</B><DD><CODE>jpegImage</CODE> - JPEG image buffer<DD><CODE>imageSize</CODE> - size of the JPEG image (in bytes)
@@ -313,9 +313,10 @@
receive a JPEG image that has been transformed using the parameters in
<code>transforms[i]</code>. Use <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#bufSize(int, int, int)"><CODE>TJ.bufSize(int, int, int)</CODE></A> to determine the
maximum size for each buffer based on the transformed or cropped width and
- height.<DD><CODE>transforms</CODE> - an array of <A HREF="../../../org/libjpegturbo/turbojpeg/TJTransform.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJTransform</CODE></A> instances, each of
+ height and the level of subsampling used in the source image.<DD><CODE>transforms</CODE> - an array of <A HREF="../../../org/libjpegturbo/turbojpeg/TJTransform.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJTransform</CODE></A> instances, each of
which specifies the transform parameters and/or cropping region for the
- corresponding transformed output image<DD><CODE>flags</CODE> - the bitwise OR of one or more of <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJ.FLAG_*</CODE></A>
+ corresponding transformed output image<DD><CODE>flags</CODE> - the bitwise OR of one or more of
+ <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#FLAG_BOTTOMUP"><CODE>TJ.FLAG_*</CODE></A>
<DT><B>Throws:</B>
<DD><CODE>java.lang.Exception</CODE></DL>
</DD>
@@ -336,7 +337,8 @@
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>transforms</CODE> - an array of <A HREF="../../../org/libjpegturbo/turbojpeg/TJTransform.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJTransform</CODE></A> instances, each of
which specifies the transform parameters and/or cropping region for the
- corresponding transformed output image<DD><CODE>flags</CODE> - the bitwise OR of one or more of <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJ.FLAG_*</CODE></A>
+ corresponding transformed output image<DD><CODE>flags</CODE> - the bitwise OR of one or more of
+ <A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#FLAG_BOTTOMUP"><CODE>TJ.FLAG_*</CODE></A>
<DT><B>Returns:</B><DD>an array of <A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html" title="class in org.libjpegturbo.turbojpeg"><CODE>TJDecompressor</CODE></A> instances, each of
which has a transformed JPEG image associated with it
<DT><B>Throws:</B>
@@ -351,13 +353,13 @@
public int[] <B>getTransformedSizes</B>()
throws java.lang.Exception</PRE>
<DL>
-<DD>Returns an array containing the sizes of the transformed JPEG images from
- the most recent call to <A HREF="../../../org/libjpegturbo/turbojpeg/TJTransformer.html#transform(byte[][], org.libjpegturbo.turbojpeg.TJTransform[], int)"><CODE>transform()</CODE></A>.
+<DD>Returns an array containing the sizes of the transformed JPEG images
+ generated by the most recent transform operation.
<P>
<DD><DL>
-<DT><B>Returns:</B><DD>an array containing the sizes of the transformed JPEG images from
- the most recent call to <A HREF="../../../org/libjpegturbo/turbojpeg/TJTransformer.html#transform(byte[][], org.libjpegturbo.turbojpeg.TJTransform[], int)"><CODE>transform()</CODE></A>
+<DT><B>Returns:</B><DD>an array containing the sizes of the transformed JPEG images
+ generated by the most recent transform operation
<DT><B>Throws:</B>
<DD><CODE>java.lang.Exception</CODE></DL>
</DD>
@@ -392,7 +394,7 @@
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
<A HREF="../../../org/libjpegturbo/turbojpeg/TJTransform.html" title="class in org.libjpegturbo.turbojpeg"><B>PREV CLASS</B></A>
- NEXT CLASS</FONT></TD>
+ <A HREF="../../../org/libjpegturbo/turbojpeg/YUVImage.html" title="class in org.libjpegturbo.turbojpeg"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
<A HREF="../../../index.html?org/libjpegturbo/turbojpeg/TJTransformer.html" target="_top"><B>FRAMES</B></A>
<A HREF="TJTransformer.html" target="_top"><B>NO FRAMES</B></A>
diff --git a/java/doc/org/libjpegturbo/turbojpeg/package-frame.html b/java/doc/org/libjpegturbo/turbojpeg/package-frame.html
index f160418..215bdea 100644
--- a/java/doc/org/libjpegturbo/turbojpeg/package-frame.html
+++ b/java/doc/org/libjpegturbo/turbojpeg/package-frame.html
@@ -42,7 +42,9 @@
<BR>
<A HREF="TJTransform.html" title="class in org.libjpegturbo.turbojpeg" target="classFrame">TJTransform</A>
<BR>
-<A HREF="TJTransformer.html" title="class in org.libjpegturbo.turbojpeg" target="classFrame">TJTransformer</A></FONT></TD>
+<A HREF="TJTransformer.html" title="class in org.libjpegturbo.turbojpeg" target="classFrame">TJTransformer</A>
+<BR>
+<A HREF="YUVImage.html" title="class in org.libjpegturbo.turbojpeg" target="classFrame">YUVImage</A></FONT></TD>
</TR>
</TABLE>
diff --git a/java/doc/org/libjpegturbo/turbojpeg/package-summary.html b/java/doc/org/libjpegturbo/turbojpeg/package-summary.html
index 505512c..12c047b 100644
--- a/java/doc/org/libjpegturbo/turbojpeg/package-summary.html
+++ b/java/doc/org/libjpegturbo/turbojpeg/package-summary.html
@@ -122,6 +122,11 @@
<TD WIDTH="15%"><B><A HREF="../../../org/libjpegturbo/turbojpeg/TJTransformer.html" title="class in org.libjpegturbo.turbojpeg">TJTransformer</A></B></TD>
<TD>TurboJPEG lossless transformer</TD>
</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../org/libjpegturbo/turbojpeg/YUVImage.html" title="class in org.libjpegturbo.turbojpeg">YUVImage</A></B></TD>
+<TD>This class encapsulates a YUV planar image buffer and the metadata
+ associated with it.</TD>
+</TR>
</TABLE>
diff --git a/java/doc/org/libjpegturbo/turbojpeg/package-tree.html b/java/doc/org/libjpegturbo/turbojpeg/package-tree.html
index e13143d..5910278 100644
--- a/java/doc/org/libjpegturbo/turbojpeg/package-tree.html
+++ b/java/doc/org/libjpegturbo/turbojpeg/package-tree.html
@@ -95,7 +95,7 @@
</UL>
<LI TYPE="circle">org.libjpegturbo.turbojpeg.<A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg"><B>TJ</B></A><LI TYPE="circle">org.libjpegturbo.turbojpeg.<A HREF="../../../org/libjpegturbo/turbojpeg/TJCompressor.html" title="class in org.libjpegturbo.turbojpeg"><B>TJCompressor</B></A><LI TYPE="circle">org.libjpegturbo.turbojpeg.<A HREF="../../../org/libjpegturbo/turbojpeg/TJDecompressor.html" title="class in org.libjpegturbo.turbojpeg"><B>TJDecompressor</B></A><UL>
<LI TYPE="circle">org.libjpegturbo.turbojpeg.<A HREF="../../../org/libjpegturbo/turbojpeg/TJTransformer.html" title="class in org.libjpegturbo.turbojpeg"><B>TJTransformer</B></A></UL>
-<LI TYPE="circle">org.libjpegturbo.turbojpeg.<A HREF="../../../org/libjpegturbo/turbojpeg/TJScalingFactor.html" title="class in org.libjpegturbo.turbojpeg"><B>TJScalingFactor</B></A></UL>
+<LI TYPE="circle">org.libjpegturbo.turbojpeg.<A HREF="../../../org/libjpegturbo/turbojpeg/TJScalingFactor.html" title="class in org.libjpegturbo.turbojpeg"><B>TJScalingFactor</B></A><LI TYPE="circle">org.libjpegturbo.turbojpeg.<A HREF="../../../org/libjpegturbo/turbojpeg/YUVImage.html" title="class in org.libjpegturbo.turbojpeg"><B>YUVImage</B></A></UL>
</UL>
<H2>
Interface Hierarchy
diff --git a/java/doc/overview-tree.html b/java/doc/overview-tree.html
index 1c12b10..563b579 100644
--- a/java/doc/overview-tree.html
+++ b/java/doc/overview-tree.html
@@ -97,7 +97,7 @@
</UL>
<LI TYPE="circle">org.libjpegturbo.turbojpeg.<A HREF="org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg"><B>TJ</B></A><LI TYPE="circle">org.libjpegturbo.turbojpeg.<A HREF="org/libjpegturbo/turbojpeg/TJCompressor.html" title="class in org.libjpegturbo.turbojpeg"><B>TJCompressor</B></A><LI TYPE="circle">org.libjpegturbo.turbojpeg.<A HREF="org/libjpegturbo/turbojpeg/TJDecompressor.html" title="class in org.libjpegturbo.turbojpeg"><B>TJDecompressor</B></A><UL>
<LI TYPE="circle">org.libjpegturbo.turbojpeg.<A HREF="org/libjpegturbo/turbojpeg/TJTransformer.html" title="class in org.libjpegturbo.turbojpeg"><B>TJTransformer</B></A></UL>
-<LI TYPE="circle">org.libjpegturbo.turbojpeg.<A HREF="org/libjpegturbo/turbojpeg/TJScalingFactor.html" title="class in org.libjpegturbo.turbojpeg"><B>TJScalingFactor</B></A></UL>
+<LI TYPE="circle">org.libjpegturbo.turbojpeg.<A HREF="org/libjpegturbo/turbojpeg/TJScalingFactor.html" title="class in org.libjpegturbo.turbojpeg"><B>TJScalingFactor</B></A><LI TYPE="circle">org.libjpegturbo.turbojpeg.<A HREF="org/libjpegturbo/turbojpeg/YUVImage.html" title="class in org.libjpegturbo.turbojpeg"><B>YUVImage</B></A></UL>
</UL>
<H2>
Interface Hierarchy
diff --git a/java/org/libjpegturbo/turbojpeg/TJCompressor.java b/java/org/libjpegturbo/turbojpeg/TJCompressor.java
index ed8d8e1..0debf53 100644
--- a/java/org/libjpegturbo/turbojpeg/TJCompressor.java
+++ b/java/org/libjpegturbo/turbojpeg/TJCompressor.java
@@ -47,18 +47,8 @@
}
/**
- * @deprecated Use
- * {@link #TJCompressor(byte[], int, int, int, int, int, int)} instead.
- */
- @Deprecated
- public TJCompressor(byte[] srcImage, int width, int pitch, int height,
- int pixelFormat) throws Exception {
- setSourceImage(srcImage, width, pitch, height, pixelFormat);
- }
-
- /**
* Create a TurboJPEG compressor instance and associate the uncompressed
- * source image stored in <code>srcImage</code> with the newly-created
+ * source image stored in <code>srcImage</code> with the newly created
* instance.
*
* @param srcImage see {@link #setSourceImage} for description
@@ -74,7 +64,7 @@
* @param height see {@link #setSourceImage} for description
*
* @param pixelFormat pixel format of the source image (one of
- * {@link TJ TJ.PF_*})
+ * {@link TJ#PF_RGB TJ.PF_*})
*/
public TJCompressor(byte[] srcImage, int x, int y, int width, int pitch,
int height, int pixelFormat) throws Exception {
@@ -82,8 +72,18 @@
}
/**
+ * @deprecated Use
+ * {@link #TJCompressor(byte[], int, int, int, int, int, int)} instead.
+ */
+ @Deprecated
+ public TJCompressor(byte[] srcImage, int width, int pitch, int height,
+ int pixelFormat) throws Exception {
+ setSourceImage(srcImage, width, pitch, height, pixelFormat);
+ }
+
+ /**
* Create a TurboJPEG compressor instance and associate the uncompressed
- * source image stored in <code>srcImage</code> with the newly-created
+ * source image stored in <code>srcImage</code> with the newly created
* instance.
*
* @param srcImage see
@@ -107,34 +107,35 @@
}
/**
- * Associate an uncompressed source image with this compressor instance.
+ * Associate an uncompressed RGB, grayscale, or CMYK source image with this
+ * compressor instance.
*
* @param srcImage image buffer containing RGB, grayscale, or CMYK pixels to
- * be compressed
+ * be compressed or encoded
*
- * @param x x offset (in pixels) of the region from which the JPEG image
- * should be compressed, relative to the start of <code>srcImage</code>.
+ * @param x x offset (in pixels) of the region in the source image from which
+ * the JPEG or YUV image should be compressed/encoded
*
- * @param y y offset (in pixels) of the region from which the JPEG image
- * should be compressed, relative to the start of <code>srcImage</code>.
+ * @param y y offset (in pixels) of the region in the source image from which
+ * the JPEG or YUV image should be compressed/encoded
*
* @param width width (in pixels) of the region in the source image from
- * which the JPEG image should be compressed.
+ * which the JPEG or YUV image should be compressed/encoded
*
* @param pitch bytes per line of the source image. Normally, this should be
* <code>width * TJ.pixelSize(pixelFormat)</code> if the source image is
* unpadded, but you can use this parameter to, for instance, specify that
* the scanlines in the source image are padded to a 4-byte boundary or to
- * compress a JPEG image from a region of a larger source image. You can
- * also be clever and use this parameter to skip lines, etc. Setting this
- * parameter to 0 is the equivalent of setting it to <code>width *
- * TJ.pixelSize(pixelFormat)</code>.
+ * compress/encode a JPEG or YUV image from a region of a larger source
+ * image. You can also be clever and use this parameter to skip lines, etc.
+ * Setting this parameter to 0 is the equivalent of setting it to
+ * <code>width * TJ.pixelSize(pixelFormat)</code>.
*
* @param height height (in pixels) of the region in the source image from
- * which the JPEG image should be compressed.
+ * which the JPEG or YUV image should be compressed/encoded
*
* @param pixelFormat pixel format of the source image (one of
- * {@link TJ TJ.PF_*})
+ * {@link TJ#PF_RGB TJ.PF_*})
*/
public void setSourceImage(byte[] srcImage, int x, int y, int width,
int pitch, int height, int pixelFormat)
@@ -154,7 +155,7 @@
srcX = x;
srcY = y;
srcBufInt = null;
- srcIsYUV = false;
+ srcYUVImage = null;
}
/**
@@ -169,22 +170,25 @@
}
/**
- * Associate an uncompressed source image with this compressor instance.
+ * Associate an uncompressed RGB or grayscale source image with this
+ * compressor instance.
*
* @param srcImage a <code>BufferedImage</code> instance containing RGB or
- * grayscale pixels to be compressed
+ * grayscale pixels to be compressed or encoded
*
* @param x x offset (in pixels) of the region in the source image from which
- * the JPEG image should be compressed
+ * the JPEG or YUV image should be compressed/encoded
*
* @param y y offset (in pixels) of the region in the source image from which
- * the JPEG image should be compressed
+ * the JPEG or YUV image should be compressed/encoded
*
* @param width width (in pixels) of the region in the source image from
- * which the JPEG image should be compressed (0 = compress the whole image)
+ * which the JPEG or YUV image should be compressed/encoded (0 = use the
+ * width of the source image)
*
* @param height height (in pixels) of the region in the source image from
- * which the JPEG image should be compressed (0 = compress the whole image)
+ * which the JPEG or YUV image should be compressed/encoded (0 = use the
+ * height of the source image)
*/
public void setSourceImage(BufferedImage srcImage, int x, int y, int width,
int height) throws Exception {
@@ -248,42 +252,22 @@
srcBuf = db.getData();
srcBufInt = null;
}
+ srcYUVImage = null;
}
/**
* Associate an uncompressed YUV planar source image with this compressor
* instance.
*
- * @param srcImage image buffer containing a YUV planar image to be
- * compressed. The Y, U (Cb), and V (Cr) image planes should be stored
- * sequentially in the buffer, and the size of each plane is determined by
- * the specified width, height, and padding, as well as the level of
- * chrominance subsampling (specified using {@link #setSubsamp}.) If the
- * chrominance components are subsampled along the horizontal dimension, then
- * the width of the luminance plane should be padded to the nearest multiple
- * of 2 (same goes for the height of the luminance plane, if the chrominance
- * components are subsampled along the vertical dimension.) This is
- * irrespective of any additional padding specified in the <code>pad</code>
- * parameter.
- *
- * @param width width (in pixels) of the source image
- *
- * @param pad the line padding used in the source image. For instance, if
- * each line in each plane of the YUV image is padded to the nearest multiple
- * of 4 bytes, then <code>pad</code> should be set to 4.
- *
- * @param height height (in pixels) of the source image
+ * @param srcImage YUV planar image to be compressed
*/
- public void setSourceImageYUV(byte[] srcImage, int width, int pad,
- int height) throws Exception {
+ public void setSourceImage(YUVImage srcImage) throws Exception {
if (handle == 0) init();
- if (srcImage == null || width < 1 || pad < 1 || height < 1)
- throw new Exception("Invalid argument in setSourceImageYUV()");
- srcBuf = srcImage;
- srcWidth = width;
- srcYUVPad = pad;
- srcHeight = height;
- srcIsYUV = true;
+ if (srcImage == null)
+ throw new Exception("Invalid argument in setSourceImage()");
+ srcYUVImage = srcImage;
+ srcBuf = null;
+ srcBufInt = null;
}
/**
@@ -296,12 +280,16 @@
* sensitive to small changes in brightness than to small changes in color.)
* This is called "chrominance subsampling".
* <p>
- * NOTE: When compressing a YUV planar image into a JPEG image, this method
- * also specifies the level of chrominance subsampling used in the source
- * image.
+ * NOTE: This method has no effect when compressing a JPEG image from a YUV
+ * planar source. In that case, the level of chrominance subsampling in
+ * the JPEG image is determined by the source. Further, this method has no
+ * effect when encoding to a pre-allocated {@link YUVImage} instance. In
+ * that case, the level of chrominance subsampling is determined by the
+ * destination.
*
- * @param newSubsamp the new level of chrominance subsampling (one of
- * {@link TJ TJ.SAMP_*})
+ * @param newSubsamp the level of chrominance subsampling to use in
+ * subsequent compress/encode oeprations (one of
+ * {@link TJ#SAMP_444 TJ.SAMP_*})
*/
public void setSubsamp(int newSubsamp) throws Exception {
if (newSubsamp < 0 || newSubsamp >= TJ.NUMSAMP)
@@ -327,23 +315,29 @@
*
* @param dstBuf buffer that will receive the JPEG image. Use
* {@link TJ#bufSize} to determine the maximum size for this buffer based on
- * the image width, height, and level of chrominance subsampling.
+ * the source image's width and height and the desired level of chrominance
+ * subsampling.
*
- * @param flags the bitwise OR of one or more of {@link TJ TJ.FLAG_*}
+ * @param flags the bitwise OR of one or more of
+ * {@link TJ#FLAG_BOTTOMUP TJ.FLAG_*}
*/
public void compress(byte[] dstBuf, int flags) throws Exception {
if (dstBuf == null || flags < 0)
throw new Exception("Invalid argument in compress()");
- if (srcBuf == null && (srcBufInt == null || srcIsYUV))
+ if (srcBuf == null && srcBufInt == null && srcYUVImage == null)
throw new Exception(NO_ASSOC_ERROR);
if (jpegQuality < 0)
throw new Exception("JPEG Quality not set");
- if (subsamp < 0)
+ if (subsamp < 0 && srcYUVImage == null)
throw new Exception("Subsampling level not set");
- if (srcIsYUV)
- compressedSize = compressFromYUV(srcBuf, srcWidth, srcYUVPad, srcHeight,
- subsamp, dstBuf, jpegQuality, flags);
+ if (srcYUVImage != null)
+ compressedSize = compressFromYUV(srcYUVImage.getBuf(),
+ srcYUVImage.getWidth(),
+ srcYUVImage.getPad(),
+ srcYUVImage.getHeight(),
+ srcYUVImage.getSubsamp(),
+ dstBuf, jpegQuality, flags);
else if (srcBuf != null) {
if (srcX >= 0 && srcY >= 0)
compressedSize = compress(srcBuf, srcX, srcY, srcWidth, srcPitch,
@@ -369,7 +363,8 @@
* Compress the uncompressed source image associated with this compressor
* instance and return a buffer containing a JPEG image.
*
- * @param flags the bitwise OR of one or more of {@link TJ TJ.FLAG_*}
+ * @param flags the bitwise OR of one or more of
+ * {@link TJ#FLAG_BOTTOMUP TJ.FLAG_*}
*
* @return a buffer containing a JPEG image. The length of this buffer will
* not be equal to the size of the JPEG image. Use {@link
@@ -406,82 +401,100 @@
return compress(flags);
}
-
- /**
- * Set the plane padding for subsequent YUV encode operations.
- *
- * @param pad the width of each line in each plane of the YUV image will be
- * padded to the nearest multiple of this number of bytes (must be a
- * power of 2.) The default padding is 4 bytes, which generates
- * images suitable for direct video display.
- */
- public void setYUVPad(int pad) throws Exception {
- if(pad < 1 || ((pad & (pad - 1)) != 0))
- throw new Exception("Invalid argument in setYUVPad()");
- yuvPad = pad;
- }
-
/**
* Encode the uncompressed source image associated with this compressor
- * instance and output a YUV planar image to the given destination buffer.
- * This method uses the accelerated color conversion routines in TurboJPEG's
- * underlying codec but does not execute any of the other steps in the JPEG
- * compression process. The Y, U (Cb), and V (Cr) image planes are stored
- * sequentially into the destination buffer, and the size of each plane is
- * determined by the width and height of the source image, as well as the
- * specified padding and level of chrominance subsampling. If the
- * chrominance components are subsampled along the horizontal dimension, then
- * the width of the luminance plane is padded to the nearest multiple of 2 in
- * the output image (same goes for the height of the luminance plane, if the
- * chrominance components are subsampled along the vertical dimension.)
- * <p>
- * NOTE: Technically, the JPEG format uses the YCbCr colorspace, but per the
- * convention of the digital video community, the TurboJPEG API uses "YUV" to
- * refer to an image format consisting of Y, Cb, and Cr image planes.
+ * instance into a YUV planar image and store it in the given
+ * <code>YUVImage</code> instance. This method uses the accelerated color
+ * conversion routines in TurboJPEG's underlying codec but does not execute
+ * any of the other steps in the JPEG compression process. Encoding
+ * CMYK source images to YUV is not supported.
*
- * @param dstBuf buffer that will receive the YUV planar image. Use
- * {@link TJ#bufSizeYUV} to determine the appropriate size for this buffer
- * based on the image width, height, and level of chrominance subsampling.
+ * @param dstImage {@link YUVImage} instance that will receive the YUV planar
+ * image
*
- * @param flags the bitwise OR of one or more of {@link TJ TJ.FLAG_*}
+ * @param flags the bitwise OR of one or more of
+ * {@link TJ#FLAG_BOTTOMUP TJ.FLAG_*}
*/
- public void encodeYUV(byte[] dstBuf, int flags) throws Exception {
- if (dstBuf == null || flags < 0)
- throw new Exception("Invalid argument in compress()");
+ public void encodeYUV(YUVImage dstImage, int flags) throws Exception {
+ if (dstImage == null || flags < 0)
+ throw new Exception("Invalid argument in encodeYUV()");
if (srcBuf == null && srcBufInt == null)
throw new Exception(NO_ASSOC_ERROR);
- if (srcIsYUV)
+ if (srcYUVImage != null)
throw new Exception("Source image is not correct type");
if (subsamp < 0)
throw new Exception("Subsampling level not set");
+ if (srcWidth != dstImage.getWidth() || srcHeight != dstImage.getHeight())
+ throw new Exception("Destination image is the wrong size");
if (srcBufInt != null) {
- encodeYUV(srcBufInt, srcWidth, srcStride, srcHeight, srcPixelFormat,
- dstBuf, yuvPad, subsamp, flags);
+ encodeYUV(srcBufInt, srcX, srcY, srcWidth, srcStride, srcHeight,
+ srcPixelFormat, dstImage.getBuf(), dstImage.getPad(),
+ dstImage.getSubsamp(), flags);
} else {
- encodeYUV(srcBuf, srcWidth, srcPitch, srcHeight, srcPixelFormat, dstBuf,
- yuvPad, subsamp, flags);
+ encodeYUV(srcBuf, srcX, srcY, srcWidth, srcPitch, srcHeight,
+ srcPixelFormat, dstImage.getBuf(), dstImage.getPad(),
+ dstImage.getSubsamp(), flags);
}
- compressedSize = TJ.bufSizeYUV(srcWidth, yuvPad, srcHeight, subsamp);
+ compressedSize = dstImage.getSize();
+ }
+
+ /**
+ * @deprecated Use {@link #encodeYUV(YUVImage, int)} instead.
+ */
+ @Deprecated
+ public void encodeYUV(byte[] dstBuf, int flags) throws Exception {
+ if(dstBuf == null)
+ throw new Exception("Invalid argument in encodeYUV()");
+ if (srcWidth < 1 || srcHeight < 1)
+ throw new Exception(NO_ASSOC_ERROR);
+ if (subsamp < 0)
+ throw new Exception("Subsampling level not set");
+ YUVImage yuvImage = new YUVImage(dstBuf, srcWidth, 4, srcHeight, subsamp);
+ encodeYUV(yuvImage, flags);
}
/**
* Encode the uncompressed source image associated with this compressor
- * instance and return a buffer containing a YUV planar image. See
- * {@link #encodeYUV(byte[], int)} for more detail.
+ * instance into a YUV planar image and return a <code>YUVImage</code>
+ * instance containing the encoded image. This method uses the accelerated
+ * color conversion routines in TurboJPEG's underlying codec but does not
+ * execute any of the other steps in the JPEG compression process. Encoding
+ * CMYK source images to YUV is not supported.
*
- * @param flags the bitwise OR of one or more of {@link TJ TJ.FLAG_*}
+ * @param pad the width of each line in each plane of the YUV image will be
+ * padded to the nearest multiple of this number of bytes (must be a power of
+ * 2.)
*
- * @return a buffer containing a YUV planar image
+ * @param flags the bitwise OR of one or more of
+ * {@link TJ#FLAG_BOTTOMUP TJ.FLAG_*}
+ *
+ * @return a YUV planar image
*/
+ public YUVImage encodeYUV(int pad, int flags) throws Exception {
+ if (srcWidth < 1 || srcHeight < 1)
+ throw new Exception(NO_ASSOC_ERROR);
+ if (subsamp < 0)
+ throw new Exception("Subsampling level not set");
+ if(pad < 1 || ((pad & (pad - 1)) != 0))
+ throw new Exception("Invalid argument in encodeYUV()");
+ YUVImage yuvImage = new YUVImage(srcWidth, pad, srcHeight, subsamp);
+ encodeYUV(yuvImage, flags);
+ return yuvImage;
+ }
+
+ /**
+ * @deprecated Use {@link #encodeYUV(int, int)} instead.
+ */
+ @Deprecated
public byte[] encodeYUV(int flags) throws Exception {
if (srcWidth < 1 || srcHeight < 1)
throw new Exception(NO_ASSOC_ERROR);
if (subsamp < 0)
throw new Exception("Subsampling level not set");
- byte[] buf = new byte[TJ.bufSizeYUV(srcWidth, yuvPad, srcHeight, subsamp)];
- encodeYUV(buf, flags);
- return buf;
+ YUVImage yuvImage = new YUVImage(srcWidth, 4, srcHeight, subsamp);
+ encodeYUV(yuvImage, flags);
+ return yuvImage.getBuf();
}
/**
@@ -563,17 +576,17 @@
int height, int pixelFormat, byte[] dstBuf, int subsamp, int flags)
throws Exception; // deprecated
- private native void encodeYUV(byte[] srcBuf, int width, int pitch,
- int height, int pixelFormat, byte[] dstBuf, int pad, int subsamp,
- int flags) throws Exception;
+ private native void encodeYUV(byte[] srcBuf, int x, int y, int width,
+ int pitch, int height, int pixelFormat, byte[] dstBuf, int pad,
+ int subsamp, int flags) throws Exception;
private native void encodeYUV(int[] srcBuf, int width, int stride,
int height, int pixelFormat, byte[] dstBuf, int subsamp, int flags)
throws Exception; // deprecated
- private native void encodeYUV(int[] srcBuf, int width, int pitch,
- int height, int pixelFormat, byte[] dstBuf, int pad, int subsamp,
- int flags) throws Exception;
+ private native void encodeYUV(int[] srcBuf, int x, int y, int width,
+ int pitch, int height, int pixelFormat, byte[] dstBuf, int pad,
+ int subsamp, int flags) throws Exception;
static {
TJLoader.load();
@@ -589,8 +602,7 @@
private int srcPitch = 0;
private int srcStride = 0;
private int srcPixelFormat = -1;
- private int srcYUVPad = -1;
- private boolean srcIsYUV;
+ private YUVImage srcYUVImage = null;
private int subsamp = -1;
private int jpegQuality = -1;
private int compressedSize = 0;
diff --git a/java/org/libjpegturbo/turbojpeg/TJDecompressor.java b/java/org/libjpegturbo/turbojpeg/TJDecompressor.java
index d14a989..8305721 100644
--- a/java/org/libjpegturbo/turbojpeg/TJDecompressor.java
+++ b/java/org/libjpegturbo/turbojpeg/TJDecompressor.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C)2011-2013 D. R. Commander. All Rights Reserved.
+ * Copyright (C)2011-2014 D. R. Commander. All Rights Reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
@@ -37,7 +37,7 @@
public class TJDecompressor {
private static final String NO_ASSOC_ERROR =
- "No JPEG image is associated with this instance";
+ "No source image is associated with this instance";
/**
* Create a TurboJPEG decompresssor instance.
@@ -47,21 +47,21 @@
}
/**
- * Create a TurboJPEG decompressor instance and associate the JPEG image
- * stored in <code>jpegImage</code> with the newly-created instance.
+ * Create a TurboJPEG decompressor instance and associate the JPEG source
+ * image stored in <code>jpegImage</code> with the newly created instance.
*
* @param jpegImage JPEG image buffer (size of the JPEG image is assumed to
* be the length of the array)
*/
public TJDecompressor(byte[] jpegImage) throws Exception {
init();
- setJPEGImage(jpegImage, jpegImage.length);
+ setSourceImage(jpegImage, jpegImage.length);
}
/**
- * Create a TurboJPEG decompressor instance and associate the JPEG image
- * of length <code>imageSize</code> bytes stored in <code>jpegImage</code>
- * with the newly-created instance.
+ * Create a TurboJPEG decompressor instance and associate the JPEG source
+ * image of length <code>imageSize</code> bytes stored in
+ * <code>jpegImage</code> with the newly created instance.
*
* @param jpegImage JPEG image buffer
*
@@ -69,87 +69,150 @@
*/
public TJDecompressor(byte[] jpegImage, int imageSize) throws Exception {
init();
- setJPEGImage(jpegImage, imageSize);
+ setSourceImage(jpegImage, imageSize);
+ }
+
+ /**
+ * Create a TurboJPEG decompressor instance and associate the YUV planar
+ * source image stored in <code>yuvImage</code> with the newly created
+ * instance.
+ *
+ * @param yuvImage {@link YUVImage} instance containing a YUV planar
+ * image to be decoded
+ */
+ public TJDecompressor(YUVImage yuvImage) throws Exception {
+ init();
+ setSourceImage(yuvImage);
}
/**
* Associate the JPEG image of length <code>imageSize</code> bytes stored in
- * <code>jpegImage</code> with this decompressor instance. This image will
+ * <code>srcImage</code> with this decompressor instance. This image will
* be used as the source image for subsequent decompress operations.
*
- * @param jpegImage JPEG image buffer
+ * @param srcImage JPEG image buffer
*
* @param imageSize size of the JPEG image (in bytes)
*/
- public void setJPEGImage(byte[] jpegImage, int imageSize) throws Exception {
- if (jpegImage == null || imageSize < 1)
- throw new Exception("Invalid argument in setJPEGImage()");
- jpegBuf = jpegImage;
+ public void setSourceImage(byte[] srcImage, int imageSize)
+ throws Exception {
+ if (srcImage == null || imageSize < 1)
+ throw new Exception("Invalid argument in setSourceImage()");
+ jpegBuf = srcImage;
jpegBufSize = imageSize;
decompressHeader(jpegBuf, jpegBufSize);
+ yuvImage = null;
}
/**
- * Returns the width of the JPEG image associated with this decompressor
- * instance.
- *
- * @return the width of the JPEG image associated with this decompressor
- * instance
+ * @deprecated Use {@link #setSourceImage(byte[], int)} instead.
*/
- public int getWidth() throws Exception {
- if (jpegWidth < 1)
- throw new Exception(NO_ASSOC_ERROR);
- return jpegWidth;
+ @Deprecated
+ public void setJPEGImage(byte[] jpegImage, int imageSize) throws Exception {
+ setSourceImage(jpegImage, imageSize);
}
/**
- * Returns the height of the JPEG image associated with this decompressor
- * instance.
+ * Associate the specified YUV planar source image with this decompressor
+ * instance. Subsequent decompress operations will decode this image into an
+ * RGB or grayscale destination image.
*
- * @return the height of the JPEG image associated with this decompressor
- * instance
+ * @param srcImage {@link YUVImage} instance containing a YUV planar image to
+ * be decoded
*/
- public int getHeight() throws Exception {
- if (jpegHeight < 1)
- throw new Exception(NO_ASSOC_ERROR);
- return jpegHeight;
+ public void setSourceImage(YUVImage srcImage) throws Exception {
+ if (srcImage == null)
+ throw new Exception("Invalid argument in setSourceImage()");
+ yuvImage = srcImage;
+ jpegBuf = null;
+ jpegBufSize = 0;
}
- /**
- * Returns the level of chrominance subsampling used in the JPEG image
- * associated with this decompressor instance. See {@link TJ TJ.SAMP_*}.
- *
- * @return the level of chrominance subsampling used in the JPEG image
- * associated with this decompressor instance
- */
- public int getSubsamp() throws Exception {
- if (jpegSubsamp < 0)
- throw new Exception(NO_ASSOC_ERROR);
- if (jpegSubsamp >= TJ.NUMSAMP)
- throw new Exception("JPEG header information is invalid");
- return jpegSubsamp;
- }
/**
- * Returns the colorspace used in the JPEG image associated with this
- * decompressor instance. See {@link TJ TJ.CS_*}.
+ * Returns the width of the source image (JPEG or YUV) associated with this
+ * decompressor instance.
*
- * @return the colorspace used in the JPEG image associated with this
+ * @return the width of the source image (JPEG or YUV) associated with this
* decompressor instance
*/
- public int getColorspace() throws Exception {
- if (jpegColorspace < 0)
+ public int getWidth() throws Exception {
+ if (yuvImage != null)
+ return yuvImage.getWidth();
+ if (srcWidth < 1)
throw new Exception(NO_ASSOC_ERROR);
- if (jpegColorspace >= TJ.NUMCS)
- throw new Exception("JPEG header information is invalid");
- return jpegColorspace;
+ return srcWidth;
}
/**
- * Returns the JPEG image buffer associated with this decompressor instance.
+ * Returns the height of the source image (JPEG or YUV) associated with this
+ * decompressor instance.
*
- * @return the JPEG image buffer associated with this decompressor instance
+ * @return the height of the source image (JPEG or YUV) associated with this
+ * decompressor instance
*/
+ public int getHeight() throws Exception {
+ if (yuvImage != null)
+ return yuvImage.getHeight();
+ if (srcHeight < 1)
+ throw new Exception(NO_ASSOC_ERROR);
+ return srcHeight;
+ }
+
+ /**
+ * Returns the level of chrominance subsampling used in the source image
+ * (JPEG or YUV) associated with this decompressor instance. See
+ * {@link TJ#SAMP_444 TJ.SAMP_*}.
+ *
+ * @return the level of chrominance subsampling used in the source image
+ * (JPEG or YUV) associated with this decompressor instance
+ */
+ public int getSubsamp() throws Exception {
+ if (yuvImage != null)
+ return yuvImage.getSubsamp();
+ if (srcSubsamp < 0)
+ throw new Exception(NO_ASSOC_ERROR);
+ if (srcSubsamp >= TJ.NUMSAMP)
+ throw new Exception("JPEG header information is invalid");
+ return srcSubsamp;
+ }
+
+ /**
+ * Returns the colorspace used in the source image (JPEG or YUV) associated
+ * with this decompressor instance. See {@link TJ#CS_RGB TJ.CS_*}. If the
+ * source image is YUV, then this always returns {@link TJ#CS_YCbCr}.
+ *
+ * @return the colorspace used in the source image (JPEG or YUV) associated
+ * with this decompressor instance
+ */
+ public int getColorspace() throws Exception {
+ if (yuvImage != null)
+ return TJ.CS_YCbCr;
+ if (srcColorspace < 0)
+ throw new Exception(NO_ASSOC_ERROR);
+ if (srcColorspace >= TJ.NUMCS)
+ throw new Exception("JPEG header information is invalid");
+ return srcColorspace;
+ }
+
+ /**
+ * Returns the source image buffer associated with this decompressor
+ * instance.
+ *
+ * @return the source image buffer associated with this decompressor instance
+ */
+ public byte[] getSourceBuf() throws Exception {
+ if (yuvImage != null)
+ return yuvImage.getBuf();
+ if (jpegBuf == null)
+ throw new Exception(NO_ASSOC_ERROR);
+ return jpegBuf;
+ }
+
+ /**
+ * @deprecated Use {@link #getSourceBuf} instead.
+ */
+ @Deprecated
public byte[] getJPEGBuf() throws Exception {
if (jpegBuf == null)
throw new Exception(NO_ASSOC_ERROR);
@@ -157,18 +220,29 @@
}
/**
- * Returns the size of the JPEG image (in bytes) associated with this
+ * Returns the size of the source image (in bytes) associated with this
* decompressor instance.
*
- * @return the size of the JPEG image (in bytes) associated with this
+ * @return the size of the source image (in bytes) associated with this
* decompressor instance
*/
- public int getJPEGSize() throws Exception {
+ public int getSourceSize() throws Exception {
+ if (yuvImage != null)
+ return yuvImage.getSize();
if (jpegBufSize < 1)
throw new Exception(NO_ASSOC_ERROR);
return jpegBufSize;
}
+ /**
+ * @deprecated Use {@link #getSourceSize} instead.
+ */
+ @Deprecated
+ public int getJPEGSize() throws Exception {
+ if (jpegBufSize < 1)
+ throw new Exception(NO_ASSOC_ERROR);
+ return jpegBufSize;
+ }
/**
* Returns the width of the largest scaled-down image that the TurboJPEG
@@ -191,19 +265,19 @@
*/
public int getScaledWidth(int desiredWidth, int desiredHeight)
throws Exception {
- if (jpegWidth < 1 || jpegHeight < 1)
+ if (srcWidth < 1 || srcHeight < 1)
throw new Exception(NO_ASSOC_ERROR);
if (desiredWidth < 0 || desiredHeight < 0)
throw new Exception("Invalid argument in getScaledWidth()");
TJScalingFactor[] sf = TJ.getScalingFactors();
if (desiredWidth == 0)
- desiredWidth = jpegWidth;
+ desiredWidth = srcWidth;
if (desiredHeight == 0)
- desiredHeight = jpegHeight;
- int scaledWidth = jpegWidth, scaledHeight = jpegHeight;
+ desiredHeight = srcHeight;
+ int scaledWidth = srcWidth, scaledHeight = srcHeight;
for (int i = 0; i < sf.length; i++) {
- scaledWidth = sf[i].getScaled(jpegWidth);
- scaledHeight = sf[i].getScaled(jpegHeight);
+ scaledWidth = sf[i].getScaled(srcWidth);
+ scaledHeight = sf[i].getScaled(srcHeight);
if (scaledWidth <= desiredWidth && scaledHeight <= desiredHeight)
break;
}
@@ -233,19 +307,19 @@
*/
public int getScaledHeight(int desiredWidth, int desiredHeight)
throws Exception {
- if (jpegWidth < 1 || jpegHeight < 1)
+ if (srcWidth < 1 || srcHeight < 1)
throw new Exception(NO_ASSOC_ERROR);
if (desiredWidth < 0 || desiredHeight < 0)
throw new Exception("Invalid argument in getScaledHeight()");
TJScalingFactor[] sf = TJ.getScalingFactors();
if (desiredWidth == 0)
- desiredWidth = jpegWidth;
+ desiredWidth = srcWidth;
if (desiredHeight == 0)
- desiredHeight = jpegHeight;
- int scaledWidth = jpegWidth, scaledHeight = jpegHeight;
+ desiredHeight = srcHeight;
+ int scaledWidth = srcWidth, scaledHeight = srcHeight;
for (int i = 0; i < sf.length; i++) {
- scaledWidth = sf[i].getScaled(jpegWidth);
- scaledHeight = sf[i].getScaled(jpegHeight);
+ scaledWidth = sf[i].getScaled(srcWidth);
+ scaledHeight = sf[i].getScaled(srcHeight);
if (scaledWidth <= desiredWidth && scaledHeight <= desiredHeight)
break;
}
@@ -255,73 +329,90 @@
}
/**
- * Decompress the JPEG source image associated with this decompressor
- * instance and output a decompressed image to the given destination buffer.
+ * Decompress the JPEG source image or decode the YUV source image associated
+ * with this decompressor instance and output a grayscale, RGB, or CMYK image
+ * to the given destination buffer.
*
- * @param dstBuf buffer that will receive the decompressed image. This
- * buffer should normally be <code>pitch * scaledHeight</code> bytes in size,
- * where <code>scaledHeight</code> can be determined by calling <code>
+ * @param dstBuf buffer that will receive the decompressed/decoded image.
+ * If the source image is a JPEG image, then this buffer should normally be
+ * <code>pitch * scaledHeight</code> bytes in size, where
+ * <code>scaledHeight</code> can be determined by calling <code>
* scalingFactor.{@link TJScalingFactor#getScaled getScaled}(jpegHeight)
* </code> with one of the scaling factors returned from {@link
- * TJ#getScalingFactors} or by calling {@link #getScaledHeight}. However,
- * the buffer may also be larger than the dimensions of the JPEG image, in
- * which case the <code>x</code>, <code>y</code>, and <code>pitch</code>
- * parameters can be used to specify the region into which the JPEG image
- * should be decompressed.
+ * TJ#getScalingFactors} or by calling {@link #getScaledHeight}. If the
+ * source image is a YUV image, then this buffer should normally be
+ * <code>pitch * height</code> bytes in size, where <code>height</code> is
+ * the height of the YUV image. However, the buffer may also be larger than
+ * the dimensions of the source image, in which case the <code>x</code>,
+ * <code>y</code>, and <code>pitch</code> parameters can be used to specify
+ * the region into which the source image should be decompressed/decoded.
*
- * @param x x offset (in pixels) of the region into which the JPEG image
- * should be decompressed, relative to the start of <code>dstBuf</code>.
+ * @param x x offset (in pixels) of the region in the destination image into
+ * which the source image should be decompressed/decoded
*
- * @param y y offset (in pixels) of the region into which the JPEG image
- * should be decompressed, relative to the start of <code>dstBuf</code>.
+ * @param y y offset (in pixels) of the region in the destination image into
+ * which the source image should be decompressed/decoded
*
- * @param desiredWidth desired width (in pixels) of the decompressed image
- * (or image region.) If the desired image dimensions are different than the
- * dimensions of the JPEG image being decompressed, then TurboJPEG will use
- * scaling in the JPEG decompressor to generate the largest possible image
- * that will fit within the desired dimensions. Setting this to 0 is the
- * same as setting it to the width of the JPEG image (in other words, the
- * width will not be considered when determining the scaled image size.)
+ * @param desiredWidth If the source image is a JPEG image, then this
+ * specifies the desired width (in pixels) of the decompressed image (or
+ * image region.) If the desired destination image dimensions are different
+ * than the source image dimensions, then TurboJPEG will use scaling in the
+ * JPEG decompressor to generate the largest possible image that will fit
+ * within the desired dimensions. Setting this to 0 is the same as setting
+ * it to the width of the JPEG image (in other words, the width will not be
+ * considered when determining the scaled image size.) This parameter is
+ * ignored if the source image is a YUV image.
*
* @param pitch bytes per line of the destination image. Normally, this
* should be set to <code>scaledWidth * TJ.pixelSize(pixelFormat)</code> if
- * the decompressed image is unpadded, but you can use this to, for instance,
- * pad each line of the decompressed image to a 4-byte boundary or to
- * decompress the JPEG image into a region of a larger image. NOTE:
- * <code>scaledWidth</code> can be determined by calling <code>
+ * the destination image is unpadded, but you can use this to, for instance,
+ * pad each line of the destination image to a 4-byte boundary or to
+ * decompress/decode the source image into a region of a larger image. NOTE:
+ * if the source image is a JPEG image, then <code>scaledWidth</code> can be
+ * determined by calling <code>
* scalingFactor.{@link TJScalingFactor#getScaled getScaled}(jpegWidth)
- * </code> or by calling {@link #getScaledWidth}. Setting this parameter to
- * 0 is the equivalent of setting it to <code>scaledWidth *
- * TJ.pixelSize(pixelFormat)</code>.
+ * </code> or by calling {@link #getScaledWidth}. If the source image is a
+ * YUV image, then <code>scaledWidth</code> is the width of the YUV image.
+ * Setting this parameter to 0 is the equivalent of setting it to
+ * <code>scaledWidth * TJ.pixelSize(pixelFormat)</code>.
*
- * @param desiredHeight desired height (in pixels) of the decompressed image
- * (or image region.) If the desired image dimensions are different than the
- * dimensions of the JPEG image being decompressed, then TurboJPEG will use
- * scaling in the JPEG decompressor to generate the largest possible image
- * that will fit within the desired dimensions. Setting this to 0 is the
- * same as setting it to the height of the JPEG image (in other words, the
- * height will not be considered when determining the scaled image size.)
+ * @param desiredHeight If the source image is a JPEG image, then this
+ * specifies the desired height (in pixels) of the decompressed image (or
+ * image region.) If the desired destination image dimensions are different
+ * than the source image dimensions, then TurboJPEG will use scaling in the
+ * JPEG decompressor to generate the largest possible image that will fit
+ * within the desired dimensions. Setting this to 0 is the same as setting
+ * it to the height of the JPEG image (in other words, the height will not be
+ * considered when determining the scaled image size.) This parameter is
+ * ignored if the source image is a YUV image.
*
- * @param pixelFormat pixel format of the decompressed image (one of
- * {@link TJ TJ.PF_*})
+ * @param pixelFormat pixel format of the decompressed/decoded image (one of
+ * {@link TJ#PF_RGB TJ.PF_*})
*
- * @param flags the bitwise OR of one or more of {@link TJ TJ.FLAG_*}
+ * @param flags the bitwise OR of one or more of
+ * {@link TJ#FLAG_BOTTOMUP 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)
+ if (jpegBuf == null && yuvImage == 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)
+ if (dstBuf == null || x < 0 || y < 0 || pitch < 0 ||
+ (yuvImage != null && (desiredWidth < 0 || desiredHeight < 0)) ||
+ pixelFormat < 0 || pixelFormat >= TJ.NUMPF || flags < 0)
throw new Exception("Invalid argument in decompress()");
- if (x > 0 || y > 0)
- decompress(jpegBuf, jpegBufSize, dstBuf, x, y, desiredWidth, pitch,
- desiredHeight, pixelFormat, flags);
- else
- decompress(jpegBuf, jpegBufSize, dstBuf, desiredWidth, pitch,
- desiredHeight, pixelFormat, flags);
+ if (yuvImage != null)
+ decodeYUV(yuvImage.getBuf(), yuvImage.getPad(), yuvImage.getSubsamp(),
+ dstBuf, x, y, yuvImage.getWidth(), pitch, yuvImage.getHeight(),
+ pixelFormat, flags);
+ else {
+ if (x > 0 || y > 0)
+ decompress(jpegBuf, jpegBufSize, dstBuf, x, y, desiredWidth, pitch,
+ desiredHeight, pixelFormat, flags);
+ else
+ decompress(jpegBuf, jpegBufSize, dstBuf, desiredWidth, pitch,
+ desiredHeight, pixelFormat, flags);
+ }
}
/**
@@ -353,15 +444,17 @@
* for description
*
* @param pixelFormat pixel format of the decompressed image (one of
- * {@link TJ TJ.PF_*})
+ * {@link TJ#PF_RGB TJ.PF_*})
*
- * @param flags the bitwise OR of one or more of {@link TJ TJ.FLAG_*}
+ * @param flags the bitwise OR of one or more of
+ * {@link TJ#FLAG_BOTTOMUP TJ.FLAG_*}
*
* @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 ||
+ if (pitch < 0 ||
+ (yuvImage == null && (desiredWidth < 0 || desiredHeight < 0)) ||
pixelFormat < 0 || pixelFormat >= TJ.NUMPF || flags < 0)
throw new Exception("Invalid argument in decompress()");
int pixelSize = TJ.getPixelSize(pixelFormat);
@@ -376,22 +469,60 @@
/**
* Decompress the JPEG source image associated with this decompressor
- * instance and output a YUV planar image to the given destination buffer.
- * This method performs JPEG decompression but leaves out the color
- * conversion step, so a planar YUV image is generated instead of an RGB
- * image. The padding of the planes in this image is the same as in the
- * images generated by {@link TJCompressor#encodeYUV(byte[], int)}. Note
- * that, if the width or height of the image is not an even multiple of the
- * MCU block size (see {@link TJ#getMCUWidth} and {@link TJ#getMCUHeight}),
- * then an intermediate buffer copy will be performed within TurboJPEG.
- * <p>
- * NOTE: Technically, the JPEG format uses the YCbCr colorspace, but per the
- * convention of the digital video community, the TurboJPEG API uses "YUV" to
- * refer to an image format consisting of Y, Cb, and Cr image planes.
+ * instance into a YUV planar image and store it in the given
+ * <code>YUVImage</code> instance. This method performs JPEG decompression
+ * but leaves out the color conversion step, so a planar YUV image is
+ * generated instead of an RGB or grayscale image. This method cannot be
+ * used to decompress JPEG source images with the CMYK or YCCK colorspace.
*
- * @param dstBuf buffer that will receive the YUV planar image. Use
- * {@link TJ#bufSizeYUV} to determine the appropriate size for this buffer
- * based on the image width, height, and level of chrominance subsampling.
+ * @param dstImage {@link YUVImage} instance that will receive the YUV planar
+ * image. The level of subsampling specified in this <code>YUVImage</code>
+ * instance must match that of the JPEG image, and the width and height
+ * specified in the <code>YUVImage</code> instance must match one of the
+ * scaled image sizes that TurboJPEG is capable of generating from the JPEG
+ * source image.
+ *
+ * @param flags the bitwise OR of one or more of
+ * {@link TJ#FLAG_BOTTOMUP TJ.FLAG_*}
+ */
+ public void decompressToYUV(YUVImage dstImage, int flags) throws Exception {
+ if (jpegBuf == null)
+ throw new Exception(NO_ASSOC_ERROR);
+ if (dstImage == null || flags < 0)
+ throw new Exception("Invalid argument in decompressToYUV()");
+ int scaledWidth = getScaledWidth(dstImage.getWidth(),
+ dstImage.getHeight());
+ int scaledHeight = getScaledHeight(dstImage.getWidth(),
+ dstImage.getHeight());
+ if (scaledWidth != dstImage.getWidth() ||
+ scaledHeight != dstImage.getHeight())
+ throw new Exception("YUVImage dimensions do not match one of the scaled image sizes that TurboJPEG is capable of generating.");
+ if (srcSubsamp != dstImage.getSubsamp())
+ throw new Exception("YUVImage subsampling level does not match that of the JPEG image");
+
+ decompressToYUV(jpegBuf, jpegBufSize, dstImage.getBuf(),
+ dstImage.getWidth(), dstImage.getPad(),
+ dstImage.getHeight(), flags);
+ }
+
+ /**
+ * @deprecated Use {@link #decompressToYUV(YUVImage, int)} instead.
+ */
+ @Deprecated
+ public void decompressToYUV(byte[] dstBuf, int flags) throws Exception {
+ YUVImage dstImage = new YUVImage(dstBuf, srcWidth, 4, srcHeight,
+ srcSubsamp);
+ decompressToYUV(dstImage, flags);
+ }
+
+ /**
+ * Decompress the JPEG source image associated with this decompressor
+ * instance into a YUV planar image and return a <code>YUVImage</code>
+ * instance containing the decompressed image. This method performs JPEG
+ * decompression but leaves out the color conversion step, so a planar YUV
+ * image is generated instead of an RGB or grayscale image. This method
+ * cannot be used to decompress JPEG source images with the CMYK or YCCK
+ * colorspace.
*
* @param desiredWidth desired width (in pixels) of the YUV image. If the
* desired image dimensions are different than the dimensions of the JPEG
@@ -413,60 +544,28 @@
* the height of the JPEG image (in other words, the height will not be
* considered when determining the scaled image size.)
*
- * @param flags the bitwise OR of one or more of {@link TJ TJ.FLAG_*}
+ * @param flags the bitwise OR of one or more of
+ * {@link TJ#FLAG_BOTTOMUP TJ.FLAG_*}
+ *
+ * @return a YUV planar image
*/
- public void decompressToYUV(byte[] dstBuf, int desiredWidth, int pad,
- int desiredHeight, int flags) throws Exception {
- if (jpegBuf == null)
- throw new Exception(NO_ASSOC_ERROR);
- if (dstBuf == null || desiredWidth < 0 || pad < 1 ||
- ((pad & (pad - 1)) != 0) || desiredHeight < 0 || flags < 0)
- throw new Exception("Invalid argument in decompressToYUV()");
- decompressToYUV(jpegBuf, jpegBufSize, dstBuf, desiredWidth, pad,
- desiredHeight, flags);
- }
-
- /**
- * @deprecated Use {@link #decompressToYUV(byte[], int, int, int, int)}
- * instead.
- */
- @Deprecated
- public void decompressToYUV(byte[] dstBuf, int flags) throws Exception {
- decompressToYUV(dstBuf, 0, 4, 0, flags);
- }
-
- /**
- * Decompress the JPEG source image associated with this decompressor
- * instance and return a buffer containing a YUV planar image. See {@link
- * #decompressToYUV(byte[], int, int, int, int)} for more detail.
- *
- * @param desiredWidth see
- * {@link #decompressToYUV(byte[], int, int, int, int)} for description
- *
- * @param pad see {@link #decompressToYUV(byte[], int, int, int, int)} for
- * description
- *
- * @param desiredHeight see {@link
- * #decompressToYUV(byte[], int, int, int, int)} for description
- *
- * @param flags the bitwise OR of one or more of {@link TJ TJ.FLAG_*}
- *
- * @return a buffer containing a YUV planar image
- */
- public byte[] decompressToYUV(int desiredWidth, int pad, int desiredHeight,
- int flags) throws Exception {
+ public YUVImage decompressToYUV(int desiredWidth, int pad, int desiredHeight,
+ int flags) throws Exception {
if (flags < 0)
throw new Exception("Invalid argument in decompressToYUV()");
- if (jpegWidth < 1 || jpegHeight < 1 || jpegSubsamp < 0)
+ if (srcWidth < 1 || srcHeight < 1 || srcSubsamp < 0)
throw new Exception(NO_ASSOC_ERROR);
- if (jpegSubsamp >= TJ.NUMSAMP)
+ if (srcSubsamp >= TJ.NUMSAMP)
throw new Exception("JPEG header information is invalid");
+ if (yuvImage != null)
+ throw new Exception("Source image is the wrong type");
+
int scaledWidth = getScaledWidth(desiredWidth, desiredHeight);
int scaledHeight = getScaledHeight(desiredWidth, desiredHeight);
- byte[] buf = new byte[TJ.bufSizeYUV(scaledWidth, pad, scaledHeight,
- jpegSubsamp)];
- decompressToYUV(buf, desiredWidth, pad, desiredHeight, flags);
- return buf;
+ YUVImage yuvImage = new YUVImage(scaledWidth, pad, scaledHeight,
+ srcSubsamp);
+ decompressToYUV(yuvImage, flags);
+ return yuvImage;
}
/**
@@ -474,91 +573,126 @@
*/
@Deprecated
public byte[] decompressToYUV(int flags) throws Exception {
- return decompressToYUV(0, 4, 0, flags);
+ YUVImage dstImage = new YUVImage(srcWidth, 4, srcHeight, srcSubsamp);
+ decompressToYUV(dstImage, flags);
+ return dstImage.getBuf();
}
/**
- * Decompress the JPEG source image associated with this decompressor
- * instance and output a decompressed image to the given destination buffer.
+ * Decompress the JPEG source image or decode the YUV source image associated
+ * with this decompressor instance and output a grayscale, RGB, or CMYK image
+ * to the given destination buffer.
*
- * @param dstBuf buffer that will receive the decompressed image. This
- * buffer should normally be <code>stride * scaledHeight</code> pixels in
- * size, where <code>scaledHeight</code> can be determined by calling <code>
+ * @param dstBuf buffer that will receive the decompressed/decoded image.
+ * If the source image is a JPEG image, then this buffer should normally be
+ * <code>stride * scaledHeight</code> pixels in size, where
+ * <code>scaledHeight</code> can be determined by calling <code>
* scalingFactor.{@link TJScalingFactor#getScaled getScaled}(jpegHeight)
* </code> with one of the scaling factors returned from {@link
- * TJ#getScalingFactors} or by calling {@link #getScaledHeight}. However,
- * the buffer may also be larger than the dimensions of the JPEG image, in
- * which case the <code>x</code>, <code>y</code>, and <code>stride</code>
- * parameters can be used to specify the region into which the JPEG image
- * should be decompressed.
+ * TJ#getScalingFactors} or by calling {@link #getScaledHeight}. If the
+ * source image is a YUV image, then this buffer should normally be
+ * <code>stride * height</code> pixels in size, where <code>height</code> is
+ * the height of the YUV image. However, the buffer may also be larger than
+ * the dimensions of the JPEG image, in which case the <code>x</code>,
+ * <code>y</code>, and <code>stride</code> parameters can be used to specify
+ * the region into which the source image should be decompressed.
*
- * @param x x offset (in pixels) of the region into which the JPEG image
- * should be decompressed, relative to the start of <code>dstBuf</code>.
+ * @param x x offset (in pixels) of the region in the destination image into
+ * which the source image should be decompressed/decoded
*
- * @param y y offset (in pixels) of the region into which the JPEG image
- * should be decompressed, relative to the start of <code>dstBuf</code>.
+ * @param y y offset (in pixels) of the region in the destination image into
+ * which the source image should be decompressed/decoded
*
- * @param desiredWidth desired width (in pixels) of the decompressed image
- * (or image region.) If the desired image dimensions are different than the
- * dimensions of the JPEG image being decompressed, then TurboJPEG will use
- * scaling in the JPEG decompressor to generate the largest possible image
- * that will fit within the desired dimensions. Setting this to 0 is the
- * same as setting it to the width of the JPEG image (in other words, the
- * width will not be considered when determining the scaled image size.)
+ * @param desiredWidth If the source image is a JPEG image, then this
+ * specifies the desired width (in pixels) of the decompressed image (or
+ * image region.) If the desired destination image dimensions are different
+ * than the source image dimensions, then TurboJPEG will use scaling in the
+ * JPEG decompressor to generate the largest possible image that will fit
+ * within the desired dimensions. Setting this to 0 is the same as setting
+ * it to the width of the JPEG image (in other words, the width will not be
+ * considered when determining the scaled image size.) This parameter is
+ * ignored if the source image is a YUV image.
*
* @param stride pixels per line of the destination image. Normally, this
* should be set to <code>scaledWidth</code>, but you can use this to, for
* instance, decompress the JPEG image into a region of a larger image.
- * NOTE: <code>scaledWidth</code> can be determined by calling <code>
+ * NOTE: if the source image is a JPEG image, then <code>scaledWidth</code>
+ * can be determined by calling <code>
* scalingFactor.{@link TJScalingFactor#getScaled getScaled}(jpegWidth)
- * </code> or by calling {@link #getScaledWidth}. Setting this parameter to
- * 0 is the equivalent of setting it to <code>scaledWidth</code>.
+ * </code> or by calling {@link #getScaledWidth}. If the source image is a
+ * YUV image, then <code>scaledWidth</code> is the width of the YUV image.
+ * Setting this parameter to 0 is the equivalent of setting it to
+ * <code>scaledWidth</code>.
*
- * @param desiredHeight desired height (in pixels) of the decompressed image
- * (or image region.) If the desired image dimensions are different than the
- * dimensions of the JPEG image being decompressed, then TurboJPEG will use
- * scaling in the JPEG decompressor to generate the largest possible image
- * that will fit within the desired dimensions. Setting this to 0 is the
- * same as setting it to the height of the JPEG image (in other words, the
- * height will not be considered when determining the scaled image size.)
+ * @param desiredHeight If the source image is a JPEG image, then this
+ * specifies the desired height (in pixels) of the decompressed image (or
+ * image region.) If the desired destination image dimensions are different
+ * than the source image dimensions, then TurboJPEG will use scaling in the
+ * JPEG decompressor to generate the largest possible image that will fit
+ * within the desired dimensions. Setting this to 0 is the same as setting
+ * it to the height of the JPEG image (in other words, the height will not be
+ * considered when determining the scaled image size.) This parameter is
+ * ignored if the source image is a YUV image.
*
* @param pixelFormat pixel format of the decompressed image (one of
- * {@link TJ TJ.PF_*})
+ * {@link TJ#PF_RGB TJ.PF_*})
*
- * @param flags the bitwise OR of one or more of {@link TJ TJ.FLAG_*}
+ * @param flags the bitwise OR of one or more of
+ * {@link TJ#FLAG_BOTTOMUP 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)
+ if (jpegBuf == null && yuvImage == 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)
+ if (dstBuf == null || x < 0 || y < 0 || stride < 0 ||
+ (yuvImage != null && (desiredWidth < 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);
+ if (yuvImage != null)
+ decodeYUV(yuvImage.getBuf(), yuvImage.getPad(), yuvImage.getSubsamp(),
+ dstBuf, x, y, yuvImage.getWidth(), stride,
+ yuvImage.getHeight(), pixelFormat, flags);
+ else
+ decompress(jpegBuf, jpegBufSize, dstBuf, x, y, desiredWidth, stride,
+ desiredHeight, pixelFormat, flags);
}
/**
- * Decompress the JPEG source image associated with this decompressor
- * instance and output a decompressed image to the given
- * <code>BufferedImage</code> instance.
+ * Decompress the JPEG source image or decode the YUV source image associated
+ * with this decompressor instance and output a decompressed/decoded image to
+ * the given <code>BufferedImage</code> instance.
*
* @param dstImage a <code>BufferedImage</code> instance that will receive
- * the decompressed image
+ * the decompressed/decoded image. If the source image is a JPEG image, then
+ * the width and height of the <code>BufferedImage</code> instance must match
+ * one of the scaled image sizes that TurboJPEG is capable of generating from
+ * the JPEG image. If the source image is a YUV image, then the width and
+ * height of the <code>BufferedImage</code> instance must match the width and
+ * height of the YUV image.
*
- * @param flags the bitwise OR of one or more of {@link TJ TJ.FLAG_*}
+ * @param flags the bitwise OR of one or more of
+ * {@link TJ#FLAG_BOTTOMUP TJ.FLAG_*}
*/
public void decompress(BufferedImage dstImage, int flags) throws Exception {
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)
- throw new Exception("BufferedImage dimensions do not match a scaled image size that TurboJPEG is capable of generating.");
+ int scaledWidth, scaledHeight;
+
+ if (yuvImage != null) {
+ if (desiredWidth != yuvImage.getWidth() ||
+ desiredHeight != yuvImage.getHeight())
+ throw new Exception("BufferedImage dimensions do not match the dimensions of the source image.");
+ scaledWidth = yuvImage.getWidth();
+ scaledHeight = yuvImage.getHeight();
+ } else {
+ scaledWidth = getScaledWidth(desiredWidth, desiredHeight);
+ scaledHeight = getScaledHeight(desiredWidth, desiredHeight);
+ if (scaledWidth != desiredWidth || scaledHeight != desiredHeight)
+ throw new Exception("BufferedImage dimensions do not match one of the scaled image sizes that TurboJPEG is capable of generating.");
+ }
int pixelFormat; boolean intPixels = false;
if (byteOrder == null)
byteOrder = ByteOrder.nativeOrder();
@@ -599,10 +733,16 @@
int stride = sm.getScanlineStride();
DataBufferInt db = (DataBufferInt)wr.getDataBuffer();
int[] buf = db.getData();
- if (jpegBuf == null)
- throw new Exception(NO_ASSOC_ERROR);
- decompress(jpegBuf, jpegBufSize, buf, scaledWidth, stride, scaledHeight,
- pixelFormat, flags);
+ if (yuvImage != null)
+ decodeYUV(yuvImage.getBuf(), yuvImage.getPad(), yuvImage.getSubsamp(),
+ buf, 0, 0, yuvImage.getWidth(), stride, yuvImage.getHeight(),
+ pixelFormat, flags);
+ else {
+ if (jpegBuf == null)
+ throw new Exception(NO_ASSOC_ERROR);
+ decompress(jpegBuf, jpegBufSize, buf, 0, 0, scaledWidth, stride,
+ scaledHeight, pixelFormat, flags);
+ }
} else {
ComponentSampleModel sm =
(ComponentSampleModel)dstImage.getSampleModel();
@@ -612,14 +752,15 @@
int pitch = sm.getScanlineStride();
DataBufferByte db = (DataBufferByte)wr.getDataBuffer();
byte[] buf = db.getData();
- decompress(buf, scaledWidth, pitch, scaledHeight, pixelFormat, flags);
+ decompress(buf, 0, 0, scaledWidth, pitch, scaledHeight, pixelFormat,
+ flags);
}
}
/**
- * Decompress the JPEG source image associated with this decompressor
- * instance and return a <code>BufferedImage</code> instance containing the
- * decompressed image.
+ * Decompress the JPEG source image or decode the YUV source image associated
+ * with this decompressor instance and return a <code>BufferedImage</code>
+ * instance containing the decompressed/decoded image.
*
* @param desiredWidth see
* {@link #decompress(byte[], int, int, int, int, int, int, int)} for
@@ -629,19 +770,21 @@
* {@link #decompress(byte[], int, int, int, int, int, int, int)} for
* description
*
- * @param bufferedImageType the image type of the newly-created
- * <code>BufferedImage</code> instance (for instance,
+ * @param bufferedImageType the image type of the <code>BufferedImage</code>
+ * instance that will be created (for instance,
* <code>BufferedImage.TYPE_INT_RGB</code>)
*
- * @param flags the bitwise OR of one or more of {@link TJ TJ.FLAG_*}
+ * @param flags the bitwise OR of one or more of
+ * {@link TJ#FLAG_BOTTOMUP TJ.FLAG_*}
*
* @return a <code>BufferedImage</code> instance containing the
- * decompressed image
+ * decompressed/decoded image
*/
public BufferedImage decompress(int desiredWidth, int desiredHeight,
int bufferedImageType, int flags)
throws Exception {
- if (desiredWidth < 0 || desiredHeight < 0 || flags < 0)
+ if ((yuvImage == null && (desiredWidth < 0 || desiredHeight < 0)) ||
+ flags < 0)
throw new Exception("Invalid argument in decompress()");
int scaledWidth = getScaledWidth(desiredWidth, desiredHeight);
int scaledHeight = getScaledHeight(desiredWidth, desiredHeight);
@@ -696,6 +839,14 @@
private native void decompressToYUV(byte[] srcBuf, int size, byte[] dstBuf,
int desiredWidth, int pad, int desiredheight, int flags) throws Exception;
+ private native void decodeYUV(byte[] srcBuf, int pad, int subsamp,
+ byte[] dstBuf, int x, int y, int width, int pitch, int height,
+ int pixelFormat, int flags) throws Exception;
+
+ private native void decodeYUV(byte[] srcBuf, int pad, int subsamp,
+ int[] dstBuf, int x, int y, int width, int stride, int height,
+ int pixelFormat, int flags) throws Exception;
+
static {
TJLoader.load();
}
@@ -703,9 +854,10 @@
protected long handle = 0;
protected byte[] jpegBuf = null;
protected int jpegBufSize = 0;
- protected int jpegWidth = 0;
- protected int jpegHeight = 0;
- protected int jpegSubsamp = -1;
- protected int jpegColorspace = -1;
+ protected YUVImage yuvImage = null;
+ protected int srcWidth = 0;
+ protected int srcHeight = 0;
+ protected int srcSubsamp = -1;
+ protected int srcColorspace = -1;
private ByteOrder byteOrder = null;
};
diff --git a/java/org/libjpegturbo/turbojpeg/TJTransformer.java b/java/org/libjpegturbo/turbojpeg/TJTransformer.java
index f84eaa1..ee1f607 100644
--- a/java/org/libjpegturbo/turbojpeg/TJTransformer.java
+++ b/java/org/libjpegturbo/turbojpeg/TJTransformer.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C)2011, 2013 D. R. Commander. All Rights Reserved.
+ * Copyright (C)2011, 2013-2014 D. R. Commander. All Rights Reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
@@ -42,20 +42,20 @@
/**
* Create a TurboJPEG lossless transformer instance and associate the JPEG
- * image stored in <code>jpegImage</code> with the newly-created instance.
+ * image stored in <code>jpegImage</code> with the newly created instance.
*
* @param jpegImage JPEG image buffer (size of the JPEG image is assumed to
* be the length of the array)
*/
public TJTransformer(byte[] jpegImage) throws Exception {
init();
- setJPEGImage(jpegImage, jpegImage.length);
+ setSourceImage(jpegImage, jpegImage.length);
}
/**
* Create a TurboJPEG lossless transformer instance and associate the JPEG
* image of length <code>imageSize</code> bytes stored in
- * <code>jpegImage</code> with the newly-created instance.
+ * <code>jpegImage</code> with the newly created instance.
*
* @param jpegImage JPEG image buffer
*
@@ -63,7 +63,7 @@
*/
public TJTransformer(byte[] jpegImage, int imageSize) throws Exception {
init();
- setJPEGImage(jpegImage, imageSize);
+ setSourceImage(jpegImage, imageSize);
}
/**
@@ -84,13 +84,14 @@
* receive a JPEG image that has been transformed using the parameters in
* <code>transforms[i]</code>. Use {@link TJ#bufSize} to determine the
* maximum size for each buffer based on the transformed or cropped width and
- * height.
+ * height and the level of subsampling used in the source image.
*
* @param transforms an array of {@link TJTransform} instances, each of
* which specifies the transform parameters and/or cropping region for the
* corresponding transformed output image
*
- * @param flags the bitwise OR of one or more of {@link TJ TJ.FLAG_*}
+ * @param flags the bitwise OR of one or more of
+ * {@link TJ#FLAG_BOTTOMUP TJ.FLAG_*}
*/
public void transform(byte[][] dstBufs, TJTransform[] transforms,
int flags) throws Exception {
@@ -112,20 +113,21 @@
* @return an array of {@link TJDecompressor} instances, each of
* which has a transformed JPEG image associated with it
*
- * @param flags the bitwise OR of one or more of {@link TJ TJ.FLAG_*}
+ * @param flags the bitwise OR of one or more of
+ * {@link TJ#FLAG_BOTTOMUP TJ.FLAG_*}
*/
public TJDecompressor[] transform(TJTransform[] transforms, int flags)
throws Exception {
byte[][] dstBufs = new byte[transforms.length][];
- if (jpegWidth < 1 || jpegHeight < 1)
+ if (srcWidth < 1 || srcHeight < 1)
throw new Exception("JPEG buffer not initialized");
for (int i = 0; i < transforms.length; i++) {
- int w = jpegWidth, h = jpegHeight;
+ int w = srcWidth, h = srcHeight;
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)];
+ dstBufs[i] = new byte[TJ.bufSize(w, h, srcSubsamp)];
}
TJDecompressor[] tjd = new TJDecompressor[transforms.length];
transform(dstBufs, transforms, flags);
@@ -135,11 +137,11 @@
}
/**
- * Returns an array containing the sizes of the transformed JPEG images from
- * the most recent call to {@link #transform transform()}.
+ * Returns an array containing the sizes of the transformed JPEG images
+ * generated by the most recent transform operation.
*
- * @return an array containing the sizes of the transformed JPEG images from
- * the most recent call to {@link #transform transform()}
+ * @return an array containing the sizes of the transformed JPEG images
+ * generated by the most recent transform operation
*/
public int[] getTransformedSizes() throws Exception {
if (transformedSizes == null)
diff --git a/java/org/libjpegturbo/turbojpeg/YUVImage.java b/java/org/libjpegturbo/turbojpeg/YUVImage.java
new file mode 100644
index 0000000..6793593
--- /dev/null
+++ b/java/org/libjpegturbo/turbojpeg/YUVImage.java
@@ -0,0 +1,193 @@
+/*
+ * Copyright (C)2014 D. R. Commander. All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * - Neither the name of the libjpeg-turbo Project nor the names of its
+ * contributors may be used to endorse or promote products derived from this
+ * software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS",
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+package org.libjpegturbo.turbojpeg;
+
+/**
+ * This class encapsulates a YUV planar image buffer and the metadata
+ * associated with it. The TurboJPEG API allows both the JPEG compression and
+ * decompression pipelines to be split into stages: YUV encode, compress from
+ * YUV, decompress to YUV, and YUV decode. A <code>YUVImage</code> instance
+ * serves as the destination image for YUV encode and decompress-to-YUV
+ * operations and as the source image for compress-from-YUV and YUV decode
+ * operations.
+ * <p>
+ * Technically, the JPEG format uses the YCbCr colorspace (which technically is
+ * not a "colorspace" but rather a "color transform"), but per the convention
+ * of the digital video community, the TurboJPEG API uses "YUV" to refer to an
+ * image format consisting of Y, Cb, and Cr image planes. In this image
+ * format, the Y, Cb (U), and Cr (V) planes are stored sequentially in the same
+ * image buffer, and the size of each plane is determined by the image width,
+ * height, line padding, and level of chrominance subsampling. If the
+ * chrominance components are subsampled along the horizontal dimension, then
+ * the width of the luminance plane would be padded to the nearest multiple of
+ * 2 (same goes for the height of the luminance plane, if the chrominance
+ * components are subsampled along the vertical dimension.) For instance, if
+ * the source image is 35 x 35 pixels and 4:2:2 subsampling is used, then the
+ * luminance plane would be 36 x 35 bytes, and each of the chrominance planes
+ * would be 18 x 35 bytes. If you specify, for instance, a line padding of 4
+ * bytes on top of this, then the luminance plane would be 36 x 35 bytes, and
+ * each of the chrominance planes would be 20 x 35 bytes.
+ */
+public class YUVImage {
+
+ private static final String NO_ASSOC_ERROR =
+ "No YUV buffer is associated with this instance";
+
+ /**
+ * Create a <code>YUVImage</code> instance with a new image buffer.
+ *
+ * @param width width (in pixels) of the YUV image
+ *
+ * @param pad Each line of each plane in the YUV image buffer will be padded
+ * to this number of bytes (must be a power of 2.)
+ *
+ * @param height height (in pixels) of the YUV image
+ *
+ * @param subsamp the level of chrominance subsampling to be used in the YUV
+ * image (one of {@link TJ#SAMP_444 TJ.SAMP_*})
+ */
+ public YUVImage(int width, int pad, int height, int subsamp)
+ throws Exception {
+ setBuffer(new byte[TJ.bufSizeYUV(width, pad, height, subsamp)], width, pad,
+ height, subsamp);
+ }
+
+ /**
+ * Create a <code>YUVImage</code> instance from an existing YUV planar image
+ * buffer.
+ *
+ * @param yuvImage image buffer that contains or will contain YUV planar
+ * image data. See {@link YUVImage above} for a description of the image
+ * format. You can use {@link TJ#bufSizeYUV} to determine the appropriate
+ * size for this buffer.
+ *
+ * @param width width (in pixels) of the YUV image
+ *
+ * @param pad the line padding used in the YUV image buffer. For
+ * instance, if each line in each plane of the buffer is padded to the
+ * nearest multiple of 4 bytes, then <code>pad</code> should be set to 4.
+ *
+ * @param height height (in pixels) of the YUV image
+ *
+ * @param subsamp the level of chrominance subsampling used in the YUV
+ * image (one of {@link TJ#SAMP_444 TJ.SAMP_*})
+ */
+ public YUVImage(byte[] yuvImage, int width, int pad, int height,
+ int subsamp) throws Exception {
+ setBuffer(yuvImage, width, pad, height, subsamp);
+ }
+
+ private void setBuffer(byte[] yuvImage, int width, int pad, int height,
+ int subsamp) throws Exception {
+ if (yuvImage == null || width < 1 || pad < 1 || ((pad & (pad - 1)) != 0) ||
+ height < 1 || subsamp < 0 || subsamp >= TJ.NUMSAMP)
+ throw new Exception("Invalid argument in YUVImage()");
+ if (yuvImage.length != TJ.bufSizeYUV(width, pad, height, subsamp))
+ throw new Exception("YUV image buffer is the wrong size");
+ yuvBuf = yuvImage;
+ yuvWidth = width;
+ yuvPad = pad;
+ yuvHeight = height;
+ yuvSubsamp = subsamp;
+ }
+
+ /**
+ * Returns the width of the YUV image.
+ *
+ * @return the width of the YUV image
+ */
+ public int getWidth() throws Exception {
+ if (yuvWidth < 1)
+ throw new Exception(NO_ASSOC_ERROR);
+ return yuvWidth;
+ }
+
+ /**
+ * Returns the height of the YUV image.
+ *
+ * @return the height of the YUV image
+ */
+ public int getHeight() throws Exception {
+ if (yuvHeight < 1)
+ throw new Exception(NO_ASSOC_ERROR);
+ return yuvHeight;
+ }
+
+ /**
+ * Returns the line padding used in the YUV image buffer.
+ *
+ * @return the line padding used in the YUV image buffer
+ */
+ public int getPad() throws Exception {
+ if (yuvPad < 1 || ((yuvPad & (yuvPad - 1)) != 0))
+ throw new Exception(NO_ASSOC_ERROR);
+ return yuvPad;
+ }
+
+ /**
+ * Returns the level of chrominance subsampling used in the YUV image. See
+ * {@link TJ#SAMP_444 TJ.SAMP_*}.
+ *
+ * @return the level of chrominance subsampling used in the YUV image
+ */
+ public int getSubsamp() throws Exception {
+ if (yuvSubsamp < 0 || yuvSubsamp >= TJ.NUMSAMP)
+ throw new Exception(NO_ASSOC_ERROR);
+ return yuvSubsamp;
+ }
+
+ /**
+ * Returns the YUV image buffer
+ *
+ * @return the YUV image buffer
+ */
+ public byte[] getBuf() throws Exception {
+ if (yuvBuf == null)
+ throw new Exception(NO_ASSOC_ERROR);
+ return yuvBuf;
+ }
+
+ /**
+ * Returns the size (in bytes) of the YUV image buffer
+ *
+ * @return the size (in bytes) of the YUV image buffer
+ */
+ public int getSize() throws Exception {
+ if (yuvBuf == null)
+ throw new Exception(NO_ASSOC_ERROR);
+ return yuvBuf.length;
+ }
+
+ protected long handle = 0;
+ protected byte[] yuvBuf = null;
+ protected int yuvPad = 0;
+ protected int yuvWidth = 0;
+ protected int yuvHeight = 0;
+ protected int yuvSubsamp = -1;
+};
diff --git a/java/org_libjpegturbo_turbojpeg_TJCompressor.h b/java/org_libjpegturbo_turbojpeg_TJCompressor.h
index 50070ef..edb23b4 100644
--- a/java/org_libjpegturbo_turbojpeg_TJCompressor.h
+++ b/java/org_libjpegturbo_turbojpeg_TJCompressor.h
@@ -74,10 +74,10 @@
/*
* Class: org_libjpegturbo_turbojpeg_TJCompressor
* Method: encodeYUV
- * Signature: ([BIIII[BIII)V
+ * Signature: ([BIIIIII[BIII)V
*/
-JNIEXPORT void JNICALL Java_org_libjpegturbo_turbojpeg_TJCompressor_encodeYUV___3BIIII_3BIII
- (JNIEnv *, jobject, jbyteArray, jint, jint, jint, jint, jbyteArray, jint, jint, jint);
+JNIEXPORT void JNICALL Java_org_libjpegturbo_turbojpeg_TJCompressor_encodeYUV___3BIIIIII_3BIII
+ (JNIEnv *, jobject, jbyteArray, jint, jint, jint, jint, jint, jint, jbyteArray, jint, jint, jint);
/*
* Class: org_libjpegturbo_turbojpeg_TJCompressor
@@ -90,10 +90,10 @@
/*
* Class: org_libjpegturbo_turbojpeg_TJCompressor
* Method: encodeYUV
- * Signature: ([IIIII[BIII)V
+ * Signature: ([IIIIIII[BIII)V
*/
-JNIEXPORT void JNICALL Java_org_libjpegturbo_turbojpeg_TJCompressor_encodeYUV___3IIIII_3BIII
- (JNIEnv *, jobject, jintArray, jint, jint, jint, jint, jbyteArray, jint, jint, jint);
+JNIEXPORT void JNICALL Java_org_libjpegturbo_turbojpeg_TJCompressor_encodeYUV___3IIIIIII_3BIII
+ (JNIEnv *, jobject, jintArray, jint, jint, jint, jint, jint, jint, jbyteArray, jint, jint, jint);
#ifdef __cplusplus
}
diff --git a/java/org_libjpegturbo_turbojpeg_TJDecompressor.h b/java/org_libjpegturbo_turbojpeg_TJDecompressor.h
index 203f004..1d8205c 100644
--- a/java/org_libjpegturbo_turbojpeg_TJDecompressor.h
+++ b/java/org_libjpegturbo_turbojpeg_TJDecompressor.h
@@ -79,6 +79,22 @@
JNIEXPORT void JNICALL Java_org_libjpegturbo_turbojpeg_TJDecompressor_decompressToYUV___3BI_3BIIII
(JNIEnv *, jobject, jbyteArray, jint, jbyteArray, jint, jint, jint, jint);
+/*
+ * Class: org_libjpegturbo_turbojpeg_TJDecompressor
+ * Method: decodeYUV
+ * Signature: ([BII[BIIIIIII)V
+ */
+JNIEXPORT void JNICALL Java_org_libjpegturbo_turbojpeg_TJDecompressor_decodeYUV___3BII_3BIIIIIII
+ (JNIEnv *, jobject, jbyteArray, jint, jint, jbyteArray, jint, jint, jint, jint, jint, jint, jint);
+
+/*
+ * Class: org_libjpegturbo_turbojpeg_TJDecompressor
+ * Method: decodeYUV
+ * Signature: ([BII[IIIIIIII)V
+ */
+JNIEXPORT void JNICALL Java_org_libjpegturbo_turbojpeg_TJDecompressor_decodeYUV___3BII_3IIIIIIII
+ (JNIEnv *, jobject, jbyteArray, jint, jint, jintArray, jint, jint, jint, jint, jint, jint, jint);
+
#ifdef __cplusplus
}
#endif