free mpo data
authorVladimir Nadvornik <nadvornik@suse.cz>
Sun, 27 Mar 2011 16:14:17 +0000 (18:14 +0200)
committerVladimir Nadvornik <nadvornik@suse.cz>
Tue, 27 Sep 2011 12:30:09 +0000 (14:30 +0200)
src/image_load_jpeg.c
src/jpeg_parser.c
src/jpeg_parser.h

index dc9b3c4..854ca4d 100644 (file)
@@ -188,11 +188,21 @@ static gboolean image_loader_jpeg_load (gpointer loader, const guchar *buf, gsiz
        struct jpeg_decompress_struct cinfo2;
        guchar *dptr, *dptr2;
        guint rowstride;
+       guchar *stereo_buf2 = NULL;
+       guint stereo_length = 0;
 
        struct error_handler_data jerr;
-//     stdio_src_ptr src;
+       
+       lj->stereo = FALSE;
+
        MPOData *mpo = jpeg_get_mpo_data(buf, count);
-       lj->stereo = (mpo && mpo->num_images > 1);
+       if (mpo && mpo->num_images > 1)
+               {
+               lj->stereo = TRUE;
+               stereo_buf2 = (unsigned char *)buf + mpo->images[1].offset;
+               stereo_length = mpo->images[1].length;
+               }
+       jpeg_mpo_data_free(mpo);
 
        /* setup error handler */
        cinfo.err = jpeg_std_error (&jerr.pub);
@@ -223,7 +233,7 @@ static gboolean image_loader_jpeg_load (gpointer loader, const guchar *buf, gsiz
        if (lj->stereo)
                {
                jpeg_create_decompress(&cinfo2);
-               jpeg_mem_src(&cinfo2, (unsigned char *)buf + mpo->images[1].offset, mpo->images[1].length);
+               jpeg_mem_src(&cinfo2, stereo_buf2, stereo_length);
                jpeg_read_header(&cinfo2, TRUE);
                
                if (cinfo.image_width != cinfo2.image_width ||
index 4fa27be..4d9ef6d 100644 (file)
@@ -279,3 +279,12 @@ MPOData *jpeg_get_mpo_data(guchar *data, guint size)
                }
        return NULL;
 }
+
+void jpeg_mpo_data_free(MPOData *mpo)
+{
+       if (mpo)
+               {
+               if (mpo->images) g_free(mpo->images);
+               g_free(mpo);
+               }
+}
\ No newline at end of file
index 0f342ec..2c3ad8f 100644 (file)
@@ -48,4 +48,6 @@ struct _MPOData {
 };
 
 MPOData* jpeg_get_mpo_data(guchar *data, guint size);
+void jpeg_mpo_data_free(MPOData *mpo);
+
 #endif
\ No newline at end of file