[FFmpeg-cvslog] lavc/gif: make possible to disable offsetting.

Clément Bœsch git at videolan.org
Sat Apr 20 00:39:37 CEST 2013


ffmpeg | branch: master | Clément Bœsch <ubitux at gmail.com> | Fri Apr 19 23:36:55 2013 +0200| [0f1250b7e52fc41abf4f050b41467639cb9fd7a3] | committer: Clément Bœsch

lavc/gif: make possible to disable offsetting.

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

 libavcodec/gif.c |   25 ++++++++++++++++++++++++-
 1 file changed, 24 insertions(+), 1 deletion(-)

diff --git a/libavcodec/gif.c b/libavcodec/gif.c
index 0df302e..c17a23f 100644
--- a/libavcodec/gif.c
+++ b/libavcodec/gif.c
@@ -28,6 +28,7 @@
  * @see http://www.w3.org/Graphics/GIF/spec-gif89a.txt
  */
 
+#include "libavutil/opt.h"
 #include "avcodec.h"
 #include "bytestream.h"
 #include "internal.h"
@@ -40,12 +41,18 @@
 #include "put_bits.h"
 
 typedef struct {
+    const AVClass *class;
     AVFrame picture;
     LZWState *lzw;
     uint8_t *buf;
     AVFrame *last_frame;
+    int flags;
 } GIFContext;
 
+enum {
+    GF_OFFSETTING = 1<<0,
+};
+
 static int gif_image_write_image(AVCodecContext *avctx,
                                  uint8_t **bytestream, uint8_t *end,
                                  const uint32_t *palette,
@@ -58,7 +65,7 @@ static int gif_image_write_image(AVCodecContext *avctx,
 
     /* Crop image */
     // TODO support with palette change
-    if (s->last_frame && !palette) {
+    if ((s->flags & GF_OFFSETTING) && s->last_frame && !palette) {
         const uint8_t *ref = s->last_frame->data[0];
         const int ref_linesize = s->last_frame->linesize[0];
         int x_end = avctx->width  - 1,
@@ -224,6 +231,21 @@ static int gif_encode_close(AVCodecContext *avctx)
     return 0;
 }
 
+#define OFFSET(x) offsetof(GIFContext, x)
+#define FLAGS AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
+static const AVOption gif_options[] = {
+    { "gifflags", "set GIF flags", OFFSET(flags), AV_OPT_TYPE_FLAGS, {.i64 = GF_OFFSETTING}, 0, INT_MAX, FLAGS, "flags" },
+        { "offsetting", "enable picture offsetting", 0, AV_OPT_TYPE_CONST, {.i64=GF_OFFSETTING}, INT_MIN, INT_MAX, FLAGS, "flags" },
+    { NULL }
+};
+
+static const AVClass gif_class = {
+    .class_name = "GIF encoder",
+    .item_name  = av_default_item_name,
+    .option     = gif_options,
+    .version    = LIBAVUTIL_VERSION_INT,
+};
+
 AVCodec ff_gif_encoder = {
     .name           = "gif",
     .type           = AVMEDIA_TYPE_VIDEO,
@@ -237,4 +259,5 @@ AVCodec ff_gif_encoder = {
         AV_PIX_FMT_GRAY8, AV_PIX_FMT_PAL8, AV_PIX_FMT_NONE
     },
     .long_name      = NULL_IF_CONFIG_SMALL("GIF (Graphics Interchange Format)"),
+    .priv_class     = &gif_class,
 };



More information about the ffmpeg-cvslog mailing list