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 data_size;
00097 OPJ_UINT32 numpasses;
00098 OPJ_UINT32 numpassesinlayers;
00099 OPJ_UINT32 totalpasses;
00100 } opj_tcd_cblk_enc_t;
00101
00102
00103 typedef struct opj_tcd_cblk_dec {
00104 OPJ_BYTE * data;
00105 opj_tcd_seg_t* segs;
00106 OPJ_INT32 x0, y0, x1, y1;
00107 OPJ_UINT32 numbps;
00108 OPJ_UINT32 numlenbits;
00109 OPJ_UINT32 data_max_size;
00110 OPJ_UINT32 data_current_size;
00111 OPJ_UINT32 numnewpasses;
00112 OPJ_UINT32 numsegs;
00113 OPJ_UINT32 real_num_segs;
00114 OPJ_UINT32 m_current_max_segs;
00115 } opj_tcd_cblk_dec_t;
00116
00120 typedef struct opj_tcd_precinct {
00121 OPJ_INT32 x0, y0, x1, y1;
00122 OPJ_UINT32 cw, ch;
00123 union{
00124 opj_tcd_cblk_enc_t* enc;
00125 opj_tcd_cblk_dec_t* dec;
00126 void* blocks;
00127 } cblks;
00128 OPJ_UINT32 block_size;
00129 opj_tgt_tree_t *incltree;
00130 opj_tgt_tree_t *imsbtree;
00131 } opj_tcd_precinct_t;
00132
00136 typedef struct opj_tcd_band {
00137 OPJ_INT32 x0, y0, x1, y1;
00138 OPJ_UINT32 bandno;
00139 opj_tcd_precinct_t *precincts;
00140 OPJ_UINT32 precincts_data_size;
00141 OPJ_INT32 numbps;
00142 OPJ_FLOAT32 stepsize;
00143 } opj_tcd_band_t;
00144
00148 typedef struct opj_tcd_resolution {
00149 OPJ_INT32 x0, y0, x1, y1;
00150 OPJ_UINT32 pw, ph;
00151 OPJ_UINT32 numbands;
00152 opj_tcd_band_t bands[3];
00153 } opj_tcd_resolution_t;
00154
00158 typedef struct opj_tcd_tilecomp
00159 {
00160 OPJ_INT32 x0, y0, x1, y1;
00161 OPJ_UINT32 numresolutions;
00162 OPJ_UINT32 minimum_num_resolutions;
00163 opj_tcd_resolution_t *resolutions;
00164 OPJ_UINT32 resolutions_size;
00165 OPJ_INT32 *data;
00166 OPJ_BOOL ownsData;
00167 OPJ_UINT32 data_size_needed;
00168 OPJ_UINT32 data_size;
00169 OPJ_INT32 numpix;
00170 } opj_tcd_tilecomp_t;
00171
00172
00176 typedef struct opj_tcd_tile {
00177 OPJ_INT32 x0, y0, x1, y1;
00178 OPJ_UINT32 numcomps;
00179 opj_tcd_tilecomp_t *comps;
00180 OPJ_INT32 numpix;
00181 OPJ_FLOAT64 distotile;
00182 OPJ_FLOAT64 distolayer[100];
00183 OPJ_UINT32 packno;
00184 } opj_tcd_tile_t;
00185
00189 typedef struct opj_tcd_image
00190 {
00191 opj_tcd_tile_t *tiles;
00192 }
00193 opj_tcd_image_t;
00194
00195
00199 typedef struct opj_tcd
00200 {
00202 OPJ_INT32 tp_pos;
00204 OPJ_UINT32 tp_num;
00206 OPJ_UINT32 cur_tp_num;
00208 OPJ_UINT32 cur_totnum_tp;
00210 OPJ_UINT32 cur_pino;
00212 opj_tcd_image_t *tcd_image;
00214 opj_image_t *image;
00216 opj_cp_t *cp;
00218 opj_tcp_t *tcp;
00220 OPJ_UINT32 tcd_tileno;
00222 OPJ_UINT32 m_is_decoder : 1;
00223 } opj_tcd_t;
00224
00227
00228
00232
00233
00239 opj_tcd_t* opj_tcd_create(OPJ_BOOL p_is_decoder);
00240
00245 void opj_tcd_destroy(opj_tcd_t *tcd);
00246
00255 OPJ_BOOL opj_tcd_init( opj_tcd_t *p_tcd,
00256 opj_image_t * p_image,
00257 opj_cp_t * p_cp );
00258
00269 OPJ_BOOL opj_tcd_init_decode_tile(opj_tcd_t *p_tcd, OPJ_UINT32 p_tile_no, opj_event_mgr_t* p_manager);
00270
00271 void opj_tcd_makelayer_fixed(opj_tcd_t *tcd, OPJ_UINT32 layno, OPJ_UINT32 final);
00272
00273 void opj_tcd_rateallocate_fixed(opj_tcd_t *tcd);
00274
00275 void opj_tcd_makelayer( opj_tcd_t *tcd,
00276 OPJ_UINT32 layno,
00277 OPJ_FLOAT64 thresh,
00278 OPJ_UINT32 final);
00279
00280 OPJ_BOOL opj_tcd_rateallocate( opj_tcd_t *tcd,
00281 OPJ_BYTE *dest,
00282 OPJ_UINT32 * p_data_written,
00283 OPJ_UINT32 len,
00284 opj_codestream_info_t *cstr_info);
00285
00289 OPJ_UINT32 opj_tcd_get_decoded_tile_size (opj_tcd_t *p_tcd );
00290
00301 OPJ_BOOL opj_tcd_encode_tile( opj_tcd_t *p_tcd,
00302 OPJ_UINT32 p_tile_no,
00303 OPJ_BYTE *p_dest,
00304 OPJ_UINT32 * p_data_written,
00305 OPJ_UINT32 p_len,
00306 struct opj_codestream_info *p_cstr_info);
00307
00308
00318 OPJ_BOOL opj_tcd_decode_tile( opj_tcd_t *tcd,
00319 OPJ_BYTE *src,
00320 OPJ_UINT32 len,
00321 OPJ_UINT32 tileno,
00322 opj_codestream_index_t *cstr_info,
00323 opj_event_mgr_t *manager);
00324
00325
00329 OPJ_BOOL opj_tcd_update_tile_data ( opj_tcd_t *p_tcd,
00330 OPJ_BYTE * p_dest,
00331 OPJ_UINT32 p_dest_length );
00332
00336 OPJ_UINT32 opj_tcd_get_encoded_tile_size ( opj_tcd_t *p_tcd );
00337
00347 OPJ_BOOL opj_tcd_init_encode_tile ( opj_tcd_t *p_tcd,
00348 OPJ_UINT32 p_tile_no, opj_event_mgr_t* p_manager );
00349
00353 OPJ_BOOL opj_tcd_copy_tile_data (opj_tcd_t *p_tcd,
00354 OPJ_BYTE * p_src,
00355 OPJ_UINT32 p_src_length );
00356
00362 OPJ_BOOL opj_alloc_tile_component_data(opj_tcd_tilecomp_t *l_tilec);
00363
00364
00368
00369 #endif