X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Flib%2Fopenjp2%2Fopenjpeg.h;h=9bf014b41ac512759dbb89f1c6c5a924ea26eb57;hb=d19a4ab6768c48b542c0add922eba0dcddae9ffe;hp=6a6d0fcd56b26b969244226e2cf7dc255c0d0cfb;hpb=e798fe37e191c1ea8b3fa248662d7cc0b75674d5;p=openjpeg.git diff --git a/src/lib/openjp2/openjpeg.h b/src/lib/openjp2/openjpeg.h index 6a6d0fcd..9bf014b4 100644 --- a/src/lib/openjp2/openjpeg.h +++ b/src/lib/openjp2/openjpeg.h @@ -1,14 +1,21 @@ /* - * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium - * Copyright (c) 2002-2007, Professor Benoit Macq + * The copyright in this software is being made available under the 2-clauses + * BSD License, included below. This software may be subject to other third + * party and contributor rights, including patent rights, and no such rights + * are granted under this license. + * + * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium + * Copyright (c) 2002-2014, Professor Benoit Macq * Copyright (c) 2001-2003, David Janssens * Copyright (c) 2002-2003, Yannick Verschueren - * Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe + * Copyright (c) 2003-2007, Francois-Olivier Devaux + * Copyright (c) 2003-2014, Antonin Descampe * Copyright (c) 2005, Herve Drolon, FreeImage Team * Copyright (c) 2006-2007, Parvatha Elangovan * Copyright (c) 2008, Jerome Fimes, Communications & Systemes * Copyright (c) 2010-2011, Kaori Hagihara - * Copyright (c) 2011, Mickael Savinaud, Communications & Systemes + * Copyright (c) 2011-2012, Centre National d'Etudes Spatiales (CNES), France + * Copyright (c) 2012, CS Systemes d'Information, France * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -42,14 +49,31 @@ ========================================================== */ +/* +The inline keyword is supported by C99 but not by C90. +Most compilers implement their own version of this keyword ... +*/ +#ifndef INLINE + #if defined(_MSC_VER) + #define INLINE __forceinline + #elif defined(__GNUC__) + #define INLINE __inline__ + #elif defined(__MWERKS__) + #define INLINE inline + #else + /* add other compilers here ... */ + #define INLINE + #endif /* defined() */ +#endif /* INLINE */ + /* deprecated attribute */ #ifdef __GNUC__ - #define DEPRECATED(func) func __attribute__ ((deprecated)) + #define OPJ_DEPRECATED(func) func __attribute__ ((deprecated)) #elif defined(_MSC_VER) - #define DEPRECATED(func) __declspec(deprecated) func + #define OPJ_DEPRECATED(func) __declspec(deprecated) func #else #pragma message("WARNING: You need to implement DEPRECATED for this compiler") - #define DEPRECATED(func) func + #define OPJ_DEPRECATED(func) func #endif #if defined(OPJ_STATIC) || !defined(_WIN32) @@ -79,7 +103,7 @@ defined with this macro as being exported. #endif /* OPJ_EXPORTS */ #endif /* !OPJ_STATIC || !_WIN32 */ -typedef int opj_bool; /*FIXME it should be to follow the name of others OPJ_TYPE -> OPJ_BOOL*/ +typedef int OPJ_BOOL; #define OPJ_TRUE 1 #define OPJ_FALSE 0 @@ -99,6 +123,11 @@ typedef uint32_t OPJ_UINT32; typedef int64_t OPJ_INT64; typedef uint64_t OPJ_UINT64; +typedef int64_t OPJ_OFF_T; /* 64-bit file offset type */ + +#include +typedef size_t OPJ_SIZE_T; + /* Avoid compile-time warning because parameter is not used */ #define OPJ_ARG_NOT_USED(x) (void)(x) @@ -110,16 +139,16 @@ typedef uint64_t OPJ_UINT64; #define OPJ_PATH_LEN 4096 /**< Maximum allowed size for filenames */ -#define J2K_MAXRLVLS 33 /**< Number of maximum resolution level authorized */ -#define J2K_MAXBANDS (3*J2K_MAXRLVLS-2) /**< Number of maximum sub-band linked to number of resolution level */ +#define OPJ_J2K_MAXRLVLS 33 /**< Number of maximum resolution level authorized */ +#define OPJ_J2K_MAXBANDS (3*OPJ_J2K_MAXRLVLS-2) /**< Number of maximum sub-band linked to number of resolution level */ -#define J2K_DEFAULT_NB_SEGS 10 -#define J2K_STREAM_CHUNK_SIZE 0x100000 /** 1 mega by default */ -#define J2K_DEFAULT_HEADER_SIZE 1000 -#define J2K_MCC_DEFAULT_NB_RECORDS 10 -#define J2K_MCT_DEFAULT_NB_RECORDS 10 +#define OPJ_J2K_DEFAULT_NB_SEGS 10 +#define OPJ_J2K_STREAM_CHUNK_SIZE 0x100000 /** 1 mega by default */ +#define OPJ_J2K_DEFAULT_HEADER_SIZE 1000 +#define OPJ_J2K_MCC_DEFAULT_NB_RECORDS 10 +#define OPJ_J2K_MCT_DEFAULT_NB_RECORDS 10 -/* UniPG>> */ +/* UniPG>> */ /* NOT YET USED IN THE V2 VERSION OF OPENJPEG */ #define JPWL_MAX_NO_TILESPECS 16 /**< Maximum number of tile parts expected by JPWL: increase at your will */ #define JPWL_MAX_NO_PACKSPECS 16 /**< Maximum number of packet parts expected by JPWL: increase at your will */ #define JPWL_MAX_NO_MARKERS 512 /**< Maximum number of JPWL markers: increase at your will */ @@ -131,13 +160,13 @@ typedef uint64_t OPJ_UINT64; /* < -
  • Error messages -
  • Warning messages -
  • Debugging messages - -*/ -typedef struct opj_event_mgr -{ - /** Data to call the event manager upon */ - void * m_error_data; - /** Data to call the event manager upon */ - void * m_warning_data; - /** Data to call the event manager upon */ - void * m_info_data; - /** Error message callback if available, NULL otherwise */ - opj_msg_callback error_handler; - /** Warning message callback if available, NULL otherwise */ - opj_msg_callback warning_handler; - /** Debug message callback if available, NULL otherwise */ - opj_msg_callback info_handler; -} opj_event_mgr_t; - /* ========================================================== codec typedef definitions @@ -293,7 +287,7 @@ typedef struct opj_poc { * */ typedef struct opj_cparameters { /** size of tile: tile_size_on = false (not in argument) or = true (in argument) */ - opj_bool tile_size_on; + OPJ_BOOL tile_size_on; /** XTOsiz */ int cp_tx0; /** YTOsiz */ @@ -314,12 +308,12 @@ typedef struct opj_cparameters { char *cp_comment; /** csty : coding style */ int csty; - /** progression order (default LRCP) */ + /** progression order (default OPJ_LRCP) */ OPJ_PROG_ORDER prog_order; /** progression order changes */ opj_poc_t POC[32]; /** number of progression order changes (POC), default to 0 */ - int numpocs; + OPJ_UINT32 numpocs; /** number of layers */ int tcp_numlayers; /** rates of layers */ @@ -343,9 +337,9 @@ typedef struct opj_cparameters { /* number of precinct size specifications */ int res_spec; /** initial precinct width */ - int prcw_init[J2K_MAXRLVLS]; + int prcw_init[OPJ_J2K_MAXRLVLS]; /** initial precinct height */ - int prch_init[J2K_MAXRLVLS]; + int prch_init[OPJ_J2K_MAXRLVLS]; /**@name command line encoder parameters (not used inside the library) */ /*@{*/ @@ -371,11 +365,11 @@ typedef struct opj_cparameters { int cod_format; /*@}*/ -/* UniPG>> */ +/* UniPG>> */ /* NOT YET USED IN THE V2 VERSION OF OPENJPEG */ /**@name JPWL encoding parameters */ /*@{*/ /** enables writing of EPC in MH, thus activating JPWL */ - opj_bool jpwl_epc_on; + OPJ_BOOL jpwl_epc_on; /** error protection method for MH (0,1,16,32,37-128) */ int jpwl_hprot_MH; /** tile number of header protection specification (>=0) */ @@ -416,11 +410,11 @@ typedef struct opj_cparameters { /** MCT (multiple component transform) */ char tcp_mct; /** Enable JPIP indexing*/ - opj_bool jpip_on; - /** Naive implementation of MCT restricted to a single reversible array based encoding without offset concerning all the components. */ + OPJ_BOOL jpip_on; + /** Naive implementation of MCT restricted to a single reversible array based + encoding without offset concerning all the components. */ void * mct_data; - -} opj_cparameters_t; +} opj_cparameters_t; #define OPJ_DPARAMETERS_IGNORE_PCLR_CMAP_CDEF_FLAG 0x0001 @@ -435,14 +429,14 @@ typedef struct opj_dparameters { if != 0, then original dimension divided by 2^(reduce); if == 0 or not used, image is decoded to the full resolution */ - int cp_reduce; + OPJ_UINT32 cp_reduce; /** Set the maximum number of quality layers to decode. If there are less quality layers than the specified number, all the quality layers are decoded. if != 0, then only the first "layer" layers are decoded; if == 0 or not used, all the quality layers are decoded */ - int cp_layer; + OPJ_UINT32 cp_layer; /**@name command line decoder parameters (not used inside the library) */ /*@{*/ @@ -464,7 +458,7 @@ typedef struct opj_dparameters { /** Decoding area bottom boundary */ OPJ_UINT32 DA_y1; /** Verbose mode */ - opj_bool m_verbose; + OPJ_BOOL m_verbose; /** tile number ot the decoded tile*/ OPJ_UINT32 tile_index; @@ -473,11 +467,11 @@ typedef struct opj_dparameters { /*@}*/ -/* UniPG>> */ +/* UniPG>> */ /* NOT YET USED IN THE V2 VERSION OF OPENJPEG */ /**@name JPWL decoding parameters */ /*@{*/ /** activates the JPWL correction capabilities */ - opj_bool jpwl_correct; + OPJ_BOOL jpwl_correct; /** expected number of components */ int jpwl_exp_comps; /** maximum number of tiles */ @@ -485,63 +479,10 @@ typedef struct opj_dparameters { /*@}*/ /* < FIXME V1 style */ -/** Common fields between JPEG-2000 compression and decompression master structs. */ - -#define opj_common_fields \ - opj_event_mgr_t *event_mgr; /**< pointer to the event manager */\ - void * client_data; /**< Available for use by application */\ - opj_bool is_decompressor; /**< So common code can tell which is which */\ - OPJ_CODEC_FORMAT codec_format; /**< selected codec */\ - void *j2k_handle; /**< pointer to the J2K codec */\ - void *jp2_handle; /**< pointer to the JP2 codec */\ - void *mj2_handle /**< pointer to the MJ2 codec */ - -/* Routines that are to be used by both halves of the library are declared - * to receive a pointer to this structure. There are no actual instances of - * opj_common_struct_t, only of opj_cinfo_t and opj_dinfo_t. - */ -typedef struct opj_common_struct { - opj_common_fields; /* Fields common to both master struct types */ - /* Additional fields follow in an actual opj_cinfo_t or - * opj_dinfo_t. All three structs must agree on these - * initial fields! (This would be a lot cleaner in C++.) - */ -} opj_common_struct_t; -typedef opj_common_struct_t * opj_common_ptr; - -/** - * Compression context info - * */ -typedef struct opj_cinfo { - /** Fields shared with opj_dinfo_t */ - opj_common_fields; - /* other specific fields go here */ -} opj_cinfo_t; - -/** - * Decompression context info - * */ -typedef struct opj_dinfo { - /** Fields shared with opj_cinfo_t */ - opj_common_fields; - /* other specific fields go here */ -} opj_dinfo_t; +} opj_dparameters_t; -/* <--- V1 style */ /** * JPEG2000 codec V2. @@ -554,46 +495,38 @@ typedef void * opj_codec_t; ========================================================== */ -/* +/** * Stream open flags. - */ + * */ /** The stream was opened for reading. */ -#define OPJ_STREAM_READ 0x0001 +#define OPJ_STREAM_READ OPJ_TRUE /** The stream was opened for writing. */ -#define OPJ_STREAM_WRITE 0x0002 - -/** -Byte input-output stream (CIO) -DEPRECATED -*/ -typedef struct opj_cio { - /** codec context */ - opj_common_ptr cinfo; - - /** open mode (read/write) either OPJ_STREAM_READ or OPJ_STREAM_WRITE */ - int openmode; - /** pointer to the start of the buffer */ - unsigned char *buffer; - /** buffer size in bytes */ - /* FIXME: MM length is 'int' ?? */ - int length; - - /** pointer to the start of the stream */ - unsigned char *start; - /** pointer to the end of the stream */ - unsigned char *end; - /** pointer to the current position */ - unsigned char *bp; -} opj_cio_t; - +#define OPJ_STREAM_WRITE OPJ_FALSE /* - * FIXME DOC + * Callback function prototype for read function */ typedef OPJ_SIZE_T (* opj_stream_read_fn) (void * p_buffer, OPJ_SIZE_T p_nb_bytes, void * p_user_data) ; + +/* + * Callback function prototype for write function + */ typedef OPJ_SIZE_T (* opj_stream_write_fn) (void * p_buffer, OPJ_SIZE_T p_nb_bytes, void * p_user_data) ; + +/* + * Callback function prototype for skip function + */ typedef OPJ_OFF_T (* opj_stream_skip_fn) (OPJ_OFF_T p_nb_bytes, void * p_user_data) ; -typedef opj_bool (* opj_stream_seek_fn) (OPJ_OFF_T p_nb_bytes, void * p_user_data) ; + +/* + * Callback function prototype for seek function + */ +typedef OPJ_BOOL (* opj_stream_seek_fn) (OPJ_OFF_T p_nb_bytes, void * p_user_data) ; + +/* + * Callback function prototype for free user data function + */ +typedef void (* opj_stream_free_user_data_fn) (void * p_user_data) ; /* * JPEG2000 Stream. @@ -634,6 +567,8 @@ typedef struct opj_image_comp { OPJ_UINT32 factor; /** image component data */ OPJ_INT32 *data; + /** alpha channel */ + OPJ_UINT16 alpha; } opj_image_comp_t; /** @@ -691,6 +626,7 @@ typedef struct opj_image_comptparm { Information on the JPEG 2000 codestream ========================================================== */ +/* QUITE EXPERIMENTAL FOR THE MOMENT */ /** * Index structure : Information concerning a packet inside tile @@ -854,17 +790,17 @@ typedef struct opj_tccp_info /** quantisation style */ OPJ_UINT32 qntsty; /** stepsizes used for quantization */ - OPJ_UINT32 stepsizes_mant[J2K_MAXBANDS]; + OPJ_UINT32 stepsizes_mant[OPJ_J2K_MAXBANDS]; /** stepsizes used for quantization */ - OPJ_UINT32 stepsizes_expn[J2K_MAXBANDS]; + OPJ_UINT32 stepsizes_expn[OPJ_J2K_MAXBANDS]; /** number of guard bits */ OPJ_UINT32 numgbits; /** Region Of Interest shift */ OPJ_INT32 roishift; /** precinct width */ - OPJ_UINT32 prcw[J2K_MAXRLVLS]; + OPJ_UINT32 prcw[OPJ_J2K_MAXRLVLS]; /** precinct height */ - OPJ_UINT32 prch[J2K_MAXRLVLS]; + OPJ_UINT32 prch[OPJ_J2K_MAXRLVLS]; } opj_tccp_info_t; @@ -948,7 +884,7 @@ typedef struct opj_tile_index { /** information concerning tile parts */ opj_tp_index_t *tp_index; - /* UniPG>> */ + /* UniPG>> */ /* NOT USED FOR THE MOMENT IN THE V2 VERSION */ /** number of markers */ OPJ_UINT32 marknum; /** list of markers */ @@ -976,7 +912,7 @@ typedef struct opj_codestream_index { /** codestream's size */ OPJ_UINT64 codestream_size; -/* UniPG>> */ +/* UniPG>> */ /* NOT USED FOR THE MOMENT IN THE V2 VERSION */ /** number of markers */ OPJ_UINT32 marknum; /** list of markers */ @@ -1001,7 +937,7 @@ typedef struct opj_codestream_index { /** * Info structure of the JP2 file - * FIXME + * EXPERIMENTAL FOR THE MOMENT */ typedef struct opj_jp2_metadata { /** */ @@ -1011,7 +947,7 @@ typedef struct opj_jp2_metadata { /** * Index structure of the JP2 file - * FIXME + * EXPERIMENTAL FOR THE MOMENT */ typedef struct opj_jp2_index { /** */ @@ -1031,6 +967,7 @@ extern "C" { ========================================================== */ +/* Get the version of the openjpeg library*/ OPJ_API const char * OPJ_CALLCONV opj_version(void); /* @@ -1041,72 +978,37 @@ OPJ_API const char * OPJ_CALLCONV opj_version(void); /** * Create an image - * @param numcmpts number of components - * @param cmptparms components parameters - * @param clrspc image color space - * @return returns a new image structure if successful, returns NULL otherwise + * + * @param numcmpts number of components + * @param cmptparms components parameters + * @param clrspc image color space + * @return returns a new image structure if successful, returns NULL otherwise * */ OPJ_API opj_image_t* OPJ_CALLCONV opj_image_create(OPJ_UINT32 numcmpts, opj_image_cmptparm_t *cmptparms, OPJ_COLOR_SPACE clrspc); /** * Deallocate any resources associated with an image - * @param image image to be destroyed + * + * @param image image to be destroyed */ OPJ_API void OPJ_CALLCONV opj_image_destroy(opj_image_t *image); - /** * Creates an image without allocating memory for the image (used in the new version of the library). * - * @param numcmpts the number of components - * @param cmptparms the components parameters - * @param clrspc the image color space + * @param numcmpts the number of components + * @param cmptparms the components parameters + * @param clrspc the image color space * * @return a new image structure if successful, NULL otherwise. */ OPJ_API opj_image_t* OPJ_CALLCONV opj_image_tile_create(OPJ_UINT32 numcmpts, opj_image_cmptparm_t *cmptparms, OPJ_COLOR_SPACE clrspc); - /* ========================================================== stream functions definitions ========================================================== */ -/* CIO functions are DEPRECATED see following stream functions */ -/** -Open and allocate a memory stream for read / write. -On reading, the user must provide a buffer containing encoded data. The buffer will be -wrapped by the returned CIO handle. -On writing, buffer parameters must be set to 0: a buffer will be allocated by the library -to contain encoded data. -@param cinfo Codec context info -@param buffer Reading: buffer address. Writing: NULL -@param length Reading: buffer length. Writing: 0 -@return Returns a CIO handle if successful, returns NULL otherwise -*/ -OPJ_API opj_cio_t* OPJ_CALLCONV opj_cio_open(opj_common_ptr cinfo, unsigned char *buffer, int length); - -/** -Close and free a CIO handle -@param cio CIO handle to free -*/ -OPJ_API void OPJ_CALLCONV opj_cio_close(opj_cio_t *cio); - -/** -Get position in byte stream -@param cio CIO handle -@return Returns the position in bytes -*/ -OPJ_API OPJ_OFF_T OPJ_CALLCONV cio_tell(opj_cio_t *cio); -/** -Set position in byte stream -@param cio CIO handle -@param pos Position, in number of bytes, from the beginning of the stream -*/ -OPJ_API void OPJ_CALLCONV cio_seek(opj_cio_t *cio, int pos); - -/* <----------- */ -/* V2 framework */ /** * Creates an abstract stream. This function does nothing except allocating memory and initializing the abstract stream. @@ -1115,7 +1017,7 @@ OPJ_API void OPJ_CALLCONV cio_seek(opj_cio_t *cio, int pos); * * @return a stream object. */ -OPJ_API opj_stream_t* OPJ_CALLCONV opj_stream_default_create(opj_bool p_is_input); +OPJ_API opj_stream_t* OPJ_CALLCONV opj_stream_default_create(OPJ_BOOL p_is_input); /** * Creates an abstract stream. This function does nothing except allocating memory and initializing the abstract stream. @@ -1125,7 +1027,7 @@ OPJ_API opj_stream_t* OPJ_CALLCONV opj_stream_default_create(opj_bool p_is_input * * @return a stream object. */ -OPJ_API opj_stream_t* OPJ_CALLCONV opj_stream_create(OPJ_SIZE_T p_buffer_size, opj_bool p_is_input); +OPJ_API opj_stream_t* OPJ_CALLCONV opj_stream_create(OPJ_SIZE_T p_buffer_size, OPJ_BOOL p_is_input); /** * Destroys a stream created by opj_create_stream. This function does NOT close the abstract stream. If needed the user must @@ -1135,6 +1037,14 @@ OPJ_API opj_stream_t* OPJ_CALLCONV opj_stream_create(OPJ_SIZE_T p_buffer_size, o */ OPJ_API void OPJ_CALLCONV opj_stream_destroy(opj_stream_t* p_stream); +/** + * Destroys a stream created by opj_create_stream. This function does NOT close the abstract stream. + * If needed the user must close its own implementation of the stream. + * + * @param p_stream the stream to destroy. + */ +OPJ_API void OPJ_CALLCONV opj_stream_destroy_v3(opj_stream_t* p_stream); + /** * Sets the given function to be used as a read function. * @param p_stream the stream to modify @@ -1167,8 +1077,17 @@ OPJ_API void OPJ_CALLCONV opj_stream_set_seek_function(opj_stream_t* p_stream, o * Sets the given data to be used as a user data for the stream. * @param p_stream the stream to modify * @param p_data the data to set. + * @warning depending on your source object p_stream this function may leak, use opj_stream_set_user_data_v3 +*/ +OPJ_DEPRECATED(OPJ_API void OPJ_CALLCONV opj_stream_set_user_data (opj_stream_t* p_stream, void * p_data)); + +/** + * Sets the given data to be used as a user data for the stream. + * @param p_stream the stream to modify + * @param p_data the data to set. + * @param p_function the function to free p_data when opj_stream_destroy() is called. */ -OPJ_API void OPJ_CALLCONV opj_stream_set_user_data (opj_stream_t* p_stream, void * p_data); +OPJ_API void OPJ_CALLCONV opj_stream_set_user_data_v3 (opj_stream_t* p_stream, void * p_data, opj_stream_free_user_data_fn p_function); /** * Sets the length of the user data for the stream. @@ -1179,31 +1098,53 @@ OPJ_API void OPJ_CALLCONV opj_stream_set_user_data (opj_stream_t* p_stream, void OPJ_API void OPJ_CALLCONV opj_stream_set_user_data_length(opj_stream_t* p_stream, OPJ_UINT64 data_length); /** - * Helper function. - * Sets the stream to be a file stream. The FILE must have been open previously. - * @param p_file the file stream to operate on - * @param p_is_read_stream whether the stream is a read stream (true) or not (false) + * Create a stream from a file identified with its filename with default parameters (helper function) + * @param fname the filename of the file to stream + * @param p_is_read_stream whether the stream is a read stream (true) or not (false) */ -OPJ_API opj_stream_t* OPJ_CALLCONV opj_stream_create_default_file_stream (FILE * p_file, opj_bool p_is_read_stream); - -/** - * FIXME DOC - * @param p_file the file stream to operate on - * @param p_buffer_size FIXME DOC - * @param p_is_read_stream FIXME DOC +OPJ_API opj_stream_t* OPJ_CALLCONV opj_stream_create_default_file_stream_v3 (const char *fname, OPJ_BOOL p_is_read_stream); + +/** Create a stream from a file identified with its filename with a specific buffer size + * @param fname the filename of the file to stream + * @param p_buffer_size size of the chunk used to stream + * @param p_is_read_stream whether the stream is a read stream (true) or not (false) */ -OPJ_API opj_stream_t* OPJ_CALLCONV opj_stream_create_file_stream (FILE * p_file, OPJ_SIZE_T p_buffer_size, opj_bool p_is_read_stream); - -/* -----------> */ - +OPJ_API opj_stream_t* OPJ_CALLCONV opj_stream_create_file_stream_v3 (const char *fname, + OPJ_SIZE_T p_buffer_size, + OPJ_BOOL p_is_read_stream); + /* ========================================================== event manager functions definitions ========================================================== */ -OPJ_API opj_bool OPJ_CALLCONV opj_set_info_handler(opj_codec_t * p_codec, opj_msg_callback p_callback,void * p_user_data); -OPJ_API opj_bool OPJ_CALLCONV opj_set_warning_handler(opj_codec_t * p_codec, opj_msg_callback p_callback,void * p_user_data); -OPJ_API opj_bool OPJ_CALLCONV opj_set_error_handler(opj_codec_t * p_codec, opj_msg_callback p_callback,void * p_user_data); +/** + * Set the info handler use by openjpeg. + * @param p_codec the codec previously initialise + * @param p_callback the callback function which will be used + * @param p_user_data client object where will be returned the message +*/ +OPJ_API OPJ_BOOL OPJ_CALLCONV opj_set_info_handler(opj_codec_t * p_codec, + opj_msg_callback p_callback, + void * p_user_data); +/** + * Set the warning handler use by openjpeg. + * @param p_codec the codec previously initialise + * @param p_callback the callback function which will be used + * @param p_user_data client object where will be returned the message +*/ +OPJ_API OPJ_BOOL OPJ_CALLCONV opj_set_warning_handler(opj_codec_t * p_codec, + opj_msg_callback p_callback, + void * p_user_data); +/** + * Set the error handler use by openjpeg. + * @param p_codec the codec previously initialise + * @param p_callback the callback function which will be used + * @param p_user_data client object where will be returned the message +*/ +OPJ_API OPJ_BOOL OPJ_CALLCONV opj_set_error_handler(opj_codec_t * p_codec, + opj_msg_callback p_callback, + void * p_user_data); /* ========================================================== @@ -1231,7 +1172,7 @@ OPJ_API void OPJ_CALLCONV opj_destroy_codec(opj_codec_t * p_codec); * @param p_codec the JPEG2000 codec to read. * @param p_stream the JPEG2000 stream. */ -OPJ_API opj_bool OPJ_CALLCONV opj_end_decompress ( opj_codec_t *p_codec, +OPJ_API OPJ_BOOL OPJ_CALLCONV opj_end_decompress ( opj_codec_t *p_codec, opj_stream_t *p_stream); @@ -1250,7 +1191,7 @@ OPJ_API void OPJ_CALLCONV opj_set_default_decoder_parameters(opj_dparameters_t * * * @return true if the decoder is correctly set */ -OPJ_API opj_bool OPJ_CALLCONV opj_setup_decoder(opj_codec_t *p_codec, +OPJ_API OPJ_BOOL OPJ_CALLCONV opj_setup_decoder(opj_codec_t *p_codec, opj_dparameters_t *parameters ); /** @@ -1262,7 +1203,7 @@ OPJ_API opj_bool OPJ_CALLCONV opj_setup_decoder(opj_codec_t *p_codec, * * @return true if the main header of the codestream and the JP2 header is correctly read. */ -OPJ_API opj_bool OPJ_CALLCONV opj_read_header ( opj_stream_t *p_stream, +OPJ_API OPJ_BOOL OPJ_CALLCONV opj_read_header ( opj_stream_t *p_stream, opj_codec_t *p_codec, opj_image_t **p_image); @@ -1270,7 +1211,7 @@ OPJ_API opj_bool OPJ_CALLCONV opj_read_header ( opj_stream_t *p_stream, * Sets the given area to be decoded. This function should be called right after opj_read_header and before any tile header reading. * * @param p_codec the jpeg2000 codec. - * @param p_image FIXME DOC + * @param p_image the decoded image previously setted by opj_read_header * @param p_start_x the left position of the rectangle to decode (in image coordinates). * @param p_end_x the right position of the rectangle to decode (in image coordinates). * @param p_start_y the up position of the rectangle to decode (in image coordinates). @@ -1278,24 +1219,26 @@ OPJ_API opj_bool OPJ_CALLCONV opj_read_header ( opj_stream_t *p_stream, * * @return true if the area could be set. */ -OPJ_API opj_bool OPJ_CALLCONV opj_set_decode_area( opj_codec_t *p_codec, +OPJ_API OPJ_BOOL OPJ_CALLCONV opj_set_decode_area( opj_codec_t *p_codec, 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 ); /** * Decode an image from a JPEG-2000 codestream + * * @param p_decompressor decompressor handle * @param p_stream Input buffer stream * @param p_image the decoded image * @return true if success, otherwise false * */ -OPJ_API opj_bool OPJ_CALLCONV opj_decode( opj_codec_t *p_decompressor, +OPJ_API OPJ_BOOL OPJ_CALLCONV opj_decode( opj_codec_t *p_decompressor, opj_stream_t *p_stream, opj_image_t *p_image); /** * Get the decoded tile from the codec + * * @param p_codec the jpeg2000 codec. * @param p_stream input streamm * @param p_image output image @@ -1303,7 +1246,7 @@ OPJ_API opj_bool OPJ_CALLCONV opj_decode( opj_codec_t *p_decompressor, * * @return true if success, otherwise false */ -OPJ_API opj_bool OPJ_CALLCONV opj_get_decoded_tile( opj_codec_t *p_codec, +OPJ_API OPJ_BOOL OPJ_CALLCONV opj_get_decoded_tile( opj_codec_t *p_codec, opj_stream_t *p_stream, opj_image_t *p_image, OPJ_UINT32 tile_index); @@ -1315,20 +1258,21 @@ OPJ_API opj_bool OPJ_CALLCONV opj_get_decoded_tile( opj_codec_t *p_codec, * * @return true if success, otherwise false */ -OPJ_API opj_bool OPJ_CALLCONV opj_set_decoded_resolution_factor(opj_codec_t *p_codec, OPJ_UINT32 res_factor); +OPJ_API OPJ_BOOL OPJ_CALLCONV opj_set_decoded_resolution_factor(opj_codec_t *p_codec, OPJ_UINT32 res_factor); /** * Writes a tile with the given data. * - * @param p_codec the jpeg2000 codec. + * @param p_codec the jpeg2000 codec. * @param p_tile_index the index of the tile to write. At the moment, the tiles must be written from 0 to n-1 in sequence. * @param p_data pointer to the data to write. Data is arranged in sequence, data_comp0, then data_comp1, then ... NO INTERLEAVING should be set. - * @param p_data_size this value os used to make sure the data being written is correct. The size must be equal to the sum for each component of tile_width * tile_height * component_size. component_size can be 1,2 or 4 bytes, depending on the precision of the given component. + * @param p_data_size this value os used to make sure the data being written is correct. The size must be equal to the sum for each component of + * tile_width * tile_height * component_size. component_size can be 1,2 or 4 bytes, depending on the precision of the given component. * @param p_stream the stream to write data to. * * @return true if the data could be written. */ -OPJ_API opj_bool OPJ_CALLCONV opj_write_tile ( opj_codec_t *p_codec, +OPJ_API OPJ_BOOL OPJ_CALLCONV opj_write_tile ( opj_codec_t *p_codec, OPJ_UINT32 p_tile_index, OPJ_BYTE * p_data, OPJ_UINT32 p_data_size, @@ -1355,14 +1299,14 @@ OPJ_API opj_bool OPJ_CALLCONV opj_write_tile ( opj_codec_t *p_codec, * @return true if the tile header could be decoded. In case the decoding should end, the returned value is still true. * returning false may be the result of a shortage of memory or an internal error. */ -OPJ_API opj_bool OPJ_CALLCONV opj_read_tile_header( opj_codec_t *p_codec, +OPJ_API OPJ_BOOL OPJ_CALLCONV opj_read_tile_header( opj_codec_t *p_codec, opj_stream_t * p_stream, OPJ_UINT32 * p_tile_index, OPJ_UINT32 * p_data_size, OPJ_INT32 * p_tile_x0, OPJ_INT32 * p_tile_y0, OPJ_INT32 * p_tile_x1, OPJ_INT32 * p_tile_y1, OPJ_UINT32 * p_nb_comps, - opj_bool * p_should_go_on ); + OPJ_BOOL * p_should_go_on ); /** * Reads a tile data. This function is compulsory and allows one to decode tile data. opj_read_tile_header should be called before. @@ -1376,7 +1320,7 @@ OPJ_API opj_bool OPJ_CALLCONV opj_read_tile_header( opj_codec_t *p_codec, * * @return true if the data could be decoded. */ -OPJ_API opj_bool OPJ_CALLCONV opj_decode_tile_data( opj_codec_t *p_codec, +OPJ_API OPJ_BOOL OPJ_CALLCONV opj_decode_tile_data( opj_codec_t *p_codec, OPJ_UINT32 p_tile_index, OPJ_BYTE * p_data, OPJ_UINT32 p_data_size, @@ -1420,19 +1364,26 @@ OPJ_API void OPJ_CALLCONV opj_set_default_encoder_parameters(opj_cparameters_t * * @param parameters Compression parameters * @param image Input filled image */ -OPJ_API opj_bool OPJ_CALLCONV opj_setup_encoder(opj_codec_t *p_codec, +OPJ_API OPJ_BOOL OPJ_CALLCONV opj_setup_encoder(opj_codec_t *p_codec, opj_cparameters_t *parameters, opj_image_t *image); /** + * Start to compress the current image. + * @param p_codec Compressor handle + * @param image Input filled image + * @param p_stream Input stgream */ -OPJ_API opj_bool OPJ_CALLCONV opj_start_compress ( opj_codec_t *p_codec, +OPJ_API OPJ_BOOL OPJ_CALLCONV opj_start_compress ( opj_codec_t *p_codec, opj_image_t * p_image, - opj_stream_t *p_cio); + opj_stream_t *p_stream); /** + * End to compress the current image. + * @param p_codec Compressor handle + * @param p_stream Input stgream */ -OPJ_API opj_bool OPJ_CALLCONV opj_end_compress (opj_codec_t *p_codec, +OPJ_API OPJ_BOOL OPJ_CALLCONV opj_end_compress (opj_codec_t *p_codec, opj_stream_t *p_stream); /** @@ -1442,9 +1393,14 @@ OPJ_API opj_bool OPJ_CALLCONV opj_end_compress (opj_codec_t *p_codec, * * @return Returns true if successful, returns false otherwise */ -OPJ_API opj_bool OPJ_CALLCONV opj_encode(opj_codec_t *p_codec, +OPJ_API OPJ_BOOL OPJ_CALLCONV opj_encode(opj_codec_t *p_codec, opj_stream_t *p_stream); - +/* +========================================================== + codec output functions definitions +========================================================== +*/ +/* EXPERIMENTAL FUNCTIONS FOR NOW, USED ONLY IN J2K_DUMP*/ /** Destroy Codestream information after compression or decompression @@ -1453,13 +1409,6 @@ Destroy Codestream information after compression or decompression OPJ_API void OPJ_CALLCONV opj_destroy_cstr_info(opj_codestream_info_v2_t **cstr_info); - -/* -========================================================== - codec output functions definitions -========================================================== -*/ - /** * Dump the codec information into the output stream * @@ -1518,7 +1467,7 @@ OPJ_API opj_jp2_index_t* OPJ_CALLCONV opj_get_jp2_index(opj_codec_t *p_codec); /* ========================================================== - new functions + MCT functions ========================================================== */ @@ -1532,7 +1481,7 @@ OPJ_API opj_jp2_index_t* OPJ_CALLCONV opj_get_jp2_index(opj_codec_t *p_codec); * * @return true if the parameters could be set. */ -OPJ_API opj_bool OPJ_CALLCONV opj_set_MCT( opj_cparameters_t *parameters, +OPJ_API OPJ_BOOL OPJ_CALLCONV opj_set_MCT( opj_cparameters_t *parameters, OPJ_FLOAT32 * pEncodingMatrix, OPJ_INT32 * p_dc_shift, OPJ_UINT32 pNbComp);