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
00034
00035
00036
00037
00038
00039
00040
00041
00042 #ifndef __J2K_H
00043 #define __J2K_H
00044
00053
00054 #define J2K_CP_CSTY_PRT 0x01
00055 #define J2K_CP_CSTY_SOP 0x02
00056 #define J2K_CP_CSTY_EPH 0x04
00057 #define J2K_CCP_CSTY_PRT 0x01
00058 #define J2K_CCP_CBLKSTY_LAZY 0x01
00059 #define J2K_CCP_CBLKSTY_RESET 0x02
00060 #define J2K_CCP_CBLKSTY_TERMALL 0x04
00061 #define J2K_CCP_CBLKSTY_VSC 0x08
00062 #define J2K_CCP_CBLKSTY_PTERM 0x10
00063 #define J2K_CCP_CBLKSTY_SEGSYM 0x20
00064 #define J2K_CCP_QNTSTY_NOQNT 0
00065 #define J2K_CCP_QNTSTY_SIQNT 1
00066 #define J2K_CCP_QNTSTY_SEQNT 2
00067
00068 #define OPJ_J2K_DEFAULT_CBLK_DATA_SIZE 8192
00069
00070
00071
00072 #define J2K_MS_SOC 0xff4f
00073 #define J2K_MS_SOT 0xff90
00074 #define J2K_MS_SOD 0xff93
00075 #define J2K_MS_EOC 0xffd9
00076 #define J2K_MS_SIZ 0xff51
00077 #define J2K_MS_COD 0xff52
00078 #define J2K_MS_COC 0xff53
00079 #define J2K_MS_RGN 0xff5e
00080 #define J2K_MS_QCD 0xff5c
00081 #define J2K_MS_QCC 0xff5d
00082 #define J2K_MS_POC 0xff5f
00083 #define J2K_MS_TLM 0xff55
00084 #define J2K_MS_PLM 0xff57
00085 #define J2K_MS_PLT 0xff58
00086 #define J2K_MS_PPM 0xff60
00087 #define J2K_MS_PPT 0xff61
00088 #define J2K_MS_SOP 0xff91
00089 #define J2K_MS_EPH 0xff92
00090 #define J2K_MS_CRG 0xff63
00091 #define J2K_MS_COM 0xff64
00092 #define J2K_MS_CBD 0xff78
00093 #define J2K_MS_MCC 0xff75
00094 #define J2K_MS_MCT 0xff74
00095 #define J2K_MS_MCO 0xff77
00097 #define J2K_MS_UNK 0
00099
00100 #ifdef USE_JPWL
00101 #define J2K_MS_EPC 0xff68
00102 #define J2K_MS_EPB 0xff66
00103 #define J2K_MS_ESD 0xff67
00104 #define J2K_MS_RED 0xff69
00105 #endif
00106 #ifdef USE_JPSEC
00107 #define J2K_MS_SEC 0xff65
00108 #define J2K_MS_INSEC 0xff94
00109 #endif
00110
00111
00112
00113
00118 typedef enum J2K_STATUS {
00119 J2K_STATE_NONE = 0x0000,
00120 J2K_STATE_MHSOC = 0x0001,
00121 J2K_STATE_MHSIZ = 0x0002,
00122 J2K_STATE_MH = 0x0004,
00123 J2K_STATE_TPHSOT = 0x0008,
00124 J2K_STATE_TPH = 0x0010,
00125 J2K_STATE_MT = 0x0020,
00126 J2K_STATE_NEOC = 0x0040,
00128 J2K_STATE_EOC = 0x0100,
00129 J2K_STATE_ERR = 0x8000
00130 } J2K_STATUS;
00131
00135 typedef enum MCT_ELEMENT_TYPE
00136 {
00137 MCT_TYPE_INT16 = 0,
00138 MCT_TYPE_INT32 = 1,
00139 MCT_TYPE_FLOAT = 2,
00140 MCT_TYPE_DOUBLE = 3
00141 } J2K_MCT_ELEMENT_TYPE;
00142
00146 typedef enum MCT_ARRAY_TYPE
00147 {
00148 MCT_TYPE_DEPENDENCY = 0,
00149 MCT_TYPE_DECORRELATION = 1,
00150 MCT_TYPE_OFFSET = 2
00151 } J2K_MCT_ARRAY_TYPE;
00152
00153
00154
00158 typedef enum T2_MODE {
00159 THRESH_CALC = 0,
00160 FINAL_PASS = 1
00161 }J2K_T2_MODE;
00162
00166 typedef struct opj_stepsize {
00168 OPJ_INT32 expn;
00170 OPJ_INT32 mant;
00171 } opj_stepsize_t;
00172
00176 typedef struct opj_tccp
00177 {
00179 OPJ_UINT32 csty;
00181 OPJ_UINT32 numresolutions;
00183 OPJ_UINT32 cblkw;
00185 OPJ_UINT32 cblkh;
00187 OPJ_UINT32 cblksty;
00189 OPJ_UINT32 qmfbid;
00191 OPJ_UINT32 qntsty;
00193 opj_stepsize_t stepsizes[OPJ_J2K_MAXBANDS];
00195 OPJ_UINT32 numgbits;
00197 OPJ_INT32 roishift;
00199 OPJ_UINT32 prcw[OPJ_J2K_MAXRLVLS];
00201 OPJ_UINT32 prch[OPJ_J2K_MAXRLVLS];
00203 OPJ_INT32 m_dc_level_shift;
00204 }
00205 opj_tccp_t;
00206
00207
00208
00212 typedef struct opj_mct_data
00213 {
00214 J2K_MCT_ELEMENT_TYPE m_element_type;
00215 J2K_MCT_ARRAY_TYPE m_array_type;
00216 OPJ_UINT32 m_index;
00217 OPJ_BYTE * m_data;
00218 OPJ_UINT32 m_data_size;
00219 }
00220 opj_mct_data_t;
00221
00225 typedef struct opj_simple_mcc_decorrelation_data
00226 {
00227 OPJ_UINT32 m_index;
00228 OPJ_UINT32 m_nb_comps;
00229 opj_mct_data_t * m_decorrelation_array;
00230 opj_mct_data_t * m_offset_array;
00231 OPJ_UINT32 m_is_irreversible : 1;
00232 }
00233 opj_simple_mcc_decorrelation_data_t;
00234
00240 typedef struct opj_tcp
00241 {
00243 OPJ_UINT32 csty;
00245 OPJ_PROG_ORDER prg;
00247 OPJ_UINT32 numlayers;
00248 OPJ_UINT32 num_layers_to_decode;
00250 OPJ_UINT32 mct;
00252 OPJ_FLOAT32 rates[100];
00254 OPJ_UINT32 numpocs;
00256 opj_poc_t pocs[32];
00258 OPJ_BYTE *ppt_data;
00260 OPJ_BYTE *ppt_buffer;
00262 OPJ_UINT32 ppt_data_size;
00264 OPJ_UINT32 ppt_len;
00266 OPJ_FLOAT32 distoratio[100];
00268 opj_tccp_t *tccps;
00270 OPJ_UINT32 m_nb_tile_parts;
00272 OPJ_BYTE * m_data;
00274 OPJ_UINT32 m_data_size;
00276 OPJ_FLOAT64 * mct_norms;
00278 OPJ_FLOAT32 * m_mct_decoding_matrix;
00280 OPJ_FLOAT32 * m_mct_coding_matrix;
00282 opj_mct_data_t * m_mct_records;
00284 OPJ_UINT32 m_nb_mct_records;
00286 OPJ_UINT32 m_nb_max_mct_records;
00288 opj_simple_mcc_decorrelation_data_t * m_mcc_records;
00290 OPJ_UINT32 m_nb_mcc_records;
00292 OPJ_UINT32 m_nb_max_mcc_records;
00293
00294
00295
00297 OPJ_UINT32 ppt : 1;
00299 OPJ_UINT32 POC : 1;
00300 } opj_tcp_t;
00301
00302
00303
00304
00305 typedef struct opj_encoding_param
00306 {
00308 OPJ_UINT32 m_max_comp_size;
00310 OPJ_INT32 m_tp_pos;
00312 OPJ_INT32 *m_matrice;
00314 OPJ_BYTE m_tp_flag;
00316 OPJ_UINT32 m_disto_alloc : 1;
00318 OPJ_UINT32 m_fixed_alloc : 1;
00320 OPJ_UINT32 m_fixed_quality : 1;
00322 OPJ_UINT32 m_tp_on : 1;
00323 }
00324 opj_encoding_param_t;
00325
00326 typedef struct opj_decoding_param
00327 {
00329 OPJ_UINT32 m_reduce;
00331 OPJ_UINT32 m_layer;
00332 }
00333 opj_decoding_param_t;
00334
00335
00339 typedef struct opj_cp
00340 {
00342
00344 OPJ_UINT16 rsiz;
00346 OPJ_UINT32 tx0;
00348 OPJ_UINT32 ty0;
00350 OPJ_UINT32 tdx;
00352 OPJ_UINT32 tdy;
00354 OPJ_CHAR *comment;
00356 OPJ_UINT32 tw;
00358 OPJ_UINT32 th;
00359
00361 OPJ_BYTE *ppm_data;
00363 OPJ_UINT32 ppm_len;
00365 OPJ_UINT32 ppm_data_read;
00366
00367 OPJ_BYTE *ppm_data_current;
00368
00370 OPJ_BYTE *ppm_buffer;
00372 OPJ_BYTE *ppm_data_first;
00374 OPJ_UINT32 ppm_data_size;
00376 OPJ_INT32 ppm_store;
00378 OPJ_INT32 ppm_previous;
00379
00381 opj_tcp_t *tcps;
00382
00383 union
00384 {
00385 opj_decoding_param_t m_dec;
00386 opj_encoding_param_t m_enc;
00387 }
00388 m_specific_param;
00389
00390
00391
00392 #ifdef USE_JPWL
00393
00394 OPJ_BOOL epc_on;
00396 OPJ_BOOL epb_on;
00398 OPJ_BOOL esd_on;
00400 OPJ_BOOL info_on;
00402 OPJ_BOOL red_on;
00404 int hprot_MH;
00406 int hprot_TPH_tileno[JPWL_MAX_NO_TILESPECS];
00408 int hprot_TPH[JPWL_MAX_NO_TILESPECS];
00410 int pprot_tileno[JPWL_MAX_NO_PACKSPECS];
00412 int pprot_packno[JPWL_MAX_NO_PACKSPECS];
00414 int pprot[JPWL_MAX_NO_PACKSPECS];
00416 int sens_size;
00418 int sens_addr;
00420 int sens_range;
00422 int sens_MH;
00424 int sens_TPH_tileno[JPWL_MAX_NO_TILESPECS];
00426 int sens_TPH[JPWL_MAX_NO_TILESPECS];
00428 OPJ_BOOL correct;
00430 int exp_comps;
00432 OPJ_UINT32 max_tiles;
00433 #endif
00434
00435
00437 OPJ_UINT32 ppm : 1;
00439 OPJ_UINT32 m_is_decoder : 1;
00440
00441 } opj_cp_t;
00442
00443
00444 typedef struct opj_j2k_dec
00445 {
00447 OPJ_UINT32 m_state;
00451 opj_tcp_t *m_default_tcp;
00452 OPJ_BYTE *m_header_data;
00453 OPJ_UINT32 m_header_data_size;
00455 OPJ_UINT32 m_sot_length;
00457 OPJ_UINT32 m_start_tile_x;
00458 OPJ_UINT32 m_start_tile_y;
00459 OPJ_UINT32 m_end_tile_x;
00460 OPJ_UINT32 m_end_tile_y;
00464 OPJ_UINT32 m_DA_x0;
00465 OPJ_UINT32 m_DA_y0;
00466 OPJ_UINT32 m_DA_x1;
00467 OPJ_UINT32 m_DA_y1;
00468
00470 OPJ_INT32 m_tile_ind_to_dec;
00472 OPJ_OFF_T m_last_sot_read_pos;
00473
00479 OPJ_BOOL m_last_tile_part;
00481 OPJ_UINT32 m_can_decode : 1;
00482 OPJ_UINT32 m_discard_tiles : 1;
00483 OPJ_UINT32 m_skip_data : 1;
00484
00485 } opj_j2k_dec_t;
00486
00487 typedef struct opj_j2k_enc
00488 {
00490 OPJ_UINT32 m_current_poc_tile_part_number;
00491
00493 OPJ_UINT32 m_current_tile_part_number;
00494
00499 OPJ_OFF_T m_tlm_start;
00503 OPJ_BYTE * m_tlm_sot_offsets_buffer;
00507 OPJ_BYTE * m_tlm_sot_offsets_current;
00508
00511 OPJ_UINT32 m_total_tile_parts;
00512
00513
00514 OPJ_BYTE * m_encoded_tile_data;
00515
00516
00517 OPJ_UINT32 m_encoded_tile_size;
00518
00519
00520 OPJ_BYTE * m_header_tile_data;
00521
00522
00523 OPJ_UINT32 m_header_tile_data_size;
00524
00525
00526 } opj_j2k_enc_t;
00527
00528
00529
00530 struct opj_tcd;
00534 typedef struct opj_j2k
00535 {
00536
00537 OPJ_BOOL m_is_decoder;
00538
00539
00540 union
00541 {
00542 opj_j2k_dec_t m_decoder;
00543 opj_j2k_enc_t m_encoder;
00544 }
00545 m_specific_param;
00546
00548 opj_image_t* m_private_image;
00549
00550
00551 opj_image_t* m_output_image;
00552
00554 opj_cp_t m_cp;
00555
00557 opj_procedure_list_t * m_procedure_list;
00558
00560 opj_procedure_list_t * m_validation_list;
00561
00563 opj_codestream_index_t *cstr_index;
00564
00566 OPJ_UINT32 m_current_tile_number;
00567
00569 struct opj_tcd * m_tcd;
00570
00571 }
00572 opj_j2k_t;
00573
00574
00575
00576
00579
00580
00587 void opj_j2k_setup_decoder(opj_j2k_t *j2k, opj_dparameters_t *parameters);
00588
00594 opj_j2k_t* opj_j2k_create_compress(void);
00595
00596
00597 void opj_j2k_setup_encoder( opj_j2k_t *p_j2k,
00598 opj_cparameters_t *parameters,
00599 opj_image_t *image,
00600 opj_event_mgr_t * p_manager);
00601
00605 char *opj_j2k_convert_progression_order(OPJ_PROG_ORDER prg_order);
00606
00607
00611
00616 OPJ_BOOL opj_j2k_end_decompress(opj_j2k_t *j2k,
00617 opj_stream_private_t *p_stream,
00618 opj_event_mgr_t * p_manager);
00619
00630 OPJ_BOOL opj_j2k_read_header( opj_stream_private_t *p_stream,
00631 opj_j2k_t* p_j2k,
00632 opj_image_t** p_image,
00633 opj_event_mgr_t* p_manager );
00634
00635
00641 void opj_j2k_destroy (opj_j2k_t *p_j2k);
00642
00648 void j2k_destroy_cstr_index (opj_codestream_index_t *p_cstr_ind);
00649
00659 OPJ_BOOL opj_j2k_decode_tile ( opj_j2k_t * p_j2k,
00660 OPJ_UINT32 p_tile_index,
00661 OPJ_BYTE * p_data,
00662 OPJ_UINT32 p_data_size,
00663 opj_stream_private_t *p_stream,
00664 opj_event_mgr_t * p_manager );
00665
00680 OPJ_BOOL opj_j2k_read_tile_header ( opj_j2k_t * p_j2k,
00681 OPJ_UINT32 * p_tile_index,
00682 OPJ_UINT32 * p_data_size,
00683 OPJ_INT32 * p_tile_x0,
00684 OPJ_INT32 * p_tile_y0,
00685 OPJ_INT32 * p_tile_x1,
00686 OPJ_INT32 * p_tile_y1,
00687 OPJ_UINT32 * p_nb_comps,
00688 OPJ_BOOL * p_go_on,
00689 opj_stream_private_t *p_stream,
00690 opj_event_mgr_t * p_manager );
00691
00692
00706 OPJ_BOOL opj_j2k_set_decode_area( opj_j2k_t *p_j2k,
00707 opj_image_t* p_image,
00708 OPJ_INT32 p_start_x, OPJ_INT32 p_start_y,
00709 OPJ_INT32 p_end_x, OPJ_INT32 p_end_y,
00710 opj_event_mgr_t * p_manager );
00711
00717 opj_j2k_t* opj_j2k_create_decompress(void);
00718
00719
00728 void j2k_dump (opj_j2k_t* p_j2k, OPJ_INT32 flag, FILE* out_stream);
00729
00730
00731
00739 void j2k_dump_image_header(opj_image_t* image, OPJ_BOOL dev_dump_flag, FILE* out_stream);
00740
00748 void j2k_dump_image_comp_header(opj_image_comp_t* comp, OPJ_BOOL dev_dump_flag, FILE* out_stream);
00749
00757 opj_codestream_info_v2_t* j2k_get_cstr_info(opj_j2k_t* p_j2k);
00758
00766 opj_codestream_index_t* j2k_get_cstr_index(opj_j2k_t* p_j2k);
00767
00776 OPJ_BOOL opj_j2k_decode(opj_j2k_t *j2k,
00777 opj_stream_private_t *p_stream,
00778 opj_image_t *p_image,
00779 opj_event_mgr_t *p_manager);
00780
00781
00782 OPJ_BOOL opj_j2k_get_tile( opj_j2k_t *p_j2k,
00783 opj_stream_private_t *p_stream,
00784 opj_image_t* p_image,
00785 opj_event_mgr_t * p_manager,
00786 OPJ_UINT32 tile_index );
00787
00788 OPJ_BOOL opj_j2k_set_decoded_resolution_factor(opj_j2k_t *p_j2k,
00789 OPJ_UINT32 res_factor,
00790 opj_event_mgr_t * p_manager);
00791
00792
00802 OPJ_BOOL opj_j2k_write_tile ( opj_j2k_t * p_j2k,
00803 OPJ_UINT32 p_tile_index,
00804 OPJ_BYTE * p_data,
00805 OPJ_UINT32 p_data_size,
00806 opj_stream_private_t *p_stream,
00807 opj_event_mgr_t * p_manager );
00808
00812 OPJ_BOOL opj_j2k_encode( opj_j2k_t * p_j2k,
00813 opj_stream_private_t *cio,
00814 opj_event_mgr_t * p_manager );
00815
00826 OPJ_BOOL opj_j2k_start_compress(opj_j2k_t *p_j2k,
00827 opj_stream_private_t *p_stream,
00828 opj_image_t * p_image,
00829 opj_event_mgr_t * p_manager);
00830
00835 OPJ_BOOL opj_j2k_end_compress( opj_j2k_t *p_j2k,
00836 opj_stream_private_t *cio,
00837 opj_event_mgr_t * p_manager);
00838
00839 OPJ_BOOL opj_j2k_setup_mct_encoding (opj_tcp_t * p_tcp, opj_image_t * p_image);
00840
00841
00842 #endif