typedef char OPJ_CHAR;
typedef float OPJ_FLOAT32;
typedef double OPJ_FLOAT64;
-typedef unsigned char OPJ_BYTE;
-typedef size_t OPJ_SIZE_T;
+typedef unsigned char OPJ_BYTE;
+
+#include "opj_stdint.h"
-#include "opj_config.h"
-#ifdef HAVE_STDINT_H
-#include <stdint.h>
typedef int8_t OPJ_INT8;
typedef uint8_t OPJ_UINT8;
typedef int16_t OPJ_INT16;
typedef uint32_t OPJ_UINT32;
typedef int64_t OPJ_INT64;
typedef uint64_t OPJ_UINT64;
-#define OPJ_INT64_F "ll"
-#define OPJ_UINT64_F "ll"
-#else
-#if defined(_WIN32)
-typedef signed __int8 OPJ_INT8;
-typedef unsigned __int8 OPJ_UINT8;
-typedef signed __int16 OPJ_INT16;
-typedef unsigned __int16 OPJ_UINT16;
-typedef signed __int32 OPJ_INT32;
-typedef unsigned __int32 OPJ_UINT32;
-typedef signed __int64 OPJ_INT64;
-typedef unsigned __int64 OPJ_UINT64;
-#define OPJ_INT64_F "I64"
-#define OPJ_UINT64_F "I64"
-#else
-#error unsupported platform
-#endif
-#endif
-
-/* 64-bit file offset type */
-typedef OPJ_INT64 OPJ_OFF_T;
-#define OPJ_OFF_F OPJ_INT64_F
/* Avoid compile-time warning because parameter is not used */
#define OPJ_ARG_NOT_USED(x) (void)(x)
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*/
+ CINEMA4K = 4, /** Profile name for a 4K image*/
+ MCT = 0x8100
} OPJ_RSIZ_CAPABILITIES;
/**
* */
typedef void (*opj_msg_callback) (const char *msg, void *client_data);
-/**
- * Message handler object used for
- * <ul>
- * <li>Error messages
- * <li>Warning messages
- * <li>Debugging messages
- * </ul>
- * */
-typedef struct opj_event_mgr {
- /** FIXME DOC */
- void* client_data;
+
+
+/** SHOULD BE MOVE IN EVET.H when we remove old functions
+Message handler object
+used for
+<ul>
+<li>Error messages
+<li>Warning messages
+<li>Debugging messages
+</ul>
+*/
+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 info_handler;
} opj_event_mgr_t;
-
/*
==========================================================
codec typedef definitions
/**
* Progression order changes
- * */
+ *
+ */
typedef struct opj_poc {
/** Resolution num start, Component num start, given by POC */
OPJ_UINT32 resno0, compno0;
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. */
+ void * mct_data;
+
} opj_cparameters_t;
#define OPJ_DPARAMETERS_IGNORE_PCLR_CMAP_CDEF_FLAG 0x0001
/**
Byte input-output stream (CIO)
+DEPRECATED
*/
typedef struct opj_cio {
/** codec context */
/** 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 *end;
/** pointer to the current position */
unsigned char *bp;
-} opj_cio_t;
+} opj_cio_t;
/*
/** 'restricted' ICC profile */
OPJ_BYTE *icc_profile_buf;
/** size of ICC profile */
- OPJ_INT32 icc_profile_len;
+ OPJ_UINT32 icc_profile_len;
} opj_image_t;
* */
typedef struct opj_image_comptparm {
/** XRsiz: horizontal separation of a sample of ith component with respect to the reference grid */
- int dx;
+ OPJ_UINT32 dx;
/** YRsiz: vertical separation of a sample of ith component with respect to the reference grid */
- int dy;
+ OPJ_UINT32 dy;
/** data width */
- int w;
+ OPJ_UINT32 w;
/** data height */
- int h;
+ OPJ_UINT32 h;
/** x component offset compared to the whole image */
- int x0;
+ OPJ_UINT32 x0;
/** y component offset compared to the whole image */
- int y0;
+ OPJ_UINT32 y0;
/** precision */
- int prec;
+ OPJ_UINT32 prec;
/** image depth in bits */
- int bpp;
+ OPJ_UINT32 bpp;
/** signed (1) / unsigned (0) */
- int sgnd;
+ OPJ_UINT32 sgnd;
} opj_image_cmptparm_t;
/**
* Index structure of the codestream (FIXME should be expand and enhance)
*/
-typedef struct opj_codestream_index_ {
+typedef struct opj_codestream_index {
/** main header start position (SOC position) */
OPJ_OFF_T main_head_start;
/** main header end position (first SOT position) */
* @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(int numcmpts, opj_image_cmptparm_t *cmptparms, OPJ_COLOR_SPACE clrspc);
+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
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 p_num_cmpts the number of components
+ * @param p_cmpt_parms the components parameters
+ * @param p_clr_spc 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
@param cio CIO handle
@return Returns the position in bytes
*/
-OPJ_API int OPJ_CALLCONV cio_tell(opj_cio_t *cio);
+OPJ_API OPJ_OFF_T OPJ_CALLCONV cio_tell(opj_cio_t *cio);
/**
Set position in byte stream
@param cio CIO handle
*/
OPJ_API void OPJ_CALLCONV opj_stream_set_seek_function(opj_stream_t* p_stream, opj_stream_seek_fn p_function);
-
/**
* Sets the given data to be used as a user data for the stream.
* @param p_stream the stream to modify
*/
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.
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);
/**
*/
DEPRECATED( OPJ_API opj_event_mgr_t* OPJ_CALLCONV opj_set_event_mgr(opj_common_ptr cinfo, opj_event_mgr_t *event_mgr, void *context));
-/**
- * Initialize a default event handler. This function set the output of message event to be stderr for warning and error output
- * and stdout for info output in the verbose mode. In the case of the non-verbose mode only the error message are displayed.
- * You can initialize your own event handler struct when you fill the field of the event structure. If you provide a null
- * structure to the opj_setup_decoder function, no output will be displayed.
- *
- * @param p_manager a opj_event_mgr structure which will be pass to the codec.
- *
- */
-OPJ_API void OPJ_CALLCONV opj_initialize_default_event_handler(opj_event_mgr_t * p_manager, opj_bool verbose);
-
-
/*
==========================================================
codec functions definitions
*/
DEPRECATED( OPJ_API void OPJ_CALLCONV opj_destroy_decompress(opj_dinfo_t *dinfo) );
+/**
+ * Destroy a decompressor handle
+ *
+ * @param p_codec decompressor handle to destroy
+ */
+OPJ_API void OPJ_CALLCONV opj_destroy_codec(opj_codec_t * p_codec);
+
/**
* Read after the codestream if necessary
+ * @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_stream_t *p_cio);
+ opj_stream_t *p_stream);
/**
-Set decoding parameters to default values
-@param parameters Decompression parameters
-*/
+ * Set decoding parameters to default values
+ * @param parameters Decompression parameters
+ */
OPJ_API void OPJ_CALLCONV opj_set_default_decoder_parameters(opj_dparameters_t *parameters);
/**
* Setup the decoder with decompression parameters provided by the user and with the message handler
* provided by the user.
*
- * @param dinfo decompressor handlers
+ * @param p_codec decompressor handler
* @param parameters decompression parameters
- * @param event_mgr message handler
*
* @return true if the decoder is correctly set
*/
-OPJ_API opj_bool OPJ_CALLCONV opj_setup_decoder_v2( opj_codec_t *p_info,
- opj_dparameters_t *parameters,
- opj_event_mgr_t* event_mgr);
+OPJ_API opj_bool OPJ_CALLCONV opj_setup_decoder_v2( opj_codec_t *p_codec,
+ opj_dparameters_t *parameters );
/**
* Decodes an image header.
*
- * @param p_cio the jpeg2000 stream.
+ * @param p_stream the jpeg2000 stream.
* @param p_codec the jpeg2000 codec to read.
* @param p_image the image structure initialized with the characteristics of encoded image.
*
* @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_cio,
+OPJ_API opj_bool OPJ_CALLCONV opj_read_header ( opj_stream_t *p_stream,
opj_codec_t *p_codec,
opj_image_t **p_image);
/**
* Decode an image from a JPEG-2000 codestream
- * @param p_decompressor decompressor handle
- * @param cio Input buffer stream
- * @param p_image the decoded image
- * @return Returns a true on success, otherwise false
+ * @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_v2(opj_codec_t *p_decompressor,
- opj_stream_t * cio,
+ 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_cio input streamm
+ * @param p_stream input streamm
* @param p_image output image
* @param tile_index index of the tile which will be decode
*
- * @return opj_true if all is ok.
+ * @return true if success, otherwise false
*/
OPJ_API opj_bool OPJ_CALLCONV opj_get_decoded_tile( opj_codec_t *p_codec,
- opj_stream_t *p_cio,
+ opj_stream_t *p_stream,
opj_image_t *p_image,
OPJ_UINT32 tile_index);
-
/**
* Set the resolution factor of the decoded image
* @param p_codec the jpeg2000 codec.
* @param res_factor resolution factor to set
*
- * @return opj_true if all is ok.
+ * @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);
-
+/**
+ * Writes a tile with the given data.
+ *
+ * @param p_compressor 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_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_UINT32 p_tile_index,
+ OPJ_BYTE * p_data,
+ OPJ_UINT32 p_data_size,
+ opj_stream_t *p_stream );
/**
* Reads a tile header. This function is compulsory and allows one to know the size of the tile thta will be decoded.
OPJ_UINT32 * p_nb_comps,
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.
* The user may need to refer to the image got by opj_read_header to understand the size being taken by the tile.
OPJ_UINT32 p_data_size,
opj_stream_t *p_stream );
-
/**
Decode an image from a JPEG-2000 codestream and extract the codestream information
@param dinfo decompressor handle
@param format Coder to select
@return Returns a handle to a compressor if successful, returns NULL otherwise
*/
-OPJ_API opj_cinfo_t* OPJ_CALLCONV opj_create_compress(OPJ_CODEC_FORMAT format);
+DEPRECATED( OPJ_API opj_cinfo_t* OPJ_CALLCONV opj_create_compress(OPJ_CODEC_FORMAT format));
+
+/**
+ * Creates a J2K/JP2 compression structure
+ * @param format Coder to select
+ * @return Returns a handle to a compressor if successful, returns NULL otherwise
+ */
+OPJ_API opj_codec_t* OPJ_CALLCONV opj_create_compress_v2(OPJ_CODEC_FORMAT format);
+
/**
Destroy a compressor handle
@param cinfo compressor handle to destroy
*/
-OPJ_API void OPJ_CALLCONV opj_destroy_compress(opj_cinfo_t *cinfo);
+DEPRECATED(OPJ_API void OPJ_CALLCONV opj_destroy_compress(opj_cinfo_t *cinfo) );
+
/**
Set encoding parameters to default values, that means :
<ul>
@param parameters Compression parameters
*/
OPJ_API void OPJ_CALLCONV opj_set_default_encoder_parameters(opj_cparameters_t *parameters);
+
/**
Setup the encoder parameters using the current image and using user parameters.
@param cinfo Compressor handle
@param parameters Compression parameters
@param image Input filled image
*/
-OPJ_API void OPJ_CALLCONV opj_setup_encoder(opj_cinfo_t *cinfo, opj_cparameters_t *parameters, opj_image_t *image);
+DEPRECATED(OPJ_API void OPJ_CALLCONV opj_setup_encoder(opj_cinfo_t *cinfo, opj_cparameters_t *parameters, opj_image_t *image) );
+
+/**
+ * Setup the encoder parameters using the current image and using user parameters.
+ * @param p_codec Compressor handle
+ * @param parameters Compression parameters
+ * @param image Input filled image
+ */
+OPJ_API opj_bool OPJ_CALLCONV opj_setup_encoder_v2( opj_codec_t *p_codec,
+ opj_cparameters_t *parameters,
+ opj_image_t *image);
+
+/**
+ */
+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_API opj_bool OPJ_CALLCONV opj_end_compress (opj_codec_t *p_codec,
+ opj_stream_t *p_stream);
+
+/**
+ * Encode an image into a JPEG-2000 codestream
+ * @param p_codec compressor handle
+ * @param p_stream Output buffer stream
+ * @param image Image to encode
+ *
+ * @return Returns true if successful, returns false otherwise
+ */
+OPJ_API opj_bool OPJ_CALLCONV opj_encode_v2(opj_codec_t *p_codec,
+ opj_stream_t *p_stream);
+
/**
Encode an image into a JPEG-2000 codestream
3@param cinfo compressor handle
@param index Depreacted -> Set to NULL. To extract index, used opj_encode_wci()
@return Returns true if successful, returns false otherwise
*/
-OPJ_API opj_bool OPJ_CALLCONV opj_encode(opj_cinfo_t *cinfo, opj_cio_t *cio, opj_image_t *image, char *index);
+DEPRECATED( OPJ_API opj_bool OPJ_CALLCONV opj_encode(opj_cinfo_t *cinfo, opj_cio_t *cio, opj_image_t *image, char *index) );
/**
Encode an image into a JPEG-2000 codestream and extract the codestream information
@param cinfo compressor handle
@param cstr_info Codestream information structure if needed afterwards, NULL otherwise
@return Returns true if successful, returns false otherwise
*/
-OPJ_API opj_bool OPJ_CALLCONV opj_encode_with_info(opj_cinfo_t *cinfo, opj_cio_t *cio, opj_image_t *image, opj_codestream_info_t *cstr_info);
-
-
+DEPRECATED( OPJ_API opj_bool OPJ_CALLCONV opj_encode_with_info(opj_cinfo_t *cinfo, opj_cio_t *cio, opj_image_t *image, opj_codestream_info_t *cstr_info) );
/**
-/**
- * Destroy a decompressor handle
- *
- * @param p_codec decompressor handle to destroy
- */
-OPJ_API void OPJ_CALLCONV opj_destroy_codec(opj_codec_t * p_codec);
-
-
-
-
/*
==========================================================
codec output functions definitions
OPJ_API opj_jp2_index_t* OPJ_CALLCONV opj_get_jp2_index(opj_codec_t *p_codec);
+/*
+==========================================================
+ new functions
+==========================================================
+*/
+
+/**
+ * Sets the MCT matrix to use.
+ *
+ * @param parameters the parameters to change.
+ * @param pEncodingMatrix the encoding matrix.
+ * @param p_dc_shift the dc shift coefficients to use.
+ * @param pNbComp the number of components of the image.
+ *
+ * @return true if the parameters could be set.
+ */
+OPJ_API opj_bool OPJ_CALLCONV opj_set_MCT( opj_cparameters_t *parameters,
+ OPJ_FLOAT32 * pEncodingMatrix,
+ OPJ_INT32 * p_dc_shift,
+ OPJ_UINT32 pNbComp);
#endif
#endif /* OPENJPEG_H */
-
-