OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "media/base/simd/yuv_to_rgb_table.h" | 5 #include "media/base/simd/yuv_to_rgb_table.h" |
6 | 6 |
7 extern "C" { | 7 extern "C" { |
8 | 8 |
| 9 // Defines the R,G,B,A contributions from Y. |
9 #define RGBY(i) { \ | 10 #define RGBY(i) { \ |
10 static_cast<int16>(1.164 * 64 * (i - 16) + 0.5), \ | 11 static_cast<int16>(1.164 * 64 * (i - 16) + 0.5), \ |
11 static_cast<int16>(1.164 * 64 * (i - 16) + 0.5), \ | 12 static_cast<int16>(1.164 * 64 * (i - 16) + 0.5), \ |
12 static_cast<int16>(1.164 * 64 * (i - 16) + 0.5), \ | 13 static_cast<int16>(1.164 * 64 * (i - 16) + 0.5), \ |
13 0 \ | 14 0 \ |
14 } | 15 } |
15 | 16 |
| 17 // Defines the R,G,B,A contributions from U. |
| 18 // The contribution to A is the same for any value of U |
| 19 // causing the final A value to be 255 in every conversion. |
16 #define RGBU(i) { \ | 20 #define RGBU(i) { \ |
17 static_cast<int16>(2.018 * 64 * (i - 128) + 0.5), \ | 21 static_cast<int16>(2.018 * 64 * (i - 128) + 0.5), \ |
18 static_cast<int16>(-0.391 * 64 * (i - 128) + 0.5), \ | 22 static_cast<int16>(-0.391 * 64 * (i - 128) + 0.5), \ |
19 0, \ | 23 0, \ |
20 static_cast<int16>(256 * 64 - 1) \ | 24 static_cast<int16>(256 * 64 - 1) \ |
21 } | 25 } |
22 | 26 |
| 27 // Defines the R,G,B,A contributions from V. |
23 #define RGBV(i) { \ | 28 #define RGBV(i) { \ |
24 0, \ | 29 0, \ |
25 static_cast<int16>(-0.813 * 64 * (i - 128) + 0.5), \ | 30 static_cast<int16>(-0.813 * 64 * (i - 128) + 0.5), \ |
26 static_cast<int16>(1.596 * 64 * (i - 128) + 0.5), \ | 31 static_cast<int16>(1.596 * 64 * (i - 128) + 0.5), \ |
27 0 \ | 32 0 \ |
28 } | 33 } |
29 | 34 |
30 SIMD_ALIGNED(int16 kCoefficientsRgbY[256 * 3][4]) = { | 35 // Used to define a set of multiplier words for each alpha level. |
| 36 #define ALPHA(i) { \ |
| 37 i, i, i, i \ |
| 38 } |
| 39 |
| 40 // The following table defines the RGBA contributions |
| 41 // for each component of YUVA. The Y table is first followed |
| 42 // by the U, and V tables. The alpha multiplier table follows. |
| 43 // These tables are aligned and kept adjacent to optimize for |
| 44 // SIMD and cacheing. |
| 45 |
| 46 SIMD_ALIGNED(int16 kCoefficientsRgbY[256 * 4][4]) = { |
31 RGBY(0x00), RGBY(0x01), RGBY(0x02), RGBY(0x03), | 47 RGBY(0x00), RGBY(0x01), RGBY(0x02), RGBY(0x03), |
32 RGBY(0x04), RGBY(0x05), RGBY(0x06), RGBY(0x07), | 48 RGBY(0x04), RGBY(0x05), RGBY(0x06), RGBY(0x07), |
33 RGBY(0x08), RGBY(0x09), RGBY(0x0A), RGBY(0x0B), | 49 RGBY(0x08), RGBY(0x09), RGBY(0x0A), RGBY(0x0B), |
34 RGBY(0x0C), RGBY(0x0D), RGBY(0x0E), RGBY(0x0F), | 50 RGBY(0x0C), RGBY(0x0D), RGBY(0x0E), RGBY(0x0F), |
35 RGBY(0x10), RGBY(0x11), RGBY(0x12), RGBY(0x13), | 51 RGBY(0x10), RGBY(0x11), RGBY(0x12), RGBY(0x13), |
36 RGBY(0x14), RGBY(0x15), RGBY(0x16), RGBY(0x17), | 52 RGBY(0x14), RGBY(0x15), RGBY(0x16), RGBY(0x17), |
37 RGBY(0x18), RGBY(0x19), RGBY(0x1A), RGBY(0x1B), | 53 RGBY(0x18), RGBY(0x19), RGBY(0x1A), RGBY(0x1B), |
38 RGBY(0x1C), RGBY(0x1D), RGBY(0x1E), RGBY(0x1F), | 54 RGBY(0x1C), RGBY(0x1D), RGBY(0x1E), RGBY(0x1F), |
39 RGBY(0x20), RGBY(0x21), RGBY(0x22), RGBY(0x23), | 55 RGBY(0x20), RGBY(0x21), RGBY(0x22), RGBY(0x23), |
40 RGBY(0x24), RGBY(0x25), RGBY(0x26), RGBY(0x27), | 56 RGBY(0x24), RGBY(0x25), RGBY(0x26), RGBY(0x27), |
(...skipping 176 matching lines...) Loading... |
217 RGBV(0xD8), RGBV(0xD9), RGBV(0xDA), RGBV(0xDB), | 233 RGBV(0xD8), RGBV(0xD9), RGBV(0xDA), RGBV(0xDB), |
218 RGBV(0xDC), RGBV(0xDD), RGBV(0xDE), RGBV(0xDF), | 234 RGBV(0xDC), RGBV(0xDD), RGBV(0xDE), RGBV(0xDF), |
219 RGBV(0xE0), RGBV(0xE1), RGBV(0xE2), RGBV(0xE3), | 235 RGBV(0xE0), RGBV(0xE1), RGBV(0xE2), RGBV(0xE3), |
220 RGBV(0xE4), RGBV(0xE5), RGBV(0xE6), RGBV(0xE7), | 236 RGBV(0xE4), RGBV(0xE5), RGBV(0xE6), RGBV(0xE7), |
221 RGBV(0xE8), RGBV(0xE9), RGBV(0xEA), RGBV(0xEB), | 237 RGBV(0xE8), RGBV(0xE9), RGBV(0xEA), RGBV(0xEB), |
222 RGBV(0xEC), RGBV(0xED), RGBV(0xEE), RGBV(0xEF), | 238 RGBV(0xEC), RGBV(0xED), RGBV(0xEE), RGBV(0xEF), |
223 RGBV(0xF0), RGBV(0xF1), RGBV(0xF2), RGBV(0xF3), | 239 RGBV(0xF0), RGBV(0xF1), RGBV(0xF2), RGBV(0xF3), |
224 RGBV(0xF4), RGBV(0xF5), RGBV(0xF6), RGBV(0xF7), | 240 RGBV(0xF4), RGBV(0xF5), RGBV(0xF6), RGBV(0xF7), |
225 RGBV(0xF8), RGBV(0xF9), RGBV(0xFA), RGBV(0xFB), | 241 RGBV(0xF8), RGBV(0xF9), RGBV(0xFA), RGBV(0xFB), |
226 RGBV(0xFC), RGBV(0xFD), RGBV(0xFE), RGBV(0xFF), | 242 RGBV(0xFC), RGBV(0xFD), RGBV(0xFE), RGBV(0xFF), |
| 243 |
| 244 // Alpha multipliers for each alpha level. |
| 245 ALPHA(0x00), ALPHA(0x01), ALPHA(0x02), ALPHA(0x03), |
| 246 ALPHA(0x04), ALPHA(0x05), ALPHA(0x06), ALPHA(0x07), |
| 247 ALPHA(0x08), ALPHA(0x09), ALPHA(0x0A), ALPHA(0x0B), |
| 248 ALPHA(0x0C), ALPHA(0x0D), ALPHA(0x0E), ALPHA(0x0F), |
| 249 ALPHA(0x10), ALPHA(0x11), ALPHA(0x12), ALPHA(0x13), |
| 250 ALPHA(0x14), ALPHA(0x15), ALPHA(0x16), ALPHA(0x17), |
| 251 ALPHA(0x18), ALPHA(0x19), ALPHA(0x1A), ALPHA(0x1B), |
| 252 ALPHA(0x1C), ALPHA(0x1D), ALPHA(0x1E), ALPHA(0x1F), |
| 253 ALPHA(0x20), ALPHA(0x21), ALPHA(0x22), ALPHA(0x23), |
| 254 ALPHA(0x24), ALPHA(0x25), ALPHA(0x26), ALPHA(0x27), |
| 255 ALPHA(0x28), ALPHA(0x29), ALPHA(0x2A), ALPHA(0x2B), |
| 256 ALPHA(0x2C), ALPHA(0x2D), ALPHA(0x2E), ALPHA(0x2F), |
| 257 ALPHA(0x30), ALPHA(0x31), ALPHA(0x32), ALPHA(0x33), |
| 258 ALPHA(0x34), ALPHA(0x35), ALPHA(0x36), ALPHA(0x37), |
| 259 ALPHA(0x38), ALPHA(0x39), ALPHA(0x3A), ALPHA(0x3B), |
| 260 ALPHA(0x3C), ALPHA(0x3D), ALPHA(0x3E), ALPHA(0x3F), |
| 261 ALPHA(0x40), ALPHA(0x41), ALPHA(0x42), ALPHA(0x43), |
| 262 ALPHA(0x44), ALPHA(0x45), ALPHA(0x46), ALPHA(0x47), |
| 263 ALPHA(0x48), ALPHA(0x49), ALPHA(0x4A), ALPHA(0x4B), |
| 264 ALPHA(0x4C), ALPHA(0x4D), ALPHA(0x4E), ALPHA(0x4F), |
| 265 ALPHA(0x50), ALPHA(0x51), ALPHA(0x52), ALPHA(0x53), |
| 266 ALPHA(0x54), ALPHA(0x55), ALPHA(0x56), ALPHA(0x57), |
| 267 ALPHA(0x58), ALPHA(0x59), ALPHA(0x5A), ALPHA(0x5B), |
| 268 ALPHA(0x5C), ALPHA(0x5D), ALPHA(0x5E), ALPHA(0x5F), |
| 269 ALPHA(0x60), ALPHA(0x61), ALPHA(0x62), ALPHA(0x63), |
| 270 ALPHA(0x64), ALPHA(0x65), ALPHA(0x66), ALPHA(0x67), |
| 271 ALPHA(0x68), ALPHA(0x69), ALPHA(0x6A), ALPHA(0x6B), |
| 272 ALPHA(0x6C), ALPHA(0x6D), ALPHA(0x6E), ALPHA(0x6F), |
| 273 ALPHA(0x70), ALPHA(0x71), ALPHA(0x72), ALPHA(0x73), |
| 274 ALPHA(0x74), ALPHA(0x75), ALPHA(0x76), ALPHA(0x77), |
| 275 ALPHA(0x78), ALPHA(0x79), ALPHA(0x7A), ALPHA(0x7B), |
| 276 ALPHA(0x7C), ALPHA(0x7D), ALPHA(0x7E), ALPHA(0x7F), |
| 277 ALPHA(0x80), ALPHA(0x81), ALPHA(0x82), ALPHA(0x83), |
| 278 ALPHA(0x84), ALPHA(0x85), ALPHA(0x86), ALPHA(0x87), |
| 279 ALPHA(0x88), ALPHA(0x89), ALPHA(0x8A), ALPHA(0x8B), |
| 280 ALPHA(0x8C), ALPHA(0x8D), ALPHA(0x8E), ALPHA(0x8F), |
| 281 ALPHA(0x90), ALPHA(0x91), ALPHA(0x92), ALPHA(0x93), |
| 282 ALPHA(0x94), ALPHA(0x95), ALPHA(0x96), ALPHA(0x97), |
| 283 ALPHA(0x98), ALPHA(0x99), ALPHA(0x9A), ALPHA(0x9B), |
| 284 ALPHA(0x9C), ALPHA(0x9D), ALPHA(0x9E), ALPHA(0x9F), |
| 285 ALPHA(0xA0), ALPHA(0xA1), ALPHA(0xA2), ALPHA(0xA3), |
| 286 ALPHA(0xA4), ALPHA(0xA5), ALPHA(0xA6), ALPHA(0xA7), |
| 287 ALPHA(0xA8), ALPHA(0xA9), ALPHA(0xAA), ALPHA(0xAB), |
| 288 ALPHA(0xAC), ALPHA(0xAD), ALPHA(0xAE), ALPHA(0xAF), |
| 289 ALPHA(0xB0), ALPHA(0xB1), ALPHA(0xB2), ALPHA(0xB3), |
| 290 ALPHA(0xB4), ALPHA(0xB5), ALPHA(0xB6), ALPHA(0xB7), |
| 291 ALPHA(0xB8), ALPHA(0xB9), ALPHA(0xBA), ALPHA(0xBB), |
| 292 ALPHA(0xBC), ALPHA(0xBD), ALPHA(0xBE), ALPHA(0xBF), |
| 293 ALPHA(0xC0), ALPHA(0xC1), ALPHA(0xC2), ALPHA(0xC3), |
| 294 ALPHA(0xC4), ALPHA(0xC5), ALPHA(0xC6), ALPHA(0xC7), |
| 295 ALPHA(0xC8), ALPHA(0xC9), ALPHA(0xCA), ALPHA(0xCB), |
| 296 ALPHA(0xCC), ALPHA(0xCD), ALPHA(0xCE), ALPHA(0xCF), |
| 297 ALPHA(0xD0), ALPHA(0xD1), ALPHA(0xD2), ALPHA(0xD3), |
| 298 ALPHA(0xD4), ALPHA(0xD5), ALPHA(0xD6), ALPHA(0xD7), |
| 299 ALPHA(0xD8), ALPHA(0xD9), ALPHA(0xDA), ALPHA(0xDB), |
| 300 ALPHA(0xDC), ALPHA(0xDD), ALPHA(0xDE), ALPHA(0xDF), |
| 301 ALPHA(0xE0), ALPHA(0xE1), ALPHA(0xE2), ALPHA(0xE3), |
| 302 ALPHA(0xE4), ALPHA(0xE5), ALPHA(0xE6), ALPHA(0xE7), |
| 303 ALPHA(0xE8), ALPHA(0xE9), ALPHA(0xEA), ALPHA(0xEB), |
| 304 ALPHA(0xEC), ALPHA(0xED), ALPHA(0xEE), ALPHA(0xEF), |
| 305 ALPHA(0xF0), ALPHA(0xF1), ALPHA(0xF2), ALPHA(0xF3), |
| 306 ALPHA(0xF4), ALPHA(0xF5), ALPHA(0xF6), ALPHA(0xF7), |
| 307 ALPHA(0xF8), ALPHA(0xF9), ALPHA(0xFA), ALPHA(0xFB), |
| 308 ALPHA(0xFC), ALPHA(0xFD), ALPHA(0xFE), ALPHA(0xFF), |
227 }; | 309 }; |
228 | 310 |
229 #undef RGBY | 311 #undef RGBY |
230 #undef RGBU | 312 #undef RGBU |
231 #undef RGBV | 313 #undef RGBV |
| 314 #undef ALPHA |
232 | 315 |
233 } // extern "C" | 316 } // extern "C" |
OLD | NEW |