From 09f59d6adfa19d1ad5049416c1d0fbc996f509fd Mon Sep 17 00:00:00 2001 From: Eugene Dzhurinsky Date: Fri, 5 Jul 2013 20:27:56 -0400 Subject: avformat/gif: Do not write GIF89a header if loop is set to -1. Signed-off-by: Michael Niedermayer --- libavformat/gif.c | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) (limited to 'libavformat/gif.c') diff --git a/libavformat/gif.c b/libavformat/gif.c index 4189850fed..f6e76254da 100644 --- a/libavformat/gif.c +++ b/libavformat/gif.c @@ -52,15 +52,18 @@ static int gif_image_write_header(AVIOContext *pb, int width, int height, avio_w8(pb, 0); /* aspect ratio */ } - /* "NETSCAPE EXTENSION" for looped animation GIF */ - avio_w8(pb, 0x21); /* GIF Extension code */ - avio_w8(pb, 0xff); /* Application Extension Label */ - avio_w8(pb, 0x0b); /* Length of Application Block */ - avio_write(pb, "NETSCAPE2.0", sizeof("NETSCAPE2.0") - 1); - avio_w8(pb, 0x03); /* Length of Data Sub-Block */ - avio_w8(pb, 0x01); - avio_wl16(pb, (uint16_t)loop_count); - avio_w8(pb, 0x00); /* Data Sub-block Terminator */ + + if (loop_count >= 0 ) { + /* "NETSCAPE EXTENSION" for looped animation GIF */ + avio_w8(pb, 0x21); /* GIF Extension code */ + avio_w8(pb, 0xff); /* Application Extension Label */ + avio_w8(pb, 0x0b); /* Length of Application Block */ + avio_write(pb, "NETSCAPE2.0", sizeof("NETSCAPE2.0") - 1); + avio_w8(pb, 0x03); /* Length of Data Sub-Block */ + avio_w8(pb, 0x01); + avio_wl16(pb, (uint16_t)loop_count); + avio_w8(pb, 0x00); /* Data Sub-block Terminator */ + } return 0; } @@ -189,8 +192,8 @@ static int gif_write_trailer(AVFormatContext *s) #define OFFSET(x) offsetof(GIFContext, x) #define ENC AV_OPT_FLAG_ENCODING_PARAM static const AVOption options[] = { - { "loop", "Number of times to loop the output.", OFFSET(loop), - AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 65535, ENC }, + { "loop", "Number of times to loop the output: -1 - no loop, 0 - infinite loop", OFFSET(loop), + AV_OPT_TYPE_INT, { .i64 = 0 }, -1, 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 }, -- cgit v1.2.3