00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 #ifndef OPENJPEG_H
00034 #define OPENJPEG_H
00035
00036
00037
00038
00039
00040
00041
00042
00043 #if defined(OPJ_STATIC) || !defined(_WIN32)
00044 #define OPJ_API
00045 #define OPJ_CALLCONV
00046 #else
00047 #define OPJ_CALLCONV __stdcall
00048
00049
00050
00051
00052
00053
00054
00055
00056 #if defined(OPJ_EXPORTS) || defined(DLL_EXPORT)
00057 #define OPJ_API __declspec(dllexport)
00058 #else
00059 #define OPJ_API __declspec(dllimport)
00060 #endif
00061 #endif
00062
00063 typedef int opj_bool;
00064 #define OPJ_TRUE 1
00065 #define OPJ_FALSE 0
00066
00067
00068 #define OPJ_ARG_NOT_USED(x) (void)(x)
00069
00070
00071
00072
00073
00074
00075 #define OPJ_PATH_LEN 4096
00077 #define J2K_MAXRLVLS 33
00078 #define J2K_MAXBANDS (3*J2K_MAXRLVLS-2)
00080
00081 #define JPWL_MAX_NO_TILESPECS 16
00082 #define JPWL_MAX_NO_PACKSPECS 16
00083 #define JPWL_MAX_NO_MARKERS 512
00084 #define JPWL_PRIVATEINDEX_NAME "jpwl_index_privatefilename"
00085 #define JPWL_EXPECTED_COMPONENTS 3
00086 #define JPWL_MAXIMUM_TILES 8192
00087 #define JPWL_MAXIMUM_HAMMING 2
00088 #define JPWL_MAXIMUM_EPB_ROOM 65450
00089
00090
00091
00092
00093
00094
00095
00099 typedef enum RSIZ_CAPABILITIES {
00100 STD_RSIZ = 0,
00101 CINEMA2K = 3,
00102 CINEMA4K = 4
00103 } OPJ_RSIZ_CAPABILITIES;
00104
00108 typedef enum CINEMA_MODE {
00109 OFF = 0,
00110 CINEMA2K_24 = 1,
00111 CINEMA2K_48 = 2,
00112 CINEMA4K_24 = 3
00113 }OPJ_CINEMA_MODE;
00114
00118 typedef enum PROG_ORDER {
00119 PROG_UNKNOWN = -1,
00120 LRCP = 0,
00121 RLCP = 1,
00122 RPCL = 2,
00123 PCRL = 3,
00124 CPRL = 4
00125 } OPJ_PROG_ORDER;
00126
00130 typedef enum COLOR_SPACE {
00131 CLRSPC_UNKNOWN = -1,
00132 CLRSPC_UNSPECIFIED = 0,
00133 CLRSPC_SRGB = 1,
00134 CLRSPC_GRAY = 2,
00135 CLRSPC_SYCC = 3
00136 } OPJ_COLOR_SPACE;
00137
00138 #define ENUMCS_SRGB 16
00139 #define ENUMCS_GRAY 17
00140 #define ENUMCS_SYCC 18
00141
00145 typedef enum CODEC_FORMAT {
00146 CODEC_UNKNOWN = -1,
00147 CODEC_J2K = 0,
00148 CODEC_JPT = 1,
00149 CODEC_JP2 = 2
00150 } OPJ_CODEC_FORMAT;
00151
00155 typedef enum LIMIT_DECODING {
00156 NO_LIMITATION = 0,
00157 LIMIT_TO_MAIN_HEADER = 1,
00158 DECODE_ALL_BUT_PACKETS = 2
00159 } OPJ_LIMIT_DECODING;
00160
00161
00162
00163
00164
00165
00166
00172 typedef void (*opj_msg_callback) (const char *msg, void *client_data);
00173
00183 typedef struct opj_event_mgr {
00185 opj_msg_callback error_handler;
00187 opj_msg_callback warning_handler;
00189 opj_msg_callback info_handler;
00190 } opj_event_mgr_t;
00191
00192
00193
00194
00195
00196
00197
00198
00202 typedef struct opj_poc {
00204 int resno0, compno0;
00206 int layno1, resno1, compno1;
00208 int layno0, precno0, precno1;
00210 OPJ_PROG_ORDER prg1,prg;
00212 char progorder[5];
00214 int tile;
00216 int tx0,tx1,ty0,ty1;
00218 int layS, resS, compS, prcS;
00220 int layE, resE, compE, prcE;
00222 int txS,txE,tyS,tyE,dx,dy;
00224 int lay_t, res_t, comp_t, prc_t,tx0_t,ty0_t;
00225 } opj_poc_t;
00226
00230 typedef struct opj_cparameters {
00232 opj_bool tile_size_on;
00234 int cp_tx0;
00236 int cp_ty0;
00238 int cp_tdx;
00240 int cp_tdy;
00242 int cp_disto_alloc;
00244 int cp_fixed_alloc;
00246 int cp_fixed_quality;
00248 int *cp_matrice;
00250 char *cp_comment;
00252 int csty;
00254 OPJ_PROG_ORDER prog_order;
00256 opj_poc_t POC[32];
00258 int numpocs;
00260 int tcp_numlayers;
00262 float tcp_rates[100];
00264 float tcp_distoratio[100];
00266 int numresolution;
00268 int cblockw_init;
00270 int cblockh_init;
00272 int mode;
00274 int irreversible;
00276 int roi_compno;
00278 int roi_shift;
00279
00280 int res_spec;
00282 int prcw_init[J2K_MAXRLVLS];
00284 int prch_init[J2K_MAXRLVLS];
00285
00289 char infile[OPJ_PATH_LEN];
00291 char outfile[OPJ_PATH_LEN];
00293 int index_on;
00295 char index[OPJ_PATH_LEN];
00297 int image_offset_x0;
00299 int image_offset_y0;
00301 int subsampling_dx;
00303 int subsampling_dy;
00305 int decod_format;
00307 int cod_format;
00310
00314 opj_bool jpwl_epc_on;
00316 int jpwl_hprot_MH;
00318 int jpwl_hprot_TPH_tileno[JPWL_MAX_NO_TILESPECS];
00320 int jpwl_hprot_TPH[JPWL_MAX_NO_TILESPECS];
00322 int jpwl_pprot_tileno[JPWL_MAX_NO_PACKSPECS];
00324 int jpwl_pprot_packno[JPWL_MAX_NO_PACKSPECS];
00326 int jpwl_pprot[JPWL_MAX_NO_PACKSPECS];
00328 int jpwl_sens_size;
00330 int jpwl_sens_addr;
00332 int jpwl_sens_range;
00334 int jpwl_sens_MH;
00336 int jpwl_sens_TPH_tileno[JPWL_MAX_NO_TILESPECS];
00338 int jpwl_sens_TPH[JPWL_MAX_NO_TILESPECS];
00340
00341
00343 OPJ_CINEMA_MODE cp_cinema;
00345 int max_comp_size;
00347 OPJ_RSIZ_CAPABILITIES cp_rsiz;
00349 char tp_on;
00351 char tp_flag;
00353 char tcp_mct;
00355 opj_bool jpip_on;
00356 } opj_cparameters_t;
00357
00358 #define OPJ_DPARAMETERS_IGNORE_PCLR_CMAP_CDEF_FLAG 0x0001
00359
00363 typedef struct opj_dparameters {
00371 int cp_reduce;
00378 int cp_layer;
00379
00383 char infile[OPJ_PATH_LEN];
00385 char outfile[OPJ_PATH_LEN];
00387 int decod_format;
00389 int cod_format;
00392
00396 opj_bool jpwl_correct;
00398 int jpwl_exp_comps;
00400 int jpwl_max_tiles;
00402
00403
00410 OPJ_LIMIT_DECODING cp_limit_decoding;
00411
00412 unsigned int flags;
00413 } opj_dparameters_t;
00414
00417 #define opj_common_fields \
00418 opj_event_mgr_t *event_mgr; \
00419 void * client_data; \
00420 opj_bool is_decompressor; \
00421 OPJ_CODEC_FORMAT codec_format; \
00422 void *j2k_handle; \
00423 void *jp2_handle; \
00424 void *mj2_handle
00426
00427
00428
00429
00430 typedef struct opj_common_struct {
00431 opj_common_fields;
00432
00433
00434
00435
00436 } opj_common_struct_t;
00437
00438 typedef opj_common_struct_t * opj_common_ptr;
00439
00443 typedef struct opj_cinfo {
00445 opj_common_fields;
00446
00447 } opj_cinfo_t;
00448
00452 typedef struct opj_dinfo {
00454 opj_common_fields;
00455
00456 } opj_dinfo_t;
00457
00458
00459
00460
00461
00462
00463
00464
00465
00466
00468 #define OPJ_STREAM_READ 0x0001
00469
00470 #define OPJ_STREAM_WRITE 0x0002
00471
00475 typedef struct opj_cio {
00477 opj_common_ptr cinfo;
00478
00480 int openmode;
00482 unsigned char *buffer;
00484 int length;
00485
00487 unsigned char *start;
00489 unsigned char *end;
00491 unsigned char *bp;
00492 } opj_cio_t;
00493
00494
00495
00496
00497
00498
00499
00503 typedef struct opj_image_comp {
00505 int dx;
00507 int dy;
00509 int w;
00511 int h;
00513 int x0;
00515 int y0;
00517 int prec;
00519 int bpp;
00521 int sgnd;
00523 int resno_decoded;
00525 int factor;
00527 int *data;
00528 } opj_image_comp_t;
00529
00533 typedef struct opj_image {
00535 int x0;
00537 int y0;
00539 int x1;
00541 int y1;
00543 int numcomps;
00545 OPJ_COLOR_SPACE color_space;
00547 opj_image_comp_t *comps;
00549 unsigned char *icc_profile_buf;
00551 int icc_profile_len;
00552 } opj_image_t;
00553
00557 typedef struct opj_image_comptparm {
00559 int dx;
00561 int dy;
00563 int w;
00565 int h;
00567 int x0;
00569 int y0;
00571 int prec;
00573 int bpp;
00575 int sgnd;
00576 } opj_image_cmptparm_t;
00577
00578
00579
00580
00581
00582
00583
00587 typedef struct opj_packet_info {
00589 int start_pos;
00591 int end_ph_pos;
00593 int end_pos;
00595 double disto;
00596 } opj_packet_info_t;
00597
00598
00599
00603 typedef struct opj_marker_info_t {
00605 unsigned short int type;
00607 int pos;
00609 int len;
00610 } opj_marker_info_t;
00611
00612
00616 typedef struct opj_tp_info {
00618 int tp_start_pos;
00620 int tp_end_header;
00622 int tp_end_pos;
00624 int tp_start_pack;
00626 int tp_numpacks;
00627 } opj_tp_info_t;
00628
00632 typedef struct opj_tile_info {
00634 double *thresh;
00636 int tileno;
00638 int start_pos;
00640 int end_header;
00642 int end_pos;
00644 int pw[33];
00646 int ph[33];
00648 int pdx[33];
00650 int pdy[33];
00652 opj_packet_info_t *packet;
00654 int numpix;
00656 double distotile;
00658 int marknum;
00660 opj_marker_info_t *marker;
00662 int maxmarknum;
00664 int num_tps;
00666 opj_tp_info_t *tp;
00667 } opj_tile_info_t;
00668
00672 typedef struct opj_codestream_info {
00674 double D_max;
00676 int packno;
00678 int index_write;
00680 int image_w;
00682 int image_h;
00684 OPJ_PROG_ORDER prog;
00686 int tile_x;
00688 int tile_y;
00690 int tile_Ox;
00692 int tile_Oy;
00694 int tw;
00696 int th;
00698 int numcomps;
00700 int numlayers;
00702 int *numdecompos;
00703
00705 int marknum;
00707 opj_marker_info_t *marker;
00709 int maxmarknum;
00710
00712 int main_head_start;
00714 int main_head_end;
00716 int codestream_size;
00718 opj_tile_info_t *tile;
00719 } opj_codestream_info_t;
00720
00721 #ifdef __cplusplus
00722 extern "C" {
00723 #endif
00724
00725
00726
00727
00728
00729
00730
00731
00732 OPJ_API const char * OPJ_CALLCONV opj_version(void);
00733
00734
00735
00736
00737
00738
00739
00747 OPJ_API opj_image_t* OPJ_CALLCONV opj_image_create(int numcmpts, opj_image_cmptparm_t *cmptparms, OPJ_COLOR_SPACE clrspc);
00748
00753 OPJ_API void OPJ_CALLCONV opj_image_destroy(opj_image_t *image);
00754
00755
00756
00757
00758
00759
00760
00772 OPJ_API opj_cio_t* OPJ_CALLCONV opj_cio_open(opj_common_ptr cinfo, unsigned char *buffer, int length);
00773
00778 OPJ_API void OPJ_CALLCONV opj_cio_close(opj_cio_t *cio);
00779
00785 OPJ_API int OPJ_CALLCONV cio_tell(opj_cio_t *cio);
00791 OPJ_API void OPJ_CALLCONV cio_seek(opj_cio_t *cio, int pos);
00792
00793
00794
00795
00796
00797
00798
00799 OPJ_API opj_event_mgr_t* OPJ_CALLCONV opj_set_event_mgr(opj_common_ptr cinfo, opj_event_mgr_t *event_mgr, void *context);
00800
00801
00802
00803
00804
00805
00811 OPJ_API opj_dinfo_t* OPJ_CALLCONV opj_create_decompress(OPJ_CODEC_FORMAT format);
00816 OPJ_API void OPJ_CALLCONV opj_destroy_decompress(opj_dinfo_t *dinfo);
00821 OPJ_API void OPJ_CALLCONV opj_set_default_decoder_parameters(opj_dparameters_t *parameters);
00828 OPJ_API void OPJ_CALLCONV opj_setup_decoder(opj_dinfo_t *dinfo, opj_dparameters_t *parameters);
00835 OPJ_API opj_image_t* OPJ_CALLCONV opj_decode(opj_dinfo_t *dinfo, opj_cio_t *cio);
00836
00844 OPJ_API opj_image_t* OPJ_CALLCONV opj_decode_with_info(opj_dinfo_t *dinfo, opj_cio_t *cio, opj_codestream_info_t *cstr_info);
00850 OPJ_API opj_cinfo_t* OPJ_CALLCONV opj_create_compress(OPJ_CODEC_FORMAT format);
00855 OPJ_API void OPJ_CALLCONV opj_destroy_compress(opj_cinfo_t *cinfo);
00877 OPJ_API void OPJ_CALLCONV opj_set_default_encoder_parameters(opj_cparameters_t *parameters);
00884 OPJ_API void OPJ_CALLCONV opj_setup_encoder(opj_cinfo_t *cinfo, opj_cparameters_t *parameters, opj_image_t *image);
00893 OPJ_API opj_bool OPJ_CALLCONV opj_encode(opj_cinfo_t *cinfo, opj_cio_t *cio, opj_image_t *image, char *index);
00902 OPJ_API opj_bool OPJ_CALLCONV opj_encode_with_info(opj_cinfo_t *cinfo, opj_cio_t *cio, opj_image_t *image, opj_codestream_info_t *cstr_info);
00907 OPJ_API void OPJ_CALLCONV opj_destroy_cstr_info(opj_codestream_info_t *cstr_info);
00908
00909
00910 #ifdef __cplusplus
00911 }
00912 #endif
00913
00914 #endif