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