X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libopenjpeg%2Fjp2.h;h=200e1d5c461914576e6fa9d160eefb20114de75d;hb=94a5e081e5fb5e8b1ad00b95960b96d7093241d1;hp=b0a60086582d8f259506aafda9004b25d8a31a46;hpb=3b30e4255173eb4fabea772f08e9d701660e4bc6;p=openjpeg.git diff --git a/libopenjpeg/jp2.h b/libopenjpeg/jp2.h index b0a60086..200e1d5c 100644 --- a/libopenjpeg/jp2.h +++ b/libopenjpeg/jp2.h @@ -49,17 +49,17 @@ #define JP2_PCLR 0x70636c72 /**< Palette box */ #define JP2_CMAP 0x636d6170 /**< Component Mapping box */ #define JP2_CDEF 0x63646566 /**< Channel Definition box */ -// For the future MSD -// #define JP2_RES 0x72657320 /**< Resolution box (super-box) */ +/* For the future MSD */ +/* #define JP2_RES 0x72657320 */ /**< Resolution box (super-box) */ #define JP2_JP2C 0x6a703263 /**< Contiguous codestream box */ -// For the future MSD -// #define JP2_JP2I 0x6a703269 /**< Intellectual property box */ -// #define JP2_XML 0x786d6c20 /**< XML box */ -// #define JP2_UUID 0x75756994 /**< UUID box */ -// #define JP2_UINF 0x75696e66 /**< UUID info box (super-box) */ -// #define JP2_ULST 0x756c7374 /**< UUID list box */ +/* For the future MSD */ +/* #define JP2_JP2I 0x6a703269 */ /**< Intellectual property box */ +/* #define JP2_XML 0x786d6c20 */ /**< XML box */ +/* #define JP2_UUID 0x75756994 */ /**< UUID box */ +/* #define JP2_UINF 0x75696e66 */ /**< UUID info box (super-box) */ +/* #define JP2_ULST 0x756c7374 */ /**< UUID list box */ #define JP2_URL 0x75726c20 /**< Data entry URL box */ #define JP2_DTBL 0x6474626c /**< Data Reference box */ @@ -77,14 +77,14 @@ typedef enum JP2_STATE_HEADER = 0x4, JP2_STATE_CODESTREAM = 0x8, JP2_STATE_END_CODESTREAM = 0x10, - JP2_STATE_UNKNOWN = 0x80000000 + JP2_STATE_UNKNOWN = 0x7fffffff /* ISO C restricts enumerator values to range of 'int' */ } JP2_STATE; typedef enum { JP2_IMG_STATE_NONE = 0x0, - JP2_IMG_STATE_UNKNOWN = 0x80000000 + JP2_IMG_STATE_UNKNOWN = 0x7fffffff } JP2_IMG_STATE; @@ -145,7 +145,7 @@ JP2 component typedef struct opj_jp2_comps { int depth; int sgnd; - int bpcc; + OPJ_UINT32 bpcc; } opj_jp2_comps_t; /** @@ -175,6 +175,7 @@ typedef struct opj_jp2 { unsigned int j2k_codestream_offset; unsigned int j2k_codestream_length; opj_bool jpip_on; + opj_bool ignore_pclr_cmap_cdef; } opj_jp2_t; /** @@ -213,7 +214,8 @@ typedef struct opj_jp2_v2 OPJ_UINT32 jp2_img_state; opj_jp2_color_t color; - + + opj_bool ignore_pclr_cmap_cdef; } opj_jp2_v2_t; @@ -221,8 +223,8 @@ opj_jp2_v2_t; JP2 Box */ typedef struct opj_jp2_box { - OPJ_INT32 length; - OPJ_INT32 type; + OPJ_UINT32 length; + OPJ_UINT32 type; OPJ_INT32 init_pos; } opj_jp2_box_t; @@ -235,6 +237,18 @@ typedef struct opj_jp2_header_handler } opj_jp2_header_handler_t; + +typedef struct opj_jp2_img_header_writer_handler +{ + /* action to perform */ + unsigned char* (*handler) (opj_jp2_v2_t *jp2, unsigned int * p_data_size); + /* result of the action : data */ + unsigned char * m_data; + /* size of data */ + unsigned int m_size; +} +opj_jp2_img_header_writer_handler_t; + /** @name Exported functions */ /*@{*/ /* ----------------------------------------------------------------------- */ @@ -244,6 +258,20 @@ Write the JP2H box - JP2 Header box (used in MJ2) @param cio Output buffer stream */ void jp2_write_jp2h(opj_jp2_t *jp2, opj_cio_t *cio); + +/** + * Writes the Jpeg2000 file Header box - JP2 Header box (warning, this is a super box). + * + * @param cio the stream to write data to. + * @param jp2 the jpeg2000 file codec. + * @param p_manager user event manager. + * + * @return true if writting was successful. +*/ +opj_bool jp2_write_jp2h_v2( opj_jp2_v2_t *jp2, + struct opj_stream_private *cio, + struct opj_event_mgr * p_manager ); + /** Read the JP2H box - JP2 Header box (used in MJ2) @param jp2 JP2 handle @@ -252,39 +280,34 @@ Read the JP2H box - JP2 Header box (used in MJ2) @return Returns true if successful, returns false otherwise */ opj_bool jp2_read_jp2h(opj_jp2_t *jp2, opj_cio_t *cio, opj_jp2_color_t *color); -/** -Creates a JP2 decompression structure -@param cinfo Codec context info -@return Returns a handle to a JP2 decompressor if successful, returns NULL otherwise -*/ -opj_jp2_t* jp2_create_decompress(opj_common_ptr cinfo); + /** Destroy a JP2 decompressor handle @param jp2 JP2 decompressor handle to destroy */ void jp2_destroy_decompress(opj_jp2_t *jp2); -/** -Setup the decoder decoding parameters using user parameters. -Decoding parameters are returned in jp2->j2k->cp. -@param jp2 JP2 decompressor handle -@param parameters decompression parameters -*/ -void jp2_setup_decoder(opj_jp2_t *jp2, opj_dparameters_t *parameters); + /** Setup the decoder decoding parameters using user parameters. Decoding parameters are returned in jp2->j2k->cp. @param jp2 JP2 decompressor handle @param parameters decompression parameters */ -void jp2_setup_decoder_v2(opj_jp2_v2_t *jp2, opj_dparameters_t *parameters); +void opj_jp2_setup_decoder(opj_jp2_v2_t *jp2, opj_dparameters_t *parameters); + /** -Decode an image from a JPEG-2000 file stream -@param jp2 JP2 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 + * Decode an image from a JPEG-2000 file stream + * @param jp2 JP2 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_image_t* opj_jp2_decode(opj_jp2_t *jp2, opj_cio_t *cio, opj_codestream_info_t *cstr_info); +opj_bool opj_jp2_decode(opj_jp2_v2_t *jp2, + opj_stream_private_t *p_stream, + opj_image_t* p_image, + opj_event_mgr_t * p_manager); + + /** Creates a JP2 compression structure @param cinfo Codec context info @@ -303,7 +326,10 @@ Coding parameters are returned in jp2->j2k->cp. @param parameters compression parameters @param image input filled image */ -void jp2_setup_encoder(opj_jp2_t *jp2, opj_cparameters_t *parameters, opj_image_t *image); +void jp2_setup_encoder( opj_jp2_v2_t *jp2, + opj_cparameters_t *parameters, + opj_image_t *image, + struct opj_event_mgr * p_manager); /** Encode an image into a JPEG-2000 file stream @param jp2 JP2 compressor handle @@ -314,6 +340,39 @@ Encode an image into a JPEG-2000 file stream */ opj_bool opj_jp2_encode(opj_jp2_t *jp2, opj_cio_t *cio, opj_image_t *image, opj_codestream_info_t *cstr_info); +/** +Encode an image into a JPEG-2000 file stream +@param jp2 JP2 compressor handle +@param stream Output buffer stream +@param p_manager event manager +@return Returns true if successful, returns false otherwise +*/ +opj_bool opj_jp2_encode_v2( opj_jp2_v2_t *jp2, + opj_stream_private_t *stream, + opj_event_mgr_t * p_manager); + + +/** + * Starts a compression scheme, i.e. validates the codec parameters, writes the header. + * + * @param jp2 the jpeg2000 file codec. + * @param cio the stream object. + * + * @return true if the codec is valid. + */ +opj_bool jp2_start_compress(opj_jp2_v2_t *jp2, + struct opj_stream_private *cio, + struct opj_image * p_image, + struct opj_event_mgr * p_manager); + + +/** + * Ends the compression procedures and possibiliy add data to be read after the + * codestream. + */ +opj_bool jp2_end_compress( opj_jp2_v2_t *jp2, + struct opj_stream_private *cio, + struct opj_event_mgr * p_manager); /* ----------------------------------------------------------------------- */ @@ -334,8 +393,7 @@ opj_bool jp2_end_decompress(opj_jp2_v2_t *jp2, struct opj_stream_private *cio, s */ opj_bool jp2_read_header( struct opj_stream_private *p_stream, opj_jp2_v2_t *jp2, - opj_image_header_t ** p_image_header, - struct opj_codestream_info** p_cstr_info, + opj_image_t ** p_img_header, struct opj_event_mgr * p_manager ); @@ -359,13 +417,28 @@ opj_bool jp2_read_tile_header ( struct opj_event_mgr * p_manager ); + + +/** + * Writes a tile. + * @param p_j2k the jpeg2000 codec. + * @param p_stream the stream to write data to. + * @param p_manager the user event manager. + */ +opj_bool jp2_write_tile ( opj_jp2_v2_t *p_jp2, + OPJ_UINT32 p_tile_index, + OPJ_BYTE * p_data, + OPJ_UINT32 p_data_size, + struct opj_stream_private *p_stream, + struct opj_event_mgr * p_manager ); + /** * Decode tile data. * @param p_j2k the jpeg2000 codec. * @param p_stream the stream to write data to. * @param p_manager the user event manager. */ -opj_bool opj_jp2_decode_tile ( +opj_bool jp2_decode_tile ( opj_jp2_v2_t * p_jp2, OPJ_UINT32 p_tile_index, OPJ_BYTE * p_data, @@ -399,14 +472,48 @@ void jp2_destroy(opj_jp2_v2_t *jp2); * * @return true if the area could be set. */ -opj_bool jp2_set_decode_area( - opj_jp2_v2_t *p_jp2, - 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 - ); +opj_bool jp2_set_decode_area( opj_jp2_v2_t *p_jp2, + 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 ); + +opj_bool jp2_get_tile( opj_jp2_v2_t *p_jp2, + opj_stream_private_t *p_stream, + opj_image_t* p_image, + struct opj_event_mgr * p_manager, + OPJ_UINT32 tile_index ); + + +/** + * Dump some elements from the JP2 decompression structure . + * + *@param p_jp2 the jp2 codec. + *@param flag flag to describe what elments are dump. + *@param out_stream output stream where dump the elements. + * +*/ +void jp2_dump (opj_jp2_v2_t* p_jp2, OPJ_INT32 flag, FILE* out_stream); + +/** + * Get the codestream info from a JPEG2000 codec. + * + *@param p_jp2 jp2 codec. + * + *@return the codestream information extract from the jpg2000 codec + */ +opj_codestream_info_v2_t* jp2_get_cstr_info(opj_jp2_v2_t* p_jp2); + +/** + * Get the codestream index from a JPEG2000 codec. + * + *@param p_jp2 jp2 codec. + * + *@return the codestream index extract from the jpg2000 codec + */ +opj_codestream_index_t* jp2_get_cstr_index(opj_jp2_v2_t* p_jp2); + +opj_bool jp2_set_decoded_resolution_factor(opj_jp2_v2_t *p_jp2, OPJ_UINT32 res_factor, opj_event_mgr_t * p_manager); /*@}*/