X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fopenjp2%2Fopenjpeg.h;h=988db720092c63f71de29213d5e1462708620a8f;hb=7aece5e8e7d4214d140a45aca50a824ff8092924;hp=3b542f97c1bc9392b22b8e0cc6ac54032ce85a0a;hpb=1c8a657044e2a9ad05b4b915e78eac624d2f55ca;p=openjpeg.git diff --git a/src/lib/openjp2/openjpeg.h b/src/lib/openjp2/openjpeg.h index 3b542f97..988db720 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,87 +160,140 @@ typedef uint64_t OPJ_UINT64; /* <= OPJ_PROFILE_CINEMA_2K)&&((v) <= OPJ_PROFILE_CINEMA_S4K)) +#define OPJ_IS_STORAGE(v) ((v) == OPJ_PROFILE_CINEMA_LTS) +#define OPJ_IS_BROADCAST(v) (((v) >= OPJ_PROFILE_BC_SINGLE)&&((v) <= ((OPJ_PROFILE_BC_MULTI_R) | (0x000b)))) +#define OPJ_IS_IMF(v) (((v) >= OPJ_PROFILE_IMF_2K)&&((v) <= ((OPJ_PROFILE_IMF_8K_R) | (0x009b)))) +#define OPJ_IS_PART2(v) ((v) & OPJ_PROFILE_PART2) + +/** + * JPEG 2000 codestream and component size limits in cinema profiles + * */ +#define OPJ_CINEMA_24_CS 1302083 /** Maximum codestream length for 24fps */ +#define OPJ_CINEMA_48_CS 651041 /** Maximum codestream length for 48fps */ +#define OPJ_CINEMA_24_COMP 1041666 /** Maximum size per color component for 2K & 4K @ 24fps */ +#define OPJ_CINEMA_48_COMP 520833 /** Maximum size per color component for 2K @ 48fps */ /* ========================================================== enum definitions ========================================================== */ -/** + +/** + * DEPRECATED: use RSIZ, OPJ_PROFILE_* and OPJ_EXTENSION_* instead * Rsiz Capabilities * */ typedef enum RSIZ_CAPABILITIES { - STD_RSIZ = 0, /** Standard JPEG2000 profile*/ - CINEMA2K = 3, /** Profile name for a 2K image*/ - CINEMA4K = 4, /** Profile name for a 4K image*/ - MCT = 0x8100 + OPJ_STD_RSIZ = 0, /** Standard JPEG2000 profile*/ + OPJ_CINEMA2K = 3, /** Profile name for a 2K image*/ + OPJ_CINEMA4K = 4, /** Profile name for a 4K image*/ + OPJ_MCT = 0x8100 } OPJ_RSIZ_CAPABILITIES; -/** +/** + * DEPRECATED: use RSIZ, OPJ_PROFILE_* and OPJ_EXTENSION_* instead * Digital cinema operation mode * */ typedef enum CINEMA_MODE { - OFF = 0, /** Not Digital Cinema*/ - CINEMA2K_24 = 1, /** 2K Digital Cinema at 24 fps*/ - CINEMA2K_48 = 2, /** 2K Digital Cinema at 48 fps*/ - CINEMA4K_24 = 3 /** 4K Digital Cinema at 24 fps*/ + OPJ_OFF = 0, /** Not Digital Cinema*/ + OPJ_CINEMA2K_24 = 1, /** 2K Digital Cinema at 24 fps*/ + OPJ_CINEMA2K_48 = 2, /** 2K Digital Cinema at 48 fps*/ + OPJ_CINEMA4K_24 = 3 /** 4K Digital Cinema at 24 fps*/ }OPJ_CINEMA_MODE; /** * Progression order * */ typedef enum PROG_ORDER { - PROG_UNKNOWN = -1, /**< place-holder */ - LRCP = 0, /**< layer-resolution-component-precinct order */ - RLCP = 1, /**< resolution-layer-component-precinct order */ - RPCL = 2, /**< resolution-precinct-component-layer order */ - PCRL = 3, /**< precinct-component-resolution-layer order */ - CPRL = 4 /**< component-precinct-resolution-layer order */ + OPJ_PROG_UNKNOWN = -1, /**< place-holder */ + OPJ_LRCP = 0, /**< layer-resolution-component-precinct order */ + OPJ_RLCP = 1, /**< resolution-layer-component-precinct order */ + OPJ_RPCL = 2, /**< resolution-precinct-component-layer order */ + OPJ_PCRL = 3, /**< precinct-component-resolution-layer order */ + OPJ_CPRL = 4 /**< component-precinct-resolution-layer order */ } OPJ_PROG_ORDER; /** * Supported image color spaces */ typedef enum COLOR_SPACE { - CLRSPC_UNKNOWN = -1, /**< not supported by the library */ - CLRSPC_UNSPECIFIED = 0, /**< not specified in the codestream */ - CLRSPC_SRGB = 1, /**< sRGB */ - CLRSPC_GRAY = 2, /**< grayscale */ - CLRSPC_SYCC = 3 /**< YUV */ + OPJ_CLRSPC_UNKNOWN = -1, /**< not supported by the library */ + OPJ_CLRSPC_UNSPECIFIED = 0, /**< not specified in the codestream */ + OPJ_CLRSPC_SRGB = 1, /**< sRGB */ + OPJ_CLRSPC_GRAY = 2, /**< grayscale */ + OPJ_CLRSPC_SYCC = 3, /**< YUV */ + OPJ_CLRSPC_EYCC = 4, /**< e-YCC */ + OPJ_CLRSPC_CMYK = 5 /**< CMYK */ } OPJ_COLOR_SPACE; /** * Supported codec */ typedef enum CODEC_FORMAT { - CODEC_UNKNOWN = -1, /**< place-holder */ - CODEC_J2K = 0, /**< JPEG-2000 codestream : read/write */ - CODEC_JPT = 1, /**< JPT-stream (JPEG 2000, JPIP) : read only */ - CODEC_JP2 = 2 /**< JPEG-2000 file format : read/write */ + OPJ_CODEC_UNKNOWN = -1, /**< place-holder */ + OPJ_CODEC_J2K = 0, /**< JPEG-2000 codestream : read/write */ + OPJ_CODEC_JPT = 1, /**< JPT-stream (JPEG 2000, JPIP) : read only */ + OPJ_CODEC_JP2 = 2, /**< JP2 file format : read/write */ + OPJ_CODEC_JPP = 3, /**< JPP-stream (JPEG 2000, JPIP) : to be coded */ + OPJ_CODEC_JPX = 4 /**< JPX file format (JPEG 2000 Part-2) : to be coded */ } OPJ_CODEC_FORMAT; -/** - * Limit decoding to certain portions of the codestream. -*/ -typedef enum LIMIT_DECODING { - NO_LIMITATION = 0, /**< No limitation for the decoding. The entire codestream will de decoded */ - LIMIT_TO_MAIN_HEADER = 1, /**< The decoding is limited to the Main Header */ - DECODE_ALL_BUT_PACKETS = 2 /**< Decode everything except the JPEG 2000 packets */ -} OPJ_LIMIT_DECODING; - /* ========================================================== @@ -221,38 +303,11 @@ typedef enum LIMIT_DECODING { /** * Callback function prototype for events - * @param msg Event message - * @param client_data + * @param msg Event message + * @param client_data Client object where will be return the event message * */ typedef void (*opj_msg_callback) (const char *msg, void *client_data); - - -/** SHOULD BE MOVE IN EVET.H when we remove old functions TODO MSD -Message handler object -used for -
    -
  • 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 +348,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,15 +369,15 @@ 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 */ + /** rates of layers - might be subsequently limited by the max_cs_size field */ float tcp_rates[100]; /** different psnr for successive layers */ float tcp_distoratio[100]; @@ -343,9 +398,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 +426,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) */ @@ -403,22 +458,43 @@ typedef struct opj_cparameters { /*@}*/ /* <> */ +/* 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 */ @@ -483,63 +559,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. @@ -552,24 +575,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 - - - +#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. @@ -610,6 +647,8 @@ typedef struct opj_image_comp { OPJ_UINT32 factor; /** image component data */ OPJ_INT32 *data; + /** alpha channel */ + OPJ_UINT16 alpha; } opj_image_comp_t; /** @@ -667,6 +706,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 @@ -830,17 +870,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; @@ -924,7 +964,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 */ @@ -952,7 +992,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 */ @@ -977,7 +1017,7 @@ typedef struct opj_codestream_index { /** * Info structure of the JP2 file - * FIXME + * EXPERIMENTAL FOR THE MOMENT */ typedef struct opj_jp2_metadata { /** */ @@ -987,7 +1027,7 @@ typedef struct opj_jp2_metadata { /** * Index structure of the JP2 file - * FIXME + * EXPERIMENTAL FOR THE MOMENT */ typedef struct opj_jp2_index { /** */ @@ -1007,6 +1047,7 @@ extern "C" { ========================================================== */ +/* Get the version of the openjpeg library*/ OPJ_API const char * OPJ_CALLCONV opj_version(void); /* @@ -1017,32 +1058,32 @@ 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 @@ -1056,7 +1097,7 @@ OPJ_API opj_image_t* OPJ_CALLCONV opj_image_tile_create(OPJ_UINT32 numcmpts, opj * * @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. @@ -1066,7 +1107,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 @@ -1075,7 +1116,7 @@ OPJ_API opj_stream_t* OPJ_CALLCONV opj_stream_create(OPJ_SIZE_T p_buffer_size, o * @param p_stream the stream to destroy. */ OPJ_API void OPJ_CALLCONV opj_stream_destroy(opj_stream_t* p_stream); - + /** * Sets the given function to be used as a read function. * @param p_stream the stream to modify @@ -1108,8 +1149,9 @@ 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. + * @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 (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. @@ -1120,23 +1162,21 @@ 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 (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 (const char *fname, + OPJ_SIZE_T p_buffer_size, + OPJ_BOOL p_is_read_stream); + /* ========================================================== event manager functions definitions @@ -1146,27 +1186,27 @@ OPJ_API opj_stream_t* OPJ_CALLCONV opj_stream_create_file_stream (FILE * p_file, * 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 FIXME DOC + * @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_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 FIXME DOC + * @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_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 FIXME DOC + * @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_API OPJ_BOOL OPJ_CALLCONV opj_set_error_handler(opj_codec_t * p_codec, opj_msg_callback p_callback, void * p_user_data); @@ -1196,7 +1236,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); @@ -1215,7 +1255,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 ); /** @@ -1227,7 +1267,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); @@ -1235,7 +1275,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). @@ -1243,24 +1283,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 @@ -1268,7 +1310,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); @@ -1280,20 +1322,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, @@ -1320,14 +1363,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. @@ -1341,7 +1384,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, @@ -1385,19 +1428,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); /** @@ -1407,9 +1457,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 @@ -1418,13 +1473,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 * @@ -1483,7 +1531,7 @@ OPJ_API opj_jp2_index_t* OPJ_CALLCONV opj_get_jp2_index(opj_codec_t *p_codec); /* ========================================================== - new functions + MCT functions ========================================================== */ @@ -1497,7 +1545,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);