summaryrefslogtreecommitdiff
path: root/libavcodec/gif.c
diff options
context:
space:
mode:
authorClément Bœsch <ubitux@gmail.com>2013-04-19 23:36:55 +0200
committerClément Bœsch <ubitux@gmail.com>2013-04-19 23:59:21 +0200
commit0f1250b7e52fc41abf4f050b41467639cb9fd7a3 (patch)
treed1017d0d670b50b3a95a2309bb461bf06190f0d8 /libavcodec/gif.c
parent8f116bf71b2349bc3a8de08ef25c2b74f972db26 (diff)
lavc/gif: make possible to disable offsetting.
Diffstat (limited to 'libavcodec/gif.c')
-rw-r--r--libavcodec/gif.c25
1 files changed, 24 insertions, 1 deletions
diff --git a/libavcodec/gif.c b/libavcodec/gif.c
index 0df302e65a..c17a23f920 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,
};