comparison src/image_load_jpeg.c @ 1912:4417578c55f9

improved mpo parser, consider individual image type code
author Vladimir Nadvornik <nadvornik@suse.cz>
date Sat, 09 Apr 2011 16:07:31 +0200
parents 225b72ae0482
children 25ad4fcd970d
comparison
equal deleted inserted replaced
1911:225b72ae0482 1912:4417578c55f9
274 lj->stereo = FALSE; 274 lj->stereo = FALSE;
275 275
276 MPOData *mpo = jpeg_get_mpo_data(buf, count); 276 MPOData *mpo = jpeg_get_mpo_data(buf, count);
277 if (mpo && mpo->num_images > 1) 277 if (mpo && mpo->num_images > 1)
278 { 278 {
279 lj->stereo = TRUE; 279 guint i;
280 stereo_buf2 = (unsigned char *)buf + mpo->images[1].offset; 280 gint idx1 = -1, idx2 = -1;
281 stereo_length = mpo->images[1].length; 281 guint num2 = 1;
282
283 for (i = 0; i < mpo->num_images; i++)
284 {
285 if (mpo->images[i].type_code == 0x20002)
286 {
287 if (mpo->images[i].MPIndividualNum == 1)
288 {
289 idx1 = i;
290 }
291 else if (mpo->images[i].MPIndividualNum > num2)
292 {
293 idx2 = i;
294 num2 = mpo->images[i].MPIndividualNum;
295 }
296 }
297 }
298
299 if (idx1 >= 0 && idx2 >= 0)
300 {
301 lj->stereo = TRUE;
302 stereo_buf2 = (unsigned char *)buf + mpo->images[idx2].offset;
303 stereo_length = mpo->images[idx2].length;
304 buf = (unsigned char *)buf + mpo->images[idx1].offset;
305 count = mpo->images[idx1].length;
306 }
282 } 307 }
283 jpeg_mpo_data_free(mpo); 308 jpeg_mpo_data_free(mpo);
284 309
285 /* setup error handler */ 310 /* setup error handler */
286 cinfo.err = jpeg_std_error (&jerr.pub); 311 cinfo.err = jpeg_std_error (&jerr.pub);