jdk/src/java.desktop/share/native/libawt/awt/image/awt_parseImage.h
changeset 26751 70bac69b37c9
parent 25859 3317bb8137f4
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.desktop/share/native/libawt/awt/image/awt_parseImage.h	Fri Sep 19 09:41:05 2014 -0700
@@ -0,0 +1,195 @@
+/*
+ * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+#ifndef AWT_PARSE_IMAGE_H
+#define AWT_PARSE_IMAGE_H
+
+#include <jni.h>
+#include <jni_util.h>
+
+/***************************************************************************
+ *                               Definitions                               *
+ ***************************************************************************/
+
+#ifndef TRUE
+#define TRUE (1)
+#endif
+
+#ifndef FALSE
+#define FALSE (0)
+#endif
+
+typedef enum {
+    IMG_SUCCESS=0,
+    IMG_FAILURE=-1
+} ImgStatus_t;
+
+#define UNKNOWN_DATA_TYPE  0
+#define BYTE_DATA_TYPE     1
+#define SHORT_DATA_TYPE    2
+#define INT_DATA_TYPE      3
+
+#define UNKNOWN_RASTER_TYPE   0
+#define COMPONENT_RASTER_TYPE 1
+#define BANDED_RASTER_TYPE    2
+#define PACKED_RASTER_TYPE    3
+
+#define UNKNOWN_CM_TYPE   0
+#define COMPONENT_CM_TYPE 1
+#define DIRECT_CM_TYPE    2
+#define INDEX_CM_TYPE     3
+#define PACKED_CM_TYPE    4
+
+/* Packing types */
+#define UNKNOWN_PACKING         0
+#define BYTE_COMPONENTS         0x1
+#define SHORT_COMPONENTS        0x2
+#define PACKED_INT              0x3
+#define PACKED_SHORT            0x4
+#define PACKED_BYTE             0x5
+
+/* Interleaving */
+#define INTERLEAVED     0x10
+#define BANDED          0x20
+#define SINGLE_BAND     0x30
+#define PACKED_BAND     0x40
+
+#define BYTE_INTERLEAVED   (BYTE_COMPONENTS  | INTERLEAVED)
+#define SHORT_INTERLEAVED  (SHORT_COMPONENTS | INTERLEAVED)
+#define BYTE_SINGLE_BAND   (BYTE_COMPONENTS  | SINGLE_BAND)
+#define BYTE_PACKED_BAND   (BYTE_COMPONENTS  | PACKED_BAND)
+#define SHORT_SINGLE_BAND  (SHORT_COMPONENTS | SINGLE_BAND)
+#define BYTE_BANDED        (BYTE_COMPONENTS  | BANDED)
+#define SHORT_BANDED       (SHORT_COMPONENTS | BANDED)
+#define PACKED_BYTE_INTER  (PACKED_BYTE      | INTERLEAVED)
+#define PACKED_SHORT_INTER (PACKED_SHORT     | INTERLEAVED)
+#define PACKED_INT_INTER   (PACKED_INT       | INTERLEAVED)
+
+#define MAX_NUMBANDS 32
+
+/* Struct that holds information about a SinglePixelPackedModel object */
+typedef struct {
+    jint maskArray[MAX_NUMBANDS];
+    jint offsets[MAX_NUMBANDS];
+    jint nBits[MAX_NUMBANDS];
+    jint  maxBitSize;
+    jint isUsed; // flag to indicate whether the raster sample model is SPPSM
+} SPPSampleModelS_t;
+
+/* Struct that holds information for the Raster object */
+typedef struct {
+    jobject jraster;       /* The raster object */
+    jobject jdata;         /* Data storage object */
+    jobject jsampleModel;   /* The sample model */
+    SPPSampleModelS_t sppsm; /* SinglePixelPackedSampleModel mask/offsets */
+
+    jint *chanOffsets;      /* Array of channel offsets (or bit offsets) */
+
+    int width;             /* Width of the raster */
+    int height;            /* Height of the raster */
+    int minX;              /* origin of this raster x */
+    int minY;              /* origin of this raster x */
+
+    int baseOriginX;       /* origin of base raster */
+    int baseOriginY;       /* origin of base raster x */
+    int baseRasterWidth;   /* size of baseRaster */
+    int baseRasterHeight;  /* size of baseRaster */
+    int numDataElements;   /* Number of data bands in raster */
+    int numBands;          /* Number of bands in the raster  */
+    int scanlineStride;    /* Scanline Stride */
+    int pixelStride;       /* Pixel stride (or pixel bit stride) */
+    int dataIsShared;      /* If TRUE, data is shared */
+    int rasterType;        /* Type of raster */
+    int dataType;          /* Data type of the raster data */
+    int dataSize;          /* Number of bytes per data element */
+    int type;               /* Raster type */
+} RasterS_t;
+
+
+/* Struct that holds information about the ColorModel object */
+typedef struct {
+    jobject jrgb;          /* For ICM, rgb lut object */
+    jobject jcmodel;
+    jobject jcspace;
+    jint *nBits;            /* Number of bits per component */
+
+    int cmType;            /* Type of color model */
+    int isDefaultCM;       /* If TRUE, it is the default color model */
+    int isDefaultCompatCM; /* If TRUE, it is compatible with the default CM */
+                           /* Might be 4 byte and band order different */
+    int is_sRGB;           /* If TRUE, the color space is sRGB */
+    int numComponents;     /* Total number of components */
+    int supportsAlpha;     /* If it supports alpha */
+    int isAlphaPre;        /* If TRUE, alpha is premultiplied */
+    int csType;            /* Type of ColorSpace */
+    int transparency;
+    int maxNbits;
+    int transIdx;          /* For ICM, transparent pixel */
+    int mapSize;           /* For ICM, size of the lut */
+} ColorModelS_t;
+
+typedef struct {
+    int *colorOrder;
+
+    int channelOffset;
+    int dataOffset;        /* # bytes into the data array */
+    int sStride;
+    int pStride;
+    int packing;
+    int numChans;
+    int alphaIndex;        /* -1 if no alpha */
+    int needToExpand;      /* If true, the pixels are packed */
+    int expandToNbits;     /* If needToExpand, how many bits to allocate */
+} HintS_t;
+
+/* Struct that holds information for the BufferedImage object */
+typedef struct {
+    jobject jimage;        /* The BufferedImage object */
+    RasterS_t raster;      /* The raster structure */
+    ColorModelS_t cmodel;  /* The color model structure */
+    HintS_t hints;         /* Hint structure */
+    int     imageType;     /* Type of image */
+} BufImageS_t;
+
+/***************************************************************************
+ *                      Function Prototypes                                *
+ ***************************************************************************/
+int awt_parseImage(JNIEnv *env, jobject jimage, BufImageS_t **imagePP,
+                   int handleCustom);
+
+int awt_parseRaster(JNIEnv *env, jobject jraster, RasterS_t *rasterP);
+
+int awt_parseColorModel (JNIEnv *env, jobject jcmodel, int imageType,
+                         ColorModelS_t *cmP);
+
+void awt_freeParsedRaster(RasterS_t *rasterP, int freeRasterP);
+
+void awt_freeParsedImage(BufImageS_t *imageP, int freeImageP);
+
+int awt_getPixels(JNIEnv *env, RasterS_t *rasterP, void *bufferP);
+
+int awt_setPixels(JNIEnv *env, RasterS_t *rasterP, void *bufferP);
+
+#endif /* AWT_PARSE_IMAGE_H */