diff options
Diffstat (limited to 'src/jogl/classes/com/jogamp/opengl')
-rw-r--r-- | src/jogl/classes/com/jogamp/opengl/util/texture/TextureData.java | 15 | ||||
-rw-r--r-- | src/jogl/classes/com/jogamp/opengl/util/texture/spi/JPEGImage.java | 9 |
2 files changed, 20 insertions, 4 deletions
diff --git a/src/jogl/classes/com/jogamp/opengl/util/texture/TextureData.java b/src/jogl/classes/com/jogamp/opengl/util/texture/TextureData.java index 5b72bea82..15b8930bb 100644 --- a/src/jogl/classes/com/jogamp/opengl/util/texture/TextureData.java +++ b/src/jogl/classes/com/jogamp/opengl/util/texture/TextureData.java @@ -56,6 +56,21 @@ import com.jogamp.opengl.util.GLBuffers; public class TextureData { public static enum ColorSpace { RGB, YCbCr, YCCK, CMYK }; + public static interface ColorSink { + /** + * @param width + * @param height + * @param sourceCS the color-space of the decoded JPEG + * @param sourceComponents number of components used for the given source color-space + * @return Either {@link ColorSpace#RGB} or {@link ColorSpace#YCbCr}. {@link ColorSpace#YCCK} and {@link ColorSpace#CMYK} will throw an exception! + * @throws RuntimeException + */ + public ColorSpace allocate(int width, int height, ColorSpace sourceCS, int sourceComponents) throws RuntimeException; + public void store2(int x, int y, byte c1, byte c2); + public void storeRGB(int x, int y, byte r, byte g, byte b); + public void storeYCbCr(int x, int y, byte Y, byte Cb, byte Cr); + } + protected int width; protected int height; private int border; diff --git a/src/jogl/classes/com/jogamp/opengl/util/texture/spi/JPEGImage.java b/src/jogl/classes/com/jogamp/opengl/util/texture/spi/JPEGImage.java index 71dd53939..14253e4af 100644 --- a/src/jogl/classes/com/jogamp/opengl/util/texture/spi/JPEGImage.java +++ b/src/jogl/classes/com/jogamp/opengl/util/texture/spi/JPEGImage.java @@ -38,6 +38,7 @@ import jogamp.opengl.util.jpeg.JPEGDecoder; import com.jogamp.common.nio.Buffers; import com.jogamp.opengl.util.texture.TextureData.ColorSpace; +import com.jogamp.opengl.util.texture.TextureData.ColorSink; public class JPEGImage { private static final boolean DEBUG = Debug.debug("JPEGImage"); @@ -60,7 +61,7 @@ public class JPEGImage { return new JPEGImage(in, ColorSpace.RGB); } - private static class JPEGPixelStorage implements JPEGDecoder.PixelStorage { + private static class JPEGColorSink implements ColorSink { int width=0, height=0; int sourceComponents=0; ColorSpace sourceCS = ColorSpace.YCbCr; @@ -68,7 +69,7 @@ public class JPEGImage { final ColorSpace storageCS; ByteBuffer data = null; - JPEGPixelStorage(ColorSpace storageCM) { + JPEGColorSink(ColorSpace storageCM) { this.storageCS = storageCM; switch(storageCS) { case RGB: @@ -118,7 +119,7 @@ public class JPEGImage { }; private JPEGImage(InputStream in, ColorSpace cs) throws IOException { - pixelStorage = new JPEGPixelStorage(cs); + pixelStorage = new JPEGColorSink(cs); final JPEGDecoder decoder = new JPEGDecoder(); decoder.parse(in); pixelWidth = decoder.getWidth(); @@ -138,7 +139,7 @@ public class JPEGImage { } decoder.clear(null); } - private JPEGPixelStorage pixelStorage; + private JPEGColorSink pixelStorage; private final int pixelWidth, pixelHeight, glFormat, bytesPerPixel; private boolean reversedChannels; private final ByteBuffer data; |