[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