You've already forked FFmpeg
							
							
				mirror of
				https://github.com/FFmpeg/FFmpeg.git
				synced 2025-10-30 23:18:11 +02:00 
			
		
		
		
	avfilter/vf_paletteuse: add option to use new palette for each output frame
This commit is contained in:
		| @@ -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, | ||||
|   | ||||
		Reference in New Issue
	
	Block a user