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 #ifndef OPJ_JP2_H
00037 #define OPJ_JP2_H
00038
00046
00047
00048
00049 #define JP2_JP 0x6a502020
00050 #define JP2_FTYP 0x66747970
00051 #define JP2_JP2H 0x6a703268
00052 #define JP2_IHDR 0x69686472
00053 #define JP2_COLR 0x636f6c72
00054 #define JP2_JP2C 0x6a703263
00055 #define JP2_URL 0x75726c20
00056 #define JP2_PCLR 0x70636c72
00057 #define JP2_CMAP 0x636d6170
00058 #define JP2_CDEF 0x63646566
00059 #define JP2_DTBL 0x6474626c
00060 #define JP2_BPCC 0x62706363
00061 #define JP2_JP2 0x6a703220
00063
00064
00065
00066
00067
00068
00069
00071
00072
00073 typedef enum {
00074 JP2_STATE_NONE = 0x0,
00075 JP2_STATE_SIGNATURE = 0x1,
00076 JP2_STATE_FILE_TYPE = 0x2,
00077 JP2_STATE_HEADER = 0x4,
00078 JP2_STATE_CODESTREAM = 0x8,
00079 JP2_STATE_END_CODESTREAM = 0x10,
00080 JP2_STATE_UNKNOWN = 0x7fffffff
00081 }
00082 JP2_STATE;
00083
00084 typedef enum {
00085 JP2_IMG_STATE_NONE = 0x0,
00086 JP2_IMG_STATE_UNKNOWN = 0x7fffffff
00087 }
00088 JP2_IMG_STATE;
00089
00093 typedef struct opj_jp2_cdef_info {
00094 OPJ_UINT16 cn, typ, asoc;
00095 } opj_jp2_cdef_info_t;
00096
00100 typedef struct opj_jp2_cdef {
00101 opj_jp2_cdef_info_t *info;
00102 OPJ_UINT16 n;
00103 } opj_jp2_cdef_t;
00104
00108 typedef struct opj_jp2_cmap_comp {
00109 OPJ_UINT16 cmp;
00110 OPJ_BYTE mtyp, pcol;
00111 } opj_jp2_cmap_comp_t;
00112
00116 typedef struct opj_jp2_pclr {
00117 OPJ_UINT32 *entries;
00118 OPJ_BYTE *channel_sign;
00119 OPJ_BYTE *channel_size;
00120 opj_jp2_cmap_comp_t *cmap;
00121 OPJ_UINT16 nr_entries;
00122 OPJ_BYTE nr_channels;
00123 } opj_jp2_pclr_t;
00124
00128 typedef struct opj_jp2_color {
00129 OPJ_BYTE *icc_profile_buf;
00130 OPJ_UINT32 icc_profile_len;
00131
00132 opj_jp2_cdef_t *jp2_cdef;
00133 opj_jp2_pclr_t *jp2_pclr;
00134 OPJ_BYTE jp2_has_colr;
00135 } opj_jp2_color_t;
00136
00140 typedef struct opj_jp2_comps {
00141 OPJ_UINT32 depth;
00142 OPJ_UINT32 sgnd;
00143 OPJ_UINT32 bpcc;
00144 } opj_jp2_comps_t;
00145
00149 typedef struct opj_jp2 {
00151 opj_j2k_t *j2k;
00153 struct opj_procedure_list * m_validation_list;
00155 struct opj_procedure_list * m_procedure_list;
00156
00157
00158 OPJ_UINT32 w;
00159
00160 OPJ_UINT32 h;
00161
00162 OPJ_UINT32 numcomps;
00163 OPJ_UINT32 bpc;
00164 OPJ_UINT32 C;
00165 OPJ_UINT32 UnkC;
00166 OPJ_UINT32 IPR;
00167 OPJ_UINT32 meth;
00168 OPJ_UINT32 approx;
00169 OPJ_UINT32 enumcs;
00170 OPJ_UINT32 precedence;
00171 OPJ_UINT32 brand;
00172 OPJ_UINT32 minversion;
00173 OPJ_UINT32 numcl;
00174 OPJ_UINT32 *cl;
00175 opj_jp2_comps_t *comps;
00176
00177
00178
00179
00180
00181 OPJ_OFF_T j2k_codestream_offset;
00182 OPJ_OFF_T jpip_iptr_offset;
00183 OPJ_BOOL jpip_on;
00184 OPJ_UINT32 jp2_state;
00185 OPJ_UINT32 jp2_img_state;
00186
00187 opj_jp2_color_t color;
00188
00189 OPJ_BOOL ignore_pclr_cmap_cdef;
00190 OPJ_BYTE has_jp2h;
00191 OPJ_BYTE has_ihdr;
00192 }
00193 opj_jp2_t;
00194
00198 typedef struct opj_jp2_box {
00199 OPJ_UINT32 length;
00200 OPJ_UINT32 type;
00201 OPJ_INT32 init_pos;
00202 } opj_jp2_box_t;
00203
00204 typedef struct opj_jp2_header_handler {
00205
00206 OPJ_UINT32 id;
00207
00208 OPJ_BOOL(*handler)(opj_jp2_t *jp2,
00209 OPJ_BYTE *p_header_data,
00210 OPJ_UINT32 p_header_size,
00211 opj_event_mgr_t * p_manager);
00212 }
00213 opj_jp2_header_handler_t;
00214
00215
00216 typedef struct opj_jp2_img_header_writer_handler {
00217
00218 OPJ_BYTE* (*handler)(opj_jp2_t *jp2, OPJ_UINT32 * p_data_size);
00219
00220 OPJ_BYTE* m_data;
00221
00222 OPJ_UINT32 m_size;
00223 }
00224 opj_jp2_img_header_writer_handler_t;
00225
00228
00229
00236 void opj_jp2_setup_decoder(opj_jp2_t *jp2, opj_dparameters_t *parameters);
00237
00244 OPJ_BOOL opj_jp2_set_threads(opj_jp2_t *jp2, OPJ_UINT32 num_threads);
00245
00255 OPJ_BOOL opj_jp2_decode(opj_jp2_t *jp2,
00256 opj_stream_private_t *p_stream,
00257 opj_image_t* p_image,
00258 opj_event_mgr_t * p_manager);
00259
00270 OPJ_BOOL opj_jp2_setup_encoder(opj_jp2_t *jp2,
00271 opj_cparameters_t *parameters,
00272 opj_image_t *image,
00273 opj_event_mgr_t * p_manager);
00274
00282 OPJ_BOOL opj_jp2_encode(opj_jp2_t *jp2,
00283 opj_stream_private_t *stream,
00284 opj_event_mgr_t * p_manager);
00285
00286
00297 OPJ_BOOL opj_jp2_start_compress(opj_jp2_t *jp2,
00298 opj_stream_private_t *stream,
00299 opj_image_t * p_image,
00300 opj_event_mgr_t * p_manager);
00301
00302
00307 OPJ_BOOL opj_jp2_end_compress(opj_jp2_t *jp2,
00308 opj_stream_private_t *cio,
00309 opj_event_mgr_t * p_manager);
00310
00311
00312
00317 OPJ_BOOL opj_jp2_end_decompress(opj_jp2_t *jp2,
00318 opj_stream_private_t *cio,
00319 opj_event_mgr_t * p_manager);
00320
00331 OPJ_BOOL opj_jp2_read_header(opj_stream_private_t *p_stream,
00332 opj_jp2_t *jp2,
00333 opj_image_t ** p_image,
00334 opj_event_mgr_t * p_manager);
00335
00346 OPJ_BOOL opj_jp2_set_decoded_components(opj_jp2_t *jp2,
00347 OPJ_UINT32 numcomps,
00348 const OPJ_UINT32* comps_indices,
00349 opj_event_mgr_t * p_manager);
00350
00365 OPJ_BOOL opj_jp2_read_tile_header(opj_jp2_t * p_jp2,
00366 OPJ_UINT32 * p_tile_index,
00367 OPJ_UINT32 * p_data_size,
00368 OPJ_INT32 * p_tile_x0,
00369 OPJ_INT32 * p_tile_y0,
00370 OPJ_INT32 * p_tile_x1,
00371 OPJ_INT32 * p_tile_y1,
00372 OPJ_UINT32 * p_nb_comps,
00373 OPJ_BOOL * p_go_on,
00374 opj_stream_private_t *p_stream,
00375 opj_event_mgr_t * p_manager);
00376
00387 OPJ_BOOL opj_jp2_write_tile(opj_jp2_t *p_jp2,
00388 OPJ_UINT32 p_tile_index,
00389 OPJ_BYTE * p_data,
00390 OPJ_UINT32 p_data_size,
00391 opj_stream_private_t *p_stream,
00392 opj_event_mgr_t * p_manager);
00393
00405 OPJ_BOOL opj_jp2_decode_tile(opj_jp2_t * p_jp2,
00406 OPJ_UINT32 p_tile_index,
00407 OPJ_BYTE * p_data,
00408 OPJ_UINT32 p_data_size,
00409 opj_stream_private_t *p_stream,
00410 opj_event_mgr_t * p_manager);
00411
00417 opj_jp2_t* opj_jp2_create(OPJ_BOOL p_is_decoder);
00418
00423 void opj_jp2_destroy(opj_jp2_t *jp2);
00424
00425
00439 OPJ_BOOL opj_jp2_set_decode_area(opj_jp2_t *p_jp2,
00440 opj_image_t* p_image,
00441 OPJ_INT32 p_start_x, OPJ_INT32 p_start_y,
00442 OPJ_INT32 p_end_x, OPJ_INT32 p_end_y,
00443 opj_event_mgr_t * p_manager);
00444
00448 OPJ_BOOL opj_jp2_get_tile(opj_jp2_t *p_jp2,
00449 opj_stream_private_t *p_stream,
00450 opj_image_t* p_image,
00451 opj_event_mgr_t * p_manager,
00452 OPJ_UINT32 tile_index);
00453
00454
00458 OPJ_BOOL opj_jp2_set_decoded_resolution_factor(opj_jp2_t *p_jp2,
00459 OPJ_UINT32 res_factor,
00460 opj_event_mgr_t * p_manager);
00461
00462
00463
00472 void jp2_dump(opj_jp2_t* p_jp2, OPJ_INT32 flag, FILE* out_stream);
00473
00481 opj_codestream_info_v2_t* jp2_get_cstr_info(opj_jp2_t* p_jp2);
00482
00490 opj_codestream_index_t* jp2_get_cstr_index(opj_jp2_t* p_jp2);
00491
00492
00496
00497 #endif
00498