]> git.sesse.net Git - ffmpeg/blobdiff - libavformat/gifdec.c
tests/tiny_psnr: Make the search range extend both sides from the specified shift...
[ffmpeg] / libavformat / gifdec.c
index 7db5a27408dad097e30d4b3676c3938defc236c9..bb4c6ec6e6465b3c9cee296569c6d5c78b97d10d 100644 (file)
@@ -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 },