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

Tomas Härdin tjoppen at acc.umu.se
Tue Feb 19 22:39:33 EET 2019


sön 2019-02-17 klockan 23:22 +0100 skrev Tomas Härdin:
> 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

Pushed

/Tomas


More information about the ffmpeg-devel mailing list