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 OPJ_J2K_H
00043 #define OPJ_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
00069
00070 #define J2K_MS_SOC 0xff4f
00071 #define J2K_MS_SOT 0xff90
00072 #define J2K_MS_SOD 0xff93
00073 #define J2K_MS_EOC 0xffd9
00074 #define J2K_MS_SIZ 0xff51
00075 #define J2K_MS_COD 0xff52
00076 #define J2K_MS_COC 0xff53
00077 #define J2K_MS_RGN 0xff5e
00078 #define J2K_MS_QCD 0xff5c
00079 #define J2K_MS_QCC 0xff5d
00080 #define J2K_MS_POC 0xff5f
00081 #define J2K_MS_TLM 0xff55
00082 #define J2K_MS_PLM 0xff57
00083 #define J2K_MS_PLT 0xff58
00084 #define J2K_MS_PPM 0xff60
00085 #define J2K_MS_PPT 0xff61
00086 #define J2K_MS_SOP 0xff91
00087 #define J2K_MS_EPH 0xff92
00088 #define J2K_MS_CRG 0xff63
00089 #define J2K_MS_COM 0xff64
00090 #define J2K_MS_CBD 0xff78
00091 #define J2K_MS_MCC 0xff75
00092 #define J2K_MS_MCT 0xff74
00093 #define J2K_MS_MCO 0xff77
00095 #define J2K_MS_UNK 0
00097
00098 #ifdef USE_JPWL
00099 #define J2K_MS_EPC 0xff68
00100 #define J2K_MS_EPB 0xff66
00101 #define J2K_MS_ESD 0xff67
00102 #define J2K_MS_RED 0xff69
00103 #endif
00104 #ifdef USE_JPSEC
00105 #define J2K_MS_SEC 0xff65
00106 #define J2K_MS_INSEC 0xff94
00107 #endif
00108
00109
00110 #define J2K_MAX_POCS 32
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,
00127 J2K_STATE_DATA = 0x0080,
00129 J2K_STATE_EOC = 0x0100,
00130 J2K_STATE_ERR = 0x8000
00131 } J2K_STATUS;
00132
00136 typedef enum MCT_ELEMENT_TYPE {
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 MCT_TYPE_DEPENDENCY = 0,
00148 MCT_TYPE_DECORRELATION = 1,
00149 MCT_TYPE_OFFSET = 2
00150 } J2K_MCT_ARRAY_TYPE;
00151
00152
00153
00157 typedef enum T2_MODE {
00158 THRESH_CALC = 0,
00159 FINAL_PASS = 1
00160 } J2K_T2_MODE;
00161
00165 typedef struct opj_stepsize {
00167 OPJ_INT32 expn;
00169 OPJ_INT32 mant;
00170 } opj_stepsize_t;
00171
00175 typedef struct opj_tccp {
00177 OPJ_UINT32 csty;
00179 OPJ_UINT32 numresolutions;
00181 OPJ_UINT32 cblkw;
00183 OPJ_UINT32 cblkh;
00185 OPJ_UINT32 cblksty;
00187 OPJ_UINT32 qmfbid;
00189 OPJ_UINT32 qntsty;
00191 opj_stepsize_t stepsizes[OPJ_J2K_MAXBANDS];
00193 OPJ_UINT32 numgbits;
00195 OPJ_INT32 roishift;
00197 OPJ_UINT32 prcw[OPJ_J2K_MAXRLVLS];
00199 OPJ_UINT32 prch[OPJ_J2K_MAXRLVLS];
00201 OPJ_INT32 m_dc_level_shift;
00202 }
00203 opj_tccp_t;
00204
00205
00206
00210 typedef struct opj_mct_data {
00211 J2K_MCT_ELEMENT_TYPE m_element_type;
00212 J2K_MCT_ARRAY_TYPE m_array_type;
00213 OPJ_UINT32 m_index;
00214 OPJ_BYTE * m_data;
00215 OPJ_UINT32 m_data_size;
00216 }
00217 opj_mct_data_t;
00218
00222 typedef struct opj_simple_mcc_decorrelation_data {
00223 OPJ_UINT32 m_index;
00224 OPJ_UINT32 m_nb_comps;
00225 opj_mct_data_t * m_decorrelation_array;
00226 opj_mct_data_t * m_offset_array;
00227 OPJ_BITFIELD m_is_irreversible : 1;
00228 }
00229 opj_simple_mcc_decorrelation_data_t;
00230
00231 typedef struct opj_ppx_struct {
00232 OPJ_BYTE* m_data;
00233 OPJ_UINT32 m_data_size;
00234 } opj_ppx;
00235
00241 typedef struct opj_tcp {
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[J2K_MAX_POCS];
00257
00259 OPJ_UINT32 ppt_markers_count;
00261 opj_ppx* ppt_markers;
00262
00264 OPJ_BYTE *ppt_data;
00266 OPJ_BYTE *ppt_buffer;
00268 OPJ_UINT32 ppt_data_size;
00270 OPJ_UINT32 ppt_len;
00272 OPJ_FLOAT32 distoratio[100];
00274 opj_tccp_t *tccps;
00276 OPJ_INT32 m_current_tile_part_number;
00278 OPJ_UINT32 m_nb_tile_parts;
00280 OPJ_BYTE * m_data;
00282 OPJ_UINT32 m_data_size;
00284 OPJ_FLOAT64 * mct_norms;
00286 OPJ_FLOAT32 * m_mct_decoding_matrix;
00288 OPJ_FLOAT32 * m_mct_coding_matrix;
00290 opj_mct_data_t * m_mct_records;
00292 OPJ_UINT32 m_nb_mct_records;
00294 OPJ_UINT32 m_nb_max_mct_records;
00296 opj_simple_mcc_decorrelation_data_t * m_mcc_records;
00298 OPJ_UINT32 m_nb_mcc_records;
00300 OPJ_UINT32 m_nb_max_mcc_records;
00301
00302
00303
00305 OPJ_BITFIELD cod : 1;
00307 OPJ_BITFIELD ppt : 1;
00309 OPJ_BITFIELD POC : 1;
00310 } opj_tcp_t;
00311
00312
00313
00314
00315 typedef struct opj_encoding_param {
00317 OPJ_UINT32 m_max_comp_size;
00319 OPJ_INT32 m_tp_pos;
00321 OPJ_INT32 *m_matrice;
00323 OPJ_BYTE m_tp_flag;
00325 OPJ_BITFIELD m_disto_alloc : 1;
00327 OPJ_BITFIELD m_fixed_alloc : 1;
00329 OPJ_BITFIELD m_fixed_quality : 1;
00331 OPJ_BITFIELD m_tp_on : 1;
00332 }
00333 opj_encoding_param_t;
00334
00335 typedef struct opj_decoding_param {
00337 OPJ_UINT32 m_reduce;
00339 OPJ_UINT32 m_layer;
00340 }
00341 opj_decoding_param_t;
00342
00343
00347 typedef struct opj_cp {
00349
00351 OPJ_UINT16 rsiz;
00353 OPJ_UINT32 tx0;
00355 OPJ_UINT32 ty0;
00357 OPJ_UINT32 tdx;
00359 OPJ_UINT32 tdy;
00361 OPJ_CHAR *comment;
00363 OPJ_UINT32 tw;
00365 OPJ_UINT32 th;
00366
00368 OPJ_UINT32 ppm_markers_count;
00370 opj_ppx* ppm_markers;
00371
00373 OPJ_BYTE *ppm_data;
00375 OPJ_UINT32 ppm_len;
00377 OPJ_UINT32 ppm_data_read;
00378
00379 OPJ_BYTE *ppm_data_current;
00380
00382 OPJ_BYTE *ppm_buffer;
00384 OPJ_BYTE *ppm_data_first;
00386 OPJ_UINT32 ppm_data_size;
00388 OPJ_INT32 ppm_store;
00390 OPJ_INT32 ppm_previous;
00391
00393 opj_tcp_t *tcps;
00394
00395 union {
00396 opj_decoding_param_t m_dec;
00397 opj_encoding_param_t m_enc;
00398 }
00399 m_specific_param;
00400
00401
00402
00403 #ifdef USE_JPWL
00404
00405 OPJ_BOOL epc_on;
00407 OPJ_BOOL epb_on;
00409 OPJ_BOOL esd_on;
00411 OPJ_BOOL info_on;
00413 OPJ_BOOL red_on;
00415 int hprot_MH;
00417 int hprot_TPH_tileno[JPWL_MAX_NO_TILESPECS];
00419 int hprot_TPH[JPWL_MAX_NO_TILESPECS];
00421 int pprot_tileno[JPWL_MAX_NO_PACKSPECS];
00423 int pprot_packno[JPWL_MAX_NO_PACKSPECS];
00425 int pprot[JPWL_MAX_NO_PACKSPECS];
00427 int sens_size;
00429 int sens_addr;
00431 int sens_range;
00433 int sens_MH;
00435 int sens_TPH_tileno[JPWL_MAX_NO_TILESPECS];
00437 int sens_TPH[JPWL_MAX_NO_TILESPECS];
00439 OPJ_BOOL correct;
00441 int exp_comps;
00443 OPJ_UINT32 max_tiles;
00444 #endif
00445
00446
00448 OPJ_BITFIELD ppm : 1;
00450 OPJ_BITFIELD m_is_decoder : 1;
00452 OPJ_BITFIELD allow_different_bit_depth_sign : 1;
00453
00454 } opj_cp_t;
00455
00456
00457 typedef struct opj_j2k_dec {
00459 OPJ_UINT32 m_state;
00463 opj_tcp_t *m_default_tcp;
00464 OPJ_BYTE *m_header_data;
00465 OPJ_UINT32 m_header_data_size;
00467 OPJ_UINT32 m_sot_length;
00469 OPJ_UINT32 m_start_tile_x;
00470 OPJ_UINT32 m_start_tile_y;
00471 OPJ_UINT32 m_end_tile_x;
00472 OPJ_UINT32 m_end_tile_y;
00473
00475 OPJ_INT32 m_tile_ind_to_dec;
00477 OPJ_OFF_T m_last_sot_read_pos;
00478
00484 OPJ_BOOL m_last_tile_part;
00485
00486 OPJ_UINT32 m_numcomps_to_decode;
00487 OPJ_UINT32 *m_comps_indices_to_decode;
00488
00490 OPJ_BITFIELD m_can_decode : 1;
00491 OPJ_BITFIELD m_discard_tiles : 1;
00492 OPJ_BITFIELD m_skip_data : 1;
00494 OPJ_BITFIELD m_nb_tile_parts_correction_checked : 1;
00495 OPJ_BITFIELD m_nb_tile_parts_correction : 1;
00496
00497 } opj_j2k_dec_t;
00498
00499 typedef struct opj_j2k_enc {
00501 OPJ_UINT32 m_current_poc_tile_part_number;
00502
00504 OPJ_UINT32 m_current_tile_part_number;
00505
00510 OPJ_OFF_T m_tlm_start;
00514 OPJ_BYTE * m_tlm_sot_offsets_buffer;
00518 OPJ_BYTE * m_tlm_sot_offsets_current;
00519
00522 OPJ_UINT32 m_total_tile_parts;
00523
00524
00525 OPJ_BYTE * m_encoded_tile_data;
00526
00527
00528 OPJ_UINT32 m_encoded_tile_size;
00529
00530
00531 OPJ_BYTE * m_header_tile_data;
00532
00533
00534 OPJ_UINT32 m_header_tile_data_size;
00535
00536
00537 } opj_j2k_enc_t;
00538
00539
00540
00541 struct opj_tcd;
00545 typedef struct opj_j2k {
00546
00547 OPJ_BOOL m_is_decoder;
00548
00549
00550 union {
00551 opj_j2k_dec_t m_decoder;
00552 opj_j2k_enc_t m_encoder;
00553 }
00554 m_specific_param;
00555
00557 opj_image_t* m_private_image;
00558
00559
00560 opj_image_t* m_output_image;
00561
00563 opj_cp_t m_cp;
00564
00566 opj_procedure_list_t * m_procedure_list;
00567
00569 opj_procedure_list_t * m_validation_list;
00570
00572 opj_codestream_index_t *cstr_index;
00573
00575 OPJ_UINT32 m_current_tile_number;
00576
00578 struct opj_tcd * m_tcd;
00579
00581 int m_num_threads;
00582
00584 opj_thread_pool_t* m_tp;
00585
00586 OPJ_UINT32 ihdr_w;
00587 OPJ_UINT32 ihdr_h;
00588 OPJ_UINT32 enumcs;
00589 unsigned int dump_state;
00590 }
00591 opj_j2k_t;
00592
00593
00594
00595
00598
00599
00606 void opj_j2k_setup_decoder(opj_j2k_t *j2k, opj_dparameters_t *parameters);
00607
00608 OPJ_BOOL opj_j2k_set_threads(opj_j2k_t *j2k, OPJ_UINT32 num_threads);
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 const 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
00724 OPJ_BOOL opj_j2k_set_decoded_components(opj_j2k_t *p_j2k,
00725 OPJ_UINT32 numcomps,
00726 const OPJ_UINT32* comps_indices,
00727 opj_event_mgr_t * p_manager);
00728
00742 OPJ_BOOL opj_j2k_set_decode_area(opj_j2k_t *p_j2k,
00743 opj_image_t* p_image,
00744 OPJ_INT32 p_start_x, OPJ_INT32 p_start_y,
00745 OPJ_INT32 p_end_x, OPJ_INT32 p_end_y,
00746 opj_event_mgr_t * p_manager);
00747
00753 opj_j2k_t* opj_j2k_create_decompress(void);
00754
00755
00764 void j2k_dump(opj_j2k_t* p_j2k, OPJ_INT32 flag, FILE* out_stream);
00765
00766
00767
00775 void j2k_dump_image_header(opj_image_t* image, OPJ_BOOL dev_dump_flag,
00776 FILE* out_stream);
00777
00785 void j2k_dump_image_comp_header(opj_image_comp_t* comp, OPJ_BOOL dev_dump_flag,
00786 FILE* out_stream);
00787
00795 opj_codestream_info_v2_t* j2k_get_cstr_info(opj_j2k_t* p_j2k);
00796
00804 opj_codestream_index_t* j2k_get_cstr_index(opj_j2k_t* p_j2k);
00805
00814 OPJ_BOOL opj_j2k_decode(opj_j2k_t *j2k,
00815 opj_stream_private_t *p_stream,
00816 opj_image_t *p_image,
00817 opj_event_mgr_t *p_manager);
00818
00819
00820 OPJ_BOOL opj_j2k_get_tile(opj_j2k_t *p_j2k,
00821 opj_stream_private_t *p_stream,
00822 opj_image_t* p_image,
00823 opj_event_mgr_t * p_manager,
00824 OPJ_UINT32 tile_index);
00825
00826 OPJ_BOOL opj_j2k_set_decoded_resolution_factor(opj_j2k_t *p_j2k,
00827 OPJ_UINT32 res_factor,
00828 opj_event_mgr_t * p_manager);
00829
00830
00840 OPJ_BOOL opj_j2k_write_tile(opj_j2k_t * p_j2k,
00841 OPJ_UINT32 p_tile_index,
00842 OPJ_BYTE * p_data,
00843 OPJ_UINT32 p_data_size,
00844 opj_stream_private_t *p_stream,
00845 opj_event_mgr_t * p_manager);
00846
00850 OPJ_BOOL opj_j2k_encode(opj_j2k_t * p_j2k,
00851 opj_stream_private_t *cio,
00852 opj_event_mgr_t * p_manager);
00853
00864 OPJ_BOOL opj_j2k_start_compress(opj_j2k_t *p_j2k,
00865 opj_stream_private_t *p_stream,
00866 opj_image_t * p_image,
00867 opj_event_mgr_t * p_manager);
00868
00873 OPJ_BOOL opj_j2k_end_compress(opj_j2k_t *p_j2k,
00874 opj_stream_private_t *cio,
00875 opj_event_mgr_t * p_manager);
00876
00877 OPJ_BOOL opj_j2k_setup_mct_encoding(opj_tcp_t * p_tcp, opj_image_t * p_image);
00878
00879
00880 #endif