[v2.0] Fixed MJ2 codec bugs (issues 23-24 on google code). Thanks to Winfried for these patches.

This commit is contained in:
Francois-Olivier Devaux 2010-04-08 18:01:45 +00:00
parent b2d22d6bc0
commit a346da0599
4 changed files with 36 additions and 15 deletions

View File

@ -5,6 +5,9 @@ What's New for OpenJPEG
! : changed
+ : added
April 8, 2010
* [FOD] Fixed MJ2 codec bugs (issues 23-24 on google code). Thanks to Winfried for these patches.
March 26, 2010
+ [FOD] Added support for "jpc" codestreams which are equivalent to "j2c" codestreams. Thanks to Winfried for this patch

View File

@ -324,8 +324,6 @@ int imagetobmp(opj_image_t * img, char *outfile) {
}
}
fclose(f);
opj_free(img->comps[1].data);
opj_free(img->comps[2].data);
}
return 0;
}

View File

@ -182,7 +182,7 @@ int main(int argc, char *argv[]) {
{
fprintf(stdout,"The frames will be output in a bmp format (output_1.bmp, ...)\n");
sprintf(outfilename,"output_%d.bmp",snum);
if (imagetobmp(img, outfilename)) // Convert image to YUV
if (imagetobmp(img, outfilename)) // Convert image to BMP
return 1;
}

View File

@ -132,16 +132,26 @@ static void setparams(opj_mj2_t *movie, opj_image_t *image) {
movie->tk[0].depth = image->comps[0].prec;
if (image->numcomps==3) {
if ((image->comps[0].dx == 1) && (image->comps[1].dx == 1) && (image->comps[1].dx == 1))
if ((image->comps[0].dx == 1)
&& (image->comps[1].dx == 1)
&& (image->comps[2].dx == 1))
movie->tk[0].CbCr_subsampling_dx = 1;
else if ((image->comps[0].dx == 1) && (image->comps[1].dx == 2) && (image->comps[1].dx == 2))
else
if ((image->comps[0].dx == 1)
&& (image->comps[1].dx == 2)
&& (image->comps[2].dx == 2))
movie->tk[0].CbCr_subsampling_dx = 2;
else
fprintf(stderr,"Image component sizes are incoherent\n");
if ((image->comps[0].dy == 1) && (image->comps[1].dy == 1) && (image->comps[1].dy == 1))
if ((image->comps[0].dy == 1)
&& (image->comps[1].dy == 1)
&& (image->comps[2].dy == 1))
movie->tk[0].CbCr_subsampling_dy = 1;
else if ((image->comps[0].dy == 1) && (image->comps[1].dy == 2) && (image->comps[1].dy == 2))
else
if ((image->comps[0].dy == 1)
&& (image->comps[1].dy == 2)
&& (image->comps[2].dy == 2))
movie->tk[0].CbCr_subsampling_dy = 2;
else
fprintf(stderr,"Image component sizes are incoherent\n");
@ -189,16 +199,26 @@ static void setparams(opj_mj2_t *movie, opj_image_t *image) {
else
movie->tk[0].jp2_struct.meth = 2;
if (image->numcomps == 1)
movie->tk[0].jp2_struct.enumcs = 17; // Grayscale
if (image->numcomps == 1)
movie->tk[0].jp2_struct.enumcs = 17; // Grayscale
else if ((image->comps[0].dx == 1) && (image->comps[1].dx == 1) && (image->comps[1].dx == 1) &&
(image->comps[0].dy == 1) && (image->comps[1].dy == 1) && (image->comps[1].dy == 1))
movie->tk[0].jp2_struct.enumcs = 16; // RGB
else
if ((image->comps[0].dx == 1)
&& (image->comps[1].dx == 1)
&& (image->comps[2].dx == 1)
&& (image->comps[0].dy == 1)
&& (image->comps[1].dy == 1)
&& (image->comps[2].dy == 1))
movie->tk[0].jp2_struct.enumcs = 16; // RGB
else if ((image->comps[0].dx == 1) && (image->comps[1].dx == 2) && (image->comps[1].dx == 2) &&
(image->comps[0].dy == 1) && (image->comps[1].dy == 2) && (image->comps[1].dy == 2))
movie->tk[0].jp2_struct.enumcs = 18; // YUV
else
if ((image->comps[0].dx == 1)
&& (image->comps[1].dx == 2)
&& (image->comps[2].dx == 2)
&& (image->comps[0].dy == 1)
&& (image->comps[1].dy == 2)
&& (image->comps[2].dy == 2))
movie->tk[0].jp2_struct.enumcs = 18; // YUV
else
movie->tk[0].jp2_struct.enumcs = 0; // Unkown profile */