diff options
author | Darren Salt <linux@youmustbejoking.demon.co.uk> | 2012-02-15 00:52:08 +0000 |
---|---|---|
committer | Darren Salt <linux@youmustbejoking.demon.co.uk> | 2012-02-15 00:52:08 +0000 |
commit | 82ffe8cb63a7551346c0e655714e24b54a696f1e (patch) | |
tree | 13ca9824d2208f16e41f5295093e840522a527b9 /src | |
parent | c7b56e4119bc8870fc4f35ac38159414cfe54ff1 (diff) | |
parent | 061c58a5d30290c29f25044cbe9bdcf00364f333 (diff) | |
download | xine-lib-82ffe8cb63a7551346c0e655714e24b54a696f1e.tar.gz xine-lib-82ffe8cb63a7551346c0e655714e24b54a696f1e.tar.bz2 |
Merge from 1.1.
--HG--
rename : src/xine-utils/xineutils.h => include/xine/xineutils.h
Diffstat (limited to 'src')
-rw-r--r-- | src/xine-utils/color.c | 62 |
1 files changed, 28 insertions, 34 deletions
diff --git a/src/xine-utils/color.c b/src/xine-utils/color.c index b9b007c7a..adfd953c2 100644 --- a/src/xine-utils/color.c +++ b/src/xine-utils/color.c @@ -67,52 +67,46 @@ /* * In search of the perfect colorspace conversion formulae... - * These are the conversion equations that xine currently uses: + * These are the conversion equations that xine currently uses + * (before normalisation): * * Y = 0.29900 * R + 0.58700 * G + 0.11400 * B * U = -0.16874 * R - 0.33126 * G + 0.50000 * B + 128 * V = 0.50000 * R - 0.41869 * G - 0.08131 * B + 128 - * - * Feel free to experiment with different coefficients by altering the - * next 9 defines. */ -/* convert full range rgb to mpeg range yuv */ -#if 0 +/* +#define Y_R (SCALEFACTOR * 0.29900 * 219.0 / 255.0) +#define Y_G (SCALEFACTOR * 0.58700 * 219.0 / 255.0) +#define Y_B (SCALEFACTOR * 0.11400 * 219.0 / 255.0) -#define Y_R (SCALEFACTOR * 0.29900) -#define Y_G (SCALEFACTOR * 0.58700) -#define Y_B (SCALEFACTOR * 0.11400) +#define U_R (SCALEFACTOR * -0.16874 * 224.0 / 255.0) +#define U_G (SCALEFACTOR * -0.33126 * 224.0 / 255.0) +#define U_B (SCALEFACTOR * 0.50000 * 224.0 / 255.0) -#define U_R (SCALEFACTOR * -0.16874) -#define U_G (SCALEFACTOR * -0.33126) -#define U_B (SCALEFACTOR * 0.50000) +#define V_R (SCALEFACTOR * 0.50000 * 224.0 / 255.0) +#define V_G (SCALEFACTOR * -0.41869 * 224.0 / 255.0) +#define V_B (SCALEFACTOR * -0.08131 * 224.0 / 255.0) +*/ -#define V_R (SCALEFACTOR * 0.50000) -#define V_G (SCALEFACTOR * -0.41869) -#define V_B (SCALEFACTOR * -0.08131) +#define Y_R (SCALEFACTOR * 0.299 * 219.0 / 255.0) +#define Y_G (SCALEFACTOR * 0.587 * 219.0 / 255.0) +#define Y_B (SCALEFACTOR * 0.114 * 219.0 / 255.0) -#else +#define U_R (SCALEFACTOR * -0.299 / 1.772 * 224.0 / 255.0) +#define U_G (SCALEFACTOR * -0.587 / 1.772 * 224.0 / 255.0) +#define U_B (SCALEFACTOR * 0.886 / 1.772 * 224.0 / 255.0) + +#define V_R (SCALEFACTOR * 0.701 / 1.402 * 224.0 / 255.0) +#define V_G (SCALEFACTOR * -0.587 / 1.402 * 224.0 / 255.0) +#define V_B (SCALEFACTOR * -0.114 / 1.402 * 224.0 / 255.0) /* - * Here is another promising set of coefficients. If you use these, you - * must also add 16 to the Y calculation in the COMPUTE_Y macro found - * in xineutils.h. + * With the normalisation factors above, Y needs 16 added. + * This is done during setup, not in the macros in xineutils.h, because + * doing it there would be an API change. */ - -#define Y_R (SCALEFACTOR * 0.257) -#define Y_G (SCALEFACTOR * 0.504) -#define Y_B (SCALEFACTOR * 0.098) - -#define U_R (SCALEFACTOR * -0.148) -#define U_G (SCALEFACTOR * -0.291) -#define U_B (SCALEFACTOR * 0.439) - -#define V_R (SCALEFACTOR * 0.439) -#define V_G (SCALEFACTOR * -0.368) -#define V_B (SCALEFACTOR * -0.071) - -#endif +#define Y_MOD (16 * SCALEFACTOR) /* * Precalculate all of the YUV tables since it requires fewer than @@ -1319,7 +1313,7 @@ void init_yuv_conversion(void) { /* initialize the RGB -> YUV tables */ for (i = 0; i < 256; i++) { - y_r_table[i] = Y_R * i; + y_r_table[i] = Y_R * i + Y_MOD; y_g_table[i] = Y_G * i; y_b_table[i] = Y_B * i; |