From: glennrp Date: Sat, 25 Jan 2014 16:59:43 +0000 (+0000) Subject: Added image->duration, compute it in coders/gif.c, report it in identify.c X-Git-Tag: 7.0.1-0~2792 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b844bd5119042ba96a17b45c4c403aed6b98212b;p=imagemagick Added image->duration, compute it in coders/gif.c, report it in identify.c --- diff --git a/MagickCore/identify.c b/MagickCore/identify.c index f6c95ccf0..e823ee524 100644 --- a/MagickCore/identify.c +++ b/MagickCore/identify.c @@ -1053,6 +1053,9 @@ MagickExport MagickBooleanType IdentifyImage(Image *image,FILE *file, if (image->iterations != 1) (void) FormatLocaleFile(file," Iterations: %.20g\n",(double) image->iterations); + if (image->duration != 0) + (void) FormatLocaleFile(file," Duration: %.20g\n",(double) + image->duration); if ((image->next != (Image *) NULL) || (image->previous != (Image *) NULL)) (void) FormatLocaleFile(file," Scene: %.20g of %.20g\n",(double) image->scene,(double) GetImageListLength(image)); diff --git a/MagickCore/image.h b/MagickCore/image.h index 18f938c2a..87df70bc8 100644 --- a/MagickCore/image.h +++ b/MagickCore/image.h @@ -236,7 +236,8 @@ struct _Image size_t scene, /* index of image in multi-image file */ - delay; /* Animation delay time */ + delay, /* Animation delay time */ + duration; /* Total animation duration sum(delay*iterations) */ ssize_t ticks_per_second; /* units for delay time, default 100 for GIF */ diff --git a/coders/gif.c b/coders/gif.c index 10ff941d1..a4986b28e 100644 --- a/coders/gif.c +++ b/coders/gif.c @@ -986,6 +986,7 @@ static Image *ReadGIFImage(const ImageInfo *image_info,ExceptionInfo *exception) size_t delay, dispose, + duration, global_colors, image_count, iterations, @@ -1042,6 +1043,7 @@ static Image *ReadGIFImage(const ImageInfo *image_info,ExceptionInfo *exception) count=ReadBlob(image,(size_t) (3*global_colors),global_colormap); delay=0; dispose=0; + duration=0; iterations=1; opacity=(-1); image_count=0; @@ -1263,7 +1265,6 @@ static Image *ReadGIFImage(const ImageInfo *image_info,ExceptionInfo *exception) image->alpha_trait=opacity >= 0 ? BlendPixelTrait : UndefinedPixelTrait; delay=0; dispose=0; - iterations=1; if ((image->columns == 0) || (image->rows == 0)) { global_colormap=(unsigned char *) RelinquishMagickMemory( @@ -1359,6 +1360,7 @@ static Image *ReadGIFImage(const ImageInfo *image_info,ExceptionInfo *exception) global_colormap); ThrowReaderException(CorruptImageError,"CorruptImage"); } + duration += image->delay * image->iterations; if (image_info->number_scenes != 0) if (image->scene >= (image_info->scene+image_info->number_scenes-1)) break; @@ -1368,6 +1370,7 @@ static Image *ReadGIFImage(const ImageInfo *image_info,ExceptionInfo *exception) if (status == MagickFalse) break; } + image->duration=duration; meta_image=DestroyImage(meta_image); global_colormap=(unsigned char *) RelinquishMagickMemory(global_colormap); if ((image->columns == 0) || (image->rows == 0))