diff options
Diffstat (limited to 'media/base/simd/yuv_to_rgb_table.cc')
-rw-r--r-- | media/base/simd/yuv_to_rgb_table.cc | 85 |
1 files changed, 84 insertions, 1 deletions
diff --git a/media/base/simd/yuv_to_rgb_table.cc b/media/base/simd/yuv_to_rgb_table.cc index f998e85..3789969 100644 --- a/media/base/simd/yuv_to_rgb_table.cc +++ b/media/base/simd/yuv_to_rgb_table.cc @@ -6,6 +6,7 @@ extern "C" { +// Defines the R,G,B,A contributions from Y. #define RGBY(i) { \ static_cast<int16>(1.164 * 64 * (i - 16) + 0.5), \ static_cast<int16>(1.164 * 64 * (i - 16) + 0.5), \ @@ -13,6 +14,9 @@ extern "C" { 0 \ } +// Defines the R,G,B,A contributions from U. +// The contribution to A is the same for any value of U +// causing the final A value to be 255 in every conversion. #define RGBU(i) { \ static_cast<int16>(2.018 * 64 * (i - 128) + 0.5), \ static_cast<int16>(-0.391 * 64 * (i - 128) + 0.5), \ @@ -20,6 +24,7 @@ extern "C" { static_cast<int16>(256 * 64 - 1) \ } +// Defines the R,G,B,A contributions from V. #define RGBV(i) { \ 0, \ static_cast<int16>(-0.813 * 64 * (i - 128) + 0.5), \ @@ -27,7 +32,18 @@ extern "C" { 0 \ } -SIMD_ALIGNED(int16 kCoefficientsRgbY[256 * 3][4]) = { +// Used to define a set of multiplier words for each alpha level. +#define ALPHA(i) { \ + i, i, i, i \ +} + +// The following table defines the RGBA contributions +// for each component of YUVA. The Y table is first followed +// by the U, and V tables. The alpha multiplier table follows. +// These tables are aligned and kept adjacent to optimize for +// SIMD and cacheing. + +SIMD_ALIGNED(int16 kCoefficientsRgbY[256 * 4][4]) = { RGBY(0x00), RGBY(0x01), RGBY(0x02), RGBY(0x03), RGBY(0x04), RGBY(0x05), RGBY(0x06), RGBY(0x07), RGBY(0x08), RGBY(0x09), RGBY(0x0A), RGBY(0x0B), @@ -224,10 +240,77 @@ SIMD_ALIGNED(int16 kCoefficientsRgbY[256 * 3][4]) = { RGBV(0xF4), RGBV(0xF5), RGBV(0xF6), RGBV(0xF7), RGBV(0xF8), RGBV(0xF9), RGBV(0xFA), RGBV(0xFB), RGBV(0xFC), RGBV(0xFD), RGBV(0xFE), RGBV(0xFF), + + // Alpha multipliers for each alpha level. + ALPHA(0x00), ALPHA(0x01), ALPHA(0x02), ALPHA(0x03), + ALPHA(0x04), ALPHA(0x05), ALPHA(0x06), ALPHA(0x07), + ALPHA(0x08), ALPHA(0x09), ALPHA(0x0A), ALPHA(0x0B), + ALPHA(0x0C), ALPHA(0x0D), ALPHA(0x0E), ALPHA(0x0F), + ALPHA(0x10), ALPHA(0x11), ALPHA(0x12), ALPHA(0x13), + ALPHA(0x14), ALPHA(0x15), ALPHA(0x16), ALPHA(0x17), + ALPHA(0x18), ALPHA(0x19), ALPHA(0x1A), ALPHA(0x1B), + ALPHA(0x1C), ALPHA(0x1D), ALPHA(0x1E), ALPHA(0x1F), + ALPHA(0x20), ALPHA(0x21), ALPHA(0x22), ALPHA(0x23), + ALPHA(0x24), ALPHA(0x25), ALPHA(0x26), ALPHA(0x27), + ALPHA(0x28), ALPHA(0x29), ALPHA(0x2A), ALPHA(0x2B), + ALPHA(0x2C), ALPHA(0x2D), ALPHA(0x2E), ALPHA(0x2F), + ALPHA(0x30), ALPHA(0x31), ALPHA(0x32), ALPHA(0x33), + ALPHA(0x34), ALPHA(0x35), ALPHA(0x36), ALPHA(0x37), + ALPHA(0x38), ALPHA(0x39), ALPHA(0x3A), ALPHA(0x3B), + ALPHA(0x3C), ALPHA(0x3D), ALPHA(0x3E), ALPHA(0x3F), + ALPHA(0x40), ALPHA(0x41), ALPHA(0x42), ALPHA(0x43), + ALPHA(0x44), ALPHA(0x45), ALPHA(0x46), ALPHA(0x47), + ALPHA(0x48), ALPHA(0x49), ALPHA(0x4A), ALPHA(0x4B), + ALPHA(0x4C), ALPHA(0x4D), ALPHA(0x4E), ALPHA(0x4F), + ALPHA(0x50), ALPHA(0x51), ALPHA(0x52), ALPHA(0x53), + ALPHA(0x54), ALPHA(0x55), ALPHA(0x56), ALPHA(0x57), + ALPHA(0x58), ALPHA(0x59), ALPHA(0x5A), ALPHA(0x5B), + ALPHA(0x5C), ALPHA(0x5D), ALPHA(0x5E), ALPHA(0x5F), + ALPHA(0x60), ALPHA(0x61), ALPHA(0x62), ALPHA(0x63), + ALPHA(0x64), ALPHA(0x65), ALPHA(0x66), ALPHA(0x67), + ALPHA(0x68), ALPHA(0x69), ALPHA(0x6A), ALPHA(0x6B), + ALPHA(0x6C), ALPHA(0x6D), ALPHA(0x6E), ALPHA(0x6F), + ALPHA(0x70), ALPHA(0x71), ALPHA(0x72), ALPHA(0x73), + ALPHA(0x74), ALPHA(0x75), ALPHA(0x76), ALPHA(0x77), + ALPHA(0x78), ALPHA(0x79), ALPHA(0x7A), ALPHA(0x7B), + ALPHA(0x7C), ALPHA(0x7D), ALPHA(0x7E), ALPHA(0x7F), + ALPHA(0x80), ALPHA(0x81), ALPHA(0x82), ALPHA(0x83), + ALPHA(0x84), ALPHA(0x85), ALPHA(0x86), ALPHA(0x87), + ALPHA(0x88), ALPHA(0x89), ALPHA(0x8A), ALPHA(0x8B), + ALPHA(0x8C), ALPHA(0x8D), ALPHA(0x8E), ALPHA(0x8F), + ALPHA(0x90), ALPHA(0x91), ALPHA(0x92), ALPHA(0x93), + ALPHA(0x94), ALPHA(0x95), ALPHA(0x96), ALPHA(0x97), + ALPHA(0x98), ALPHA(0x99), ALPHA(0x9A), ALPHA(0x9B), + ALPHA(0x9C), ALPHA(0x9D), ALPHA(0x9E), ALPHA(0x9F), + ALPHA(0xA0), ALPHA(0xA1), ALPHA(0xA2), ALPHA(0xA3), + ALPHA(0xA4), ALPHA(0xA5), ALPHA(0xA6), ALPHA(0xA7), + ALPHA(0xA8), ALPHA(0xA9), ALPHA(0xAA), ALPHA(0xAB), + ALPHA(0xAC), ALPHA(0xAD), ALPHA(0xAE), ALPHA(0xAF), + ALPHA(0xB0), ALPHA(0xB1), ALPHA(0xB2), ALPHA(0xB3), + ALPHA(0xB4), ALPHA(0xB5), ALPHA(0xB6), ALPHA(0xB7), + ALPHA(0xB8), ALPHA(0xB9), ALPHA(0xBA), ALPHA(0xBB), + ALPHA(0xBC), ALPHA(0xBD), ALPHA(0xBE), ALPHA(0xBF), + ALPHA(0xC0), ALPHA(0xC1), ALPHA(0xC2), ALPHA(0xC3), + ALPHA(0xC4), ALPHA(0xC5), ALPHA(0xC6), ALPHA(0xC7), + ALPHA(0xC8), ALPHA(0xC9), ALPHA(0xCA), ALPHA(0xCB), + ALPHA(0xCC), ALPHA(0xCD), ALPHA(0xCE), ALPHA(0xCF), + ALPHA(0xD0), ALPHA(0xD1), ALPHA(0xD2), ALPHA(0xD3), + ALPHA(0xD4), ALPHA(0xD5), ALPHA(0xD6), ALPHA(0xD7), + ALPHA(0xD8), ALPHA(0xD9), ALPHA(0xDA), ALPHA(0xDB), + ALPHA(0xDC), ALPHA(0xDD), ALPHA(0xDE), ALPHA(0xDF), + ALPHA(0xE0), ALPHA(0xE1), ALPHA(0xE2), ALPHA(0xE3), + ALPHA(0xE4), ALPHA(0xE5), ALPHA(0xE6), ALPHA(0xE7), + ALPHA(0xE8), ALPHA(0xE9), ALPHA(0xEA), ALPHA(0xEB), + ALPHA(0xEC), ALPHA(0xED), ALPHA(0xEE), ALPHA(0xEF), + ALPHA(0xF0), ALPHA(0xF1), ALPHA(0xF2), ALPHA(0xF3), + ALPHA(0xF4), ALPHA(0xF5), ALPHA(0xF6), ALPHA(0xF7), + ALPHA(0xF8), ALPHA(0xF9), ALPHA(0xFA), ALPHA(0xFB), + ALPHA(0xFC), ALPHA(0xFD), ALPHA(0xFE), ALPHA(0xFF), }; #undef RGBY #undef RGBU #undef RGBV +#undef ALPHA } // extern "C" |