/* * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium * Copyright (c) 2002-2007, 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) 2005, Herve Drolon, FreeImage Team * Copyright (c) 2006-2007, Parvatha Elangovan * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ #ifndef OPENJPEG_H #define OPENJPEG_H #define OPENJPEG_VERSION "1.3.0" /* ========================================================== Compiler directives ========================================================== */ #define OPJ_API #define OPJ_CALLCONV #ifndef __cplusplus #if defined(HAVE_STDBOOL_H) /* The C language implementation does correctly provide the standard header file "stdbool.h". */ #include #else /* The C language implementation does not provide the standard header file "stdbool.h" as required by ISO/IEC 9899:1999. Try to compensate for this braindamage below. */ #if !defined(bool) #define bool int #endif #if !defined(true) #define true 1 #endif #if !defined(false) #define false 0 #endif #endif #endif /* __cplusplus */ /* ========================================================== Useful constant definitions ========================================================== */ #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 */ /* UniPG>> */ #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 */ #define JPWL_PRIVATEINDEX_NAME "jpwl_index_privatefilename" /**< index file name used when JPWL is on */ #define JPWL_EXPECTED_COMPONENTS 3 /**< Expect this number of components, so you'll find better the first EPB */ #define JPWL_MAXIMUM_TILES 8192 /**< Expect this maximum number of tiles, to avoid some crashes */ #define JPWL_MAXIMUM_HAMMING 2 /**< Expect this maximum number of bit errors in marker id's */ #define JPWL_MAXIMUM_EPB_ROOM 65450 /**< Expect this maximum number of bytes for composition of EPBs */ /* <
  • Error messages
  • Warning messages
  • Debugging messages */ typedef struct opj_event_mgr { /** 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 ========================================================== */ /** Progression order changes */ typedef struct opj_poc { /** Resolution num start, Component num start, given by POC */ int resno0, compno0; /** Layer num end,Resolution num end, Component num end, given by POC */ int layno1, resno1, compno1; /** Layer num start,Precinct num start, Precinct num end */ int layno0, precno0, precno1; /** Progression order enum*/ OPJ_PROG_ORDER prg1,prg; /** Progression order string*/ char progorder[5]; /** Tile number */ int tile; /** Start and end values for Tile width and height*/ int tx0,tx1,ty0,ty1; /** Start value, initialised in pi_initialise_encode*/ int layS, resS, compS, prcS; /** End value, initialised in pi_initialise_encode */ int layE, resE, compE, prcE; /** Start and end values of Tile width and height, initialised in pi_initialise_encode*/ int txS,txE,tyS,tyE,dx,dy; /** Temporary values for Tile parts, initialised in pi_create_encode */ int lay_t, res_t, comp_t, prc_t,tx0_t,ty0_t; } opj_poc_t; /** Compression parameters */ typedef struct opj_cparameters { /** size of tile: tile_size_on = false (not in argument) or = true (in argument) */ bool tile_size_on; /** XTOsiz */ int cp_tx0; /** YTOsiz */ int cp_ty0; /** XTsiz */ int cp_tdx; /** YTsiz */ int cp_tdy; /** allocation by rate/distortion */ int cp_disto_alloc; /** allocation by fixed layer */ int cp_fixed_alloc; /** add fixed_quality */ int cp_fixed_quality; /** fixed layer */ int *cp_matrice; /** comment for coding */ char *cp_comment; /** csty : coding style */ int csty; /** progression order (default 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; /** number of layers */ int tcp_numlayers; /** rates of layers */ float tcp_rates[100]; /** different psnr for successive layers */ float tcp_distoratio[100]; /** number of resolutions */ int numresolution; /** initial code block width, default to 64 */ int cblockw_init; /** initial code block height, default to 64 */ int cblockh_init; /** mode switch (cblk_style) */ int mode; /** 1 : use the irreversible DWT 9-7, 0 : use lossless compression (default) */ int irreversible; /** region of interest: affected component in [0..3], -1 means no ROI */ int roi_compno; /** region of interest: upshift value */ int roi_shift; /* number of precinct size specifications */ int res_spec; /** initial precinct width */ int prcw_init[J2K_MAXRLVLS]; /** initial precinct height */ int prch_init[J2K_MAXRLVLS]; /**@name command line encoder parameters (not used inside the library) */ /*@{*/ /** input file name */ char infile[OPJ_PATH_LEN]; /** output file name */ char outfile[OPJ_PATH_LEN]; /** DEPRECATED. Index generation is now handeld with the opj_encode_with_info() function. Set to NULL */ int index_on; /** DEPRECATED. Index generation is now handeld with the opj_encode_with_info() function. Set to NULL */ char index[OPJ_PATH_LEN]; /** subimage encoding: origin image offset in x direction */ int image_offset_x0; /** subimage encoding: origin image offset in y direction */ int image_offset_y0; /** subsampling value for dx */ int subsampling_dx; /** subsampling value for dy */ int subsampling_dy; /** input file format 0: PGX, 1: PxM, 2: BMP 3:TIF*/ int decod_format; /** output file format 0: J2K, 1: JP2, 2: JPT */ int cod_format; /*@}*/ /* UniPG>> */ /**@name JPWL encoding parameters */ /*@{*/ /** enables writing of EPC in MH, thus activating JPWL */ 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) */ int jpwl_hprot_TPH_tileno[JPWL_MAX_NO_TILESPECS]; /** error protection methods for TPHs (0,1,16,32,37-128) */ int jpwl_hprot_TPH[JPWL_MAX_NO_TILESPECS]; /** tile number of packet protection specification (>=0) */ int jpwl_pprot_tileno[JPWL_MAX_NO_PACKSPECS]; /** packet number of packet protection specification (>=0) */ int jpwl_pprot_packno[JPWL_MAX_NO_PACKSPECS]; /** error protection methods for packets (0,1,16,32,37-128) */ int jpwl_pprot[JPWL_MAX_NO_PACKSPECS]; /** enables writing of ESD, (0=no/1/2 bytes) */ int jpwl_sens_size; /** sensitivity addressing size (0=auto/2/4 bytes) */ int jpwl_sens_addr; /** sensitivity range (0-3) */ int jpwl_sens_range; /** sensitivity method for MH (-1=no,0-7) */ int jpwl_sens_MH; /** tile number of sensitivity specification (>=0) */ int jpwl_sens_TPH_tileno[JPWL_MAX_NO_TILESPECS]; /** sensitivity methods for TPHs (-1=no,0-7) */ int jpwl_sens_TPH[JPWL_MAX_NO_TILESPECS]; /*@}*/ /* <> */ /**@name JPWL decoding parameters */ /*@{*/ /** activates the JPWL correction capabilities */ bool jpwl_correct; /** expected number of components */ int jpwl_exp_comps; /** maximum number of tiles */ int jpwl_max_tiles; /*@}*/ /* <> */ /** Marker structure */ typedef struct opj_marker_info_t { /** marker type */ unsigned short int type; /** position in codestream */ int pos; /** length, marker val included */ int len; } opj_marker_info_t; /* <> */ /** number of markers */ int marknum; /** list of markers */ opj_marker_info_t *marker; /** actual size of markers array */ int maxmarknum; /* <cp. @param dinfo decompressor handle @param parameters decompression parameters */ OPJ_API void OPJ_CALLCONV opj_setup_decoder(opj_dinfo_t *dinfo, opj_dparameters_t *parameters); /** Decode an image from a JPEG-2000 codestream @param dinfo decompressor handle @param cio Input buffer stream @return Returns a decoded image if successful, returns NULL otherwise */ OPJ_API opj_image_t* OPJ_CALLCONV opj_decode(opj_dinfo_t *dinfo, opj_cio_t *cio); /** Decode an image from a JPEG-2000 codestream and extract the codestream information @param dinfo decompressor handle @param cio Input buffer stream @param cstr_info Codestream information structure if needed afterwards, NULL otherwise @return Returns a decoded image if successful, returns NULL otherwise */ OPJ_API opj_image_t* OPJ_CALLCONV opj_decode_with_info(opj_dinfo_t *dinfo, opj_cio_t *cio, opj_codestream_info_t *cstr_info); /** 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_cinfo_t* OPJ_CALLCONV opj_create_compress(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); /** Set encoding parameters to default values, that means :
    • Lossless
    • 1 tile
    • Size of precinct : 2^15 x 2^15 (means 1 precinct)
    • Size of code-block : 64 x 64
    • Number of resolutions: 6
    • No SOP marker in the codestream
    • No EPH marker in the codestream
    • No sub-sampling in x or y direction
    • No mode switch activated
    • Progression order: LRCP
    • No index file
    • No ROI upshifted
    • No offset of the origin of the image
    • No offset of the origin of the tiles
    • Reversible DWT 5-3
    @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); /** Encode an image into a JPEG-2000 codestream @param cinfo compressor handle @param cio Output buffer stream @param image Image to encode @param index Depreacted -> Set to NULL. To extract index, used opj_encode_wci() @return Returns true if successful, returns false otherwise */ OPJ_API 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 cio Output buffer stream @param image Image to encode @param cstr_info Codestream information structure if needed afterwards, NULL otherwise @return Returns true if successful, returns false otherwise */ OPJ_API 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 Codestream information after compression or decompression @param cstr_info Codestream information structure */ OPJ_API void OPJ_CALLCONV opj_destroy_cstr_info(opj_codestream_info_t *cstr_info); #ifdef __cplusplus } #endif #endif /* OPENJPEG_H */