mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
Change guess_palette so its output matches the most common palette.
This means it uses full brightness range and brightness increasing instead of decreasing with index of non-opaque color. Based on patch by Alexandre Colucci [alexandre elgato com]
This commit is contained in:
parent
148ffcd2ce
commit
cf16104ad1
@ -120,6 +120,14 @@ static void guess_palette(uint32_t *rgba_palette,
|
||||
uint8_t *alpha,
|
||||
uint32_t subtitle_color)
|
||||
{
|
||||
static const uint8_t level_map[4][4] = {
|
||||
// this configuration (full range, lowest to highest) in tests
|
||||
// seemed most common, so assume this
|
||||
{0xff},
|
||||
{0x00, 0xff},
|
||||
{0x00, 0x80, 0xff},
|
||||
{0x00, 0x55, 0xaa, 0xff},
|
||||
};
|
||||
uint8_t color_used[16];
|
||||
int nb_opaque_colors, i, level, j, r, g, b;
|
||||
|
||||
@ -138,18 +146,18 @@ static void guess_palette(uint32_t *rgba_palette,
|
||||
if (nb_opaque_colors == 0)
|
||||
return;
|
||||
|
||||
j = nb_opaque_colors;
|
||||
j = 0;
|
||||
memset(color_used, 0, 16);
|
||||
for(i = 0; i < 4; i++) {
|
||||
if (alpha[i] != 0) {
|
||||
if (!color_used[colormap[i]]) {
|
||||
level = (0xff * j) / nb_opaque_colors;
|
||||
level = level_map[nb_opaque_colors][j];
|
||||
r = (((subtitle_color >> 16) & 0xff) * level) >> 8;
|
||||
g = (((subtitle_color >> 8) & 0xff) * level) >> 8;
|
||||
b = (((subtitle_color >> 0) & 0xff) * level) >> 8;
|
||||
rgba_palette[i] = b | (g << 8) | (r << 16) | ((alpha[i] * 17) << 24);
|
||||
color_used[colormap[i]] = (i + 1);
|
||||
j--;
|
||||
j++;
|
||||
} else {
|
||||
rgba_palette[i] = (rgba_palette[color_used[colormap[i]] - 1] & 0x00ffffff) |
|
||||
((alpha[i] * 17) << 24);
|
||||
|
Loading…
Reference in New Issue
Block a user