| 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
|
|
|