OpenJPEG  2.1.0
tcd.h
Go to the documentation of this file.
1 /*
2  * The copyright in this software is being made available under the 2-clauses
3  * BSD License, included below. This software may be subject to other third
4  * party and contributor rights, including patent rights, and no such rights
5  * are granted under this license.
6  *
7  * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
8  * Copyright (c) 2002-2014, Professor Benoit Macq
9  * Copyright (c) 2001-2003, David Janssens
10  * Copyright (c) 2002-2003, Yannick Verschueren
11  * Copyright (c) 2003-2007, Francois-Olivier Devaux
12  * Copyright (c) 2003-2014, Antonin Descampe
13  * Copyright (c) 2005, Herve Drolon, FreeImage Team
14  * Copyright (c) 2008, 2011-2012, Centre National d'Etudes Spatiales (CNES), FR
15  * Copyright (c) 2012, CS Systemes d'Information, France
16  * All rights reserved.
17  *
18  * Redistribution and use in source and binary forms, with or without
19  * modification, are permitted provided that the following conditions
20  * are met:
21  * 1. Redistributions of source code must retain the above copyright
22  * notice, this list of conditions and the following disclaimer.
23  * 2. Redistributions in binary form must reproduce the above copyright
24  * notice, this list of conditions and the following disclaimer in the
25  * documentation and/or other materials provided with the distribution.
26  *
27  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
28  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
29  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
30  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
31  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
32  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
33  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
34  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
35  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
36  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
37  * POSSIBILITY OF SUCH DAMAGE.
38  */
39 #ifndef __TCD_H
40 #define __TCD_H
41 
51 
55 typedef struct opj_tcd_seg {
65 
69 typedef struct opj_tcd_pass {
75 
79 typedef struct opj_tcd_layer {
80  OPJ_UINT32 numpasses; /* Number of passes in the layer */
81  OPJ_UINT32 len; /* len of information */
82  OPJ_FLOAT64 disto; /* add for index (Cfr. Marcela) */
83  OPJ_BYTE *data; /* data */
85 
89 typedef struct opj_tcd_cblk_enc {
90  OPJ_BYTE* data; /* Data */
91  opj_tcd_layer_t* layers; /* layer information */
92  opj_tcd_pass_t* passes; /* information about the passes */
93  OPJ_INT32 x0, y0, x1, y1; /* dimension of the code-blocks : left upper corner (x0, y0) right low corner (x1,y1) */
96  OPJ_UINT32 data_size; /* Size of allocated data buffer */
97  OPJ_UINT32 numpasses; /* number of pass already done for the code-blocks */
98  OPJ_UINT32 numpassesinlayers; /* number of passes in the layer */
99  OPJ_UINT32 totalpasses; /* total number of passes */
101 
102 
103 typedef struct opj_tcd_cblk_dec {
104  OPJ_BYTE * data; /* Data */
105  opj_tcd_seg_t* segs; /* segments information */
106  OPJ_INT32 x0, y0, x1, y1; /* position of the code-blocks : left upper corner (x0, y0) right low corner (x1,y1) */
109  OPJ_UINT32 data_max_size; /* Size of allocated data buffer */
110  OPJ_UINT32 data_current_size; /* Size of used data buffer */
111  OPJ_UINT32 numnewpasses; /* number of pass added to the code-blocks */
112  OPJ_UINT32 numsegs; /* number of segments */
116 
120 typedef struct opj_tcd_precinct {
121  OPJ_INT32 x0, y0, x1, y1; /* dimension of the precinct : left upper corner (x0, y0) right low corner (x1,y1) */
122  OPJ_UINT32 cw, ch; /* number of precinct in width and height */
123  union{ /* code-blocks information */
126  void* blocks;
127  } cblks;
128  OPJ_UINT32 block_size; /* size taken by cblks (in bytes) */
129  opj_tgt_tree_t *incltree; /* inclusion tree */
130  opj_tgt_tree_t *imsbtree; /* IMSB tree */
132 
136 typedef struct opj_tcd_band {
137  OPJ_INT32 x0, y0, x1, y1; /* dimension of the subband : left upper corner (x0, y0) right low corner (x1,y1) */
139  opj_tcd_precinct_t *precincts; /* precinct information */
140  OPJ_UINT32 precincts_data_size; /* size of data taken by precincts */
144 
148 typedef struct opj_tcd_resolution {
149  OPJ_INT32 x0, y0, x1, y1; /* dimension of the resolution level : left upper corner (x0, y0) right low corner (x1,y1) */
151  OPJ_UINT32 numbands; /* number sub-band for the resolution level */
152  opj_tcd_band_t bands[3]; /* subband information */
154 
158 typedef struct opj_tcd_tilecomp
159 {
160  OPJ_INT32 x0, y0, x1, y1; /* dimension of component : left upper corner (x0, y0) right low corner (x1,y1) */
161  OPJ_UINT32 numresolutions; /* number of resolutions level */
162  OPJ_UINT32 minimum_num_resolutions; /* number of resolutions level to decode (at max)*/
163  opj_tcd_resolution_t *resolutions; /* resolutions information */
164  OPJ_UINT32 resolutions_size; /* size of data for resolutions (in bytes) */
165  OPJ_INT32 *data; /* data of the component */
166  OPJ_BOOL ownsData; /* if true, then need to free after usage, otherwise do not free */
167  OPJ_UINT32 data_size_needed; /* we may either need to allocate this amount of data, or re-use image data and ignore this value */
168  OPJ_UINT32 data_size; /* size of the data of the component */
169  OPJ_INT32 numpix; /* add fixed_quality */
171 
172 
176 typedef struct opj_tcd_tile {
177  OPJ_INT32 x0, y0, x1, y1; /* dimension of the tile : left upper corner (x0, y0) right low corner (x1,y1) */
178  OPJ_UINT32 numcomps; /* number of components in tile */
179  opj_tcd_tilecomp_t *comps; /* Components information */
180  OPJ_INT32 numpix; /* add fixed_quality */
181  OPJ_FLOAT64 distotile; /* add fixed_quality */
182  OPJ_FLOAT64 distolayer[100]; /* add fixed_quality */
183  OPJ_UINT32 packno; /* packet number */
185 
189 typedef struct opj_tcd_image
190 {
191  opj_tcd_tile_t *tiles; /* Tiles information */
192 }
194 
195 
199 typedef struct opj_tcd
200 {
223 } opj_tcd_t;
224 
227 /* ----------------------------------------------------------------------- */
228 
232 /*void tcd_dump(FILE *fd, opj_tcd_t *tcd, opj_tcd_image_t *img);*/ /* TODO MSD shoul use the new v2 structures */
233 
239 opj_tcd_t* opj_tcd_create(OPJ_BOOL p_is_decoder);
240 
245 void opj_tcd_destroy(opj_tcd_t *tcd);
246 
256  opj_image_t * p_image,
257  opj_cp_t * p_cp );
258 
269 
270 void opj_tcd_makelayer_fixed(opj_tcd_t *tcd, OPJ_UINT32 layno, OPJ_UINT32 final);
271 
273 
274 void opj_tcd_makelayer( opj_tcd_t *tcd,
275  OPJ_UINT32 layno,
276  OPJ_FLOAT64 thresh,
277  OPJ_UINT32 final);
278 
280  OPJ_BYTE *dest,
281  OPJ_UINT32 * p_data_written,
282  OPJ_UINT32 len,
283  opj_codestream_info_t *cstr_info);
284 
289 
301  OPJ_UINT32 p_tile_no,
302  OPJ_BYTE *p_dest,
303  OPJ_UINT32 * p_data_written,
304  OPJ_UINT32 p_len,
305  struct opj_codestream_info *p_cstr_info);
306 
307 
317  OPJ_BYTE *src,
318  OPJ_UINT32 len,
319  OPJ_UINT32 tileno,
320  opj_codestream_index_t *cstr_info);
321 
322 
327  OPJ_BYTE * p_dest,
328  OPJ_UINT32 p_dest_length );
329 
334 
344  OPJ_UINT32 p_tile_no );
345 
350  OPJ_BYTE * p_src,
351  OPJ_UINT32 p_src_length );
352 
359 
360 /* ----------------------------------------------------------------------- */
364 
365 #endif /* __TCD_H */
opj_tgt_tree_t * imsbtree
Definition: tcd.h:130
OPJ_UINT32 cur_tp_num
Current tile part number.
Definition: tcd.h:206
OPJ_INT32 x1
Definition: tcd.h:106
OPJ_UINT32 numpassesinlayers
Definition: tcd.h:98
OPJ_INT32 y1
Definition: tcd.h:93
OPJ_INT32 x1
Definition: tcd.h:160
void opj_tcd_makelayer_fixed(opj_tcd_t *tcd, OPJ_UINT32 layno, OPJ_UINT32 final)
Definition: tcd.c:302
OPJ_BYTE * data
Definition: tcd.h:90
OPJ_BYTE * data
Definition: tcd.h:83
double OPJ_FLOAT64
Definition: openjpeg.h:116
OPJ_INT32 x1
Definition: tcd.h:137
Definition: tcd.h:103
void opj_tcd_makelayer(opj_tcd_t *tcd, OPJ_UINT32 layno, OPJ_FLOAT64 thresh, OPJ_UINT32 final)
Definition: tcd.c:217
OPJ_INT32 x0
Definition: tcd.h:160
OPJ_INT32 y1
Definition: tcd.h:149
OPJ_UINT32 packno
Definition: tcd.h:183
OPJ_INT32 x1
Definition: tcd.h:149
opj_tcd_pass_t * passes
Definition: tcd.h:92
opj_tcd_layer_t * layers
Definition: tcd.h:91
OPJ_UINT32 numnewpasses
Definition: tcd.h:111
Tile coder/decoder.
Definition: tcd.h:199
int OPJ_BOOL
Definition: openjpeg.h:110
OPJ_INT32 y0
Definition: tcd.h:177
struct opj_tcd_precinct opj_tcd_precinct_t
FIXME DOC.
OPJ_BYTE ** data
Definition: tcd.h:56
opj_tcd_t * opj_tcd_create(OPJ_BOOL p_is_decoder)
Dump the content of a tcd structure.
Definition: tcd.c:184
OPJ_UINT32 cur_totnum_tp
Total number of tileparts of the current tile.
Definition: tcd.h:208
OPJ_BOOL opj_tcd_encode_tile(opj_tcd_t *p_tcd, OPJ_UINT32 p_tile_no, OPJ_BYTE *p_dest, OPJ_UINT32 *p_data_written, OPJ_UINT32 p_len, struct opj_codestream_info *p_cstr_info)
Encodes a tile from the raw image into the given buffer.
Definition: tcd.c:1177
unsigned char OPJ_BYTE
Definition: openjpeg.h:117
opj_image_t * image
image header
Definition: tcd.h:214
OPJ_UINT32 opj_tcd_get_encoded_tile_size(opj_tcd_t *p_tcd)
Definition: tcd.c:1868
OPJ_UINT32 ch
Definition: tcd.h:122
OPJ_UINT32 len
Definition: tcd.h:72
struct opj_tcd_cblk_dec opj_tcd_cblk_dec_t
struct opj_tcd_cblk_enc opj_tcd_cblk_enc_t
FIXME DOC.
void opj_tcd_rateallocate_fixed(opj_tcd_t *tcd)
Definition: tcd.c:208
opj_tcd_tile_t * tiles
Definition: tcd.h:191
FIXME DOC.
Definition: tcd.h:55
int32_t OPJ_INT32
Definition: openjpeg.h:125
OPJ_UINT32 data_max_size
Definition: tcd.h:109
void opj_tcd_destroy(opj_tcd_t *tcd)
Destroy a previously created TCD handle.
Definition: tcd.c:613
OPJ_INT32 x1
Definition: tcd.h:121
OPJ_UINT32 tp_num
Tile part number.
Definition: tcd.h:204
opj_tcd_tilecomp_t * comps
Definition: tcd.h:179
struct opj_tcd_pass opj_tcd_pass_t
FIXME DOC.
OPJ_UINT32 m_is_decoder
tell if the tcd is a decoder.
Definition: tcd.h:222
OPJ_UINT32 rate
Definition: tcd.h:70
OPJ_INT32 x1
Definition: tcd.h:93
FIXME DOC.
Definition: tcd.h:69
OPJ_BOOL opj_tcd_update_tile_data(opj_tcd_t *p_tcd, OPJ_BYTE *p_dest, OPJ_UINT32 p_dest_length)
Copies tile data from the system onto the given memory block.
Definition: tcd.c:1350
OPJ_UINT32 numcomps
Definition: tcd.h:178
Defines image data and characteristics.
Definition: openjpeg.h:661
float OPJ_FLOAT32
Definition: openjpeg.h:115
opj_tcd_resolution_t * resolutions
Definition: tcd.h:163
OPJ_INT32 x0
Definition: tcd.h:149
opj_tcd_image_t * tcd_image
info on each image tile
Definition: tcd.h:212
OPJ_UINT32 numresolutions
Definition: tcd.h:161
OPJ_UINT32 data_size
Definition: tcd.h:168
OPJ_INT32 y0
Definition: tcd.h:160
OPJ_UINT32 precincts_data_size
Definition: tcd.h:140
OPJ_BYTE * data
Definition: tcd.h:104
OPJ_INT32 y0
Definition: tcd.h:93
opj_tcd_band_t bands[3]
Definition: tcd.h:152
OPJ_UINT32 dataindex
Definition: tcd.h:57
OPJ_UINT32 ph
Definition: tcd.h:150
OPJ_UINT32 newlen
Definition: tcd.h:63
OPJ_BOOL opj_tcd_decode_tile(opj_tcd_t *tcd, OPJ_BYTE *src, OPJ_UINT32 len, OPJ_UINT32 tileno, opj_codestream_index_t *cstr_info)
Decode a tile from a buffer into a raw image.
Definition: tcd.c:1265
OPJ_INT32 x0
Definition: tcd.h:121
OPJ_BOOL opj_tcd_init_encode_tile(opj_tcd_t *p_tcd, OPJ_UINT32 p_tile_no)
Initialize the tile coder and may reuse some meory.
Definition: tcd.c:1048
OPJ_INT32 x0
Definition: tcd.h:106
OPJ_UINT32 numlenbits
Definition: tcd.h:95
OPJ_INT32 y0
Definition: tcd.h:149
OPJ_FLOAT32 stepsize
Definition: tcd.h:142
OPJ_INT32 y1
Definition: tcd.h:177
opj_tcd_precinct_t * precincts
Definition: tcd.h:139
OPJ_FLOAT64 disto
Definition: tcd.h:82
FIXME DOC.
Definition: tcd.h:148
FIXME DOC.
Definition: tcd.h:189
OPJ_UINT32 m_current_max_segs
Definition: tcd.h:114
OPJ_UINT32 opj_tcd_get_decoded_tile_size(opj_tcd_t *p_tcd)
Gets the maximum tile size that will be taken by the tile once decoded.
Definition: tcd.c:1144
OPJ_INT32 y1
Definition: tcd.h:106
OPJ_INT32 x0
Definition: tcd.h:177
OPJ_UINT32 numpasses
Definition: tcd.h:58
OPJ_UINT32 data_size_needed
Definition: tcd.h:167
OPJ_INT32 y1
Definition: tcd.h:160
OPJ_UINT32 real_num_passes
Definition: tcd.h:59
Coding parameters.
Definition: j2k.h:341
OPJ_UINT32 numlenbits
Definition: tcd.h:108
OPJ_UINT32 len
Definition: tcd.h:60
opj_tcd_seg_t * segs
Definition: tcd.h:105
OPJ_INT32 y0
Definition: tcd.h:106
union opj_tcd_precinct::@3 cblks
OPJ_UINT32 data_size
Definition: tcd.h:96
FIXME DOC.
Definition: tcd.h:136
OPJ_UINT32 minimum_num_resolutions
Definition: tcd.h:162
OPJ_UINT32 bandno
Definition: tcd.h:138
OPJ_INT32 numpix
Definition: tcd.h:180
OPJ_UINT32 numbps
Definition: tcd.h:94
OPJ_BOOL opj_alloc_tile_component_data(opj_tcd_tilecomp_t *l_tilec)
Allocates tile component data.
Definition: tcd.c:625
OPJ_BOOL opj_tcd_init(opj_tcd_t *p_tcd, opj_image_t *p_image, opj_cp_t *p_cp)
Initialize the tile coder and may reuse some memory.
Definition: tcd.c:587
OPJ_UINT32 numpasses
Definition: tcd.h:97
OPJ_UINT32 block_size
Definition: tcd.h:128
struct opj_tcd_tile opj_tcd_tile_t
FIXME DOC.
OPJ_UINT32 cw
Definition: tcd.h:122
OPJ_UINT32 len
Definition: tcd.h:81
OPJ_UINT32 real_num_segs
Definition: tcd.h:113
OPJ_INT32 y1
Definition: tcd.h:121
void * blocks
Definition: tcd.h:126
Index structure of the codestream (FIXME should be expand and enhance)
Definition: openjpeg.h:990
OPJ_UINT32 maxpasses
Definition: tcd.h:61
FIXME DOC.
Definition: tcd.h:89
OPJ_UINT32 resolutions_size
Definition: tcd.h:164
OPJ_INT32 y0
Definition: tcd.h:137
OPJ_UINT32 totalpasses
Definition: tcd.h:99
OPJ_INT32 x1
Definition: tcd.h:177
OPJ_UINT32 numbps
Definition: tcd.h:107
uint32_t OPJ_UINT32
Definition: openjpeg.h:126
OPJ_INT32 * data
Definition: tcd.h:165
opj_cp_t * cp
coding parameters
Definition: tcd.h:216
struct opj_tcd_image opj_tcd_image_t
FIXME DOC.
FIXME DOC.
Definition: tcd.h:120
OPJ_UINT32 cur_pino
Current Packet iterator number.
Definition: tcd.h:210
opj_tgt_tree_t * incltree
Definition: tcd.h:129
OPJ_INT32 numpix
Definition: tcd.h:169
OPJ_FLOAT64 distortiondec
Definition: tcd.h:71
FIXME DOC.
Definition: tcd.h:79
Tile coding parameters : this structure is used to store coding/decoding parameters common to all til...
Definition: j2k.h:240
OPJ_UINT32 data_current_size
Definition: tcd.h:110
FIXME DOC.
Definition: tcd.h:176
OPJ_FLOAT64 distolayer[100]
Definition: tcd.h:182
OPJ_UINT32 tcd_tileno
current encoded/decoded tile
Definition: tcd.h:220
OPJ_UINT32 numpasses
Definition: tcd.h:80
OPJ_UINT32 numbands
Definition: tcd.h:151
OPJ_INT32 y1
Definition: tcd.h:137
OPJ_BOOL opj_tcd_init_decode_tile(opj_tcd_t *p_tcd, OPJ_UINT32 p_tile_no)
Allocates memory for decoding a specific tile.
Definition: tcd.c:1053
FIXME DOC.
Definition: tcd.h:158
OPJ_INT32 x0
Definition: tcd.h:137
opj_tcd_cblk_dec_t * dec
Definition: tcd.h:125
struct opj_tcd_layer opj_tcd_layer_t
FIXME DOC.
OPJ_INT32 x0
Definition: tcd.h:93
opj_tcd_cblk_enc_t * enc
Definition: tcd.h:124
OPJ_INT32 numbps
Definition: tcd.h:141
struct opj_tcd opj_tcd_t
Tile coder/decoder.
opj_tcp_t * tcp
coding/decoding parameters common to all tiles
Definition: tcd.h:218
Index structure of the codestream.
Definition: openjpeg.h:803
struct opj_tcd_seg opj_tcd_seg_t
FIXME DOC.
OPJ_UINT32 numnewpasses
Definition: tcd.h:62
Tag tree.
Definition: tgt.h:67
OPJ_BOOL opj_tcd_copy_tile_data(opj_tcd_t *p_tcd, OPJ_BYTE *p_src, OPJ_UINT32 p_src_length)
Copies tile data from the given memory block onto the system.
Definition: tcd.c:2121
OPJ_UINT32 numsegs
Definition: tcd.h:112
struct opj_tcd_tilecomp opj_tcd_tilecomp_t
FIXME DOC.
OPJ_FLOAT64 distotile
Definition: tcd.h:181
OPJ_BOOL ownsData
Definition: tcd.h:166
OPJ_UINT32 pw
Definition: tcd.h:150
OPJ_BOOL opj_tcd_rateallocate(opj_tcd_t *tcd, OPJ_BYTE *dest, OPJ_UINT32 *p_data_written, OPJ_UINT32 len, opj_codestream_info_t *cstr_info)
Definition: tcd.c:395
struct opj_tcd_band opj_tcd_band_t
FIXME DOC.
OPJ_UINT32 term
Definition: tcd.h:73
OPJ_INT32 tp_pos
Position of the tilepart flag in Progression order.
Definition: tcd.h:202
OPJ_INT32 y0
Definition: tcd.h:121
struct opj_tcd_resolution opj_tcd_resolution_t
FIXME DOC.