| Index: source/libvpx/third_party/libyuv/source/convert_from_argb.cc
 | 
| diff --git a/source/libvpx/third_party/libyuv/source/convert_from_argb.cc b/source/libvpx/third_party/libyuv/source/convert_from_argb.cc
 | 
| index de461ddb0464022b35d8616f924aaf73d20b0a8e..dc2186a6a0843ec857a0a3d120666124d30daa58 100644
 | 
| --- a/source/libvpx/third_party/libyuv/source/convert_from_argb.cc
 | 
| +++ b/source/libvpx/third_party/libyuv/source/convert_from_argb.cc
 | 
| @@ -12,7 +12,6 @@
 | 
|  
 | 
|  #include "libyuv/basic_types.h"
 | 
|  #include "libyuv/cpu_id.h"
 | 
| -#include "libyuv/format_conversion.h"
 | 
|  #include "libyuv/planar_functions.h"
 | 
|  #include "libyuv/row.h"
 | 
|  
 | 
| @@ -51,17 +50,15 @@ int ARGBToI444(const uint8* src_argb, int src_stride_argb,
 | 
|      src_stride_argb = dst_stride_y = dst_stride_u = dst_stride_v = 0;
 | 
|    }
 | 
|  #if defined(HAS_ARGBTOUV444ROW_SSSE3)
 | 
