X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=libopenjpeg%2Ftcd.h;h=c3c416c6ecdc5a67b4f7cc8daf1a1316e7226de6;hb=d44375aece5dea2af83ffb8c9de4ade2ad35c593;hp=a5330730f40278ff42444f6c14bdef266bc9490b;hpb=0dc7f6a2d3d2a242c561b7cc1e4003542f2810b1;p=openjpeg.git diff --git a/libopenjpeg/tcd.h b/libopenjpeg/tcd.h index a5330730..c3c416c6 100644 --- a/libopenjpeg/tcd.h +++ b/libopenjpeg/tcd.h @@ -41,17 +41,31 @@ each other. The functions in TCD.C are used by some function in J2K.C. /** @defgroup TCD TCD - Implementation of a tile coder/decoder */ /*@{*/ +/** +FIXME: documentation +*/ +//typedef struct opj_tcd_seg { +// unsigned char** data; +// int dataindex; +// int numpasses; +// int len; +// int maxpasses; +// int numnewpasses; +// int newlen; +//} opj_tcd_seg_t; + /** FIXME: documentation */ typedef struct opj_tcd_seg { - unsigned char** data; - int dataindex; - int numpasses; - int len; - int maxpasses; - int numnewpasses; - int newlen; + OPJ_BYTE ** data; + OPJ_UINT32 dataindex; + OPJ_UINT32 numpasses; + OPJ_UINT32 real_num_passes; + OPJ_UINT32 len; + OPJ_UINT32 maxpasses; + OPJ_UINT32 numnewpasses; + OPJ_UINT32 newlen; } opj_tcd_seg_t; /** @@ -88,40 +102,75 @@ typedef struct opj_tcd_cblk_enc { int totalpasses; /* total number of passes */ } opj_tcd_cblk_enc_t; +//typedef struct opj_tcd_cblk_dec { +// unsigned char* data; /* Data */ +// opj_tcd_seg_t* segs; /* segments informations */ +// int x0, y0, x1, y1; /* dimension of the code-blocks : left upper corner (x0, y0) right low corner (x1,y1) */ +// int numbps; +// int numlenbits; +// int len; /* length */ +// int numnewpasses; /* number of pass added to the code-blocks */ +// int numsegs; /* number of segments */ +//} opj_tcd_cblk_dec_t; + typedef struct opj_tcd_cblk_dec { - unsigned char* data; /* Data */ + OPJ_BYTE * data; /* Data */ opj_tcd_seg_t* segs; /* segments informations */ - int x0, y0, x1, y1; /* dimension of the code-blocks : left upper corner (x0, y0) right low corner (x1,y1) */ - int numbps; - int numlenbits; - int len; /* length */ - int numnewpasses; /* number of pass added to the code-blocks */ - int numsegs; /* number of segments */ + OPJ_INT32 x0, y0, x1, y1; /* dimension of the code-blocks : left upper corner (x0, y0) right low corner (x1,y1) */ + OPJ_UINT32 numbps; + OPJ_UINT32 numlenbits; + OPJ_UINT32 len; /* length */ + OPJ_UINT32 numnewpasses; /* number of pass added to the code-blocks */ + OPJ_UINT32 numsegs; /* number of segments */ + OPJ_UINT32 real_num_segs; + OPJ_UINT32 m_current_max_segs; } opj_tcd_cblk_dec_t; /** FIXME: documentation */ +//typedef struct opj_tcd_precinct { +// int x0, y0, x1, y1; /* dimension of the precinct : left upper corner (x0, y0) right low corner (x1,y1) */ +// int cw, ch; /* number of precinct in width and heigth */ +// union{ /* code-blocks informations */ +// opj_tcd_cblk_enc_t* enc; +// opj_tcd_cblk_dec_t* dec; +// } cblks; +// opj_tgt_tree_t *incltree; /* inclusion tree */ +// opj_tgt_tree_t *imsbtree; /* IMSB tree */ +//} opj_tcd_precinct_t; + + typedef struct opj_tcd_precinct { - int x0, y0, x1, y1; /* dimension of the precinct : left upper corner (x0, y0) right low corner (x1,y1) */ - int cw, ch; /* number of precinct in width and heigth */ + OPJ_INT32 x0, y0, x1, y1; /* dimension of the precinct : left upper corner (x0, y0) right low corner (x1,y1) */ + OPJ_UINT32 cw, ch; /* number of precinct in width and heigth */ union{ /* code-blocks informations */ opj_tcd_cblk_enc_t* enc; opj_tcd_cblk_dec_t* dec; } cblks; - opj_tgt_tree_t *incltree; /* inclusion tree */ - opj_tgt_tree_t *imsbtree; /* IMSB tree */ + OPJ_UINT32 block_size; /* size taken by cblks (in bytes) */ + struct opj_tgt_tree *incltree; /* inclusion tree */ + struct opj_tgt_tree *imsbtree; /* IMSB tree */ } opj_tcd_precinct_t; /** FIXME: documentation */ +//typedef struct opj_tcd_band { +// int x0, y0, x1, y1; /* dimension of the subband : left upper corner (x0, y0) right low corner (x1,y1) */ +// int bandno; +// opj_tcd_precinct_t *precincts; /* precinct information */ +// int numbps; +// float stepsize; +//} opj_tcd_band_t; + typedef struct opj_tcd_band { - int x0, y0, x1, y1; /* dimension of the subband : left upper corner (x0, y0) right low corner (x1,y1) */ - int bandno; + OPJ_INT32 x0, y0, x1, y1; /* dimension of the subband : left upper corner (x0, y0) right low corner (x1,y1) */ + OPJ_UINT32 bandno; opj_tcd_precinct_t *precincts; /* precinct information */ - int numbps; - float stepsize; + OPJ_UINT32 precincts_data_size; /* size of data taken by precincts */ + OPJ_INT32 numbps; + OPJ_FLOAT32 stepsize; } opj_tcd_band_t; /** @@ -137,14 +186,27 @@ typedef struct opj_tcd_resolution { /** FIXME: documentation */ -typedef struct opj_tcd_tilecomp { - int x0, y0, x1, y1; /* dimension of component : left upper corner (x0, y0) right low corner (x1,y1) */ - int numresolutions; /* number of resolutions level */ +//typedef struct opj_tcd_tilecomp { +// int x0, y0, x1, y1; /* dimension of component : left upper corner (x0, y0) right low corner (x1,y1) */ +// int numresolutions; /* number of resolutions level */ +// opj_tcd_resolution_t *resolutions; /* resolutions information */ +// int *data; /* data of the component */ +// int numpix; /* add fixed_quality */ +//} opj_tcd_tilecomp_t; + +typedef struct opj_tcd_tilecomp +{ + OPJ_INT32 x0, y0, x1, y1; /* dimension of component : left upper corner (x0, y0) right low corner (x1,y1) */ + OPJ_UINT32 numresolutions; /* number of resolutions level */ + OPJ_UINT32 minimum_num_resolutions; /* number of resolutions level to decode (at max)*/ opj_tcd_resolution_t *resolutions; /* resolutions information */ - int *data; /* data of the component */ - int numpix; /* add fixed_quality */ + OPJ_UINT32 resolutions_size; /* size of data for resolutions (in bytes) */ + OPJ_INT32 *data; /* data of the component */ + OPJ_UINT32 data_size; /* size of the data of the component */ + OPJ_INT32 numpix; /* add fixed_quality */ } opj_tcd_tilecomp_t; + /** FIXME: documentation */ @@ -200,6 +262,39 @@ typedef struct opj_tcd { double encoding_time; } opj_tcd_t; + +struct opj_image; +struct opj_cp_v2; +struct opj_tcp_v2; +/** +Tile coder/decoder +*/ +typedef struct opj_tcd_v2 +{ + /** Position of the tilepart flag in Progression order*/ + OPJ_INT32 tp_pos; + /** Tile part number*/ + OPJ_UINT32 tp_num; + /** Current tile part number*/ + OPJ_UINT32 cur_tp_num; + /** Total number of tileparts of the current tile*/ + OPJ_UINT32 cur_totnum_tp; + /** Current Packet iterator number */ + OPJ_UINT32 cur_pino; + /** info on each image tile */ + opj_tcd_image_t *tcd_image; + /** image header */ + struct opj_image_header *image_header; + /** coding parameters */ + struct opj_cp_v2 *cp; + /** coding/decoding parameters common to all tiles */ + struct opj_tcp_v2 *tcp; + /** current encoded/decoded tile */ + OPJ_UINT32 tcd_tileno; + /** tell if the tcd is a decoder. */ + OPJ_UINT32 m_is_decoder : 1; +} opj_tcd_v2_t; + /** @name Exported functions */ /*@{*/ /* ----------------------------------------------------------------------- */ @@ -214,6 +309,54 @@ Create a new TCD handle @return Returns a new TCD handle if successful returns NULL otherwise */ opj_tcd_t* tcd_create(opj_common_ptr cinfo); + +/** +Create a new TCD handle +@param FIXME +@return Returns a new TCD handle if successful returns NULL otherwise +*/ +opj_tcd_v2_t* tcd_create_v2(opj_bool p_is_decoder); + +/** +Destroy a previously created TCD handle +@param tcd TCD handle to destroy +*/ +void tcd_destroy_v2(opj_tcd_v2_t *tcd); + +/** + * Initialize the tile coder and may reuse some meory. + * @param p_tcd TCD handle. + * @param p_image raw image. + * @param p_cp coding parameters. + * @param p_tile_no current tile index to encode. + * + * @return true if the encoding values could be set (false otherwise). +*/ +opj_bool tcd_init_v2( + opj_tcd_v2_t *p_tcd, + //struct opj_image * p_image, + opj_image_header_t * p_image_header, + //struct opj_cp * p_cp + opj_cp_v2_t * p_cp + ); + +/** + * Allocates memory for decoding a specific tile. + * + * @param p_tcd the tile decoder. + * @param p_image the image to decode. + * @param p_cp the decoding parameters. + * @param p_tile_no the index of the tile received in sequence. This not necesseraly lead to the + * tile at index p_tile_no. + * @param p_cstr_info codestream info (if any). + * + * @return true if the remaining data is sufficient.s + */ +opj_bool tcd_init_decode_tile( + opj_tcd_v2_t *p_tcd, + OPJ_UINT32 p_tile_no + ); + /** Destroy a previously created TCD handle @param tcd TCD handle to destroy @@ -251,7 +394,7 @@ void tcd_malloc_decode_tile(opj_tcd_t *tcd, opj_image_t * image, opj_cp_t * cp, void tcd_makelayer_fixed(opj_tcd_t *tcd, int layno, int final); void tcd_rateallocate_fixed(opj_tcd_t *tcd); void tcd_makelayer(opj_tcd_t *tcd, int layno, double thresh, int final); -bool tcd_rateallocate(opj_tcd_t *tcd, unsigned char *dest, int len, opj_codestream_info_t *cstr_info); +opj_bool tcd_rateallocate(opj_tcd_t *tcd, unsigned char *dest, int len, opj_codestream_info_t *cstr_info); /** Encode a tile from the raw image into a buffer @param tcd TCD handle @@ -270,7 +413,7 @@ Decode a tile from a buffer into a raw image @param tileno Number that identifies one of the tiles to be decoded @param cstr_info Codestream information structure */ -bool tcd_decode_tile(opj_tcd_t *tcd, unsigned char *src, int len, int tileno, opj_codestream_info_t *cstr_info); +opj_bool tcd_decode_tile(opj_tcd_t *tcd, unsigned char *src, int len, int tileno, opj_codestream_info_t *cstr_info); /** Free the memory allocated for decoding @param tcd TCD handle @@ -278,6 +421,37 @@ Free the memory allocated for decoding void tcd_free_decode(opj_tcd_t *tcd); void tcd_free_decode_tile(opj_tcd_t *tcd, int tileno); + +/** + * Gets the maximum tile size that will be taken by the tile once decoded. + */ +OPJ_UINT32 tcd_get_decoded_tile_size ( + opj_tcd_v2_t *p_tcd + ); + +/** +Decode a tile from a buffer into a raw image +@param tcd TCD handle +@param src Source buffer +@param len Length of source buffer +@param tileno Number that identifies one of the tiles to be decoded +*/ +opj_bool tcd_decode_tile_v2(opj_tcd_v2_t *tcd, + OPJ_BYTE *src, + OPJ_UINT32 len, + OPJ_UINT32 tileno, + struct opj_codestream_info_v2 *cstr_info); + + +/** + * Copies tile data from the system onto the given memory block. + */ +opj_bool tcd_update_tile_data ( + opj_tcd_v2_t *p_tcd, + OPJ_BYTE * p_dest, + OPJ_UINT32 p_dest_length + ); + /* ----------------------------------------------------------------------- */ /*@}*/