summaryrefslogtreecommitdiffstats
path: root/vobsub.c
diff options
context:
space:
mode:
authorulion <ulion@b3059339-0415-0410-9bf9-f77b7e298cf2>2007-12-09 06:58:57 +0000
committerulion <ulion@b3059339-0415-0410-9bf9-f77b7e298cf2>2007-12-09 06:58:57 +0000
commit6e9b19642ac094dd9f927d2e95b2e6a4b039366a (patch)
tree2ffa5b976dd9c018f7504cb0a875f3ed1e64ae39 /vobsub.c
parent486e5b2c2be6ec9e56072284176a86d09f46fdef (diff)
downloadmpv-6e9b19642ac094dd9f927d2e95b2e6a4b039366a.tar.bz2
mpv-6e9b19642ac094dd9f927d2e95b2e6a4b039366a.tar.xz
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
Diffstat (limited to 'vobsub.c')
-rw-r--r--vobsub.c21
1 files changed, 13 insertions, 8 deletions
diff --git a/vobsub.c b/vobsub.c
index 7a67b4ba6e..d76f744d79 100644
--- a/vobsub.c
+++ b/vobsub.c
@@ -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 == ',')