typedef struct opj_decompression
{
/** Main header reading function handler*/
- opj_bool (* opj_read_header) ( struct opj_stream_private * cio,
+ opj_bool (*opj_read_header) ( struct opj_stream_private * cio,
void * p_codec,
- opj_image_t *p_image,
+ opj_image_t **p_image,
struct opj_event_mgr * p_manager);
- /** FIXME DOC */
- opj_bool (* opj_decode) ( void * p_codec,
+ /** Decoding function */
+ opj_bool (*opj_decode) ( void * p_codec,
struct opj_stream_private *p_cio,
opj_image_t *p_image,
struct opj_event_mgr * p_manager);
OPJ_UINT32 p_data_size,
struct opj_stream_private *p_cio,
struct opj_event_mgr * p_manager);
- /** FIXME DOC */
+ /** Reading function used after codestream if necessary */
opj_bool (* opj_end_decompress) ( void *p_codec,
struct opj_stream_private *cio,
struct opj_event_mgr * p_manager);
/** Codec destroy function handler*/
- void (* opj_destroy) (void * p_codec);
+ void (*opj_destroy) (void * p_codec);
/** Setup decoder function handler */
void (*opj_setup_decoder) (void * p_codec, opj_dparameters_t * p_param);
/** Set decode area function handler */
opj_bool (*opj_set_decode_area) ( void * p_codec,
+ opj_image_t* p_image,
OPJ_INT32 p_start_x, OPJ_INT32 p_end_x,
OPJ_INT32 p_start_y, OPJ_INT32 p_end_y,
struct opj_event_mgr * p_manager);
+
+ /** Get tile function */
+ opj_bool (*opj_get_decoded_tile) ( void *p_codec,
+ opj_stream_private_t *p_cio,
+ opj_image_t *p_image,
+ struct opj_event_mgr * p_manager,
+ OPJ_UINT32 tile_index);
+
+ /** Set the decoded resolution factor */
+ opj_bool (*opj_set_decoded_resolution_factor) (void * p_codec, OPJ_UINT32 res_factor, struct opj_event_mgr * p_manager);
+
}opj_decompression_t;
/**
/* ---------------------------------------------------------------------- */
-OPJ_UINT32 opj_read_from_file (void * p_buffer, OPJ_UINT32 p_nb_bytes, FILE * p_file)
+OPJ_SIZE_T opj_read_from_file (void * p_buffer, OPJ_SIZE_T p_nb_bytes, FILE * p_file)
{
- OPJ_UINT32 l_nb_read = fread(p_buffer,1,p_nb_bytes,p_file);
+ OPJ_SIZE_T l_nb_read = fread(p_buffer,1,p_nb_bytes,p_file);
return l_nb_read ? l_nb_read : -1;
}
-OPJ_UINT32 opj_write_from_file (void * p_buffer, OPJ_UINT32 p_nb_bytes, FILE * p_file)
+OPJ_UINT64 opj_get_data_length_from_file (FILE * p_file)
+{
+ OPJ_OFF_T file_length = 0;
+
+ OPJ_FSEEK(p_file, 0, SEEK_END);
+ file_length = (OPJ_UINT64)OPJ_FTELL(p_file);
+ OPJ_FSEEK(p_file, 0, SEEK_SET);
+
+ return file_length;
+}
+
+OPJ_SIZE_T opj_write_from_file (void * p_buffer, OPJ_SIZE_T p_nb_bytes, FILE * p_file)
{
return fwrite(p_buffer,1,p_nb_bytes,p_file);
}
-OPJ_SIZE_T opj_skip_from_file (OPJ_SIZE_T p_nb_bytes, FILE * p_user_data)
+OPJ_OFF_T opj_skip_from_file (OPJ_OFF_T p_nb_bytes, FILE * p_user_data)
{
- if (fseek(p_user_data,p_nb_bytes,SEEK_CUR)) {
+ if (OPJ_FSEEK(p_user_data,p_nb_bytes,SEEK_CUR)) {
return -1;
}
return p_nb_bytes;
}
-opj_bool opj_seek_from_file (OPJ_SIZE_T p_nb_bytes, FILE * p_user_data)
+opj_bool opj_seek_from_file (OPJ_OFF_T p_nb_bytes, FILE * p_user_data)
{
- if (fseek(p_user_data,p_nb_bytes,SEEK_SET)) {
+ if (OPJ_FSEEK(p_user_data,p_nb_bytes,SEEK_SET)) {
return EXIT_FAILURE;
}
}
-
+/* DEPRECATED */
opj_dinfo_t* OPJ_CALLCONV opj_create_decompress(OPJ_CODEC_FORMAT format) {
opj_dinfo_t *dinfo = (opj_dinfo_t*)opj_calloc(1, sizeof(opj_dinfo_t));
if(!dinfo) return NULL;
l_info->m_codec_data.m_decompression.opj_read_header =
(opj_bool (*) ( struct opj_stream_private *,
void *,
- opj_image_t *,
+ opj_image_t **,
struct opj_event_mgr * )) j2k_read_header;
l_info->m_codec_data.m_decompression.opj_destroy =
(opj_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 =
- (opj_bool (*) (void *, OPJ_INT32, OPJ_INT32, OPJ_INT32, OPJ_INT32, struct opj_event_mgr *)) j2k_set_decode_area;
+ (opj_bool (*) (void *, opj_image_t*, OPJ_INT32, OPJ_INT32, OPJ_INT32, OPJ_INT32, struct opj_event_mgr *)) j2k_set_decode_area;
+
+ l_info->m_codec_data.m_decompression.opj_get_decoded_tile = (opj_bool (*) ( void *p_codec,
+ opj_stream_private_t *p_cio,
+ opj_image_t *p_image,
+ struct opj_event_mgr * p_manager,
+ OPJ_UINT32 tile_index)) j2k_get_tile;
+
+ l_info->m_codec_data.m_decompression.opj_set_decoded_resolution_factor = (opj_bool (*) (void * p_codec,
+ OPJ_UINT32 res_factor,
+ struct opj_event_mgr * p_manager)) j2k_set_decoded_resolution_factor;
l_info->m_codec = j2k_create_decompress_v2();
(opj_bool (*) ( void *,
struct opj_stream_private *,
opj_image_t*,
- struct opj_event_mgr * )) opj_jp2_decode_v2;
+ struct opj_event_mgr * )) jp2_decode_v2;
l_info->m_codec_data.m_decompression.opj_end_decompress = (opj_bool (*) (void *,struct opj_stream_private *,struct opj_event_mgr *)) jp2_end_decompress;
l_info->m_codec_data.m_decompression.opj_read_header = (opj_bool (*) (
struct opj_stream_private *,
void *,
- opj_image_t *,
+ opj_image_t **,
struct opj_event_mgr * )) jp2_read_header;
l_info->m_codec_data.m_decompression.opj_read_tile_header = ( opj_bool (*) (
struct opj_stream_private *,
struct opj_event_mgr * )) jp2_read_tile_header;
- l_info->m_codec_data.m_decompression.opj_decode_tile_data = (opj_bool (*) (void *,OPJ_UINT32,OPJ_BYTE*,OPJ_UINT32,struct opj_stream_private *, struct opj_event_mgr * )) opj_jp2_decode_tile;
+ l_info->m_codec_data.m_decompression.opj_decode_tile_data = (opj_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_v2;
- l_info->m_codec_data.m_decompression.opj_set_decode_area = (opj_bool (*) (void *,OPJ_INT32,OPJ_INT32,OPJ_INT32,OPJ_INT32, struct opj_event_mgr * )) jp2_set_decode_area;
+ l_info->m_codec_data.m_decompression.opj_set_decode_area = (opj_bool (*) (void *,opj_image_t*, OPJ_INT32,OPJ_INT32,OPJ_INT32,OPJ_INT32, struct opj_event_mgr * )) jp2_set_decode_area;
+
+ l_info->m_codec_data.m_decompression.opj_get_decoded_tile = (opj_bool (*) ( void *p_codec,
+ opj_stream_private_t *p_cio,
+ opj_image_t *p_image,
+ struct opj_event_mgr * p_manager,
+ OPJ_UINT32 tile_index)) jp2_get_tile;
+
+ l_info->m_codec_data.m_decompression.opj_set_decoded_resolution_factor = (opj_bool (*) (void * p_codec,
+ OPJ_UINT32 res_factor,
+ opj_event_mgr_t * p_manager)) jp2_set_decoded_resolution_factor;
l_info->m_codec = jp2_create(OPJ_TRUE);
return 00;
}
- // FIXME set_default_event_handler(&(l_info->m_event_mgr));
return (opj_codec_t*) l_info;
}
-
+/* DEPRECATED */
void OPJ_CALLCONV opj_destroy_decompress(opj_dinfo_t *dinfo) {
if(dinfo) {
/* destroy the codec */
parameters->decod_format = -1;
parameters->cod_format = -1;
+ parameters->flags = 0;
/* UniPG>> */
#ifdef USE_JPWL
parameters->jpwl_correct = OPJ_FALSE;
}
}
+/* DEPRECATED */
void OPJ_CALLCONV opj_setup_decoder(opj_dinfo_t *dinfo, opj_dparameters_t *parameters) {
if(dinfo && parameters) {
switch(dinfo->codec_format) {
return OPJ_TRUE;
}
+/* DEPRECATED */
opj_image_t* OPJ_CALLCONV opj_decode(opj_dinfo_t *dinfo, opj_cio_t *cio) {
return opj_decode_with_info(dinfo, cio, NULL);
}
+/* DEPRECATED */
opj_image_t* OPJ_CALLCONV opj_decode_with_info(opj_dinfo_t *dinfo, opj_cio_t *cio, opj_codestream_info_t *cstr_info) {
if(dinfo && cio) {
switch(dinfo->codec_format) {
return opj_stream_create_file_stream(p_file,J2K_STREAM_CHUNK_SIZE,p_is_read_stream);
}
-opj_stream_t* OPJ_CALLCONV opj_stream_create_file_stream (FILE * p_file, OPJ_UINT32 p_size, opj_bool p_is_read_stream)
+opj_stream_t* OPJ_CALLCONV opj_stream_create_file_stream (FILE * p_file, OPJ_SIZE_T p_size, opj_bool p_is_read_stream)
{
opj_stream_t* l_stream = 00;
}
opj_stream_set_user_data(l_stream, p_file);
+ opj_stream_set_user_data_length(l_stream, opj_get_data_length_from_file(p_file));
opj_stream_set_read_function(l_stream, (opj_stream_read_fn) opj_read_from_file);
opj_stream_set_write_function(l_stream, (opj_stream_write_fn) opj_write_from_file);
opj_stream_set_skip_function(l_stream, (opj_stream_skip_fn) opj_skip_from_file);
}
}
-void OPJ_CALLCONV opj_destroy_cstr_info_v2(opj_codestream_info_v2_t *cstr_info) {
- if (cstr_info) {
- int tileno, compno;
-
- if (cstr_info->tile_info){
- for (tileno = 0; tileno < cstr_info->tw * cstr_info->th; tileno++) {
- for (compno = 0; compno < cstr_info->nbcomps; compno++){
- opj_free(cstr_info->tile_info[tileno].tccp_info);
- }
- }
- opj_free(cstr_info->tile_info);
- }
-
- if (cstr_info->m_default_tile_info.tccp_info){
- opj_free(cstr_info->m_default_tile_info.tccp_info);
- }
-
- opj_free(cstr_info);
- }
-}
-
-
-
-#ifdef OLD_WAY_MS
-opj_bool OPJ_CALLCONV opj_read_header (
- opj_codec_t *p_codec,
- opj_image_t ** p_image,
- OPJ_INT32 * p_tile_x0,
- OPJ_INT32 * p_tile_y0,
- OPJ_UINT32 * p_tile_width,
- OPJ_UINT32 * p_tile_height,
- OPJ_UINT32 * p_nb_tiles_x,
- OPJ_UINT32 * p_nb_tiles_y,
- opj_stream_t *p_cio)
-{
- if (p_codec && p_cio) {
- opj_codec_private_t * l_info = (opj_codec_private_t *) p_codec;
- opj_stream_private_t * l_cio = (opj_stream_private_t *) p_cio;
-
- if(! l_info->is_decompressor) {
- return OPJ_FALSE;
- }
-
- return l_info->m_codec_data.m_decompression.opj_read_header(
- l_info->m_codec,
- p_image,
- p_tile_x0,
- p_tile_y0,
- p_tile_width,
- p_tile_height,
- p_nb_tiles_x,
- p_nb_tiles_y,
- l_cio,
- l_info->m_event_mgr); //&(l_info->m_event_mgr));
- }
- return OPJ_FALSE;
-}
-#endif
opj_bool OPJ_CALLCONV opj_read_header ( opj_stream_t *p_cio,
opj_codec_t *p_codec,
- opj_image_t *p_image )
+ opj_image_t **p_image )
{
if (p_codec && p_cio) {
opj_codec_private_t* l_info = (opj_codec_private_t*) p_codec;
* @return true if the area could be set.
*/
opj_bool OPJ_CALLCONV opj_set_decode_area( opj_codec_t *p_codec,
+ opj_image_t* p_image,
OPJ_INT32 p_start_x, OPJ_INT32 p_start_y,
OPJ_INT32 p_end_x, OPJ_INT32 p_end_y
)
return OPJ_FALSE;
}
- return l_info->m_codec_data.m_decompression.opj_set_decode_area(
- l_info->m_codec,
- p_start_x,
- p_start_y,
- p_end_x,
- p_end_y,
- l_info->m_event_mgr);
+ return l_info->m_codec_data.m_decompression.opj_set_decode_area( l_info->m_codec,
+ p_image,
+ p_start_x, p_start_y,
+ p_end_x, p_end_y,
+ l_info->m_event_mgr);
}
return OPJ_FALSE;
return NULL;
}
+/*
+ *
+ *
+ */
+void OPJ_CALLCONV opj_destroy_cstr_info_v2(opj_codestream_info_v2_t **cstr_info) {
+ if (cstr_info) {
+
+ if ((*cstr_info)->m_default_tile_info.tccp_info){
+ opj_free((*cstr_info)->m_default_tile_info.tccp_info);
+ }
+
+ if ((*cstr_info)->tile_info){
+ /* FIXME not used for the moment*/
+ }
+
+ opj_free((*cstr_info));
+ (*cstr_info) = NULL;
+ }
+}
+
/*
*
*
return NULL;
}
+/*
+ *
+ *
+ */
+void OPJ_CALLCONV opj_destroy_cstr_index(opj_codestream_index_t **p_cstr_index)
+{
+ if (*p_cstr_index){
+
+ j2k_destroy_cstr_index(*p_cstr_index);
+ (*p_cstr_index) = NULL;
+ }
+}
+
+
opj_bool OPJ_CALLCONV opj_decode_v2(opj_codec_t *p_info,
opj_stream_t *cio,
opj_image_t* p_image)
return OPJ_FALSE;
}
+/*
+ *
+ *
+ */
opj_bool OPJ_CALLCONV opj_end_decompress (opj_codec_t *p_codec,opj_stream_t *p_cio)
{
if (p_codec && p_cio) {
return OPJ_FALSE;
}
+
+/*
+ *
+ *
+ */
+opj_bool OPJ_CALLCONV opj_get_decoded_tile( opj_codec_t *p_codec,
+ opj_stream_t *p_cio,
+ opj_image_t *p_image,
+ OPJ_UINT32 tile_index)
+{
+ if (p_codec && p_cio) {
+ opj_codec_private_t * l_codec = (opj_codec_private_t *) p_codec;
+ opj_stream_private_t * l_stream = (opj_stream_private_t *) p_cio;
+
+ if (! l_codec->is_decompressor) {
+ return OPJ_FALSE;
+ }
+ return l_codec->m_codec_data.m_decompression.opj_get_decoded_tile( l_codec->m_codec,
+ l_stream,
+ p_image,
+ l_codec->m_event_mgr,
+ tile_index);
+ }
+
+ return OPJ_FALSE;
+}
+
+/*
+ *
+ *
+ */
+opj_bool OPJ_CALLCONV opj_set_decoded_resolution_factor(opj_codec_t *p_codec, OPJ_UINT32 res_factor)
+{
+ opj_codec_private_t * l_codec = (opj_codec_private_t *) p_codec;
+
+ if ( !l_codec ){
+ fprintf(stderr, "[ERROR] Input parameters of the setup_decoder function are incorrect.\n");
+ return OPJ_FALSE;
+ }
+
+
+ l_codec->m_codec_data.m_decompression.opj_set_decoded_resolution_factor(l_codec->m_codec, res_factor, l_codec->m_event_mgr);
+
+ return OPJ_TRUE;
+}