OpenJPEG  1.5.1
tcd.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium
3  * Copyright (c) 2002-2007, Professor Benoit Macq
4  * Copyright (c) 2001-2003, David Janssens
5  * Copyright (c) 2002-2003, Yannick Verschueren
6  * Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe
7  * Copyright (c) 2005, Herve Drolon, FreeImage Team
8  * All rights reserved.
9  *
10  * Redistribution and use in source and binary forms, with or without
11  * modification, are permitted provided that the following conditions
12  * are met:
13  * 1. Redistributions of source code must retain the above copyright
14  * notice, this list of conditions and the following disclaimer.
15  * 2. Redistributions in binary form must reproduce the above copyright
16  * notice, this list of conditions and the following disclaimer in the
17  * documentation and/or other materials provided with the distribution.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
20  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
23  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29  * POSSIBILITY OF SUCH DAMAGE.
30  */
31 #ifndef __TCD_H
32 #define __TCD_H
33 
43 
47 typedef struct opj_tcd_seg {
48  unsigned char** data;
49  int dataindex;
50  int numpasses;
51  int len;
52  int maxpasses;
54  int newlen;
56 
60 typedef struct opj_tcd_pass {
61  int rate;
62  double distortiondec;
63  int term, len;
65 
69 typedef struct opj_tcd_layer {
70  int numpasses; /* Number of passes in the layer */
71  int len; /* len of information */
72  double disto; /* add for index (Cfr. Marcela) */
73  unsigned char *data; /* data */
75 
79 typedef struct opj_tcd_cblk_enc {
80  unsigned char* data; /* Data */
81  opj_tcd_layer_t* layers; /* layer information */
82  opj_tcd_pass_t* passes; /* information about the passes */
83  int x0, y0, x1, y1; /* dimension of the code-blocks : left upper corner (x0, y0) right low corner (x1,y1) */
84  int numbps;
86  int numpasses; /* number of pass already done for the code-blocks */
87  int numpassesinlayers; /* number of passes in the layer */
88  int totalpasses; /* total number of passes */
90 
91 typedef struct opj_tcd_cblk_dec {
92  unsigned char* data; /* Data */
93  opj_tcd_seg_t* segs; /* segments informations */
94  int x0, y0, x1, y1; /* dimension of the code-blocks : left upper corner (x0, y0) right low corner (x1,y1) */
95  int numbps;
97  int len; /* length */
98  int numnewpasses; /* number of pass added to the code-blocks */
99  int numsegs; /* number of segments */
101 
105 typedef struct opj_tcd_precinct {
106  int x0, y0, x1, y1; /* dimension of the precinct : left upper corner (x0, y0) right low corner (x1,y1) */
107  int cw, ch; /* number of precinct in width and heigth */
108  union{ /* code-blocks informations */
111  } cblks;
112  opj_tgt_tree_t *incltree; /* inclusion tree */
113  opj_tgt_tree_t *imsbtree; /* IMSB tree */
115 
119 typedef struct opj_tcd_band {
120  int x0, y0, x1, y1; /* dimension of the subband : left upper corner (x0, y0) right low corner (x1,y1) */
121  int bandno;
122  opj_tcd_precinct_t *precincts; /* precinct information */
123  int numbps;
124  float stepsize;
126 
130 typedef struct opj_tcd_resolution {
131  int x0, y0, x1, y1; /* dimension of the resolution level : left upper corner (x0, y0) right low corner (x1,y1) */
132  int pw, ph;
133  int numbands; /* number sub-band for the resolution level */
134  opj_tcd_band_t bands[3]; /* subband information */
136 
140 typedef struct opj_tcd_tilecomp {
141  int x0, y0, x1, y1; /* dimension of component : left upper corner (x0, y0) right low corner (x1,y1) */
142  int numresolutions; /* number of resolutions level */
143  opj_tcd_resolution_t *resolutions; /* resolutions information */
144  int *data; /* data of the component */
145  int numpix; /* add fixed_quality */
147 
151 typedef struct opj_tcd_tile {
152  int x0, y0, x1, y1; /* dimension of the tile : left upper corner (x0, y0) right low corner (x1,y1) */
153  int numcomps; /* number of components in tile */
154  opj_tcd_tilecomp_t *comps; /* Components information */
155  int numpix; /* add fixed_quality */
156  double distotile; /* add fixed_quality */
157  double distolayer[100]; /* add fixed_quality */
159  int packno;
161 
165 typedef struct opj_tcd_image {
166  int tw, th; /* number of tiles in width and heigth */
167  opj_tcd_tile_t *tiles; /* Tiles information */
169 
173 typedef struct opj_tcd {
175  int tp_pos;
177  int tp_num;
183  int cur_pino;
186 
201 } opj_tcd_t;
202 
205 /* ----------------------------------------------------------------------- */
206 
210 void tcd_dump(FILE *fd, opj_tcd_t *tcd, opj_tcd_image_t *img);
221 void tcd_destroy(opj_tcd_t *tcd);
229 void tcd_malloc_encode(opj_tcd_t *tcd, opj_image_t * image, opj_cp_t * cp, int curtileno);
234 void tcd_free_encode(opj_tcd_t *tcd);
242 void tcd_init_encode(opj_tcd_t *tcd, opj_image_t * image, opj_cp_t * cp, int curtileno);
249 void tcd_malloc_decode(opj_tcd_t *tcd, opj_image_t * image, opj_cp_t * cp);
250 void tcd_malloc_decode_tile(opj_tcd_t *tcd, opj_image_t * image, opj_cp_t * cp, int tileno, opj_codestream_info_t *cstr_info);
251 void tcd_makelayer_fixed(opj_tcd_t *tcd, int layno, int final);
253 void tcd_makelayer(opj_tcd_t *tcd, int layno, double thresh, int final);
254 opj_bool tcd_rateallocate(opj_tcd_t *tcd, unsigned char *dest, int len, opj_codestream_info_t *cstr_info);
264 int tcd_encode_tile(opj_tcd_t *tcd, int tileno, unsigned char *dest, int len, opj_codestream_info_t *cstr_info);
273 opj_bool tcd_decode_tile(opj_tcd_t *tcd, unsigned char *src, int len, int tileno, opj_codestream_info_t *cstr_info);
278 void tcd_free_decode(opj_tcd_t *tcd);
279 void tcd_free_decode_tile(opj_tcd_t *tcd, int tileno);
280 
281 /* ----------------------------------------------------------------------- */
285 
286 #endif /* __TCD_H */