Fixed MJ2 codec bugs (issues 23-24 on google code). Thanks to Winfried for these...
authorFrancois-Olivier Devaux <fodevaux@users.noreply.github.com>
Thu, 8 Apr 2010 17:50:05 +0000 (17:50 +0000)
committerFrancois-Olivier Devaux <fodevaux@users.noreply.github.com>
Thu, 8 Apr 2010 17:50:05 +0000 (17:50 +0000)
ChangeLog
mj2/mj2_convert.c
mj2/mj2_to_frames.c
mj2/wrap_j2k_in_mj2.c

index a19d2ce2cb65c884740284b3d40e72a79eae1a4e..b9670842ac2a58ca03cbae048a9f9f24deb55b04 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -6,6 +6,7 @@ What's New for OpenJPEG
 + : added
 
 April 8, 2010
+* [FOD] Fixed MJ2 codec bugs (issues 23-24 on google code). Thanks to Winfried for these patches
 * [FOD] Fixed JP3D codec file format analyzer. Thanks to Krist�f Ralovich for this patch.
 ! [FOD] Significant optimizations of MCT, DWT, MQ and T1 modules by Peter Wimmer (thanks Peter)
 
index 8868843a02719f68d6287f3e31b423bf852bdfac..c7e0c04f0678f30d7f127fee563bff7223ae2032 100644 (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;
 }
index b87703cc5ab2c57b62f32f6a3757a6bdb5427358..0f2cb779b7ff676a4e65ecbe31978417ddeeae0d 100644 (file)
@@ -183,7 +183,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;
       
     }
index 0237d8bc54b7dd7111664bd3df98abf820f98abd..7615cfde73c3ccf59387fef0ece52cce042e6e22 100644 (file)
@@ -133,16 +133,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");
@@ -190,16 +200,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 */