| -    if (TestCpuFlag(kCpuHasSSSE3) && width >= 16) {
 | 
| +    if (TestCpuFlag(kCpuHasSSSE3)) {
 | 
|        ARGBToUV444Row = ARGBToUV444Row_Any_SSSE3;
 | 
|        if (IS_ALIGNED(width, 16)) {
 | 
| -        ARGBToUV444Row = ARGBToUV444Row_Unaligned_SSSE3;
 | 
| -        if (IS_ALIGNED(src_argb, 16) && IS_ALIGNED(src_stride_argb, 16)) {
 | 
| -          ARGBToUV444Row = ARGBToUV444Row_SSSE3;
 | 
| -        }
 | 
| +        ARGBToUV444Row = ARGBToUV444Row_SSSE3;
 | 
|        }
 | 
|    }
 | 
| -#elif defined(HAS_ARGBTOUV444ROW_NEON)
 | 
| -  if (TestCpuFlag(kCpuHasNEON) && width >= 8) {
 | 
| +#endif
 | 
| +#if defined(HAS_ARGBTOUV444ROW_NEON)
 | 
| +  if (TestCpuFlag(kCpuHasNEON)) {
 | 
|      ARGBToUV444Row = ARGBToUV444Row_Any_NEON;
 | 
|      if (IS_ALIGNED(width, 8)) {
 | 
|        ARGBToUV444Row = ARGBToUV444Row_NEON;
 | 
| @@ -69,19 +66,16 @@ int ARGBToI444(const uint8* src_argb, int src_stride_argb,
 | 
|    }
 | 
|  #endif
 | 
|  #if defined(HAS_ARGBTOYROW_SSSE3)
 | 
| -  if (TestCpuFlag(kCpuHasSSSE3) && width >= 16) {
 | 
| +  if (TestCpuFlag(kCpuHasSSSE3)) {
 | 
|      ARGBToYRow = ARGBToYRow_Any_SSSE3;
 | 
|      if (IS_ALIGNED(width, 16)) {
 | 
| -      ARGBToYRow = ARGBToYRow_Unaligned_SSSE3;
 | 
| -      if (IS_ALIGNED(src_argb, 16) && IS_ALIGNED(src_stride_argb, 16) &&
 | 
| -          IS_ALIGNED(dst_y, 16) && IS_ALIGNED(dst_stride_y, 16)) {
 | 
| -        ARGBToYRow = ARGBToYRow_SSSE3;
 | 
| -      }
 | 
| +      ARGBToYRow = ARGBToYRow_SSSE3;
 | 
|      }
 | 
|    }
 | 
|  
 | 
| -#elif defined(HAS_ARGBTOYROW_NEON)
 | 
| -  if (TestCpuFlag(kCpuHasNEON) && width >= 8) {
 | 
| +#endif
 | 
| +#if defined(HAS_ARGBTOYROW_NEON)
 | 
| +  if (TestCpuFlag(kCpuHasNEON)) {
 | 
|      ARGBToYRow = ARGBToYRow_Any_NEON;
 | 
|      if (IS_ALIGNED(width, 8)) {
 | 
|        ARGBToYRow = ARGBToYRow_NEON;
 | 
| @@ -130,17 +124,15 @@ int ARGBToI422(const uint8* src_argb, int src_stride_argb,
 | 
|      src_stride_argb = dst_stride_y = dst_stride_u = dst_stride_v = 0;
 | 
|    }
 | 
|  #if defined(HAS_ARGBTOUV422ROW_SSSE3)
 | 
| -  if (TestCpuFlag(kCpuHasSSSE3) && width >= 16) {
 | 
| +  if (TestCpuFlag(kCpuHasSSSE3)) {
 | 
|      ARGBToUV422Row = ARGBToUV422Row_Any_SSSE3;
 | 
|      if (IS_ALIGNED(width, 16)) {
 | 
| -      ARGBToUV422Row = ARGBToUV422Row_Unaligned_SSSE3;
 | 
| -      if (IS_ALIGNED(src_argb, 16) && IS_ALIGNED(src_stride_argb, 16)) {
 | 
| -        ARGBToUV422Row = ARGBToUV422Row_SSSE3;
 | 
| -      }
 | 
| +      ARGBToUV422Row = ARGBToUV422Row_SSSE3;
 | 
|      }
 | 
|    }
 | 
| -#elif defined(HAS_ARGBTOUV422ROW_NEON)
 | 
| -  if (TestCpuFlag(kCpuHasNEON) && width >= 16) {
 | 
| +#endif
 | 
| +#if defined(HAS_ARGBTOUV422ROW_NEON)
 | 
| +  if (TestCpuFlag(kCpuHasNEON)) {
 | 
|      ARGBToUV422Row = ARGBToUV422Row_Any_NEON;
 | 
|      if (IS_ALIGNED(width, 16)) {
 | 
|        ARGBToUV422Row = ARGBToUV422Row_NEON;
 | 
| @@ -149,18 +141,15 @@ int ARGBToI422(const uint8* src_argb, int src_stride_argb,
 | 
|  #endif
 | 
|  
 | 
|  #if defined(HAS_ARGBTOYROW_SSSE3)
 | 
| -  if (TestCpuFlag(kCpuHasSSSE3) && width >= 16) {
 | 
| +  if (TestCpuFlag(kCpuHasSSSE3)) {
 | 
|      ARGBToYRow = ARGBToYRow_Any_SSSE3;
 | 
|      if (IS_ALIGNED(width, 16)) {
 | 
| -      ARGBToYRow = ARGBToYRow_Unaligned_SSSE3;
 | 
| -      if (IS_ALIGNED(src_argb, 16) && IS_ALIGNED(src_stride_argb, 16) &&
 | 
| -          IS_ALIGNED(dst_y, 16) && IS_ALIGNED(dst_stride_y, 16)) {
 | 
| -        ARGBToYRow = ARGBToYRow_SSSE3;
 | 
| -      }
 | 
| +      ARGBToYRow = ARGBToYRow_SSSE3;
 | 
|      }
 | 
|    }
 | 
| -#elif defined(HAS_ARGBTOYROW_NEON)
 | 
| -  if (TestCpuFlag(kCpuHasNEON) && width >= 8) {
 | 
| +#endif
 | 
| +#if defined(HAS_ARGBTOYROW_NEON)
 | 
| +  if (TestCpuFlag(kCpuHasNEON)) {
 | 
|      ARGBToYRow = ARGBToYRow_Any_NEON;
 | 
|      if (IS_ALIGNED(width, 8)) {
 | 
|        ARGBToYRow = ARGBToYRow_NEON;
 | 
| @@ -209,19 +198,15 @@ int ARGBToI411(const uint8* src_argb, int src_stride_argb,
 | 
|      src_stride_argb = dst_stride_y = dst_stride_u = dst_stride_v = 0;
 | 
|    }
 | 
|  #if defined(HAS_ARGBTOYROW_SSSE3)
 | 
| -  if (TestCpuFlag(kCpuHasSSSE3) && width >= 16) {
 | 
| +  if (TestCpuFlag(kCpuHasSSSE3)) {
 | 
|      ARGBToYRow = ARGBToYRow_Any_SSSE3;
 | 
|      if (IS_ALIGNED(width, 16)) {
 | 
| -      ARGBToYRow = ARGBToYRow_Unaligned_SSSE3;
 | 
| -      if (IS_ALIGNED(src_argb, 16) && IS_ALIGNED(src_stride_argb, 16) &&
 | 
| -          IS_ALIGNED(dst_y, 16) && IS_ALIGNED(dst_stride_y, 16)) {
 | 
| -        ARGBToYRow = ARGBToYRow_SSSE3;
 | 
| -      }
 | 
| +      ARGBToYRow = ARGBToYRow_SSSE3;
 | 
|      }
 | 
|    }
 | 
|  #endif
 | 
|  #if defined(HAS_ARGBTOYROW_AVX2)
 | 
| -  if (TestCpuFlag(kCpuHasAVX2) && width >= 32) {
 | 
| +  if (TestCpuFlag(kCpuHasAVX2)) {
 | 
|      ARGBToYRow = ARGBToYRow_Any_AVX2;
 | 
|      if (IS_ALIGNED(width, 32)) {
 | 
|        ARGBToYRow = ARGBToYRow_AVX2;
 | 
| @@ -229,7 +214,7 @@ int ARGBToI411(const uint8* src_argb, int src_stride_argb,
 | 
|    }
 | 
|  #endif
 | 
|  #if defined(HAS_ARGBTOYROW_NEON)
 | 
| -  if (TestCpuFlag(kCpuHasNEON) && width >= 8) {
 | 
| +  if (TestCpuFlag(kCpuHasNEON)) {
 | 
|      ARGBToYRow = ARGBToYRow_Any_NEON;
 | 
|      if (IS_ALIGNED(width, 8)) {
 | 
|        ARGBToYRow = ARGBToYRow_NEON;
 | 
| @@ -237,7 +222,7 @@ int ARGBToI411(const uint8* src_argb, int src_stride_argb,
 | 
|    }
 | 
|  #endif
 | 
|  #if defined(HAS_ARGBTOUV411ROW_NEON)
 | 
| -  if (TestCpuFlag(kCpuHasNEON) && width >= 32) {
 | 
| +  if (TestCpuFlag(kCpuHasNEON)) {
 | 
|      ARGBToUV411Row = ARGBToUV411Row_Any_NEON;
 | 
|      if (IS_ALIGNED(width, 32)) {
 | 
|        ARGBToUV411Row = ARGBToUV411Row_NEON;
 | 
| @@ -281,22 +266,17 @@ int ARGBToNV12(const uint8* src_argb, int src_stride_argb,
 | 
|      src_stride_argb = -src_stride_argb;
 | 
|    }
 | 
|  #if defined(HAS_ARGBTOYROW_SSSE3) && defined(HAS_ARGBTOUVROW_SSSE3)
 | 
| -  if (TestCpuFlag(kCpuHasSSSE3) && width >= 16) {
 | 
| +  if (TestCpuFlag(kCpuHasSSSE3)) {
 | 
|      ARGBToUVRow = ARGBToUVRow_Any_SSSE3;
 | 
|      ARGBToYRow = ARGBToYRow_Any_SSSE3;
 | 
|      if (IS_ALIGNED(width, 16)) {
 | 
| -      ARGBToUVRow = ARGBToUVRow_Unaligned_SSSE3;
 | 
| -      ARGBToYRow = ARGBToYRow_Unaligned_SSSE3;
 | 
| -      if (IS_ALIGNED(src_argb, 16) && IS_ALIGNED(src_stride_argb, 16)) {
 | 
| -        ARGBToUVRow = ARGBToUVRow_SSSE3;
 | 
| -        if (IS_ALIGNED(dst_y, 16) && IS_ALIGNED(dst_stride_y, 16)) {
 | 
| -          ARGBToYRow = ARGBToYRow_SSSE3;
 | 
| -        }
 | 
| -      }
 | 
| +      ARGBToUVRow = ARGBToUVRow_SSSE3;
 | 
| +      ARGBToYRow = ARGBToYRow_SSSE3;
 | 
|      }
 | 
|    }
 | 
| -#elif defined(HAS_ARGBTOYROW_NEON)
 | 
| -  if (TestCpuFlag(kCpuHasNEON) && width >= 8) {
 | 
| +#endif
 | 
| +#if defined(HAS_ARGBTOYROW_NEON)
 | 
| +  if (TestCpuFlag(kCpuHasNEON)) {
 | 
|      ARGBToYRow = ARGBToYRow_Any_NEON;
 | 
|      if (IS_ALIGNED(width, 8)) {
 | 
|        ARGBToYRow = ARGBToYRow_NEON;
 | 
| @@ -304,7 +284,7 @@ int ARGBToNV12(const uint8* src_argb, int src_stride_argb,
 | 
|    }
 | 
|  #endif
 | 
|  #if defined(HAS_ARGBTOUVROW_NEON)
 | 
| -  if (TestCpuFlag(kCpuHasNEON) && width >= 16) {
 | 
| +  if (TestCpuFlag(kCpuHasNEON)) {
 | 
|      ARGBToUVRow = ARGBToUVRow_Any_NEON;
 | 
|      if (IS_ALIGNED(width, 16)) {
 | 
|        ARGBToUVRow = ARGBToUVRow_NEON;
 | 
| @@ -312,18 +292,15 @@ int ARGBToNV12(const uint8* src_argb, int src_stride_argb,
 | 
|    }
 | 
|  #endif
 | 
|  #if defined(HAS_MERGEUVROW_SSE2)
 | 
| -  if (TestCpuFlag(kCpuHasSSE2) && halfwidth >= 16) {
 | 
| +  if (TestCpuFlag(kCpuHasSSE2)) {
 | 
|      MergeUVRow_ = MergeUVRow_Any_SSE2;
 | 
|      if (IS_ALIGNED(halfwidth, 16)) {
 | 
| -      MergeUVRow_ = MergeUVRow_Unaligned_SSE2;
 | 
| -      if (IS_ALIGNED(dst_uv, 16) && IS_ALIGNED(dst_stride_uv, 16)) {
 | 
| -        MergeUVRow_ = MergeUVRow_SSE2;
 | 
| -      }
 | 
| +      MergeUVRow_ = MergeUVRow_SSE2;
 | 
|      }
 | 
|    }
 | 
|  #endif
 | 
|  #if defined(HAS_MERGEUVROW_AVX2)
 | 
| -  if (TestCpuFlag(kCpuHasAVX2) && halfwidth >= 32) {
 | 
| +  if (TestCpuFlag(kCpuHasAVX2)) {
 | 
|      MergeUVRow_ = MergeUVRow_Any_AVX2;
 | 
|      if (IS_ALIGNED(halfwidth, 32)) {
 | 
|        MergeUVRow_ = MergeUVRow_AVX2;
 | 
| @@ -331,7 +308,7 @@ int ARGBToNV12(const uint8* src_argb, int src_stride_argb,
 | 
|    }
 | 
|  #endif
 | 
|  #if defined(HAS_MERGEUVROW_NEON)
 | 
| -  if (TestCpuFlag(kCpuHasNEON) && halfwidth >= 16) {
 | 
| +  if (TestCpuFlag(kCpuHasNEON)) {
 | 
|      MergeUVRow_ = MergeUVRow_Any_NEON;
 | 
|      if (IS_ALIGNED(halfwidth, 16)) {
 | 
|        MergeUVRow_ = MergeUVRow_NEON;
 | 
| @@ -388,22 +365,17 @@ int ARGBToNV21(const uint8* src_argb, int src_stride_argb,
 | 
|      src_stride_argb = -src_stride_argb;
 | 
|    }
 | 
|  #if defined(HAS_ARGBTOYROW_SSSE3) && defined(HAS_ARGBTOUVROW_SSSE3)
 | 
| -  if (TestCpuFlag(kCpuHasSSSE3) && width >= 16) {
 | 
| +  if (TestCpuFlag(kCpuHasSSSE3)) {
 | 
|      ARGBToUVRow = ARGBToUVRow_Any_SSSE3;
 | 
|      ARGBToYRow = ARGBToYRow_Any_SSSE3;
 | 
|      if (IS_ALIGNED(width, 16)) {
 | 
| -      ARGBToUVRow = ARGBToUVRow_Unaligned_SSSE3;
 | 
| -      ARGBToYRow = ARGBToYRow_Unaligned_SSSE3;
 | 
| -      if (IS_ALIGNED(src_argb, 16) && IS_ALIGNED(src_stride_argb, 16)) {
 | 
| -        ARGBToUVRow = ARGBToUVRow_SSSE3;
 | 
| -        if (IS_ALIGNED(dst_y, 16) && IS_ALIGNED(dst_stride_y, 16)) {
 | 
| -          ARGBToYRow = ARGBToYRow_SSSE3;
 | 
| -        }
 | 
| -      }
 | 
| +      ARGBToUVRow = ARGBToUVRow_SSSE3;
 | 
| +      ARGBToYRow = ARGBToYRow_SSSE3;
 | 
|      }
 | 
|    }
 | 
| -#elif defined(HAS_ARGBTOYROW_NEON)
 | 
| -  if (TestCpuFlag(kCpuHasNEON) && width >= 8) {
 | 
| +#endif
 | 
| +#if defined(HAS_ARGBTOYROW_NEON)
 | 
| +  if (TestCpuFlag(kCpuHasNEON)) {
 | 
|      ARGBToYRow = ARGBToYRow_Any_NEON;
 | 
|      if (IS_ALIGNED(width, 8)) {
 | 
|        ARGBToYRow = ARGBToYRow_NEON;
 | 
| @@ -411,7 +383,7 @@ int ARGBToNV21(const uint8* src_argb, int src_stride_argb,
 | 
|    }
 | 
|  #endif
 | 
|  #if defined(HAS_ARGBTOUVROW_NEON)
 | 
| -  if (TestCpuFlag(kCpuHasNEON) && width >= 16) {
 | 
| +  if (TestCpuFlag(kCpuHasNEON)) {
 | 
|      ARGBToUVRow = ARGBToUVRow_Any_NEON;
 | 
|      if (IS_ALIGNED(width, 16)) {
 | 
|        ARGBToUVRow = ARGBToUVRow_NEON;
 | 
| @@ -419,18 +391,15 @@ int ARGBToNV21(const uint8* src_argb, int src_stride_argb,
 | 
|    }
 | 
|  #endif
 | 
|  #if defined(HAS_MERGEUVROW_SSE2)
 | 
| -  if (TestCpuFlag(kCpuHasSSE2) && halfwidth >= 16) {
 | 
| +  if (TestCpuFlag(kCpuHasSSE2)) {
 | 
|      MergeUVRow_ = MergeUVRow_Any_SSE2;
 | 
|      if (IS_ALIGNED(halfwidth, 16)) {
 | 
| -      MergeUVRow_ = MergeUVRow_Unaligned_SSE2;
 | 
| -      if (IS_ALIGNED(dst_uv, 16) && IS_ALIGNED(dst_stride_uv, 16)) {
 | 
| -        MergeUVRow_ = MergeUVRow_SSE2;
 | 
| -      }
 | 
| +      MergeUVRow_ = MergeUVRow_SSE2;
 | 
|      }
 | 
|    }
 | 
|  #endif
 | 
|  #if defined(HAS_MERGEUVROW_AVX2)
 | 
| -  if (TestCpuFlag(kCpuHasAVX2) && halfwidth >= 32) {
 | 
| +  if (TestCpuFlag(kCpuHasAVX2)) {
 | 
|      MergeUVRow_ = MergeUVRow_Any_AVX2;
 | 
|      if (IS_ALIGNED(halfwidth, 32)) {
 | 
|        MergeUVRow_ = MergeUVRow_AVX2;
 | 
| @@ -438,7 +407,7 @@ int ARGBToNV21(const uint8* src_argb, int src_stride_argb,
 | 
|    }
 | 
|  #endif
 | 
|  #if defined(HAS_MERGEUVROW_NEON)
 | 
| -  if (TestCpuFlag(kCpuHasNEON) && halfwidth >= 16) {
 | 
| +  if (TestCpuFlag(kCpuHasNEON)) {
 | 
|      MergeUVRow_ = MergeUVRow_Any_NEON;
 | 
|      if (IS_ALIGNED(halfwidth, 16)) {
 | 
|        MergeUVRow_ = MergeUVRow_NEON;
 | 
| @@ -500,17 +469,15 @@ int ARGBToYUY2(const uint8* src_argb, int src_stride_argb,
 | 
|      src_stride_argb = dst_stride_yuy2 = 0;
 | 
|    }
 | 
|  #if defined(HAS_ARGBTOUV422ROW_SSSE3)
 | 
| -  if (TestCpuFlag(kCpuHasSSSE3) && width >= 16) {
 | 
| +  if (TestCpuFlag(kCpuHasSSSE3)) {
 | 
|      ARGBToUV422Row = ARGBToUV422Row_Any_SSSE3;
 | 
|      if (IS_ALIGNED(width, 16)) {
 | 
| -      ARGBToUV422Row = ARGBToUV422Row_Unaligned_SSSE3;
 | 
| -      if (IS_ALIGNED(src_argb, 16) && IS_ALIGNED(src_stride_argb, 16)) {
 | 
| -        ARGBToUV422Row = ARGBToUV422Row_SSSE3;
 | 
| -      }
 | 
| +      ARGBToUV422Row = ARGBToUV422Row_SSSE3;
 | 
|      }
 | 
|    }
 | 
| -#elif defined(HAS_ARGBTOUV422ROW_NEON)
 | 
| -  if (TestCpuFlag(kCpuHasNEON) && width >= 16) {
 | 
| +#endif
 | 
| +#if defined(HAS_ARGBTOUV422ROW_NEON)
 | 
| +  if (TestCpuFlag(kCpuHasNEON)) {
 | 
|      ARGBToUV422Row = ARGBToUV422Row_Any_NEON;
 | 
|      if (IS_ALIGNED(width, 16)) {
 | 
|        ARGBToUV422Row = ARGBToUV422Row_NEON;
 | 
| @@ -518,17 +485,15 @@ int ARGBToYUY2(const uint8* src_argb, int src_stride_argb,
 | 
|    }
 | 
|  #endif
 | 
|  #if defined(HAS_ARGBTOYROW_SSSE3)
 | 
| -  if (TestCpuFlag(kCpuHasSSSE3) && width >= 16) {
 | 
| +  if (TestCpuFlag(kCpuHasSSSE3)) {
 | 
|      ARGBToYRow = ARGBToYRow_Any_SSSE3;
 | 
|      if (IS_ALIGNED(width, 16)) {
 | 
| -      ARGBToYRow = ARGBToYRow_Unaligned_SSSE3;
 | 
| -      if (IS_ALIGNED(src_argb, 16) && IS_ALIGNED(src_stride_argb, 16)) {
 | 
| -        ARGBToYRow = ARGBToYRow_SSSE3;
 | 
| -      }
 | 
| +      ARGBToYRow = ARGBToYRow_SSSE3;
 | 
|      }
 | 
|    }
 | 
| -#elif defined(HAS_ARGBTOYROW_NEON)
 | 
| -  if (TestCpuFlag(kCpuHasNEON) && width >= 8) {
 | 
| +#endif
 | 
| +#if defined(HAS_ARGBTOYROW_NEON)
 | 
| +  if (TestCpuFlag(kCpuHasNEON)) {
 | 
|      ARGBToYRow = ARGBToYRow_Any_NEON;
 | 
|      if (IS_ALIGNED(width, 8)) {
 | 
|        ARGBToYRow = ARGBToYRow_NEON;
 | 
| @@ -537,14 +502,15 @@ int ARGBToYUY2(const uint8* src_argb, int src_stride_argb,
 | 
|  #endif
 | 
|  
 | 
|  #if defined(HAS_I422TOYUY2ROW_SSE2)
 | 
| -  if (TestCpuFlag(kCpuHasSSE2) && width >= 16) {
 | 
| +  if (TestCpuFlag(kCpuHasSSE2)) {
 | 
|      I422ToYUY2Row = I422ToYUY2Row_Any_SSE2;
 | 
|      if (IS_ALIGNED(width, 16)) {
 | 
|        I422ToYUY2Row = I422ToYUY2Row_SSE2;
 | 
|      }
 | 
|    }
 | 
| -#elif defined(HAS_I422TOYUY2ROW_NEON)
 | 
| -  if (TestCpuFlag(kCpuHasNEON) && width >= 16) {
 | 
| +#endif
 | 
| +#if defined(HAS_I422TOYUY2ROW_NEON)
 | 
| +  if (TestCpuFlag(kCpuHasNEON)) {
 | 
|      I422ToYUY2Row = I422ToYUY2Row_Any_NEON;
 | 
|      if (IS_ALIGNED(width, 16)) {
 | 
|        I422ToYUY2Row = I422ToYUY2Row_NEON;
 | 
| @@ -602,17 +568,15 @@ int ARGBToUYVY(const uint8* src_argb, int src_stride_argb,
 | 
|      src_stride_argb = dst_stride_uyvy = 0;
 | 
|    }
 | 
|  #if defined(HAS_ARGBTOUV422ROW_SSSE3)
 | 
| -  if (TestCpuFlag(kCpuHasSSSE3) && width >= 16) {
 | 
| +  if (TestCpuFlag(kCpuHasSSSE3)) {
 | 
|      ARGBToUV422Row = ARGBToUV422Row_Any_SSSE3;
 | 
|      if (IS_ALIGNED(width, 16)) {
 | 
| -      ARGBToUV422Row = ARGBToUV422Row_Unaligned_SSSE3;
 | 
| -      if (IS_ALIGNED(src_argb, 16) && IS_ALIGNED(src_stride_argb, 16)) {
 | 
| -        ARGBToUV422Row = ARGBToUV422Row_SSSE3;
 | 
| -      }
 | 
| +      ARGBToUV422Row = ARGBToUV422Row_SSSE3;
 | 
|      }
 | 
|    }
 | 
| -#elif defined(HAS_ARGBTOUV422ROW_NEON)
 | 
| -  if (TestCpuFlag(kCpuHasNEON) && width >= 16) {
 | 
| +#endif
 | 
| +#if defined(HAS_ARGBTOUV422ROW_NEON)
 | 
| +  if (TestCpuFlag(kCpuHasNEON)) {
 | 
|      ARGBToUV422Row = ARGBToUV422Row_Any_NEON;
 | 
|      if (IS_ALIGNED(width, 16)) {
 | 
|        ARGBToUV422Row = ARGBToUV422Row_NEON;
 | 
| @@ -620,17 +584,15 @@ int ARGBToUYVY(const uint8* src_argb, int src_stride_argb,
 | 
|    }
 | 
|  #endif
 | 
|  #if defined(HAS_ARGBTOYROW_SSSE3)
 | 
| -  if (TestCpuFlag(kCpuHasSSSE3) && width >= 16) {
 | 
| +  if (TestCpuFlag(kCpuHasSSSE3)) {
 | 
|      ARGBToYRow = ARGBToYRow_Any_SSSE3;
 | 
|      if (IS_ALIGNED(width, 16)) {
 | 
| -      ARGBToYRow = ARGBToYRow_Unaligned_SSSE3;
 | 
| -      if (IS_ALIGNED(src_argb, 16) && IS_ALIGNED(src_stride_argb, 16)) {
 | 
| -        ARGBToYRow = ARGBToYRow_SSSE3;
 | 
| -      }
 | 
| +      ARGBToYRow = ARGBToYRow_SSSE3;
 | 
|      }
 | 
|    }
 | 
| -#elif defined(HAS_ARGBTOYROW_NEON)
 | 
| -  if (TestCpuFlag(kCpuHasNEON) && width >= 8) {
 | 
| +#endif
 | 
| +#if defined(HAS_ARGBTOYROW_NEON)
 | 
| +  if (TestCpuFlag(kCpuHasNEON)) {
 | 
|      ARGBToYRow = ARGBToYRow_Any_NEON;
 | 
|      if (IS_ALIGNED(width, 8)) {
 | 
|        ARGBToYRow = ARGBToYRow_NEON;
 | 
| @@ -639,14 +601,15 @@ int ARGBToUYVY(const uint8* src_argb, int src_stride_argb,
 | 
|  #endif
 | 
|  
 | 
|  #if defined(HAS_I422TOUYVYROW_SSE2)
 | 
| -  if (TestCpuFlag(kCpuHasSSE2) && width >= 16) {
 | 
| +  if (TestCpuFlag(kCpuHasSSE2)) {
 | 
|      I422ToUYVYRow = I422ToUYVYRow_Any_SSE2;
 | 
|      if (IS_ALIGNED(width, 16)) {
 | 
|        I422ToUYVYRow = I422ToUYVYRow_SSE2;
 | 
|      }
 | 
|    }
 | 
| -#elif defined(HAS_I422TOUYVYROW_NEON)
 | 
| -  if (TestCpuFlag(kCpuHasNEON) && width >= 16) {
 | 
| +#endif
 | 
| +#if defined(HAS_I422TOUYVYROW_NEON)
 | 
| +  if (TestCpuFlag(kCpuHasNEON)) {
 | 
|      I422ToUYVYRow = I422ToUYVYRow_Any_NEON;
 | 
|      if (IS_ALIGNED(width, 16)) {
 | 
|        I422ToUYVYRow = I422ToUYVYRow_NEON;
 | 
| @@ -697,19 +660,15 @@ int ARGBToI400(const uint8* src_argb, int src_stride_argb,
 | 
|      src_stride_argb = dst_stride_y = 0;
 | 
|    }
 | 
|  #if defined(HAS_ARGBTOYROW_SSSE3)
 | 
| -  if (TestCpuFlag(kCpuHasSSSE3) && width >= 16) {
 | 
| +  if (TestCpuFlag(kCpuHasSSSE3)) {
 | 
|      ARGBToYRow = ARGBToYRow_Any_SSSE3;
 | 
|      if (IS_ALIGNED(width, 16)) {
 | 
| -      ARGBToYRow = ARGBToYRow_Unaligned_SSSE3;
 | 
| -      if (IS_ALIGNED(src_argb, 16) && IS_ALIGNED(src_stride_argb, 16) &&
 | 
| -          IS_ALIGNED(dst_y, 16) && IS_ALIGNED(dst_stride_y, 16)) {
 | 
| -        ARGBToYRow = ARGBToYRow_SSSE3;
 | 
| -      }
 | 
| +      ARGBToYRow = ARGBToYRow_SSSE3;
 | 
|      }
 | 
|    }
 | 
|  #endif
 | 
|  #if defined(HAS_ARGBTOYROW_AVX2)
 | 
| -  if (TestCpuFlag(kCpuHasAVX2) && width >= 32) {
 | 
| +  if (TestCpuFlag(kCpuHasAVX2)) {
 | 
|      ARGBToYRow = ARGBToYRow_Any_AVX2;
 | 
|      if (IS_ALIGNED(width, 32)) {
 | 
|        ARGBToYRow = ARGBToYRow_AVX2;
 | 
| @@ -717,7 +676,7 @@ int ARGBToI400(const uint8* src_argb, int src_stride_argb,
 | 
|    }
 | 
|  #endif
 | 
|  #if defined(HAS_ARGBTOYROW_NEON)
 | 
| -  if (TestCpuFlag(kCpuHasNEON) && width >= 8) {
 | 
| +  if (TestCpuFlag(kCpuHasNEON)) {
 | 
|      ARGBToYRow = ARGBToYRow_Any_NEON;
 | 
|      if (IS_ALIGNED(width, 8)) {
 | 
|        ARGBToYRow = ARGBToYRow_NEON;
 | 
| @@ -773,14 +732,15 @@ int ARGBToRGB24(const uint8* src_argb, int src_stride_argb,
 | 
|      src_stride_argb = dst_stride_rgb24 = 0;
 | 
|    }
 | 
|  #if defined(HAS_ARGBTORGB24ROW_SSSE3)
 | 
| -  if (TestCpuFlag(kCpuHasSSSE3) && width >= 16) {
 | 
| +  if (TestCpuFlag(kCpuHasSSSE3)) {
 | 
|      ARGBToRGB24Row = ARGBToRGB24Row_Any_SSSE3;
 | 
|      if (IS_ALIGNED(width, 16)) {
 | 
|        ARGBToRGB24Row = ARGBToRGB24Row_SSSE3;
 | 
|      }
 | 
|    }
 | 
| -#elif defined(HAS_ARGBTORGB24ROW_NEON)
 | 
| -  if (TestCpuFlag(kCpuHasNEON) && width >= 8) {
 | 
| +#endif
 | 
| +#if defined(HAS_ARGBTORGB24ROW_NEON)
 | 
| +  if (TestCpuFlag(kCpuHasNEON)) {
 | 
|      ARGBToRGB24Row = ARGBToRGB24Row_Any_NEON;
 | 
|      if (IS_ALIGNED(width, 8)) {
 | 
|        ARGBToRGB24Row = ARGBToRGB24Row_NEON;
 | 
| @@ -820,14 +780,15 @@ int ARGBToRAW(const uint8* src_argb, int src_stride_argb,
 | 
|      src_stride_argb = dst_stride_raw = 0;
 | 
|    }
 | 
|  #if defined(HAS_ARGBTORAWROW_SSSE3)
 | 
| -  if (TestCpuFlag(kCpuHasSSSE3) && width >= 16) {
 | 
| +  if (TestCpuFlag(kCpuHasSSSE3)) {
 | 
|      ARGBToRAWRow = ARGBToRAWRow_Any_SSSE3;
 | 
|      if (IS_ALIGNED(width, 16)) {
 | 
|        ARGBToRAWRow = ARGBToRAWRow_SSSE3;
 | 
|      }
 | 
|    }
 | 
| -#elif defined(HAS_ARGBTORAWROW_NEON)
 | 
| -  if (TestCpuFlag(kCpuHasNEON) && width >= 8) {
 | 
| +#endif
 | 
| +#if defined(HAS_ARGBTORAWROW_NEON)
 | 
| +  if (TestCpuFlag(kCpuHasNEON)) {
 | 
|      ARGBToRAWRow = ARGBToRAWRow_Any_NEON;
 | 
|      if (IS_ALIGNED(width, 8)) {
 | 
|        ARGBToRAWRow = ARGBToRAWRow_NEON;
 | 
| @@ -843,6 +804,46 @@ int ARGBToRAW(const uint8* src_argb, int src_stride_argb,
 | 
|    return 0;
 | 
|  }
 | 
|  
 | 
| +static const uint8 kDither8x8[64] = {
 | 
| +  0, 128, 32, 160,  8, 136, 40, 168,
 | 
| +  192, 64, 224, 96, 200, 72, 232, 104,
 | 
| +  48, 176, 16, 144, 56, 184, 24, 152,
 | 
| +  240, 112, 208, 80, 248, 120, 216, 88,
 | 
| +  12, 140, 44, 172,  4, 132, 36, 164,
 | 
| +  204, 76, 236, 108, 196, 68, 228, 100,
 | 
| +  60, 188, 28, 156, 52, 180, 20, 148,
 | 
| +  252, 124, 220, 92, 244, 116, 212, 84,
 | 
| +};
 | 
| +
 | 
| +// Convert ARGB To RGB565 with 8x8 dither matrix (64 bytes).
 | 
| +LIBYUV_API
 | 
| +int ARGBToRGB565Dither(const uint8* src_argb, int src_stride_argb,
 | 
| +                       uint8* dst_rgb565, int dst_stride_rgb565,
 | 
| +                       const uint8* dither8x8, int width, int height) {
 | 
| +  int y;
 | 
| +  void (*ARGBToRGB565DitherRow)(const uint8* src_argb, uint8* dst_rgb,
 | 
| +      const uint8* dither8x8, int pix) = ARGBToRGB565DitherRow_C;
 | 
| +  if (!src_argb || !dst_rgb565 || width <= 0 || height == 0) {
 | 
| +    return -1;
 | 
| +  }
 | 
| +  if (height < 0) {
 | 
| +    height = -height;
 | 
| +    src_argb = src_argb + (height - 1) * src_stride_argb;
 | 
| +    src_stride_argb = -src_stride_argb;
 | 
| +  }
 | 
| +  if (!dither8x8) {
 | 
| +    dither8x8 = kDither8x8;
 | 
| +
 | 
| +  }
 | 
| +  for (y = 0; y < height; ++y) {
 | 
| +    ARGBToRGB565DitherRow(src_argb, dst_rgb565,
 | 
| +                          dither8x8 + ((y & 7) << 3), width);
 | 
| +    src_argb += src_stride_argb;
 | 
| +    dst_rgb565 += dst_stride_rgb565;
 | 
| +  }
 | 
| +  return 0;
 | 
| +}
 | 
| +
 | 
|  // Convert ARGB To RGB565.
 | 
|  LIBYUV_API
 | 
|  int ARGBToRGB565(const uint8* src_argb, int src_stride_argb,
 | 
| @@ -867,15 +868,23 @@ int ARGBToRGB565(const uint8* src_argb, int src_stride_argb,
 | 
|      src_stride_argb = dst_stride_rgb565 = 0;
 | 
|    }
 | 
|  #if defined(HAS_ARGBTORGB565ROW_SSE2)
 | 
| -  if (TestCpuFlag(kCpuHasSSE2) && width >= 4 &&
 | 
| -      IS_ALIGNED(src_argb, 16) && IS_ALIGNED(src_stride_argb, 16)) {
 | 
| +  if (TestCpuFlag(kCpuHasSSE2)) {
 | 
|      ARGBToRGB565Row = ARGBToRGB565Row_Any_SSE2;
 | 
|      if (IS_ALIGNED(width, 4)) {
 | 
|        ARGBToRGB565Row = ARGBToRGB565Row_SSE2;
 | 
|      }
 | 
|    }
 | 
| -#elif defined(HAS_ARGBTORGB565ROW_NEON)
 | 
| -  if (TestCpuFlag(kCpuHasNEON) && width >= 8) {
 | 
| +#endif
 | 
| +#if defined(HAS_ARGBTORGB565ROW_AVX2)
 | 
| +  if (TestCpuFlag(kCpuHasAVX2)) {
 | 
| +    ARGBToRGB565Row = ARGBToRGB565Row_Any_AVX2;
 | 
| +    if (IS_ALIGNED(width, 8)) {
 | 
| +      ARGBToRGB565Row = ARGBToRGB565Row_AVX2;
 | 
| +    }
 | 
| +  }
 | 
| +#endif
 | 
| +#if defined(HAS_ARGBTORGB565ROW_NEON)
 | 
| +  if (TestCpuFlag(kCpuHasNEON)) {
 | 
|      ARGBToRGB565Row = ARGBToRGB565Row_Any_NEON;
 | 
|      if (IS_ALIGNED(width, 8)) {
 | 
|        ARGBToRGB565Row = ARGBToRGB565Row_NEON;
 | 
| @@ -915,15 +924,23 @@ int ARGBToARGB1555(const uint8* src_argb, int src_stride_argb,
 | 
|      src_stride_argb = dst_stride_argb1555 = 0;
 | 
|    }
 | 
|  #if defined(HAS_ARGBTOARGB1555ROW_SSE2)
 | 
| -  if (TestCpuFlag(kCpuHasSSE2) && width >= 4 &&
 | 
| -      IS_ALIGNED(src_argb, 16) && IS_ALIGNED(src_stride_argb, 16)) {
 | 
| +  if (TestCpuFlag(kCpuHasSSE2)) {
 | 
|      ARGBToARGB1555Row = ARGBToARGB1555Row_Any_SSE2;
 | 
|      if (IS_ALIGNED(width, 4)) {
 | 
|        ARGBToARGB1555Row = ARGBToARGB1555Row_SSE2;
 | 
|      }
 | 
|    }
 | 
| -#elif defined(HAS_ARGBTOARGB1555ROW_NEON)
 | 
| -  if (TestCpuFlag(kCpuHasNEON) && width >= 8) {
 | 
| +#endif
 | 
| +#if defined(HAS_ARGBTOARGB1555ROW_AVX2)
 | 
| +  if (TestCpuFlag(kCpuHasAVX2)) {
 | 
| +    ARGBToARGB1555Row = ARGBToARGB1555Row_Any_AVX2;
 | 
| +    if (IS_ALIGNED(width, 8)) {
 | 
| +      ARGBToARGB1555Row = ARGBToARGB1555Row_AVX2;
 | 
| +    }
 | 
| +  }
 | 
| +#endif
 | 
| +#if defined(HAS_ARGBTOARGB1555ROW_NEON)
 | 
| +  if (TestCpuFlag(kCpuHasNEON)) {
 | 
|      ARGBToARGB1555Row = ARGBToARGB1555Row_Any_NEON;
 | 
|      if (IS_ALIGNED(width, 8)) {
 | 
|        ARGBToARGB1555Row = ARGBToARGB1555Row_NEON;
 | 
| @@ -963,15 +980,23 @@ int ARGBToARGB4444(const uint8* src_argb, int src_stride_argb,
 | 
|      src_stride_argb = dst_stride_argb4444 = 0;
 | 
|    }
 | 
|  #if defined(HAS_ARGBTOARGB4444ROW_SSE2)
 | 
| -  if (TestCpuFlag(kCpuHasSSE2) && width >= 4 &&
 | 
| -      IS_ALIGNED(src_argb, 16) && IS_ALIGNED(src_stride_argb, 16)) {
 | 
| +  if (TestCpuFlag(kCpuHasSSE2)) {
 | 
|      ARGBToARGB4444Row = ARGBToARGB4444Row_Any_SSE2;
 | 
|      if (IS_ALIGNED(width, 4)) {
 | 
|        ARGBToARGB4444Row = ARGBToARGB4444Row_SSE2;
 | 
|      }
 | 
|    }
 | 
| -#elif defined(HAS_ARGBTOARGB4444ROW_NEON)
 | 
| -  if (TestCpuFlag(kCpuHasNEON) && width >= 8) {
 | 
| +#endif
 | 
| +#if defined(HAS_ARGBTOARGB4444ROW_AVX2)
 | 
| +  if (TestCpuFlag(kCpuHasAVX2)) {
 | 
| +    ARGBToARGB4444Row = ARGBToARGB4444Row_Any_AVX2;
 | 
| +    if (IS_ALIGNED(width, 8)) {
 | 
| +      ARGBToARGB4444Row = ARGBToARGB4444Row_AVX2;
 | 
| +    }
 | 
| +  }
 | 
| +#endif
 | 
| +#if defined(HAS_ARGBTOARGB4444ROW_NEON)
 | 
| +  if (TestCpuFlag(kCpuHasNEON)) {
 | 
|      ARGBToARGB4444Row = ARGBToARGB4444Row_Any_NEON;
 | 
|      if (IS_ALIGNED(width, 8)) {
 | 
|        ARGBToARGB4444Row = ARGBToARGB4444Row_NEON;
 | 
| @@ -1011,23 +1036,17 @@ int ARGBToJ420(const uint8* src_argb, int src_stride_argb,
 | 
|      src_stride_argb = -src_stride_argb;
 | 
|    }
 | 
|  #if defined(HAS_ARGBTOYJROW_SSSE3) && defined(HAS_ARGBTOUVJROW_SSSE3)
 | 
| -  if (TestCpuFlag(kCpuHasSSSE3) && width >= 16) {
 | 
| +  if (TestCpuFlag(kCpuHasSSSE3)) {
 | 
|      ARGBToUVJRow = ARGBToUVJRow_Any_SSSE3;
 | 
|      ARGBToYJRow = ARGBToYJRow_Any_SSSE3;
 | 
|      if (IS_ALIGNED(width, 16)) {
 | 
| -      ARGBToUVJRow = ARGBToUVJRow_Unaligned_SSSE3;
 | 
| -      ARGBToYJRow = ARGBToYJRow_Unaligned_SSSE3;
 | 
| -      if (IS_ALIGNED(src_argb, 16) && IS_ALIGNED(src_stride_argb, 16)) {
 | 
| -        ARGBToUVJRow = ARGBToUVJRow_SSSE3;
 | 
| -        if (IS_ALIGNED(dst_yj, 16) && IS_ALIGNED(dst_stride_yj, 16)) {
 | 
| -          ARGBToYJRow = ARGBToYJRow_SSSE3;
 | 
| -        }
 | 
| -      }
 | 
| +      ARGBToUVJRow = ARGBToUVJRow_SSSE3;
 | 
| +      ARGBToYJRow = ARGBToYJRow_SSSE3;
 | 
|      }
 | 
|    }
 | 
|  #endif
 | 
|  #if defined(HAS_ARGBTOYJROW_AVX2) && defined(HAS_ARGBTOUVJROW_AVX2)
 | 
| -  if (TestCpuFlag(kCpuHasAVX2) && width >= 32) {
 | 
| +  if (TestCpuFlag(kCpuHasAVX2)) {
 | 
|      ARGBToYJRow = ARGBToYJRow_Any_AVX2;
 | 
|      if (IS_ALIGNED(width, 32)) {
 | 
|        ARGBToYJRow = ARGBToYJRow_AVX2;
 | 
| @@ -1035,7 +1054,7 @@ int ARGBToJ420(const uint8* src_argb, int src_stride_argb,
 | 
|    }
 | 
|  #endif
 | 
|  #if defined(HAS_ARGBTOYJROW_NEON)
 | 
| -  if (TestCpuFlag(kCpuHasNEON) && width >= 8) {
 | 
| +  if (TestCpuFlag(kCpuHasNEON)) {
 | 
|      ARGBToYJRow = ARGBToYJRow_Any_NEON;
 | 
|      if (IS_ALIGNED(width, 8)) {
 | 
|        ARGBToYJRow = ARGBToYJRow_NEON;
 | 
| @@ -1043,7 +1062,7 @@ int ARGBToJ420(const uint8* src_argb, int src_stride_argb,
 | 
|    }
 | 
|  #endif
 | 
|  #if defined(HAS_ARGBTOUVJROW_NEON)
 | 
| -  if (TestCpuFlag(kCpuHasNEON) && width >= 16) {
 | 
| +  if (TestCpuFlag(kCpuHasNEON)) {
 | 
|      ARGBToUVJRow = ARGBToUVJRow_Any_NEON;
 | 
|      if (IS_ALIGNED(width, 16)) {
 | 
|        ARGBToUVJRow = ARGBToUVJRow_NEON;
 | 
| @@ -1067,6 +1086,80 @@ int ARGBToJ420(const uint8* src_argb, int src_stride_argb,
 | 
|    return 0;
 | 
|  }
 | 
|  
 | 
| +// ARGB little endian (bgra in memory) to J422
 | 
| +LIBYUV_API
 | 
| +int ARGBToJ422(const uint8* src_argb, int src_stride_argb,
 | 
| +               uint8* dst_y, int dst_stride_y,
 | 
| +               uint8* dst_u, int dst_stride_u,
 | 
| +               uint8* dst_v, int dst_stride_v,
 | 
| +               int width, int height) {
 | 
| +  int y;
 | 
| +  void (*ARGBToUVJ422Row)(const uint8* src_argb, uint8* dst_u, uint8* dst_v,
 | 
| +      int pix) = ARGBToUVJ422Row_C;
 | 
| +  void (*ARGBToYJRow)(const uint8* src_argb, uint8* dst_y, int pix) =
 | 
| +      ARGBToYJRow_C;
 | 
| +  if (!src_argb || !dst_y || !dst_u || !dst_v || width <= 0 || height == 0) {
 | 
| +    return -1;
 | 
| +  }
 | 
| +  if (height < 0) {
 | 
| +    height = -height;
 | 
| +    src_argb = src_argb + (height - 1) * src_stride_argb;
 | 
| +    src_stride_argb = -src_stride_argb;
 | 
| +  }
 | 
| +  // Coalesce rows.
 | 
| +  if (src_stride_argb == width * 4 &&
 | 
| +      dst_stride_y == width &&
 | 
| +      dst_stride_u * 2 == width &&
 | 
| +      dst_stride_v * 2 == width) {
 | 
| +    width *= height;
 | 
| +    height = 1;
 | 
| +    src_stride_argb = dst_stride_y = dst_stride_u = dst_stride_v = 0;
 | 
| +  }
 | 
| +#if defined(HAS_ARGBTOUVJ422ROW_SSSE3)
 | 
| +  if (TestCpuFlag(kCpuHasSSSE3)) {
 | 
| +    ARGBToUVJ422Row = ARGBToUVJ422Row_Any_SSSE3;
 | 
| +    if (IS_ALIGNED(width, 16)) {
 | 
| +      ARGBToUVJ422Row = ARGBToUVJ422Row_SSSE3;
 | 
| +    }
 | 
| +  }
 | 
| +#endif
 | 
| +#if defined(HAS_ARGBTOUVJ422ROW_NEON)
 | 
| +  if (TestCpuFlag(kCpuHasNEON)) {
 | 
| +    ARGBToUVJ422Row = ARGBToUVJ422Row_Any_NEON;
 | 
| +    if (IS_ALIGNED(width, 16)) {
 | 
| +      ARGBToUVJ422Row = ARGBToUVJ422Row_NEON;
 | 
| +    }
 | 
| +  }
 | 
| +#endif
 | 
| +
 | 
| +#if defined(HAS_ARGBTOYJROW_SSSE3)
 | 
| +  if (TestCpuFlag(kCpuHasSSSE3)) {
 | 
| +    ARGBToYJRow = ARGBToYJRow_Any_SSSE3;
 | 
| +    if (IS_ALIGNED(width, 16)) {
 | 
| +      ARGBToYJRow = ARGBToYJRow_SSSE3;
 | 
| +    }
 | 
| +  }
 | 
| +#endif
 | 
| +#if defined(HAS_ARGBTOYJROW_NEON)
 | 
| +  if (TestCpuFlag(kCpuHasNEON)) {
 | 
| +    ARGBToYJRow = ARGBToYJRow_Any_NEON;
 | 
| +    if (IS_ALIGNED(width, 8)) {
 | 
| +      ARGBToYJRow = ARGBToYJRow_NEON;
 | 
| +    }
 | 
| +  }
 | 
| +#endif
 | 
| +
 | 
| +  for (y = 0; y < height; ++y) {
 | 
| +    ARGBToUVJ422Row(src_argb, dst_u, dst_v, width);
 | 
| +    ARGBToYJRow(src_argb, dst_y, width);
 | 
| +    src_argb += src_stride_argb;
 | 
| +    dst_y += dst_stride_y;
 | 
| +    dst_u += dst_stride_u;
 | 
| +    dst_v += dst_stride_v;
 | 
| +  }
 | 
| +  return 0;
 | 
| +}
 | 
| +
 | 
|  // Convert ARGB to J400.
 | 
|  LIBYUV_API
 | 
|  int ARGBToJ400(const uint8* src_argb, int src_stride_argb,
 | 
| @@ -1091,19 +1184,15 @@ int ARGBToJ400(const uint8* src_argb, int src_stride_argb,
 | 
|      src_stride_argb = dst_stride_yj = 0;
 | 
|    }
 | 
|  #if defined(HAS_ARGBTOYJROW_SSSE3)
 | 
| -  if (TestCpuFlag(kCpuHasSSSE3) && width >= 16) {
 | 
| +  if (TestCpuFlag(kCpuHasSSSE3)) {
 | 
|      ARGBToYJRow = ARGBToYJRow_Any_SSSE3;
 | 
|      if (IS_ALIGNED(width, 16)) {
 | 
| -      ARGBToYJRow = ARGBToYJRow_Unaligned_SSSE3;
 | 
| -      if (IS_ALIGNED(src_argb, 16) && IS_ALIGNED(src_stride_argb, 16) &&
 | 
| -          IS_ALIGNED(dst_yj, 16) && IS_ALIGNED(dst_stride_yj, 16)) {
 | 
| -        ARGBToYJRow = ARGBToYJRow_SSSE3;
 | 
| -      }
 | 
| +      ARGBToYJRow = ARGBToYJRow_SSSE3;
 | 
|      }
 | 
|    }
 | 
|  #endif
 | 
|  #if defined(HAS_ARGBTOYJROW_AVX2)
 | 
| -  if (TestCpuFlag(kCpuHasAVX2) && width >= 32) {
 | 
| +  if (TestCpuFlag(kCpuHasAVX2)) {
 | 
|      ARGBToYJRow = ARGBToYJRow_Any_AVX2;
 | 
|      if (IS_ALIGNED(width, 32)) {
 | 
|        ARGBToYJRow = ARGBToYJRow_AVX2;
 | 
| @@ -1111,7 +1200,7 @@ int ARGBToJ400(const uint8* src_argb, int src_stride_argb,
 | 
|    }
 | 
|  #endif
 | 
|  #if defined(HAS_ARGBTOYJROW_NEON)
 | 
| -  if (TestCpuFlag(kCpuHasNEON) && width >= 8) {
 | 
| +  if (TestCpuFlag(kCpuHasNEON)) {
 | 
|      ARGBToYJRow = ARGBToYJRow_Any_NEON;
 | 
|      if (IS_ALIGNED(width, 8)) {
 | 
|        ARGBToYJRow = ARGBToYJRow_NEON;
 | 
| 
 |