OpenJPEG  2.0.0
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  * Copyright (c) 2008;2011-2012, Centre National d'Etudes Spatiales (CNES), France
9  * Copyright (c) 2012, CS Systemes d'Information, France
10  * All rights reserved.
11  *
12  * Redistribution and use in source and binary forms, with or without
13  * modification, are permitted provided that the following conditions
14  * are met:
15  * 1. Redistributions of source code must retain the above copyright
16  * notice, this list of conditions and the following disclaimer.
17  * 2. Redistributions in binary form must reproduce the above copyright
18  * notice, this list of conditions and the following disclaimer in the
19  * documentation and/or other materials provided with the distribution.
20  *
21  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
22  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
25  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
26  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
27  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
28  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
29  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
30  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31  * POSSIBILITY OF SUCH DAMAGE.
32  */
33 #ifndef __TCD_H
34 #define __TCD_H
35 
45 
49 typedef struct opj_tcd_seg {
59 
63 typedef struct opj_tcd_pass {
69 
73 typedef struct opj_tcd_layer {
74  OPJ_UINT32 numpasses; /* Number of passes in the layer */
75  OPJ_UINT32 len; /* len of information */
76  OPJ_FLOAT64 disto; /* add for index (Cfr. Marcela) */
77  OPJ_BYTE *data; /* data */
79 
83 typedef struct opj_tcd_cblk_enc {
84  OPJ_BYTE* data; /* Data */
85  opj_tcd_layer_t* layers; /* layer information */
86  opj_tcd_pass_t* passes; /* information about the passes */
87  OPJ_INT32 x0, y0, x1, y1; /* dimension of the code-blocks : left upper corner (x0, y0) right low corner (x1,y1) */
90  OPJ_UINT32 numpasses; /* number of pass already done for the code-blocks */
91  OPJ_UINT32 numpassesinlayers; /* number of passes in the layer */
92  OPJ_UINT32 totalpasses; /* total number of passes */
94 
95 
96 typedef struct opj_tcd_cblk_dec {
97  OPJ_BYTE * data; /* Data */
98  opj_tcd_seg_t* segs; /* segments information */
99  OPJ_INT32 x0, y0, x1, y1; /* position of the code-blocks : left upper corner (x0, y0) right low corner (x1,y1) */
102  OPJ_UINT32 data_max_size; /* Size of allocated data buffer */
103  OPJ_UINT32 data_current_size; /* Size of used data buffer */
104  OPJ_UINT32 numnewpasses; /* number of pass added to the code-blocks */
105  OPJ_UINT32 numsegs; /* number of segments */
109 
113 typedef struct opj_tcd_precinct {
114  OPJ_INT32 x0, y0, x1, y1; /* dimension of the precinct : left upper corner (x0, y0) right low corner (x1,y1) */
115  OPJ_UINT32 cw, ch; /* number of precinct in width and height */
116  union{ /* code-blocks information */
119  } cblks;
120  OPJ_UINT32 block_size; /* size taken by cblks (in bytes) */
121  opj_tgt_tree_t *incltree; /* inclusion tree */
122  opj_tgt_tree_t *imsbtree; /* IMSB tree */
124 
128 typedef struct opj_tcd_band {
129  OPJ_INT32 x0, y0, x1, y1; /* dimension of the subband : left upper corner (x0, y0) right low corner (x1,y1) */
131  opj_tcd_precinct_t *precincts; /* precinct information */
132  OPJ_UINT32 precincts_data_size; /* size of data taken by precincts */
136 
140 typedef struct opj_tcd_resolution {
141  OPJ_INT32 x0, y0, x1, y1; /* dimension of the resolution level : left upper corner (x0, y0) right low corner (x1,y1) */
143  OPJ_UINT32 numbands; /* number sub-band for the resolution level */
144  opj_tcd_band_t bands[3]; /* subband information */
146 
150 typedef struct opj_tcd_tilecomp
151 {
152  OPJ_INT32 x0, y0, x1, y1; /* dimension of component : left upper corner (x0, y0) right low corner (x1,y1) */
153  OPJ_UINT32 numresolutions; /* number of resolutions level */
154  OPJ_UINT32 minimum_num_resolutions; /* number of resolutions level to decode (at max)*/
155  opj_tcd_resolution_t *resolutions; /* resolutions information */
156  OPJ_UINT32 resolutions_size; /* size of data for resolutions (in bytes) */
157  OPJ_INT32 *data; /* data of the component */
158  OPJ_UINT32 data_size; /* size of the data of the component */
159  OPJ_INT32 numpix; /* add fixed_quality */
161 
162 
166 typedef struct opj_tcd_tile {
167  OPJ_INT32 x0, y0, x1, y1; /* dimension of the tile : left upper corner (x0, y0) right low corner (x1,y1) */
168  OPJ_UINT32 numcomps; /* number of components in tile */
169  opj_tcd_tilecomp_t *comps; /* Components information */
170  OPJ_INT32 numpix; /* add fixed_quality */
171  OPJ_FLOAT64 distotile; /* add fixed_quality */
172  OPJ_FLOAT64 distolayer[100]; /* add fixed_quality */
173  OPJ_UINT32 packno; /* packet number */
175 
179 typedef struct opj_tcd_image
180 {
181  opj_tcd_tile_t *tiles; /* Tiles information */
182 }
184 
185 
189 typedef struct opj_tcd
190 {
213 } opj_tcd_t;
214 
217 /* ----------------------------------------------------------------------- */
218 
222 /*void tcd_dump(FILE *fd, opj_tcd_t *tcd, opj_tcd_image_t *img);*/ /* TODO MSD shoul use the new v2 structures */
223 
229 opj_tcd_t* opj_tcd_create(OPJ_BOOL p_is_decoder);
230 
235 void opj_tcd_destroy(opj_tcd_t *tcd);
236 
246  opj_image_t * p_image,
247  opj_cp_t * p_cp );
248 
259 
260 void opj_tcd_makelayer_fixed(opj_tcd_t *tcd, OPJ_UINT32 layno, OPJ_UINT32 final);
261 
263 
264 void opj_tcd_makelayer( opj_tcd_t *tcd,
265  OPJ_UINT32 layno,
266  OPJ_FLOAT64 thresh,
267  OPJ_UINT32 final);
268 
270  OPJ_BYTE *dest,
271  OPJ_UINT32 * p_data_written,
272  OPJ_UINT32 len,
273  opj_codestream_info_t *cstr_info);
274 
279 
291  OPJ_UINT32 p_tile_no,
292  OPJ_BYTE *p_dest,
293  OPJ_UINT32 * p_data_written,
294  OPJ_UINT32 p_len,
295  struct opj_codestream_info *p_cstr_info);
296 
297 
307  OPJ_BYTE *src,
308  OPJ_UINT32 len,
309  OPJ_UINT32 tileno,
310  opj_codestream_index_t *cstr_info);
311 
312 
317  OPJ_BYTE * p_dest,
318  OPJ_UINT32 p_dest_length );
319 
324 
334  OPJ_UINT32 p_tile_no );
335 
340  OPJ_BYTE * p_src,
341  OPJ_UINT32 p_src_length );
342 
343 /* ----------------------------------------------------------------------- */
347 
348 #endif /* __TCD_H */