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. | |
10 #define RGBY(i) { \ | 9 #define RGBY(i) { \ |
11 static_cast<int16>(1.164 * 64 * (i - 16) + 0.5), \ | 10 static_cast<int16>(1.164 * 64 * (i - 16) + 0.5), \ |
12 static_cast<int16>(1.164 * 64 * (i - 16) + 0.5), \ | 11 static_cast<int16>(1.164 * 64 * (i - 16) + 0.5), \ |
13 static_cast<int16>(1.164 * 64 * (i - 16) + 0.5), \ | 12 static_cast<int16>(1.164 * 64 * (i - 16) + 0.5), \ |
14 0 \ | 13 0 \ |
15 } | 14 } |
16 | 15 |
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. | |
20 #define RGBU(i) { \ | 16 #define RGBU(i) { \ |
21 static_cast<int16>(2.018 * 64 * (i - 128) + 0.5), \ | 17 static_cast<int16>(2.018 * 64 * (i - 128) + 0.5), \ |
22 static_cast<int16>(-0.391 * 64 * (i - 128) + 0.5), \ | 18 static_cast<int16>(-0.391 * 64 * (i - 128) + 0.5), \ |
23 0, \ | 19 0, \ |
24 static_cast<int16>(256 * 64 - 1) \ | 20 static_cast<int16>(256 * 64 - 1) \ |
25 } | 21 } |
26 | 22 |
27 // Defines the R,G,B,A contributions from V. | |
28 #define RGBV(i) { \ | 23 #define RGBV(i) { \ |
29 0, \ | 24 0, \ |
30 static_cast<int16>(-0.813 * 64 * (i - 128) + 0.5), \ | 25 static_cast<int16>(-0.813 * 64 * (i - 128) + 0.5), \ |
31 static_cast<int16>(1.596 * 64 * (i - 128) + 0.5), \ | 26 static_cast<int16>(1.596 * 64 * (i - 128) + 0.5), \ |
32 0 \ | 27 0 \ |
33 } | 28 } |
34 | 29 |
35 // Used to define a set of multiplier words for each alpha level. | 30 SIMD_ALIGNED(int16 kCoefficientsRgbY[256 * 3][4]) = { |
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]) = { | |
47 RGBY(0x00), RGBY(0x01), RGBY(0x02), RGBY(0x03), | 31 RGBY(0x00), RGBY(0x01), RGBY(0x02), RGBY(0x03), |
48 RGBY(0x04), RGBY(0x05), RGBY(0x06), RGBY(0x07), | 32 RGBY(0x04), RGBY(0x05), RGBY(0x06), RGBY(0x07), |
49 RGBY(0x08), RGBY(0x09), RGBY(0x0A), RGBY(0x0B), | 33 RGBY(0x08), RGBY(0x09), RGBY(0x0A), RGBY(0x0B), |
50 RGBY(0x0C), RGBY(0x0D), RGBY(0x0E), RGBY(0x0F), | 34 RGBY(0x0C), RGBY(0x0D), RGBY(0x0E), RGBY(0x0F), |
51 RGBY(0x10), RGBY(0x11), RGBY(0x12), RGBY(0x13), | 35 RGBY(0x10), RGBY(0x11), RGBY(0x12), RGBY(0x13), |
52 RGBY(0x14), RGBY(0x15), RGBY(0x16), RGBY(0x17), | 36 RGBY(0x14), RGBY(0x15), RGBY(0x16), RGBY(0x17), |
53 RGBY(0x18), RGBY(0x19), RGBY(0x1A), RGBY(0x1B), | 37 RGBY(0x18), RGBY(0x19), RGBY(0x1A), RGBY(0x1B), |
54 RGBY(0x1C), RGBY(0x1D), RGBY(0x1E), RGBY(0x1F), | 38 RGBY(0x1C), RGBY(0x1D), RGBY(0x1E), RGBY(0x1F), |
55 RGBY(0x20), RGBY(0x21), RGBY(0x22), RGBY(0x23), | 39 RGBY(0x20), RGBY(0x21), RGBY(0x22), RGBY(0x23), |
56 RGBY(0x24), RGBY(0x25), RGBY(0x26), RGBY(0x27), | 40 RGBY(0x24), RGBY(0x25), RGBY(0x26), RGBY(0x27), |
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
233 RGBV(0xD8), RGBV(0xD9), RGBV(0xDA), RGBV(0xDB), | 217 RGBV(0xD8), RGBV(0xD9), RGBV(0xDA), RGBV(0xDB), |
234 RGBV(0xDC), RGBV(0xDD), RGBV(0xDE), RGBV(0xDF), | 218 RGBV(0xDC), RGBV(0xDD), RGBV(0xDE), RGBV(0xDF), |
235 RGBV(0xE0), RGBV(0xE1), RGBV(0xE2), RGBV(0xE3), | 219 RGBV(0xE0), RGBV(0xE1), RGBV(0xE2), RGBV(0xE3), |
236 RGBV(0xE4), RGBV(0xE5), RGBV(0xE6), RGBV(0xE7), | 220 RGBV(0xE4), RGBV(0xE5), RGBV(0xE6), RGBV(0xE7), |
237 RGBV(0xE8), RGBV(0xE9), RGBV(0xEA), RGBV(0xEB), | 221 RGBV(0xE8), RGBV(0xE9), RGBV(0xEA), RGBV(0xEB), |
238 RGBV(0xEC), RGBV(0xED), RGBV(0xEE), RGBV(0xEF), | 222 RGBV(0xEC), RGBV(0xED), RGBV(0xEE), RGBV(0xEF), |
239 RGBV(0xF0), RGBV(0xF1), RGBV(0xF2), RGBV(0xF3), | 223 RGBV(0xF0), RGBV(0xF1), RGBV(0xF2), RGBV(0xF3), |
240 RGBV(0xF4), RGBV(0xF5), RGBV(0xF6), RGBV(0xF7), | 224 RGBV(0xF4), RGBV(0xF5), RGBV(0xF6), RGBV(0xF7), |
241 RGBV(0xF8), RGBV(0xF9), RGBV(0xFA), RGBV(0xFB), | 225 RGBV(0xF8), RGBV(0xF9), RGBV(0xFA), RGBV(0xFB), |
242 RGBV(0xFC), RGBV(0xFD), RGBV(0xFE), RGBV(0xFF), | 226 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), | |
309 }; | 227 }; |
310 | 228 |
311 #undef RGBY | 229 #undef RGBY |
312 #undef RGBU | 230 #undef RGBU |
313 #undef RGBV | 231 #undef RGBV |
314 #undef ALPHA | |
315 | 232 |
316 } // extern "C" | 233 } // extern "C" |
OLD | NEW |