Alien-FreeImage

 view release on metacpan or  search on metacpan

src/Source/LibOpenJPEG/openjpeg.c  view on Meta::CPAN

	}
	memset(l_codec, 0, sizeof(opj_codec_private_t));

	l_codec->is_decompressor = 1;

	switch (p_format) {
		case OPJ_CODEC_J2K:
			l_codec->opj_dump_codec = (void (*) (void*, OPJ_INT32, FILE*)) j2k_dump;

			l_codec->opj_get_codec_info = (opj_codestream_info_v2_t* (*) (void*) ) j2k_get_cstr_info;

			l_codec->opj_get_codec_index = (opj_codestream_index_t* (*) (void*) ) j2k_get_cstr_index;

			l_codec->m_codec_data.m_decompression.opj_decode =
					(OPJ_BOOL (*) (	void *,
									struct opj_stream_private *,
									opj_image_t*, struct opj_event_mgr * )) opj_j2k_decode;

			l_codec->m_codec_data.m_decompression.opj_end_decompress =
					(OPJ_BOOL (*) (	void *,
									struct opj_stream_private *,
									struct opj_event_mgr *)) opj_j2k_end_decompress;

			l_codec->m_codec_data.m_decompression.opj_read_header =
					(OPJ_BOOL (*) (	struct opj_stream_private *,
									void *,
									opj_image_t **,
									struct opj_event_mgr * )) opj_j2k_read_header;

			l_codec->m_codec_data.m_decompression.opj_destroy =
					(void (*) (void *))opj_j2k_destroy;

			l_codec->m_codec_data.m_decompression.opj_setup_decoder =
					(void (*) (void * , opj_dparameters_t * )) opj_j2k_setup_decoder;

			l_codec->m_codec_data.m_decompression.opj_read_tile_header =
					(OPJ_BOOL (*) (	void *,
									OPJ_UINT32*,
									OPJ_UINT32*,
									OPJ_INT32*, OPJ_INT32*,
									OPJ_INT32*, OPJ_INT32*,
									OPJ_UINT32*,
									OPJ_BOOL*,
									struct opj_stream_private *,
									struct opj_event_mgr * )) opj_j2k_read_tile_header;

			l_codec->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_j2k_decode_tile;

			l_codec->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 *)) opj_j2k_set_decode_area;

			l_codec->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)) opj_j2k_get_tile;

			l_codec->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)) opj_j2k_set_decoded_resolution_factor;

			l_codec->m_codec = opj_j2k_create_decompress();

			if (! l_codec->m_codec) {
				opj_free(l_codec);
				return NULL;
			}

			break;

		case OPJ_CODEC_JP2:
			/* get a JP2 decoder handle */
			l_codec->opj_dump_codec = (void (*) (void*, OPJ_INT32, FILE*)) jp2_dump;

			l_codec->opj_get_codec_info = (opj_codestream_info_v2_t* (*) (void*) ) jp2_get_cstr_info;

			l_codec->opj_get_codec_index = (opj_codestream_index_t* (*) (void*) ) jp2_get_cstr_index;

			l_codec->m_codec_data.m_decompression.opj_decode =
					(OPJ_BOOL (*) (	void *,
									struct opj_stream_private *,
									opj_image_t*,
									struct opj_event_mgr * )) opj_jp2_decode;

			l_codec->m_codec_data.m_decompression.opj_end_decompress =  
                    (OPJ_BOOL (*) ( void *,
                                    struct opj_stream_private *,
                                    struct opj_event_mgr *)) opj_jp2_end_decompress;

			l_codec->m_codec_data.m_decompression.opj_read_header =  
                    (OPJ_BOOL (*) ( struct opj_stream_private *,
					                void *,
					                opj_image_t **,
					                struct opj_event_mgr * )) opj_jp2_read_header;

			l_codec->m_codec_data.m_decompression.opj_read_tile_header = 
                    (OPJ_BOOL (*) ( void *,
					                OPJ_UINT32*,
					                OPJ_UINT32*,
					                OPJ_INT32*,
					                OPJ_INT32*,
					                OPJ_INT32 * ,
					                OPJ_INT32 * ,
					                OPJ_UINT32 * ,
					                OPJ_BOOL *,
					                struct opj_stream_private *,
					                struct opj_event_mgr * )) opj_jp2_read_tile_header;

			l_codec->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_codec->m_codec_data.m_decompression.opj_destroy = (void (*) (void *))opj_jp2_destroy;

			l_codec->m_codec_data.m_decompression.opj_setup_decoder = 
                    (void (*) (void * ,opj_dparameters_t * )) opj_jp2_setup_decoder;

			l_codec->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 * )) opj_jp2_set_decode_area;

			l_codec->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)) opj_jp2_get_tile;

			l_codec->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)) opj_jp2_set_decoded_resolution_factor;

			l_codec->m_codec = opj_jp2_create(OPJ_TRUE);

			if (! l_codec->m_codec) {
				opj_free(l_codec);
				return 00;
			}

			break;
		case OPJ_CODEC_UNKNOWN:
		case OPJ_CODEC_JPT:
		default:
			opj_free(l_codec);
			return 00;
	}

	opj_set_default_event_handler(&(l_codec->m_event_mgr));
	return (opj_codec_t*) l_codec;
}

