aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEugene Dzhurinsky <jdevelop@gmail.com>2013-07-05 20:27:56 -0400
committerMichael Niedermayer <michaelni@gmx.at>2013-07-10 01:18:59 +0200
commit09f59d6adfa19d1ad5049416c1d0fbc996f509fd (patch)
tree6d3bac3e60f2efd6e2c6c0c61064c2bfbf1c31fd
parent9e214900ad3133d764893b42de7a1558d38c870c (diff)
downloadffmpeg-09f59d6adfa19d1ad5049416c1d0fbc996f509fd.tar.gz
avformat/gif: Do not write GIF89a header if loop is set to -1.
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r--libavformat/gif.c25
1 files changed, 14 insertions, 11 deletions
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 },