From a7efe96305e0e1847c2e20b119c86cac03fd9e56 Mon Sep 17 00:00:00 2001 From: Vladimir Nadvornik Date: Sun, 27 Mar 2011 18:14:17 +0200 Subject: [PATCH] free mpo data --- src/image_load_jpeg.c | 16 +++++++++++++--- src/jpeg_parser.c | 9 +++++++++ src/jpeg_parser.h | 2 ++ 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/src/image_load_jpeg.c b/src/image_load_jpeg.c index dc9b3c41..854ca4de 100644 --- a/src/image_load_jpeg.c +++ b/src/image_load_jpeg.c @@ -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 || diff --git a/src/jpeg_parser.c b/src/jpeg_parser.c index 4fa27be1..4d9ef6d5 100644 --- a/src/jpeg_parser.c +++ b/src/jpeg_parser.c @@ -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 diff --git a/src/jpeg_parser.h b/src/jpeg_parser.h index 0f342ecf..2c3ad8f6 100644 --- a/src/jpeg_parser.h +++ b/src/jpeg_parser.h @@ -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 -- 2.20.1