1 /* 2 * The copyright in this software is being made available under the 2-clauses 3 * BSD License, included below. This software may be subject to other third 4 * party and contributor rights, including patent rights, and no such rights 5 * are granted under this license. 6 * 7 * Copyright (c) 2001-2003, David Janssens 8 * Copyright (c) 2002-2003, Yannick Verschueren 9 * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe 10 * Copyright (c) 2005, Herve Drolon, FreeImage Team 11 * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium 12 * Copyright (c) 2006, Mónica Díez García, Image Processing Laboratory, University of Valladolid, Spain 13 * All rights reserved. 14 * 15 * Redistribution and use in source and binary forms, with or without 16 * modification, are permitted provided that the following conditions 17 * are met: 18 * 1. Redistributions of source code must retain the above copyright 19 * notice, this list of conditions and the following disclaimer. 20 * 2. Redistributions in binary form must reproduce the above copyright 21 * notice, this list of conditions and the following disclaimer in the 22 * documentation and/or other materials provided with the distribution. 23 * 24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' 25 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 27 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 28 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 29 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 30 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 31 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 32 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 33 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 34 * POSSIBILITY OF SUCH DAMAGE. 35 */ 36 #ifndef OPENJPEG_H 37 #define OPENJPEG_H 38 39 /* 40 ========================================================== 41 Compiler directives 42 ========================================================== 43 */ 44 45 #if defined(OPJ_STATIC) || !defined(_WIN32) 46 /* http://gcc.gnu.org/wiki/Visibility */ 47 #if __GNUC__ >= 4 48 #define OPJ_API __attribute__ ((visibility ("default"))) 49 #define OPJ_LOCAL __attribute__ ((visibility ("hidden"))) 50 #else 51 #define OPJ_API 52 #define OPJ_LOCAL 53 #endif 54 #define OPJ_CALLCONV 55 #else 56 #define OPJ_CALLCONV __stdcall 57 58 /* 59 The following ifdef block is the standard way of creating macros which make exporting 60 from a DLL simpler. All files within this DLL are compiled with the OPJ_EXPORTS 61 symbol defined on the command line. this symbol should not be defined on any project 62 that uses this DLL. This way any other project whose source files include this file see 63 OPJ_API functions as being imported from a DLL, whereas this DLL sees symbols 64 defined with this macro as being exported. 65 */ 66 #if defined(OPJ_EXPORTS) || defined(DLL_EXPORT) 67 #define OPJ_API __declspec(dllexport) 68 #else 69 #define OPJ_API __declspec(dllimport) 70 #endif /* OPJ_EXPORTS */ 71 #endif /* !OPJ_STATIC || !WIN32 */ 72 73 #ifndef __cplusplus 74 #if defined(HAVE_STDBOOL_H) 75 /* 76 The C language implementation does correctly provide the standard header 77 file "stdbool.h". 78 */ 79 #include <stdbool.h> 80 #else 81 /* 82 The C language implementation does not provide the standard header file 83 "stdbool.h" as required by ISO/IEC 9899:1999. Try to compensate for this 84 braindamage below. 85 */ 86 #if !defined(bool) 87 #define bool int 88 #endif 89 #if !defined(true) 90 #define true 1 91 #endif 92 #if !defined(false) 93 #define false 0 94 #endif 95 #endif 96 #endif /* __cplusplus */ 97 98 /* 99 ========================================================== 100 Useful constant definitions 101 ========================================================== 102 */ 103 #ifndef MAX_SLICES 104 #define MAX_SLICES 300 /**< Maximum allowed size for slices */ 105 #endif /* MAX_PATH */ 106 107 #ifndef MAX_PATH 108 #define MAX_PATH 260 /**< Maximum allowed size for filenames */ 109 #endif /* MAX_PATH */ 110 111 #define J3D_MAXRLVLS 32 /**< Number of maximum resolution level authorized */ 112 #define J3D_MAXBANDS (7*J3D_MAXRLVLS + 1) /**< Number of maximum sub-band linked to number of resolution level */ 113 114 #define TINY 1.0E-20 115 /* 116 ========================================================== 117 enum definitions 118 ========================================================== 119 */ 120 121 #define J2K_CFMT 0 122 #define J3D_CFMT 1 123 #define LSE_CFMT 2 124 125 #define BIN_DFMT 0 126 #define PGX_DFMT 1 127 #define IMG_DFMT 2 128 /* ----------------------------------------------------------------------- */ 129 130 /** Progression order */ 131 typedef enum PROG_ORDER { 132 /**< place-holder */ 133 PROG_UNKNOWN = -1, 134 /**< layer-resolution-component-precinct order */ 135 LRCP = 0, 136 /**< resolution-layer-component-precinct order */ 137 RLCP = 1, 138 /**< resolution-precinct-component-layer order */ 139 RPCL = 2, 140 /**< precinct-component-resolution-layer order */ 141 PCRL = 3, 142 /**< component-precinct-resolution-layer order */ 143 CPRL = 4 144 } OPJ_PROG_ORDER; 145 146 /** 147 Supported volume color spaces 148 */ 149 typedef enum COLOR_SPACE { 150 /**< place-holder */ 151 CLRSPC_UNKNOWN = -1, 152 /**< sRGB */ 153 CLRSPC_SRGB = 1, 154 /**< grayscale */ 155 CLRSPC_GRAY = 2, 156 /**< YUV */ 157 CLRSPC_SYCC = 3 158 } OPJ_COLOR_SPACE; 159 160 /** 161 Supported codec 162 */ 163 typedef enum CODEC_FORMAT { 164 /**< place-holder */ 165 CODEC_UNKNOWN = -1, 166 /**< JPEG-2000 codestream : read/write */ 167 CODEC_J2K = 0, 168 /**< JPEG-2000 Part 10 file format : read/write */ 169 CODEC_J3D = 1 170 } OPJ_CODEC_FORMAT; 171 172 /** 173 Supported entropy coding algorithms 174 */ 175 typedef enum ENTROPY_CODING { 176 /**< place-holder */ 177 ENCOD_UNKNOWN = -1, 178 /**< 2D EBCOT encoding */ 179 ENCOD_2EB = 0, 180 /**< 3D EBCOT encoding */ 181 ENCOD_3EB = 1, 182 /**< Golomb-Rice coding with 2D context */ 183 ENCOD_2GR = 2, 184 /**< Golomb-Rice coding with 3D context */ 185 ENCOD_3GR = 3 186 } OPJ_ENTROPY_CODING; 187 188 /** 189 Supported transforms 190 */ 191 typedef enum TRANSFORM { 192 /**< place-holder */ 193 TRF_UNKNOWN = -1, 194 /**< 2D DWT, no transform in axial dim */ 195 TRF_2D_DWT = 0, 196 /**< 3D DWT */ 197 TRF_3D_DWT = 1, 198 /**< 3D prediction*/ 199 TRF_3D_RLS = 2, 200 TRF_3D_LSE = 3 201 } OPJ_TRANSFORM; 202 /* 203 ========================================================== 204 event manager typedef definitions 205 ========================================================== 206 */ 207 208 /** 209 Callback function prototype for events 210 @param msg Event message 211 @param client_data 212 */ 213 typedef void (*opj_msg_callback)(const char *msg, void *client_data); 214 215 /** 216 Message handler object 217 used for 218 <ul> 219 <li>Error messages 220 <li>Warning messages 221 <li>Debugging messages 222 </ul> 223 */ 224 typedef struct opj_event_mgr { 225 /** Error message callback if available, NULL otherwise */ 226 opj_msg_callback error_handler; 227 /** Warning message callback if available, NULL otherwise */ 228 opj_msg_callback warning_handler; 229 /** Debug message callback if available, NULL otherwise */ 230 opj_msg_callback info_handler; 231 } opj_event_mgr_t; 232 233 234 /* 235 ========================================================== 236 codec typedef definitions 237 ========================================================== 238 */ 239 240 /** 241 Progression order changes 242 */ 243 typedef struct opj_poc { 244 int resno0, compno0; 245 int layno1, resno1, compno1; 246 OPJ_PROG_ORDER prg; 247 int tile; 248 char progorder[4]; 249 } opj_poc_t; 250 251 252 /** 253 Compression parameters 254 */ 255 typedef struct opj_cparameters { 256 /** size of tile: tile_size_on = false (not in argument) or = true (in argument) */ 257 bool tile_size_on; 258 /** XTOsiz */ 259 int cp_tx0; 260 /** YTOsiz */ 261 int cp_ty0; 262 /** ZTOsiz */ 263 int cp_tz0; 264 265 /** XTsiz */ 266 int cp_tdx; 267 /** YTsiz */ 268 int cp_tdy; 269 /** ZTsiz */ 270 int cp_tdz; 271 272 /** allocation by rate/distortion */ 273 int cp_disto_alloc; 274 /** allocation by fixed layer */ 275 int cp_fixed_alloc; 276 /** add fixed_quality */ 277 int cp_fixed_quality; 278 /** fixed layer */ 279 int *cp_matrice; 280 /** number of layers */ 281 int tcp_numlayers; 282 /** rates for successive layers */ 283 float tcp_rates[100]; 284 /** psnr's for successive layers */ 285 float tcp_distoratio[100]; 286 /** comment for coding */ 287 char *cp_comment; 288 /** csty : coding style */ 289 int csty; 290 /** DC offset (DCO) */ 291 int dcoffset; 292 /** progression order (default LRCP) */ 293 OPJ_PROG_ORDER prog_order; 294 /** progression order changes */ 295 opj_poc_t POC[J3D_MAXRLVLS - 1]; 296 /** number of progression order changes (POC), default to 0 */ 297 int numpocs; 298 299 /** number of resolutions */ 300 int numresolution[3]; 301 /** initial code block width, height and depth, default to 64 */ 302 int cblock_init[3]; 303 /** mode switch (1=BYPASS(LAZY) 2=RESET 4=RESTART(TERMALL) 8=VSC 16=ERTERM(SEGTERM) 32=SEGMARK(SEGSYM)) */ 304 int mode; 305 306 /** 1 : use the irreversible DWT 9-7, 0 : use lossless compression (default) */ 307 int irreversible; 308 /** WT from ATK, default to 0 (false), no of atk used */ 309 int atk_wt[3]; 310 /** region of interest: affected component in [0..3], -1 means no ROI */ 311 int roi_compno; 312 /** region of interest: upshift value */ 313 int roi_shift; 314 315 /* number of precinct size specifications */ 316 int res_spec; 317 /** initial precinct width */ 318 int prct_init[3][J3D_MAXRLVLS]; 319 320 /** transform format 0: 0: 2DWT, 1: 2D1P, 2: 3DWT, 3: 3RLS */ 321 OPJ_TRANSFORM transform_format; 322 /** output file format 0: 2EB, 1: 3EB, 2: 2GR, 3: 3GR, 4: GRI */ 323 OPJ_ENTROPY_CODING encoding_format; 324 325 /**@name command line encoder parameters (not used inside the library) */ 326 /*@{*/ 327 char infile[MAX_PATH]; /** input file name */ 328 char outfile[MAX_PATH]; /** output file name */ 329 char imgfile[MAX_PATH]; /** IMG file name for BIN volumes*/ 330 int index_on; /** creation of an index file, default to 0 (false) */ 331 char index[MAX_PATH]; /** index file name */ 332 333 int volume_offset_x0; /** subvolume encoding: origin volume offset in x, y and z direction */ 334 int volume_offset_y0; 335 int volume_offset_z0; 336 337 int subsampling_dx; /** subsampling value for dx */ 338 int subsampling_dy; 339 int subsampling_dz; 340 341 int decod_format; /** input file format 0: BIN, 1: PGX */ 342 int cod_format; /** output file format 0: JP3D */ 343 /*@}*/ 344 } opj_cparameters_t; 345 346 /** 347 Decompression parameters 348 */ 349 typedef struct opj_dparameters { 350 /** Set the number of highest resolution levels to be discarded. if != 0, then original dimension divided by 2^(reduce); if == 0 or not used, volume is decoded to the full resolution */ 351 int cp_reduce[3]; 352 /** Set the maximum number of quality layers to decode. if != 0, then only the first "layer" layers are decoded; if == 0 or not used, all the quality layers are decoded */ 353 int cp_layer; 354 int bigendian; 355 356 /**@name command line encoder parameters (not used inside the library) */ 357 /*@{*/ 358 /** input file name */ 359 char infile[MAX_PATH]; 360 /** output file name */ 361 char outfile[MAX_PATH]; 362 /** IMG file name for BIN volumes*/ 363 char imgfile[MAX_PATH]; 364 /** Original file name for PSNR measures*/ 365 char original[MAX_PATH]; 366 /** input file format 0: J2K, 1: JP3D */ 367 int decod_format; 368 /** input file format 0: BIN, 1: PGM */ 369 int cod_format; 370 /** original file format 0: BIN, 1: PGM */ 371 int orig_format; 372 /*@}*/ 373 } opj_dparameters_t; 374 375 /** Common fields between JPEG-2000 compression and decompression master structs. */ 376 #define opj_common_fields \ 377 opj_event_mgr_t *event_mgr; /**< pointer to the event manager */\ 378 void * client_data; /**< Available for use by application */\ 379 bool is_decompressor; /**< So common code can tell which is which */\ 380 OPJ_CODEC_FORMAT codec_format; /**< selected codec */\ 381 OPJ_ENTROPY_CODING encoding_format; /**< selected entropy coding */\ 382 OPJ_TRANSFORM transform_format; /**< selected transform */\ 383 void *j3d_handle /**< pointer to the J3D codec */ 384 385 /* Routines that are to be used by both halves of the library are declared 386 * to receive a pointer to this structure. There are no actual instances of 387 * opj_common_struct_t, only of opj_cinfo_t and opj_dinfo_t. 388 */ 389 typedef struct opj_common_struct { 390 opj_common_fields; /* Fields common to both master struct types */ 391 /* Additional fields follow in an actual opj_cinfo_t or 392 * opj_dinfo_t. All three structs must agree on these 393 * initial fields! (This would be a lot cleaner in C++.) 394 */ 395 } opj_common_struct_t; 396 397 typedef opj_common_struct_t * opj_common_ptr; 398 399 /** 400 Compression context info 401 */ 402 typedef struct opj_cinfo { 403 /** Fields shared with opj_dinfo_t */ 404 opj_common_fields; 405 /* other specific fields go here */ 406 } opj_cinfo_t; 407 408 /** 409 Decompression context info 410 */ 411 typedef struct opj_dinfo { 412 /** Fields shared with opj_cinfo_t */ 413 opj_common_fields; 414 /* other specific fields go here */ 415 } opj_dinfo_t; 416 417 /* 418 ========================================================== 419 I/O stream typedef definitions 420 ========================================================== 421 */ 422 423 /* 424 * Stream open flags. 425 */ 426 /** The stream was opened for reading. */ 427 #define OPJ_STREAM_READ 0x0001 428 /** The stream was opened for writing. */ 429 #define OPJ_STREAM_WRITE 0x0002 430 431 /** 432 Byte input-output stream (CIO) 433 */ 434 typedef struct opj_cio { 435 /** codec context */ 436 opj_common_ptr cinfo; 437 /** open mode (read/write) either OPJ_STREAM_READ or OPJ_STREAM_WRITE */ 438 int openmode; 439 /** pointer to the start of the buffer */ 440 unsigned char *buffer; 441 /** buffer size in bytes */ 442 int length; 443 /** pointer to the start of the stream */ 444 unsigned char *start; 445 /** pointer to the end of the stream */ 446 unsigned char *end; 447 /** pointer to the current position */ 448 unsigned char *bp; 449 } opj_cio_t; 450 451 /* 452 ========================================================== 453 volume typedef definitions 454 ========================================================== 455 */ 456 457 /** 458 Defines a single volume component 459 */ 460 typedef struct opj_volume_comp { 461 /** XRsiz: horizontal separation of a sample of ith component with respect to the reference grid */ 462 int dx; 463 /** YRsiz: vertical separation of a sample of ith component with respect to the reference grid */ 464 int dy; 465 /** ZRsiz: vertical separation of a sample of ith component with respect to the reference grid */ 466 int dz; 467 /** data width */ 468 int w; 469 /** data height */ 470 int h; 471 /** data length : no of slices */ 472 int l; 473 /** x component offset compared to the whole volume */ 474 int x0; 475 /** y component offset compared to the whole volume */ 476 int y0; 477 /** z component offset compared to the whole volume */ 478 int z0; 479 /** precision */ 480 int prec; 481 /** volume depth in bits */ 482 int bpp; 483 /** DC offset (15444-2) */ 484 int dcoffset; 485 /** signed (1) / unsigned (0) */ 486 int sgnd; 487 /** BE byte order (1) / LE byte order (0) */ 488 int bigendian; 489 /** number of decoded resolution */ 490 int resno_decoded[3]; 491 /** number of division by 2 of the out volume compared to the original size of volume */ 492 int factor[3]; 493 /** volume component data */ 494 int *data; 495 } opj_volume_comp_t; 496 497 /** 498 Defines volume data and characteristics 499 */ 500 typedef struct opj_volume { 501 /** XOsiz: horizontal offset from the origin of the reference grid to the left side of the volume area */ 502 int x0; 503 /** YOsiz: vertical offset from the origin of the reference grid to the top side of the volume area */ 504 int y0; 505 /** ZOsiz: vertical offset from the origin of the reference grid to the top side of the volume area */ 506 int z0; 507 /** Xsiz: width of the reference grid */ 508 int x1; 509 /** Ysiz: height of the reference grid */ 510 int y1; 511 /** Zsiz: length of the reference grid */ 512 int z1; 513 /** number of components in the volume */ 514 int numcomps; 515 /** number of slices in the volume */ 516 int numslices; 517 /** color space: sRGB, Greyscale or YUV */ 518 OPJ_COLOR_SPACE color_space; 519 /** volume components */ 520 opj_volume_comp_t *comps; 521 } opj_volume_t; 522 523 /** 524 Component parameters structure used by the opj_volume_create function 525 */ 526 typedef struct opj_volume_comptparm { 527 /** XRsiz: horizontal separation of a sample of ith component with respect to the reference grid */ 528 int dx; 529 /** YRsiz: vertical separation of a sample of ith component with respect to the reference grid */ 530 int dy; 531 /** ZRsiz: axial separation of a sample of ith component with respect to the reference grid */ 532 int dz; 533 /** data width */ 534 int w; 535 /** data height */ 536 int h; 537 /** data length */ 538 int l; 539 /** x component offset compared to the whole volume */ 540 int x0; 541 /** y component offset compared to the whole volume */ 542 int y0; 543 /** z component offset compared to the whole volume */ 544 int z0; 545 /** precision */ 546 int prec; 547 /** volume depth in bits */ 548 int bpp; 549 /** signed (1) / unsigned (0) */ 550 int sgnd; 551 /** DC offset*/ 552 int dcoffset; 553 /** BE byte order (1) / LE byte order (0) */ 554 int bigendian; 555 } opj_volume_cmptparm_t; 556 557 #ifdef __cplusplus 558 extern "C" { 559 #endif 560 561 562 /* 563 ========================================================== 564 openjpeg version 565 ========================================================== 566 */ 567 568 OPJ_API const char * OPJ_CALLCONV opj_version(void); 569 570 /* 571 ========================================================== 572 volume functions definitions 573 ========================================================== 574 */ 575 576 /** 577 Create an volume 578 @param numcmpts number of components 579 @param cmptparms components parameters 580 @param clrspc volume color space 581 @return returns a new volume structure if successful, returns NULL otherwise 582 */ 583 OPJ_API opj_volume_t* OPJ_CALLCONV opj_volume_create(int numcmpts, 584 opj_volume_cmptparm_t *cmptparms, OPJ_COLOR_SPACE clrspc); 585 586 /** 587 Deallocate any resources associated with an volume 588 @param volume volume to be destroyed 589 */ 590 OPJ_API void OPJ_CALLCONV opj_volume_destroy(opj_volume_t *volume); 591 592 /* 593 ========================================================== 594 stream functions definitions 595 ========================================================== 596 */ 597 598 /** 599 Open and allocate a memory stream for read / write. 600 On reading, the user must provide a buffer containing encoded data. The buffer will be 601 wrapped by the returned CIO handle. 602 On writing, buffer parameters must be set to 0: a buffer will be allocated by the library 603 to contain encoded data. 604 @param cinfo Codec context info 605 @param buffer Reading: buffer address. Writing: NULL 606 @param length Reading: buffer length. Writing: 0 607 @return Returns a CIO handle if successful, returns NULL otherwise 608 */ 609 OPJ_API opj_cio_t* OPJ_CALLCONV opj_cio_open(opj_common_ptr cinfo, 610 unsigned char *buffer, int length); 611 612 /** 613 Close and free a CIO handle 614 @param cio CIO handle to free 615 */ 616 OPJ_API void OPJ_CALLCONV opj_cio_close(opj_cio_t *cio); 617 618 /** 619 Get position in byte stream 620 @param cio CIO handle 621 @return Returns the position in bytes 622 */ 623 OPJ_API int OPJ_CALLCONV cio_tell(opj_cio_t *cio); 624 /** 625 Set position in byte stream 626 @param cio CIO handle 627 @param pos Position, in number of bytes, from the beginning of the stream 628 */ 629 OPJ_API void OPJ_CALLCONV cio_seek(opj_cio_t *cio, int pos); 630 631 /* 632 ========================================================== 633 event manager functions definitions 634 ========================================================== 635 */ 636 637 OPJ_API opj_event_mgr_t* OPJ_CALLCONV opj_set_event_mgr(opj_common_ptr cinfo, 638 opj_event_mgr_t *event_mgr, void *context); 639 640 /* 641 ========================================================== 642 codec functions definitions 643 ========================================================== 644 */ 645 /** 646 Creates a J3D decompression structure 647 @param format Decoder to select 648 @return Returns a handle to a decompressor if successful, returns NULL otherwise 649 */ 650 OPJ_API opj_dinfo_t* OPJ_CALLCONV opj_create_decompress( 651 OPJ_CODEC_FORMAT format); 652 /** 653 Destroy a decompressor handle 654 @param dinfo decompressor handle to destroy 655 */ 656 OPJ_API void OPJ_CALLCONV opj_destroy_decompress(opj_dinfo_t *dinfo); 657 /** 658 Set decoding parameters to default values 659 @param parameters Decompression parameters 660 */ 661 OPJ_API void OPJ_CALLCONV opj_set_default_decoder_parameters( 662 opj_dparameters_t *parameters); 663 /** 664 Setup the decoder decoding parameters using user parameters. 665 Decoding parameters are returned in j3d->cp. 666 @param dinfo decompressor handle 667 @param parameters decompression parameters 668 */ 669 OPJ_API void OPJ_CALLCONV opj_setup_decoder(opj_dinfo_t *dinfo, 670 opj_dparameters_t *parameters); 671 /** 672 Decode an volume from a JPEG-2000 codestream 673 @param dinfo decompressor handle 674 @param cio Input buffer stream 675 @return Returns a decoded volume if successful, returns NULL otherwise 676 */ 677 OPJ_API opj_volume_t* OPJ_CALLCONV opj_decode(opj_dinfo_t *dinfo, 678 opj_cio_t *cio); 679 /** 680 Creates a J3D/JP2 compression structure 681 @param format Coder to select 682 @return Returns a handle to a compressor if successful, returns NULL otherwise 683 */ 684 OPJ_API opj_cinfo_t* OPJ_CALLCONV opj_create_compress(OPJ_CODEC_FORMAT format); 685 /** 686 Destroy a compressor handle 687 @param cinfo compressor handle to destroy 688 */ 689 OPJ_API void OPJ_CALLCONV opj_destroy_compress(opj_cinfo_t *cinfo); 690 /** 691 Set encoding parameters to default values, that means : 692 <ul> 693 <li>Lossless 694 <li>1 tile 695 <li>Size of precinct : 2^15 x 2^15 (means 1 precinct) 696 <li>Size of code-block : 64 x 64 697 <li>Number of resolutions: 6 698 <li>No SOP marker in the codestream 699 <li>No EPH marker in the codestream 700 <li>No sub-sampling in x or y direction 701 <li>No mode switch activated 702 <li>Progression order: LRCP 703 <li>No index file 704 <li>No ROI upshifted 705 <li>No offset of the origin of the volume 706 <li>No offset of the origin of the tiles 707 <li>Reversible DWT 5-3 708 </ul> 709 @param parameters Compression parameters 710 */ 711 OPJ_API void OPJ_CALLCONV opj_set_default_encoder_parameters( 712 opj_cparameters_t *parameters); 713 /** 714 Setup the encoder parameters using the current volume and using user parameters. 715 @param cinfo compressor handle 716 @param parameters compression parameters 717 @param volume input filled volume 718 */ 719 OPJ_API void OPJ_CALLCONV opj_setup_encoder(opj_cinfo_t *cinfo, 720 opj_cparameters_t *parameters, opj_volume_t *volume); 721 /** 722 Encode an volume into a JPEG-2000 codestream 723 @param cinfo compressor handle 724 @param cio Output buffer stream 725 @param volume Volume to encode 726 @param index Name of the index file if required, NULL otherwise 727 @return Returns true if successful, returns false otherwise 728 */ 729 OPJ_API bool OPJ_CALLCONV opj_encode(opj_cinfo_t *cinfo, opj_cio_t *cio, 730 opj_volume_t *volume, char *index); 731 732 #ifdef __cplusplus 733 } 734 #endif 735 736 #endif /* OPENJPEG_H */ 737