]> Creatis software - gdcm.git/blobdiff - src/gdcmopenjpeg/libopenjpeg/tcd.h
ENH: Huge update to openjpeg 1.0 (actually more CVS)...
[gdcm.git] / src / gdcmopenjpeg / libopenjpeg / tcd.h
index a05d9755bcbf712b2ad95c7c787f0018d569c321..6f94de616d76c526c9d5a81b4618c56c38b9eb5f 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.
- */
-
-#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