ABI
Tracker

(OpenJPEG)




Headers diff: 1.5.2 vs 2.0



 openjpeg.h (1.5.2)   openjpeg.h (2.0) 
/* /*
* Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, U niversite catholique de Louvain (UCL), Belgium * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, U niversite catholique de Louvain (UCL), Belgium
* Copyright (c) 2002-2007, Professor Benoit Macq * Copyright (c) 2002-2007, Professor Benoit Macq
* Copyright (c) 2001-2003, David Janssens * Copyright (c) 2001-2003, David Janssens
* Copyright (c) 2002-2003, Yannick Verschueren * Copyright (c) 2002-2003, Yannick Verschueren
* Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe * Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe
* Copyright (c) 2005, Herve Drolon, FreeImage Team * Copyright (c) 2005, Herve Drolon, FreeImage Team
* Copyright (c) 2006-2007, Parvatha Elangovan * Copyright (c) 2006-2007, Parvatha Elangovan
* Copyright (c) 2008, Jerome Fimes, Communications & Systemes <jerome.fime s@c-s.fr>
* Copyright (c) 2010-2011, Kaori Hagihara * Copyright (c) 2010-2011, Kaori Hagihara
* Copyright (c) 2011-2012, Centre National d'Etudes Spatiales (CNES), Fran
ce
* Copyright (c) 2012, CS Systemes d'Information, France
* All rights reserved. * All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions * modification, are permitted provided that the following conditions
* are met: * are met:
* 1. Redistributions of source code must retain the above copyright * 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer. * notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright * 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the * notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution. * documentation and/or other materials provided with the distribution.
skipping to change at line 42 skipping to change at line 45
*/ */
#ifndef OPENJPEG_H #ifndef OPENJPEG_H
#define OPENJPEG_H #define OPENJPEG_H
/* /*
========================================================== ==========================================================
Compiler directives Compiler directives
========================================================== ==========================================================
*/ */
/* deprecated attribute */
#ifdef __GNUC__
#define DEPRECATED(func) func __attribute__ ((deprecated))
#elif defined(_MSC_VER)
#define DEPRECATED(func) __declspec(deprecated) func
#else
#pragma message("WARNING: You need to implement DEPRECATED for this
compiler")
#define DEPRECATED(func) func
#endif
#if defined(OPJ_STATIC) || !defined(_WIN32) #if defined(OPJ_STATIC) || !defined(_WIN32)
/* http://gcc.gnu.org/wiki/Visibility */
#if __GNUC__ >= 4
#define OPJ_API __attribute__ ((visibility ("default")))
#define OPJ_LOCAL __attribute__ ((visibility ("hidden")))
#else
#define OPJ_API #define OPJ_API
#define OPJ_LOCAL
#endif
#define OPJ_CALLCONV #define OPJ_CALLCONV
#else #else
#define OPJ_CALLCONV __stdcall #define OPJ_CALLCONV __stdcall
/* /*
The following ifdef block is the standard way of creating macros which make exporting The following ifdef block is the standard way of creating macros which make exporting
from a DLL simpler. All files within this DLL are compiled with the OPJ_EXP ORTS from a DLL simpler. All files within this DLL are compiled with the OPJ_EXP ORTS
symbol defined on the command line. this symbol should not be defined on an y project symbol defined on the command line. this symbol should not be defined on an y project
that uses this DLL. This way any other project whose source files include t his file see that uses this DLL. This way any other project whose source files include t his file see
OPJ_API functions as being imported from a DLL, wheras this DLL sees symbol s OPJ_API functions as being imported from a DLL, wheras this DLL sees symbol s
defined with this macro as being exported. defined with this macro as being exported.
*/ */
#if defined(OPJ_EXPORTS) || defined(DLL_EXPORT) #if defined(OPJ_EXPORTS) || defined(DLL_EXPORT)
#define OPJ_API __declspec(dllexport) #define OPJ_API __declspec(dllexport)
#else #else
#define OPJ_API __declspec(dllimport) #define OPJ_API __declspec(dllimport)
#endif /* OPJ_EXPORTS */ #endif /* OPJ_EXPORTS */
#endif /* !OPJ_STATIC || !_WIN32 */ #endif /* !OPJ_STATIC || !_WIN32 */
typedef int opj_bool; typedef int OPJ_BOOL; /*FIXME it should be to follow the name of others OPJ _TYPE -> OPJ_BOOL*/
#define OPJ_TRUE 1 #define OPJ_TRUE 1
#define OPJ_FALSE 0 #define OPJ_FALSE 0
typedef char OPJ_CHAR;
typedef float OPJ_FLOAT32;
typedef double OPJ_FLOAT64;
typedef unsigned char OPJ_BYTE;
#include "opj_stdint.h"
typedef int8_t OPJ_INT8;
typedef uint8_t OPJ_UINT8;
typedef int16_t OPJ_INT16;
typedef uint16_t OPJ_UINT16;
typedef int32_t OPJ_INT32;
typedef uint32_t OPJ_UINT32;
typedef int64_t OPJ_INT64;
typedef uint64_t OPJ_UINT64;
/* Avoid compile-time warning because parameter is not used */ /* Avoid compile-time warning because parameter is not used */
#define OPJ_ARG_NOT_USED(x) (void)(x) #define OPJ_ARG_NOT_USED(x) (void)(x)
/* /*
========================================================== ==========================================================
Useful constant definitions Useful constant definitions
========================================================== ==========================================================
*/ */
#define OPJ_PATH_LEN 4096 /**< Maximum allowed size for filenames */ #define OPJ_PATH_LEN 4096 /**< Maximum allowed size for filenames */
#define J2K_MAXRLVLS 33 /**< Number #define OPJ_J2K_MAXRLVLS 33 /**< Number
of maximum resolution level authorized */ of maximum resolution level authorized */
#define J2K_MAXBANDS (3*J2K_MAXRLVLS-2) /**< Number of maximum sub-b #define OPJ_J2K_MAXBANDS (3*OPJ_J2K_MAXRLVLS-2) /**< Number of maxim
and linked to number of resolution level */ um sub-band linked to number of resolution level */
/* UniPG>> */ #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>> */ /* NOT YET USED IN THE V2 VERSION OF OPENJPEG */
#define JPWL_MAX_NO_TILESPECS 16 /**< Maximum number of tile parts expecte d by JPWL: increase at your will */ #define JPWL_MAX_NO_TILESPECS 16 /**< Maximum number of tile parts expecte d by JPWL: increase at your will */
#define JPWL_MAX_NO_PACKSPECS 16 /**< Maximum number of packet parts expec ted by JPWL: increase at your will */ #define JPWL_MAX_NO_PACKSPECS 16 /**< Maximum number of packet parts expec ted by JPWL: increase at your will */
#define JPWL_MAX_NO_MARKERS 512 /**< Maximum number of JPWL markers: inc rease at your will */ #define JPWL_MAX_NO_MARKERS 512 /**< Maximum number of JPWL markers: inc rease at your will */
#define JPWL_PRIVATEINDEX_NAME "jpwl_index_privatefilename" /**< index file name used when JPWL is on */ #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, s o you'll find better the first EPB */ #define JPWL_EXPECTED_COMPONENTS 3 /**< Expect this number of components, s o you'll find better the first EPB */
#define JPWL_MAXIMUM_TILES 8192 /**< Expect this maximum number of tiles, t o avoid some crashes */ #define JPWL_MAXIMUM_TILES 8192 /**< Expect this maximum number of tiles, t o avoid some crashes */
#define JPWL_MAXIMUM_HAMMING 2 /**< Expect this maximum number of bit error s in marker id's */ #define JPWL_MAXIMUM_HAMMING 2 /**< Expect this maximum number of bit error s in marker id's */
#define JPWL_MAXIMUM_EPB_ROOM 65450 /**< Expect this maximum number of byte s for composition of EPBs */ #define JPWL_MAXIMUM_EPB_ROOM 65450 /**< Expect this maximum number of byte s for composition of EPBs */
/* <<UniPG */ /* <<UniPG */
/**
* EXPERIMENTAL FOR THE MOMENT
* Supported options about file information used only in j2k_dump
*/
#define OPJ_IMG_INFO 1 /**< Basic image information provide
d to the user */
#define OPJ_J2K_MH_INFO 2 /**< Codestream information
based only on the main header */
#define OPJ_J2K_TH_INFO 4 /**< Tile information based
on the current tile header */
/*FIXME #define OPJ_J2K_CSTR_INFO 6*/ /**< */
#define OPJ_J2K_MH_IND 16 /**< Codestream index based only on
the main header */
#define OPJ_J2K_TH_IND 32 /**< Tile index based on the current
tile */
/*FIXME #define OPJ_J2K_CSTR_IND 48*/ /**< */
#define OPJ_JP2_INFO 128 /**< JP2 file information */
#define OPJ_JP2_IND 256 /**< JP2 file index */
/* /*
========================================================== ==========================================================
enum definitions enum definitions
========================================================== ==========================================================
*/ */
/** /**
Rsiz Capabilities * Rsiz Capabilities
*/ * */
typedef enum RSIZ_CAPABILITIES { typedef enum RSIZ_CAPABILITIES {
STD_RSIZ = 0, /** Standard JPEG2000 profile*/ OPJ_STD_RSIZ = 0, /** Standard JPEG2000 profile*/
CINEMA2K = 3, /** Profile name for a 2K image*/ OPJ_CINEMA2K = 3, /** Profile name for a 2K image*/
CINEMA4K = 4 /** Profile name for a 4K image*/ OPJ_CINEMA4K = 4, /** Profile name for a 4K image*/
OPJ_MCT = 0x8100
} OPJ_RSIZ_CAPABILITIES; } OPJ_RSIZ_CAPABILITIES;
/** /**
Digital cinema operation mode * Digital cinema operation mode
*/ * */
typedef enum CINEMA_MODE { typedef enum CINEMA_MODE {
OFF = 0, /** Not Digital Cine OPJ_OFF = 0, /** Not Digital Cinema*/
ma*/ OPJ_CINEMA2K_24 = 1, /** 2K Digital Cinema at 24 fps*/
CINEMA2K_24 = 1, /** 2K Digital Cinema at 24 fps*/ OPJ_CINEMA2K_48 = 2, /** 2K Digital Cinema at 48 fps*/
CINEMA2K_48 = 2, /** 2K Digital Cinema at 48 fps*/ OPJ_CINEMA4K_24 = 3 /** 4K Digital Cinema at 24 fps*/
CINEMA4K_24 = 3 /** 4K Digital Cinema at 24 fps*/
}OPJ_CINEMA_MODE; }OPJ_CINEMA_MODE;
/** /**
Progression order * Progression order
*/ * */
typedef enum PROG_ORDER { typedef enum PROG_ORDER {
PROG_UNKNOWN = -1, /**< place-holder */ OPJ_PROG_UNKNOWN = -1, /**< place-holder */
LRCP = 0, /**< layer-resolution-component-precinct ord OPJ_LRCP = 0, /**< layer-resolution-component-prec
er */ inct order */
RLCP = 1, /**< resolution-layer-component-precinct ord OPJ_RLCP = 1, /**< resolution-layer-component-prec
er */ inct order */
RPCL = 2, /**< resolution-precinct-component-layer ord OPJ_RPCL = 2, /**< resolution-precinct-component-l
er */ ayer order */
PCRL = 3, /**< precinct-component-resolution-layer ord OPJ_PCRL = 3, /**< precinct-component-resolution-l
er */ ayer order */
CPRL = 4 /**< component-precinct-resolution-layer ord OPJ_CPRL = 4 /**< component-precinct-resolution-l
er */ ayer order */
} OPJ_PROG_ORDER; } OPJ_PROG_ORDER;
/** /**
Supported image color spaces * Supported image color spaces
*/ */
typedef enum COLOR_SPACE { typedef enum COLOR_SPACE {
CLRSPC_UNKNOWN = -1, /**< not supported by the library */ OPJ_CLRSPC_UNKNOWN = -1, /**< not supported by the library */
CLRSPC_UNSPECIFIED = 0, /**< not specified in the codestream */ OPJ_CLRSPC_UNSPECIFIED = 0, /**< not specified in the codestream */
CLRSPC_SRGB = 1, /**< sRGB */ OPJ_CLRSPC_SRGB = 1, /**< sRGB */
CLRSPC_GRAY = 2, /**< grayscale */ OPJ_CLRSPC_GRAY = 2, /**< grayscale */
CLRSPC_SYCC = 3 /**< YUV */ OPJ_CLRSPC_SYCC = 3 /**< YUV */
} OPJ_COLOR_SPACE; } OPJ_COLOR_SPACE;
#define ENUMCS_SRGB 16
#define ENUMCS_GRAY 17
#define ENUMCS_SYCC 18
/** /**
Supported codec * Supported codec
*/ */
typedef enum CODEC_FORMAT { typedef enum CODEC_FORMAT {
CODEC_UNKNOWN = -1, /**< place-holder */ OPJ_CODEC_UNKNOWN = -1, /**< place-holder */
CODEC_J2K = 0, /**< JPEG-2000 codestream : read/write */ OPJ_CODEC_J2K = 0, /**< JPEG-2000 codestream : read/wri
CODEC_JPT = 1, /**< JPT-stream (JPEG 2000, JPIP) : read onl te */
y */ OPJ_CODEC_JPT = 1, /**< JPT-stream (JPEG 2000, JPIP) :
CODEC_JP2 = 2 /**< JPEG-2000 file format : read/write */ read only */
OPJ_CODEC_JP2 = 2 /**< JPEG-2000 file format : read/wr
ite */
} OPJ_CODEC_FORMAT; } 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 JP
EG 2000 packets */
} OPJ_LIMIT_DECODING;
/* /*
========================================================== ==========================================================
event manager typedef definitions event manager typedef definitions
========================================================== ==========================================================
*/ */
/** /**
Callback function prototype for events * Callback function prototype for events
@param msg Event message * @param msg Event message
@param client_data * @param client_data Client object where will be return the event me
*/ ssage
* */
typedef void (*opj_msg_callback) (const char *msg, void *client_data); 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 {
/** 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 codec typedef definitions
========================================================== ==========================================================
*/ */
/** /**
Progression order changes * Progression order changes
*/ *
*/
typedef struct opj_poc { typedef struct opj_poc {
/** Resolution num start, Component num start, given by POC */ /** Resolution num start, Component num start, given by POC */
int resno0, compno0; OPJ_UINT32 resno0, compno0;
/** Layer num end,Resolution num end, Component num end, given by PO C */ /** Layer num end,Resolution num end, Component num end, given by PO C */
int layno1, resno1, compno1; OPJ_UINT32 layno1, resno1, compno1;
/** Layer num start,Precinct num start, Precinct num end */ /** Layer num start,Precinct num start, Precinct num end */
int layno0, precno0, precno1; OPJ_UINT32 layno0, precno0, precno1;
/** Progression order enum*/ /** Progression order enum*/
OPJ_PROG_ORDER prg1,prg; OPJ_PROG_ORDER prg1,prg;
/** Progression order string*/ /** Progression order string*/
char progorder[5]; OPJ_CHAR progorder[5];
/** Tile number */ /** Tile number */
int tile; OPJ_UINT32 tile;
/** Start and end values for Tile width and height*/ /** Start and end values for Tile width and height*/
int tx0,tx1,ty0,ty1; OPJ_INT32 tx0,tx1,ty0,ty1;
/** Start value, initialised in pi_initialise_encode*/ /** Start value, initialised in pi_initialise_encode*/
int layS, resS, compS, prcS; OPJ_UINT32 layS, resS, compS, prcS;
/** End value, initialised in pi_initialise_encode */ /** End value, initialised in pi_initialise_encode */
int layE, resE, compE, prcE; OPJ_UINT32 layE, resE, compE, prcE;
/** Start and end values of Tile width and height, initialised in pi _initialise_encode*/ /** Start and end values of Tile width and height, initialised in pi _initialise_encode*/
int txS,txE,tyS,tyE,dx,dy; OPJ_UINT32 txS,txE,tyS,tyE,dx,dy;
/** Temporary values for Tile parts, initialised in pi_create_encode */ /** Temporary values for Tile parts, initialised in pi_create_encode */
int lay_t, res_t, comp_t, prc_t,tx0_t,ty0_t; OPJ_UINT32 lay_t, res_t, comp_t, prc_t,tx0_t,ty0_t;
} opj_poc_t; } opj_poc_t;
/** /**
Compression parameters * Compression parameters
*/ * */
typedef struct opj_cparameters { typedef struct opj_cparameters {
/** size of tile: tile_size_on = false (not in argument) or = true ( in argument) */ /** 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 */ /** XTOsiz */
int cp_tx0; int cp_tx0;
/** YTOsiz */ /** YTOsiz */
int cp_ty0; int cp_ty0;
/** XTsiz */ /** XTsiz */
int cp_tdx; int cp_tdx;
/** YTsiz */ /** YTsiz */
int cp_tdy; int cp_tdy;
/** allocation by rate/distortion */ /** allocation by rate/distortion */
int cp_disto_alloc; int cp_disto_alloc;
/** allocation by fixed layer */ /** allocation by fixed layer */
int cp_fixed_alloc; int cp_fixed_alloc;
/** add fixed_quality */ /** add fixed_quality */
int cp_fixed_quality; int cp_fixed_quality;
/** fixed layer */ /** fixed layer */
int *cp_matrice; int *cp_matrice;
/** comment for coding */ /** comment for coding */
char *cp_comment; char *cp_comment;
/** csty : coding style */ /** csty : coding style */
int csty; int csty;
/** progression order (default LRCP) */ /** progression order (default OPJ_LRCP) */
OPJ_PROG_ORDER prog_order; OPJ_PROG_ORDER prog_order;
/** progression order changes */ /** progression order changes */
opj_poc_t POC[32]; opj_poc_t POC[32];
/** number of progression order changes (POC), default to 0 */ /** number of progression order changes (POC), default to 0 */
int numpocs; OPJ_UINT32 numpocs;
/** number of layers */ /** number of layers */
int tcp_numlayers; int tcp_numlayers;
/** rates of layers */ /** rates of layers */
float tcp_rates[100]; float tcp_rates[100];
/** different psnr for successive layers */ /** different psnr for successive layers */
float tcp_distoratio[100]; float tcp_distoratio[100];
/** number of resolutions */ /** number of resolutions */
int numresolution; int numresolution;
/** initial code block width, default to 64 */ /** initial code block width, default to 64 */
int cblockw_init; int cblockw_init;
skipping to change at line 280 skipping to change at line 308
int mode; int mode;
/** 1 : use the irreversible DWT 9-7, 0 : use lossless compression ( default) */ /** 1 : use the irreversible DWT 9-7, 0 : use lossless compression ( default) */
int irreversible; int irreversible;
/** region of interest: affected component in [0..3], -1 means no RO I */ /** region of interest: affected component in [0..3], -1 means no RO I */
int roi_compno; int roi_compno;
/** region of interest: upshift value */ /** region of interest: upshift value */
int roi_shift; int roi_shift;
/* number of precinct size specifications */ /* number of precinct size specifications */
int res_spec; int res_spec;
/** initial precinct width */ /** initial precinct width */
int prcw_init[J2K_MAXRLVLS]; int prcw_init[OPJ_J2K_MAXRLVLS];
/** initial precinct height */ /** initial precinct height */
int prch_init[J2K_MAXRLVLS]; int prch_init[OPJ_J2K_MAXRLVLS];
/**@name command line encoder parameters (not used inside the librar y) */ /**@name command line encoder parameters (not used inside the librar y) */
/*@{*/ /*@{*/
/** input file name */ /** input file name */
char infile[OPJ_PATH_LEN]; char infile[OPJ_PATH_LEN];
/** output file name */ /** output file name */
char outfile[OPJ_PATH_LEN]; char outfile[OPJ_PATH_LEN];
/** DEPRECATED. Index generation is now handeld with the opj_encode_ with_info() function. Set to NULL */ /** DEPRECATED. Index generation is now handeld with the opj_encode_ with_info() function. Set to NULL */
int index_on; int index_on;
/** DEPRECATED. Index generation is now handeld with the opj_encode_ with_info() function. Set to NULL */ /** DEPRECATED. Index generation is now handeld with the opj_encode_ with_info() function. Set to NULL */
skipping to change at line 308 skipping to change at line 336
/** subsampling value for dx */ /** subsampling value for dx */
int subsampling_dx; int subsampling_dx;
/** subsampling value for dy */ /** subsampling value for dy */
int subsampling_dy; int subsampling_dy;
/** input file format 0: PGX, 1: PxM, 2: BMP 3:TIF*/ /** input file format 0: PGX, 1: PxM, 2: BMP 3:TIF*/
int decod_format; int decod_format;
/** output file format 0: J2K, 1: JP2, 2: JPT */ /** output file format 0: J2K, 1: JP2, 2: JPT */
int cod_format; int cod_format;
/*@}*/ /*@}*/
/* UniPG>> */ /* UniPG>> */ /* NOT YET USED IN THE V2 VERSION OF OPENJPEG */
/**@name JPWL encoding parameters */ /**@name JPWL encoding parameters */
/*@{*/ /*@{*/
/** enables writing of EPC in MH, thus activating JPWL */ /** 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) */ /** error protection method for MH (0,1,16,32,37-128) */
int jpwl_hprot_MH; int jpwl_hprot_MH;
/** tile number of header protection specification (>=0) */ /** tile number of header protection specification (>=0) */
int jpwl_hprot_TPH_tileno[JPWL_MAX_NO_TILESPECS]; int jpwl_hprot_TPH_tileno[JPWL_MAX_NO_TILESPECS];
/** error protection methods for TPHs (0,1,16,32,37-128) */ /** error protection methods for TPHs (0,1,16,32,37-128) */
int jpwl_hprot_TPH[JPWL_MAX_NO_TILESPECS]; int jpwl_hprot_TPH[JPWL_MAX_NO_TILESPECS];
/** tile number of packet protection specification (>=0) */ /** tile number of packet protection specification (>=0) */
int jpwl_pprot_tileno[JPWL_MAX_NO_PACKSPECS]; int jpwl_pprot_tileno[JPWL_MAX_NO_PACKSPECS];
/** packet number of packet protection specification (>=0) */ /** packet number of packet protection specification (>=0) */
int jpwl_pprot_packno[JPWL_MAX_NO_PACKSPECS]; int jpwl_pprot_packno[JPWL_MAX_NO_PACKSPECS];
skipping to change at line 353 skipping to change at line 381
int max_comp_size; int max_comp_size;
/** Profile name*/ /** Profile name*/
OPJ_RSIZ_CAPABILITIES cp_rsiz; OPJ_RSIZ_CAPABILITIES cp_rsiz;
/** Tile part generation*/ /** Tile part generation*/
char tp_on; char tp_on;
/** Flag for Tile part generation*/ /** Flag for Tile part generation*/
char tp_flag; char tp_flag;
/** MCT (multiple component transform) */ /** MCT (multiple component transform) */
char tcp_mct; char tcp_mct;
/** Enable JPIP indexing*/ /** Enable JPIP indexing*/
opj_bool jpip_on; OPJ_BOOL jpip_on;
/** Naive implementation of MCT restricted to a single reversible ar
ray based encoding without offset concerning all the components. */
void * mct_data;
} opj_cparameters_t; } opj_cparameters_t;
#define OPJ_DPARAMETERS_IGNORE_PCLR_CMAP_CDEF_FLAG 0x0001 #define OPJ_DPARAMETERS_IGNORE_PCLR_CMAP_CDEF_FLAG 0x0001
/** /**
Decompression parameters * Decompression parameters
*/ * */
typedef struct opj_dparameters { typedef struct opj_dparameters {
/** /**
Set the number of highest resolution levels to be discarded. Set the number of highest resolution levels to be discarded.
The image resolution is effectively divided by 2 to the power of the number of discarded levels. The image resolution is effectively divided by 2 to the power of the number of discarded levels.
The reduce factor is limited by the smallest total number of decompo sition levels among tiles. The reduce factor is limited by the smallest total number of decompo sition levels among tiles.
if != 0, then original dimension divided by 2^(reduce); if != 0, then original dimension divided by 2^(reduce);
if == 0 or not used, image is decoded to the full resolution if == 0 or not used, image is decoded to the full resolution
*/ */
int cp_reduce; OPJ_UINT32 cp_reduce;
/** /**
Set the maximum number of quality layers to decode. Set the maximum number of quality layers to decode.
If there are less quality layers than the specified number, all the quality layers are decoded. If there are less quality layers than the specified number, all the quality layers are decoded.
if != 0, then only the first "layer" layers are decoded; if != 0, then only the first "layer" layers are decoded;
if == 0 or not used, all the quality layers are decoded if == 0 or not used, all the quality layers are decoded
*/ */
int cp_layer; OPJ_UINT32 cp_layer;
/**@name command line encoder parameters (not used inside the librar y) */ /**@name command line decoder parameters (not used inside the librar y) */
/*@{*/ /*@{*/
/** input file name */ /** input file name */
char infile[OPJ_PATH_LEN]; char infile[OPJ_PATH_LEN];
/** output file name */ /** output file name */
char outfile[OPJ_PATH_LEN]; char outfile[OPJ_PATH_LEN];
/** input file format 0: J2K, 1: JP2, 2: JPT */ /** input file format 0: J2K, 1: JP2, 2: JPT */
int decod_format; int decod_format;
/** output file format 0: PGX, 1: PxM, 2: BMP */ /** output file format 0: PGX, 1: PxM, 2: BMP */
int cod_format; int cod_format;
/** Decoding area left boundary */
OPJ_UINT32 DA_x0;
/** Decoding area right boundary */
OPJ_UINT32 DA_x1;
/** Decoding area up boundary */
OPJ_UINT32 DA_y0;
/** Decoding area bottom boundary */
OPJ_UINT32 DA_y1;
/** Verbose mode */
OPJ_BOOL m_verbose;
/** tile number ot the decoded tile*/
OPJ_UINT32 tile_index;
/** Nb of tile to decode */
OPJ_UINT32 nb_tile_to_decode;
/*@}*/ /*@}*/
/* UniPG>> */ /* UniPG>> */ /* NOT YET USED IN THE V2 VERSION OF OPENJPEG */
/**@name JPWL decoding parameters */ /**@name JPWL decoding parameters */
/*@{*/ /*@{*/
/** activates the JPWL correction capabilities */ /** activates the JPWL correction capabilities */
opj_bool jpwl_correct; OPJ_BOOL jpwl_correct;
/** expected number of components */ /** expected number of components */
int jpwl_exp_comps; int jpwl_exp_comps;
/** maximum number of tiles */ /** maximum number of tiles */
int jpwl_max_tiles; int jpwl_max_tiles;
/*@}*/ /*@}*/
/* <<UniPG */ /* <<UniPG */
/**
Specify whether the decoding should be done on the entire codestream
, or be limited to the main header
Limiting the decoding to the main header makes it possible to extrac
t the characteristics of the codestream
if == NO_LIMITATION, the entire codestream is decoded;
if == LIMIT_TO_MAIN_HEADER, only the main header is decoded;
*/
OPJ_LIMIT_DECODING cp_limit_decoding;
unsigned int flags; unsigned int flags;
} opj_dparameters_t;
/** Common fields between JPEG-2000 compression and decompression master st
ructs. */
#define opj_common_fields \
opj_event_mgr_t *event_mgr; /**< pointer to the event manager */
\
void * client_data; /**< Available for use by ap
plication */\
opj_bool is_decompressor; /**< So common code can tell which i
s which */\
OPJ_CODEC_FORMAT codec_format; /**< selected codec */\
void *j2k_handle; /**< pointer to the J2K code
c */\
void *jp2_handle; /**< pointer to the JP2 code
c */\
void *mj2_handle /**< pointer to the MJ2 code
c */
/* Routines that are to be used by both halves of the library are declared } opj_dparameters_t;
* to receive a pointer to this structure. There are no actual instances o
f
* 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 * JPEG2000 codec V2.
*/ * */
typedef struct opj_dinfo { typedef void * opj_codec_t;
/** Fields shared with opj_cinfo_t */
opj_common_fields;
/* other specific fields go here */
} opj_dinfo_t;
/* /*
========================================================== ==========================================================
I/O stream typedef definitions I/O stream typedef definitions
========================================================== ==========================================================
*/ */
/* /**
* Stream open flags. * Stream open flags.
*/ * */
/** The stream was opened for reading. */ /** The stream was opened for reading. */
#define OPJ_STREAM_READ 0x0001 #define OPJ_STREAM_READ OPJ_TRUE
/** The stream was opened for writing. */ /** The stream was opened for writing. */
#define OPJ_STREAM_WRITE 0x0002 #define OPJ_STREAM_WRITE OPJ_FALSE
/** /*
Byte input-output stream (CIO) * Callback function prototype for read function
*/ */
typedef struct opj_cio { typedef OPJ_SIZE_T (* opj_stream_read_fn) (void * p_buffer, OPJ_SIZE_T p_nb
/** codec context */ _bytes, void * p_user_data) ;
opj_common_ptr cinfo;
/** open mode (read/write) either OPJ_STREAM_READ or OPJ_STREAM_WRIT /*
E */ * Callback function prototype for write function
int openmode; */
/** pointer to the start of the buffer */ typedef OPJ_SIZE_T (* opj_stream_write_fn) (void * p_buffer, OPJ_SIZE_T p_n
unsigned char *buffer; b_bytes, void * p_user_data) ;
/** buffer size in bytes */
int length;
/** pointer to the start of the stream */ /*
unsigned char *start; * Callback function prototype for skip function
/** pointer to the end of the stream */ */
unsigned char *end; typedef OPJ_OFF_T (* opj_stream_skip_fn) (OPJ_OFF_T p_nb_bytes, void * p_us
/** pointer to the current position */ er_data) ;
unsigned char *bp;
} opj_cio_t; /*
* Callback function prototype for seek function
*/
typedef OPJ_BOOL (* opj_stream_seek_fn) (OPJ_OFF_T p_nb_bytes, void * p_use
r_data) ;
/*
* JPEG2000 Stream.
*/
typedef void * opj_stream_t;
/* /*
========================================================== ==========================================================
image typedef definitions image typedef definitions
========================================================== ==========================================================
*/ */
/** /**
Defines a single image component * Defines a single image component
*/ * */
typedef struct opj_image_comp { typedef struct opj_image_comp {
/** XRsiz: horizontal separation of a sample of ith component with r espect to the reference grid */ /** XRsiz: horizontal separation of a sample of ith component with r espect to the reference grid */
int dx; OPJ_UINT32 dx;
/** YRsiz: vertical separation of a sample of ith component with res pect to the reference grid */ /** YRsiz: vertical separation of a sample of ith component with res pect to the reference grid */
int dy; OPJ_UINT32 dy;
/** data width */ /** data width */
int w; OPJ_UINT32 w;
/** data height */ /** data height */
int h; OPJ_UINT32 h;
/** x component offset compared to the whole image */ /** x component offset compared to the whole image */
int x0; OPJ_UINT32 x0;
/** y component offset compared to the whole image */ /** y component offset compared to the whole image */
int y0; OPJ_UINT32 y0;
/** precision */ /** precision */
int prec; OPJ_UINT32 prec;
/** image depth in bits */ /** image depth in bits */
int bpp; OPJ_UINT32 bpp;
/** signed (1) / unsigned (0) */ /** signed (1) / unsigned (0) */
int sgnd; OPJ_UINT32 sgnd;
/** number of decoded resolution */ /** number of decoded resolution */
int resno_decoded; OPJ_UINT32 resno_decoded;
/** number of division by 2 of the out image compared to the origina l size of image */ /** number of division by 2 of the out image compared to the origina l size of image */
int factor; OPJ_UINT32 factor;
/** image component data */ /** image component data */
int *data; OPJ_INT32 *data;
} opj_image_comp_t; } opj_image_comp_t;
/** /**
Defines image data and characteristics * Defines image data and characteristics
*/ * */
typedef struct opj_image { typedef struct opj_image {
/** XOsiz: horizontal offset from the origin of the reference grid t o the left side of the image area */ /** XOsiz: horizontal offset from the origin of the reference grid t o 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 */ /** 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 */ /** Xsiz: width of the reference grid */
int x1; OPJ_UINT32 x1;
/** Ysiz: height of the reference grid */ /** Ysiz: height of the reference grid */
int y1; OPJ_UINT32 y1;
/** number of components in the image */ /** number of components in the image */
int numcomps; OPJ_UINT32 numcomps;
/** color space: sRGB, Greyscale or YUV */ /** color space: sRGB, Greyscale or YUV */
OPJ_COLOR_SPACE color_space; OPJ_COLOR_SPACE color_space;
/** image components */ /** image components */
opj_image_comp_t *comps; opj_image_comp_t *comps;
/** 'restricted' ICC profile */ /** 'restricted' ICC profile */
unsigned char *icc_profile_buf; OPJ_BYTE *icc_profile_buf;
/** size of ICC profile */ /** size of ICC profile */
int icc_profile_len; OPJ_UINT32 icc_profile_len;
} opj_image_t; } opj_image_t;
/** /**
Component parameters structure used by the opj_image_create function * Component parameters structure used by the opj_image_create function
*/ * */
typedef struct opj_image_comptparm { typedef struct opj_image_comptparm {
/** XRsiz: horizontal separation of a sample of ith component with r espect to the reference grid */ /** XRsiz: horizontal separation of a sample of ith component with r espect to the reference grid */
int dx; OPJ_UINT32 dx;
/** YRsiz: vertical separation of a sample of ith component with res pect to the reference grid */ /** YRsiz: vertical separation of a sample of ith component with res pect to the reference grid */
int dy; OPJ_UINT32 dy;
/** data width */ /** data width */
int w; OPJ_UINT32 w;
/** data height */ /** data height */
int h; OPJ_UINT32 h;
/** x component offset compared to the whole image */ /** x component offset compared to the whole image */
int x0; OPJ_UINT32 x0;
/** y component offset compared to the whole image */ /** y component offset compared to the whole image */
int y0; OPJ_UINT32 y0;
/** precision */ /** precision */
int prec; OPJ_UINT32 prec;
/** image depth in bits */ /** image depth in bits */
int bpp; OPJ_UINT32 bpp;
/** signed (1) / unsigned (0) */ /** signed (1) / unsigned (0) */
int sgnd; OPJ_UINT32 sgnd;
} opj_image_cmptparm_t; } opj_image_cmptparm_t;
/* /*
========================================================== ==========================================================
Information on the JPEG 2000 codestream Information on the JPEG 2000 codestream
========================================================== ==========================================================
*/ */
/* QUITE EXPERIMENTAL FOR THE MOMENT */
/** /**
Index structure : Information concerning a packet inside tile * Index structure : Information concerning a packet inside tile
*/ * */
typedef struct opj_packet_info { typedef struct opj_packet_info {
/** packet start position (including SOP marker if it exists) */ /** packet start position (including SOP marker if it exists) */
int start_pos; OPJ_OFF_T start_pos;
/** end of packet header position (including EPH marker if it exists )*/ /** end of packet header position (including EPH marker if it exists )*/
int end_ph_pos; OPJ_OFF_T end_ph_pos;
/** packet end position */ /** packet end position */
int end_pos; OPJ_OFF_T end_pos;
/** packet distorsion */ /** packet distorsion */
double disto; double disto;
} opj_packet_info_t; } opj_packet_info_t;
/* UniPG>> */ /* UniPG>> */
/** /**
Marker structure * Marker structure
*/ * */
typedef struct opj_marker_info_t { typedef struct opj_marker_info {
/** marker type */ /** marker type */
unsigned short int type; unsigned short int type;
/** position in codestream */ /** position in codestream */
int pos; OPJ_OFF_T pos;
/** length, marker val included */ /** length, marker val included */
int len; int len;
} opj_marker_info_t; } opj_marker_info_t;
/* <<UniPG */ /* <<UniPG */
/** /**
Index structure : Information concerning tile-parts * Index structure : Information concerning tile-parts
*/ */
typedef struct opj_tp_info { typedef struct opj_tp_info {
/** start position of tile part */ /** start position of tile part */
int tp_start_pos; int tp_start_pos;
/** end position of tile part header */ /** end position of tile part header */
int tp_end_header; int tp_end_header;
/** end position of tile part */ /** end position of tile part */
int tp_end_pos; int tp_end_pos;
/** start packet of tile part */ /** start packet of tile part */
int tp_start_pack; int tp_start_pack;
/** number of packets of tile part */ /** number of packets of tile part */
int tp_numpacks; int tp_numpacks;
} opj_tp_info_t; } opj_tp_info_t;
/** /**
Index structure : information regarding tiles * Index structure : information regarding tiles
*/ */
typedef struct opj_tile_info { typedef struct opj_tile_info {
/** value of thresh for each layer by tile cfr. Marcela */ /** value of thresh for each layer by tile cfr. Marcela */
double *thresh; double *thresh;
/** number of tile */ /** number of tile */
int tileno; int tileno;
/** start position */ /** start position */
int start_pos; int start_pos;
/** end position of the header */ /** end position of the header */
int end_header; int end_header;
skipping to change at line 667 skipping to change at line 673
opj_marker_info_t *marker; opj_marker_info_t *marker;
/** actual size of markers array */ /** actual size of markers array */
int maxmarknum; int maxmarknum;
/** number of tile parts */ /** number of tile parts */
int num_tps; int num_tps;
/** information concerning tile parts */ /** information concerning tile parts */
opj_tp_info_t *tp; opj_tp_info_t *tp;
} opj_tile_info_t; } opj_tile_info_t;
/** /**
Index structure of the codestream * Index structure of the codestream
*/ */
typedef struct opj_codestream_info { typedef struct opj_codestream_info {
/** maximum distortion reduction on the whole image (add for Marcela ) */ /** maximum distortion reduction on the whole image (add for Marcela ) */
double D_max; double D_max;
/** packet number */ /** packet number */
int packno; int packno;
/** writing the packet in the index with t2_encode_packets */ /** writing the packet in the index with t2_encode_packets */
int index_write; int index_write;
/** image width */ /** image width */
int image_w; int image_w;
skipping to change at line 718 skipping to change at line 724
/** main header position */ /** main header position */
int main_head_start; int main_head_start;
/** main header position */ /** main header position */
int main_head_end; int main_head_end;
/** codestream's size */ /** codestream's size */
int codestream_size; int codestream_size;
/** information regarding tiles inside image */ /** information regarding tiles inside image */
opj_tile_info_t *tile; opj_tile_info_t *tile;
} opj_codestream_info_t; } opj_codestream_info_t;
/* <----------------------------------------------------------- */
/* new output managment of the codestream information and index */
/**
* Tile-component coding parameters information
*/
typedef struct opj_tccp_info
{
/** component index */
OPJ_UINT32 compno;
/** coding style */
OPJ_UINT32 csty;
/** number of resolutions */
OPJ_UINT32 numresolutions;
/** code-blocks width */
OPJ_UINT32 cblkw;
/** code-blocks height */
OPJ_UINT32 cblkh;
/** code-block coding style */
OPJ_UINT32 cblksty;
/** discrete wavelet transform identifier */
OPJ_UINT32 qmfbid;
/** quantisation style */
OPJ_UINT32 qntsty;
/** stepsizes used for quantization */
OPJ_UINT32 stepsizes_mant[OPJ_J2K_MAXBANDS];
/** stepsizes used for quantization */
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[OPJ_J2K_MAXRLVLS];
/** precinct height */
OPJ_UINT32 prch[OPJ_J2K_MAXRLVLS];
}
opj_tccp_info_t;
/**
* Tile coding parameters information
*/
typedef struct opj_tile_v2_info {
/** number (index) of tile */
int tileno;
/** coding style */
OPJ_UINT32 csty;
/** progression order */
OPJ_PROG_ORDER prg;
/** number of layers */
OPJ_UINT32 numlayers;
/** multi-component transform identifier */
OPJ_UINT32 mct;
/** information concerning tile component parameters*/
opj_tccp_info_t *tccp_info;
} opj_tile_info_v2_t;
/**
* Information structure about the codestream (FIXME should be expand and e
nhance)
*/
typedef struct opj_codestream_info_v2 {
/* Tile info */
/** tile origin in x = XTOsiz */
OPJ_UINT32 tx0;
/** tile origin in y = YTOsiz */
OPJ_UINT32 ty0;
/** tile size in x = XTsiz */
OPJ_UINT32 tdx;
/** tile size in y = YTsiz */
OPJ_UINT32 tdy;
/** number of tiles in X */
OPJ_UINT32 tw;
/** number of tiles in Y */
OPJ_UINT32 th;
/** number of components*/
OPJ_UINT32 nbcomps;
/** Default information regarding tiles inside image */
opj_tile_info_v2_t m_default_tile_info;
/** information regarding tiles inside image */
opj_tile_info_v2_t *tile_info; /* FIXME not used for the moment */
} opj_codestream_info_v2_t;
/**
* Index structure about a tile part
*/
typedef struct opj_tp_index {
/** start position */
OPJ_OFF_T start_pos;
/** end position of the header */
OPJ_OFF_T end_header;
/** end position */
OPJ_OFF_T end_pos;
} opj_tp_index_t;
/**
* Index structure about a tile
*/
typedef struct opj_tile_index {
/** tile index */
OPJ_UINT32 tileno;
/** number of tile parts */
OPJ_UINT32 nb_tps;
/** current nb of tile part (allocated)*/
OPJ_UINT32 current_nb_tps;
/** current tile-part index */
OPJ_UINT32 current_tpsno;
/** information concerning tile parts */
opj_tp_index_t *tp_index;
/* UniPG>> */ /* NOT USED FOR THE MOMENT IN THE V2 VERSION */
/** number of markers */
OPJ_UINT32 marknum;
/** list of markers */
opj_marker_info_t *marker;
/** actual size of markers array */
OPJ_UINT32 maxmarknum;
/* <<UniPG */
/** packet number */
OPJ_UINT32 nb_packet;
/** information concerning packets inside tile */
opj_packet_info_t *packet_index;
} opj_tile_index_t;
/**
* Index structure of the codestream (FIXME should be expand and enhance)
*/
typedef struct opj_codestream_index {
/** main header start position (SOC position) */
OPJ_OFF_T main_head_start;
/** main header end position (first SOT position) */
OPJ_OFF_T main_head_end;
/** codestream's size */
OPJ_UINT64 codestream_size;
/* UniPG>> */ /* NOT USED FOR THE MOMENT IN THE V2 VERSION */
/** number of markers */
OPJ_UINT32 marknum;
/** list of markers */
opj_marker_info_t *marker;
/** actual size of markers array */
OPJ_UINT32 maxmarknum;
/* <<UniPG */
/** */
OPJ_UINT32 nb_of_tiles;
/** */
opj_tile_index_t *tile_index; /* FIXME not used for the moment */
}opj_codestream_index_t;
/* -----------------------------------------------------------> */
/*
==========================================================
Metadata from the JP2file
==========================================================
*/
/**
* Info structure of the JP2 file
* EXPERIMENTAL FOR THE MOMENT
*/
typedef struct opj_jp2_metadata {
/** */
OPJ_INT32 not_used;
} opj_jp2_metadata_t;
/**
* Index structure of the JP2 file
* EXPERIMENTAL FOR THE MOMENT
*/
typedef struct opj_jp2_index {
/** */
OPJ_INT32 not_used;
} opj_jp2_index_t;
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
/* /*
========================================================== ==========================================================
openjpeg version openjpeg version
========================================================== ==========================================================
*/ */
/* Get the version of the openjpeg library*/
OPJ_API const char * OPJ_CALLCONV opj_version(void); OPJ_API const char * OPJ_CALLCONV opj_version(void);
/* /*
========================================================== ==========================================================
image functions definitions image functions definitions
========================================================== ==========================================================
*/ */
/** /**
Create an image * Create an image
@param numcmpts number of components *
@param cmptparms components parameters * @param numcmpts number of components
@param clrspc image color space * @param cmptparms components parameters
@return returns a new image structure if successful, returns NULL otherwise * @param clrspc image color space
*/ * @return returns a new image structure if successful, returns NULL o
OPJ_API opj_image_t* OPJ_CALLCONV opj_image_create(int numcmpts, opj_image_ therwise
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 * 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); OPJ_API void OPJ_CALLCONV opj_image_destroy(opj_image_t *image);
/**
* Creates an image without allocating memory for the image (used in the ne
w version of the library).
*
* @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 stream functions definitions
========================================================== ==========================================================
*/ */
/** /**
Open and allocate a memory stream for read / write. * Creates an abstract stream. This function does nothing except allocating
On reading, the user must provide a buffer containing encoded data. The buf memory and initializing the abstract stream.
fer will be *
wrapped by the returned CIO handle. * @param p_is_input if set to true then the stream will
On writing, buffer parameters must be set to 0: a buffer will be allocated be an input stream, an output stream else.
by the library *
to contain encoded data. * @return a stream object.
@param cinfo Codec context info
@param buffer Reading: buffer address. Writing: NULL
@param length Reading: buffer length. Writing: 0
@return Returns a CIO handle if successful, returns NULL otherwise
*/ */
OPJ_API opj_cio_t* OPJ_CALLCONV opj_cio_open(opj_common_ptr cinfo, unsigned char *buffer, int length); OPJ_API opj_stream_t* OPJ_CALLCONV opj_stream_default_create(OPJ_BOOL p_is_ input);
/** /**
Close and free a CIO handle * Creates an abstract stream. This function does nothing except allocating
@param cio CIO handle to free memory and initializing the abstract stream.
*
* @param p_buffer_size FIXME DOC
* @param p_is_input if set to true then the stream will
be an input stream, an output stream else.
*
* @return a stream object.
*/ */
OPJ_API void OPJ_CALLCONV opj_cio_close(opj_cio_t *cio); OPJ_API opj_stream_t* OPJ_CALLCONV opj_stream_create(OPJ_SIZE_T p_buffer_si ze, OPJ_BOOL p_is_input);
/** /**
Get position in byte stream * Destroys a stream created by opj_create_stream. This function does NOT c
@param cio CIO handle lose the abstract stream. If needed the user must
@return Returns the position in bytes * close its own implementation of the stream.
*
* @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
* @param p_function the function to use a read function.
*/ */
OPJ_API int OPJ_CALLCONV cio_tell(opj_cio_t *cio); OPJ_API void OPJ_CALLCONV opj_stream_set_read_function(opj_stream_t* p_stre
am, opj_stream_read_fn p_function);
/** /**
Set position in byte stream * Sets the given function to be used as a write function.
@param cio CIO handle * @param p_stream the stream to modify
@param pos Position, in number of bytes, from the beginning of the stream * @param p_function the function to use a write function
.
*/ */
OPJ_API void OPJ_CALLCONV cio_seek(opj_cio_t *cio, int pos); OPJ_API void OPJ_CALLCONV opj_stream_set_write_function(opj_stream_t* p_str
eam, opj_stream_write_fn p_function);
/**
* Sets the given function to be used as a skip function.
* @param p_stream the stream to modify
* @param p_function the function to use a skip function.
*/
OPJ_API void OPJ_CALLCONV opj_stream_set_skip_function(opj_stream_t* p_stre
am, opj_stream_skip_fn p_function);
/**
* Sets the given function to be used as a seek function, the stream is the
n seekable.
* @param p_stream the stream to modify
* @param p_function the function to use a skip function.
*/
OPJ_API void OPJ_CALLCONV opj_stream_set_seek_function(opj_stream_t* p_stre
am, 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
* @param p_data the data to set.
*/
OPJ_API void OPJ_CALLCONV opj_stream_set_user_data (opj_stream_t* p_stream,
void * p_data);
/**
* Sets the length of the user data for the stream.
*
* @param p_stream the stream to modify
* @param data_length length of the user_data.
*/
OPJ_API void OPJ_CALLCONV opj_stream_set_user_data_length(opj_stream_t* p_s
tream, OPJ_UINT64 data_length);
/**
* Helper function.
* Sets the stream to be a file stream. The FILE must have been open previo
usly.
* @param p_file the file stream to operate on
* @param p_is_read_stream whether the stream is a read stream (true) or n
ot (false)
*/
OPJ_API opj_stream_t* OPJ_CALLCONV opj_stream_create_default_file_stream (F
ILE * p_file, OPJ_BOOL p_is_read_stream);
/**
* FIXME DOC
* @param p_file the file stream to operate on
* @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 n
ot (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);
/* /*
========================================================== ==========================================================
event manager functions definitions event manager functions definitions
========================================================== ==========================================================
*/ */
/**
OPJ_API opj_event_mgr_t* OPJ_CALLCONV opj_set_event_mgr(opj_common_ptr cinf * Set the info handler use by openjpeg.
o, opj_event_mgr_t *event_mgr, void *context); * @param p_codec the codec previously initialise
* @param p_callback the callback function which will be used
* @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_msg_callback p_callb
ack,
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 client object where will be returned the message
*/
OPJ_API OPJ_BOOL OPJ_CALLCONV opj_set_warning_handler(opj_codec_t * p_codec
,
opj_msg_callback p_ca
llback,
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 client object where will be returned the message
*/
OPJ_API OPJ_BOOL OPJ_CALLCONV opj_set_error_handler(opj_codec_t * p_codec,
opj_msg_callback p_call
back,
void * p_user_data);
/* /*
========================================================== ==========================================================
codec functions definitions codec functions definitions
========================================================== ==========================================================
*/ */
/** /**
Creates a J2K/JPT/JP2 decompression structure * Creates a J2K/JP2 decompression structure
@param format Decoder to select * @param format Decoder to select
@return Returns a handle to a decompressor if successful, returns NULL othe *
rwise * @return Returns a handle to a decompressor if successful, returns NULL o
*/ therwise
OPJ_API opj_dinfo_t* OPJ_CALLCONV opj_create_decompress(OPJ_CODEC_FORMAT fo * */
rmat); OPJ_API opj_codec_t* OPJ_CALLCONV opj_create_decompress(OPJ_CODEC_FORMAT fo
rmat);
/** /**
Destroy a decompressor handle * Destroy a decompressor handle
@param dinfo decompressor handle to destroy *
*/ * @param p_codec decompressor handle to destroy
OPJ_API void OPJ_CALLCONV opj_destroy_decompress(opj_dinfo_t *dinfo); */
OPJ_API void OPJ_CALLCONV opj_destroy_codec(opj_codec_t * p_codec);
/** /**
Set decoding parameters to default values * Read after the codestream if necessary
@param parameters Decompression parameters * @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_stream);
/**
* Set decoding parameters to default values
* @param parameters Decompression parameters
*/
OPJ_API void OPJ_CALLCONV opj_set_default_decoder_parameters(opj_dparameter s_t *parameters); OPJ_API void OPJ_CALLCONV opj_set_default_decoder_parameters(opj_dparameter s_t *parameters);
/** /**
Setup the decoder decoding parameters using user parameters. * Setup the decoder with decompression parameters provided by the user and
Decoding parameters are returned in j2k->cp. with the message handler
@param dinfo decompressor handle * provided by the user.
@param parameters decompression parameters *
*/ * @param p_codec decompressor handler
OPJ_API void OPJ_CALLCONV opj_setup_decoder(opj_dinfo_t *dinfo, opj_dparame * @param parameters decompression parameters
ters_t *parameters); *
* @return true if the decoder is correctly set
*/
OPJ_API OPJ_BOOL OPJ_CALLCONV opj_setup_decoder(opj_codec_t *p_codec,
opj_dparameters_t *parameters );
/** /**
Decode an image from a JPEG-2000 codestream * Decodes an image header.
@param dinfo decompressor handle *
@param cio Input buffer stream * @param p_stream the jpeg2000 stream.
@return Returns a decoded image if successful, returns NULL otherwise * @param p_codec the jpeg2000 codec to read.
*/ * @param p_image the image structure initialized with
OPJ_API opj_image_t* OPJ_CALLCONV opj_decode(opj_dinfo_t *dinfo, opj_cio_t the characteristics of encoded image.
*cio); *
* @return true if the main header of the co
destream and the JP2 header is correctly read.
*/
OPJ_API OPJ_BOOL OPJ_CALLCONV opj_read_header ( opj_stream_t *p_stre
am,
opj_codec_t *p_codec,
opj_image_t **p_image);
/** /**
Decode an image from a JPEG-2000 codestream and extract the codestream info * Sets the given area to be decoded. This function should be called right
rmation after opj_read_header and before any tile header reading.
@param dinfo decompressor handle *
@param cio Input buffer stream * @param p_codec the jpeg2000 codec.
@param cstr_info Codestream information structure if needed afterwards, NUL * @param p_image the decoded image previously setted by opj_r
L otherwise ead_header
@return Returns a decoded image if successful, returns NULL otherwise * @param p_start_x the left position of the rectangle t
*/ o decode (in image coordinates).
OPJ_API opj_image_t* OPJ_CALLCONV opj_decode_with_info(opj_dinfo_t *dinfo, * @param p_end_x the right position of the rectangle
opj_cio_t *cio, opj_codestream_info_t *cstr_info); to decode (in image coordinates).
* @param p_start_y the up position of the rectangle to
decode (in image coordinates).
* @param p_end_y the bottom position of the rectangle
to decode (in image coordinates).
*
* @return true if the area could be set.
*/
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 );
/** /**
Creates a J2K/JP2 compression structure * Decode an image from a JPEG-2000 codestream
@param format Coder to select *
@return Returns a handle to a compressor if successful, returns NULL otherw * @param p_decompressor decompressor handle
ise * @param p_stream Input buffer stream
*/ * @param p_image the decoded image
OPJ_API opj_cinfo_t* OPJ_CALLCONV opj_create_compress(OPJ_CODEC_FORMAT form * @return true if success, otherwise f
at); alse
* */
OPJ_API OPJ_BOOL OPJ_CALLCONV opj_decode( opj_codec_t *p_decompressor,
opj_stream_t *p_stream,
opj_image_t *p_image);
/** /**
Destroy a compressor handle * Get the decoded tile from the codec
@param cinfo compressor handle to destroy *
*/ * @param p_codec the jpeg2000 codec.
OPJ_API void OPJ_CALLCONV opj_destroy_compress(opj_cinfo_t *cinfo); * @param p_stream input streamm
* @param p_image output image
* @param tile_index index of the tile which will be deco
de
*
* @return true if success, otherwise f
alse
*/
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);
/**
* Set the resolution factor of the decoded image
* @param p_codec the jpeg2000 codec.
* @param res_factor resolution factor to set
*
* @return true if success, otherwise f
alse
*/
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_tile_index the index of the tile to write. At t
he 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 IN
TERLEAVING should be set.
* @param p_data_size this value os used to make s
ure the data being written is correct. The size must be equal to the sum fo
r each component of tile_width * tile_height * component_size. component_si
ze 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.
* The user may need to refer to the image got by opj_read_header to unders
tand the size being taken by the tile.
*
* @param p_codec the jpeg2000 codec.
* @param p_tile_index pointer to a value that will hold the index
of the tile being decoded, in case of success.
* @param p_data_size pointer to a value that will hold th
e maximum size of the decoded data, in case of success. In case
* of truncated codestr
eams, the actual number of bytes decoded may be lower. The computation of t
he size is the same
* as depicted in opj_w
rite_tile.
* @param p_tile_x0 pointer to a value that will hold th
e x0 pos of the tile (in the image).
* @param p_tile_y0 pointer to a value that will hold th
e y0 pos of the tile (in the image).
* @param p_tile_x1 pointer to a value that will hold th
e x1 pos of the tile (in the image).
* @param p_tile_y1 pointer to a value that will hold th
e y1 pos of the tile (in the image).
* @param p_nb_comps pointer to a value that will hold th
e number of components in the tile.
* @param p_should_go_on pointer to a boolean that will hold the fact
that the decoding should go on. In case the
* codestream is over a
t the time of the call, the value will be set to false. The user should the
n stop
* the decoding.
* @param p_stream the stream to decode.
* @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_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 );
/**
* 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 unders
tand the size being taken by the tile.
*
* @param p_codec the jpeg2000 codec.
* @param p_tile_index the index of the tile being decoded, this sh
ould be the value set by opj_read_tile_header.
* @param p_data pointer to a memory block that will
hold the decoded data.
* @param p_data_size size of p_data. p_data_size should b
e bigger or equal to the value set by opj_read_tile_header.
* @param p_stream the stream to decode.
*
* @return true if the data could be decoded.
*/
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,
opj_stream_t *p_stream );
/* COMPRESSION FUNCTIONS*/
/**
* 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(OPJ_CODEC_FORMAT form
at);
/** /**
Set encoding parameters to default values, that means : Set encoding parameters to default values, that means :
<ul> <ul>
<li>Lossless <li>Lossless
<li>1 tile <li>1 tile
<li>Size of precinct : 2^15 x 2^15 (means 1 precinct) <li>Size of precinct : 2^15 x 2^15 (means 1 precinct)
<li>Size of code-block : 64 x 64 <li>Size of code-block : 64 x 64
<li>Number of resolutions: 6 <li>Number of resolutions: 6
<li>No SOP marker in the codestream <li>No SOP marker in the codestream
<li>No EPH marker in the codestream <li>No EPH marker in the codestream
skipping to change at line 874 skipping to change at line 1294
<li>Progression order: LRCP <li>Progression order: LRCP
<li>No index file <li>No index file
<li>No ROI upshifted <li>No ROI upshifted
<li>No offset of the origin of the image <li>No offset of the origin of the image
<li>No offset of the origin of the tiles <li>No offset of the origin of the tiles
<li>Reversible DWT 5-3 <li>Reversible DWT 5-3
</ul> </ul>
@param parameters Compression parameters @param parameters Compression parameters
*/ */
OPJ_API void OPJ_CALLCONV opj_set_default_encoder_parameters(opj_cparameter s_t *parameters); OPJ_API void OPJ_CALLCONV opj_set_default_encoder_parameters(opj_cparameter s_t *parameters);
/** /**
Setup the encoder parameters using the current image and using user paramet * Setup the encoder parameters using the current image and using user para
ers. meters.
@param cinfo Compressor handle * @param p_codec Compressor handle
@param parameters Compression parameters * @param parameters Compression parameters
@param image Input filled image * @param image Input filled image
*/ */
OPJ_API void OPJ_CALLCONV opj_setup_encoder(opj_cinfo_t *cinfo, opj_cparame OPJ_API OPJ_BOOL OPJ_CALLCONV opj_setup_encoder(opj_codec_t *p_codec,
ters_t *parameters, opj_image_t *image);
opj_cparameters_t *parameters,
opj_image_t *image);
/** /**
Encode an image into a JPEG-2000 codestream * Start to compress the current image.
3@param cinfo compressor handle * @param p_codec Compressor handle
@param cio Output buffer stream * @param image Input filled image
@param image Image to encode * @param p_stream Input stgream
@param index Depreacted -> Set to NULL. To extract index, used opj_encode_w */
ci() OPJ_API OPJ_BOOL OPJ_CALLCONV opj_start_compress ( opj_codec_t *p_codec
@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 * p_image,
, opj_image_t *image, char *index);
opj_stream_t *p_stream);
/** /**
Encode an image into a JPEG-2000 codestream and extract the codestream info * End to compress the current image.
rmation * @param p_codec Compressor handle
@param cinfo compressor handle * @param p_stream Input stgream
@param cio Output buffer stream */
@param image Image to encode OPJ_API OPJ_BOOL OPJ_CALLCONV opj_end_compress (opj_codec_t *p_codec,
@param cstr_info Codestream information structure if needed afterwards, NUL
L otherwise opj_stream_t *p_stream);
@return Returns true if successful, returns false otherwise
/**
* Encode an image into a JPEG-2000 codestream
* @param p_codec compressor handle
* @param p_stream Output buffer stream
*
* @return Returns true if successful, returns
false otherwise
*/
OPJ_API OPJ_BOOL OPJ_CALLCONV opj_encode(opj_codec_t *p_codec,
opj_stream_t *p_stream);
/*
==========================================================
codec output functions definitions
==========================================================
*/ */
OPJ_API opj_bool OPJ_CALLCONV opj_encode_with_info(opj_cinfo_t *cinfo, opj_ /* EXPERIMENTAL FUNCTIONS FOR NOW, USED ONLY IN J2K_DUMP*/
cio_t *cio, opj_image_t *image, opj_codestream_info_t *cstr_info);
/** /**
Destroy Codestream information after compression or decompression Destroy Codestream information after compression or decompression
@param cstr_info Codestream information structure @param cstr_info Codestream information structure
*/ */
OPJ_API void OPJ_CALLCONV opj_destroy_cstr_info(opj_codestream_info_t *cstr OPJ_API void OPJ_CALLCONV opj_destroy_cstr_info(opj_codestream_info_v2_t **
_info); cstr_info);
/**
* Dump the codec information into the output stream
*
* @param p_codec the jpeg2000 codec.
* @param info_flag type of information dump.
* @param output_stream output stream where dump the informations ge
t from the codec.
*
*/
OPJ_API void OPJ_CALLCONV opj_dump_codec( opj_codec_t *p_codec,
OPJ_INT32 info_flag,
FILE* output_stream);
/**
* Get the codestream information from the codec
*
* @param p_codec the jpeg2000 codec.
*
* @return a pointer to a codestream in
formation structure.
*
*/
OPJ_API opj_codestream_info_v2_t* OPJ_CALLCONV opj_get_cstr_info(opj_codec_
t *p_codec);
/**
* Get the codestream index from the codec
*
* @param p_codec the jpeg2000 codec.
*
* @return a pointer to a codestream in
dex structure.
*
*/
OPJ_API opj_codestream_index_t * OPJ_CALLCONV opj_get_cstr_index(opj_codec_
t *p_codec);
OPJ_API void OPJ_CALLCONV opj_destroy_cstr_index(opj_codestream_index_t **p
_cstr_index);
/**
* Get the JP2 file information from the codec FIXME
*
* @param p_codec the jpeg2000 codec.
*
* @return a pointer to a JP2 metadata
structure.
*
*/
OPJ_API opj_jp2_metadata_t* OPJ_CALLCONV opj_get_jp2_metadata(opj_codec_t *
p_codec);
/**
* Get the JP2 file index from the codec FIXME
*
* @param p_codec the jpeg2000 codec.
*
* @return a pointer to a JP2 index str
ucture.
*
*/
OPJ_API opj_jp2_index_t* OPJ_CALLCONV opj_get_jp2_index(opj_codec_t *p_code
c);
/*
==========================================================
MCT 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 imag
e.
*
* @return true if the parameters could be set.
*/
OPJ_API OPJ_BOOL OPJ_CALLCONV opj_set_MCT( opj_cparameters_t *parameters,
OPJ_FLOAT32 * pEncodingMa
trix,
OPJ_INT32 * p_dc_shift,
OPJ_UINT32 pNbComp);
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
#endif /* OPENJPEG_H */ #endif /* OPENJPEG_H */
 End of changes. 134 change blocks. 
356 lines changed or deleted 978 lines changed or added

This html diff was produced by rfcdiff 1.41.The latest version is available from http://tools.ietf.org/tools/rfcdiff/