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 OPJ_CODEC_H
00033 #define OPJ_CODEC_H
00034
00042 typedef struct opj_codec_private {
00044 union {
00048 struct opj_decompression {
00050 OPJ_BOOL(*opj_read_header)(struct opj_stream_private * cio,
00051 void * p_codec,
00052 opj_image_t **p_image,
00053 struct opj_event_mgr * p_manager);
00054
00056 OPJ_BOOL(*opj_decode)(void * p_codec,
00057 struct opj_stream_private * p_cio,
00058 opj_image_t * p_image,
00059 struct opj_event_mgr * p_manager);
00060
00062 OPJ_BOOL(*opj_read_tile_header)(void * p_codec,
00063 OPJ_UINT32 * p_tile_index,
00064 OPJ_UINT32 * p_data_size,
00065 OPJ_INT32 * p_tile_x0,
00066 OPJ_INT32 * p_tile_y0,
00067 OPJ_INT32 * p_tile_x1,
00068 OPJ_INT32 * p_tile_y1,
00069 OPJ_UINT32 * p_nb_comps,
00070 OPJ_BOOL * p_should_go_on,
00071 struct opj_stream_private * p_cio,
00072 struct opj_event_mgr * p_manager);
00073
00075 OPJ_BOOL(*opj_decode_tile_data)(void * p_codec,
00076 OPJ_UINT32 p_tile_index,
00077 OPJ_BYTE * p_data,
00078 OPJ_UINT32 p_data_size,
00079 struct opj_stream_private * p_cio,
00080 struct opj_event_mgr * p_manager);
00081
00083 OPJ_BOOL(* opj_end_decompress)(void *p_codec,
00084 struct opj_stream_private * cio,
00085 struct opj_event_mgr * p_manager);
00086
00088 void (*opj_destroy)(void * p_codec);
00089
00091 void (*opj_setup_decoder)(void * p_codec, opj_dparameters_t * p_param);
00092
00094 OPJ_BOOL(*opj_set_decode_area)(void * p_codec,
00095 opj_image_t * p_image,
00096 OPJ_INT32 p_start_x,
00097 OPJ_INT32 p_end_x,
00098 OPJ_INT32 p_start_y,
00099 OPJ_INT32 p_end_y,
00100 struct opj_event_mgr * p_manager);
00101
00103 OPJ_BOOL(*opj_get_decoded_tile)(void *p_codec,
00104 opj_stream_private_t * p_cio,
00105 opj_image_t *p_image,
00106 struct opj_event_mgr * p_manager,
00107 OPJ_UINT32 tile_index);
00108
00110 OPJ_BOOL(*opj_set_decoded_resolution_factor)(void * p_codec,
00111 OPJ_UINT32 res_factor,
00112 opj_event_mgr_t * p_manager);
00113
00115 OPJ_BOOL(*opj_set_decoded_components)(void * p_codec,
00116 OPJ_UINT32 num_comps,
00117 const OPJ_UINT32* comps_indices,
00118 opj_event_mgr_t * p_manager);
00119 } m_decompression;
00120
00124 struct opj_compression {
00125 OPJ_BOOL(* opj_start_compress)(void *p_codec,
00126 struct opj_stream_private * cio,
00127 struct opj_image * p_image,
00128 struct opj_event_mgr * p_manager);
00129
00130 OPJ_BOOL(* opj_encode)(void * p_codec,
00131 struct opj_stream_private *p_cio,
00132 struct opj_event_mgr * p_manager);
00133
00134 OPJ_BOOL(* opj_write_tile)(void * p_codec,
00135 OPJ_UINT32 p_tile_index,
00136 OPJ_BYTE * p_data,
00137 OPJ_UINT32 p_data_size,
00138 struct opj_stream_private * p_cio,
00139 struct opj_event_mgr * p_manager);
00140
00141 OPJ_BOOL(* opj_end_compress)(void * p_codec,
00142 struct opj_stream_private * p_cio,
00143 struct opj_event_mgr * p_manager);
00144
00145 void (* opj_destroy)(void * p_codec);
00146
00147 OPJ_BOOL(* opj_setup_encoder)(void * p_codec,
00148 opj_cparameters_t * p_param,
00149 struct opj_image * p_image,
00150 struct opj_event_mgr * p_manager);
00151 } m_compression;
00152 } m_codec_data;
00154 void * m_codec;
00156 opj_event_mgr_t m_event_mgr;
00158 OPJ_BOOL is_decompressor;
00159 void (*opj_dump_codec)(void * p_codec, OPJ_INT32 info_flag,
00160 FILE* output_stream);
00161 opj_codestream_info_v2_t* (*opj_get_codec_info)(void* p_codec);
00162 opj_codestream_index_t* (*opj_get_codec_index)(void* p_codec);
00163
00165 OPJ_BOOL(*opj_set_threads)(void * p_codec, OPJ_UINT32 num_threads);
00166 }
00167 opj_codec_private_t;
00168
00169
00170 #endif
00171