opj_dinfo_t* OPJ_CALLCONV opj_create_decompress(OPJ_CODEC_FORMAT format) { opj_dinfo_t *dinfo = (opj_dinfo_t*)opj_malloc(sizeof(opj_dinfo_t)); if(!dinfo) return NULL; dinfo->is_decompressor = true; switch(format) { case CODEC_J2K: case CODEC_JPT: /* get a J2K decoder handle */ dinfo->j2k_handle = (void*)j2k_create_decompress((opj_common_ptr)dinfo); if(!dinfo->j2k_handle) { opj_free(dinfo); return NULL; } break; case CODEC_JP2: /* get a JP2 decoder handle */ dinfo->jp2_handle = (void*)jp2_create_decompress((opj_common_ptr)dinfo); if(!dinfo->jp2_handle) { opj_free(dinfo); return NULL; } break; case CODEC_UNKNOWN: default: opj_free(dinfo); return NULL; } dinfo->codec_format = format; return dinfo; }
opj_jp2_t* jp2_create_decompress(opj_common_ptr cinfo) { opj_jp2_t *jp2 = (opj_jp2_t*) opj_calloc(1, sizeof(opj_jp2_t)); if(jp2) { jp2->cinfo = cinfo; /* create the J2K codec */ jp2->j2k = j2k_create_decompress(cinfo); if(jp2->j2k == NULL) { jp2_destroy_decompress(jp2); return NULL; } } return jp2; }
opj_codec_t* OPJ_CALLCONV opj_create_decompress(OPJ_CODEC_FORMAT p_format) { opj_codec_private_t *l_info = 00; l_info = (opj_codec_private_t*) opj_calloc(1, sizeof(opj_codec_private_t)); if (!l_info) { return 00; } memset(l_info, 0, sizeof(opj_codec_private_t)); l_info->is_decompressor = 1; switch (p_format) { case CODEC_J2K: l_info->m_codec_data.m_decompression.opj_decode = (opj_image_t* (*) (void *, struct opj_stream_private *, struct opj_event_mgr * ))j2k_decode; l_info->m_codec_data.m_decompression.opj_end_decompress = (bool (*) (void *,struct opj_stream_private *,struct opj_event_mgr *))j2k_end_decompress; l_info->m_codec_data.m_decompression.opj_read_header = (bool (*) ( void *, opj_image_t **, OPJ_INT32 * , OPJ_INT32 * , OPJ_UINT32 * , OPJ_UINT32 * , OPJ_UINT32 * , OPJ_UINT32 * , struct opj_stream_private *, struct opj_event_mgr * )) j2k_read_header; l_info->m_codec_data.m_decompression.opj_destroy = (void (*) (void *))j2k_destroy; l_info->m_codec_data.m_decompression.opj_setup_decoder = (void (*) (void * ,opj_dparameters_t * )) j2k_setup_decoder; l_info->m_codec_data.m_decompression.opj_read_tile_header = (bool (*) ( void *, OPJ_UINT32*, OPJ_UINT32*, OPJ_INT32 * , OPJ_INT32 * , OPJ_INT32 * , OPJ_INT32 * , OPJ_UINT32 * , bool *, struct opj_stream_private *, struct opj_event_mgr * )) j2k_read_tile_header; l_info->m_codec_data.m_decompression.opj_decode_tile_data = (bool (*) (void *,OPJ_UINT32,OPJ_BYTE*,OPJ_UINT32,struct opj_stream_private *, struct opj_event_mgr * )) j2k_decode_tile; l_info->m_codec_data.m_decompression.opj_set_decode_area = (bool (*) (void *,OPJ_INT32,OPJ_INT32,OPJ_INT32,OPJ_INT32, struct opj_event_mgr * )) j2k_set_decode_area; l_info->m_codec = j2k_create_decompress(); if (! l_info->m_codec) { opj_free(l_info); return 00; } break; case CODEC_JP2: /* get a JP2 decoder handle */ l_info->m_codec_data.m_decompression.opj_decode = (opj_image_t* (*) (void *, struct opj_stream_private *, struct opj_event_mgr * ))jp2_decode; l_info->m_codec_data.m_decompression.opj_end_decompress = (bool (*) (void *,struct opj_stream_private *,struct opj_event_mgr *)) jp2_end_decompress; l_info->m_codec_data.m_decompression.opj_read_header = (bool (*) ( void *, opj_image_t **, OPJ_INT32 * , OPJ_INT32 * , OPJ_UINT32 * , OPJ_UINT32 * , OPJ_UINT32 * , OPJ_UINT32 * , struct opj_stream_private *, struct opj_event_mgr * )) jp2_read_header; l_info->m_codec_data.m_decompression.opj_read_tile_header = ( bool (*) ( void *, OPJ_UINT32*, OPJ_UINT32*, OPJ_INT32*, OPJ_INT32*, OPJ_INT32 * , OPJ_INT32 * , OPJ_UINT32 * , bool *, struct opj_stream_private *, struct opj_event_mgr * )) jp2_read_tile_header; l_info->m_codec_data.m_decompression.opj_decode_tile_data = (bool (*) (void *,OPJ_UINT32,OPJ_BYTE*,OPJ_UINT32,struct opj_stream_private *, struct opj_event_mgr * )) jp2_decode_tile; l_info->m_codec_data.m_decompression.opj_destroy = (void (*) (void *))jp2_destroy; l_info->m_codec_data.m_decompression.opj_setup_decoder = (void (*) (void * ,opj_dparameters_t * )) jp2_setup_decoder; l_info->m_codec_data.m_decompression.opj_set_decode_area = (bool (*) (void *,OPJ_INT32,OPJ_INT32,OPJ_INT32,OPJ_INT32, struct opj_event_mgr * )) jp2_set_decode_area; l_info->m_codec = jp2_create(true); if (! l_info->m_codec) { opj_free(l_info); return 00; } break; case CODEC_UNKNOWN: case CODEC_JPT: default: opj_free(l_info); return 00; } set_default_event_handler(&(l_info->m_event_mgr)); return (opj_codec_t*) l_info; }