Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(891)

Side by Side Diff: media/base/simd/convert_yuv_to_rgb_c.cc

Issue 23809010: Fix YUVConvert unittest failure on Android_X86. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « media/base/simd/convert_rgb_to_yuv_sse2.cc ('k') | media/base/simd/yuv_to_rgb_table.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 { 8 namespace media {
9 9
10 #define packuswb(x) ((x) < 0 ? 0 : ((x) > 255 ? 255 : (x))) 10 #define packuswb(x) ((x) < 0 ? 0 : ((x) > 255 ? 255 : (x)))
11 #define paddsw(x, y) (((x) + (y)) < -32768 ? -32768 : \ 11 #define paddsw(x, y) (((x) + (y)) < -32768 ? -32768 : \
12 (((x) + (y)) > 32767 ? 32767 : ((x) + (y)))) 12 (((x) + (y)) > 32767 ? 32767 : ((x) + (y))))
13 13
14 // On Android, pixel layout is RGBA (see skia/include/core/SkColorPriv.h); 14 // On Android, pixel layout is RGBA (see skia/include/core/SkColorPriv.h);
15 // however, other Chrome platforms use BGRA (see skia/config/SkUserConfig.h). 15 // however, other Chrome platforms use BGRA (see skia/config/SkUserConfig.h).
16 // Ideally, android should not use the functions here due to performance issue 16 // Ideally, android should not use the functions here due to performance issue
17 // (http://crbug.com/249980). 17 // (http://crbug.com/249980).
18 #if defined(OS_ANDROID) 18 #if defined(OS_ANDROID)
19 #define SK_R32_SHIFT 0 19 #define SK_R32_SHIFT 0
20 #define SK_G32_SHIFT 8 20 #define SK_G32_SHIFT 8
21 #define SK_B32_SHIFT 16 21 #define SK_B32_SHIFT 16
22 #define SK_A32_SHIFT 24 22 #define SK_A32_SHIFT 24
23 #define R_INDEX 0
24 #define G_INDEX 1
25 #define B_INDEX 2
26 #define A_INDEX 3
23 #else 27 #else
24 #define SK_B32_SHIFT 0 28 #define SK_B32_SHIFT 0
25 #define SK_G32_SHIFT 8 29 #define SK_G32_SHIFT 8
26 #define SK_R32_SHIFT 16 30 #define SK_R32_SHIFT 16
27 #define SK_A32_SHIFT 24 31 #define SK_A32_SHIFT 24
32 #define B_INDEX 0
33 #define G_INDEX 1
34 #define R_INDEX 2
35 #define A_INDEX 3
28 #endif 36 #endif
29 37
30 static inline void ConvertYUVToRGB32_C(uint8 y, 38 static inline void ConvertYUVToRGB32_C(uint8 y,
31 uint8 u, 39 uint8 u,
32 uint8 v, 40 uint8 v,
33 uint8* rgb_buf) { 41 uint8* rgb_buf) {
34 int b = kCoefficientsRgbY[256+u][0]; 42 int b = kCoefficientsRgbY[256+u][B_INDEX];
35 int g = kCoefficientsRgbY[256+u][1]; 43 int g = kCoefficientsRgbY[256+u][G_INDEX];
36 int r = kCoefficientsRgbY[256+u][2]; 44 int r = kCoefficientsRgbY[256+u][R_INDEX];
37 int a = kCoefficientsRgbY[256+u][3]; 45 int a = kCoefficientsRgbY[256+u][A_INDEX];
38 46
39 b = paddsw(b, kCoefficientsRgbY[512+v][0]); 47 b = paddsw(b, kCoefficientsRgbY[512+v][B_INDEX]);
40 g = paddsw(g, kCoefficientsRgbY[512+v][1]); 48 g = paddsw(g, kCoefficientsRgbY[512+v][G_INDEX]);
41 r = paddsw(r, kCoefficientsRgbY[512+v][2]); 49 r = paddsw(r, kCoefficientsRgbY[512+v][R_INDEX]);
42 a = paddsw(a, kCoefficientsRgbY[512+v][3]); 50 a = paddsw(a, kCoefficientsRgbY[512+v][A_INDEX]);
43 51
44 b = paddsw(b, kCoefficientsRgbY[y][0]); 52 b = paddsw(b, kCoefficientsRgbY[y][B_INDEX]);
45 g = paddsw(g, kCoefficientsRgbY[y][1]); 53 g = paddsw(g, kCoefficientsRgbY[y][G_INDEX]);
46 r = paddsw(r, kCoefficientsRgbY[y][2]); 54 r = paddsw(r, kCoefficientsRgbY[y][R_INDEX]);
47 a = paddsw(a, kCoefficientsRgbY[y][3]); 55 a = paddsw(a, kCoefficientsRgbY[y][A_INDEX]);
48 56
49 b >>= 6; 57 b >>= 6;
50 g >>= 6; 58 g >>= 6;
51 r >>= 6; 59 r >>= 6;
52 a >>= 6; 60 a >>= 6;
53 61
54 *reinterpret_cast<uint32*>(rgb_buf) = (packuswb(b) << SK_B32_SHIFT) | 62 *reinterpret_cast<uint32*>(rgb_buf) = (packuswb(b) << SK_B32_SHIFT) |
55 (packuswb(g) << SK_G32_SHIFT) | 63 (packuswb(g) << SK_G32_SHIFT) |
56 (packuswb(r) << SK_R32_SHIFT) | 64 (packuswb(r) << SK_R32_SHIFT) |
57 (packuswb(a) << SK_A32_SHIFT); 65 (packuswb(a) << SK_A32_SHIFT);
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after
248 ConvertYUVAToARGBRow_C(y_ptr, 256 ConvertYUVAToARGBRow_C(y_ptr,
249 u_ptr, 257 u_ptr,
250 v_ptr, 258 v_ptr,
251 a_ptr, 259 a_ptr,
252 rgba_row, 260 rgba_row,
253 width); 261 width);
254 } 262 }
255 } 263 }
256 264
257 } // namespace media 265 } // namespace media
OLDNEW
« no previous file with comments | « media/base/simd/convert_rgb_to_yuv_sse2.cc ('k') | media/base/simd/yuv_to_rgb_table.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698