MS Matrix to convert between YCbCr and RGB

// r, g, b, y, u, v are [0, 255]
// Cb = u
// Cr = v
#define MS_YUV4442RGB( y, u, v, r, g, b )                                                        /
    I_MACRO_BEGIN                                                                                /
    (r) = (298 * ((y) - 16) + 409 * ((v) - 128) + 128) >> 8;                                    /
    (g) = (298 * ((y) - 16) - 100 * ((u) - 128)  - 208 * ((v) - 128) + 128) >> 8;                /
    (b) = (298 * ((y) - 16) + 516 * ((u) - 128) + 128) >> 8;                                    /
    CLIP( r, 0, 255 );                                                                            /
    CLIP( g, 0, 255 );                                                                            /
    CLIP( b, 0, 255 );                                                                            /
    I_MACRO_END

// r, g, b, y, u, v are [0, 255]
// Cb = u
// Cr = v
#define MS_RGB2YUV444( r, g, b, y, u, v )                                                        /
    I_MACRO_BEGIN                                                                                /
    (y) = ((  66 * (r) + 129 * (g) +  25 * (b) + 128) >> 8) + 16;                                /
    (u) = (( -38 * (r) -  74 * (g) + 112 * (b) + 128) >> 8) + 128;                                /
    (v) = (( 112 * (r) -  94 * (g) -  18 * (b) + 128) >> 8) + 128;                                /
    I_MACRO_END

你可能感兴趣的:(MS Matrix to convert between YCbCr and RGB)