-/*
- * 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.
- */
-
-#ifndef __TCD_H
-#define __TCD_H
-
-#include "j2k.h"
-#include "tgt.h"
-
-typedef struct {
- int numpasses;
- int len;
- unsigned char *data;
- int maxpasses;
- int numnewpasses;
- int newlen;
-} tcd_seg_t;
-
-typedef struct {
- int rate;
- double distortiondec;
- int term, len;
-} tcd_pass_t;
-
-typedef struct {
- int numpasses; /* Number of passes in the layer */
- int len; /* len of information */
- double disto; /* add for index (Cfr. Marcela) */
- unsigned char *data; /* data */
-} tcd_layer_t;
-
-typedef struct {
- int x0, y0, x1, y1; /* dimension of the code-blocks : left upper corner (x0, y0) right low corner (x1,y1) */
- int numbps;
- int numlenbits;
- int len; /* length */
- int numpasses; /* number of pass already done for the code-blocks */
- int numnewpasses; /* number of pass added to the code-blocks */
- int numsegs; /* number of segments */
- tcd_seg_t segs[100]; /* segments informations */
- unsigned char data[8192]; /* Data */
- int numpassesinlayers; /* number of passes in the layer */
- tcd_layer_t layers[100]; /* layer information */
- int totalpasses; /* total number of passes */
- tcd_pass_t passes[100]; /* information about the passes */
-} tcd_cblk_t;
-
-typedef struct {
- int x0, y0, x1, y1; /* dimension of the precinct : left upper corner (x0, y0) right low corner (x1,y1) */
- int cw, ch; /* number of precinct in width and heigth */
- tcd_cblk_t *cblks; /* code-blocks informations */
- tgt_tree_t *incltree; /* inclusion tree */
- tgt_tree_t *imsbtree; /* IMSB tree */
-} tcd_precinct_t;
-
-typedef struct {
- int x0, y0, x1, y1; /* dimension of the subband : left upper corner (x0, y0) right low corner (x1,y1) */
- int bandno;
- tcd_precinct_t *precincts; /* precinct information */
- int numbps;
- float stepsize;
-} tcd_band_t;
-
-typedef struct {
- int x0, y0, x1, y1; /* dimension of the resolution level : left upper corner (x0, y0) right low corner (x1,y1) */
- int pw, ph;
- int numbands; /* number sub-band for the resolution level */
- tcd_band_t bands[3]; /* subband information */
-} tcd_resolution_t;
-
-typedef struct {
- int x0, y0, x1, y1; /* dimension of component : left upper corner (x0, y0) right low corner (x1,y1) */
- int numresolutions; /* number of resolutions level */
- tcd_resolution_t *resolutions; /* resolutions information */
- int *data; /* data of the component */
- int nbpix; /* add fixed_quality */
-} tcd_tilecomp_t;
-
-typedef struct {
- int x0, y0, x1, y1; /* dimension of the tile : left upper corner (x0, y0) right low corner (x1,y1) */
- int numcomps; /* number of components in tile */
- tcd_tilecomp_t *comps; /* Components information */
- int nbpix; /* add fixed_quality */
- double distotile; /* add fixed_quality */
- double distolayer[100]; /* add fixed_quality */
-} tcd_tile_t;
-
-typedef struct {
- int tw, th; /* number of tiles in width and heigth */
- tcd_tile_t *tiles; /* Tiles information */
-} tcd_image_t;
-
-/*
- * Initialize the tile coder (reuses the memory allocated by tcd_malloc_encode)
- * img: raw image
- * cp: coding parameters
- * curtileno : number that identifies the tile that will be encoded
- */
-void tcd_init_encode(j2k_image_t * img, j2k_cp_t * cp, int curtileno);
-
-
-/*
- * Initialize the tile coder (allocate the memory)
- * img: raw image
- * cp: coding parameters
- * curtileno : number that identifies the tile that will be encoded
- */
-void tcd_malloc_encode(j2k_image_t * img, j2k_cp_t * cp, int curtileno);
-
-
-/*
- * Initialize the tile decoder
- * img: raw image
- * cp: coding parameters
- */
-void tcd_init(j2k_image_t * img, j2k_cp_t * cp);
-
-
-/*
- * Free the memory allocated for encoding
- * img: raw image
- * cp: coding parameters
- * curtileno : number that identifies the tile that will be encoded
- */
-void tcd_free_encode(j2k_image_t * img, j2k_cp_t * cp, int curtileno);
-
-/*
- * Encode a tile from the raw image into a buffer, format pnm, pgm or ppm
- * tileno: number that identifies one of the tiles to be encoded
- * dest: destination buffer
- * len: length of destination buffer
- * info_IM: creation of index file
- */
-int tcd_encode_tile_pxm(int tileno, unsigned char *dest, int len,
- info_image * info_IM);
-
-
-/*
- * Encode a tile from the raw image into a buffer, format pgx
- * tileno: number that identifies one of the tiles to be encoded
- * dest: destination buffer
- * len: length of destination buffer
- * info_IM: creation of index file
- */
-int tcd_encode_tile_pgx(int tileno, unsigned char *dest, int len,
- info_image * info_IM);
-
-/*
- * Decode a tile from a buffer into a raw image
- * src: source buffer
- * len: length of the source buffer
- * tileno: number that identifies the tile that will be decoded
- */
-int tcd_decode_tile(unsigned char *src, int len, int tileno);
-
-void tcd_dec_release();
-
-#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 __TCD_H\r
+#define __TCD_H\r
+/**\r
+@file tcd.h\r
+@brief Implementation of a tile coder/decoder (TCD)\r
+\r
+The functions in TCD.C have for goal to encode or decode each tile independently from\r
+each other. The functions in TCD.C are used by some function in J2K.C.\r
+*/\r
+\r
+/** @defgroup TCD TCD - Implementation of a tile coder/decoder */\r
+/*@{*/\r
+\r
+/**\r
+FIXME: documentation\r
+*/\r
+typedef struct opj_tcd_seg {\r
+ int numpasses;\r
+ int len;\r
+ unsigned char *data;\r
+ int maxpasses;\r
+ int numnewpasses;\r
+ int newlen;\r
+} opj_tcd_seg_t;\r
+\r
+/**\r
+FIXME: documentation\r
+*/\r
+typedef struct opj_tcd_pass {\r
+ int rate;\r
+ double distortiondec;\r
+ int term, len;\r
+} opj_tcd_pass_t;\r
+\r
+/**\r
+FIXME: documentation\r
+*/\r
+typedef struct opj_tcd_layer {\r
+ int numpasses; /* Number of passes in the layer */\r
+ int len; /* len of information */\r
+ double disto; /* add for index (Cfr. Marcela) */\r
+ unsigned char *data; /* data */\r
+} opj_tcd_layer_t;\r
+\r
+/**\r
+FIXME: documentation\r
+*/\r
+typedef struct opj_tcd_cblk {\r
+ int x0, y0, x1, y1; /* dimension of the code-blocks : left upper corner (x0, y0) right low corner (x1,y1) */\r
+ int numbps;\r
+ int numlenbits;\r
+ int len; /* length */\r
+ int numpasses; /* number of pass already done for the code-blocks */\r
+ int numnewpasses; /* number of pass added to the code-blocks */\r
+ int numsegs; /* number of segments */\r
+ opj_tcd_seg_t segs[100]; /* segments informations */\r
+ unsigned char data[8192]; /* Data */\r
+ int numpassesinlayers; /* number of passes in the layer */\r
+ opj_tcd_layer_t layers[100]; /* layer information */\r
+ int totalpasses; /* total number of passes */\r
+ opj_tcd_pass_t passes[100]; /* information about the passes */\r
+} opj_tcd_cblk_t;\r
+\r
+/**\r
+FIXME: documentation\r
+*/\r
+typedef struct opj_tcd_precinct {\r
+ int x0, y0, x1, y1; /* dimension of the precinct : left upper corner (x0, y0) right low corner (x1,y1) */\r
+ int cw, ch; /* number of precinct in width and heigth */\r
+ opj_tcd_cblk_t *cblks; /* code-blocks informations */\r
+ opj_tgt_tree_t *incltree; /* inclusion tree */\r
+ opj_tgt_tree_t *imsbtree; /* IMSB tree */\r
+} opj_tcd_precinct_t;\r
+\r
+/**\r
+FIXME: documentation\r
+*/\r
+typedef struct opj_tcd_band {\r
+ int x0, y0, x1, y1; /* dimension of the subband : left upper corner (x0, y0) right low corner (x1,y1) */\r
+ int bandno;\r
+ opj_tcd_precinct_t *precincts; /* precinct information */\r
+ int numbps;\r
+ float stepsize;\r
+} opj_tcd_band_t;\r
+\r
+/**\r
+FIXME: documentation\r
+*/\r
+typedef struct opj_tcd_resolution {\r
+ int x0, y0, x1, y1; /* dimension of the resolution level : left upper corner (x0, y0) right low corner (x1,y1) */\r
+ int pw, ph;\r
+ int numbands; /* number sub-band for the resolution level */\r
+ opj_tcd_band_t bands[3]; /* subband information */\r
+} opj_tcd_resolution_t;\r
+\r
+/**\r
+FIXME: documentation\r
+*/\r
+typedef struct opj_tcd_tilecomp {\r
+ int x0, y0, x1, y1; /* dimension of component : left upper corner (x0, y0) right low corner (x1,y1) */\r
+ int numresolutions; /* number of resolutions level */\r
+ opj_tcd_resolution_t *resolutions; /* resolutions information */\r
+ int *data; /* data of the component */\r
+ int nbpix; /* add fixed_quality */\r
+} opj_tcd_tilecomp_t;\r
+\r
+/**\r
+FIXME: documentation\r
+*/\r
+typedef struct opj_tcd_tile {\r
+ int x0, y0, x1, y1; /* dimension of the tile : left upper corner (x0, y0) right low corner (x1,y1) */\r
+ int numcomps; /* number of components in tile */\r
+ opj_tcd_tilecomp_t *comps; /* Components information */\r
+ int nbpix; /* add fixed_quality */\r
+ double distotile; /* add fixed_quality */\r
+ double distolayer[100]; /* add fixed_quality */\r
+} opj_tcd_tile_t;\r
+\r
+/**\r
+FIXME: documentation\r
+*/\r
+typedef struct opj_tcd_image {\r
+ int tw, th; /* number of tiles in width and heigth */\r
+ opj_tcd_tile_t *tiles; /* Tiles information */\r
+} opj_tcd_image_t;\r
+\r
+/**\r
+Tile coder/decoder\r
+*/\r
+typedef struct opj_tcd {\r
+ /** codec context */\r
+ opj_common_ptr cinfo;\r
+\r
+ /** info on each image tile */\r
+ opj_tcd_image_t *tcd_image;\r
+ /** image */\r
+ opj_image_t *image;\r
+ /** coding parameters */\r
+ opj_cp_t *cp;\r
+ /** pointer to the current encoded/decoded tile */\r
+ opj_tcd_tile_t *tcd_tile;\r
+ /** coding/decoding parameters common to all tiles */\r
+ opj_tcp_t *tcp;\r
+ /** current encoded/decoded tile */\r
+ int tcd_tileno;\r
+ /**@name working variables */\r
+ /*@{*/\r
+ opj_tcd_tile_t *tile;\r
+ opj_tcd_tilecomp_t *tilec;\r
+ opj_tcd_resolution_t *res;\r
+ opj_tcd_band_t *band;\r
+ opj_tcd_precinct_t *prc;\r
+ opj_tcd_cblk_t *cblk;\r
+ /*@}*/\r
+} opj_tcd_t;\r
+\r
+/** @name Exported functions */\r
+/*@{*/\r
+/* ----------------------------------------------------------------------- */\r
+\r
+/**\r
+Dump the content of a tcd structure\r
+*/\r
+void tcd_dump(FILE *fd, opj_tcd_t *tcd, opj_tcd_image_t *img);\r
+/**\r
+Create a new TCD handle\r
+@param cinfo Codec context info\r
+@return Returns a new TCD handle if successful returns NULL otherwise\r
+*/\r
+opj_tcd_t* tcd_create(opj_common_ptr cinfo);\r
+/**\r
+Destroy a previously created TCD handle\r
+@param tcd TCD handle to destroy\r
+*/\r
+void tcd_destroy(opj_tcd_t *tcd);\r
+/**\r
+Initialize the tile coder (allocate the memory)\r
+@param tcd TCD handle\r
+@param image Raw image\r
+@param cp Coding parameters\r
+@param curtileno Number that identifies the tile that will be encoded\r
+*/\r
+void tcd_malloc_encode(opj_tcd_t *tcd, opj_image_t * image, opj_cp_t * cp, int curtileno);\r
+/**\r
+Free the memory allocated for encoding\r
+@param tcd TCD handle\r
+*/\r
+void tcd_free_encode(opj_tcd_t *tcd);\r
+/**\r
+Initialize the tile coder (reuses the memory allocated by tcd_malloc_encode)\r
+@param tcd TCD handle\r
+@param image Raw image\r
+@param cp Coding parameters\r
+@param curtileno Number that identifies the tile that will be encoded\r
+*/\r
+void tcd_init_encode(opj_tcd_t *tcd, opj_image_t * image, opj_cp_t * cp, int curtileno);\r
+/**\r
+Initialize the tile decoder\r
+@param tcd TCD handle\r
+@param image Raw image\r
+@param cp Coding parameters\r
+*/\r
+void tcd_malloc_decode(opj_tcd_t *tcd, opj_image_t * image, opj_cp_t * cp);\r
+void tcd_makelayer_fixed(opj_tcd_t *tcd, int layno, int final);\r
+void tcd_rateallocate_fixed(opj_tcd_t *tcd);\r
+void tcd_makelayer(opj_tcd_t *tcd, int layno, double thresh, int final);\r
+bool tcd_rateallocate(opj_tcd_t *tcd, unsigned char *dest, int len, opj_image_info_t * image_info);\r
+/**\r
+Encode a tile from the raw image into a buffer\r
+@param tcd TCD handle\r
+@param tileno Number that identifies one of the tiles to be encoded\r
+@param dest Destination buffer\r
+@param len Length of destination buffer\r
+@param image_info Creation of index file\r
+@return \r
+*/\r
+int tcd_encode_tile(opj_tcd_t *tcd, int tileno, unsigned char *dest, int len, opj_image_info_t * image_info);\r
+/**\r
+Decode a tile from a buffer into a raw image\r
+@param tcd TCD handle\r
+@param src Source buffer\r
+@param len Length of source buffer\r
+@param tileno Number that identifies one of the tiles to be decoded\r
+*/\r
+bool tcd_decode_tile(opj_tcd_t *tcd, unsigned char *src, int len, int tileno);\r
+/**\r
+Free the memory allocated for decoding\r
+@param tcd TCD handle\r
+*/\r
+void tcd_free_decode(opj_tcd_t *tcd);\r
+\r
+/* ----------------------------------------------------------------------- */\r
+/*@}*/\r
+\r
+/*@}*/\r
+\r
+#endif /* __TCD_H */\r