-/*
- * Copyright (c) 2001-2002, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2002-2003, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. 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.
- *
- * 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 OWNER 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.
- */
-
-#define VERSION "0.0.8"
-
-#ifdef _WIN32 /*DAVID_WIN32*/
-#ifdef gdcmopenjpeg_EXPORTS /*LIBJ2K_EXPORTS*/
-#define LIBJ2K_API __declspec(dllexport)
-#else
-#define LIBJ2K_API __declspec(dllimport)
-#endif
-#else
-#define LIBJ2K_API
-#endif
-
-#ifndef __J2K_H
-#define __J2K_H
-
-#define J2K_MAXRLVLS 33 /* Number of maximum resolution level authorized */
-#define J2K_MAXBANDS (3*J2K_MAXRLVLS-2) /* Number of maximum sub-band linked to number of resolution level */
-#define J2K_CFMT 0
-#define JP2_CFMT 1
-#define JPT_CFMT 2
-#define MJ2_CFMT 3
-#define PXM_DFMT 0
-#define PGX_DFMT 1
-#define BMP_DFMT 2
-#define YUV_DFMT 3
-
-#define J2K_CP_CSTY_PRT 0x01
-#define J2K_CP_CSTY_SOP 0x02
-#define J2K_CP_CSTY_EPH 0x04
-#define J2K_CCP_CSTY_PRT 0x01
-#define J2K_CCP_CBLKSTY_LAZY 0x01
-#define J2K_CCP_CBLKSTY_RESET 0x02
-#define J2K_CCP_CBLKSTY_TERMALL 0x04
-#define J2K_CCP_CBLKSTY_VSC 0x08
-#define J2K_CCP_CBLKSTY_PTERM 0x10
-#define J2K_CCP_CBLKSTY_SEGSYM 0x20
-#define J2K_CCP_QNTSTY_NOQNT 0
-#define J2K_CCP_QNTSTY_SIQNT 1
-#define J2K_CCP_QNTSTY_SEQNT 2
-
-typedef struct {
- int dx, dy; /* XRsiz, YRsiz */
- int w, h; /* width and height of data */
- int x0, y0; /* offset of the component compare to the whole image */
- int prec; /* precision */
- int bpp; /* deapth of image in bits */
- int sgnd; /* signed */
- int resno_decoded; /* number of decoded resolution */
- int factor; /* number of division by 2 of the out image compare to the original size of image */
- int *data; /* image-component data */
-} j2k_comp_t;
-
-typedef struct {
- int x0, y0; /* XOsiz, YOsiz */
- int x1, y1; /* Xsiz, Ysiz */
- int numcomps; /* number of components */
- int color_space; /* sRGB, Greyscale or YUV */
- j2k_comp_t *comps; /* image-components */
-} j2k_image_t;
-
-typedef struct {
- int expn; /* exponent */
- int mant; /* mantissa */
-} j2k_stepsize_t;
-
-typedef struct {
- int csty; /* coding style */
- int numresolutions; /* number of resolutions */
- int cblkw; /* width of code-blocks */
- int cblkh; /* height of code-blocks */
- int cblksty; /* code-block coding style */
- int qmfbid; /* discrete wavelet transform identifier */
- int qntsty; /* quantisation style */
- j2k_stepsize_t stepsizes[J2K_MAXBANDS]; /* stepsizes used for quantization */
- int numgbits; /* number of guard bits */
- int roishift; /* Region Of Interest shift */
- int prcw[J2K_MAXRLVLS]; /* Precinct width */
- int prch[J2K_MAXRLVLS]; /* Precinct height */
-} j2k_tccp_t;
-
-typedef struct {
- int resno0, compno0;
- int layno1, resno1, compno1;
- int prg;
- int tile;
- char progorder[4];
-} j2k_poc_t;
-
-typedef struct {
- int first; /* 1 : first part-tile of a tile */
- int csty; /* coding style */
- int prg; /* progression order */
- int numlayers; /* number of layers */
- int mct; /* multi-component transform identifier */
- int rates[100]; /* rates of layers */
- int numpocs; /* number of progression order changes */
- int POC; /* Precise if a POC marker has been used O:NO, 1:YES */
- j2k_poc_t pocs[32]; /* progression order changes */
- unsigned char *ppt_data; /* packet header store there for futur use in t2_decode_packet */
- unsigned char *ppt_data_first; /* pointer remaining on the first byte of the first header if ppt is used */
- int ppt; /* If ppt == 1 --> there was a PPT marker for the present tile */
- int ppt_store; /* Use in case of multiple marker PPT (number of info already store) */
- int ppt_len; /* ppmbug1 */
- float distoratio[100]; /* add fixed_quality */
- j2k_tccp_t *tccps; /* tile-component coding parameters */
-} j2k_tcp_t;
-
-typedef struct {
- int intermed_file; /* 1: Store each encoded tile one by one in the output file (for mega-Images)*/
- int decod_format; /* 0: PGX, 1: PxM, 2: BMP */
- int cod_format; /* 0: J2K, 1: JP2, 2: JPT */
- int disto_alloc; /* Allocation by rate/distortion */
- int fixed_alloc; /* Allocation by fixed layer */
- int fixed_quality; /* add fixed_quality */
- int reduce; /* if != 0, then original dimension divided by 2^(reduce); if == 0 or not used, image is decoded to the full resolution */
- int layer; /* if != 0, then only the first "layer" layers are decoded; if == 0 or not used, all the quality layers are decoded */
- int index_on; /* 0 = no index || 1 = index */
- int tx0, ty0; /* XTOsiz, YTOsiz */
- int tdx, tdy; /* XTsiz, YTsiz */
- char *comment; /* comment for coding */
- int tw, th; /* number of tiles in width and heigth */
- int *tileno; /* ID number of the tiles present in the codestream */
- int tileno_size; /* size of the vector tileno */
- unsigned char *ppm_data; /* packet header store there for futur use in t2_decode_packet */
- unsigned char *ppm_data_first; /* pointer remaining on the first byte of the first header if ppm is used */
- int ppm; /* If ppm == 1 --> there was a PPM marker for the present tile */
- int ppm_store; /* Use in case of multiple marker PPM (number of info already store) */
- int ppm_previous; /* Use in case of multiple marker PPM (case on non-finished previous info) */
- int ppm_len; /* ppmbug1 */
- j2k_tcp_t *tcps; /* tile coding parameters */
- int *matrice; /* Fixed layer */
-} j2k_cp_t;
-
-typedef struct {
- int start_pos, end_pos; /* start and end position */
- double disto; /* ADD for Marcela */
-} info_packet; /* Index struct */
-
-typedef struct {
- double *thresh; /* value of thresh for each layer by tile cfr. Marcela */
- int num_tile; /* Number of Tile */
- int start_pos; /* Start position */
- int end_header; /* End position of the header */
- int end_pos; /* End position */
- int pw[33], ph[33]; /* precinct number for each resolution level */
-
- int pdx[33], pdy[33]; /* precinct size (in power of 2), in X and Y for each resolution level */
- info_packet *packet; /* information concerning packets inside tile */
- int nbpix; /* add fixed_quality */
- double distotile; /* add fixed_quality */
-} info_tile; /* index struct */
-
-typedef struct {
- int index_on;
- double D_max; /* ADD for Marcela */
- int num; /* numero of packet */
- int index_write; /* writing the packet inthe index with t2_encode_packets */
- int Im_w, Im_h; /* Image width and Height */
- int Prog; /* progression order */
- int Tile_x, Tile_y; /* Tile size in x and y */
- int Tile_Ox, Tile_Oy;
- int tw, th; /* Number of Tile in X and Y */
- int Comp; /* Component numbers */
- int Layer; /* number of layer */
- int Decomposition; /* number of decomposition */
- int Main_head_end; /* Main header position */
- int codestream_size; /* codestream's size */
- info_tile *tile; /* information concerning tiles inside image */
-} info_image; /* index struct */
-
-/*
- * Encode an image into a JPEG-2000 codestream
- * i: image to encode
- * cp: coding parameters
- * output: destination buffer or name of the output file when cp->intermed_file==1
- * len: length of destination buffer
- * index : index file name
- */
-LIBJ2K_API int j2k_encode(j2k_image_t * i, j2k_cp_t * cp, char *output,
- int len, char *index);
-
-/* LIBJ2K_API int j2k_encode(j2k_image_t *i, j2k_cp_t *cp,unsigned char *dest, int len); */
-/*
- * Decode an image from a JPEG-2000 codestream
- * src: source buffer
- * len: length of source buffer
- * i: decode image
- * cp: coding parameters that were used to encode the image
- */
-
-LIBJ2K_API int j2k_decode(unsigned char *src, int len, j2k_image_t * img,
- j2k_cp_t * cp);
-
-
-/*
- * Decode an image form a JPT-stream (JPEG 2000, JPIP)
- * src: source buffer
- * len: length of source buffer
- * i: decode image
- * cp: coding parameters that were used to encode the image
- *
- */
-int j2k_decode_jpt_stream(unsigned char *src, int len, j2k_image_t * img,
- j2k_cp_t * cp);
-
-void j2k_dec_release();//antonin
-
-#endif
+/*\r
+ * Copyright (c) 2001-2003, David Janssens\r
+ * Copyright (c) 2002-2003, Yannick Verschueren\r
+ * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe\r
+ * Copyright (c) 2005, Hervé Drolon, FreeImage Team\r
+ * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions\r
+ * are met:\r
+ * 1. Redistributions of source code must retain the above copyright\r
+ * notice, this list of conditions and the following disclaimer.\r
+ * 2. Redistributions in binary form must reproduce the above copyright\r
+ * notice, this list of conditions and the following disclaimer in the\r
+ * documentation and/or other materials provided with the distribution.\r
+ *\r
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'\r
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\r
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
+ * POSSIBILITY OF SUCH DAMAGE.\r
+ */\r
+#ifndef __J2K_H\r
+#define __J2K_H\r
+/**\r
+@file j2k.h\r
+@brief The JPEG-2000 Codestream Reader/Writer (J2K)\r
+\r
+The functions in J2K.C have for goal to read/write the several parts of the codestream: markers and data.\r
+*/\r
+\r
+/** @defgroup J2K J2K - JPEG-2000 codestream reader/writer */\r
+/*@{*/\r
+\r
+#define J2K_CP_CSTY_PRT 0x01\r
+#define J2K_CP_CSTY_SOP 0x02\r
+#define J2K_CP_CSTY_EPH 0x04\r
+#define J2K_CCP_CSTY_PRT 0x01\r
+#define J2K_CCP_CBLKSTY_LAZY 0x01\r
+#define J2K_CCP_CBLKSTY_RESET 0x02\r
+#define J2K_CCP_CBLKSTY_TERMALL 0x04\r
+#define J2K_CCP_CBLKSTY_VSC 0x08\r
+#define J2K_CCP_CBLKSTY_PTERM 0x10\r
+#define J2K_CCP_CBLKSTY_SEGSYM 0x20\r
+#define J2K_CCP_QNTSTY_NOQNT 0\r
+#define J2K_CCP_QNTSTY_SIQNT 1\r
+#define J2K_CCP_QNTSTY_SEQNT 2\r
+\r
+/* ----------------------------------------------------------------------- */\r
+\r
+#define J2K_MS_SOC 0xff4f /**< SOC marker value */\r
+#define J2K_MS_SOT 0xff90 /**< SOT marker value */\r
+#define J2K_MS_SOD 0xff93 /**< SOD marker value */\r
+#define J2K_MS_EOC 0xffd9 /**< EOC marker value */\r
+#define J2K_MS_SIZ 0xff51 /**< SIZ marker value */\r
+#define J2K_MS_COD 0xff52 /**< COD marker value */\r
+#define J2K_MS_COC 0xff53 /**< COC marker value */\r
+#define J2K_MS_RGN 0xff5e /**< RGN marker value */\r
+#define J2K_MS_QCD 0xff5c /**< QCD marker value */\r
+#define J2K_MS_QCC 0xff5d /**< QCC marker value */\r
+#define J2K_MS_POC 0xff5f /**< POC marker value */\r
+#define J2K_MS_TLM 0xff55 /**< TLM marker value */\r
+#define J2K_MS_PLM 0xff57 /**< PLM marker value */\r
+#define J2K_MS_PLT 0xff58 /**< PLT marker value */\r
+#define J2K_MS_PPM 0xff60 /**< PPM marker value */\r
+#define J2K_MS_PPT 0xff61 /**< PPT marker value */\r
+#define J2K_MS_SOP 0xff91 /**< SOP marker value */\r
+#define J2K_MS_EPH 0xff92 /**< EPH marker value */\r
+#define J2K_MS_CRG 0xff63 /**< CRG marker value */\r
+#define J2K_MS_COM 0xff64 /**< COM marker value */\r
+\r
+/* ----------------------------------------------------------------------- */\r
+\r
+/**\r
+Values that specify the status of the decoding process when decoding the main header. \r
+These values may be combined with a | operator. \r
+*/\r
+typedef enum J2K_STATUS {\r
+ J2K_STATE_MHSOC = 0x0001, /**< a SOC marker is expected */\r
+ J2K_STATE_MHSIZ = 0x0002, /**< a SIZ marker is expected */\r
+ J2K_STATE_MH = 0x0004, /**< the decoding process is in the main header */\r
+ J2K_STATE_TPHSOT = 0x0008, /**< the decoding process is in a tile part header and expects a SOT marker */\r
+ J2K_STATE_TPH = 0x0010, /**< the decoding process is in a tile part header */\r
+ J2K_STATE_MT = 0x0020, /**< the EOC marker has just been read */\r
+ J2K_STATE_NEOC = 0x0040 /**< the decoding process must not expect a EOC marker because the codestream is truncated */\r
+} J2K_STATUS;\r
+\r
+/* ----------------------------------------------------------------------- */\r
+\r
+/**\r
+Quantization stepsize\r
+*/\r
+typedef struct opj_stepsize {\r
+ /** exponent */\r
+ int expn;\r
+ /** mantissa */\r
+ int mant;\r
+} opj_stepsize_t;\r
+\r
+/**\r
+Tile-component coding parameters\r
+*/\r
+typedef struct opj_tccp {\r
+ /** coding style */\r
+ int csty;\r
+ /** number of resolutions */\r
+ int numresolutions;\r
+ /** code-blocks width */\r
+ int cblkw;\r
+ /** code-blocks height */\r
+ int cblkh;\r
+ /** code-block coding style */\r
+ int cblksty;\r
+ /** discrete wavelet transform identifier */\r
+ int qmfbid;\r
+ /** quantisation style */\r
+ int qntsty;\r
+ /** stepsizes used for quantization */\r
+ opj_stepsize_t stepsizes[J2K_MAXBANDS];\r
+ /** number of guard bits */\r
+ int numgbits;\r
+ /** Region Of Interest shift */\r
+ int roishift;\r
+ /** precinct width */\r
+ int prcw[J2K_MAXRLVLS];\r
+ /** precinct height */\r
+ int prch[J2K_MAXRLVLS]; \r
+} opj_tccp_t;\r
+\r
+/**\r
+Tile coding parameters : \r
+this structure is used to store coding/decoding parameters common to all\r
+tiles (information like COD, COC in main header)\r
+*/\r
+typedef struct opj_tcp {\r
+ /** 1 : first part-tile of a tile */\r
+ int first;\r
+ /** coding style */\r
+ int csty;\r
+ /** progression order */\r
+ OPJ_PROG_ORDER prg;\r
+ /** number of layers */\r
+ int numlayers;\r
+ /** multi-component transform identifier */\r
+ int mct;\r
+ /** rates of layers */\r
+ int rates[100];\r
+ /** number of progression order changes */\r
+ int numpocs;\r
+ /** indicates if a POC marker has been used O:NO, 1:YES */\r
+ int POC;\r
+ /** progression order changes */\r
+ opj_poc_t pocs[32];\r
+ /** packet header store there for futur use in t2_decode_packet */\r
+ unsigned char *ppt_data;\r
+ /** pointer remaining on the first byte of the first header if ppt is used */\r
+ unsigned char *ppt_data_first;\r
+ /** If ppt == 1 --> there was a PPT marker for the present tile */\r
+ int ppt;\r
+ /** used in case of multiple marker PPT (number of info already stored) */\r
+ int ppt_store;\r
+ /** ppmbug1 */\r
+ int ppt_len;\r
+ /** add fixed_quality */\r
+ float distoratio[100];\r
+ /** tile-component coding parameters */\r
+ opj_tccp_t *tccps;\r
+} opj_tcp_t;\r
+\r
+/**\r
+Coding parameters\r
+*/\r
+typedef struct opj_cp {\r
+ /** allocation by rate/distortion */\r
+ int disto_alloc;\r
+ /** allocation by fixed layer */\r
+ int fixed_alloc;\r
+ /** add fixed_quality */\r
+ int fixed_quality;\r
+ /** if != 0, then original dimension divided by 2^(reduce); if == 0 or not used, image is decoded to the full resolution */\r
+ int reduce;\r
+ /** if != 0, then only the first "layer" layers are decoded; if == 0 or not used, all the quality layers are decoded */\r
+ int layer;\r
+ /** 0 = no index || 1 = index */\r
+ int index_on;\r
+ /** XTOsiz */\r
+ int tx0;\r
+ /** YTOsiz */\r
+ int ty0;\r
+ /** XTsiz */\r
+ int tdx;\r
+ /** YTsiz */\r
+ int tdy;\r
+ /** comment for coding */\r
+ char *comment;\r
+ /** number of tiles in width */\r
+ int tw;\r
+ /** number of tiles in heigth */\r
+ int th;\r
+ /** ID number of the tiles present in the codestream */\r
+ int *tileno;\r
+ /** size of the vector tileno */\r
+ int tileno_size;\r
+ /** packet header store there for futur use in t2_decode_packet */\r
+ unsigned char *ppm_data;\r
+ /** pointer remaining on the first byte of the first header if ppm is used */\r
+ unsigned char *ppm_data_first;\r
+ /** if ppm == 1 --> there was a PPM marker for the present tile */\r
+ int ppm;\r
+ /** use in case of multiple marker PPM (number of info already store) */\r
+ int ppm_store;\r
+ /** use in case of multiple marker PPM (case on non-finished previous info) */\r
+ int ppm_previous;\r
+ /** ppmbug1 */\r
+ int ppm_len;\r
+ /** tile coding parameters */\r
+ opj_tcp_t *tcps;\r
+ /** fixed layer */\r
+ int *matrice;\r
+} opj_cp_t;\r
+\r
+/**\r
+Information concerning a packet inside tile\r
+*/\r
+typedef struct opj_packet_info {\r
+ /** start position */\r
+ int start_pos;\r
+ /** end position */\r
+ int end_pos;\r
+ /** ADD for Marcela */\r
+ double disto;\r
+} opj_packet_info_t;\r
+\r
+/**\r
+Index structure : information regarding tiles inside image\r
+*/\r
+typedef struct opj_tile_info {\r
+ /** value of thresh for each layer by tile cfr. Marcela */\r
+ double *thresh;\r
+ /** number of tile */\r
+ int num_tile;\r
+ /** start position */\r
+ int start_pos;\r
+ /** end position of the header */\r
+ int end_header;\r
+ /** end position */\r
+ int end_pos;\r
+ /** precinct number for each resolution level (width) */\r
+ int pw[33];\r
+ /** precinct number for each resolution level (height) */\r
+ int ph[33];\r
+ /** precinct size (in power of 2), in X for each resolution level */\r
+ int pdx[33];\r
+ /** precinct size (in power of 2), in Y for each resolution level */\r
+ int pdy[33];\r
+ /** information concerning packets inside tile */\r
+ opj_packet_info_t *packet;\r
+ /** add fixed_quality */\r
+ int nbpix;\r
+ /** add fixed_quality */\r
+ double distotile;\r
+} opj_tile_info_t;\r
+\r
+/**\r
+Index structure\r
+*/\r
+typedef struct opj_image_info {\r
+ /** 0 = no index || 1 = index */\r
+ int index_on;\r
+ /** maximum distortion reduction on the whole image (add for Marcela) */\r
+ double D_max;\r
+ /** packet number */\r
+ int num;\r
+ /** writing the packet in the index with t2_encode_packets */\r
+ int index_write;\r
+ /** image width */\r
+ int image_w;\r
+ /** image height */\r
+ int image_h;\r
+ /** progression order */\r
+ OPJ_PROG_ORDER prog;\r
+ /** tile size in x */\r
+ int tile_x;\r
+ /** tile size in y */\r
+ int tile_y;\r
+ /** */\r
+ int tile_Ox;\r
+ /** */\r
+ int tile_Oy;\r
+ /** number of tiles in X */\r
+ int tw;\r
+ /** number of tiles in Y */\r
+ int th;\r
+ /** component numbers */\r
+ int comp;\r
+ /** number of layer */\r
+ int layer;\r
+ /** number of decomposition */\r
+ int decomposition;\r
+ /** main header position */\r
+ int main_head_end;\r
+ /** codestream's size */\r
+ int codestream_size;\r
+ /** information regarding tiles inside image */\r
+ opj_tile_info_t *tile;\r
+} opj_image_info_t;\r
+\r
+/**\r
+JPEG-2000 codestream reader/writer\r
+*/\r
+typedef struct opj_j2k {\r
+ /** codec context */\r
+ opj_common_ptr cinfo;\r
+\r
+ /** locate in which part of the codestream the decoder is (main header, tile header, end) */\r
+ int state;\r
+ /** number of the tile curently concern by coding/decoding */\r
+ int curtileno;\r
+ /** \r
+ locate the position of the end of the tile in the codestream, \r
+ used to detect a truncated codestream (in j2k_read_sod)\r
+ */\r
+ unsigned char *eot;\r
+ /**\r
+ locate the start position of the SOT marker of the current coded tile: \r
+ after encoding the tile, a jump (in j2k_write_sod) is done to the SOT marker to store the value of its length. \r
+ */\r
+ int sot_start;\r
+ int sod_start;\r
+ /**\r
+ as the J2K-file is written in several parts during encoding, \r
+ it enables to make the right correction in position return by cio_tell\r
+ */\r
+ int pos_correction;\r
+ /** array used to store the data of each tile */\r
+ unsigned char **tile_data;\r
+ /** array used to store the length of each tile */\r
+ int *tile_len;\r
+ /** \r
+ decompression only : \r
+ store decoding parameters common to all tiles (information like COD, COC in main header)\r
+ */\r
+ opj_tcp_t *default_tcp;\r
+ /** pointer to the encoded / decoded image */\r
+ opj_image_t *image;\r
+ /** pointer to the coding parameters */\r
+ opj_cp_t *cp;\r
+ /** helper used to write the index file */\r
+ opj_image_info_t *image_info;\r
+ /** pointer to the byte i/o stream */\r
+ opj_cio_t *cio;\r
+} opj_j2k_t;\r
+\r
+/** @name Exported functions */\r
+/*@{*/\r
+/* ----------------------------------------------------------------------- */\r
+/**\r
+Creates a J2K decompression structure\r
+@param cinfo Codec context info\r
+@return Returns a handle to a J2K decompressor if successful, returns NULL otherwise\r
+*/\r
+opj_j2k_t* j2k_create_decompress(opj_common_ptr cinfo);\r
+/**\r
+Destroy a J2K decompressor handle\r
+@param j2k J2K decompressor handle to destroy\r
+*/\r
+void j2k_destroy_decompress(opj_j2k_t *j2k);\r
+/**\r
+Setup the decoder decoding parameters using user parameters.\r
+Decoding parameters are returned in j2k->cp. \r
+@param j2k J2K decompressor handle\r
+@param parameters decompression parameters\r
+*/\r
+void j2k_setup_decoder(opj_j2k_t *j2k, opj_dparameters_t *parameters);\r
+/**\r
+Decode an image from a JPEG-2000 codestream\r
+@param j2k J2K decompressor handle\r
+@param cio Input buffer stream\r
+@return Returns a decoded image if successful, returns NULL otherwise\r
+*/\r
+opj_image_t* j2k_decode(opj_j2k_t *j2k, opj_cio_t *cio);\r
+/**\r
+Decode an image form a JPT-stream (JPEG 2000, JPIP)\r
+@param j2k J2K decompressor handle\r
+@param cio Input buffer stream\r
+@return Returns a decoded image if successful, returns NULL otherwise\r
+*/\r
+opj_image_t* j2k_decode_jpt_stream(opj_j2k_t *j2k, opj_cio_t *cio);\r
+/**\r
+Creates a J2K compression structure\r
+@param cinfo Codec context info\r
+@return Returns a handle to a J2K compressor if successful, returns NULL otherwise\r
+*/\r
+opj_j2k_t* j2k_create_compress(opj_common_ptr cinfo);\r
+/**\r
+Destroy a J2K compressor handle\r
+@param j2k J2K compressor handle to destroy\r
+*/\r
+void j2k_destroy_compress(opj_j2k_t *j2k);\r
+/**\r
+Setup the encoder parameters using the current image and using user parameters. \r
+Coding parameters are returned in j2k->cp. \r
+@param j2k J2K compressor handle\r
+@param parameters compression parameters\r
+@param image input filled image\r
+*/\r
+void j2k_setup_encoder(opj_j2k_t *j2k, opj_cparameters_t *parameters, opj_image_t *image);\r
+/**\r
+Encode an image into a JPEG-2000 codestream\r
+@param j2k J2K compressor handle\r
+@param cio Output buffer stream\r
+@param image Image to encode\r
+@param index Name of the index file if required, NULL otherwise\r
+@return Returns true if successful, returns false otherwise\r
+*/\r
+bool j2k_encode(opj_j2k_t *j2k, opj_cio_t *cio, opj_image_t *image, char *index);\r
+/* ----------------------------------------------------------------------- */\r
+/*@}*/\r
+\r
+/*@}*/\r
+\r
+#endif /* __J2K_H */\r