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
00235 typedef struct opj_ppx_struct
00236 {
00237 OPJ_BYTE* m_data;
00238 OPJ_UINT32 m_data_size;
00239 } opj_ppx;
00240
00246 typedef struct opj_tcp
00247 {
00249 OPJ_UINT32 csty;
00251 OPJ_PROG_ORDER prg;
00253 OPJ_UINT32 numlayers;
00254 OPJ_UINT32 num_layers_to_decode;
00256 OPJ_UINT32 mct;
00258 OPJ_FLOAT32 rates[100];
00260 OPJ_UINT32 numpocs;
00262 opj_poc_t pocs[32];
00263
00265 OPJ_UINT32 ppt_markers_count;
00267 opj_ppx* ppt_markers;
00268
00270 OPJ_BYTE *ppt_data;
00272 OPJ_BYTE *ppt_buffer;
00274 OPJ_UINT32 ppt_data_size;
00276 OPJ_UINT32 ppt_len;
00278 OPJ_FLOAT32 distoratio[100];
00280 opj_tccp_t *tccps;
00282 OPJ_UINT32 m_nb_tile_parts;
00284 OPJ_BYTE * m_data;
00286 OPJ_UINT32 m_data_size;
00288 OPJ_FLOAT64 * mct_norms;
00290 OPJ_FLOAT32 * m_mct_decoding_matrix;
00292 OPJ_FLOAT32 * m_mct_coding_matrix;
00294 opj_mct_data_t * m_mct_records;
00296 OPJ_UINT32 m_nb_mct_records;
00298 OPJ_UINT32 m_nb_max_mct_records;
00300 opj_simple_mcc_decorrelation_data_t * m_mcc_records;
00302 OPJ_UINT32 m_nb_mcc_records;
00304 OPJ_UINT32 m_nb_max_mcc_records;
00305
00306
00307
00309 OPJ_UINT32 cod : 1;
00311 OPJ_UINT32 ppt : 1;
00313 OPJ_UINT32 POC : 1;
00314 } opj_tcp_t;
00315
00316
00317
00318
00319 typedef struct opj_encoding_param
00320 {
00322 OPJ_UINT32 m_max_comp_size;
00324 OPJ_INT32 m_tp_pos;
00326 OPJ_INT32 *m_matrice;
00328 OPJ_BYTE m_tp_flag;
00330 OPJ_UINT32 m_disto_alloc : 1;
00332 OPJ_UINT32 m_fixed_alloc : 1;
00334 OPJ_UINT32 m_fixed_quality : 1;
00336 OPJ_UINT32 m_tp_on : 1;
00337 }
00338 opj_encoding_param_t;
00339
00340 typedef struct opj_decoding_param
00341 {
00343 OPJ_UINT32 m_reduce;
00345 OPJ_UINT32 m_layer;
00346 }
00347 opj_decoding_param_t;
00348
00349
00353 typedef struct opj_cp
00354 {
00356
00358 OPJ_UINT16 rsiz;
00360 OPJ_UINT32 tx0;
00362 OPJ_UINT32 ty0;
00364 OPJ_UINT32 tdx;
00366 OPJ_UINT32 tdy;
00368 OPJ_CHAR *comment;
00370 OPJ_UINT32 tw;
00372 OPJ_UINT32 th;
00373
00375 OPJ_UINT32 ppm_markers_count;
00377 opj_ppx* ppm_markers;
00378
00380 OPJ_BYTE *ppm_data;
00382 OPJ_UINT32 ppm_len;
00384 OPJ_UINT32 ppm_data_read;
00385
00386 OPJ_BYTE *ppm_data_current;
00387
00389 OPJ_BYTE *ppm_buffer;
00391 OPJ_BYTE *ppm_data_first;
00393 OPJ_UINT32 ppm_data_size;
00395 OPJ_INT32 ppm_store;
00397 OPJ_INT32 ppm_previous;
00398
00400 opj_tcp_t *tcps;
00401
00402 union
00403 {
00404 opj_decoding_param_t m_dec;
00405 opj_encoding_param_t m_enc;
00406 }
00407 m_specific_param;
00408
00409
00410
00411 #ifdef USE_JPWL
00412
00413 OPJ_BOOL epc_on;
00415 OPJ_BOOL epb_on;
00417 OPJ_BOOL esd_on;
00419 OPJ_BOOL info_on;
00421 OPJ_BOOL red_on;
00423 int hprot_MH;
00425 int hprot_TPH_tileno[JPWL_MAX_NO_TILESPECS];
00427 int hprot_TPH[JPWL_MAX_NO_TILESPECS];
00429 int pprot_tileno[JPWL_MAX_NO_PACKSPECS];
00431 int pprot_packno[JPWL_MAX_NO_PACKSPECS];
00433 int pprot[JPWL_MAX_NO_PACKSPECS];
00435 int sens_size;
00437 int sens_addr;
00439 int sens_range;
00441 int sens_MH;
00443 int sens_TPH_tileno[JPWL_MAX_NO_TILESPECS];
00445 int sens_TPH[JPWL_MAX_NO_TILESPECS];
00447 OPJ_BOOL correct;
00449 int exp_comps;
00451 OPJ_UINT32 max_tiles;
00452 #endif
00453
00454
00456 OPJ_UINT32 ppm : 1;
00458 OPJ_UINT32 m_is_decoder : 1;
00459
00460 } opj_cp_t;
00461
00462
00463 typedef struct opj_j2k_dec
00464 {
00466 OPJ_UINT32 m_state;
00470 opj_tcp_t *m_default_tcp;
00471 OPJ_BYTE *m_header_data;
00472 OPJ_UINT32 m_header_data_size;
00474 OPJ_UINT32 m_sot_length;
00476 OPJ_UINT32 m_start_tile_x;
00477 OPJ_UINT32 m_start_tile_y;
00478 OPJ_UINT32 m_end_tile_x;
00479 OPJ_UINT32 m_end_tile_y;
00483 OPJ_UINT32 m_DA_x0;
00484 OPJ_UINT32 m_DA_y0;
00485 OPJ_UINT32 m_DA_x1;
00486 OPJ_UINT32 m_DA_y1;
00487
00489 OPJ_INT32 m_tile_ind_to_dec;
00491 OPJ_OFF_T m_last_sot_read_pos;
00492
00498 OPJ_BOOL m_last_tile_part;
00500 OPJ_UINT32 m_can_decode : 1;
00501 OPJ_UINT32 m_discard_tiles : 1;
00502 OPJ_UINT32 m_skip_data : 1;
00504 OPJ_UINT32 m_nb_tile_parts_correction_checked : 1;
00505 OPJ_UINT32 m_nb_tile_parts_correction : 1;
00506
00507 } opj_j2k_dec_t;
00508
00509 typedef struct opj_j2k_enc
00510 {
00512 OPJ_UINT32 m_current_poc_tile_part_number;
00513
00515 OPJ_UINT32 m_current_tile_part_number;
00516
00521 OPJ_OFF_T m_tlm_start;
00525 OPJ_BYTE * m_tlm_sot_offsets_buffer;
00529 OPJ_BYTE * m_tlm_sot_offsets_current;
00530
00533 OPJ_UINT32 m_total_tile_parts;
00534
00535
00536 OPJ_BYTE * m_encoded_tile_data;
00537
00538
00539 OPJ_UINT32 m_encoded_tile_size;
00540
00541
00542 OPJ_BYTE * m_header_tile_data;
00543
00544
00545 OPJ_UINT32 m_header_tile_data_size;
00546
00547
00548 } opj_j2k_enc_t;
00549
00550
00551
00552 struct opj_tcd;
00556 typedef struct opj_j2k
00557 {
00558
00559 OPJ_BOOL m_is_decoder;
00560
00561
00562 union
00563 {
00564 opj_j2k_dec_t m_decoder;
00565 opj_j2k_enc_t m_encoder;
00566 }
00567 m_specific_param;
00568
00570 opj_image_t* m_private_image;
00571
00572
00573 opj_image_t* m_output_image;
00574
00576 opj_cp_t m_cp;
00577
00579 opj_procedure_list_t * m_procedure_list;
00580
00582 opj_procedure_list_t * m_validation_list;
00583
00585 opj_codestream_index_t *cstr_index;
00586
00588 OPJ_UINT32 m_current_tile_number;
00589
00591 struct opj_tcd * m_tcd;
00592 }
00593 opj_j2k_t;
00594
00595
00596
00597
00600
00601
00608 void opj_j2k_setup_decoder(opj_j2k_t *j2k, opj_dparameters_t *parameters);
00609
00615 opj_j2k_t* opj_j2k_create_compress(void);
00616
00617
00618 OPJ_BOOL opj_j2k_setup_encoder( opj_j2k_t *p_j2k,
00619 opj_cparameters_t *parameters,
00620 opj_image_t *image,
00621 opj_event_mgr_t * p_manager);
00622
00626 char *opj_j2k_convert_progression_order(OPJ_PROG_ORDER prg_order);
00627
00628
00632
00637 OPJ_BOOL opj_j2k_end_decompress(opj_j2k_t *j2k,
00638 opj_stream_private_t *p_stream,
00639 opj_event_mgr_t * p_manager);
00640
00651 OPJ_BOOL opj_j2k_read_header( opj_stream_private_t *p_stream,
00652 opj_j2k_t* p_j2k,
00653 opj_image_t** p_image,
00654 opj_event_mgr_t* p_manager );
00655
00656
00662 void opj_j2k_destroy (opj_j2k_t *p_j2k);
00663
00669 void j2k_destroy_cstr_index (opj_codestream_index_t *p_cstr_ind);
00670
00680 OPJ_BOOL opj_j2k_decode_tile ( opj_j2k_t * p_j2k,
00681 OPJ_UINT32 p_tile_index,
00682 OPJ_BYTE * p_data,
00683 OPJ_UINT32 p_data_size,
00684 opj_stream_private_t *p_stream,
00685 opj_event_mgr_t * p_manager );
00686
00701 OPJ_BOOL opj_j2k_read_tile_header ( opj_j2k_t * p_j2k,
00702 OPJ_UINT32 * p_tile_index,
00703 OPJ_UINT32 * p_data_size,
00704 OPJ_INT32 * p_tile_x0,
00705 OPJ_INT32 * p_tile_y0,
00706 OPJ_INT32 * p_tile_x1,
00707 OPJ_INT32 * p_tile_y1,
00708 OPJ_UINT32 * p_nb_comps,
00709 OPJ_BOOL * p_go_on,
00710 opj_stream_private_t *p_stream,
00711 opj_event_mgr_t * p_manager );
00712
00713
00727 OPJ_BOOL opj_j2k_set_decode_area( opj_j2k_t *p_j2k,
00728 opj_image_t* p_image,
00729 OPJ_INT32 p_start_x, OPJ_INT32 p_start_y,
00730 OPJ_INT32 p_end_x, OPJ_INT32 p_end_y,
00731 opj_event_mgr_t * p_manager );
00732
00738 opj_j2k_t* opj_j2k_create_decompress(void);
00739
00740
00749 void j2k_dump (opj_j2k_t* p_j2k, OPJ_INT32 flag, FILE* out_stream);
00750
00751
00752
00760 void j2k_dump_image_header(opj_image_t* image, OPJ_BOOL dev_dump_flag, FILE* out_stream);
00761
00769 void j2k_dump_image_comp_header(opj_image_comp_t* comp, OPJ_BOOL dev_dump_flag, FILE* out_stream);
00770
00778 opj_codestream_info_v2_t* j2k_get_cstr_info(opj_j2k_t* p_j2k);
00779
00787 opj_codestream_index_t* j2k_get_cstr_index(opj_j2k_t* p_j2k);
00788
00797 OPJ_BOOL opj_j2k_decode(opj_j2k_t *j2k,
00798 opj_stream_private_t *p_stream,
00799 opj_image_t *p_image,
00800 opj_event_mgr_t *p_manager);
00801
00802
00803 OPJ_BOOL opj_j2k_get_tile( opj_j2k_t *p_j2k,
00804 opj_stream_private_t *p_stream,
00805 opj_image_t* p_image,
00806 opj_event_mgr_t * p_manager,
00807 OPJ_UINT32 tile_index );
00808
00809 OPJ_BOOL opj_j2k_set_decoded_resolution_factor(opj_j2k_t *p_j2k,
00810 OPJ_UINT32 res_factor,
00811 opj_event_mgr_t * p_manager);
00812
00813
00823 OPJ_BOOL opj_j2k_write_tile ( opj_j2k_t * p_j2k,
00824 OPJ_UINT32 p_tile_index,
00825 OPJ_BYTE * p_data,
00826 OPJ_UINT32 p_data_size,
00827 opj_stream_private_t *p_stream,
00828 opj_event_mgr_t * p_manager );
00829
00833 OPJ_BOOL opj_j2k_encode( opj_j2k_t * p_j2k,
00834 opj_stream_private_t *cio,
00835 opj_event_mgr_t * p_manager );
00836
00847 OPJ_BOOL opj_j2k_start_compress(opj_j2k_t *p_j2k,
00848 opj_stream_private_t *p_stream,
00849 opj_image_t * p_image,
00850 opj_event_mgr_t * p_manager);
00851
00856 OPJ_BOOL opj_j2k_end_compress( opj_j2k_t *p_j2k,
00857 opj_stream_private_t *cio,
00858 opj_event_mgr_t * p_manager);
00859
00860 OPJ_BOOL opj_j2k_setup_mct_encoding (opj_tcp_t * p_tcp, opj_image_t * p_image);
00861
00862
00863 #endif