| Index: source/libvpx/third_party/libyuv/source/convert.cc
|
| diff --git a/source/libvpx/third_party/libyuv/source/convert.cc b/source/libvpx/third_party/libyuv/source/convert.cc
|
| index a8e294f47fcff7528469b65f767118e685e53dfe..41696c18f87866ecf9745ceb044ed3e97e1a1486 100644
|
| --- a/source/libvpx/third_party/libyuv/source/convert.cc
|
| +++ b/source/libvpx/third_party/libyuv/source/convert.cc
|
| @@ -188,17 +188,14 @@ static void CopyPlane2(const uint8* src, int src_stride_0, int src_stride_1,
|
| int width, int height) {
|
| int y;
|
| void (*CopyRow)(const uint8* src, uint8* dst, int width) = CopyRow_C;
|
| -#if defined(HAS_COPYROW_X86)
|
| - if (TestCpuFlag(kCpuHasX86) && IS_ALIGNED(width, 4)) {
|
| - CopyRow = CopyRow_X86;
|
| +#if defined(HAS_COPYROW_SSE2)
|
| + if (TestCpuFlag(kCpuHasSSE2)) {
|
| + CopyRow = IS_ALIGNED(width, 32) ? CopyRow_SSE2 : CopyRow_Any_SSE2;
|
| }
|
| #endif
|
| -#if defined(HAS_COPYROW_SSE2)
|
| - if (TestCpuFlag(kCpuHasSSE2) && IS_ALIGNED(width, 32) &&
|
| - IS_ALIGNED(src, 16) &&
|
| - IS_ALIGNED(src_stride_0, 16) && IS_ALIGNED(src_stride_1, 16) &&
|
| - IS_ALIGNED(dst, 16) && IS_ALIGNED(dst_stride, 16)) {
|
| - CopyRow = CopyRow_SSE2;
|
| +#if defined(HAS_COPYROW_AVX)
|
| + if (TestCpuFlag(kCpuHasAVX)) {
|
| + CopyRow = IS_ALIGNED(width, 64) ? CopyRow_AVX : CopyRow_Any_AVX;
|
| }
|
| #endif
|
| #if defined(HAS_COPYROW_ERMS)
|
| @@ -207,8 +204,8 @@ static void CopyPlane2(const uint8* src, int src_stride_0, int src_stride_1,
|
| }
|
| #endif
|
| #if defined(HAS_COPYROW_NEON)
|
| - if (TestCpuFlag(kCpuHasNEON) && IS_ALIGNED(width, 32)) {
|
| - CopyRow = CopyRow_NEON;
|
| + if (TestCpuFlag(kCpuHasNEON)) {
|
| + CopyRow = IS_ALIGNED(width, 32) ? CopyRow_NEON : CopyRow_Any_NEON;
|
| }
|
| #endif
|
| #if defined(HAS_COPYROW_MIPS)
|
| @@ -283,20 +280,15 @@ static int X420ToI420(const uint8* src_y,
|
| src_stride_uv = dst_stride_u = dst_stride_v = 0;
|
| }
|
| #if defined(HAS_SPLITUVROW_SSE2)
|
| - if (TestCpuFlag(kCpuHasSSE2) && halfwidth >= 16) {
|
| + if (TestCpuFlag(kCpuHasSSE2)) {
|
| SplitUVRow = SplitUVRow_Any_SSE2;
|
| if (IS_ALIGNED(halfwidth, 16)) {
|
| - SplitUVRow = SplitUVRow_Unaligned_SSE2;
|
| - if (IS_ALIGNED(src_uv, 16) && IS_ALIGNED(src_stride_uv, 16) &&
|
| - IS_ALIGNED(dst_u, 16) && IS_ALIGNED(dst_stride_u, 16) &&
|
| - IS_ALIGNED(dst_v, 16) && IS_ALIGNED(dst_stride_v, 16)) {
|
| - SplitUVRow = SplitUVRow_SSE2;
|
| - }
|
| + SplitUVRow = SplitUVRow_SSE2;
|
| }
|
| }
|
| #endif
|
| #if defined(HAS_SPLITUVROW_AVX2)
|
| - if (TestCpuFlag(kCpuHasAVX2) && halfwidth >= 32) {
|
| + if (TestCpuFlag(kCpuHasAVX2)) {
|
| SplitUVRow = SplitUVRow_Any_AVX2;
|
| if (IS_ALIGNED(halfwidth, 32)) {
|
| SplitUVRow = SplitUVRow_AVX2;
|
| @@ -304,7 +296,7 @@ static int X420ToI420(const uint8* src_y,
|
| }
|
| #endif
|
| #if defined(HAS_SPLITUVROW_NEON)
|
| - if (TestCpuFlag(kCpuHasNEON) && halfwidth >= 16) {
|
| + if (TestCpuFlag(kCpuHasNEON)) {
|
| SplitUVRow = SplitUVRow_Any_NEON;
|
| if (IS_ALIGNED(halfwidth, 16)) {
|
| SplitUVRow = SplitUVRow_NEON;
|
| @@ -312,15 +304,13 @@ static int X420ToI420(const uint8* src_y,
|
| }
|
| #endif
|
| #if defined(HAS_SPLITUVROW_MIPS_DSPR2)
|
| - if (TestCpuFlag(kCpuHasMIPS_DSPR2) && halfwidth >= 16) {
|
| + if (TestCpuFlag(kCpuHasMIPS_DSPR2) &&
|
| + IS_ALIGNED(src_uv, 4) && IS_ALIGNED(src_stride_uv, 4) &&
|
| + IS_ALIGNED(dst_u, 4) && IS_ALIGNED(dst_stride_u, 4) &&
|
| + IS_ALIGNED(dst_v, 4) && IS_ALIGNED(dst_stride_v, 4)) {
|
| SplitUVRow = SplitUVRow_Any_MIPS_DSPR2;
|
| if (IS_ALIGNED(halfwidth, 16)) {
|
| - SplitUVRow = SplitUVRow_Unaligned_MIPS_DSPR2;
|
| - if (IS_ALIGNED(src_uv, 4) && IS_ALIGNED(src_stride_uv, 4) &&
|
| - IS_ALIGNED(dst_u, 4) && IS_ALIGNED(dst_stride_u, 4) &&
|
| - IS_ALIGNED(dst_v, 4) && IS_ALIGNED(dst_stride_v, 4)) {
|
| - SplitUVRow = SplitUVRow_MIPS_DSPR2;
|
| - }
|
| + SplitUVRow = SplitUVRow_MIPS_DSPR2;
|
| }
|
| }
|
| #endif
|
| @@ -391,125 +381,6 @@ int M420ToI420(const uint8* src_m420, int src_stride_m420,
|
| width, height);
|
| }
|
|
|
| -// Convert Q420 to I420.
|
| -// Format is rows of YY/YUYV
|
| -LIBYUV_API
|
| -int Q420ToI420(const uint8* src_y, int src_stride_y,
|
| - const uint8* src_yuy2, int src_stride_yuy2,
|
| - 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;
|
| - int halfheight;
|
| - void (*CopyRow)(const uint8* src, uint8* dst, int width) = CopyRow_C;
|
| - void (*YUY2ToUV422Row)(const uint8* src_yuy2, uint8* dst_u, uint8* dst_v,
|
| - int pix) = YUY2ToUV422Row_C;
|
| - void (*YUY2ToYRow)(const uint8* src_yuy2, uint8* dst_y, int pix) =
|
| - YUY2ToYRow_C;
|
| - if (!src_y || !src_yuy2 ||
|
| - !dst_y || !dst_u || !dst_v ||
|
| - width <= 0 || height == 0) {
|
| - return -1;
|
| - }
|
| - // Negative height means invert the image.
|
| - if (height < 0) {
|
| - height = -height;
|
| - halfheight = (height + 1) >> 1;
|
| - dst_y = dst_y + (height - 1) * dst_stride_y;
|
| - dst_u = dst_u + (halfheight - 1) * dst_stride_u;
|
| - dst_v = dst_v + (halfheight - 1) * dst_stride_v;
|
| - dst_stride_y = -dst_stride_y;
|
| - dst_stride_u = -dst_stride_u;
|
| - dst_stride_v = -dst_stride_v;
|
| - }
|
| - // CopyRow for rows of just Y in Q420 copied to Y plane of I420.
|
| -#if defined(HAS_COPYROW_NEON)
|
| - if (TestCpuFlag(kCpuHasNEON) && IS_ALIGNED(width, 32)) {
|
| - CopyRow = CopyRow_NEON;
|
| - }
|
| -#endif
|
| -#if defined(HAS_COPYROW_X86)
|
| - if (IS_ALIGNED(width, 4)) {
|
| - CopyRow = CopyRow_X86;
|
| - }
|
| -#endif
|
| -#if defined(HAS_COPYROW_SSE2)
|
| - if (TestCpuFlag(kCpuHasSSE2) && IS_ALIGNED(width, 32) &&
|
| - IS_ALIGNED(src_y, 16) && IS_ALIGNED(src_stride_y, 16) &&
|
| - IS_ALIGNED(dst_y, 16) && IS_ALIGNED(dst_stride_y, 16)) {
|
| - CopyRow = CopyRow_SSE2;
|
| - }
|
| -#endif
|
| -#if defined(HAS_COPYROW_ERMS)
|
| - if (TestCpuFlag(kCpuHasERMS)) {
|
| - CopyRow = CopyRow_ERMS;
|
| - }
|
| -#endif
|
| -#if defined(HAS_COPYROW_MIPS)
|
| - if (TestCpuFlag(kCpuHasMIPS)) {
|
| - CopyRow = CopyRow_MIPS;
|
| - }
|
| -#endif
|
| -
|
| -#if defined(HAS_YUY2TOYROW_SSE2)
|
| - if (TestCpuFlag(kCpuHasSSE2) && width >= 16) {
|
| - YUY2ToUV422Row = YUY2ToUV422Row_Any_SSE2;
|
| - YUY2ToYRow = YUY2ToYRow_Any_SSE2;
|
| - if (IS_ALIGNED(width, 16)) {
|
| - YUY2ToUV422Row = YUY2ToUV422Row_Unaligned_SSE2;
|
| - YUY2ToYRow = YUY2ToYRow_Unaligned_SSE2;
|
| - if (IS_ALIGNED(src_yuy2, 16) && IS_ALIGNED(src_stride_yuy2, 16)) {
|
| - YUY2ToUV422Row = YUY2ToUV422Row_SSE2;
|
| - if (IS_ALIGNED(dst_y, 16) && IS_ALIGNED(dst_stride_y, 16)) {
|
| - YUY2ToYRow = YUY2ToYRow_SSE2;
|
| - }
|
| - }
|
| - }
|
| - }
|
| -#endif
|
| -#if defined(HAS_YUY2TOYROW_AVX2)
|
| - if (TestCpuFlag(kCpuHasAVX2) && width >= 32) {
|
| - YUY2ToUV422Row = YUY2ToUV422Row_Any_AVX2;
|
| - YUY2ToYRow = YUY2ToYRow_Any_AVX2;
|
| - if (IS_ALIGNED(width, 32)) {
|
| - YUY2ToUV422Row = YUY2ToUV422Row_AVX2;
|
| - YUY2ToYRow = YUY2ToYRow_AVX2;
|
| - }
|
| - }
|
| -#endif
|
| -#if defined(HAS_YUY2TOYROW_NEON)
|
| - if (TestCpuFlag(kCpuHasNEON) && width >= 8) {
|
| - YUY2ToYRow = YUY2ToYRow_Any_NEON;
|
| - if (width >= 16) {
|
| - YUY2ToUV422Row = YUY2ToUV422Row_Any_NEON;
|
| - }
|
| - if (IS_ALIGNED(width, 16)) {
|
| - YUY2ToYRow = YUY2ToYRow_NEON;
|
| - YUY2ToUV422Row = YUY2ToUV422Row_NEON;
|
| - }
|
| - }
|
| -#endif
|
| -
|
| - for (y = 0; y < height - 1; y += 2) {
|
| - CopyRow(src_y, dst_y, width);
|
| - src_y += src_stride_y;
|
| - dst_y += dst_stride_y;
|
| -
|
| - YUY2ToUV422Row(src_yuy2, dst_u, dst_v, width);
|
| - YUY2ToYRow(src_yuy2, dst_y, width);
|
| - src_yuy2 += src_stride_yuy2;
|
| - dst_y += dst_stride_y;
|
| - dst_u += dst_stride_u;
|
| - dst_v += dst_stride_v;
|
| - }
|
| - if (height & 1) {
|
| - CopyRow(src_y, dst_y, width);
|
| - YUY2ToUV422Row(src_yuy2, dst_u, dst_v, width);
|
| - }
|
| - return 0;
|
| -}
|
| -
|
| // Convert YUY2 to I420.
|
| LIBYUV_API
|
| int YUY2ToI420(const uint8* src_yuy2, int src_stride_yuy2,
|
| @@ -529,23 +400,17 @@ int YUY2ToI420(const uint8* src_yuy2, int src_stride_yuy2,
|
| src_stride_yuy2 = -src_stride_yuy2;
|
| }
|
| #if defined(HAS_YUY2TOYROW_SSE2)
|
| - if (TestCpuFlag(kCpuHasSSE2) && width >= 16) {
|
| + if (TestCpuFlag(kCpuHasSSE2)) {
|
| YUY2ToUVRow = YUY2ToUVRow_Any_SSE2;
|
| YUY2ToYRow = YUY2ToYRow_Any_SSE2;
|
| if (IS_ALIGNED(width, 16)) {
|
| - YUY2ToUVRow = YUY2ToUVRow_Unaligned_SSE2;
|
| - YUY2ToYRow = YUY2ToYRow_Unaligned_SSE2;
|
| - if (IS_ALIGNED(src_yuy2, 16) && IS_ALIGNED(src_stride_yuy2, 16)) {
|
| - YUY2ToUVRow = YUY2ToUVRow_SSE2;
|
| - if (IS_ALIGNED(dst_y, 16) && IS_ALIGNED(dst_stride_y, 16)) {
|
| - YUY2ToYRow = YUY2ToYRow_SSE2;
|
| - }
|
| - }
|
| + YUY2ToUVRow = YUY2ToUVRow_SSE2;
|
| + YUY2ToYRow = YUY2ToYRow_SSE2;
|
| }
|
| }
|
| #endif
|
| #if defined(HAS_YUY2TOYROW_AVX2)
|
| - if (TestCpuFlag(kCpuHasAVX2) && width >= 32) {
|
| + if (TestCpuFlag(kCpuHasAVX2)) {
|
| YUY2ToUVRow = YUY2ToUVRow_Any_AVX2;
|
| YUY2ToYRow = YUY2ToYRow_Any_AVX2;
|
| if (IS_ALIGNED(width, 32)) {
|
| @@ -555,11 +420,9 @@ int YUY2ToI420(const uint8* src_yuy2, int src_stride_yuy2,
|
| }
|
| #endif
|
| #if defined(HAS_YUY2TOYROW_NEON)
|
| - if (TestCpuFlag(kCpuHasNEON) && width >= 8) {
|
| + if (TestCpuFlag(kCpuHasNEON)) {
|
| YUY2ToYRow = YUY2ToYRow_Any_NEON;
|
| - if (width >= 16) {
|
| - YUY2ToUVRow = YUY2ToUVRow_Any_NEON;
|
| - }
|
| + YUY2ToUVRow = YUY2ToUVRow_Any_NEON;
|
| if (IS_ALIGNED(width, 16)) {
|
| YUY2ToYRow = YUY2ToYRow_NEON;
|
| YUY2ToUVRow = YUY2ToUVRow_NEON;
|
| @@ -602,23 +465,17 @@ int UYVYToI420(const uint8* src_uyvy, int src_stride_uyvy,
|
| src_stride_uyvy = -src_stride_uyvy;
|
| }
|
| #if defined(HAS_UYVYTOYROW_SSE2)
|
| - if (TestCpuFlag(kCpuHasSSE2) && width >= 16) {
|
| + if (TestCpuFlag(kCpuHasSSE2)) {
|
| UYVYToUVRow = UYVYToUVRow_Any_SSE2;
|
| UYVYToYRow = UYVYToYRow_Any_SSE2;
|
| if (IS_ALIGNED(width, 16)) {
|
| - UYVYToUVRow = UYVYToUVRow_Unaligned_SSE2;
|
| - UYVYToYRow = UYVYToYRow_Unaligned_SSE2;
|
| - if (IS_ALIGNED(src_uyvy, 16) && IS_ALIGNED(src_stride_uyvy, 16)) {
|
| - UYVYToUVRow = UYVYToUVRow_SSE2;
|
| - if (IS_ALIGNED(dst_y, 16) && IS_ALIGNED(dst_stride_y, 16)) {
|
| - UYVYToYRow = UYVYToYRow_SSE2;
|
| - }
|
| - }
|
| + UYVYToUVRow = UYVYToUVRow_SSE2;
|
| + UYVYToYRow = UYVYToYRow_SSE2;
|
| }
|
| }
|
| #endif
|
| #if defined(HAS_UYVYTOYROW_AVX2)
|
| - if (TestCpuFlag(kCpuHasAVX2) && width >= 32) {
|
| + if (TestCpuFlag(kCpuHasAVX2)) {
|
| UYVYToUVRow = UYVYToUVRow_Any_AVX2;
|
| UYVYToYRow = UYVYToYRow_Any_AVX2;
|
| if (IS_ALIGNED(width, 32)) {
|
| @@ -628,11 +485,9 @@ int UYVYToI420(const uint8* src_uyvy, int src_stride_uyvy,
|
| }
|
| #endif
|
| #if defined(HAS_UYVYTOYROW_NEON)
|
| - if (TestCpuFlag(kCpuHasNEON) && width >= 8) {
|
| + if (TestCpuFlag(kCpuHasNEON)) {
|
| UYVYToYRow = UYVYToYRow_Any_NEON;
|
| - if (width >= 16) {
|
| - UYVYToUVRow = UYVYToUVRow_Any_NEON;
|
| - }
|
| + UYVYToUVRow = UYVYToUVRow_Any_NEON;
|
| if (IS_ALIGNED(width, 16)) {
|
| UYVYToYRow = UYVYToYRow_NEON;
|
| UYVYToUVRow = UYVYToUVRow_NEON;
|
| @@ -680,23 +535,17 @@ int ARGBToI420(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;
|
| }
|
| }
|
| #endif
|
| #if defined(HAS_ARGBTOYROW_AVX2) && defined(HAS_ARGBTOUVROW_AVX2)
|
| - if (TestCpuFlag(kCpuHasAVX2) && width >= 32) {
|
| + if (TestCpuFlag(kCpuHasAVX2)) {
|
| ARGBToUVRow = ARGBToUVRow_Any_AVX2;
|
| ARGBToYRow = ARGBToYRow_Any_AVX2;
|
| if (IS_ALIGNED(width, 32)) {
|
| @@ -706,7 +555,7 @@ int ARGBToI420(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;
|
| @@ -714,7 +563,7 @@ int ARGBToI420(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;
|
| @@ -761,34 +610,31 @@ int BGRAToI420(const uint8* src_bgra, int src_stride_bgra,
|
| src_bgra = src_bgra + (height - 1) * src_stride_bgra;
|
| src_stride_bgra = -src_stride_bgra;
|
| }
|
| -#if defined(HAS_BGRATOYROW_SSSE3)
|
| - if (TestCpuFlag(kCpuHasSSSE3) && width >= 16) {
|
| +#if defined(HAS_BGRATOYROW_SSSE3) && defined(HAS_BGRATOUVROW_SSSE3)
|
| + if (TestCpuFlag(kCpuHasSSSE3)) {
|
| BGRAToUVRow = BGRAToUVRow_Any_SSSE3;
|
| BGRAToYRow = BGRAToYRow_Any_SSSE3;
|
| if (IS_ALIGNED(width, 16)) {
|
| - BGRAToUVRow = BGRAToUVRow_Unaligned_SSSE3;
|
| - BGRAToYRow = BGRAToYRow_Unaligned_SSSE3;
|
| - if (IS_ALIGNED(src_bgra, 16) && IS_ALIGNED(src_stride_bgra, 16)) {
|
| - BGRAToUVRow = BGRAToUVRow_SSSE3;
|
| - if (IS_ALIGNED(dst_y, 16) && IS_ALIGNED(dst_stride_y, 16)) {
|
| - BGRAToYRow = BGRAToYRow_SSSE3;
|
| - }
|
| - }
|
| + BGRAToUVRow = BGRAToUVRow_SSSE3;
|
| + BGRAToYRow = BGRAToYRow_SSSE3;
|
| }
|
| }
|
| -#elif defined(HAS_BGRATOYROW_NEON)
|
| - if (TestCpuFlag(kCpuHasNEON) && width >= 8) {
|
| +#endif
|
| +#if defined(HAS_BGRATOYROW_NEON)
|
| + if (TestCpuFlag(kCpuHasNEON)) {
|
| BGRAToYRow = BGRAToYRow_Any_NEON;
|
| if (IS_ALIGNED(width, 8)) {
|
| BGRAToYRow = BGRAToYRow_NEON;
|
| }
|
| - if (width >= 16) {
|
| + }
|
| +#endif
|
| +#if defined(HAS_BGRATOUVROW_NEON)
|
| + if (TestCpuFlag(kCpuHasNEON)) {
|
| BGRAToUVRow = BGRAToUVRow_Any_NEON;
|
| if (IS_ALIGNED(width, 16)) {
|
| BGRAToUVRow = BGRAToUVRow_NEON;
|
| }
|
| }
|
| - }
|
| #endif
|
|
|
| for (y = 0; y < height - 1; y += 2) {
|
| @@ -830,32 +676,29 @@ int ABGRToI420(const uint8* src_abgr, int src_stride_abgr,
|
| src_abgr = src_abgr + (height - 1) * src_stride_abgr;
|
| src_stride_abgr = -src_stride_abgr;
|
| }
|
| -#if defined(HAS_ABGRTOYROW_SSSE3)
|
| - if (TestCpuFlag(kCpuHasSSSE3) && width >= 16) {
|
| +#if defined(HAS_ABGRTOYROW_SSSE3) && defined(HAS_ABGRTOUVROW_SSSE3)
|
| + if (TestCpuFlag(kCpuHasSSSE3)) {
|
| ABGRToUVRow = ABGRToUVRow_Any_SSSE3;
|
| ABGRToYRow = ABGRToYRow_Any_SSSE3;
|
| if (IS_ALIGNED(width, 16)) {
|
| - ABGRToUVRow = ABGRToUVRow_Unaligned_SSSE3;
|
| - ABGRToYRow = ABGRToYRow_Unaligned_SSSE3;
|
| - if (IS_ALIGNED(src_abgr, 16) && IS_ALIGNED(src_stride_abgr, 16)) {
|
| - ABGRToUVRow = ABGRToUVRow_SSSE3;
|
| - if (IS_ALIGNED(dst_y, 16) && IS_ALIGNED(dst_stride_y, 16)) {
|
| - ABGRToYRow = ABGRToYRow_SSSE3;
|
| - }
|
| - }
|
| + ABGRToUVRow = ABGRToUVRow_SSSE3;
|
| + ABGRToYRow = ABGRToYRow_SSSE3;
|
| }
|
| }
|
| -#elif defined(HAS_ABGRTOYROW_NEON)
|
| - if (TestCpuFlag(kCpuHasNEON) && width >= 8) {
|
| +#endif
|
| +#if defined(HAS_ABGRTOYROW_NEON)
|
| + if (TestCpuFlag(kCpuHasNEON)) {
|
| ABGRToYRow = ABGRToYRow_Any_NEON;
|
| if (IS_ALIGNED(width, 8)) {
|
| ABGRToYRow = ABGRToYRow_NEON;
|
| }
|
| - if (width >= 16) {
|
| - ABGRToUVRow = ABGRToUVRow_Any_NEON;
|
| - if (IS_ALIGNED(width, 16)) {
|
| - ABGRToUVRow = ABGRToUVRow_NEON;
|
| - }
|
| + }
|
| +#endif
|
| +#if defined(HAS_ABGRTOUVROW_NEON)
|
| + if (TestCpuFlag(kCpuHasNEON)) {
|
| + ABGRToUVRow = ABGRToUVRow_Any_NEON;
|
| + if (IS_ALIGNED(width, 16)) {
|
| + ABGRToUVRow = ABGRToUVRow_NEON;
|
| }
|
| }
|
| #endif
|
| @@ -899,32 +742,29 @@ int RGBAToI420(const uint8* src_rgba, int src_stride_rgba,
|
| src_rgba = src_rgba + (height - 1) * src_stride_rgba;
|
| src_stride_rgba = -src_stride_rgba;
|
| }
|
| -#if defined(HAS_RGBATOYROW_SSSE3)
|
| - if (TestCpuFlag(kCpuHasSSSE3) && width >= 16) {
|
| +#if defined(HAS_RGBATOYROW_SSSE3) && defined(HAS_RGBATOUVROW_SSSE3)
|
| + if (TestCpuFlag(kCpuHasSSSE3)) {
|
| RGBAToUVRow = RGBAToUVRow_Any_SSSE3;
|
| RGBAToYRow = RGBAToYRow_Any_SSSE3;
|
| if (IS_ALIGNED(width, 16)) {
|
| - RGBAToUVRow = RGBAToUVRow_Unaligned_SSSE3;
|
| - RGBAToYRow = RGBAToYRow_Unaligned_SSSE3;
|
| - if (IS_ALIGNED(src_rgba, 16) && IS_ALIGNED(src_stride_rgba, 16)) {
|
| - RGBAToUVRow = RGBAToUVRow_SSSE3;
|
| - if (IS_ALIGNED(dst_y, 16) && IS_ALIGNED(dst_stride_y, 16)) {
|
| - RGBAToYRow = RGBAToYRow_SSSE3;
|
| - }
|
| - }
|
| + RGBAToUVRow = RGBAToUVRow_SSSE3;
|
| + RGBAToYRow = RGBAToYRow_SSSE3;
|
| }
|
| }
|
| -#elif defined(HAS_RGBATOYROW_NEON)
|
| - if (TestCpuFlag(kCpuHasNEON) && width >= 8) {
|
| +#endif
|
| +#if defined(HAS_RGBATOYROW_NEON)
|
| + if (TestCpuFlag(kCpuHasNEON)) {
|
| RGBAToYRow = RGBAToYRow_Any_NEON;
|
| if (IS_ALIGNED(width, 8)) {
|
| RGBAToYRow = RGBAToYRow_NEON;
|
| }
|
| - if (width >= 16) {
|
| - RGBAToUVRow = RGBAToUVRow_Any_NEON;
|
| - if (IS_ALIGNED(width, 16)) {
|
| - RGBAToUVRow = RGBAToUVRow_NEON;
|
| - }
|
| + }
|
| +#endif
|
| +#if defined(HAS_RGBATOUVROW_NEON)
|
| + if (TestCpuFlag(kCpuHasNEON)) {
|
| + RGBAToUVRow = RGBAToUVRow_Any_NEON;
|
| + if (IS_ALIGNED(width, 16)) {
|
| + RGBAToUVRow = RGBAToUVRow_NEON;
|
| }
|
| }
|
| #endif
|
| @@ -978,22 +818,23 @@ int RGB24ToI420(const uint8* src_rgb24, int src_stride_rgb24,
|
| }
|
|
|
| #if defined(HAS_RGB24TOYROW_NEON)
|
| - if (TestCpuFlag(kCpuHasNEON) && width >= 8) {
|
| + if (TestCpuFlag(kCpuHasNEON)) {
|
| RGB24ToYRow = RGB24ToYRow_Any_NEON;
|
| if (IS_ALIGNED(width, 8)) {
|
| RGB24ToYRow = RGB24ToYRow_NEON;
|
| }
|
| - if (width >= 16) {
|
| - RGB24ToUVRow = RGB24ToUVRow_Any_NEON;
|
| - if (IS_ALIGNED(width, 16)) {
|
| - RGB24ToUVRow = RGB24ToUVRow_NEON;
|
| - }
|
| + }
|
| +#endif
|
| +#if defined(HAS_RGB24TOUVROW_NEON)
|
| + if (TestCpuFlag(kCpuHasNEON)) {
|
| + RGB24ToUVRow = RGB24ToUVRow_Any_NEON;
|
| + if (IS_ALIGNED(width, 16)) {
|
| + RGB24ToUVRow = RGB24ToUVRow_NEON;
|
| }
|
| }
|
| -#else // HAS_RGB24TOYROW_NEON
|
| -
|
| +#endif
|
| #if defined(HAS_RGB24TOARGBROW_SSSE3)
|
| - if (TestCpuFlag(kCpuHasSSSE3) && width >= 16) {
|
| + if (TestCpuFlag(kCpuHasSSSE3)) {
|
| RGB24ToARGBRow = RGB24ToARGBRow_Any_SSSE3;
|
| if (IS_ALIGNED(width, 16)) {
|
| RGB24ToARGBRow = RGB24ToARGBRow_SSSE3;
|
| @@ -1001,7 +842,7 @@ int RGB24ToI420(const uint8* src_rgb24, int src_stride_rgb24,
|
| }
|
| #endif
|
| #if defined(HAS_ARGBTOUVROW_SSSE3)
|
| - if (TestCpuFlag(kCpuHasSSSE3) && width >= 16) {
|
| + if (TestCpuFlag(kCpuHasSSSE3)) {
|
| ARGBToUVRow = ARGBToUVRow_Any_SSSE3;
|
| if (IS_ALIGNED(width, 16)) {
|
| ARGBToUVRow = ARGBToUVRow_SSSE3;
|
| @@ -1009,17 +850,13 @@ int RGB24ToI420(const uint8* src_rgb24, int src_stride_rgb24,
|
| }
|
| #endif
|
| #if defined(HAS_ARGBTOUVROW_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(dst_y, 16) && IS_ALIGNED(dst_stride_y, 16)) {
|
| - ARGBToYRow = ARGBToYRow_SSSE3;
|
| - }
|
| + ARGBToYRow = ARGBToYRow_SSSE3;
|
| }
|
| }
|
| #endif // HAS_ARGBTOUVROW_SSSE3
|
| -#endif // HAS_RGB24TOYROW_NEON
|
|
|
| {
|
| #if !defined(HAS_RGB24TOYROW_NEON)
|
| @@ -1095,22 +932,23 @@ int RAWToI420(const uint8* src_raw, int src_stride_raw,
|
| }
|
|
|
| #if defined(HAS_RAWTOYROW_NEON)
|
| - if (TestCpuFlag(kCpuHasNEON) && width >= 8) {
|
| + if (TestCpuFlag(kCpuHasNEON)) {
|
| RAWToYRow = RAWToYRow_Any_NEON;
|
| if (IS_ALIGNED(width, 8)) {
|
| RAWToYRow = RAWToYRow_NEON;
|
| }
|
| - if (width >= 16) {
|
| - RAWToUVRow = RAWToUVRow_Any_NEON;
|
| - if (IS_ALIGNED(width, 16)) {
|
| - RAWToUVRow = RAWToUVRow_NEON;
|
| - }
|
| + }
|
| +#endif
|
| +#if defined(HAS_RAWTOUVROW_NEON)
|
| + if (TestCpuFlag(kCpuHasNEON)) {
|
| + RAWToUVRow = RAWToUVRow_Any_NEON;
|
| + if (IS_ALIGNED(width, 16)) {
|
| + RAWToUVRow = RAWToUVRow_NEON;
|
| }
|
| }
|
| -#else // HAS_RAWTOYROW_NEON
|
| -
|
| +#endif
|
| #if defined(HAS_RAWTOARGBROW_SSSE3)
|
| - if (TestCpuFlag(kCpuHasSSSE3) && width >= 16) {
|
| + if (TestCpuFlag(kCpuHasSSSE3)) {
|
| RAWToARGBRow = RAWToARGBRow_Any_SSSE3;
|
| if (IS_ALIGNED(width, 16)) {
|
| RAWToARGBRow = RAWToARGBRow_SSSE3;
|
| @@ -1118,7 +956,7 @@ int RAWToI420(const uint8* src_raw, int src_stride_raw,
|
| }
|
| #endif
|
| #if defined(HAS_ARGBTOUVROW_SSSE3)
|
| - if (TestCpuFlag(kCpuHasSSSE3) && width >= 16) {
|
| + if (TestCpuFlag(kCpuHasSSSE3)) {
|
| ARGBToUVRow = ARGBToUVRow_Any_SSSE3;
|
| if (IS_ALIGNED(width, 16)) {
|
| ARGBToUVRow = ARGBToUVRow_SSSE3;
|
| @@ -1126,17 +964,13 @@ int RAWToI420(const uint8* src_raw, int src_stride_raw,
|
| }
|
| #endif
|
| #if defined(HAS_ARGBTOUVROW_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(dst_y, 16) && IS_ALIGNED(dst_stride_y, 16)) {
|
| - ARGBToYRow = ARGBToYRow_SSSE3;
|
| - }
|
| + ARGBToYRow = ARGBToYRow_SSSE3;
|
| }
|
| }
|
| #endif // HAS_ARGBTOUVROW_SSSE3
|
| -#endif // HAS_RAWTOYROW_NEON
|
|
|
| {
|
| // Allocate 2 rows of ARGB.
|
| @@ -1210,22 +1044,20 @@ int RGB565ToI420(const uint8* src_rgb565, int src_stride_rgb565,
|
| }
|
|
|
| #if defined(HAS_RGB565TOYROW_NEON)
|
| - if (TestCpuFlag(kCpuHasNEON) && width >= 8) {
|
| + if (TestCpuFlag(kCpuHasNEON)) {
|
| RGB565ToYRow = RGB565ToYRow_Any_NEON;
|
| if (IS_ALIGNED(width, 8)) {
|
| RGB565ToYRow = RGB565ToYRow_NEON;
|
| }
|
| - if (width >= 16) {
|
| - RGB565ToUVRow = RGB565ToUVRow_Any_NEON;
|
| - if (IS_ALIGNED(width, 16)) {
|
| - RGB565ToUVRow = RGB565ToUVRow_NEON;
|
| - }
|
| + RGB565ToUVRow = RGB565ToUVRow_Any_NEON;
|
| + if (IS_ALIGNED(width, 16)) {
|
| + RGB565ToUVRow = RGB565ToUVRow_NEON;
|
| }
|
| }
|
| #else // HAS_RGB565TOYROW_NEON
|
|
|
| #if defined(HAS_RGB565TOARGBROW_SSE2)
|
| - if (TestCpuFlag(kCpuHasSSE2) && width >= 8) {
|
| + if (TestCpuFlag(kCpuHasSSE2)) {
|
| RGB565ToARGBRow = RGB565ToARGBRow_Any_SSE2;
|
| if (IS_ALIGNED(width, 8)) {
|
| RGB565ToARGBRow = RGB565ToARGBRow_SSE2;
|
| @@ -1233,7 +1065,7 @@ int RGB565ToI420(const uint8* src_rgb565, int src_stride_rgb565,
|
| }
|
| #endif
|
| #if defined(HAS_ARGBTOUVROW_SSSE3)
|
| - if (TestCpuFlag(kCpuHasSSSE3) && width >= 16) {
|
| + if (TestCpuFlag(kCpuHasSSSE3)) {
|
| ARGBToUVRow = ARGBToUVRow_Any_SSSE3;
|
| if (IS_ALIGNED(width, 16)) {
|
| ARGBToUVRow = ARGBToUVRow_SSSE3;
|
| @@ -1241,13 +1073,10 @@ int RGB565ToI420(const uint8* src_rgb565, int src_stride_rgb565,
|
| }
|
| #endif
|
| #if defined(HAS_ARGBTOUVROW_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(dst_y, 16) && IS_ALIGNED(dst_stride_y, 16)) {
|
| - ARGBToYRow = ARGBToYRow_SSSE3;
|
| - }
|
| + ARGBToYRow = ARGBToYRow_SSSE3;
|
| }
|
| }
|
| #endif // HAS_ARGBTOUVROW_SSSE3
|
| @@ -1327,22 +1156,20 @@ int ARGB1555ToI420(const uint8* src_argb1555, int src_stride_argb1555,
|
| }
|
|
|
| #if defined(HAS_ARGB1555TOYROW_NEON)
|
| - if (TestCpuFlag(kCpuHasNEON) && width >= 8) {
|
| + if (TestCpuFlag(kCpuHasNEON)) {
|
| ARGB1555ToYRow = ARGB1555ToYRow_Any_NEON;
|
| if (IS_ALIGNED(width, 8)) {
|
| ARGB1555ToYRow = ARGB1555ToYRow_NEON;
|
| }
|
| - if (width >= 16) {
|
| - ARGB1555ToUVRow = ARGB1555ToUVRow_Any_NEON;
|
| - if (IS_ALIGNED(width, 16)) {
|
| - ARGB1555ToUVRow = ARGB1555ToUVRow_NEON;
|
| - }
|
| + ARGB1555ToUVRow = ARGB1555ToUVRow_Any_NEON;
|
| + if (IS_ALIGNED(width, 16)) {
|
| + ARGB1555ToUVRow = ARGB1555ToUVRow_NEON;
|
| }
|
| }
|
| #else // HAS_ARGB1555TOYROW_NEON
|
|
|
| #if defined(HAS_ARGB1555TOARGBROW_SSE2)
|
| - if (TestCpuFlag(kCpuHasSSE2) && width >= 8) {
|
| + if (TestCpuFlag(kCpuHasSSE2)) {
|
| ARGB1555ToARGBRow = ARGB1555ToARGBRow_Any_SSE2;
|
| if (IS_ALIGNED(width, 8)) {
|
| ARGB1555ToARGBRow = ARGB1555ToARGBRow_SSE2;
|
| @@ -1350,7 +1177,7 @@ int ARGB1555ToI420(const uint8* src_argb1555, int src_stride_argb1555,
|
| }
|
| #endif
|
| #if defined(HAS_ARGBTOUVROW_SSSE3)
|
| - if (TestCpuFlag(kCpuHasSSSE3) && width >= 16) {
|
| + if (TestCpuFlag(kCpuHasSSSE3)) {
|
| ARGBToUVRow = ARGBToUVRow_Any_SSSE3;
|
| if (IS_ALIGNED(width, 16)) {
|
| ARGBToUVRow = ARGBToUVRow_SSSE3;
|
| @@ -1358,13 +1185,10 @@ int ARGB1555ToI420(const uint8* src_argb1555, int src_stride_argb1555,
|
| }
|
| #endif
|
| #if defined(HAS_ARGBTOUVROW_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(dst_y, 16) && IS_ALIGNED(dst_stride_y, 16)) {
|
| - ARGBToYRow = ARGBToYRow_SSSE3;
|
| - }
|
| + ARGBToYRow = ARGBToYRow_SSSE3;
|
| }
|
| }
|
| #endif // HAS_ARGBTOUVROW_SSSE3
|
| @@ -1445,22 +1269,20 @@ int ARGB4444ToI420(const uint8* src_argb4444, int src_stride_argb4444,
|
| }
|
|
|
| #if defined(HAS_ARGB4444TOYROW_NEON)
|
| - if (TestCpuFlag(kCpuHasNEON) && width >= 8) {
|
| + if (TestCpuFlag(kCpuHasNEON)) {
|
| ARGB4444ToYRow = ARGB4444ToYRow_Any_NEON;
|
| if (IS_ALIGNED(width, 8)) {
|
| ARGB4444ToYRow = ARGB4444ToYRow_NEON;
|
| }
|
| - if (width >= 16) {
|
| - ARGB4444ToUVRow = ARGB4444ToUVRow_Any_NEON;
|
| - if (IS_ALIGNED(width, 16)) {
|
| - ARGB4444ToUVRow = ARGB4444ToUVRow_NEON;
|
| - }
|
| + ARGB4444ToUVRow = ARGB4444ToUVRow_Any_NEON;
|
| + if (IS_ALIGNED(width, 16)) {
|
| + ARGB4444ToUVRow = ARGB4444ToUVRow_NEON;
|
| }
|
| }
|
| #else // HAS_ARGB4444TOYROW_NEON
|
|
|
| #if defined(HAS_ARGB4444TOARGBROW_SSE2)
|
| - if (TestCpuFlag(kCpuHasSSE2) && width >= 8) {
|
| + if (TestCpuFlag(kCpuHasSSE2)) {
|
| ARGB4444ToARGBRow = ARGB4444ToARGBRow_Any_SSE2;
|
| if (IS_ALIGNED(width, 8)) {
|
| ARGB4444ToARGBRow = ARGB4444ToARGBRow_SSE2;
|
| @@ -1468,7 +1290,7 @@ int ARGB4444ToI420(const uint8* src_argb4444, int src_stride_argb4444,
|
| }
|
| #endif
|
| #if defined(HAS_ARGBTOUVROW_SSSE3)
|
| - if (TestCpuFlag(kCpuHasSSSE3) && width >= 16) {
|
| + if (TestCpuFlag(kCpuHasSSSE3)) {
|
| ARGBToUVRow = ARGBToUVRow_Any_SSSE3;
|
| if (IS_ALIGNED(width, 16)) {
|
| ARGBToUVRow = ARGBToUVRow_SSSE3;
|
| @@ -1476,13 +1298,10 @@ int ARGB4444ToI420(const uint8* src_argb4444, int src_stride_argb4444,
|
| }
|
| #endif
|
| #if defined(HAS_ARGBTOUVROW_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(dst_y, 16) && IS_ALIGNED(dst_stride_y, 16)) {
|
| - ARGBToYRow = ARGBToYRow_SSSE3;
|
| - }
|
| + ARGBToYRow = ARGBToYRow_SSSE3;
|
| }
|
| }
|
| #endif // HAS_ARGBTOUVROW_SSSE3
|
|
|