TMI-TIFF: Now passes YCbCrPositioning to upsampler. Replaced magic value with constant.

This commit is contained in:
Harald Kuhr 2013-02-14 12:48:07 +01:00
parent 1548523336
commit 42831ea65b
4 changed files with 9 additions and 4 deletions

View File

@ -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;

View File

@ -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

View File

@ -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.

View File

@ -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);
}
}