Chromium Code Reviews| Index: source/row_common.cc | 
| diff --git a/source/row_common.cc b/source/row_common.cc | 
| index 13195684cabc130e0da3d8728caa8d9fecce7112..c5b1b4e2954f59b787c66e8c79644798ba384d7c 100644 | 
| --- a/source/row_common.cc | 
| +++ b/source/row_common.cc | 
| @@ -994,6 +994,7 @@ void J400ToARGBRow_C(const uint8* src_y, uint8* dst_argb, int width) { | 
| } | 
| } | 
| + | 
| 
 
harryjin
2015/09/18 22:48:31
Remove the extra line?
 
 | 
| // BT.601 YUV to RGB reference | 
| // R = (Y - 16) * 1.164 - V * -1.596 | 
| // G = (Y - 16) * 1.164 - U * 0.391 - V * 0.813 | 
| @@ -1010,11 +1011,38 @@ void J400ToARGBRow_C(const uint8* src_y, uint8* dst_argb, int width) { | 
| #define VG 52 /* round(0.813 * 64) */ | 
| #define VR -102 /* round(-1.596 * 64) */ | 
| -// Bias values to subtract 16 from Y and 128 from U and V, with rounding. | 
| -#define BB (UB * 128 + YGB) | 
| +// Bias values to subtract 16 from Y and 128 from U and V. | 
| +#define BB (UB * 128 + YGB) | 
| #define BG (UG * 128 + VG * 128 + YGB) | 
| -#define BR (VR * 128 + YGB) | 
| - | 
| +#define BR (VR * 128 + YGB) | 
| + | 
| +// BT601 constants for YUV to RGB. | 
| +YuvConstants SIMD_ALIGNED(kYuvConstants) = { | 
| + { UB, 0, UB, 0, UB, 0, UB, 0, UB, 0, UB, 0, UB, 0, UB, 0, | 
| + UB, 0, UB, 0, UB, 0, UB, 0, UB, 0, UB, 0, UB, 0, UB, 0 }, | 
| + { UG, VG, UG, VG, UG, VG, UG, VG, UG, VG, UG, VG, UG, VG, UG, VG, | 
| + UG, VG, UG, VG, UG, VG, UG, VG, UG, VG, UG, VG, UG, VG, UG, VG }, | 
| + { 0, VR, 0, VR, 0, VR, 0, VR, 0, VR, 0, VR, 0, VR, 0, VR, | 
| + 0, VR, 0, VR, 0, VR, 0, VR, 0, VR, 0, VR, 0, VR, 0, VR }, | 
| + { BB, BB, BB, BB, BB, BB, BB, BB, BB, BB, BB, BB, BB, BB, BB, BB }, | 
| + { BG, BG, BG, BG, BG, BG, BG, BG, BG, BG, BG, BG, BG, BG, BG, BG }, | 
| + { BR, BR, BR, BR, BR, BR, BR, BR, BR, BR, BR, BR, BR, BR, BR, BR }, | 
| + { YG, YG, YG, YG, YG, YG, YG, YG, YG, YG, YG, YG, YG, YG, YG, YG } | 
| +}; | 
| + | 
| +// BT601 constants for NV21 where chroma plane is VU instead of UV. | 
| +YuvConstants SIMD_ALIGNED(kYvuConstants) = { | 
| + { 0, UB, 0, UB, 0, UB, 0, UB, 0, UB, 0, UB, 0, UB, 0, UB, | 
| + 0, UB, 0, UB, 0, UB, 0, UB, 0, UB, 0, UB, 0, UB, 0, UB }, | 
| + { VG, UG, VG, UG, VG, UG, VG, UG, VG, UG, VG, UG, VG, UG, VG, UG, | 
| + VG, UG, VG, UG, VG, UG, VG, UG, VG, UG, VG, UG, VG, UG, VG, UG }, | 
| + { VR, 0, VR, 0, VR, 0, VR, 0, VR, 0, VR, 0, VR, 0, VR, 0, | 
| + VR, 0, VR, 0, VR, 0, VR, 0, VR, 0, VR, 0, VR, 0, VR, 0 }, | 
| + { BB, BB, BB, BB, BB, BB, BB, BB, BB, BB, BB, BB, BB, BB, BB, BB }, | 
| + { BG, BG, BG, BG, BG, BG, BG, BG, BG, BG, BG, BG, BG, BG, BG, BG }, | 
| + { BR, BR, BR, BR, BR, BR, BR, BR, BR, BR, BR, BR, BR, BR, BR, BR }, | 
| + { YG, YG, YG, YG, YG, YG, YG, YG, YG, YG, YG, YG, YG, YG, YG, YG } | 
| +}; | 
| // C reference code that mimics the YUV assembly. | 
| static __inline void YuvPixel(uint8 y, uint8 u, uint8 v, | 
| uint8* b, uint8* g, uint8* r) { | 
| @@ -1031,7 +1059,6 @@ static __inline void YPixel(uint8 y, uint8* b, uint8* g, uint8* r) { | 
| *g = Clamp((int32)(y1 + YGB) >> 6); | 
| *r = Clamp((int32)(y1 + YGB) >> 6); | 
| } | 
| - | 
| 
 
harryjin
2015/09/18 22:48:31
Why removing this empty line?
 
fbarchard
2015/09/18 22:51:11
Done.
 
 | 
| #undef YG | 
| #undef YGB | 
| #undef UB | 
| @@ -1058,11 +1085,30 @@ static __inline void YPixel(uint8 y, uint8* b, uint8* g, uint8* r) { | 
| #define VGJ 46 /* round(0.71414 * 64) */ | 
| #define VRJ -90 /* round(-1.40200 * 64) */ | 
| -// Bias values to round Y and subtract 128 from U and V. | 
| -#define BBJ (UBJ * 128 + YGBJ) | 
| +// Bias values to subtract 16 from Y and 128 from U and V. | 
| +#define BBJ (UBJ * 128 + YGBJ) | 
| #define BGJ (UGJ * 128 + VGJ * 128 + YGBJ) | 
| -#define BRJ (VRJ * 128 + YGBJ) | 
| - | 
| +#define BRJ (VRJ * 128 + YGBJ) | 
| + | 
| +// JPEG constants for YUV to RGB. | 
| +YuvConstants SIMD_ALIGNED(kYuvJConstants) = { | 
| + { UBJ, 0, UBJ, 0, UBJ, 0, UBJ, 0, UBJ, 0, UBJ, 0, UBJ, 0, UBJ, 0, | 
| + UBJ, 0, UBJ, 0, UBJ, 0, UBJ, 0, UBJ, 0, UBJ, 0, UBJ, 0, UBJ, 0 }, | 
| + { UGJ, VGJ, UGJ, VGJ, UGJ, VGJ, UGJ, VGJ, | 
| + UGJ, VGJ, UGJ, VGJ, UGJ, VGJ, UGJ, VGJ, | 
| + UGJ, VGJ, UGJ, VGJ, UGJ, VGJ, UGJ, VGJ, | 
| + UGJ, VGJ, UGJ, VGJ, UGJ, VGJ, UGJ, VGJ }, | 
| + { 0, VRJ, 0, VRJ, 0, VRJ, 0, VRJ, 0, VRJ, 0, VRJ, 0, VRJ, 0, VRJ, | 
| + 0, VRJ, 0, VRJ, 0, VRJ, 0, VRJ, 0, VRJ, 0, VRJ, 0, VRJ, 0, VRJ }, | 
| + { BBJ, BBJ, BBJ, BBJ, BBJ, BBJ, BBJ, BBJ, | 
| + BBJ, BBJ, BBJ, BBJ, BBJ, BBJ, BBJ, BBJ }, | 
| + { BGJ, BGJ, BGJ, BGJ, BGJ, BGJ, BGJ, BGJ, | 
| + BGJ, BGJ, BGJ, BGJ, BGJ, BGJ, BGJ, BGJ }, | 
| + { BRJ, BRJ, BRJ, BRJ, BRJ, BRJ, BRJ, BRJ, | 
| + BRJ, BRJ, BRJ, BRJ, BRJ, BRJ, BRJ, BRJ }, | 
| + { YGJ, YGJ, YGJ, YGJ, YGJ, YGJ, YGJ, YGJ, | 
| + YGJ, YGJ, YGJ, YGJ, YGJ, YGJ, YGJ, YGJ } | 
| +}; | 
| // C reference code that mimics the YUV assembly. | 
| static __inline void YuvJPixel(uint8 y, uint8 u, uint8 v, | 
| uint8* b, uint8* g, uint8* r) { | 
| @@ -1103,6 +1149,26 @@ static __inline void YuvJPixel(uint8 y, uint8 u, uint8 v, | 
| #define BGH (UGH * 128 + VGH * 128 + YGBH) | 
| #define BRH (VRH * 128 + YGBH) | 
| +// BT.709 constants for YUV to RGB. | 
| +YuvConstants SIMD_ALIGNED(kYuvHConstants) = { | 
| + { UBH, 0, UBH, 0, UBH, 0, UBH, 0, UBH, 0, UBH, 0, UBH, 0, UBH, 0, | 
| + UBH, 0, UBH, 0, UBH, 0, UBH, 0, UBH, 0, UBH, 0, UBH, 0, UBH, 0 }, | 
| + { UGH, VGH, UGH, VGH, UGH, VGH, UGH, VGH, | 
| + UGH, VGH, UGH, VGH, UGH, VGH, UGH, VGH, | 
| + UGH, VGH, UGH, VGH, UGH, VGH, UGH, VGH, | 
| + UGH, VGH, UGH, VGH, UGH, VGH, UGH, VGH }, | 
| + { 0, VRH, 0, VRH, 0, VRH, 0, VRH, 0, VRH, 0, VRH, 0, VRH, 0, VRH, | 
| + 0, VRH, 0, VRH, 0, VRH, 0, VRH, 0, VRH, 0, VRH, 0, VRH, 0, VRH }, | 
| + { BBH, BBH, BBH, BBH, BBH, BBH, BBH, BBH, | 
| + BBH, BBH, BBH, BBH, BBH, BBH, BBH, BBH }, | 
| + { BGH, BGH, BGH, BGH, BGH, BGH, BGH, BGH, | 
| + BGH, BGH, BGH, BGH, BGH, BGH, BGH, BGH }, | 
| + { BRH, BRH, BRH, BRH, BRH, BRH, BRH, BRH, | 
| + BRH, BRH, BRH, BRH, BRH, BRH, BRH, BRH }, | 
| + { YGH, YGH, YGH, YGH, YGH, YGH, YGH, YGH, | 
| + YGH, YGH, YGH, YGH, YGH, YGH, YGH, YGH } | 
| +}; | 
| + | 
| // C reference code that mimics the YUV assembly. | 
| static __inline void YuvHPixel(uint8 y, uint8 u, uint8 v, | 
| uint8* b, uint8* g, uint8* r) { | 
| @@ -1122,6 +1188,13 @@ static __inline void YuvHPixel(uint8 y, uint8 u, uint8 v, | 
| #undef BGH | 
| #undef BRH | 
| + | 
| 
 
harryjin
2015/09/18 22:48:31
Remove the extra lines here?
 
fbarchard
2015/09/18 22:51:11
Done.
 
 | 
| + | 
| + | 
| + | 
| + | 
| + | 
| + | 
| #if !defined(LIBYUV_DISABLE_NEON) && \ | 
| (defined(__ARM_NEON__) || defined(__aarch64__) || defined(LIBYUV_NEON)) | 
| // C mimic assembly. | 
| @@ -2314,13 +2387,6 @@ void I422ToUYVYRow_C(const uint8* src_y, | 
| } | 
| } | 
| -extern struct YuvConstants kYuvConstants; | 
| -extern struct YuvConstants kYuvJConstants; | 
| -extern struct YuvConstants kYuvHConstants; | 
| -extern struct YuvConstantsNEON kYuvConstantsNEON; | 
| -extern struct YuvConstantsNEON kYuvJConstantsNEON; | 
| -extern struct YuvConstantsNEON kYuvHConstantsNEON; | 
| - | 
| #define ANYYUV(NAMEANY, ANY_SIMD, YUVCONSTANTS) \ | 
| void NAMEANY(const uint8* y_buf, \ | 
| const uint8* u_buf, \ |