X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=libopenjpeg%2Fopenjpeg.h;h=2102f742351e68da2af2671590974b81c137ff34;hb=b0ef524b9e0e0b84c97ead25ee84531b7ada35ec;hp=dfc4dc6468941d424185ea5e4f254ef3d567b4af;hpb=88f43b15fab0c75c10635c9e3d6381e5d716b8e9;p=openjpeg.git diff --git a/libopenjpeg/openjpeg.h b/libopenjpeg/openjpeg.h index dfc4dc64..2102f742 100644 --- a/libopenjpeg/openjpeg.h +++ b/libopenjpeg/openjpeg.h @@ -6,6 +6,7 @@ * Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe * Copyright (c) 2005, Herve Drolon, FreeImage Team * Copyright (c) 2006-2007, Parvatha Elangovan + * Copyright (c) 2010-2011, Kaori Hagihara * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -63,6 +64,19 @@ typedef int opj_bool; #define OPJ_TRUE 1 #define OPJ_FALSE 0 +typedef unsigned int OPJ_UINT32; +typedef int OPJ_INT32; +typedef unsigned short OPJ_UINT16; +typedef short OPJ_INT16; +typedef char OPJ_CHAR; +typedef unsigned char OPJ_BYTE; +typedef unsigned int OPJ_SIZE_T; +typedef double OPJ_FLOAT64; +typedef float OPJ_FLOAT32; + +// Avoid compile-time warning because parameter is not used +#define OPJ_ARG_NOT_USED(x) (void)(x) + /* ========================================================== Useful constant definitions @@ -74,6 +88,12 @@ typedef int opj_bool; #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 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 + /* 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 */ @@ -137,9 +157,9 @@ 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 */ + 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_FORMAT; /** @@ -174,6 +194,7 @@ used for */ typedef struct opj_event_mgr { + void* client_data; /** Error message callback if available, NULL otherwise */ opj_msg_callback error_handler; /** Warning message callback if available, NULL otherwise */ @@ -344,6 +365,8 @@ typedef struct opj_cparameters { char tp_flag; /** MCT (multiple component transform) */ char tcp_mct; + /** Enable JPIP indexing*/ + opj_bool jpip_on; } opj_cparameters_t; /** @@ -443,6 +466,11 @@ typedef struct opj_dinfo { /* other specific fields go here */ } opj_dinfo_t; +/** + * J2k codec. + */ +typedef void * opj_codec_t; + /* ========================================================== I/O stream typedef definitions @@ -479,6 +507,14 @@ typedef struct opj_cio { unsigned char *bp; } opj_cio_t; +typedef OPJ_UINT32 (* opj_stream_read_fn) (void * p_buffer, OPJ_UINT32 p_nb_bytes, void * p_user_data) ; +typedef OPJ_UINT32 (* opj_stream_write_fn) (void * p_buffer, OPJ_UINT32 p_nb_bytes, void * p_user_data) ; +typedef OPJ_SIZE_T (* opj_stream_skip_fn) (OPJ_SIZE_T p_nb_bytes, void * p_user_data) ; +typedef opj_bool (* opj_stream_seek_fn) (OPJ_SIZE_T p_nb_bytes, void * p_user_data) ; + + +typedef void * opj_stream_t; + /* ========================================================== image typedef definitions @@ -520,15 +556,15 @@ Defines image data and characteristics */ typedef struct opj_image { /** XOsiz: horizontal offset from the origin of the reference grid to the left side of the image area */ - int x0; + OPJ_UINT32 x0; /** YOsiz: vertical offset from the origin of the reference grid to the top side of the image area */ - int y0; + OPJ_UINT32 y0; /** Xsiz: width of the reference grid */ - int x1; + OPJ_UINT32 x1; /** Ysiz: height of the reference grid */ - int y1; + OPJ_UINT32 y1; /** number of components in the image */ - int numcomps; + OPJ_UINT16 numcomps; /** color space: sRGB, Greyscale or YUV */ OPJ_COLOR_SPACE color_space; /** image components */ @@ -539,6 +575,7 @@ typedef struct opj_image { int icc_profile_len; } opj_image_t; + /** Component parameters structure used by the opj_image_create function */ @@ -563,6 +600,75 @@ typedef struct opj_image_comptparm { int sgnd; } opj_image_cmptparm_t; + + +/** +Defines a single image component characteristics (uses in new API) +*/ +typedef struct opj_image_comp_header { + /** XRsiz: horizontal separation of a sample of ith component with respect to the reference grid */ + int dx; + /** YRsiz: vertical separation of a sample of ith component with respect to the reference grid */ + int dy; + /** data width */ + int w; + /** data height */ + int h; + /** x component offset compared to the whole image */ + int x0; + /** y component offset compared to the whole image */ + int y0; + /** precision */ + int prec; + /** image depth in bits */ + int bpp; + /** signed (1) / unsigned (0) */ + int sgnd; + /** number of decoded resolution */ + int resno_decoded; + /** number of division by 2 of the out image compared to the original size of image */ + int factor; +} opj_image_comp_header_t; + +/** +Defines image characteristics (uses in new API) +*/ +typedef struct opj_image_header { + /** XOsiz: horizontal offset from the origin of the reference grid to the left side of the image area */ + OPJ_UINT32 x0; + /** YOsiz: vertical offset from the origin of the reference grid to the top side of the image area */ + OPJ_UINT32 y0; + /** Xsiz: width of the reference grid */ + OPJ_UINT32 x1; + /** Ysiz: height of the reference grid */ + OPJ_UINT32 y1; + /** number of components in the image */ + OPJ_UINT16 numcomps; + /** color space: sRGB, Greyscale or YUV */ + OPJ_COLOR_SPACE color_space; + /** image components */ + opj_image_comp_header_t *comps; + + /** XTOsiz */ + OPJ_UINT32 tile_x0; + /** YTOsiz */ + OPJ_UINT32 tile_y0; + /** XTsiz */ + OPJ_UINT32 tile_width; + /** YTsiz */ + OPJ_UINT32 tile_height; + /** number of tiles in width */ + OPJ_UINT32 nb_tiles_x; + /** number of tiles in height */ + OPJ_UINT32 nb_tiles_y; + + /** 'restricted' ICC profile */ + unsigned char *icc_profile_buf; + /** size of ICC profile */ + int icc_profile_len; +} opj_image_header_t; + + /* ========================================================== Information on the JPEG 2000 codestream @@ -583,6 +689,21 @@ typedef struct opj_packet_info { double disto; } opj_packet_info_t; + +/* UniPG>> */ +/** +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; +/* <> */ -/** -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; -/* <cp. @param parameters decompression parameters */ OPJ_API void OPJ_CALLCONV opj_setup_decoder(opj_dinfo_t *dinfo, opj_dparameters_t *parameters); + +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); + /** Decode an image from a JPEG-2000 codestream @param dinfo decompressor handle @@ -865,7 +1060,7 @@ Setup the encoder parameters using the current image and using user parameters. 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 +3@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() @@ -887,6 +1082,30 @@ Destroy Codestream information after compression or decompression */ OPJ_API void OPJ_CALLCONV opj_destroy_cstr_info(opj_codestream_info_t *cstr_info); + +/** + * Decodes an image header. + * + * @param p_codec codec to use to decode the image. + * @param p_image pointer to a previously created image. + * @param p_tile_x0 pointer to a value that will hold the reference point x0 of the tiling grid. + * @param p_tile_y0 pointer to a value that will hold the reference point y0 of the tiling grid. + * @param p_tile_width pointer to a value that will hold the size in x of a tile in the grid. + * @param p_tile_height pointer to a value that will hold the size in y of a tile in the grid. + * @param p_nb_tiles_x pointer to a value that will hold the number of tiles in the x direction. + * @param p_nb_tiles_y pointer to a value that will hold the number of tiles in the y direction. + */ +OPJ_API opj_bool OPJ_CALLCONV opj_read_header ( opj_stream_t *p_cio, + opj_codec_t *p_codec, + opj_image_header_t **p_image_header, + opj_codestream_info_t **p_cstr_info ); + +/** +Destroy a decompressor handle +@param dinfo decompressor handle to destroy +*/ +OPJ_API void OPJ_CALLCONV opj_destroy_codec(opj_codec_t * p_codec); + #ifdef __cplusplus } #endif