]> Creatis software - gdcm.git/blobdiff - src/gdcmopenjpeg/libopenjpeg/j2k.h
ENH: Huge update to openjpeg 1.0 (actually more CVS)...
[gdcm.git] / src / gdcmopenjpeg / libopenjpeg / j2k.h
index b42ecf800f44a1109391708a99353cc634e25108..e80b68bfcadbe61501b32ca03507b25c3c198d96 100644 (file)
-/*
- * 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.9"
-
-#if defined(_WIN32) && defined (OPENJPEGDLL)
-#ifdef gdcmopenjpeg_EXPORTS /*LIBJ2K_EXPORTS*/
-#define LIBJ2K_API __declspec(dllexport)
-#else
-#define LIBJ2K_API __declspec(dllimport)
-#endif
-#else
-#ifdef OPENJPEGSTATIC
-#define LIBJ2K_API extern
-#else
-#define LIBJ2K_API
-#endif
-#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);
-
-LIBJ2K_API 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