[FFmpeg-devel] [PATCH] palettegen: Fill with last color, not black

Tomas Härdin tjoppen at acc.umu.se
Mon Feb 18 00:22:23 EET 2019


tor 2019-01-17 klockan 11:14 +0100 skrev Michael Niedermayer:
> On Thu, Jan 17, 2019 at 09:44:47AM +0100, Clément Bœsch wrote:
> > On Wed, Jan 16, 2019 at 01:40:20PM +0100, Tomas Härdin wrote:
> > > Hi
> > > 
> > > I was helping the fine folks at peppercarrot.com with web video
> > > nonsense, and I notice palettegen outputs more colors than it
> > > should
> > > due to padding the generated palette with pure black.
> > > 
> > > Compare this (ffmpeg version 3.2.12-1~deb9u1):
> > > http://www.härdin.se/files/peppercarrot_gif/output-blackspecks-64
> > > .gif
> > > with this (282a471 with this patch applied):
> > > http://www.härdin.se/files/peppercarrot_gif/output-fixed-64.gif
> > > 
> > > The attached patch fixes this by padding with the last color
> > > instead of
> > > black.
> > > 
> > > /Tomas
> > > From 3a01f62fdcc95cc7afaf5aa6e439b8742cce43bc Mon Sep 17 00:00:00
> > > 2001
> > > From: =?UTF-8?q?Tomas=20H=C3=A4rdin?= <tjoppen at acc.umu.se>
> > > Date: Wed, 16 Jan 2019 13:07:48 +0100
> > > Subject: [PATCH] palettegen: Fill with last color, not black
> > > 
> > > If we fill with black then the generated palette will have one
> > > color more
> > > than what the user requested. This also resulted in unwanted
> > > black specks in
> > > the output of paletteuse, especially when generating small
> > > palettes.
> > > ---
> > >  libavfilter/vf_palettegen.c | 2 +-
> > >  1 file changed, 1 insertion(+), 1 deletion(-)
> > > 
> > > diff --git a/libavfilter/vf_palettegen.c
> > > b/libavfilter/vf_palettegen.c
> > > index 5ff73e6b2b..44323782d2 100644
> > > --- a/libavfilter/vf_palettegen.c
> > > +++ b/libavfilter/vf_palettegen.c
> > > @@ -245,7 +245,7 @@ static void write_palette(AVFilterContext
> > > *ctx, AVFrame *out)
> > >                      av_log(ctx, AV_LOG_WARNING, "Dupped color:
> > > %08"PRIX32"\n", pal[x]);
> > >                  last_color = pal[x];
> > >              } else {
> > > -                pal[x] = 0xff000000; // pad with black
> > > +                pal[x] = last_color; // pad with last color
> > >              }
> > >          }
> > >          pal += pal_linesize;
> > 
> > Code LGTM, thanks
> > 
> > No FATE change?
> 
> --- ./tests/ref/fate/filter-palettegen-2	2019-01-15
> 01:24:17.530911114 +0100
> +++ tests/data/fate/filter-palettegen-2	2019-01-17
> 11:13:21.077198948 +0100
> @@ -3,4 +3,4 @@
>  #codec_id 0: rawvideo
>  #dimensions 0: 16x16
>  #sar 0: 1/1
> -0,          0,          0,        1,     1024, 0x906ff5aa
> +0,          0,          0,        1,     1024, 0x23e072c8
> Test filter-palettegen-2 failed. Look at tests/data/fate/filter-
> palettegen-2.err for details.
> make: *** [fate-filter-palettegen-2] Error 1

Finally got around to fixing this. Updated patch attached, passes FATE
for me. I'll push in a day or two

/Tomas
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-palettegen-Fill-with-last-color-not-black.patch
Type: text/x-patch
Size: 1577 bytes
Desc: not available
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20190217/968114e5/attachment.bin>


More information about the ffmpeg-devel mailing list