X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=libopenjpeg%2Fj2k.h;h=2ec8980d3d1b2e648a9be00678fa1a49b4570fc1;hb=440adddcde73ff60c947f5c48de342c063f6aa3f;hp=51907004bc416d15ccbe81dc920e3fa3b10b7be8;hpb=a600d8f4e2c21ea0532d4af3dc6374b60b93c583;p=openjpeg.git diff --git a/libopenjpeg/j2k.h b/libopenjpeg/j2k.h index 51907004..2ec8980d 100644 --- a/libopenjpeg/j2k.h +++ b/libopenjpeg/j2k.h @@ -6,6 +6,9 @@ * Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe * Copyright (c) 2005, Herve Drolon, FreeImage Team * Copyright (c) 2006-2007, Parvatha Elangovan + * Copyright (c) 2008, Jerome Fimes, Communications & Systemes + * Copyright (c) 2011, Mickael Savinaud, Communications & Systemes + * * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -77,15 +80,12 @@ The functions in J2K.C have for goal to read/write the several parts of the code #define J2K_MS_EPH 0xff92 /**< EPH marker value */ #define J2K_MS_CRG 0xff63 /**< CRG marker value */ #define J2K_MS_COM 0xff64 /**< COM marker value */ - -#define J2K_MS_UNK 0 /**< UNKNOWN marker value */ - -#ifdef TODO_MS /* FIXME */ #define J2K_MS_CBD 0xff78 /**< CBD marker value */ #define J2K_MS_MCC 0xff75 /**< MCC marker value */ #define J2K_MS_MCT 0xff74 /**< MCT marker value */ #define J2K_MS_MCO 0xff77 /**< MCO marker value */ -#endif + +#define J2K_MS_UNK 0 /**< UNKNOWN marker value */ /* UniPG>> */ #ifdef USE_JPWL @@ -100,15 +100,12 @@ The functions in J2K.C have for goal to read/write the several parts of the code #endif /* USE_JPSEC */ /* < there was a PPT marker for the present tile */ OPJ_UINT32 ppt : 1; @@ -361,7 +332,7 @@ typedef struct opj_tcp_v2 -/** +/** V1 STYLE Coding parameters */ typedef struct opj_cp { @@ -505,8 +476,8 @@ opj_decoding_param_t; /** -Coding parameters -*/ + * Coding parameters + */ typedef struct opj_cp_v2 { /** Size of the image in bits*/ @@ -528,9 +499,6 @@ typedef struct opj_cp_v2 /** number of tiles in heigth */ OPJ_UINT32 th; - - - /** packet header store there for futur use in t2_decode_packet */ OPJ_BYTE *ppm_data; /** size of the ppm_data*/ @@ -553,6 +521,7 @@ typedef struct opj_cp_v2 /** tile coding parameters */ opj_tcp_v2_t *tcps; + union { opj_decoding_param_t m_dec; @@ -631,6 +600,25 @@ typedef struct opj_j2k_dec OPJ_UINT32 m_start_tile_y; OPJ_UINT32 m_end_tile_x; OPJ_UINT32 m_end_tile_y; + /** + * Decoded area set by the user + */ + OPJ_UINT32 m_DA_x0; + OPJ_UINT32 m_DA_y0; + OPJ_UINT32 m_DA_x1; + OPJ_UINT32 m_DA_y1; + + /** Index of the tile to decode (used in get_tile) */ + OPJ_INT32 m_tile_ind_to_dec; + /** Position of the last SOT marker read */ + OPJ_OFF_T m_last_sot_read_pos; + + /** + * Indicate that the current tile-part is assume as the last tile part of the codestream. + * It is useful in the case of PSot is equal to zero. The sot length will be compute in the + * SOD reader function. FIXME NOT USED for the moment + */ + opj_bool m_last_tile_part; /** to tell that a tile can be decoded. */ OPJ_UINT32 m_can_decode : 1; OPJ_UINT32 m_discard_tiles : 1; @@ -756,12 +744,11 @@ typedef struct opj_j2k_v2 } m_specific_param; - /** number of the tile curently concern by coding/decoding */ - OPJ_UINT32 m_current_tile_number; + /** pointer to the internal/private encoded / decoded image */ + opj_image_t* m_private_image; - /** pointer to the encoded / decoded image */ - //opj_image_t *m_image; - opj_image_header_t* m_image_header; + /* pointer to the output image (decoded)*/ + opj_image_t* m_output_image; /** Coding parameters */ opj_cp_v2_t m_cp; @@ -775,11 +762,11 @@ typedef struct opj_j2k_v2 /** helper used to write the index file */ opj_codestream_index_t *cstr_index; + /** number of the tile curently concern by coding/decoding */ + OPJ_UINT32 m_current_tile_number; + /** the current tile coder/decoder **/ struct opj_tcd_v2 * m_tcd; - //opj_tcd_v2_t * m_tcd; - - } opj_j2k_v2_t; @@ -890,7 +877,7 @@ opj_bool j2k_end_decompress(opj_j2k_v2_t *j2k, struct opj_stream_private *cio, s */ opj_bool j2k_read_header( struct opj_stream_private *p_stream, opj_j2k_v2_t* p_j2k, - opj_image_header_t* p_img_header, + opj_image_t** p_image, struct opj_event_mgr* p_manager ); @@ -901,6 +888,13 @@ opj_bool j2k_read_header( struct opj_stream_private *p_stream, */ void j2k_destroy (opj_j2k_v2_t *p_j2k); +/** + * Destroys a codestream index structure. + * + * @param p_cstr_ind the codestream index parameter to destroy. + */ +void j2k_destroy_cstr_index (opj_codestream_index_t *p_cstr_ind); + /** * Decode tile data. * @param p_j2k the jpeg2000 codec. @@ -950,6 +944,7 @@ opj_bool j2k_read_tile_header ( * @return true if the area could be set. */ opj_bool j2k_set_decode_area( opj_j2k_v2_t *p_j2k, + opj_image_t* p_image, OPJ_INT32 p_start_x, OPJ_INT32 p_start_y, OPJ_INT32 p_end_x, OPJ_INT32 p_end_y, struct opj_event_mgr * p_manager ); @@ -981,7 +976,7 @@ void j2k_dump (opj_j2k_v2_t* p_j2k, OPJ_INT32 flag, FILE* out_stream); *@param dev_dump_flag flag to describe if we are in the case of this function is use outside j2k_dump function *@param out_stream output stream where dump the elements. */ -void j2k_dump_image_header(opj_image_header_t* img_header, opj_bool dev_dump_flag, FILE* out_stream); +void j2k_dump_image_header(opj_image_t* image, opj_bool dev_dump_flag, FILE* out_stream); /** * Dump a component image header structure. @@ -990,7 +985,7 @@ void j2k_dump_image_header(opj_image_header_t* img_header, opj_bool dev_dump_fla *@param dev_dump_flag flag to describe if we are in the case of this function is use outside j2k_dump function *@param out_stream output stream where dump the elements. */ -void j2k_dump_image_comp_header(opj_image_comp_header_t* comp_header, opj_bool dev_dump_flag, FILE* out_stream); +void j2k_dump_image_comp_header(opj_image_comp_t* comp, opj_bool dev_dump_flag, FILE* out_stream); /** * Get the codestream info from a JPEG2000 codec. @@ -1010,6 +1005,23 @@ opj_codestream_info_v2_t* j2k_get_cstr_info(opj_j2k_v2_t* p_j2k); */ opj_codestream_index_t* j2k_get_cstr_index(opj_j2k_v2_t* p_j2k); +/** + * Decode an image from a JPEG-2000 codestream + * @param j2k J2K decompressor handle + * @param cio Input buffer stream + * @param cstr_info Codestream information structure if required, NULL otherwise + * @return Returns a decoded image if successful, returns NULL otherwise +*/ +opj_bool j2k_decode_v2(opj_j2k_v2_t *j2k, struct opj_stream_private *cio, opj_image_t* p_image, opj_event_mgr_t * p_manager); + + +opj_bool j2k_get_tile( opj_j2k_v2_t *p_j2k, + opj_stream_private_t *p_stream, + opj_image_t* p_image, + struct opj_event_mgr * p_manager, + OPJ_UINT32 tile_index ); + +opj_bool j2k_set_decoded_resolution_factor(opj_j2k_v2_t *p_j2k, OPJ_UINT32 res_factor, opj_event_mgr_t * p_manager); #endif /* __J2K_H */