Index: source/libvpx/third_party/libyuv/source/convert_from_argb.cc |
=================================================================== |
--- source/libvpx/third_party/libyuv/source/convert_from_argb.cc (revision 291857) |
+++ source/libvpx/third_party/libyuv/source/convert_from_argb.cc (working copy) |
@@ -60,6 +60,13 @@ |
} |
} |
} |
+#elif defined(HAS_ARGBTOUV444ROW_NEON) |
+ if (TestCpuFlag(kCpuHasNEON) && width >= 8) { |
+ ARGBToUV444Row = ARGBToUV444Row_Any_NEON; |
+ if (IS_ALIGNED(width, 8)) { |
+ ARGBToUV444Row = ARGBToUV444Row_NEON; |
+ } |
+ } |
#endif |
#if defined(HAS_ARGBTOYROW_SSSE3) |
if (TestCpuFlag(kCpuHasSSSE3) && width >= 16) { |
@@ -76,10 +83,8 @@ |
#elif defined(HAS_ARGBTOYROW_NEON) |
if (TestCpuFlag(kCpuHasNEON) && width >= 8) { |
ARGBToYRow = ARGBToYRow_Any_NEON; |
- ARGBToUV444Row = ARGBToUV444Row_Any_NEON; |
if (IS_ALIGNED(width, 8)) { |
ARGBToYRow = ARGBToYRow_NEON; |
- ARGBToUV444Row = ARGBToUV444Row_NEON; |
} |
} |
#endif |
@@ -134,6 +139,13 @@ |
} |
} |
} |
+#elif defined(HAS_ARGBTOUV422ROW_NEON) |
+ if (TestCpuFlag(kCpuHasNEON) && width >= 16) { |
+ ARGBToUV422Row = ARGBToUV422Row_Any_NEON; |
+ if (IS_ALIGNED(width, 16)) { |
+ ARGBToUV422Row = ARGBToUV422Row_NEON; |
+ } |
+ } |
#endif |
#if defined(HAS_ARGBTOYROW_SSSE3) |
@@ -153,12 +165,6 @@ |
if (IS_ALIGNED(width, 8)) { |
ARGBToYRow = ARGBToYRow_NEON; |
} |
- if (width >= 16) { |
- ARGBToUV422Row = ARGBToUV422Row_Any_NEON; |
- if (IS_ALIGNED(width, 16)) { |
- ARGBToUV422Row = ARGBToUV422Row_NEON; |
- } |
- } |
} |
#endif |
@@ -228,11 +234,13 @@ |
if (IS_ALIGNED(width, 8)) { |
ARGBToYRow = ARGBToYRow_NEON; |
} |
- if (width >= 32) { |
- ARGBToUV411Row = ARGBToUV411Row_Any_NEON; |
- if (IS_ALIGNED(width, 32)) { |
- ARGBToUV411Row = ARGBToUV411Row_NEON; |
- } |
+ } |
+#endif |
+#if defined(HAS_ARGBTOUV411ROW_NEON) |
+ if (TestCpuFlag(kCpuHasNEON) && width >= 32) { |
+ ARGBToUV411Row = ARGBToUV411Row_Any_NEON; |
+ if (IS_ALIGNED(width, 32)) { |
+ ARGBToUV411Row = ARGBToUV411Row_NEON; |
} |
} |
#endif |
@@ -261,9 +269,6 @@ |
ARGBToYRow_C; |
void (*MergeUVRow_)(const uint8* src_u, const uint8* src_v, uint8* dst_uv, |
int width) = MergeUVRow_C; |
- // Allocate a rows of uv. |
- align_buffer_64(row_u, ((halfwidth + 15) & ~15) * 2); |
- uint8* row_v = row_u + ((halfwidth + 15) & ~15); |
if (!src_argb || |
!dst_y || !dst_uv || |
width <= 0 || height == 0) { |
@@ -296,11 +301,13 @@ |
if (IS_ALIGNED(width, 8)) { |
ARGBToYRow = ARGBToYRow_NEON; |
} |
- if (width >= 16) { |
- ARGBToUVRow = ARGBToUVRow_Any_NEON; |
- if (IS_ALIGNED(width, 16)) { |
- ARGBToUVRow = ARGBToUVRow_NEON; |
- } |
+ } |
+#endif |
+#if defined(HAS_ARGBTOUVROW_NEON) |
+ if (TestCpuFlag(kCpuHasNEON) && width >= 16) { |
+ ARGBToUVRow = ARGBToUVRow_Any_NEON; |
+ if (IS_ALIGNED(width, 16)) { |
+ ARGBToUVRow = ARGBToUVRow_NEON; |
} |
} |
#endif |
@@ -331,22 +338,27 @@ |
} |
} |
#endif |
+ { |
+ // Allocate a rows of uv. |
+ align_buffer_64(row_u, ((halfwidth + 15) & ~15) * 2); |
+ uint8* row_v = row_u + ((halfwidth + 15) & ~15); |
- for (y = 0; y < height - 1; y += 2) { |
- ARGBToUVRow(src_argb, src_stride_argb, row_u, row_v, width); |
- MergeUVRow_(row_u, row_v, dst_uv, halfwidth); |
- ARGBToYRow(src_argb, dst_y, width); |
- ARGBToYRow(src_argb + src_stride_argb, dst_y + dst_stride_y, width); |
- src_argb += src_stride_argb * 2; |
- dst_y += dst_stride_y * 2; |
- dst_uv += dst_stride_uv; |
+ for (y = 0; y < height - 1; y += 2) { |
+ ARGBToUVRow(src_argb, src_stride_argb, row_u, row_v, width); |
+ MergeUVRow_(row_u, row_v, dst_uv, halfwidth); |
+ ARGBToYRow(src_argb, dst_y, width); |
+ ARGBToYRow(src_argb + src_stride_argb, dst_y + dst_stride_y, width); |
+ src_argb += src_stride_argb * 2; |
+ dst_y += dst_stride_y * 2; |
+ dst_uv += dst_stride_uv; |
+ } |
+ if (height & 1) { |
+ ARGBToUVRow(src_argb, 0, row_u, row_v, width); |
+ MergeUVRow_(row_u, row_v, dst_uv, halfwidth); |
+ ARGBToYRow(src_argb, dst_y, width); |
+ } |
+ free_aligned_buffer_64(row_u); |
} |
- if (height & 1) { |
- ARGBToUVRow(src_argb, 0, row_u, row_v, width); |
- MergeUVRow_(row_u, row_v, dst_uv, halfwidth); |
- ARGBToYRow(src_argb, dst_y, width); |
- } |
- free_aligned_buffer_64(row_u); |
return 0; |
} |
@@ -364,9 +376,6 @@ |
ARGBToYRow_C; |
void (*MergeUVRow_)(const uint8* src_u, const uint8* src_v, uint8* dst_uv, |
int width) = MergeUVRow_C; |
- // Allocate a rows of uv. |
- align_buffer_64(row_u, ((halfwidth + 15) & ~15) * 2); |
- uint8* row_v = row_u + ((halfwidth + 15) & ~15); |
if (!src_argb || |
!dst_y || !dst_uv || |
width <= 0 || height == 0) { |
@@ -399,11 +408,13 @@ |
if (IS_ALIGNED(width, 8)) { |
ARGBToYRow = ARGBToYRow_NEON; |
} |
- if (width >= 16) { |
- ARGBToUVRow = ARGBToUVRow_Any_NEON; |
- if (IS_ALIGNED(width, 16)) { |
- ARGBToUVRow = ARGBToUVRow_NEON; |
- } |
+ } |
+#endif |
+#if defined(HAS_ARGBTOUVROW_NEON) |
+ if (TestCpuFlag(kCpuHasNEON) && width >= 16) { |
+ ARGBToUVRow = ARGBToUVRow_Any_NEON; |
+ if (IS_ALIGNED(width, 16)) { |
+ ARGBToUVRow = ARGBToUVRow_NEON; |
} |
} |
#endif |
@@ -434,22 +445,27 @@ |
} |
} |
#endif |
+ { |
+ // Allocate a rows of uv. |
+ align_buffer_64(row_u, ((halfwidth + 15) & ~15) * 2); |
+ uint8* row_v = row_u + ((halfwidth + 15) & ~15); |
- for (y = 0; y < height - 1; y += 2) { |
- ARGBToUVRow(src_argb, src_stride_argb, row_u, row_v, width); |
- MergeUVRow_(row_v, row_u, dst_uv, halfwidth); |
- ARGBToYRow(src_argb, dst_y, width); |
- ARGBToYRow(src_argb + src_stride_argb, dst_y + dst_stride_y, width); |
- src_argb += src_stride_argb * 2; |
- dst_y += dst_stride_y * 2; |
- dst_uv += dst_stride_uv; |
+ for (y = 0; y < height - 1; y += 2) { |
+ ARGBToUVRow(src_argb, src_stride_argb, row_u, row_v, width); |
+ MergeUVRow_(row_v, row_u, dst_uv, halfwidth); |
+ ARGBToYRow(src_argb, dst_y, width); |
+ ARGBToYRow(src_argb + src_stride_argb, dst_y + dst_stride_y, width); |
+ src_argb += src_stride_argb * 2; |
+ dst_y += dst_stride_y * 2; |
+ dst_uv += dst_stride_uv; |
+ } |
+ if (height & 1) { |
+ ARGBToUVRow(src_argb, 0, row_u, row_v, width); |
+ MergeUVRow_(row_v, row_u, dst_uv, halfwidth); |
+ ARGBToYRow(src_argb, dst_y, width); |
+ } |
+ free_aligned_buffer_64(row_u); |
} |
- if (height & 1) { |
- ARGBToUVRow(src_argb, 0, row_u, row_v, width); |
- MergeUVRow_(row_v, row_u, dst_uv, halfwidth); |
- ARGBToYRow(src_argb, dst_y, width); |
- } |
- free_aligned_buffer_64(row_u); |
return 0; |
} |
@@ -493,6 +509,13 @@ |
} |
} |
} |
+#elif defined(HAS_ARGBTOUV422ROW_NEON) |
+ if (TestCpuFlag(kCpuHasNEON) && width >= 16) { |
+ ARGBToUV422Row = ARGBToUV422Row_Any_NEON; |
+ if (IS_ALIGNED(width, 16)) { |
+ ARGBToUV422Row = ARGBToUV422Row_NEON; |
+ } |
+ } |
#endif |
#if defined(HAS_ARGBTOYROW_SSSE3) |
if (TestCpuFlag(kCpuHasSSSE3) && width >= 16) { |
@@ -510,12 +533,6 @@ |
if (IS_ALIGNED(width, 8)) { |
ARGBToYRow = ARGBToYRow_NEON; |
} |
- if (width >= 16) { |
- ARGBToUV422Row = ARGBToUV422Row_Any_NEON; |
- if (IS_ALIGNED(width, 16)) { |
- ARGBToUV422Row = ARGBToUV422Row_NEON; |
- } |
- } |
} |
#endif |
@@ -594,6 +611,13 @@ |
} |
} |
} |
+#elif defined(HAS_ARGBTOUV422ROW_NEON) |
+ if (TestCpuFlag(kCpuHasNEON) && width >= 16) { |
+ ARGBToUV422Row = ARGBToUV422Row_Any_NEON; |
+ if (IS_ALIGNED(width, 16)) { |
+ ARGBToUV422Row = ARGBToUV422Row_NEON; |
+ } |
+ } |
#endif |
#if defined(HAS_ARGBTOYROW_SSSE3) |
if (TestCpuFlag(kCpuHasSSSE3) && width >= 16) { |
@@ -611,12 +635,6 @@ |
if (IS_ALIGNED(width, 8)) { |
ARGBToYRow = ARGBToYRow_NEON; |
} |
- if (width >= 16) { |
- ARGBToUV422Row = ARGBToUV422Row_Any_NEON; |
- if (IS_ALIGNED(width, 16)) { |
- ARGBToUV422Row = ARGBToUV422Row_NEON; |
- } |
- } |
} |
#endif |
@@ -1022,11 +1040,13 @@ |
if (IS_ALIGNED(width, 8)) { |
ARGBToYJRow = ARGBToYJRow_NEON; |
} |
- if (width >= 16) { |
- ARGBToUVJRow = ARGBToUVJRow_Any_NEON; |
- if (IS_ALIGNED(width, 16)) { |
- ARGBToUVJRow = ARGBToUVJRow_NEON; |
- } |
+ } |
+#endif |
+#if defined(HAS_ARGBTOUVJROW_NEON) |
+ if (TestCpuFlag(kCpuHasNEON) && width >= 16) { |
+ ARGBToUVJRow = ARGBToUVJRow_Any_NEON; |
+ if (IS_ALIGNED(width, 16)) { |
+ ARGBToUVJRow = ARGBToUVJRow_NEON; |
} |
} |
#endif |