1
0
mirror of https://github.com/mpv-player/mpv synced 2025-03-25 04:38:01 +00:00

Convert vobsub custom colors from rgb to yuv using a common function.

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@25326 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
ulion 2007-12-09 06:58:57 +00:00
parent 486e5b2c2b
commit 6e9b19642a
2 changed files with 16 additions and 9 deletions

View File

@ -356,13 +356,15 @@ vobsub_parse_custom_colors (sh_sub_t *sh, const char *start)
use_custom_colors ? "ON" : "OFF");
if ((start = strstr(start, "colors:")) != NULL)
{
unsigned int tmp;
start += 7;
while (isspace(*start))
start++;
for (i = 0; i < 4; i++)
{
if (sscanf(start, "%06x", &sh->colors[i]) != 1)
if (sscanf(start, "%06x", &tmp) != 1)
break;
sh->colors[i] = vobsub_rgb_to_yuv(tmp);
start += 6;
while ((*start == ',') || isspace(*start))
start++;

View File

@ -817,6 +817,18 @@ unsigned int vobsub_palette_to_yuv(unsigned int pal)
return y << 16 | u << 8 | v;
}
unsigned int vobsub_rgb_to_yuv(unsigned int rgb)
{
int r, g, b, y, u, v;
r = rgb >> 16 & 0xff;
g = rgb >> 8 & 0xff;
b = rgb & 0xff;
y = ( 0.299 * r + 0.587 * g + 0.114 * b) * 219 / 255 + 16.5;
u = (-0.16874 * r - 0.33126 * g + 0.5 * b) * 224 / 255 + 128.5;
v = ( 0.5 * r - 0.41869 * g - 0.08131 * b) * 224 / 255 + 128.5;
return y << 16 | u << 8 | v;
}
static int
vobsub_parse_palette(vobsub_t *vob, const char *line)
{
@ -863,7 +875,6 @@ vobsub_parse_cuspal(vobsub_t *vob, const char *line)
{
//colors: XXXXXX, XXXXXX, XXXXXX, XXXXXX
unsigned int n, tmp;
int r, g, b, y, u, v;
n = 0;
line += 40;
while(1){
@ -876,13 +887,7 @@ vobsub_parse_cuspal(vobsub_t *vob, const char *line)
if (p - line !=6)
return -1;
tmp = strtoul(line, NULL, 16);
r = tmp >> 16 & 0xff;
g = tmp >> 8 & 0xff;
b = tmp & 0xff;
y = av_clip_uint8( 0.1494 * r + 0.6061 * g + 0.2445 * b);
u = av_clip_uint8( 0.6066 * r - 0.4322 * g - 0.1744 * b + 128);
v = av_clip_uint8(-0.08435 * r - 0.3422 * g + 0.4266 * b + 128);
vob->cuspal[n++] = y << 16 | u << 8 | v;
vob->cuspal[n++] = vobsub_rgb_to_yuv(tmp);
if (n==4)
break;
if(*p == ',')