[FFmpeg-devel] [PATCH]Add an ignore_delay option to the gif demuxer
Carl Eugen Hoyos
cehoyos at ag.or.at
Thu Mar 26 11:03:20 CET 2015
Hi!
On Wednesday 18 March 2015 08:43:30 am Carl Eugen Hoyos wrote:
> Attached patch allows users to force a delay for an animated gif.
> Related to ticket #4369 (I don't think there is a bug, if there
> is a bug, it is reproducible with avi etc.)
Alternative patch attached.
Please comment, Carl Eugen
-------------- next part --------------
diff --git a/doc/demuxers.texi b/doc/demuxers.texi
index 11dfe1b..9be639a 100644
--- a/doc/demuxers.texi
+++ b/doc/demuxers.texi
@@ -205,6 +205,10 @@ It accepts the following options:
Set the minimum valid delay between frames in hundredths of seconds.
Range is 0 to 6000. Default value is 2.
+ at item max_gif_delay
+Set the maximum valid delay between frames in hundredth of seconds.
+Range is 0 to 65535. Default value is 6000.
+
@item default_delay
Set the default delay between frames in hundredths of seconds.
Range is 0 to 6000. Default value is 10.
diff --git a/libavformat/gifdec.c b/libavformat/gifdec.c
index 7db5a27..9f5faad 100644
--- a/libavformat/gifdec.c
+++ b/libavformat/gifdec.c
@@ -43,6 +43,7 @@ typedef struct GIFDemuxContext {
* invalid and set to value of default_delay.
*/
int min_delay;
+ int max_delay;
int default_delay;
/**
@@ -159,6 +160,7 @@ static int gif_read_ext(AVFormatContext *s)
if (gdc->delay < gdc->min_delay)
gdc->delay = gdc->default_delay;
+ gdc->delay = FFMIN(gdc->delay, gdc->max_delay);
/* skip the rest of the Graphic Control Extension block */
if ((ret = avio_skip(pb, sb_size - 3)) < 0 )
@@ -309,6 +311,7 @@ resync:
static const AVOption options[] = {
{ "min_delay" , "minimum valid delay between frames (in hundredths of second)", offsetof(GIFDemuxContext, min_delay) , AV_OPT_TYPE_INT, {.i64 = GIF_MIN_DELAY} , 0, 100 * 60, AV_OPT_FLAG_DECODING_PARAM },
+ { "max_gif_delay", "maximum valid delay between frames (in hundredths of seconds)", offsetof(GIFDemuxContext, max_delay) , AV_OPT_TYPE_INT, {.i64 = 6000} , 0, 65535 , AV_OPT_FLAG_DECODING_PARAM },
{ "default_delay", "default delay between frames (in hundredths of second)" , offsetof(GIFDemuxContext, default_delay), AV_OPT_TYPE_INT, {.i64 = GIF_DEFAULT_DELAY}, 0, 100 * 60, AV_OPT_FLAG_DECODING_PARAM },
{ "ignore_loop" , "ignore loop setting (netscape extension)" , offsetof(GIFDemuxContext, ignore_loop) , AV_OPT_TYPE_INT, {.i64 = 1} , 0, 1, AV_OPT_FLAG_DECODING_PARAM },
{ NULL },
More information about the ffmpeg-devel
mailing list