OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/convert_yuv_to_rgb.h" | 5 #include "media/base/simd/convert_yuv_to_rgb.h" |
6 #include "media/base/simd/yuv_to_rgb_table.h" | 6 #include "media/base/simd/yuv_to_rgb_table.h" |
7 | 7 |
| 8 namespace media { |
| 9 |
8 #define packuswb(x) ((x) < 0 ? 0 : ((x) > 255 ? 255 : (x))) | 10 #define packuswb(x) ((x) < 0 ? 0 : ((x) > 255 ? 255 : (x))) |
9 #define paddsw(x, y) (((x) + (y)) < -32768 ? -32768 : \ | 11 #define paddsw(x, y) (((x) + (y)) < -32768 ? -32768 : \ |
10 (((x) + (y)) > 32767 ? 32767 : ((x) + (y)))) | 12 (((x) + (y)) > 32767 ? 32767 : ((x) + (y)))) |
11 | 13 |
12 static inline void ConvertYUVToRGB32_C(uint8 y, | 14 static inline void ConvertYUVToRGB32_C(uint8 y, |
13 uint8 u, | 15 uint8 u, |
14 uint8 v, | 16 uint8 v, |
15 uint8* rgb_buf) { | 17 uint8* rgb_buf) { |
16 int b = kCoefficientsRgbY[256+u][0]; | 18 int b = kCoefficientsRgbY[256+u][0]; |
17 int g = kCoefficientsRgbY[256+u][1]; | 19 int g = kCoefficientsRgbY[256+u][1]; |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
60 g >>= 6; | 62 g >>= 6; |
61 r >>= 6; | 63 r >>= 6; |
62 | 64 |
63 b = packuswb(b) * a >> 8; | 65 b = packuswb(b) * a >> 8; |
64 g = packuswb(g) * a >> 8; | 66 g = packuswb(g) * a >> 8; |
65 r = packuswb(r) * a >> 8; | 67 r = packuswb(r) * a >> 8; |
66 | 68 |
67 *reinterpret_cast<uint32*>(rgb_buf) = b | (g << 8) | (r << 16) | (a << 24); | 69 *reinterpret_cast<uint32*>(rgb_buf) = b | (g << 8) | (r << 16) | (a << 24); |
68 } | 70 } |
69 | 71 |
70 extern "C" { | |
71 | |
72 void ConvertYUVToRGB32Row_C(const uint8* y_buf, | 72 void ConvertYUVToRGB32Row_C(const uint8* y_buf, |
73 const uint8* u_buf, | 73 const uint8* u_buf, |
74 const uint8* v_buf, | 74 const uint8* v_buf, |
75 uint8* rgb_buf, | 75 uint8* rgb_buf, |
76 ptrdiff_t width) { | 76 ptrdiff_t width) { |
77 for (int x = 0; x < width; x += 2) { | 77 for (int x = 0; x < width; x += 2) { |
78 uint8 u = u_buf[x >> 1]; | 78 uint8 u = u_buf[x >> 1]; |
79 uint8 v = v_buf[x >> 1]; | 79 uint8 v = v_buf[x >> 1]; |
80 uint8 y0 = y_buf[x]; | 80 uint8 y0 = y_buf[x]; |
81 ConvertYUVToRGB32_C(y0, u, v, rgb_buf); | 81 ConvertYUVToRGB32_C(y0, u, v, rgb_buf); |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
174 y1 = y_buf[(x >> 16) + 1]; | 174 y1 = y_buf[(x >> 16) + 1]; |
175 y_frac = (x & 65535); | 175 y_frac = (x & 65535); |
176 y = (y_frac * y1 + (y_frac ^ 65535) * y0) >> 16; | 176 y = (y_frac * y1 + (y_frac ^ 65535) * y0) >> 16; |
177 ConvertYUVToRGB32_C(y, u, v, rgb_buf+4); | 177 ConvertYUVToRGB32_C(y, u, v, rgb_buf+4); |
178 x += source_dx; | 178 x += source_dx; |
179 } | 179 } |
180 rgb_buf += 8; | 180 rgb_buf += 8; |
181 } | 181 } |
182 } | 182 } |
183 | 183 |
184 } | |
185 | |
186 namespace media { | |
187 | |
188 void ConvertYUVToRGB32_C(const uint8* yplane, | 184 void ConvertYUVToRGB32_C(const uint8* yplane, |
189 const uint8* uplane, | 185 const uint8* uplane, |
190 const uint8* vplane, | 186 const uint8* vplane, |
191 uint8* rgbframe, | 187 uint8* rgbframe, |
192 int width, | 188 int width, |
193 int height, | 189 int height, |
194 int ystride, | 190 int ystride, |
195 int uvstride, | 191 int uvstride, |
196 int rgbstride, | 192 int rgbstride, |
197 YUVType yuv_type) { | 193 YUVType yuv_type) { |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
233 ConvertYUVAToARGBRow_C(y_ptr, | 229 ConvertYUVAToARGBRow_C(y_ptr, |
234 u_ptr, | 230 u_ptr, |
235 v_ptr, | 231 v_ptr, |
236 a_ptr, | 232 a_ptr, |
237 rgba_row, | 233 rgba_row, |
238 width); | 234 width); |
239 } | 235 } |
240 } | 236 } |
241 | 237 |
242 } // namespace media | 238 } // namespace media |
OLD | NEW |