| Index: source/row_neon.cc
|
| diff --git a/source/row_neon.cc b/source/row_neon.cc
|
| index 9cc76e719928df6747059dc1a9825701d6452b03..fc243d9170800d40a44ec5365f69aa585fad5cad 100644
|
| --- a/source/row_neon.cc
|
| +++ b/source/row_neon.cc
|
| @@ -172,6 +172,46 @@ YuvConstantsNEON SIMD_ALIGNED(kYuvConstantsNEON) = {
|
| #undef BG
|
| #undef BR
|
|
|
| +// JPEG YUV to RGB reference
|
| +// * R = Y - V * -1.40200
|
| +// * G = Y - U * 0.34414 - V * 0.71414
|
| +// * B = Y - U * -1.77200
|
| +
|
| +// Y contribution to R,G,B. Scale and bias.
|
| +// TODO(fbarchard): Consider moving constants into a common header.
|
| +#define YGJ 16320 /* round(1.000 * 64 * 256 * 256 / 257) */
|
| +#define YGBJ 32 /* 64 / 2 */
|
| +
|
| +// U and V contributions to R,G,B.
|
| +#define UBJ -113 /* round(-1.77200 * 64) */
|
| +#define UGJ 22 /* round(0.34414 * 64) */
|
| +#define VGJ 46 /* round(0.71414 * 64) */
|
| +#define VRJ -90 /* round(-1.40200 * 64) */
|
| +
|
| +// 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)
|
| +
|
| +// JPEG constants for YUV to RGB.
|
| +YuvConstantsNEON SIMD_ALIGNED(kYuvJConstantsNEON) = {
|
| + { -UBJ, -UBJ, -UBJ, -UBJ, -VRJ, -VRJ, -VRJ, -VRJ, 0, 0, 0, 0, 0, 0, 0, 0 },
|
| + { UGJ, UGJ, UGJ, UGJ, VGJ, VGJ, VGJ, VGJ, 0, 0, 0, 0, 0, 0, 0, 0 },
|
| + { BBJ, BGJ, BRJ, 0, 0, 0, 0, 0 },
|
| + { 0x0101 * YGJ, 0, 0, 0 }
|
| +};
|
| +
|
| +#undef YGJ
|
| +#undef YGBJ
|
| +#undef UBJ
|
| +#undef UGJ
|
| +#undef VGJ
|
| +#undef VRJ
|
| +#undef BBJ
|
| +#undef BGJ
|
| +#undef BRJ
|
| +
|
| +
|
| void I444ToARGBRow_NEON(const uint8* src_y,
|
| const uint8* src_u,
|
| const uint8* src_v,
|
|
|