OpenJPEG
2.3.1
Main Page
Related Pages
Modules
Data Structures
Files
File List
Globals
home
abuild
rpmbuild
BUILD
openjpeg-2.3.1
src
lib
openjp2
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
* Copyright (c) 2017, IntoPIX SA <support@intopix.com>
17
* All rights reserved.
18
*
19
* Redistribution and use in source and binary forms, with or without
20
* modification, are permitted provided that the following conditions
21
* are met:
22
* 1. Redistributions of source code must retain the above copyright
23
* notice, this list of conditions and the following disclaimer.
24
* 2. Redistributions in binary form must reproduce the above copyright
25
* notice, this list of conditions and the following disclaimer in the
26
* documentation and/or other materials provided with the distribution.
27
*
28
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
29
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
30
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
31
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
32
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
33
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
34
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
35
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
36
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
37
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
38
* POSSIBILITY OF SUCH DAMAGE.
39
*/
40
#ifndef OPJ_TCD_H
41
#define OPJ_TCD_H
42
52
53
57
typedef
struct
opj_tcd_pass
{
58
OPJ_UINT32
rate
;
59
OPJ_FLOAT64
distortiondec
;
60
OPJ_UINT32
len
;
61
OPJ_BITFIELD
term
: 1;
62
}
opj_tcd_pass_t
;
63
67
typedef
struct
opj_tcd_layer
{
68
OPJ_UINT32
numpasses
;
/* Number of passes in the layer */
69
OPJ_UINT32
len
;
/* len of information */
70
OPJ_FLOAT64
disto
;
/* add for index (Cfr. Marcela) */
71
OPJ_BYTE
*
data
;
/* data */
72
}
opj_tcd_layer_t
;
73
77
typedef
struct
opj_tcd_cblk_enc
{
78
OPJ_BYTE
*
data
;
/* Data */
79
opj_tcd_layer_t
*
layers
;
/* layer information */
80
opj_tcd_pass_t
*
passes
;
/* information about the passes */
81
OPJ_INT32
x0
,
y0
,
x1
,
82
y1
;
/* dimension of the code-blocks : left upper corner (x0, y0) right low corner (x1,y1) */
83
OPJ_UINT32
numbps
;
84
OPJ_UINT32
numlenbits
;
85
OPJ_UINT32
data_size
;
/* Size of allocated data buffer */
86
OPJ_UINT32
87
numpasses
;
/* number of pass already done for the code-blocks */
88
OPJ_UINT32
numpassesinlayers
;
/* number of passes in the layer */
89
OPJ_UINT32
totalpasses
;
/* total number of passes */
90
}
opj_tcd_cblk_enc_t
;
91
92
94
typedef
struct
opj_tcd_seg_data_chunk
{
95
/* Point to tilepart buffer. We don't make a copy !
96
So the tilepart buffer must be kept alive
97
as long as we need to decode the codeblocks */
98
OPJ_BYTE
*
data
;
99
OPJ_UINT32
len
;
/* Usable length of data */
100
}
opj_tcd_seg_data_chunk_t
;
101
105
typedef
struct
opj_tcd_seg
{
106
OPJ_UINT32
len
;
/* Size of data related to this segment */
107
/* Number of passes decoded. Including those that we skip */
108
OPJ_UINT32
numpasses
;
109
/* Number of passes actually to be decoded. To be used for code-block decoding */
110
OPJ_UINT32
real_num_passes
;
111
/* Maximum number of passes for this segment */
112
OPJ_UINT32
maxpasses
;
113
/* Number of new passes for current packed. Transitory value */
114
OPJ_UINT32
numnewpasses
;
115
/* Codestream length for this segment for current packed. Transitory value */
116
OPJ_UINT32
newlen
;
117
}
opj_tcd_seg_t
;
118
120
typedef
struct
opj_tcd_cblk_dec
{
121
opj_tcd_seg_t
*
segs
;
/* segments information */
122
opj_tcd_seg_data_chunk_t
*
chunks
;
/* Array of chunks */
123
/* position of the code-blocks : left upper corner (x0, y0) right low corner (x1,y1) */
124
OPJ_INT32
x0
,
y0
,
x1
,
y1
;
125
OPJ_UINT32
numbps
;
126
/* number of bits for len, for the current packet. Transitory value */
127
OPJ_UINT32
numlenbits
;
128
/* number of pass added to the code-blocks, for the current packet. Transitory value */
129
OPJ_UINT32
numnewpasses
;
130
/* number of segments, including those of packet we skip */
131
OPJ_UINT32
numsegs
;
132
/* number of segments, to be used for code block decoding */
133
OPJ_UINT32
real_num_segs
;
134
OPJ_UINT32
m_current_max_segs
;
/* allocated number of segs[] items */
135
OPJ_UINT32
numchunks
;
/* Number of valid chunks items */
136
OPJ_UINT32
numchunksalloc
;
/* Number of chunks item allocated */
137
/* Decoded code-block. Only used for subtile decoding. Otherwise tilec->data is directly updated */
138
OPJ_INT32
*
decoded_data
;
139
}
opj_tcd_cblk_dec_t
;
140
142
typedef
struct
opj_tcd_precinct
{
143
/* dimension of the precinct : left upper corner (x0, y0) right low corner (x1,y1) */
144
OPJ_INT32
x0
,
y0
,
x1
,
y1
;
145
OPJ_UINT32
cw
,
ch
;
/* number of code-blocks, in width and height */
146
union
{
/* code-blocks information */
147
opj_tcd_cblk_enc_t
*
enc
;
148
opj_tcd_cblk_dec_t
*
dec
;
149
void
*
blocks
;
150
}
cblks
;
151
OPJ_UINT32
block_size
;
/* size taken by cblks (in bytes) */
152
opj_tgt_tree_t
*
incltree
;
/* inclusion tree */
153
opj_tgt_tree_t
*
imsbtree
;
/* IMSB tree */
154
}
opj_tcd_precinct_t
;
155
157
typedef
struct
opj_tcd_band
{
158
/* dimension of the subband : left upper corner (x0, y0) right low corner (x1,y1) */
159
OPJ_INT32
x0
,
y0
,
x1
,
y1
;
160
/* band number: for lowest resolution level (0=LL), otherwise (1=HL, 2=LH, 3=HH) */
161
OPJ_UINT32
bandno
;
162
/* precinct information */
163
opj_tcd_precinct_t
*
precincts
;
164
/* size of data taken by precincts */
165
OPJ_UINT32
precincts_data_size
;
166
OPJ_INT32
numbps
;
167
OPJ_FLOAT32
stepsize
;
168
}
opj_tcd_band_t
;
169
171
typedef
struct
opj_tcd_resolution
{
172
/* dimension of the resolution level : left upper corner (x0, y0) right low corner (x1,y1) */
173
OPJ_INT32
x0
,
y0
,
x1
,
y1
;
174
/* number of precincts, in width and height, for this resolution level */
175
OPJ_UINT32
pw
,
ph
;
176
/* number of sub-bands for the resolution level (1 for lowest resolution level, 3 otherwise) */
177
OPJ_UINT32
numbands
;
178
/* subband information */
179
opj_tcd_band_t
bands
[3];
180
181
/* dimension of the resolution limited to window of interest. Only valid if tcd->whole_tile_decoding is set */
182
OPJ_UINT32
win_x0
;
183
OPJ_UINT32
win_y0
;
184
OPJ_UINT32
win_x1
;
185
OPJ_UINT32
win_y1
;
186
}
opj_tcd_resolution_t
;
187
189
typedef
struct
opj_tcd_tilecomp
{
190
/* dimension of component : left upper corner (x0, y0) right low corner (x1,y1) */
191
OPJ_INT32
x0
,
y0
,
x1
,
y1
;
192
/* component number */
193
OPJ_UINT32
compno
;
194
/* number of resolutions level */
195
OPJ_UINT32
numresolutions
;
196
/* number of resolutions level to decode (at max)*/
197
OPJ_UINT32
minimum_num_resolutions
;
198
/* resolutions information */
199
opj_tcd_resolution_t
*
resolutions
;
200
/* size of data for resolutions (in bytes) */
201
OPJ_UINT32
resolutions_size
;
202
203
/* data of the component. For decoding, only valid if tcd->whole_tile_decoding is set (so exclusive of data_win member) */
204
OPJ_INT32
*
data
;
205
/* if true, then need to free after usage, otherwise do not free */
206
OPJ_BOOL
ownsData
;
207
/* we may either need to allocate this amount of data, or re-use image data and ignore this value */
208
size_t
data_size_needed
;
209
/* size of the data of the component */
210
size_t
data_size
;
211
213
OPJ_INT32
*
data_win
;
214
/* dimension of the component limited to window of interest. Only valid for decoding and if tcd->whole_tile_decoding is NOT set */
215
OPJ_UINT32
win_x0
;
216
OPJ_UINT32
win_y0
;
217
OPJ_UINT32
win_x1
;
218
OPJ_UINT32
win_y1
;
219
220
/* add fixed_quality */
221
OPJ_INT32
numpix
;
222
}
opj_tcd_tilecomp_t
;
223
224
228
typedef
struct
opj_tcd_tile
{
229
/* dimension of the tile : left upper corner (x0, y0) right low corner (x1,y1) */
230
OPJ_INT32
x0
,
y0
,
x1
,
y1
;
231
OPJ_UINT32
numcomps
;
/* number of components in tile */
232
opj_tcd_tilecomp_t
*
comps
;
/* Components information */
233
OPJ_INT32
numpix
;
/* add fixed_quality */
234
OPJ_FLOAT64
distotile
;
/* add fixed_quality */
235
OPJ_FLOAT64
distolayer
[100];
/* add fixed_quality */
236
OPJ_UINT32
packno
;
/* packet number */
237
}
opj_tcd_tile_t
;
238
242
typedef
struct
opj_tcd_image
{
243
opj_tcd_tile_t
*
tiles
;
/* Tiles information */
244
}
245
opj_tcd_image_t
;
246
247
251
typedef
struct
opj_tcd
{
253
OPJ_INT32
tp_pos
;
255
OPJ_UINT32
tp_num
;
257
OPJ_UINT32
cur_tp_num
;
259
OPJ_UINT32
cur_totnum_tp
;
261
OPJ_UINT32
cur_pino
;
263
opj_tcd_image_t
*
tcd_image
;
265
opj_image_t
*
image
;
267
opj_cp_t
*
cp
;
269
opj_tcp_t
*
tcp
;
271
OPJ_UINT32
tcd_tileno
;
273
OPJ_BITFIELD
m_is_decoder
: 1;
275
opj_thread_pool_t
*
thread_pool
;
277
OPJ_UINT32
win_x0
;
278
OPJ_UINT32
win_y0
;
279
OPJ_UINT32
win_x1
;
280
OPJ_UINT32
win_y1
;
282
OPJ_BOOL
whole_tile_decoding
;
283
/* Array of size image->numcomps indicating if a component must be decoded. NULL if all components must be decoded */
284
OPJ_BOOL
*
used_component
;
285
}
opj_tcd_t
;
286
289
/* ----------------------------------------------------------------------- */
290
294
/*void tcd_dump(FILE *fd, opj_tcd_t *tcd, opj_tcd_image_t *img);*/
/* TODO MSD shoul use the new v2 structures */
295
301
opj_tcd_t
*
opj_tcd_create
(
OPJ_BOOL
p_is_decoder);
302
307
void
opj_tcd_destroy
(
opj_tcd_t
*tcd);
308
318
OPJ_BOOL
opj_tcd_init
(
opj_tcd_t
*p_tcd,
319
opj_image_t
* p_image,
320
opj_cp_t
* p_cp,
321
opj_thread_pool_t
* p_tp);
322
333
OPJ_BOOL
opj_tcd_init_decode_tile
(
opj_tcd_t
*p_tcd,
OPJ_UINT32
p_tile_no,
334
opj_event_mgr_t
* p_manager);
335
336
void
opj_tcd_makelayer_fixed
(
opj_tcd_t
*tcd,
OPJ_UINT32
layno,
337
OPJ_UINT32
final
);
338
339
void
opj_tcd_rateallocate_fixed
(
opj_tcd_t
*tcd);
340
341
void
opj_tcd_makelayer
(
opj_tcd_t
*tcd,
342
OPJ_UINT32
layno,
343
OPJ_FLOAT64
thresh,
344
OPJ_UINT32
final
);
345
346
OPJ_BOOL
opj_tcd_rateallocate
(
opj_tcd_t
*tcd,
347
OPJ_BYTE
*dest,
348
OPJ_UINT32
* p_data_written,
349
OPJ_UINT32
len,
350
opj_codestream_info_t
*cstr_info,
351
opj_event_mgr_t
*p_manager);
352
356
OPJ_UINT32
opj_tcd_get_decoded_tile_size
(
opj_tcd_t
*p_tcd,
357
OPJ_BOOL
take_into_account_partial_decoding);
358
370
OPJ_BOOL
opj_tcd_encode_tile
(
opj_tcd_t
*p_tcd,
371
OPJ_UINT32
p_tile_no,
372
OPJ_BYTE
*p_dest,
373
OPJ_UINT32
* p_data_written,
374
OPJ_UINT32
p_len,
375
struct
opj_codestream_info
*p_cstr_info,
376
opj_event_mgr_t
*p_manager);
377
378
396
OPJ_BOOL
opj_tcd_decode_tile
(
opj_tcd_t
*tcd,
397
OPJ_UINT32
win_x0,
398
OPJ_UINT32
win_y0,
399
OPJ_UINT32
win_x1,
400
OPJ_UINT32
win_y1,
401
OPJ_UINT32
numcomps_to_decode,
402
const
OPJ_UINT32
*comps_indices,
403
OPJ_BYTE
*src,
404
OPJ_UINT32
len,
405
OPJ_UINT32
tileno,
406
opj_codestream_index_t
*cstr_info,
407
opj_event_mgr_t
*manager);
408
409
413
OPJ_BOOL
opj_tcd_update_tile_data
(
opj_tcd_t
*p_tcd,
414
OPJ_BYTE
* p_dest,
415
OPJ_UINT32
p_dest_length);
416
420
OPJ_SIZE_T
opj_tcd_get_encoded_tile_size
(
opj_tcd_t
*p_tcd);
421
431
OPJ_BOOL
opj_tcd_init_encode_tile
(
opj_tcd_t
*p_tcd,
432
OPJ_UINT32
p_tile_no,
opj_event_mgr_t
* p_manager);
433
437
OPJ_BOOL
opj_tcd_copy_tile_data
(
opj_tcd_t
*p_tcd,
438
OPJ_BYTE
* p_src,
439
OPJ_SIZE_T
p_src_length);
440
446
OPJ_BOOL
opj_alloc_tile_component_data
(
opj_tcd_tilecomp_t
*l_tilec);
447
452
OPJ_BOOL
opj_tcd_is_band_empty
(
opj_tcd_band_t
* band);
453
455
void
opj_tcd_reinit_segment
(
opj_tcd_seg_t
* seg);
456
457
472
OPJ_BOOL
opj_tcd_is_subband_area_of_interest
(
opj_tcd_t
*tcd,
473
OPJ_UINT32
compno,
474
OPJ_UINT32
resno,
475
OPJ_UINT32
bandno,
476
OPJ_UINT32
x0,
477
OPJ_UINT32
y0,
478
OPJ_UINT32
x1,
479
OPJ_UINT32
y1);
480
481
/* ----------------------------------------------------------------------- */
485
486
#endif
/* OPJ_TCD_H */
Generated by
1.8.1