diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/w32image.c | 42 |
1 files changed, 24 insertions, 18 deletions
diff --git a/src/w32image.c b/src/w32image.c index 0a2a55d3f6f..95d8ddfe117 100644 --- a/src/w32image.c +++ b/src/w32image.c | |||
| @@ -245,27 +245,33 @@ w32_frame_delay (GpBitmap *pBitmap, int frame) | |||
| 245 | { | 245 | { |
| 246 | UINT size; | 246 | UINT size; |
| 247 | PropertyItem *propertyItem; | 247 | PropertyItem *propertyItem; |
| 248 | double delay = 0.0; | 248 | double delay = -1.0; |
| 249 | 249 | ||
| 250 | /* Assume that the image has a property item of type PropertyItemEquipMake. | 250 | /* Assume that the image has a property item of type PropertyItemEquipMake. |
| 251 | Get the size of that property item. */ | 251 | Get the size of that property item. This can fail for multi-frame TIFF |
| 252 | GdipGetPropertyItemSize (pBitmap, PropertyTagFrameDelay, &size); | 252 | images. */ |
| 253 | GpStatus status = GdipGetPropertyItemSize (pBitmap, PropertyTagFrameDelay, | ||
| 254 | &size); | ||
| 253 | 255 | ||
| 254 | /* Allocate a buffer to receive the property item. */ | 256 | if (status == Ok) |
| 255 | propertyItem = malloc (size); | ||
| 256 | if (propertyItem != NULL) | ||
| 257 | { | 257 | { |
| 258 | /* Get the property item. */ | 258 | /* Allocate a buffer to receive the property item. */ |
| 259 | GdipGetPropertyItem (pBitmap, PropertyTagFrameDelay, size, propertyItem); | 259 | propertyItem = malloc (size); |
| 260 | delay = decode_delay (propertyItem, frame); | 260 | if (propertyItem != NULL) |
| 261 | if (delay <= 0) | 261 | { |
| 262 | { | 262 | /* Get the property item. */ |
| 263 | /* In GIF files, unfortunately, delay is only specified for the first | 263 | GdipGetPropertyItem (pBitmap, PropertyTagFrameDelay, size, |
| 264 | frame. */ | 264 | propertyItem); |
| 265 | delay = decode_delay (propertyItem, 0); | 265 | delay = decode_delay (propertyItem, frame); |
| 266 | } | 266 | if (delay <= 0) |
| 267 | delay /= 100.0; | 267 | { |
| 268 | free (propertyItem); | 268 | /* In GIF files, unfortunately, delay is only specified |
| 269 | for the first frame. */ | ||
| 270 | delay = decode_delay (propertyItem, 0); | ||
| 271 | } | ||
| 272 | delay /= 100.0; | ||
| 273 | free (propertyItem); | ||
| 274 | } | ||
| 269 | } | 275 | } |
| 270 | return delay; | 276 | return delay; |
| 271 | } | 277 | } |
| @@ -372,7 +378,7 @@ w32_load_image (struct frame *f, struct image *img, | |||
| 372 | { | 378 | { |
| 373 | if (nframes > 1) | 379 | if (nframes > 1) |
| 374 | metadata = Fcons (Qcount, Fcons (make_fixnum (nframes), metadata)); | 380 | metadata = Fcons (Qcount, Fcons (make_fixnum (nframes), metadata)); |
| 375 | if (delay) | 381 | if (delay >= 0) |
| 376 | metadata = Fcons (Qdelay, Fcons (make_float (delay), metadata)); | 382 | metadata = Fcons (Qdelay, Fcons (make_float (delay), metadata)); |
| 377 | } | 383 | } |
| 378 | else if (status == Win32Error) /* FIXME! */ | 384 | else if (status == Win32Error) /* FIXME! */ |