diff options
Diffstat (limited to 'extern/libopenjpeg/j2k.h')
-rw-r--r-- | extern/libopenjpeg/j2k.h | 804 |
1 files changed, 600 insertions, 204 deletions
diff --git a/extern/libopenjpeg/j2k.h b/extern/libopenjpeg/j2k.h index 6338c290dfd..d0f59d727d7 100644 --- a/extern/libopenjpeg/j2k.h +++ b/extern/libopenjpeg/j2k.h @@ -1,11 +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 <jerome.fimes@c-s.fr> + * 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 @@ -55,6 +65,8 @@ The functions in J2K.C have for goal to read/write the several parts of the code #define J2K_CCP_QNTSTY_SIQNT 1 #define J2K_CCP_QNTSTY_SEQNT 2 +#define OPJ_J2K_DEFAULT_CBLK_DATA_SIZE 8192 + /* ----------------------------------------------------------------------- */ #define J2K_MS_SOC 0xff4f /**< SOC marker value */ @@ -77,6 +89,13 @@ 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_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 */ + +#define J2K_MS_UNK 0 /**< UNKNOWN marker value */ + /* UniPG>> */ #ifdef USE_JPWL #define J2K_MS_EPC 0xff68 /**< EPC marker value (Part 11: JPEG 2000 for Wireless) */ @@ -90,14 +109,14 @@ The functions in J2K.C have for goal to read/write the several parts of the code #endif /* USE_JPSEC */ /* <<UniPG */ - /* ----------------------------------------------------------------------- */ /** -Values that specify the status of the decoding process when decoding the main header. -These values may be combined with a | operator. -*/ + * Values that specify the status of the decoding process when decoding the main header. + * These values may be combined with a | operator. + * */ typedef enum J2K_STATUS { + J2K_STATE_NONE = 0x0000, /**< a SOC marker is expected */ J2K_STATE_MHSOC = 0x0001, /**< a SOC marker is expected */ J2K_STATE_MHSIZ = 0x0002, /**< a SIZ marker is expected */ J2K_STATE_MH = 0x0004, /**< the decoding process is in the main header */ @@ -105,9 +124,32 @@ typedef enum J2K_STATUS { J2K_STATE_TPH = 0x0010, /**< the decoding process is in a tile part header */ J2K_STATE_MT = 0x0020, /**< the EOC marker has just been read */ J2K_STATE_NEOC = 0x0040, /**< the decoding process must not expect a EOC marker because the codestream is truncated */ - J2K_STATE_ERR = 0x0080 /**< the decoding process has encountered an error */ + + J2K_STATE_EOC = 0x0100, /**< the decoding process has encountered the EOC marker */ + J2K_STATE_ERR = 0x8000 /**< the decoding process has encountered an error (FIXME warning V1 = 0x0080)*/ } J2K_STATUS; +/** + * Type of elements storing in the MCT data + */ +typedef enum MCT_ELEMENT_TYPE +{ + MCT_TYPE_INT16 = 0, /** MCT data is stored as signed shorts*/ + MCT_TYPE_INT32 = 1, /** MCT data is stored as signed integers*/ + MCT_TYPE_FLOAT = 2, /** MCT data is stored as floats*/ + MCT_TYPE_DOUBLE = 3 /** MCT data is stored as doubles*/ +} J2K_MCT_ELEMENT_TYPE; + +/** + * Type of MCT array + */ +typedef enum MCT_ARRAY_TYPE +{ + MCT_TYPE_DEPENDENCY = 0, + MCT_TYPE_DECORRELATION = 1, + MCT_TYPE_OFFSET = 2 +} J2K_MCT_ARRAY_TYPE; + /* ----------------------------------------------------------------------- */ /** @@ -119,161 +161,245 @@ typedef enum T2_MODE { }J2K_T2_MODE; /** -Quantization stepsize -*/ + * Quantization stepsize + */ typedef struct opj_stepsize { /** exponent */ - int expn; + OPJ_INT32 expn; /** mantissa */ - int mant; + OPJ_INT32 mant; } opj_stepsize_t; /** Tile-component coding parameters */ -typedef struct opj_tccp { +typedef struct opj_tccp +{ /** coding style */ - int csty; + OPJ_UINT32 csty; /** number of resolutions */ - int numresolutions; + OPJ_UINT32 numresolutions; /** code-blocks width */ - int cblkw; + OPJ_UINT32 cblkw; /** code-blocks height */ - int cblkh; + OPJ_UINT32 cblkh; /** code-block coding style */ - int cblksty; + OPJ_UINT32 cblksty; /** discrete wavelet transform identifier */ - int qmfbid; + OPJ_UINT32 qmfbid; /** quantisation style */ - int qntsty; + OPJ_UINT32 qntsty; /** stepsizes used for quantization */ - opj_stepsize_t stepsizes[J2K_MAXBANDS]; + opj_stepsize_t stepsizes[OPJ_J2K_MAXBANDS]; /** number of guard bits */ - int numgbits; + OPJ_UINT32 numgbits; /** Region Of Interest shift */ - int roishift; + OPJ_INT32 roishift; /** precinct width */ - int prcw[J2K_MAXRLVLS]; + OPJ_UINT32 prcw[OPJ_J2K_MAXRLVLS]; /** precinct height */ - int prch[J2K_MAXRLVLS]; -} opj_tccp_t; + OPJ_UINT32 prch[OPJ_J2K_MAXRLVLS]; + /** the dc_level_shift **/ + OPJ_INT32 m_dc_level_shift; +} +opj_tccp_t; + + /** -Tile coding parameters : + * FIXME DOC + */ +typedef struct opj_mct_data +{ + J2K_MCT_ELEMENT_TYPE m_element_type; + J2K_MCT_ARRAY_TYPE m_array_type; + OPJ_UINT32 m_index; + OPJ_BYTE * m_data; + OPJ_UINT32 m_data_size; +} +opj_mct_data_t; + +/** + * FIXME DOC + */ +typedef struct opj_simple_mcc_decorrelation_data +{ + OPJ_UINT32 m_index; + OPJ_UINT32 m_nb_comps; + opj_mct_data_t * m_decorrelation_array; + opj_mct_data_t * m_offset_array; + OPJ_UINT32 m_is_irreversible : 1; +} +opj_simple_mcc_decorrelation_data_t; + +/** +Tile coding parameters : this structure is used to store coding/decoding parameters common to all tiles (information like COD, COC in main header) */ -typedef struct opj_tcp { - /** 1 : first part-tile of a tile */ - int first; +typedef struct opj_tcp +{ /** coding style */ - int csty; + OPJ_UINT32 csty; /** progression order */ OPJ_PROG_ORDER prg; /** number of layers */ - int numlayers; + OPJ_UINT32 numlayers; + OPJ_UINT32 num_layers_to_decode; /** multi-component transform identifier */ - int mct; + OPJ_UINT32 mct; /** rates of layers */ - float rates[100]; + OPJ_FLOAT32 rates[100]; /** number of progression order changes */ - int numpocs; - /** indicates if a POC marker has been used O:NO, 1:YES */ - int POC; + OPJ_UINT32 numpocs; /** progression order changes */ opj_poc_t pocs[32]; /** packet header store there for futur use in t2_decode_packet */ - unsigned char *ppt_data; - /** pointer remaining on the first byte of the first header if ppt is used */ - unsigned char *ppt_data_first; - /** If ppt == 1 --> there was a PPT marker for the present tile */ - int ppt; - /** used in case of multiple marker PPT (number of info already stored) */ - int ppt_store; - /** ppmbug1 */ - int ppt_len; + OPJ_BYTE *ppt_data; + /** used to keep a track of the allocated memory */ + OPJ_BYTE *ppt_buffer; + /** Number of bytes stored inside ppt_data*/ + OPJ_UINT32 ppt_data_size; + /** size of ppt_data*/ + OPJ_UINT32 ppt_len; /** add fixed_quality */ - float distoratio[100]; + OPJ_FLOAT32 distoratio[100]; /** tile-component coding parameters */ opj_tccp_t *tccps; + /** number of tile parts for the tile. */ + OPJ_UINT32 m_nb_tile_parts; + /** data for the tile */ + OPJ_BYTE * m_data; + /** size of data */ + OPJ_UINT32 m_data_size; + /** encoding norms */ + OPJ_FLOAT64 * mct_norms; + /** the mct decoding matrix */ + OPJ_FLOAT32 * m_mct_decoding_matrix; + /** the mct coding matrix */ + OPJ_FLOAT32 * m_mct_coding_matrix; + /** mct records */ + opj_mct_data_t * m_mct_records; + /** the number of mct records. */ + OPJ_UINT32 m_nb_mct_records; + /** the max number of mct records. */ + OPJ_UINT32 m_nb_max_mct_records; + /** mcc records */ + opj_simple_mcc_decorrelation_data_t * m_mcc_records; + /** the number of mct records. */ + OPJ_UINT32 m_nb_mcc_records; + /** the max number of mct records. */ + OPJ_UINT32 m_nb_max_mcc_records; + + + /***** FLAGS *******/ + /** If ppt == 1 --> there was a PPT marker for the present tile */ + OPJ_UINT32 ppt : 1; + /** indicates if a POC marker has been used O:NO, 1:YES */ + OPJ_UINT32 POC : 1; } opj_tcp_t; -/** -Coding parameters -*/ -typedef struct opj_cp { - /** Digital cinema profile*/ - OPJ_CINEMA_MODE cinema; + + + +typedef struct opj_encoding_param +{ /** Maximum rate for each component. If == 0, component size limitation is not considered */ - int max_comp_size; - /** Size of the image in bits*/ - int img_size; - /** Rsiz*/ - OPJ_RSIZ_CAPABILITIES rsiz; - /** Enabling Tile part generation*/ - char tp_on; - /** Flag determining tile part generation*/ - char tp_flag; + OPJ_UINT32 m_max_comp_size; /** Position of tile part flag in progression order*/ - int tp_pos; + OPJ_INT32 m_tp_pos; + /** fixed layer */ + OPJ_INT32 *m_matrice; + /** Flag determining tile part generation*/ + OPJ_BYTE m_tp_flag; /** allocation by rate/distortion */ - int disto_alloc; + OPJ_UINT32 m_disto_alloc : 1; /** allocation by fixed layer */ - int fixed_alloc; + OPJ_UINT32 m_fixed_alloc : 1; /** add fixed_quality */ - int fixed_quality; + OPJ_UINT32 m_fixed_quality : 1; + /** Enabling Tile part generation*/ + OPJ_UINT32 m_tp_on : 1; +} +opj_encoding_param_t; + +typedef struct opj_decoding_param +{ /** if != 0, then original dimension divided by 2^(reduce); if == 0 or not used, image is decoded to the full resolution */ - int reduce; + OPJ_UINT32 m_reduce; /** if != 0, then only the first "layer" layers are decoded; if == 0 or not used, all the quality layers are decoded */ - int layer; - /** if == NO_LIMITATION, decode entire codestream; if == LIMIT_TO_MAIN_HEADER then only decode the main header */ - OPJ_LIMIT_DECODING limit_decoding; + OPJ_UINT32 m_layer; +} +opj_decoding_param_t; + + +/** + * Coding parameters + */ +typedef struct opj_cp +{ + /** Size of the image in bits*/ + /*int img_size;*/ + /** Rsiz*/ + OPJ_UINT16 rsiz; /** XTOsiz */ - int tx0; + OPJ_UINT32 tx0; /* MSD see norm */ /** YTOsiz */ - int ty0; + OPJ_UINT32 ty0; /* MSD see norm */ /** XTsiz */ - int tdx; + OPJ_UINT32 tdx; /** YTsiz */ - int tdy; - /** comment for coding */ - char *comment; + OPJ_UINT32 tdy; + /** comment */ + OPJ_CHAR *comment; /** number of tiles in width */ - int tw; + OPJ_UINT32 tw; /** number of tiles in heigth */ - int th; - /** ID number of the tiles present in the codestream */ - int *tileno; - /** size of the vector tileno */ - int tileno_size; + OPJ_UINT32 th; + /** packet header store there for futur use in t2_decode_packet */ - unsigned char *ppm_data; + OPJ_BYTE *ppm_data; + /** size of the ppm_data*/ + OPJ_UINT32 ppm_len; + /** size of the ppm_data*/ + OPJ_UINT32 ppm_data_read; + + OPJ_BYTE *ppm_data_current; + + /** packet header storage original buffer */ + OPJ_BYTE *ppm_buffer; /** pointer remaining on the first byte of the first header if ppm is used */ - unsigned char *ppm_data_first; - /** if ppm == 1 --> there was a PPM marker for the present tile */ - int ppm; + OPJ_BYTE *ppm_data_first; + /** Number of bytes actually stored inside the ppm_data */ + OPJ_UINT32 ppm_data_size; /** use in case of multiple marker PPM (number of info already store) */ - int ppm_store; + OPJ_INT32 ppm_store; /** use in case of multiple marker PPM (case on non-finished previous info) */ - int ppm_previous; - /** ppmbug1 */ - int ppm_len; + OPJ_INT32 ppm_previous; + /** tile coding parameters */ opj_tcp_t *tcps; - /** fixed layer */ - int *matrice; + + union + { + opj_decoding_param_t m_dec; + opj_encoding_param_t m_enc; + } + m_specific_param; + + /* UniPG>> */ #ifdef USE_JPWL /** enables writing of EPC in MH, thus activating JPWL */ - opj_bool epc_on; + OPJ_BOOL epc_on; /** enables writing of EPB, in case of activated JPWL */ - opj_bool epb_on; + OPJ_BOOL epb_on; /** enables writing of ESD, in case of activated JPWL */ - opj_bool esd_on; + OPJ_BOOL esd_on; /** enables writing of informative techniques of ESD, in case of activated JPWL */ - opj_bool info_on; + OPJ_BOOL info_on; /** enables writing of RED, in case of activated JPWL */ - opj_bool red_on; + OPJ_BOOL red_on; /** error protection method for MH (0,1,16,32,37-128) */ int hprot_MH; /** tile number of header protection specification (>=0) */ @@ -299,148 +425,418 @@ typedef struct opj_cp { /** sensitivity methods for TPHs (-1,0-7) */ int sens_TPH[JPWL_MAX_NO_TILESPECS]; /** enables JPWL correction at the decoder */ - opj_bool correct; + OPJ_BOOL correct; /** expected number of components at the decoder */ int exp_comps; /** maximum number of tiles at the decoder */ - int max_tiles; + OPJ_UINT32 max_tiles; #endif /* USE_JPWL */ + + /******** FLAGS *********/ + /** if ppm == 1 --> there was a PPM marker*/ + OPJ_UINT32 ppm : 1; + /** tells if the parameter is a coding or decoding one */ + OPJ_UINT32 m_is_decoder : 1; /* <<UniPG */ } opj_cp_t; -/** -JPEG-2000 codestream reader/writer -*/ -typedef struct opj_j2k { - /** codec context */ - opj_common_ptr cinfo; +typedef struct opj_j2k_dec +{ /** locate in which part of the codestream the decoder is (main header, tile header, end) */ - int state; - /** number of the tile curently concern by coding/decoding */ - int curtileno; - /** Tile part number*/ - int tp_num; - /** Tilepart number currently coding*/ - int cur_tp_num; - /** Total number of tileparts of the current tile*/ - int *cur_totnum_tp; + OPJ_UINT32 m_state; /** - locate the start position of the TLM marker - after encoding the tilepart, a jump (in j2k_write_sod) is done to the TLM marker to store the value of its length. - */ - int tlm_start; - /** Total num of tile parts in whole image = num tiles* num tileparts in each tile*/ - /** used in TLMmarker*/ - int totnum_tp; - /** - locate the position of the end of the tile in the codestream, - used to detect a truncated codestream (in j2k_read_sod) - */ - unsigned char *eot; + * store decoding parameters common to all tiles (information like COD, COC in main header) + */ + opj_tcp_t *m_default_tcp; + OPJ_BYTE *m_header_data; + OPJ_UINT32 m_header_data_size; + /** to tell the tile part length */ + OPJ_UINT32 m_sot_length; + /** Only tiles index in the correct range will be decoded.*/ + OPJ_UINT32 m_start_tile_x; + OPJ_UINT32 m_start_tile_y; + OPJ_UINT32 m_end_tile_x; + OPJ_UINT32 m_end_tile_y; /** - locate the start position of the SOT marker of the current coded tile: - after encoding the tile, a jump (in j2k_write_sod) is done to the SOT marker to store the value of its length. - */ - int sot_start; - int sod_start; + * 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; + /** - as the J2K-file is written in several parts during encoding, - it enables to make the right correction in position return by cio_tell - */ - int pos_correction; - /** array used to store the data of each tile */ - unsigned char **tile_data; - /** array used to store the length of each tile */ - int *tile_len; - /** - decompression only : - store decoding parameters common to all tiles (information like COD, COC in main header) + * 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; + OPJ_UINT32 m_skip_data : 1; + +} opj_j2k_dec_t; + +typedef struct opj_j2k_enc +{ + /** Tile part number, regardless of poc, for each new poc, tp is reset to 1*/ + OPJ_UINT32 m_current_poc_tile_part_number; /* tp_num */ + + /** Tile part number currently coding, taking into account POC. m_current_tile_part_number holds the total number of tile parts while encoding the last tile part.*/ + OPJ_UINT32 m_current_tile_part_number; /*cur_tp_num */ + + /** + locate the start position of the TLM marker + after encoding the tilepart, a jump (in j2k_write_sod) is done to the TLM marker to store the value of its length. */ - opj_tcp_t *default_tcp; - /** pointer to the encoded / decoded image */ - opj_image_t *image; - /** pointer to the coding parameters */ - opj_cp_t *cp; + OPJ_OFF_T m_tlm_start; + /** + * Stores the sizes of the tlm. + */ + OPJ_BYTE * m_tlm_sot_offsets_buffer; + /** + * The current offset of the tlm buffer. + */ + OPJ_BYTE * m_tlm_sot_offsets_current; + + /** Total num of tile parts in whole image = num tiles* num tileparts in each tile*/ + /** used in TLMmarker*/ + OPJ_UINT32 m_total_tile_parts; /* totnum_tp */ + + /* encoded data for a tile */ + OPJ_BYTE * m_encoded_tile_data; + + /* size of the encoded_data */ + OPJ_UINT32 m_encoded_tile_size; + + /* encoded data for a tile */ + OPJ_BYTE * m_header_tile_data; + + /* size of the encoded_data */ + OPJ_UINT32 m_header_tile_data_size; + + +} opj_j2k_enc_t; + + + +struct opj_tcd; +/** +JPEG-2000 codestream reader/writer +*/ +typedef struct opj_j2k +{ + /* J2K codestream is decoded*/ + OPJ_BOOL m_is_decoder; + + /* FIXME DOC*/ + union + { + opj_j2k_dec_t m_decoder; + opj_j2k_enc_t m_encoder; + } + m_specific_param; + + /** pointer to the internal/private encoded / decoded image */ + opj_image_t* m_private_image; + + /* pointer to the output image (decoded)*/ + opj_image_t* m_output_image; + + /** Coding parameters */ + opj_cp_t m_cp; + + /** the list of procedures to exec **/ + opj_procedure_list_t * m_procedure_list; + + /** the list of validation procedures to follow to make sure the code is valid **/ + opj_procedure_list_t * m_validation_list; + /** helper used to write the index file */ - opj_codestream_info_t *cstr_info; - /** pointer to the byte i/o stream */ - opj_cio_t *cio; -} opj_j2k_t; + 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 * m_tcd; + +} +opj_j2k_t; + + + /** @name Exported functions */ /*@{*/ /* ----------------------------------------------------------------------- */ -/** -Creates a J2K decompression structure -@param cinfo Codec context info -@return Returns a handle to a J2K decompressor if successful, returns NULL otherwise -*/ -opj_j2k_t* j2k_create_decompress(opj_common_ptr cinfo); -/** -Destroy a J2K decompressor handle -@param j2k J2K decompressor handle to destroy -*/ -void j2k_destroy_decompress(opj_j2k_t *j2k); + /** Setup the decoder decoding parameters using user parameters. Decoding parameters are returned in j2k->cp. @param j2k J2K decompressor handle @param parameters decompression parameters */ -void j2k_setup_decoder(opj_j2k_t *j2k, opj_dparameters_t *parameters); +void opj_j2k_setup_decoder(opj_j2k_t *j2k, opj_dparameters_t *parameters); + /** -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 + * Creates a J2K compression structure + * + * @return Returns a handle to a J2K compressor if successful, returns NULL otherwise */ -opj_image_t* j2k_decode(opj_j2k_t *j2k, opj_cio_t *cio, opj_codestream_info_t *cstr_info); +opj_j2k_t* opj_j2k_create_compress(void); + + +void opj_j2k_setup_encoder( opj_j2k_t *p_j2k, + opj_cparameters_t *parameters, + opj_image_t *image, + opj_event_mgr_t * p_manager); + /** -Decode an image form a JPT-stream (JPEG 2000, JPIP) -@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 +Converts an enum type progression order to string type */ -opj_image_t* j2k_decode_jpt_stream(opj_j2k_t *j2k, opj_cio_t *cio, opj_codestream_info_t *cstr_info); +char *opj_j2k_convert_progression_order(OPJ_PROG_ORDER prg_order); + +/* ----------------------------------------------------------------------- */ +/*@}*/ + +/*@}*/ + /** -Creates a J2K compression structure -@param cinfo Codec context info -@return Returns a handle to a J2K compressor if successful, returns NULL otherwise -*/ -opj_j2k_t* j2k_create_compress(opj_common_ptr cinfo); + * Ends the decompression procedures and possibiliy add data to be read after the + * codestream. + */ +OPJ_BOOL opj_j2k_end_decompress(opj_j2k_t *j2k, + opj_stream_private_t *p_stream, + opj_event_mgr_t * p_manager); + /** -Destroy a J2K compressor handle -@param j2k J2K compressor handle to destroy -*/ -void j2k_destroy_compress(opj_j2k_t *j2k); + * Reads a jpeg2000 codestream header structure. + * + * @param p_stream the stream to read data from. + * @param p_j2k the jpeg2000 codec. + * @param p_image FIXME DOC + * @param p_manager the user event manager. + * + * @return true if the box is valid. + */ +OPJ_BOOL opj_j2k_read_header( opj_stream_private_t *p_stream, + opj_j2k_t* p_j2k, + opj_image_t** p_image, + opj_event_mgr_t* p_manager ); + + /** -Setup the encoder parameters using the current image and using user parameters. -Coding parameters are returned in j2k->cp. -@param j2k J2K compressor handle -@param parameters compression parameters -@param image input filled image -*/ -void j2k_setup_encoder(opj_j2k_t *j2k, opj_cparameters_t *parameters, opj_image_t *image); + * Destroys a jpeg2000 codec. + * + * @param p_j2k the jpeg20000 structure to destroy. + */ +void opj_j2k_destroy (opj_j2k_t *p_j2k); + /** -Converts an enum type progression order to string type + * 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. + * @param p_tile_index + * @param p_data FIXME DOC + * @param p_data_size FIXME DOC + * @param p_stream the stream to write data to. + * @param p_manager the user event manager. + */ +OPJ_BOOL opj_j2k_decode_tile ( opj_j2k_t * p_j2k, + OPJ_UINT32 p_tile_index, + OPJ_BYTE * p_data, + OPJ_UINT32 p_data_size, + opj_stream_private_t *p_stream, + opj_event_mgr_t * p_manager ); + +/** + * Reads a tile header. + * @param p_j2k the jpeg2000 codec. + * @param p_tile_index FIXME DOC + * @param p_data_size FIXME DOC + * @param p_tile_x0 FIXME DOC + * @param p_tile_y0 FIXME DOC + * @param p_tile_x1 FIXME DOC + * @param p_tile_y1 FIXME DOC + * @param p_nb_comps FIXME DOC + * @param p_go_on FIXME DOC + * @param p_stream the stream to write data to. + * @param p_manager the user event manager. + */ +OPJ_BOOL opj_j2k_read_tile_header ( opj_j2k_t * p_j2k, + 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_go_on, + opj_stream_private_t *p_stream, + opj_event_mgr_t * p_manager ); + + +/** + * 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_j2k the jpeg2000 codec. + * @param p_image FIXME DOC + * @param p_start_x the left position of the rectangle to decode (in image coordinates). + * @param p_start_y the up 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_end_y the bottom position of the rectangle to decode (in image coordinates). + * @param p_manager the user event manager + * + * @return true if the area could be set. + */ +OPJ_BOOL opj_j2k_set_decode_area( opj_j2k_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, + opj_event_mgr_t * p_manager ); + +/** + * Creates a J2K decompression structure. + * + * @return a handle to a J2K decompressor if successful, NULL otherwise. + */ +opj_j2k_t* opj_j2k_create_decompress(void); + + +/** + * Dump some elements from the J2K decompression structure . + * + *@param p_j2k the jpeg2000 codec. + *@param flag flag to describe what elments are dump. + *@param out_stream output stream where dump the elements. + * */ -char *j2k_convert_progression_order(OPJ_PROG_ORDER prg_order); -/** -Encode an image into a JPEG-2000 codestream -@param j2k J2K compressor handle -@param cio Output buffer stream -@param image Image to encode -@param cstr_info Codestream information structure if required, NULL otherwise -@return Returns true if successful, returns false otherwise +void j2k_dump (opj_j2k_t* p_j2k, OPJ_INT32 flag, FILE* out_stream); + + + +/** + * Dump an image header structure. + * + *@param image the image header to dump. + *@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_t* image, OPJ_BOOL dev_dump_flag, FILE* out_stream); + +/** + * Dump a component image header structure. + * + *@param comp the component image header to dump. + *@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_t* comp, OPJ_BOOL dev_dump_flag, FILE* out_stream); + +/** + * Get the codestream info from a JPEG2000 codec. + * + *@param p_j2k the component image header to dump. + * + *@return the codestream information extract from the jpg2000 codec + */ +opj_codestream_info_v2_t* j2k_get_cstr_info(opj_j2k_t* p_j2k); + +/** + * Get the codestream index from a JPEG2000 codec. + * + *@param p_j2k the component image header to dump. + * + *@return the codestream index extract from the jpg2000 codec + */ +opj_codestream_index_t* j2k_get_cstr_index(opj_j2k_t* p_j2k); + +/** + * Decode an image from a JPEG-2000 codestream + * @param j2k J2K decompressor handle + * @param p_stream FIXME DOC + * @param p_image FIXME DOC + * @param p_manager FIXME DOC + * @return FIXME DOC */ -opj_bool j2k_encode(opj_j2k_t *j2k, opj_cio_t *cio, opj_image_t *image, opj_codestream_info_t *cstr_info); +OPJ_BOOL opj_j2k_decode(opj_j2k_t *j2k, + opj_stream_private_t *p_stream, + opj_image_t *p_image, + opj_event_mgr_t *p_manager); -/* ----------------------------------------------------------------------- */ -/*@}*/ -/*@}*/ +OPJ_BOOL opj_j2k_get_tile( opj_j2k_t *p_j2k, + opj_stream_private_t *p_stream, + opj_image_t* p_image, + opj_event_mgr_t * p_manager, + OPJ_UINT32 tile_index ); + +OPJ_BOOL opj_j2k_set_decoded_resolution_factor(opj_j2k_t *p_j2k, + OPJ_UINT32 res_factor, + opj_event_mgr_t * p_manager); + + +/** + * Writes a tile. + * @param p_j2k the jpeg2000 codec. + * @param p_tile_index FIXME DOC + * @param p_data FIXME DOC + * @param p_data_size FIXME DOC + * @param p_stream the stream to write data to. + * @param p_manager the user event manager. + */ +OPJ_BOOL opj_j2k_write_tile ( opj_j2k_t * p_j2k, + OPJ_UINT32 p_tile_index, + OPJ_BYTE * p_data, + OPJ_UINT32 p_data_size, + opj_stream_private_t *p_stream, + opj_event_mgr_t * p_manager ); + +/** + * Encodes an image into a JPEG-2000 codestream + */ +OPJ_BOOL opj_j2k_encode( opj_j2k_t * p_j2k, + opj_stream_private_t *cio, + opj_event_mgr_t * p_manager ); + +/** + * Starts a compression scheme, i.e. validates the codec parameters, writes the header. + * + * @param p_j2k the jpeg2000 codec. + * @param p_stream the stream object. + * @param p_image FIXME DOC + * @param p_manager the user event manager. + * + * @return true if the codec is valid. + */ +OPJ_BOOL opj_j2k_start_compress(opj_j2k_t *p_j2k, + opj_stream_private_t *p_stream, + opj_image_t * p_image, + opj_event_mgr_t * p_manager); + +/** + * Ends the compression procedures and possibiliy add data to be read after the + * codestream. + */ +OPJ_BOOL opj_j2k_end_compress( opj_j2k_t *p_j2k, + opj_stream_private_t *cio, + opj_event_mgr_t * p_manager); + +OPJ_BOOL opj_j2k_setup_mct_encoding (opj_tcp_t * p_tcp, opj_image_t * p_image); + #endif /* __J2K_H */ |