OpenJPEG library interface modified to retain compatibility with version 1.2. Sorry if some of you already adapted their code to the previous interface, but we want to avoid a ABI break....
This commit is contained in:
parent
569bbb0077
commit
55c4c14352
|
@ -7,6 +7,7 @@ What's New for OpenJPEG
|
||||||
|
|
||||||
September 17, 2007
|
September 17, 2007
|
||||||
* [FOD] Fixed issues with cstr_info when codestream has components with different number of resolutions.
|
* [FOD] Fixed issues with cstr_info when codestream has components with different number of resolutions.
|
||||||
|
! [FOD] OpenJPEG library interface modified to retain compatibility with version 1.2
|
||||||
|
|
||||||
September 12, 2007
|
September 12, 2007
|
||||||
* [FOD] Patch from Callum Lerwick.
|
* [FOD] Patch from Callum Lerwick.
|
||||||
|
|
|
@ -1919,7 +1919,10 @@ int main(int argc, char **argv) {
|
||||||
cio = opj_cio_open((opj_common_ptr)cinfo, NULL, 0);
|
cio = opj_cio_open((opj_common_ptr)cinfo, NULL, 0);
|
||||||
|
|
||||||
/* encode the image */
|
/* encode the image */
|
||||||
bSuccess = opj_encode(cinfo, cio, image, &cstr_info);
|
if (*indexfilename) // If need to extract codestream information
|
||||||
|
bSuccess = opj_encode_with_info(cinfo, cio, image, &cstr_info);
|
||||||
|
else
|
||||||
|
bSuccess = opj_encode(cinfo, cio, image, NULL);
|
||||||
if (!bSuccess) {
|
if (!bSuccess) {
|
||||||
opj_cio_close(cio);
|
opj_cio_close(cio);
|
||||||
fprintf(stderr, "failed to encode image\n");
|
fprintf(stderr, "failed to encode image\n");
|
||||||
|
@ -1950,8 +1953,8 @@ int main(int argc, char **argv) {
|
||||||
|
|
||||||
/* free remaining compression structures */
|
/* free remaining compression structures */
|
||||||
opj_destroy_compress(cinfo);
|
opj_destroy_compress(cinfo);
|
||||||
opj_destroy_cstr_info(&cstr_info);
|
if (*indexfilename)
|
||||||
|
opj_destroy_cstr_info(&cstr_info);
|
||||||
} else { /* JP2 format output */
|
} else { /* JP2 format output */
|
||||||
int codestream_length;
|
int codestream_length;
|
||||||
opj_cio_t *cio = NULL;
|
opj_cio_t *cio = NULL;
|
||||||
|
@ -1971,7 +1974,10 @@ int main(int argc, char **argv) {
|
||||||
cio = opj_cio_open((opj_common_ptr)cinfo, NULL, 0);
|
cio = opj_cio_open((opj_common_ptr)cinfo, NULL, 0);
|
||||||
|
|
||||||
/* encode the image */
|
/* encode the image */
|
||||||
bSuccess = opj_encode(cinfo, cio, image, &cstr_info);
|
if (*indexfilename) // If need to extract codestream information
|
||||||
|
bSuccess = opj_encode_with_info(cinfo, cio, image, &cstr_info);
|
||||||
|
else
|
||||||
|
bSuccess = opj_encode(cinfo, cio, image, NULL);
|
||||||
if (!bSuccess) {
|
if (!bSuccess) {
|
||||||
opj_cio_close(cio);
|
opj_cio_close(cio);
|
||||||
fprintf(stderr, "failed to encode image\n");
|
fprintf(stderr, "failed to encode image\n");
|
||||||
|
@ -2001,7 +2007,8 @@ int main(int argc, char **argv) {
|
||||||
|
|
||||||
/* free remaining compression structures */
|
/* free remaining compression structures */
|
||||||
opj_destroy_compress(cinfo);
|
opj_destroy_compress(cinfo);
|
||||||
opj_destroy_cstr_info(&cstr_info);
|
if (*indexfilename)
|
||||||
|
opj_destroy_cstr_info(&cstr_info);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* free image data */
|
/* free image data */
|
||||||
|
|
|
@ -834,8 +834,6 @@ int main(int argc, char **argv) {
|
||||||
fread(src, 1, file_length, fsrc);
|
fread(src, 1, file_length, fsrc);
|
||||||
fclose(fsrc);
|
fclose(fsrc);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* decode the code-stream */
|
/* decode the code-stream */
|
||||||
/* ---------------------- */
|
/* ---------------------- */
|
||||||
|
|
||||||
|
@ -857,7 +855,10 @@ int main(int argc, char **argv) {
|
||||||
cio = opj_cio_open((opj_common_ptr)dinfo, src, file_length);
|
cio = opj_cio_open((opj_common_ptr)dinfo, src, file_length);
|
||||||
|
|
||||||
/* decode the stream and fill the image structure */
|
/* decode the stream and fill the image structure */
|
||||||
image = opj_decode(dinfo, cio, &cstr_info);
|
if (*indexfilename) // If need to extract codestream information
|
||||||
|
image = opj_decode_with_info(dinfo, cio, &cstr_info);
|
||||||
|
else
|
||||||
|
image = opj_decode(dinfo, cio);
|
||||||
if(!image) {
|
if(!image) {
|
||||||
fprintf(stderr, "ERROR -> j2k_to_image: failed to decode image!\n");
|
fprintf(stderr, "ERROR -> j2k_to_image: failed to decode image!\n");
|
||||||
opj_destroy_decompress(dinfo);
|
opj_destroy_decompress(dinfo);
|
||||||
|
@ -896,7 +897,10 @@ int main(int argc, char **argv) {
|
||||||
cio = opj_cio_open((opj_common_ptr)dinfo, src, file_length);
|
cio = opj_cio_open((opj_common_ptr)dinfo, src, file_length);
|
||||||
|
|
||||||
/* decode the stream and fill the image structure */
|
/* decode the stream and fill the image structure */
|
||||||
image = opj_decode(dinfo, cio, &cstr_info);
|
if (*indexfilename) // If need to extract codestream information
|
||||||
|
image = opj_decode_with_info(dinfo, cio, &cstr_info);
|
||||||
|
else
|
||||||
|
image = opj_decode(dinfo, cio);
|
||||||
if(!image) {
|
if(!image) {
|
||||||
fprintf(stderr, "ERROR -> j2k_to_image: failed to decode image!\n");
|
fprintf(stderr, "ERROR -> j2k_to_image: failed to decode image!\n");
|
||||||
opj_destroy_decompress(dinfo);
|
opj_destroy_decompress(dinfo);
|
||||||
|
@ -935,7 +939,10 @@ int main(int argc, char **argv) {
|
||||||
cio = opj_cio_open((opj_common_ptr)dinfo, src, file_length);
|
cio = opj_cio_open((opj_common_ptr)dinfo, src, file_length);
|
||||||
|
|
||||||
/* decode the stream and fill the image structure */
|
/* decode the stream and fill the image structure */
|
||||||
image = opj_decode(dinfo, cio, &cstr_info);
|
if (*indexfilename) // If need to extract codestream information
|
||||||
|
image = opj_decode_with_info(dinfo, cio, &cstr_info);
|
||||||
|
else
|
||||||
|
image = opj_decode(dinfo, cio);
|
||||||
if(!image) {
|
if(!image) {
|
||||||
fprintf(stderr, "ERROR -> j2k_to_image: failed to decode image!\n");
|
fprintf(stderr, "ERROR -> j2k_to_image: failed to decode image!\n");
|
||||||
opj_destroy_decompress(dinfo);
|
opj_destroy_decompress(dinfo);
|
||||||
|
@ -1029,7 +1036,8 @@ int main(int argc, char **argv) {
|
||||||
opj_destroy_decompress(dinfo);
|
opj_destroy_decompress(dinfo);
|
||||||
}
|
}
|
||||||
/* free codestream information structure */
|
/* free codestream information structure */
|
||||||
opj_destroy_cstr_info(&cstr_info);
|
if (*indexfilename)
|
||||||
|
opj_destroy_cstr_info(&cstr_info);
|
||||||
/* free image data structure */
|
/* free image data structure */
|
||||||
opj_image_destroy(image);
|
opj_image_destroy(image);
|
||||||
|
|
||||||
|
|
|
@ -147,7 +147,11 @@ void OPJ_CALLCONV opj_setup_decoder(opj_dinfo_t *dinfo, opj_dparameters_t *param
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
opj_image_t* OPJ_CALLCONV opj_decode(opj_dinfo_t *dinfo, opj_cio_t *cio, opj_codestream_info_t *cstr_info) {
|
opj_image_t* OPJ_CALLCONV opj_decode(opj_dinfo_t *dinfo, opj_cio_t *cio) {
|
||||||
|
return opj_decode_with_info(dinfo, cio, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
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) {
|
if(dinfo && cio) {
|
||||||
switch(dinfo->codec_format) {
|
switch(dinfo->codec_format) {
|
||||||
case CODEC_J2K:
|
case CODEC_J2K:
|
||||||
|
@ -161,7 +165,6 @@ opj_image_t* OPJ_CALLCONV opj_decode(opj_dinfo_t *dinfo, opj_cio_t *cio, opj_cod
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -287,7 +290,15 @@ void OPJ_CALLCONV opj_setup_encoder(opj_cinfo_t *cinfo, opj_cparameters_t *param
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool OPJ_CALLCONV opj_encode(opj_cinfo_t *cinfo, opj_cio_t *cio, opj_image_t *image, opj_codestream_info_t *cstr_info) {
|
bool OPJ_CALLCONV opj_encode(opj_cinfo_t *cinfo, opj_cio_t *cio, opj_image_t *image, char *index) {
|
||||||
|
if (index != NULL)
|
||||||
|
opj_event_msg((opj_common_ptr)cinfo, EVT_WARNING, "Set index to NULL when calling the opj_encode function.\n"
|
||||||
|
"To extract the index, use the opj_encode_with_info() function.\n"
|
||||||
|
"No index will be generated during this encoding\n");
|
||||||
|
return opj_encode_with_info(cinfo, cio, image, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool OPJ_CALLCONV opj_encode_with_info(opj_cinfo_t *cinfo, opj_cio_t *cio, opj_image_t *image, opj_codestream_info_t *cstr_info) {
|
||||||
if(cinfo && cio && image) {
|
if(cinfo && cio && image) {
|
||||||
switch(cinfo->codec_format) {
|
switch(cinfo->codec_format) {
|
||||||
case CODEC_J2K:
|
case CODEC_J2K:
|
||||||
|
|
|
@ -817,13 +817,21 @@ Decoding parameters are returned in j2k->cp.
|
||||||
*/
|
*/
|
||||||
OPJ_API void OPJ_CALLCONV opj_setup_decoder(opj_dinfo_t *dinfo, opj_dparameters_t *parameters);
|
OPJ_API void OPJ_CALLCONV opj_setup_decoder(opj_dinfo_t *dinfo, opj_dparameters_t *parameters);
|
||||||
/**
|
/**
|
||||||
Decode an image from a JPEG-2000 codestream
|
Decode an image from a JPEG-2000 codestream
|
||||||
|
@param dinfo decompressor handle
|
||||||
|
@param cio Input buffer stream
|
||||||
|
@return Returns a decoded image if successful, returns NULL otherwise
|
||||||
|
*/
|
||||||
|
OPJ_API opj_image_t* OPJ_CALLCONV opj_decode(opj_dinfo_t *dinfo, opj_cio_t *cio);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Decode an image from a JPEG-2000 codestream and extract the codestream information
|
||||||
@param dinfo decompressor handle
|
@param dinfo decompressor handle
|
||||||
@param cio Input buffer stream
|
@param cio Input buffer stream
|
||||||
@param cstr_info Codestream information structure if needed afterwards, NULL otherwise
|
@param cstr_info Codestream information structure if needed afterwards, NULL otherwise
|
||||||
@return Returns a decoded image if successful, returns NULL otherwise
|
@return Returns a decoded image if successful, returns NULL otherwise
|
||||||
*/
|
*/
|
||||||
OPJ_API opj_image_t* OPJ_CALLCONV opj_decode(opj_dinfo_t *dinfo, opj_cio_t *cio, opj_codestream_info_t *cstr_info);
|
OPJ_API opj_image_t* OPJ_CALLCONV opj_decode_with_info(opj_dinfo_t *dinfo, opj_cio_t *cio, opj_codestream_info_t *cstr_info);
|
||||||
/**
|
/**
|
||||||
Creates a J2K/JP2 compression structure
|
Creates a J2K/JP2 compression structure
|
||||||
@param format Coder to select
|
@param format Coder to select
|
||||||
|
@ -869,10 +877,19 @@ Encode an image into a JPEG-2000 codestream
|
||||||
@param cinfo compressor handle
|
@param cinfo compressor handle
|
||||||
@param cio Output buffer stream
|
@param cio Output buffer stream
|
||||||
@param image Image to encode
|
@param image Image to encode
|
||||||
|
@param index Depreacted -> Set to NULL. To extract index, used opj_encode_wci()
|
||||||
|
@return Returns true if successful, returns false otherwise
|
||||||
|
*/
|
||||||
|
OPJ_API bool OPJ_CALLCONV opj_encode(opj_cinfo_t *cinfo, opj_cio_t *cio, opj_image_t *image, char *index);
|
||||||
|
/**
|
||||||
|
Encode an image into a JPEG-2000 codestream and extract the codestream information
|
||||||
|
@param cinfo compressor handle
|
||||||
|
@param cio Output buffer stream
|
||||||
|
@param image Image to encode
|
||||||
@param cstr_info Codestream information structure if needed afterwards, NULL otherwise
|
@param cstr_info Codestream information structure if needed afterwards, NULL otherwise
|
||||||
@return Returns true if successful, returns false otherwise
|
@return Returns true if successful, returns false otherwise
|
||||||
*/
|
*/
|
||||||
OPJ_API bool OPJ_CALLCONV opj_encode(opj_cinfo_t *cinfo, opj_cio_t *cio, opj_image_t *image, opj_codestream_info_t *cstr_info);
|
OPJ_API bool OPJ_CALLCONV opj_encode_with_info(opj_cinfo_t *cinfo, opj_cio_t *cio, opj_image_t *image, opj_codestream_info_t *cstr_info);
|
||||||
/**
|
/**
|
||||||
Destroy Codestream information after compression or decompression
|
Destroy Codestream information after compression or decompression
|
||||||
@param cstr_info Codestream information structure
|
@param cstr_info Codestream information structure
|
||||||
|
|
|
@ -945,7 +945,7 @@ int xml_out_frame(FILE* file, FILE* xmlout, mj2_sample_t *sample, unsigned int s
|
||||||
cio = opj_cio_open((opj_common_ptr)dinfo, frame_codestream, sample->sample_size-8);
|
cio = opj_cio_open((opj_common_ptr)dinfo, frame_codestream, sample->sample_size-8);
|
||||||
|
|
||||||
/* Decode J2K to image: */
|
/* Decode J2K to image: */
|
||||||
img = opj_decode(dinfo, cio, NULL); /* We don't need cstr_info -> set to NULL */
|
img = opj_decode(dinfo, cio);
|
||||||
if (!img) {
|
if (!img) {
|
||||||
fprintf(stderr, "ERROR -> j2k_to_image: failed to decode image!\n");
|
fprintf(stderr, "ERROR -> j2k_to_image: failed to decode image!\n");
|
||||||
opj_destroy_decompress(dinfo);
|
opj_destroy_decompress(dinfo);
|
||||||
|
|
|
@ -160,7 +160,7 @@ int main(int argc, char *argv[]) {
|
||||||
/* open a byte stream */
|
/* open a byte stream */
|
||||||
cio = opj_cio_open((opj_common_ptr)dinfo, frame_codestream, sample->sample_size-8);
|
cio = opj_cio_open((opj_common_ptr)dinfo, frame_codestream, sample->sample_size-8);
|
||||||
|
|
||||||
img = opj_decode(dinfo, cio, NULL); // Decode J2K to image. We will not use the cstr_info afterwards -> set to NULL
|
img = opj_decode(dinfo, cio); // Decode J2K to image
|
||||||
|
|
||||||
if (((img->numcomps == 3) && (img->comps[0].dx == img->comps[1].dx / 2)
|
if (((img->numcomps == 3) && (img->comps[0].dx == img->comps[1].dx / 2)
|
||||||
&& (img->comps[0].dx == img->comps[2].dx / 2 ) && (img->comps[0].dx == 1))
|
&& (img->comps[0].dx == img->comps[2].dx / 2 ) && (img->comps[0].dx == 1))
|
||||||
|
|
Loading…
Reference in New Issue