diff options
author | Paul B Mahol <onemda@gmail.com> | 2016-09-02 22:40:34 +0200 |
---|---|---|
committer | Paul B Mahol <onemda@gmail.com> | 2016-09-07 15:56:13 +0200 |
commit | b7e78c75cc254bebf880129ed3d9e57ec014fdd3 (patch) | |
tree | 0c211a9048744d10b1a115ffaca26496afe7765a /libavfilter | |
parent | 93ae68d62a88f33723a5731b54d893a7d6d8f0b8 (diff) | |
download | ffmpeg-b7e78c75cc254bebf880129ed3d9e57ec014fdd3.tar.gz |
avfilter/vf_paletteuse: add option to use new palette for each output frame
Diffstat (limited to 'libavfilter')
-rw-r--r-- | libavfilter/vf_paletteuse.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/libavfilter/vf_paletteuse.c b/libavfilter/vf_paletteuse.c index dece05a0f8..e063ff7386 100644 --- a/libavfilter/vf_paletteuse.c +++ b/libavfilter/vf_paletteuse.c @@ -86,6 +86,7 @@ typedef struct PaletteUseContext { uint32_t palette[AVPALETTE_COUNT]; int palette_loaded; int dither; + int new; set_frame_func set_frame; int bayer_scale; int ordered_dither[8*8]; @@ -122,6 +123,7 @@ static const AVOption paletteuse_options[] = { { "bruteforce", "brute-force into the palette", 0, AV_OPT_TYPE_CONST, {.i64=COLOR_SEARCH_BRUTEFORCE}, INT_MIN, INT_MAX, FLAGS, "search" }, { "mean_err", "compute and print mean error", OFFSET(calc_mean_err), AV_OPT_TYPE_BOOL, {.i64=0}, 0, 1, FLAGS }, { "debug_accuracy", "test color search accuracy", OFFSET(debug_accuracy), AV_OPT_TYPE_BOOL, {.i64=0}, 0, 1, FLAGS }, + { "new", "take new palette for each output frame", OFFSET(new), AV_OPT_TYPE_BOOL, {.i64=0}, 0, 1, FLAGS }, { NULL } }; @@ -928,6 +930,14 @@ static void load_palette(PaletteUseContext *s, const AVFrame *palette_frame) const uint32_t *p = (const uint32_t *)palette_frame->data[0]; const int p_linesize = palette_frame->linesize[0] >> 2; + if (s->new) { + memset(s->palette, 0, sizeof(s->palette)); + memset(s->map, 0, sizeof(s->map)); + for (i = 0; i < CACHE_SIZE; i++) + av_freep(&s->cache[i].entries); + memset(s->cache, 0, sizeof(s->cache)); + } + i = 0; for (y = 0; y < palette_frame->height; y++) { for (x = 0; x < palette_frame->width; x++) @@ -937,7 +947,8 @@ static void load_palette(PaletteUseContext *s, const AVFrame *palette_frame) load_colormap(s); - s->palette_loaded = 1; + if (!s->new) + s->palette_loaded = 1; } static AVFrame *load_apply_palette(AVFilterContext *ctx, AVFrame *main, |