# HG changeset patch # User Vladimir Nadvornik # Date 1301242457 -7200 # Node ID da6f03c6db0159252de904058a3ea4787d506789 # Parent 41224a580fea8dda1336c9feaf23537f47b6620c free mpo data diff -r 41224a580fea -r da6f03c6db01 src/image_load_jpeg.c --- 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 || diff -r 41224a580fea -r da6f03c6db01 src/jpeg_parser.c --- 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 diff -r 41224a580fea -r da6f03c6db01 src/jpeg_parser.h --- 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