diff options
author | Carl Eugen Hoyos <cehoyos@ag.or.at> | 2015-03-29 05:14:48 +0200 |
---|---|---|
committer | Carl Eugen Hoyos <cehoyos@ag.or.at> | 2015-03-29 12:31:00 +0200 |
commit | 7de0fefeb5b391173fabf65e6e96bb7729b58ceb (patch) | |
tree | 81793985c4330ee855db0613db6b7f5a3a1c3754 /libavformat/gifdec.c | |
parent | 268ff17cb785c3ae94be0aca31ed8709e149b487 (diff) | |
download | ffmpeg-7de0fefeb5b391173fabf65e6e96bb7729b58ceb.tar.gz |
lavf/gif: Add an option max_gif_delay to limit the frame duration.
Allows playback for the sample from ticket #4369 in less than 18 hours.
Diffstat (limited to 'libavformat/gifdec.c')
-rw-r--r-- | libavformat/gifdec.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/libavformat/gifdec.c b/libavformat/gifdec.c index 7db5a27408..bb4c6ec6e6 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 = 65535} , 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 }, |