| Index: source/row_common.cc
 | 
| diff --git a/source/row_common.cc b/source/row_common.cc
 | 
| index 0b236e72ea5813abfea22a6475afaba0d9f97312..24cd5c3a9b59614524f300166c1e031452c87d3d 100644
 | 
| --- a/source/row_common.cc
 | 
| +++ b/source/row_common.cc
 | 
| @@ -1014,21 +1014,21 @@ void J400ToARGBRow_C(const uint8* src_y, uint8* dst_argb, int width) {
 | 
|  #define BG (UG * 128 + VG * 128 + YGB)
 | 
|  #define BR            (VR * 128 + YGB)
 | 
|  
 | 
| -#if defined(__arm__) || defined(__aarch64__)
 | 
| +#if defined(__aarch64__)
 | 
|  YuvConstants SIMD_ALIGNED(kYuvConstants) = {
 | 
| -  { -UB, -UB, -UB, -UB, -VR, -VR, -VR, -VR, 0, 0, 0, 0, 0, 0, 0, 0 },
 | 
| -  { UG, UG, UG, UG, VG, VG, VG, VG, 0, 0, 0, 0, 0, 0, 0, 0 },
 | 
| +  { -UB, 0, -UB, 0, -UB, 0, -UB, 0, -VR, 0, -VR, 0, -VR, 0, -VR, 0 },
 | 
| +  { UG, 0, UG, 0, UG, 0, UG, 0, VG, 0, VG, 0, VG, 0, VG, 0 },
 | 
|    { BB, BG, BR, 0, 0, 0, 0, 0 },
 | 
|    { 0x0101 * YG, 0, 0, 0 }
 | 
| -};
 | 
| + };
 | 
|  
 | 
| -YuvConstants SIMD_ALIGNED(kYvuConstants) = {
 | 
| -  { -VR, -VR, -VR, -VR, -UB, -UB, -UB, -UB, 0, 0, 0, 0, 0, 0, 0, 0 },
 | 
| -  { VG, VG, VG, VG, UG, UG, UG, UG, 0, 0, 0, 0, 0, 0, 0, 0 },
 | 
| +#elif defined(__arm__)
 | 
| +YuvConstants SIMD_ALIGNED(kYuvConstants) = {
 | 
| +  { -UB, -UB, -UB, -UB, -VR, -VR, -VR, -VR, 0, 0, 0, 0, 0, 0, 0, 0 },
 | 
| +  { UG, UG, UG, UG, VG, VG, VG, VG, 0, 0, 0, 0, 0, 0, 0, 0 },
 | 
|    { BB, BG, BR, 0, 0, 0, 0, 0 },
 | 
|    { 0x0101 * YG, 0, 0, 0 }
 | 
|  };
 | 
| -
 | 
|  #else
 | 
|  // BT601 constants for YUV to RGB.
 | 
|  YuvConstants SIMD_ALIGNED(kYuvConstants) = {
 | 
| @@ -1081,13 +1081,19 @@ static __inline void YPixel(uint8 y, uint8* b, uint8* g, uint8* r) {
 | 
|  static __inline void YuvPixel(uint8 y, uint8 u, uint8 v,
 | 
|                                uint8* b, uint8* g, uint8* r,
 | 
|                                struct YuvConstants* yuvconstants) {
 | 
| -#if defined(__arm__) || defined(__aarch64__)
 | 
| -
 | 
| +#if defined(__aarch64__)
 | 
| +  int UB = -yuvconstants->kUVToRB[0];
 | 
| +  int UG = yuvconstants->kUVToG[0];
 | 
| +  int VG = yuvconstants->kUVToG[8];
 | 
| +  int VR = -yuvconstants->kUVToRB[8];
 | 
| +  int BB = yuvconstants->kUVBiasBGR[0];
 | 
| +  int BG = yuvconstants->kUVBiasBGR[1];
 | 
| +  int BR = yuvconstants->kUVBiasBGR[2];
 | 
| +  int YG = yuvconstants->kYToRgb[0];
 | 
| +#elif defined(__arm__)
 | 
|    int UB = -yuvconstants->kUVToRB[0];
 | 
| -  int VB = 0;
 | 
|    int UG = yuvconstants->kUVToG[0];
 | 
|    int VG = yuvconstants->kUVToG[4];
 | 
| -  int UR = 0;
 | 
|    int VR = -yuvconstants->kUVToRB[4];
 | 
|    int BB = yuvconstants->kUVBiasBGR[0];
 | 
|    int BG = yuvconstants->kUVBiasBGR[1];
 | 
| @@ -1095,10 +1101,8 @@ static __inline void YuvPixel(uint8 y, uint8 u, uint8 v,
 | 
|    int YG = yuvconstants->kYToRgb[0];
 | 
|  #else
 | 
|    int UB = yuvconstants->kUVToB[0];
 | 
| -  int VB = yuvconstants->kUVToB[1];  // usually 0
 | 
|    int UG = yuvconstants->kUVToG[0];
 | 
|    int VG = yuvconstants->kUVToG[1];
 | 
| -  int UR = yuvconstants->kUVToR[0];  // usually 0
 | 
|    int VR = yuvconstants->kUVToR[1];
 | 
|    int BB = yuvconstants->kUVBiasB[0];
 | 
|    int BG = yuvconstants->kUVBiasG[0];
 | 
| @@ -1106,9 +1110,9 @@ static __inline void YuvPixel(uint8 y, uint8 u, uint8 v,
 | 
|    int YG = yuvconstants->kYToRgb[0];
 | 
|  #endif
 | 
|    uint32 y1 = (uint32)(y * 0x0101 * YG) >> 16;
 | 
| -  *b = Clamp((int32)(-(u * UB + v * VB) + y1 + BB) >> 6);
 | 
| +  *b = Clamp((int32)(-(u * UB         ) + y1 + BB) >> 6);
 | 
|    *g = Clamp((int32)(-(u * UG + v * VG) + y1 + BG) >> 6);
 | 
| -  *r = Clamp((int32)(-(u * UR + v * VR) + y1 + BR) >> 6);
 | 
| +  *r = Clamp((int32)(-(         v * VR) + y1 + BR) >> 6);
 | 
|  }
 | 
|  
 | 
|  // JPEG YUV to RGB reference
 | 
| 
 |