void OPJ_CALLCONV opj_set_default_decoder_parameters(opj_dparameters_t *parameters) {
	if(parameters) {
		memset(parameters, 0, sizeof(opj_dparameters_t));
		/* default decoding parameters */
		parameters->cp_layer = 0;
		parameters->cp_reduce = 0;

		parameters->decod_format = -1;
		parameters->cod_format = -1;
		parameters->flags = 0;		
/* UniPG>> */
#ifdef USE_JPWL
		parameters->jpwl_correct = OPJ_FALSE;
		parameters->jpwl_exp_comps = JPWL_EXPECTED_COMPONENTS;
		parameters->jpwl_max_tiles = JPWL_MAXIMUM_TILES;
#endif /* USE_JPWL */
/* <<UniPG */
	}
}

OPJ_BOOL OPJ_CALLCONV opj_setup_decoder(opj_codec_t *p_codec,
                                        opj_dparameters_t *parameters 
										)
{
	if (p_codec && parameters) { 
		opj_codec_private_t * l_codec = (opj_codec_private_t *) p_codec;

		if (! l_codec->is_decompressor) {
			opj_event_msg(&(l_codec->m_event_mgr), EVT_ERROR, 
                "Codec provided to the opj_setup_decoder function is not a decompressor handler.\n");
			return OPJ_FALSE;
		}

		l_codec->m_codec_data.m_decompression.opj_setup_decoder(l_codec->m_codec,
																parameters);
		return OPJ_TRUE;
	}
	return OPJ_FALSE;
}

src/Source/LibOpenJPEG/openjpeg.c  view on Meta::CPAN

																			&(l_codec->m_event_mgr) );
	}
	return OPJ_FALSE;
}

OPJ_BOOL OPJ_CALLCONV opj_read_tile_header(	opj_codec_t *p_codec,
											opj_stream_t * p_stream,
											OPJ_UINT32 * p_tile_index,
											OPJ_UINT32 * p_data_size,
											OPJ_INT32 * p_tile_x0, OPJ_INT32 * p_tile_y0,
											OPJ_INT32 * p_tile_x1, OPJ_INT32 * p_tile_y1,
											OPJ_UINT32 * p_nb_comps,
											OPJ_BOOL * p_should_go_on)
{
	if (p_codec && p_stream && p_data_size && p_tile_index) {
		opj_codec_private_t * l_codec = (opj_codec_private_t *) p_codec;
		opj_stream_private_t * l_stream = (opj_stream_private_t *) p_stream;

		if (! l_codec->is_decompressor) {
			return OPJ_FALSE;
		}

		return l_codec->m_codec_data.m_decompression.opj_read_tile_header(	l_codec->m_codec,
																			p_tile_index,
																			p_data_size,
																			p_tile_x0, p_tile_y0,
																			p_tile_x1, p_tile_y1,
																			p_nb_comps,
																			p_should_go_on,
																			l_stream,
																			&(l_codec->m_event_mgr));
	}
	return OPJ_FALSE;
}

