From 42831ea65b6f8f52ae6d64d4ca12c5647a3e4eb1 Mon Sep 17 00:00:00 2001 From: Harald Kuhr Date: Thu, 14 Feb 2013 12:48:07 +0100 Subject: [PATCH] TMI-TIFF: Now passes YCbCrPositioning to upsampler. Replaced magic value with constant. --- .../com/twelvemonkeys/imageio/plugins/tiff/TIFFExtension.java | 3 +++ .../twelvemonkeys/imageio/plugins/tiff/TIFFImageReader.java | 4 ++-- .../imageio/plugins/tiff/YCbCrUpsamplerStream.java | 4 +++- .../imageio/plugins/tiff/YCbCrUpsamplerStreamTest.java | 2 +- 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/imageio/imageio-tiff/src/main/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFExtension.java b/imageio/imageio-tiff/src/main/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFExtension.java index 2ce098d9..be17c4c4 100644 --- a/imageio/imageio-tiff/src/main/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFExtension.java +++ b/imageio/imageio-tiff/src/main/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFExtension.java @@ -66,6 +66,9 @@ interface TIFFExtension { int SAMPLEFORMAT_FP = 3; int SAMPLEFORMAT_UNDEFINED = 4; + int YCBCR_POSITIONING_CENTERED = 1; + int YCBCR_POSITIONING_COSITED = 2; + // "Old-style" JPEG (obsolete) int JPEG_PROC_BASELINE = 1; int JPEG_PROC_LOSSLESS = 14; diff --git a/imageio/imageio-tiff/src/main/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFImageReader.java b/imageio/imageio-tiff/src/main/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFImageReader.java index cbd1c601..2fccfe72 100644 --- a/imageio/imageio-tiff/src/main/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFImageReader.java +++ b/imageio/imageio-tiff/src/main/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFImageReader.java @@ -524,7 +524,7 @@ public class TIFFImageReader extends ImageReaderBase { throw new IIOException("TIFF PhotometricInterpreatation YCbCr requires BitsPerSample == [8,8,8]"); } - yCbCrPos = getValueAsIntWithDefault(TIFF.TAG_YCBCR_POSITIONING, 1); + yCbCrPos = getValueAsIntWithDefault(TIFF.TAG_YCBCR_POSITIONING, TIFFExtension.YCBCR_POSITIONING_CENTERED); Entry subSampling = currentIFD.getEntryById(TIFF.TAG_YCBCR_SUB_SAMPLING); @@ -586,7 +586,7 @@ public class TIFFImageReader extends ImageReaderBase { adapter = createDecoderInputStream(compression, adapter); if (interpretation == TIFFExtension.PHOTOMETRIC_YCBCR) { - adapter = new YCbCrUpsamplerStream(adapter, yCbCrSubsampling, colsInTile, yCbCrCoefficients); + adapter = new YCbCrUpsamplerStream(adapter, yCbCrSubsampling, yCbCrPos, colsInTile, yCbCrCoefficients); } // According to the spec, short/long/etc should follow order of containing stream diff --git a/imageio/imageio-tiff/src/main/java/com/twelvemonkeys/imageio/plugins/tiff/YCbCrUpsamplerStream.java b/imageio/imageio-tiff/src/main/java/com/twelvemonkeys/imageio/plugins/tiff/YCbCrUpsamplerStream.java index 967e1ea7..703ef406 100644 --- a/imageio/imageio-tiff/src/main/java/com/twelvemonkeys/imageio/plugins/tiff/YCbCrUpsamplerStream.java +++ b/imageio/imageio-tiff/src/main/java/com/twelvemonkeys/imageio/plugins/tiff/YCbCrUpsamplerStream.java @@ -48,6 +48,7 @@ final class YCbCrUpsamplerStream extends FilterInputStream { private final int horizChromaSub; private final int vertChromaSub; + private final int yCbCrPos; private final double[] coefficients; private final int units; @@ -60,11 +61,12 @@ final class YCbCrUpsamplerStream extends FilterInputStream { int bufferLength; int bufferPos; - public YCbCrUpsamplerStream(InputStream stream, int[] chromaSub, int cols, double[] coefficients) { + public YCbCrUpsamplerStream(InputStream stream, int[] chromaSub, int yCbCrPos, int cols, double[] coefficients) { super(stream); this.horizChromaSub = chromaSub[0]; this.vertChromaSub = chromaSub[1]; + this.yCbCrPos = yCbCrPos; this.coefficients = Arrays.equals(TIFFImageReader.CCIR_601_1_COEFFICIENTS, coefficients) ? null : coefficients; // In TIFF, subsampled streams are stored in "units" of horiz * vert pixels. diff --git a/imageio/imageio-tiff/src/test/java/com/twelvemonkeys/imageio/plugins/tiff/YCbCrUpsamplerStreamTest.java b/imageio/imageio-tiff/src/test/java/com/twelvemonkeys/imageio/plugins/tiff/YCbCrUpsamplerStreamTest.java index 0713f5c7..836816aa 100644 --- a/imageio/imageio-tiff/src/test/java/com/twelvemonkeys/imageio/plugins/tiff/YCbCrUpsamplerStreamTest.java +++ b/imageio/imageio-tiff/src/test/java/com/twelvemonkeys/imageio/plugins/tiff/YCbCrUpsamplerStreamTest.java @@ -46,6 +46,6 @@ public class YCbCrUpsamplerStreamTest extends InputStreamAbstractTestCase { // TODO: Implement + add @Ignore for all tests that makes no sense for this class. @Override protected InputStream makeInputStream(byte[] pBytes) { - return new YCbCrUpsamplerStream(new ByteArrayInputStream(pBytes), new int[] {2, 2}, pBytes.length / 4, null); + return new YCbCrUpsamplerStream(new ByteArrayInputStream(pBytes), new int[] {2, 2}, TIFFExtension.YCBCR_POSITIONING_CENTERED, pBytes.length / 4, null); } }