00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039 #ifndef __TCD_H
00040 #define __TCD_H
00041
00051
00055 typedef struct opj_tcd_seg {
00056 OPJ_BYTE ** data;
00057 OPJ_UINT32 dataindex;
00058 OPJ_UINT32 numpasses;
00059 OPJ_UINT32 real_num_passes;
00060 OPJ_UINT32 len;
00061 OPJ_UINT32 maxpasses;
00062 OPJ_UINT32 numnewpasses;
00063 OPJ_UINT32 newlen;
00064 } opj_tcd_seg_t;
00065
00069 typedef struct opj_tcd_pass {
00070 OPJ_UINT32 rate;
00071 OPJ_FLOAT64 distortiondec;
00072 OPJ_UINT32 len;
00073 OPJ_UINT32 term : 1;
00074 } opj_tcd_pass_t;
00075
00079 typedef struct opj_tcd_layer {
00080 OPJ_UINT32 numpasses;
00081 OPJ_UINT32 len;
00082 OPJ_FLOAT64 disto;
00083 OPJ_BYTE *data;
00084 } opj_tcd_layer_t;
00085
00089 typedef struct opj_tcd_cblk_enc {
00090 OPJ_BYTE* data;
00091 opj_tcd_layer_t* layers;
00092 opj_tcd_pass_t* passes;
00093 OPJ_INT32 x0, y0, x1, y1;
00094 OPJ_UINT32 numbps;
00095 OPJ_UINT32 numlenbits;
00096 OPJ_UINT32 numpasses;
00097 OPJ_UINT32 numpassesinlayers;
00098 OPJ_UINT32 totalpasses;
00099 } opj_tcd_cblk_enc_t;
00100
00101
00102 typedef struct opj_tcd_cblk_dec {
00103 OPJ_BYTE * data;
00104 opj_tcd_seg_t* segs;
00105 OPJ_INT32 x0, y0, x1, y1;
00106 OPJ_UINT32 numbps;
00107 OPJ_UINT32 numlenbits;
00108 OPJ_UINT32 data_max_size;
00109 OPJ_UINT32 data_current_size;
00110 OPJ_UINT32 numnewpasses;
00111 OPJ_UINT32 numsegs;
00112 OPJ_UINT32 real_num_segs;
00113 OPJ_UINT32 m_current_max_segs;
00114 } opj_tcd_cblk_dec_t;
00115
00119 typedef struct opj_tcd_precinct {
00120 OPJ_INT32 x0, y0, x1, y1;
00121 OPJ_UINT32 cw, ch;
00122 union{
00123 opj_tcd_cblk_enc_t* enc;
00124 opj_tcd_cblk_dec_t* dec;
00125 } cblks;
00126 OPJ_UINT32 block_size;
00127 opj_tgt_tree_t *incltree;
00128 opj_tgt_tree_t *imsbtree;
00129 } opj_tcd_precinct_t;
00130
00134 typedef struct opj_tcd_band {
00135 OPJ_INT32 x0, y0, x1, y1;
00136 OPJ_UINT32 bandno;
00137 opj_tcd_precinct_t *precincts;
00138 OPJ_UINT32 precincts_data_size;
00139 OPJ_INT32 numbps;
00140 OPJ_FLOAT32 stepsize;
00141 } opj_tcd_band_t;
00142
00146 typedef struct opj_tcd_resolution {
00147 OPJ_INT32 x0, y0, x1, y1;
00148 OPJ_UINT32 pw, ph;
00149 OPJ_UINT32 numbands;
00150 opj_tcd_band_t bands[3];
00151 } opj_tcd_resolution_t;
00152
00156 typedef struct opj_tcd_tilecomp
00157 {
00158 OPJ_INT32 x0, y0, x1, y1;
00159 OPJ_UINT32 numresolutions;
00160 OPJ_UINT32 minimum_num_resolutions;
00161 opj_tcd_resolution_t *resolutions;
00162 OPJ_UINT32 resolutions_size;
00163 OPJ_INT32 *data;
00164 OPJ_UINT32 data_size;
00165 OPJ_INT32 numpix;
00166 } opj_tcd_tilecomp_t;
00167
00168
00172 typedef struct opj_tcd_tile {
00173 OPJ_INT32 x0, y0, x1, y1;
00174 OPJ_UINT32 numcomps;
00175 opj_tcd_tilecomp_t *comps;
00176 OPJ_INT32 numpix;
00177 OPJ_FLOAT64 distotile;
00178 OPJ_FLOAT64 distolayer[100];
00179 OPJ_UINT32 packno;
00180 } opj_tcd_tile_t;
00181
00185 typedef struct opj_tcd_image
00186 {
00187 opj_tcd_tile_t *tiles;
00188 }
00189 opj_tcd_image_t;
00190
00191
00195 typedef struct opj_tcd
00196 {
00198 OPJ_INT32 tp_pos;
00200 OPJ_UINT32 tp_num;
00202 OPJ_UINT32 cur_tp_num;
00204 OPJ_UINT32 cur_totnum_tp;
00206 OPJ_UINT32 cur_pino;
00208 opj_tcd_image_t *tcd_image;
00210 opj_image_t *image;
00212 opj_cp_t *cp;
00214 opj_tcp_t *tcp;
00216 OPJ_UINT32 tcd_tileno;
00218 OPJ_UINT32 m_is_decoder : 1;
00219 } opj_tcd_t;
00220
00223
00224
00228
00229
00235 opj_tcd_t* opj_tcd_create(OPJ_BOOL p_is_decoder);
00236
00241 void opj_tcd_destroy(opj_tcd_t *tcd);
00242
00251 OPJ_BOOL opj_tcd_init( opj_tcd_t *p_tcd,
00252 opj_image_t * p_image,
00253 opj_cp_t * p_cp );
00254
00264 OPJ_BOOL opj_tcd_init_decode_tile(opj_tcd_t *p_tcd, OPJ_UINT32 p_tile_no);
00265
00266 void opj_tcd_makelayer_fixed(opj_tcd_t *tcd, OPJ_UINT32 layno, OPJ_UINT32 final);
00267
00268 void opj_tcd_rateallocate_fixed(opj_tcd_t *tcd);
00269
00270 void opj_tcd_makelayer( opj_tcd_t *tcd,
00271 OPJ_UINT32 layno,
00272 OPJ_FLOAT64 thresh,
00273 OPJ_UINT32 final);
00274
00275 OPJ_BOOL opj_tcd_rateallocate( opj_tcd_t *tcd,
00276 OPJ_BYTE *dest,
00277 OPJ_UINT32 * p_data_written,
00278 OPJ_UINT32 len,
00279 opj_codestream_info_t *cstr_info);
00280
00284 OPJ_UINT32 opj_tcd_get_decoded_tile_size (opj_tcd_t *p_tcd );
00285
00296 OPJ_BOOL opj_tcd_encode_tile( opj_tcd_t *p_tcd,
00297 OPJ_UINT32 p_tile_no,
00298 OPJ_BYTE *p_dest,
00299 OPJ_UINT32 * p_data_written,
00300 OPJ_UINT32 p_len,
00301 struct opj_codestream_info *p_cstr_info);
00302
00303
00312 OPJ_BOOL opj_tcd_decode_tile( opj_tcd_t *tcd,
00313 OPJ_BYTE *src,
00314 OPJ_UINT32 len,
00315 OPJ_UINT32 tileno,
00316 opj_codestream_index_t *cstr_info);
00317
00318
00322 OPJ_BOOL opj_tcd_update_tile_data ( opj_tcd_t *p_tcd,
00323 OPJ_BYTE * p_dest,
00324 OPJ_UINT32 p_dest_length );
00325
00329 OPJ_UINT32 opj_tcd_get_encoded_tile_size ( opj_tcd_t *p_tcd );
00330
00339 OPJ_BOOL opj_tcd_init_encode_tile ( opj_tcd_t *p_tcd,
00340 OPJ_UINT32 p_tile_no );
00341
00345 OPJ_BOOL opj_tcd_copy_tile_data (opj_tcd_t *p_tcd,
00346 OPJ_BYTE * p_src,
00347 OPJ_UINT32 p_src_length );
00348
00349
00353
00354 #endif