OPJ_BOOL OPJ_CALLCONV opj_decode_tile_data(	opj_codec_t *p_codec,
											OPJ_UINT32 p_tile_index,
											OPJ_BYTE * p_data,
											OPJ_UINT32 p_data_size,
											opj_stream_t *p_stream
											)
{
	if (p_codec && p_data && p_stream) {
		opj_codec_private_t * l_codec = (opj_codec_private_t *) p_codec;
		opj_stream_private_t * l_stream = (opj_stream_private_t *) p_stream;

		if (! l_codec->is_decompressor) {
			return OPJ_FALSE;
		}

		return l_codec->m_codec_data.m_decompression.opj_decode_tile_data(	l_codec->m_codec,
																			p_tile_index,
																			p_data,
																			p_data_size,
																			l_stream,
																			&(l_codec->m_event_mgr) );
	}
	return OPJ_FALSE;
}

OPJ_BOOL OPJ_CALLCONV opj_get_decoded_tile(	opj_codec_t *p_codec,
											opj_stream_t *p_stream,
											opj_image_t *p_image,
											OPJ_UINT32 tile_index)
{
	if (p_codec && p_stream) {
		opj_codec_private_t * l_codec = (opj_codec_private_t *) p_codec;
		opj_stream_private_t * l_stream = (opj_stream_private_t *) p_stream;

		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;
}

/* ---------------------------------------------------------------------- */
/* COMPRESSION FUNCTIONS*/

opj_codec_t* OPJ_CALLCONV opj_create_compress(OPJ_CODEC_FORMAT p_format)
{
	opj_codec_private_t *l_codec = 00;

	l_codec = (opj_codec_private_t*)opj_calloc(1, sizeof(opj_codec_private_t));
	if (!l_codec) {
		return 00;
	}
	memset(l_codec, 0, sizeof(opj_codec_private_t));
	
	l_codec->is_decompressor = 0;

	switch(p_format) {
		case OPJ_CODEC_J2K:
			l_codec->m_codec_data.m_compression.opj_encode = (OPJ_BOOL (*) (void *,
																			struct opj_stream_private *,
																			struct opj_event_mgr * )) opj_j2k_encode;

			l_codec->m_codec_data.m_compression.opj_end_compress = (OPJ_BOOL (*) (	void *,
																					struct opj_stream_private *,
																					struct opj_event_mgr *)) opj_j2k_end_compress;

			l_codec->m_codec_data.m_compression.opj_start_compress = (OPJ_BOOL (*) (void *,
																					struct opj_stream_private *,
																					struct opj_image * ,
																					struct opj_event_mgr *)) opj_j2k_start_compress;

			l_codec->m_codec_data.m_compression.opj_write_tile = (OPJ_BOOL (*) (void *,
																				OPJ_UINT32,
																				OPJ_BYTE*,
																				OPJ_UINT32,
																				struct opj_stream_private *,
																				struct opj_event_mgr *) ) opj_j2k_write_tile;

			l_codec->m_codec_data.m_compression.opj_destroy = (void (*) (void *)) opj_j2k_destroy;

			l_codec->m_codec_data.m_compression.opj_setup_encoder = (void (*) (	void *,
																				opj_cparameters_t *,
																				struct opj_image *,
																				struct opj_event_mgr * )) opj_j2k_setup_encoder;

			l_codec->m_codec = opj_j2k_create_compress();
			if (! l_codec->m_codec) {
				opj_free(l_codec);
				return 00;
			}

			break;

		case OPJ_CODEC_JP2:
			/* get a JP2 decoder handle */
			l_codec->m_codec_data.m_compression.opj_encode = (OPJ_BOOL (*) (void *,



( run in 1.291 second using v1.01-cache-2.11-cpan-56fb94df46f )