Possibility to choose to apply MCT (multiple component transform) enabled, and new...
[openjpeg.git] / mj2 / libopenjpeg_097 / tcd.h
1 /*\r
2  * Copyright (c) 2001-2002, David Janssens \r
3  * Copyright (c) 2002-2003, Yannick Verschueren\r
4  * Copyright (c) 2002-2003,  Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium\r
5  * All rights reserved.\r
6  *\r
7  * Redistribution and use in source and binary forms, with or without\r
8  * modification, are permitted provided that the following conditions\r
9  * are met:\r
10  * 1. Redistributions of source code must retain the above copyright\r
11  *    notice, this list of conditions and the following disclaimer.\r
12  * 2. Redistributions in binary form must reproduce the above copyright\r
13  *    notice, this list of conditions and the following disclaimer in the\r
14  *    documentation and/or other materials provided with the distribution.\r
15  *\r
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'\r
17  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
19  * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\r
20  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
21  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r
22  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
23  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
24  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
25  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
26  * POSSIBILITY OF SUCH DAMAGE.\r
27  */\r
28 \r
29 #ifndef __TCD_H\r
30 #define __TCD_H\r
31 \r
32 #include "j2k.h"\r
33 #include "tgt.h"\r
34 \r
35 typedef struct {\r
36   int numpasses;\r
37   int len;\r
38   unsigned char *data;\r
39   int maxpasses;\r
40   int numnewpasses;\r
41   int newlen;\r
42 } tcd_seg_t;\r
43 \r
44 typedef struct {\r
45   int rate;\r
46   double distortiondec;\r
47   int term, len;\r
48 } tcd_pass_t;\r
49 \r
50 typedef struct {\r
51   int numpasses;                /* Number of passes in the layer */\r
52   int len;                      /* len of information */\r
53   double disto;                 /* add for index (Cfr. Marcela) */\r
54   unsigned char *data;          /* data */\r
55 } tcd_layer_t;\r
56 \r
57 typedef struct {\r
58   int x0, y0, x1, y1;           /* dimension of the code-blocks : left upper corner (x0, y0) right low corner (x1,y1) */\r
59   int numbps;\r
60   int numlenbits;\r
61   int len;                      /* length */\r
62   int numpasses;                /* number of pass already done for the code-blocks */\r
63   int numnewpasses;             /* number of pass added to the code-blocks */\r
64   int numsegs;                  /* number of segments */\r
65   tcd_seg_t segs[100];          /* segments informations */\r
66   unsigned char data[8192];     /* Data */\r
67   int numpassesinlayers;        /* number of passes in the layer */\r
68   tcd_layer_t layers[100];      /* layer information */\r
69   int totalpasses;              /* total number of passes */\r
70   tcd_pass_t passes[100];       /* information about the passes */\r
71 } tcd_cblk_t;\r
72 \r
73 typedef struct {\r
74   int x0, y0, x1, y1;           /* dimension of the precinct : left upper corner (x0, y0) right low corner (x1,y1) */\r
75   int cw, ch;                   /* number of precinct in width and heigth */\r
76   tcd_cblk_t *cblks;            /* code-blocks informations */\r
77   tgt_tree_t *incltree;         /* inclusion tree */\r
78   tgt_tree_t *imsbtree;         /* IMSB tree */\r
79 } tcd_precinct_t;\r
80 \r
81 typedef struct {\r
82   int x0, y0, x1, y1;           /* dimension of the subband : left upper corner (x0, y0) right low corner (x1,y1) */\r
83   int bandno;\r
84   tcd_precinct_t *precincts;    /* precinct information */\r
85   int numbps;\r
86   float stepsize;\r
87 } tcd_band_t;\r
88 \r
89 typedef struct {\r
90   int x0, y0, x1, y1;           /* dimension of the resolution level : left upper corner (x0, y0) right low corner (x1,y1) */\r
91   int pw, ph;\r
92   int numbands;                 /* number sub-band for the resolution level */\r
93   tcd_band_t bands[3];          /* subband information */\r
94 } tcd_resolution_t;\r
95 \r
96 typedef struct {\r
97   int x0, y0, x1, y1;           /* dimension of component : left upper corner (x0, y0) right low corner (x1,y1) */\r
98   int numresolutions;           /* number of resolutions level */\r
99   tcd_resolution_t *resolutions;        /* resolutions information */\r
100   int *data;                    /* data of the component */\r
101   int nbpix;                    /* add fixed_quality */\r
102 } tcd_tilecomp_t;\r
103 \r
104 typedef struct {\r
105   int x0, y0, x1, y1;           /* dimension of the tile : left upper corner (x0, y0) right low corner (x1,y1) */\r
106   int numcomps;                 /* number of components in tile */\r
107   tcd_tilecomp_t *comps;        /* Components information */\r
108   int nbpix;                    /* add fixed_quality */\r
109   double distotile;             /* add fixed_quality */\r
110   double distolayer[100];       /* add fixed_quality */\r
111 } tcd_tile_t;\r
112 \r
113 typedef struct {\r
114   int tw, th;                   /* number of tiles in width and heigth */\r
115   tcd_tile_t *tiles;            /* Tiles information */\r
116 } tcd_image_t;\r
117 \r
118 /*\r
119  * Initialize the tile coder (reuses the memory allocated by tcd_malloc_encode)\r
120  * img: raw image\r
121  * cp: coding parameters\r
122  * curtileno : number that identifies the tile that will be encoded\r
123  */\r
124 void tcd_init_encode(j2k_image_t * img, j2k_cp_t * cp, int curtileno);\r
125 \r
126 \r
127 /*\r
128  * Initialize the tile coder (allocate the memory)\r
129  * img: raw image\r
130  * cp: coding parameters\r
131  * curtileno : number that identifies the tile that will be encoded\r
132  */\r
133 void tcd_malloc_encode(j2k_image_t * img, j2k_cp_t * cp, int curtileno);\r
134 \r
135 \r
136 /*\r
137  * Initialize the tile decoder\r
138  * img: raw image\r
139  * cp: coding parameters\r
140  */\r
141 void tcd_init(j2k_image_t * img, j2k_cp_t * cp);\r
142 \r
143 \r
144 /*\r
145  * Free the memory allocated for encoding\r
146  * img: raw image\r
147  * cp: coding parameters\r
148  * curtileno : number that identifies the tile that will be encoded\r
149  */\r
150 void tcd_free_encode(j2k_image_t * img, j2k_cp_t * cp, int curtileno);\r
151 \r
152 /*\r
153  * Encode a tile from the raw image into a buffer, format pnm, pgm or ppm\r
154  * tileno: number that identifies one of the tiles to be encoded\r
155  * dest: destination buffer\r
156  * len: length of destination buffer\r
157  * info_IM: creation of index file\r
158  */\r
159 int tcd_encode_tile_pxm(int tileno, unsigned char *dest, int len,\r
160                         info_image * info_IM);\r
161 \r
162 \r
163 /*\r
164  * Encode a tile from the raw image into a buffer, format pgx\r
165  * tileno: number that identifies one of the tiles to be encoded\r
166  * dest: destination buffer\r
167  * len: length of destination buffer\r
168  * info_IM: creation of index file\r
169  */\r
170 int tcd_encode_tile_pgx(int tileno, unsigned char *dest, int len,\r
171                         info_image * info_IM);\r
172 \r
173 /*\r
174  * Decode a tile from a buffer into a raw image\r
175  * src: source buffer\r
176  * len: length of the source buffer\r
177  * tileno: number that identifies the tile that will be decoded\r
178  */\r
179 int tcd_decode_tile(unsigned char *src, int len, int tileno);\r
180 \r
181 void tcd_dec_release();\r
182 \r
183 #endif\r