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 #ifndef __J2K_H
00033 #define __J2K_H
00034
00043
00044 #define J2K_CP_CSTY_PRT 0x01
00045 #define J2K_CP_CSTY_SOP 0x02
00046 #define J2K_CP_CSTY_EPH 0x04
00047 #define J2K_CCP_CSTY_PRT 0x01
00048 #define J2K_CCP_CBLKSTY_LAZY 0x01
00049 #define J2K_CCP_CBLKSTY_RESET 0x02
00050 #define J2K_CCP_CBLKSTY_TERMALL 0x04
00051 #define J2K_CCP_CBLKSTY_VSC 0x08
00052 #define J2K_CCP_CBLKSTY_PTERM 0x10
00053 #define J2K_CCP_CBLKSTY_SEGSYM 0x20
00054 #define J2K_CCP_QNTSTY_NOQNT 0
00055 #define J2K_CCP_QNTSTY_SIQNT 1
00056 #define J2K_CCP_QNTSTY_SEQNT 2
00057
00058
00059
00060 #define J2K_MS_SOC 0xff4f
00061 #define J2K_MS_SOT 0xff90
00062 #define J2K_MS_SOD 0xff93
00063 #define J2K_MS_EOC 0xffd9
00064 #define J2K_MS_SIZ 0xff51
00065 #define J2K_MS_COD 0xff52
00066 #define J2K_MS_COC 0xff53
00067 #define J2K_MS_RGN 0xff5e
00068 #define J2K_MS_QCD 0xff5c
00069 #define J2K_MS_QCC 0xff5d
00070 #define J2K_MS_POC 0xff5f
00071 #define J2K_MS_TLM 0xff55
00072 #define J2K_MS_PLM 0xff57
00073 #define J2K_MS_PLT 0xff58
00074 #define J2K_MS_PPM 0xff60
00075 #define J2K_MS_PPT 0xff61
00076 #define J2K_MS_SOP 0xff91
00077 #define J2K_MS_EPH 0xff92
00078 #define J2K_MS_CRG 0xff63
00079 #define J2K_MS_COM 0xff64
00080
00081 #ifdef USE_JPWL
00082 #define J2K_MS_EPC 0xff68
00083 #define J2K_MS_EPB 0xff66
00084 #define J2K_MS_ESD 0xff67
00085 #define J2K_MS_RED 0xff69
00086 #endif
00087 #ifdef USE_JPSEC
00088 #define J2K_MS_SEC 0xff65
00089 #define J2K_MS_INSEC 0xff94
00090 #endif
00091
00092
00093
00094
00095
00100 typedef enum J2K_STATUS {
00101 J2K_STATE_MHSOC = 0x0001,
00102 J2K_STATE_MHSIZ = 0x0002,
00103 J2K_STATE_MH = 0x0004,
00104 J2K_STATE_TPHSOT = 0x0008,
00105 J2K_STATE_TPH = 0x0010,
00106 J2K_STATE_MT = 0x0020,
00107 J2K_STATE_NEOC = 0x0040,
00108 J2K_STATE_ERR = 0x0080
00109 } J2K_STATUS;
00110
00111
00112
00116 typedef enum T2_MODE {
00117 THRESH_CALC = 0,
00118 FINAL_PASS = 1
00119 }J2K_T2_MODE;
00120
00124 typedef struct opj_stepsize {
00126 int expn;
00128 int mant;
00129 } opj_stepsize_t;
00130
00134 typedef struct opj_tccp {
00136 int csty;
00138 int numresolutions;
00140 int cblkw;
00142 int cblkh;
00144 int cblksty;
00146 int qmfbid;
00148 int qntsty;
00150 opj_stepsize_t stepsizes[J2K_MAXBANDS];
00152 int numgbits;
00154 int roishift;
00156 int prcw[J2K_MAXRLVLS];
00158 int prch[J2K_MAXRLVLS];
00159 } opj_tccp_t;
00160
00166 typedef struct opj_tcp {
00168 int first;
00170 int csty;
00172 OPJ_PROG_ORDER prg;
00174 int numlayers;
00176 int mct;
00178 float rates[100];
00180 int numpocs;
00182 int POC;
00184 opj_poc_t pocs[32];
00186 unsigned char *ppt_data;
00188 unsigned char *ppt_data_first;
00190 int ppt;
00192 int ppt_store;
00194 int ppt_len;
00196 float distoratio[100];
00198 opj_tccp_t *tccps;
00199 } opj_tcp_t;
00200
00204 typedef struct opj_cp {
00206 OPJ_CINEMA_MODE cinema;
00208 int max_comp_size;
00210 int img_size;
00212 OPJ_RSIZ_CAPABILITIES rsiz;
00214 char tp_on;
00216 char tp_flag;
00218 int tp_pos;
00220 int disto_alloc;
00222 int fixed_alloc;
00224 int fixed_quality;
00226 int reduce;
00228 int layer;
00230 OPJ_LIMIT_DECODING limit_decoding;
00232 int tx0;
00234 int ty0;
00236 int tdx;
00238 int tdy;
00240 char *comment;
00242 int tw;
00244 int th;
00246 int *tileno;
00248 int tileno_size;
00250 unsigned char *ppm_data;
00252 unsigned char *ppm_data_first;
00254 int ppm;
00256 int ppm_store;
00258 int ppm_previous;
00260 int ppm_len;
00262 opj_tcp_t *tcps;
00264 int *matrice;
00265
00266 #ifdef USE_JPWL
00267
00268 opj_bool epc_on;
00270 opj_bool epb_on;
00272 opj_bool esd_on;
00274 opj_bool info_on;
00276 opj_bool red_on;
00278 int hprot_MH;
00280 int hprot_TPH_tileno[JPWL_MAX_NO_TILESPECS];
00282 int hprot_TPH[JPWL_MAX_NO_TILESPECS];
00284 int pprot_tileno[JPWL_MAX_NO_PACKSPECS];
00286 int pprot_packno[JPWL_MAX_NO_PACKSPECS];
00288 int pprot[JPWL_MAX_NO_PACKSPECS];
00290 int sens_size;
00292 int sens_addr;
00294 int sens_range;
00296 int sens_MH;
00298 int sens_TPH_tileno[JPWL_MAX_NO_TILESPECS];
00300 int sens_TPH[JPWL_MAX_NO_TILESPECS];
00302 opj_bool correct;
00304 int exp_comps;
00306 int max_tiles;
00307 #endif
00308
00309 } opj_cp_t;
00310
00314 typedef struct opj_j2k {
00316 opj_common_ptr cinfo;
00317
00319 int state;
00321 int curtileno;
00323 int tp_num;
00325 int cur_tp_num;
00327 int *cur_totnum_tp;
00332 int tlm_start;
00335 int totnum_tp;
00340 unsigned char *eot;
00345 int sot_start;
00346 int sod_start;
00351 int pos_correction;
00353 unsigned char **tile_data;
00355 int *tile_len;
00360 opj_tcp_t *default_tcp;
00362 opj_image_t *image;
00364 opj_cp_t *cp;
00366 opj_codestream_info_t *cstr_info;
00368 opj_cio_t *cio;
00369 } opj_j2k_t;
00370
00373
00379 opj_j2k_t* j2k_create_decompress(opj_common_ptr cinfo);
00384 void j2k_destroy_decompress(opj_j2k_t *j2k);
00391 void j2k_setup_decoder(opj_j2k_t *j2k, opj_dparameters_t *parameters);
00399 opj_image_t* j2k_decode(opj_j2k_t *j2k, opj_cio_t *cio, opj_codestream_info_t *cstr_info);
00407 opj_image_t* j2k_decode_jpt_stream(opj_j2k_t *j2k, opj_cio_t *cio, opj_codestream_info_t *cstr_info);
00413 opj_j2k_t* j2k_create_compress(opj_common_ptr cinfo);
00418 void j2k_destroy_compress(opj_j2k_t *j2k);
00426 void j2k_setup_encoder(opj_j2k_t *j2k, opj_cparameters_t *parameters, opj_image_t *image);
00430 char *j2k_convert_progression_order(OPJ_PROG_ORDER prg_order);
00439 opj_bool j2k_encode(opj_j2k_t *j2k, opj_cio_t *cio, opj_image_t *image, opj_codestream_info_t *cstr_info);
00440
00441
00445
00446 #endif