2 * Copyright (c) 2001-2003, David Janssens
3 * Copyright (c) 2002-2003, Yannick Verschueren
4 * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe
5 * Copyright (c) 2005, Herv� Drolon, FreeImage Team
6 * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions
12 * 1. Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer.
14 * 2. Redistributions in binary form must reproduce the above copyright
15 * notice, this list of conditions and the following disclaimer in the
16 * documentation and/or other materials provided with the distribution.
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
19 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
22 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28 * POSSIBILITY OF SUCH DAMAGE.
33 #define OPENJPEG_VERSION "1.0.0"
35 #if defined(_WIN32) && !defined (OPJ_STATIC)
37 #define OPJ_EXPORT __declspec(dllexport)
39 #define OPJ_EXPORT __declspec(dllimport)
43 #define OPJ_EXPORT extern
50 ==========================================================
52 ==========================================================
55 #if defined(HAVE_STDBOOL_H)
57 The C language implementation does correctly provide the standard header
63 The C language implementation does not provide the standard header file
64 "stdbool.h" as required by ISO/IEC 9899:1999. Try to compensate for this
77 #endif /* __cplusplus */
80 ==========================================================
81 Useful constant definitions
82 ==========================================================
86 #define MAX_PATH 260 /**< Maximum allowed size for filenames */
89 #define J2K_MAXRLVLS 33 /**< Number of maximum resolution level authorized */
90 #define J2K_MAXBANDS (3*J2K_MAXRLVLS-2) /**< Number of maximum sub-band linked to number of resolution level */
93 ==========================================================
95 ==========================================================
98 /** Progression order */
99 typedef enum PROG_ORDER {
100 PROG_UNKNOWN = -1, /**< place-holder */
101 LRCP = 0, /**< layer-resolution-component-precinct order */
102 RLCP = 1, /**< resolution-layer-component-precinct order */
103 RPCL = 2, /**< resolution-precinct-component-layer order */
104 PCRL = 3, /**< precinct-component-resolution-layer order */
105 CPRL = 4 /**< component-precinct-resolution-layer order */
109 Supported image color spaces
111 typedef enum COLOR_SPACE {
112 CLRSPC_UNKNOWN = -1, /**< place-holder */
113 CLRSPC_SRGB = 1, /**< sRGB */
114 CLRSPC_GRAY = 2, /**< grayscale */
115 CLRSPC_SYCC = 3 /**< YUV */
121 typedef enum CODEC_FORMAT {
122 CODEC_UNKNOWN = -1, /**< place-holder */
123 CODEC_J2K = 0, /**< JPEG-2000 codestream : read/write */
124 CODEC_JPT = 1, /**< JPT-stream (JPEG 2000, JPIP) : read only */
125 CODEC_JP2 = 2 /**< JPEG-2000 file format : read/write */
129 ==========================================================
130 event manager typedef definitions
131 ==========================================================
135 Callback function prototype for events
136 @param msg Event message
139 typedef void (*opj_msg_callback) (const char *msg, void *client_data);
142 Message handler object
147 <li>Debugging messages
150 typedef struct opj_event_mgr {
151 /** Error message callback if available, NULL otherwise */
152 opj_msg_callback error_handler;
153 /** Warning message callback if available, NULL otherwise */
154 opj_msg_callback warning_handler;
155 /** Debug message callback if available, NULL otherwise */
156 opj_msg_callback info_handler;
161 ==========================================================
162 codec typedef definitions
163 ==========================================================
167 Progression order changes
169 typedef struct opj_poc {
171 int layno1, resno1, compno1;
178 Compression parameters
180 typedef struct opj_cparameters {
181 /** size of tile: tile_size_on = false (not in argument) or = true (in argument) */
191 /** allocation by rate/distortion */
193 /** allocation by fixed layer */
195 /** add fixed_quality */
196 int cp_fixed_quality;
199 /** comment for coding */
201 /** csty : coding style */
203 /** progression order (default LRCP) */
204 OPJ_PROG_ORDER prog_order;
205 /** progression order changes */
207 /** number of progression order changes (POC), default to 0 */
209 /** number of layers */
211 /** rates of layers */
213 /** different psnr for successive layers */
214 float tcp_distoratio[100];
215 /** number of resolutions */
217 /** initial code block width, default to 64 */
219 /** initial code block height, default to 64 */
221 /** mode switch (cblk_style) */
223 /** 1 : use the irreversible DWT 9-7, 0 : use lossless compression (default) */
225 /** region of interest: affected component in [0..3], -1 means no ROI */
227 /** region of interest: upshift value */
229 /* number of precinct size specifications */
231 /** initial precinct width */
232 int prcw_init[J2K_MAXRLVLS];
233 /** initial precinct height */
234 int prch_init[J2K_MAXRLVLS];
236 /**@name command line encoder parameters (not used inside the library) */
238 /** input file name */
239 char infile[MAX_PATH];
240 /** output file name */
241 char outfile[MAX_PATH];
242 /** creation of an index file, default to 0 (false) */
244 /** index file name */
245 char index[MAX_PATH];
246 /** subimage encoding: origin image offset in x direction */
248 /** subimage encoding: origin image offset in y direction */
250 /** subsampling value for dx */
252 /** subsampling value for dy */
254 /** input file format 0: PGX, 1: PxM, 2: BMP */
256 /** output file format 0: J2K, 1: JP2, 2: JPT */
262 Decompression parameters
264 typedef struct opj_dparameters {
266 Set the number of highest resolution levels to be discarded.
267 The image resolution is effectively divided by 2 to the power of the number of discarded levels.
268 The reduce factor is limited by the smallest total number of decomposition levels among tiles.
269 if != 0, then original dimension divided by 2^(reduce);
270 if == 0 or not used, image is decoded to the full resolution
274 Set the maximum number of quality layers to decode.
275 If there are less quality layers than the specified number, all the quality layers are decoded.
276 if != 0, then only the first "layer" layers are decoded;
277 if == 0 or not used, all the quality layers are decoded
281 /**@name command line encoder parameters (not used inside the library) */
283 /** input file name */
284 char infile[MAX_PATH];
285 /** output file name */
286 char outfile[MAX_PATH];
287 /** input file format 0: J2K, 1: JP2, 2: JPT */
289 /** output file format 0: PGX, 1: PxM, 2: BMP */
294 /** Common fields between JPEG-2000 compression and decompression master structs. */
296 #define opj_common_fields \
297 opj_event_mgr_t *event_mgr; /**< pointer to the event manager */\
298 void * client_data; /**< Available for use by application */\
299 bool is_decompressor; /**< So common code can tell which is which */\
300 OPJ_CODEC_FORMAT codec_format; /**< selected codec */\
301 void *j2k_handle; /**< pointer to the J2K codec */\
302 void *jp2_handle /**< pointer to the JP2 codec */
304 /* Routines that are to be used by both halves of the library are declared
305 * to receive a pointer to this structure. There are no actual instances of
306 * opj_common_struct_t, only of opj_cinfo_t and opj_dinfo_t.
308 typedef struct opj_common_struct {
309 opj_common_fields; /* Fields common to both master struct types */
310 /* Additional fields follow in an actual opj_cinfo_t or
311 * opj_dinfo_t. All three structs must agree on these
312 * initial fields! (This would be a lot cleaner in C++.)
314 } opj_common_struct_t;
316 typedef opj_common_struct_t * opj_common_ptr;
319 Compression context info
321 typedef struct opj_cinfo {
322 /** Fields shared with opj_dinfo_t */
324 /* other specific fields go here */
328 Decompression context info
330 typedef struct opj_dinfo {
331 /** Fields shared with opj_cinfo_t */
333 /* other specific fields go here */
337 ==========================================================
338 I/O stream typedef definitions
339 ==========================================================
345 /** The stream was opened for reading. */
346 #define OPJ_STREAM_READ 0x0001
347 /** The stream was opened for writing. */
348 #define OPJ_STREAM_WRITE 0x0002
351 Byte input-output stream (CIO)
353 typedef struct opj_cio {
355 opj_common_ptr cinfo;
357 /** open mode (read/write) either OPJ_STREAM_READ or OPJ_STREAM_WRITE */
359 /** pointer to the start of the buffer */
360 unsigned char *buffer;
361 /** buffer size in bytes */
364 /** pointer to the start of the stream */
365 unsigned char *start;
366 /** pointer to the end of the stream */
368 /** pointer to the current position */
373 ==========================================================
374 image typedef definitions
375 ==========================================================
379 Defines a single image component
381 typedef struct opj_image_comp {
382 /** XRsiz: horizontal separation of a sample of ith component with respect to the reference grid */
384 /** YRsiz: vertical separation of a sample of ith component with respect to the reference grid */
390 /** x component offset compared to the whole image */
392 /** y component offset compared to the whole image */
396 /** image depth in bits */
398 /** signed (1) / unsigned (0) */
400 /** number of decoded resolution */
402 /** number of division by 2 of the out image compared to the original size of image */
404 /** image component data */
409 Defines image data and characteristics
411 typedef struct opj_image {
412 /** XOsiz: horizontal offset from the origin of the reference grid to the left side of the image area */
414 /** YOsiz: vertical offset from the origin of the reference grid to the top side of the image area */
416 /** Xsiz: width of the reference grid */
418 /** Ysiz: height of the reference grid */
420 /** number of components in the image */
422 /** color space: sRGB, Greyscale or YUV */
423 OPJ_COLOR_SPACE color_space;
424 /** image components */
425 opj_image_comp_t *comps;
429 Component parameters structure used by the opj_image_create function
431 typedef struct opj_image_comptparm {
432 /** XRsiz: horizontal separation of a sample of ith component with respect to the reference grid */
434 /** YRsiz: vertical separation of a sample of ith component with respect to the reference grid */
440 /** x component offset compared to the whole image */
442 /** y component offset compared to the whole image */
446 /** image depth in bits */
448 /** signed (1) / unsigned (0) */
450 } opj_image_cmptparm_t;
458 ==========================================================
460 ==========================================================
463 const char * opj_version();
466 ==========================================================
467 image functions definitions
468 ==========================================================
473 @param numcmpts number of components
474 @param cmptparms components parameters
475 @param clrspc image color space
476 @return returns a new image structure if successful, returns NULL otherwise
478 OPJ_EXPORT opj_image_t *opj_image_create(int numcmpts, opj_image_cmptparm_t *cmptparms, OPJ_COLOR_SPACE clrspc);
481 Deallocate any resources associated with an image
482 @param image image to be destroyed
484 OPJ_EXPORT void opj_image_destroy(opj_image_t *image);
487 ==========================================================
488 stream functions definitions
489 ==========================================================
493 Open and allocate a memory stream for read / write.
494 On reading, the user must provide a buffer containing encoded data. The buffer will be
495 wrapped by the returned CIO handle.
496 On writing, buffer parameters must be set to 0: a buffer will be allocated by the library
497 to contain encoded data.
498 @param cinfo Codec context info
499 @param buffer Reading: buffer address. Writing: NULL
500 @param length Reading: buffer length. Writing: 0
501 @return Returns a CIO handle if successful, returns NULL otherwise
503 OPJ_EXPORT opj_cio_t* opj_cio_open(opj_common_ptr cinfo, unsigned char *buffer, int length);
506 Close and free a CIO handle
507 @param cio CIO handle to free
509 OPJ_EXPORT void opj_cio_close(opj_cio_t *cio);
512 Get position in byte stream
513 @param cio CIO handle
514 @return Returns the position in bytes
516 OPJ_EXPORT int cio_tell(opj_cio_t *cio);
518 Set position in byte stream
519 @param cio CIO handle
520 @param pos Position, in number of bytes, from the beginning of the stream
522 void cio_seek(opj_cio_t *cio, int pos);
525 ==========================================================
526 event manager functions definitions
527 ==========================================================
530 OPJ_EXPORT opj_event_mgr_t* opj_set_event_mgr(opj_common_ptr cinfo, opj_event_mgr_t *event_mgr, void *context);
533 ==========================================================
534 codec functions definitions
535 ==========================================================
538 Creates a J2K/JPT/JP2 decompression structure
539 @param format Decoder to select
540 @return Returns a handle to a decompressor if successful, returns NULL otherwise
542 OPJ_EXPORT opj_dinfo_t* opj_create_decompress(OPJ_CODEC_FORMAT format);
544 Destroy a decompressor handle
545 @param dinfo decompressor handle to destroy
547 OPJ_EXPORT void opj_destroy_decompress(opj_dinfo_t *dinfo);
549 Set decoding parameters to default values
550 @param parameters Decompression parameters
552 OPJ_EXPORT void opj_set_default_decoder_parameters(opj_dparameters_t *parameters);
554 Setup the decoder decoding parameters using user parameters.
555 Decoding parameters are returned in j2k->cp.
556 @param dinfo decompressor handle
557 @param parameters decompression parameters
559 OPJ_EXPORT void opj_setup_decoder(opj_dinfo_t *dinfo, opj_dparameters_t *parameters);
561 Decode an image from a JPEG-2000 codestream
562 @param dinfo decompressor handle
563 @param cio Input buffer stream
564 @return Returns a decoded image if successful, returns NULL otherwise
566 OPJ_EXPORT opj_image_t* opj_decode(opj_dinfo_t *dinfo, opj_cio_t *cio);
568 Creates a J2K/JP2 compression structure
569 @param format Coder to select
570 @return Returns a handle to a compressor if successful, returns NULL otherwise
572 OPJ_EXPORT opj_cinfo_t* opj_create_compress(OPJ_CODEC_FORMAT format);
574 Destroy a compressor handle
575 @param cinfo compressor handle to destroy
577 OPJ_EXPORT void opj_destroy_compress(opj_cinfo_t *cinfo);
579 Set encoding parameters to default values, that means :
583 <li>Size of precinct : 2^15 x 2^15 (means 1 precinct)
584 <li>Size of code-block : 64 x 64
585 <li>Number of resolutions: 6
586 <li>No SOP marker in the codestream
587 <li>No EPH marker in the codestream
588 <li>No sub-sampling in x or y direction
589 <li>No mode switch activated
590 <li>Progression order: LRCP
593 <li>No offset of the origin of the image
594 <li>No offset of the origin of the tiles
595 <li>Reversible DWT 5-3
597 @param parameters Compression parameters
599 OPJ_EXPORT void opj_set_default_encoder_parameters(opj_cparameters_t *parameters);
601 Setup the encoder parameters using the current image and using user parameters.
602 @param cinfo compressor handle
603 @param parameters compression parameters
604 @param image input filled image
606 OPJ_EXPORT void opj_setup_encoder(opj_cinfo_t *cinfo, opj_cparameters_t *parameters, opj_image_t *image);
608 Encode an image into a JPEG-2000 codestream
609 @param cinfo compressor handle
610 @param cio Output buffer stream
611 @param image Image to encode
612 @param index Name of the index file if required, NULL otherwise
613 @return Returns true if successful, returns false otherwise
615 OPJ_EXPORT bool opj_encode(opj_cinfo_t *cinfo, opj_cio_t *cio, opj_image_t *image, char *index);
621 #endif /* OPENJPEG_H */