summaryrefslogtreecommitdiff
path: root/libavformat/gif.c
diff options
context:
space:
mode:
authorClément Bœsch <ubitux@gmail.com>2013-04-20 00:11:04 +0200
committerClément Bœsch <ubitux@gmail.com>2013-04-20 00:11:04 +0200
commit67cc31d6c74be37ba17262d29afb7a92ee4f3642 (patch)
tree46591e54a28cefa5befa60d2758496e0fc7c6484 /libavformat/gif.c
parenta16c20569db6cecceb988b5b6ecac451af84e15d (diff)
lavf/gif: add final_delay option.
Diffstat (limited to 'libavformat/gif.c')
-rw-r--r--libavformat/gif.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/libavformat/gif.c b/libavformat/gif.c
index 594eb6b1d7..d459bd6032 100644
--- a/libavformat/gif.c
+++ b/libavformat/gif.c
@@ -68,6 +68,7 @@ static int gif_image_write_header(AVIOContext *pb, int width, int height,
typedef struct {
AVClass *class; /** Class for private options. */
int loop;
+ int last_delay;
AVPacket *prev_pkt;
int duration;
} GIFContext;
@@ -139,6 +140,8 @@ static int flush_packet(AVFormatContext *s, AVPacket *new)
if (new && new->pts != AV_NOPTS_VALUE)
gif->duration = av_clip_uint16(new->pts - gif->prev_pkt->pts);
+ else if (!new && gif->last_delay >= 0)
+ gif->duration = gif->last_delay;
/* graphic control extension block */
avio_w8(pb, 0x21);
@@ -188,6 +191,8 @@ static int gif_write_trailer(AVFormatContext *s)
static const AVOption options[] = {
{ "loop", "Number of times to loop the output.", OFFSET(loop),
AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 65535, ENC },
+ { "final_delay", "Force delay (in ms) after the last frame", OFFSET(last_delay),
+ AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 65535, ENC },
{ NULL },
};