changeset 1850:da6f03c6db01

free mpo data
author Vladimir Nadvornik <nadvornik@suse.cz>
date Sun, 27 Mar 2011 18:14:17 +0200
parents 41224a580fea
children 74ae4d79173a
files src/image_load_jpeg.c src/jpeg_parser.c src/jpeg_parser.h
diffstat 3 files changed, 24 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/image_load_jpeg.c	Sun Mar 27 13:53:23 2011 +0200
+++ b/src/image_load_jpeg.c	Sun Mar 27 18:14:17 2011 +0200
@@ -188,11 +188,21 @@
 	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 @@
 	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 ||
--- a/src/jpeg_parser.c	Sun Mar 27 13:53:23 2011 +0200
+++ b/src/jpeg_parser.c	Sun Mar 27 18:14:17 2011 +0200
@@ -279,3 +279,12 @@
 		}
 	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
--- a/src/jpeg_parser.h	Sun Mar 27 13:53:23 2011 +0200
+++ b/src/jpeg_parser.h	Sun Mar 27 18:14:17 2011 +0200
@@ -48,4 +48,6 @@
 };
 
 MPOData* jpeg_get_mpo_data(guchar *data, guint size);
+void jpeg_mpo_data_free(MPOData *mpo);
+
 #endif
\ No newline at end of file