OpenJPEG 2.1.0
|
00001 /* 00002 * The copyright in this software is being made available under the 2-clauses 00003 * BSD License, included below. This software may be subject to other third 00004 * party and contributor rights, including patent rights, and no such rights 00005 * are granted under this license. 00006 * 00007 * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium 00008 * Copyright (c) 2002-2014, Professor Benoit Macq 00009 * Copyright (c) 2001-2003, David Janssens 00010 * Copyright (c) 2002-2003, Yannick Verschueren 00011 * Copyright (c) 2003-2007, Francois-Olivier Devaux 00012 * Copyright (c) 2003-2014, Antonin Descampe 00013 * Copyright (c) 2005, Herve Drolon, FreeImage Team 00014 * Copyright (c) 2008, 2011-2012, Centre National d'Etudes Spatiales (CNES), FR 00015 * Copyright (c) 2012, CS Systemes d'Information, France 00016 * All rights reserved. 00017 * 00018 * Redistribution and use in source and binary forms, with or without 00019 * modification, are permitted provided that the following conditions 00020 * are met: 00021 * 1. Redistributions of source code must retain the above copyright 00022 * notice, this list of conditions and the following disclaimer. 00023 * 2. Redistributions in binary form must reproduce the above copyright 00024 * notice, this list of conditions and the following disclaimer in the 00025 * documentation and/or other materials provided with the distribution. 00026 * 00027 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' 00028 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 00029 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 00030 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 00031 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 00032 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 00033 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 00034 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 00035 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 00036 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 00037 * POSSIBILITY OF SUCH DAMAGE. 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; /* Number of passes in the layer */ 00081 OPJ_UINT32 len; /* len of information */ 00082 OPJ_FLOAT64 disto; /* add for index (Cfr. Marcela) */ 00083 OPJ_BYTE *data; /* data */ 00084 } opj_tcd_layer_t; 00085 00089 typedef struct opj_tcd_cblk_enc { 00090 OPJ_BYTE* data; /* Data */ 00091 opj_tcd_layer_t* layers; /* layer information */ 00092 opj_tcd_pass_t* passes; /* information about the passes */ 00093 OPJ_INT32 x0, y0, x1, y1; /* dimension of the code-blocks : left upper corner (x0, y0) right low corner (x1,y1) */ 00094 OPJ_UINT32 numbps; 00095 OPJ_UINT32 numlenbits; 00096 OPJ_UINT32 numpasses; /* number of pass already done for the code-blocks */ 00097 OPJ_UINT32 numpassesinlayers; /* number of passes in the layer */ 00098 OPJ_UINT32 totalpasses; /* total number of passes */ 00099 } opj_tcd_cblk_enc_t; 00100 00101 00102 typedef struct opj_tcd_cblk_dec { 00103 OPJ_BYTE * data; /* Data */ 00104 opj_tcd_seg_t* segs; /* segments information */ 00105 OPJ_INT32 x0, y0, x1, y1; /* position of the code-blocks : left upper corner (x0, y0) right low corner (x1,y1) */ 00106 OPJ_UINT32 numbps; 00107 OPJ_UINT32 numlenbits; 00108 OPJ_UINT32 data_max_size; /* Size of allocated data buffer */ 00109 OPJ_UINT32 data_current_size; /* Size of used data buffer */ 00110 OPJ_UINT32 numnewpasses; /* number of pass added to the code-blocks */ 00111 OPJ_UINT32 numsegs; /* number of segments */ 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; /* dimension of the precinct : left upper corner (x0, y0) right low corner (x1,y1) */ 00121 OPJ_UINT32 cw, ch; /* number of precinct in width and height */ 00122 union{ /* code-blocks information */ 00123 opj_tcd_cblk_enc_t* enc; 00124 opj_tcd_cblk_dec_t* dec; 00125 } cblks; 00126 OPJ_UINT32 block_size; /* size taken by cblks (in bytes) */ 00127 opj_tgt_tree_t *incltree; /* inclusion tree */ 00128 opj_tgt_tree_t *imsbtree; /* IMSB tree */ 00129 } opj_tcd_precinct_t; 00130 00134 typedef struct opj_tcd_band { 00135 OPJ_INT32 x0, y0, x1, y1; /* dimension of the subband : left upper corner (x0, y0) right low corner (x1,y1) */ 00136 OPJ_UINT32 bandno; 00137 opj_tcd_precinct_t *precincts; /* precinct information */ 00138 OPJ_UINT32 precincts_data_size; /* size of data taken by precincts */ 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; /* dimension of the resolution level : left upper corner (x0, y0) right low corner (x1,y1) */ 00148 OPJ_UINT32 pw, ph; 00149 OPJ_UINT32 numbands; /* number sub-band for the resolution level */ 00150 opj_tcd_band_t bands[3]; /* subband information */ 00151 } opj_tcd_resolution_t; 00152 00156 typedef struct opj_tcd_tilecomp 00157 { 00158 OPJ_INT32 x0, y0, x1, y1; /* dimension of component : left upper corner (x0, y0) right low corner (x1,y1) */ 00159 OPJ_UINT32 numresolutions; /* number of resolutions level */ 00160 OPJ_UINT32 minimum_num_resolutions; /* number of resolutions level to decode (at max)*/ 00161 opj_tcd_resolution_t *resolutions; /* resolutions information */ 00162 OPJ_UINT32 resolutions_size; /* size of data for resolutions (in bytes) */ 00163 OPJ_INT32 *data; /* data of the component */ 00164 OPJ_UINT32 data_size; /* size of the data of the component */ 00165 OPJ_INT32 numpix; /* add fixed_quality */ 00166 } opj_tcd_tilecomp_t; 00167 00168 00172 typedef struct opj_tcd_tile { 00173 OPJ_INT32 x0, y0, x1, y1; /* dimension of the tile : left upper corner (x0, y0) right low corner (x1,y1) */ 00174 OPJ_UINT32 numcomps; /* number of components in tile */ 00175 opj_tcd_tilecomp_t *comps; /* Components information */ 00176 OPJ_INT32 numpix; /* add fixed_quality */ 00177 OPJ_FLOAT64 distotile; /* add fixed_quality */ 00178 OPJ_FLOAT64 distolayer[100]; /* add fixed_quality */ 00179 OPJ_UINT32 packno; /* packet number */ 00180 } opj_tcd_tile_t; 00181 00185 typedef struct opj_tcd_image 00186 { 00187 opj_tcd_tile_t *tiles; /* Tiles information */ 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 /*void tcd_dump(FILE *fd, opj_tcd_t *tcd, opj_tcd_image_t *img);*/ /* TODO MSD shoul use the new v2 structures */ 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 /* __TCD_H */