Index: media/base/simd/yuv_to_rgb_table.cc |
diff --git a/media/base/simd/yuv_to_rgb_table.cc b/media/base/simd/yuv_to_rgb_table.cc |
index f998e85a330509baa2f80c8de9f7e15b0e439874..378996988d35aa3d8fff03067e8148e7d0b7db51 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" |