[FFmpeg-devel] [PATCH]lavf/gdv: Improve palette saturation
Ronald S. Bultje
rsbultje at gmail.com
Thu Sep 7 16:32:08 EEST 2017
Hi Carl,
On Mon, Aug 28, 2017 at 10:49 AM, Carl Eugen Hoyos <ceffmpeg at gmail.com>
wrote:
> 2017-08-27 9:03 GMT+02:00 Paul B Mahol <onemda at gmail.com>:
> > On 8/26/17, Carl Eugen Hoyos <ceffmpeg at gmail.com> wrote:
>
> >> Attached patch slightly improves the saturation of the
> >> gdv palette.
> >>
> >> Please comment, Carl Eugen
> >
> > Does this match how it is displayed by original game?
>
> The original game was written for a graphic adapter that
> supports 6bit palette. FFmpeg only supports 8bit palette,
>
OK, so that matches the current code:
unsigned r = bytestream2_get_byte(gb);
unsigned g = bytestream2_get_byte(gb);
unsigned b = bytestream2_get_byte(gb);
gdv->pal[i] = 0xFFU << 24 | r << 18 | g << 10 | b << 2;
This indeed suggests the byte only contains 6 lower bits, the upper 2 being
0. It also indeed suggests that "white" (111111) would be converted to (in
bits) 11111100, not 11111111, which is indeed unsaturated.
> the patch makes the colour white (and all saturated colours)
> as similar to the intended output as possible and does not
> change black (and other colours with little intensity).
So let's say you have (in bits) 111111 or 000000 (white and black).
unsigned r = bytestream2_get_byte(gb);
unsigned g = bytestream2_get_byte(gb);
unsigned b = bytestream2_get_byte(gb);
+ r |= r >> 4;
+ g |= g >> 4;
+ b |= b >> 4;
This converts that to 111111 and 000000.
gdv->pal[i] = 0xFFU << 24 | r << 18 | g << 10 | b << 2;
And it seems to me that the color is then _still_ 11111100, which is
unsaturated. Don't you want to do something like:
#define convert6to8(x) ((x << 2) | ((x + 8) >> 4))
unsigned r = bytestream2_get_byte(gb);
unsigned g = bytestream2_get_byte(gb);
unsigned b = bytestream2_get_byte(gb);
+ r = convert6to8(r);
+ g = convert6to8(g);
+ b = convert6to8(b);
gdv->pal[i] = (0xFFU << 24) | (r << 16) | (g << 8) | b;
Or am I misunderstanding?
Ronald
More information about the ffmpeg-devel
mailing list