[FFmpeg-cvslog] gif: add loop private option.

Anton Khirnov git at videolan.org
Sat Jul 9 02:09:51 CEST 2011


ffmpeg | branch: master | Anton Khirnov <anton at khirnov.net> | Sat Jun 18 09:47:46 2011 +0200| [d31e3f7ccc5d1e198b3a582f4413ce7342928d8c] | committer: Anton Khirnov

gif: add loop private option.

Deprecate AVFormatContext.loop_output.

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=d31e3f7ccc5d1e198b3a582f4413ce7342928d8c
---

 libavformat/avformat.h |    6 +++++-
 libavformat/gif.c      |   29 ++++++++++++++++++++++++++---
 libavformat/version.h  |    3 +++
 3 files changed, 34 insertions(+), 4 deletions(-)

diff --git a/libavformat/avformat.h b/libavformat/avformat.h
index 1be9f39..2cdf11b 100644
--- a/libavformat/avformat.h
+++ b/libavformat/avformat.h
@@ -723,12 +723,16 @@ typedef struct AVFormatContext {
     int preload;
     int max_delay;
 
+#if FF_API_LOOP_OUTPUT
 #define AVFMT_NOOUTPUTLOOP -1
 #define AVFMT_INFINITEOUTPUTLOOP 0
     /**
      * number of times to loop output in formats that support it
+     *
+     * @deprecated use the 'loop' private option in the gif muxer.
      */
-    int loop_output;
+    attribute_deprecated int loop_output;
+#endif
 
     int flags;
 #define AVFMT_FLAG_GENPTS       0x0001 ///< Generate missing pts even if it requires parsing future frames.
diff --git a/libavformat/gif.c b/libavformat/gif.c
index 55deb4d..cf87857 100644
--- a/libavformat/gif.c
+++ b/libavformat/gif.c
@@ -40,6 +40,8 @@
  */
 
 #include "avformat.h"
+#include "libavutil/log.h"
+#include "libavutil/opt.h"
 
 /* The GIF format uses reversed order for bitstreams... */
 /* at least they don't use PDP_ENDIAN :) */
@@ -245,8 +247,10 @@ static int gif_image_write_image(AVIOContext *pb,
 }
 
 typedef struct {
+    AVClass *class;         /** Class for private options. */
     int64_t time, file_time;
     uint8_t buffer[100]; /* data chunks */
+    int loop;
 } GIFContext;
 
 static int gif_write_header(AVFormatContext *s)
@@ -254,7 +258,7 @@ static int gif_write_header(AVFormatContext *s)
     GIFContext *gif = s->priv_data;
     AVIOContext *pb = s->pb;
     AVCodecContext *enc, *video_enc;
-    int i, width, height, loop_count /*, rate*/;
+    int i, width, height /*, rate*/;
 
 /* XXX: do we reject audio streams or just ignore them ?
     if(s->nb_streams > 1)
@@ -276,7 +280,6 @@ static int gif_write_header(AVFormatContext *s)
     } else {
         width = video_enc->width;
         height = video_enc->height;
-        loop_count = s->loop_output;
 //        rate = video_enc->time_base.den;
     }
 
@@ -285,7 +288,12 @@ static int gif_write_header(AVFormatContext *s)
         return AVERROR(EIO);
     }
 
-    gif_image_write_header(pb, width, height, loop_count, NULL);
+#if FF_API_LOOP_OUTPUT
+    if (s->loop_output)
+        gif->loop = s->loop_output;
+#endif
+
+    gif_image_write_header(pb, width, height, gif->loop, NULL);
 
     avio_flush(s->pb);
     return 0;
@@ -340,6 +348,20 @@ static int gif_write_trailer(AVFormatContext *s)
     return 0;
 }
 
+#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), FF_OPT_TYPE_INT, {0}, 0, 65535, ENC },
+    { NULL },
+};
+
+static const AVClass gif_muxer_class = {
+    .class_name = "GIF muxer",
+    .item_name  = av_default_item_name,
+    .version    = LIBAVUTIL_VERSION_INT,
+    .option     = options,
+};
+
 AVOutputFormat ff_gif_muxer = {
     "gif",
     NULL_IF_CONFIG_SMALL("GIF Animation"),
@@ -351,4 +373,5 @@ AVOutputFormat ff_gif_muxer = {
     gif_write_header,
     gif_write_packet,
     gif_write_trailer,
+    .priv_class = &gif_muxer_class,
 };
diff --git a/libavformat/version.h b/libavformat/version.h
index 957ce52..18331fc 100644
--- a/libavformat/version.h
+++ b/libavformat/version.h
@@ -80,5 +80,8 @@
 #ifndef FF_API_LOOP_INPUT
 #define FF_API_LOOP_INPUT              (LIBAVFORMAT_VERSION_MAJOR < 54)
 #endif
+#ifndef FF_API_LOOP_OUTPUT
+#define FF_API_LOOP_OUTPUT             (LIBAVFORMAT_VERSION_MAJOR < 54)
+#endif
 
 #endif /* AVFORMAT_VERSION_H */



More information about the ffmpeg-cvslog mailing list