Index: libmpdemux/demux_mkv.c =================================================================== --- libmpdemux/demux_mkv.c (revision 25290) +++ libmpdemux/demux_mkv.c (working copy) @@ -29,6 +29,7 @@ #include "libass/ass_mp.h" #include "libavutil/common.h" +#include "libavutil/colorspace.h" #ifdef USE_QTX_CODECS #include "loader/qtx/qtxsdk/components.h" @@ -347,7 +348,7 @@ static int vobsub_parse_custom_colors (sh_sub_t *sh, const char *start) { - int use_custom_colors, i; + int use_custom_colors, i, r, g, b, y, u, v, tmp; use_custom_colors = 0; start += 14; @@ -366,8 +367,15 @@ start++; for (i = 0; i < 4; i++) { - if (sscanf(start, "%06x", &sh->colors[i]) != 1) + if (sscanf(start, "%06x", &tmp) != 1) break; + r = tmp >> 16 & 0xff; + g = tmp >> 8 & 0xff; + b = tmp & 0xff; + y = RGB_TO_Y_CCIR(r, g, b); + u = RGB_TO_U_CCIR(r, g, b, 0); + v = RGB_TO_V_CCIR(r, g, b, 0); + sh->colors[i] = y << 16 | u << 8 | v; start += 6; while ((*start == ',') || isspace(*start)) start++; Index: vobsub.c =================================================================== --- vobsub.c (revision 25290) +++ vobsub.c (working copy) @@ -24,6 +24,7 @@ #include "unrarlib.h" #endif #include "libavutil/common.h" +#include "libavcodec/colorspace.h" extern int vobsub_id; // Record the original -vobsubid set by commandline, since vobsub_id will be @@ -870,9 +871,9 @@ 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); + y = RGB_TO_Y_CCIR(r, g, b); + u = RGB_TO_U_CCIR(r, g, b, 0); + v = RGB_TO_V_CCIR(r, g, b, 0); vob->cuspal[n++] = y << 16 | u << 8 | v; if (n==4) break;