Mercurial > hg > forks > geeqie
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); |