| Index: source/convert.cc
|
| diff --git a/source/convert.cc b/source/convert.cc
|
| index 3779d999d24e3cd1c314f135cd1bbca84495a588..9e9d8cc87ed7a0d208e932e4b72127ba2579fbc2 100644
|
| --- a/source/convert.cc
|
| +++ b/source/convert.cc
|
| @@ -832,7 +832,7 @@ int RGB24ToI420(const uint8* src_rgb24,
|
| int width,
|
| int height) {
|
| int y;
|
| -#if defined(HAS_RGB24TOYROW_NEON)
|
| +#if (defined(HAS_RGB24TOYROW_NEON) || defined(HAS_RGB24TOYROW_MSA))
|
| void (*RGB24ToUVRow)(const uint8* src_rgb24, int src_stride_rgb24,
|
| uint8* dst_u, uint8* dst_v, int width) = RGB24ToUVRow_C;
|
| void (*RGB24ToYRow)(const uint8* src_rgb24, uint8* dst_y, int width) =
|
| @@ -867,6 +867,15 @@ int RGB24ToI420(const uint8* src_rgb24,
|
| }
|
| }
|
| }
|
| +#elif defined(HAS_RGB24TOYROW_MSA)
|
| + if (TestCpuFlag(kCpuHasMSA)) {
|
| + RGB24ToUVRow = RGB24ToUVRow_Any_MSA;
|
| + RGB24ToYRow = RGB24ToYRow_Any_MSA;
|
| + if (IS_ALIGNED(width, 16)) {
|
| + RGB24ToYRow = RGB24ToYRow_MSA;
|
| + RGB24ToUVRow = RGB24ToUVRow_MSA;
|
| + }
|
| + }
|
| // Other platforms do intermediate conversion from RGB24 to ARGB.
|
| #else
|
| #if defined(HAS_RGB24TOARGBROW_SSSE3)
|
| @@ -904,16 +913,16 @@ int RGB24ToI420(const uint8* src_rgb24,
|
| #endif
|
|
|
| for (y = 0; y < height - 1; y += 2) {
|
| -#if defined(HAS_RGB24TOYROW_NEON)
|
| +#if (defined(HAS_RGB24TOYROW_NEON) || defined(HAS_RGB24TOYROW_MSA))
|
| RGB24ToUVRow(src_rgb24, src_stride_rgb24, dst_u, dst_v, width);
|
| RGB24ToYRow(src_rgb24, dst_y, width);
|
| RGB24ToYRow(src_rgb24 + src_stride_rgb24, dst_y + dst_stride_y, width);
|
| #else
|
| - RGB24ToARGBRow(src_rgb24, row, width);
|
| - RGB24ToARGBRow(src_rgb24 + src_stride_rgb24, row + kRowSize, width);
|
| - ARGBToUVRow(row, kRowSize, dst_u, dst_v, width);
|
| - ARGBToYRow(row, dst_y, width);
|
| - ARGBToYRow(row + kRowSize, dst_y + dst_stride_y, width);
|
| + RGB24ToARGBRow(src_rgb24, row, width);
|
| + RGB24ToARGBRow(src_rgb24 + src_stride_rgb24, row + kRowSize, width);
|
| + ARGBToUVRow(row, kRowSize, dst_u, dst_v, width);
|
| + ARGBToYRow(row, dst_y, width);
|
| + ARGBToYRow(row + kRowSize, dst_y + dst_stride_y, width);
|
| #endif
|
| src_rgb24 += src_stride_rgb24 * 2;
|
| dst_y += dst_stride_y * 2;
|
| @@ -921,16 +930,16 @@ int RGB24ToI420(const uint8* src_rgb24,
|
| dst_v += dst_stride_v;
|
| }
|
| if (height & 1) {
|
| -#if defined(HAS_RGB24TOYROW_NEON)
|
| +#if (defined(HAS_RGB24TOYROW_NEON) || defined(HAS_RGB24TOYROW_MSA))
|
| RGB24ToUVRow(src_rgb24, 0, dst_u, dst_v, width);
|
| RGB24ToYRow(src_rgb24, dst_y, width);
|
| #else
|
| - RGB24ToARGBRow(src_rgb24, row, width);
|
| - ARGBToUVRow(row, 0, dst_u, dst_v, width);
|
| - ARGBToYRow(row, dst_y, width);
|
| + RGB24ToARGBRow(src_rgb24, row, width);
|
| + ARGBToUVRow(row, 0, dst_u, dst_v, width);
|
| + ARGBToYRow(row, dst_y, width);
|
| #endif
|
| }
|
| -#if !defined(HAS_RGB24TOYROW_NEON)
|
| +#if !(defined(HAS_RGB24TOYROW_NEON) || defined(HAS_RGB24TOYROW_MSA))
|
| free_aligned_buffer_64(row);
|
| }
|
| #endif
|
| @@ -950,18 +959,18 @@ int RAWToI420(const uint8* src_raw,
|
| int width,
|
| int height) {
|
| int y;
|
| -#if defined(HAS_RAWTOYROW_NEON)
|
| +#if (defined(HAS_RAWTOYROW_NEON) || defined(HAS_RAWTOYROW_MSA))
|
| void (*RAWToUVRow)(const uint8* src_raw, int src_stride_raw, uint8* dst_u,
|
| uint8* dst_v, int width) = RAWToUVRow_C;
|
| void (*RAWToYRow)(const uint8* src_raw, uint8* dst_y, int width) =
|
| RAWToYRow_C;
|
| #else
|
| - void (*RAWToARGBRow)(const uint8* src_rgb, uint8* dst_argb, int width) =
|
| - RAWToARGBRow_C;
|
| - void (*ARGBToUVRow)(const uint8* src_argb0, int src_stride_argb,
|
| - uint8* dst_u, uint8* dst_v, int width) = ARGBToUVRow_C;
|
| - void (*ARGBToYRow)(const uint8* src_argb, uint8* dst_y, int width) =
|
| - ARGBToYRow_C;
|
| + void (*RAWToARGBRow)(const uint8* src_rgb, uint8* dst_argb, int width) =
|
| + RAWToARGBRow_C;
|
| + void (*ARGBToUVRow)(const uint8* src_argb0, int src_stride_argb, uint8* dst_u,
|
| + uint8* dst_v, int width) = ARGBToUVRow_C;
|
| + void (*ARGBToYRow)(const uint8* src_argb, uint8* dst_y, int width) =
|
| + ARGBToYRow_C;
|
| #endif
|
| if (!src_raw || !dst_y || !dst_u || !dst_v || width <= 0 || height == 0) {
|
| return -1;
|
| @@ -985,6 +994,15 @@ int RAWToI420(const uint8* src_raw,
|
| }
|
| }
|
| }
|
| +#elif defined(HAS_RAWTOYROW_MSA)
|
| + if (TestCpuFlag(kCpuHasMSA)) {
|
| + RAWToUVRow = RAWToUVRow_Any_MSA;
|
| + RAWToYRow = RAWToYRow_Any_MSA;
|
| + if (IS_ALIGNED(width, 16)) {
|
| + RAWToYRow = RAWToYRow_MSA;
|
| + RAWToUVRow = RAWToUVRow_MSA;
|
| + }
|
| + }
|
| // Other platforms do intermediate conversion from RAW to ARGB.
|
| #else
|
| #if defined(HAS_RAWTOARGBROW_SSSE3)
|
| @@ -1022,16 +1040,16 @@ int RAWToI420(const uint8* src_raw,
|
| #endif
|
|
|
| for (y = 0; y < height - 1; y += 2) {
|
| -#if defined(HAS_RAWTOYROW_NEON)
|
| +#if (defined(HAS_RAWTOYROW_NEON) || defined(HAS_RAWTOYROW_MSA))
|
| RAWToUVRow(src_raw, src_stride_raw, dst_u, dst_v, width);
|
| RAWToYRow(src_raw, dst_y, width);
|
| RAWToYRow(src_raw + src_stride_raw, dst_y + dst_stride_y, width);
|
| #else
|
| - RAWToARGBRow(src_raw, row, width);
|
| - RAWToARGBRow(src_raw + src_stride_raw, row + kRowSize, width);
|
| - ARGBToUVRow(row, kRowSize, dst_u, dst_v, width);
|
| - ARGBToYRow(row, dst_y, width);
|
| - ARGBToYRow(row + kRowSize, dst_y + dst_stride_y, width);
|
| + RAWToARGBRow(src_raw, row, width);
|
| + RAWToARGBRow(src_raw + src_stride_raw, row + kRowSize, width);
|
| + ARGBToUVRow(row, kRowSize, dst_u, dst_v, width);
|
| + ARGBToYRow(row, dst_y, width);
|
| + ARGBToYRow(row + kRowSize, dst_y + dst_stride_y, width);
|
| #endif
|
| src_raw += src_stride_raw * 2;
|
| dst_y += dst_stride_y * 2;
|
| @@ -1039,16 +1057,16 @@ int RAWToI420(const uint8* src_raw,
|
| dst_v += dst_stride_v;
|
| }
|
| if (height & 1) {
|
| -#if defined(HAS_RAWTOYROW_NEON)
|
| +#if (defined(HAS_RAWTOYROW_NEON) || defined(HAS_RAWTOYROW_MSA))
|
| RAWToUVRow(src_raw, 0, dst_u, dst_v, width);
|
| RAWToYRow(src_raw, dst_y, width);
|
| #else
|
| - RAWToARGBRow(src_raw, row, width);
|
| - ARGBToUVRow(row, 0, dst_u, dst_v, width);
|
| - ARGBToYRow(row, dst_y, width);
|
| + RAWToARGBRow(src_raw, row, width);
|
| + ARGBToUVRow(row, 0, dst_u, dst_v, width);
|
| + ARGBToYRow(row, dst_y, width);
|
| #endif
|
| }
|
| -#if !defined(HAS_RAWTOYROW_NEON)
|
| +#if !(defined(HAS_RAWTOYROW_NEON) || defined(HAS_RAWTOYROW_MSA))
|
| free_aligned_buffer_64(row);
|
| }
|
| #endif
|
| @@ -1068,20 +1086,19 @@ int RGB565ToI420(const uint8* src_rgb565,
|
| int width,
|
| int height) {
|
| int y;
|
| -#if defined(HAS_RGB565TOYROW_NEON)
|
| +#if (defined(HAS_RGB565TOYROW_NEON) || defined(HAS_RGB565TOYROW_MSA))
|
| void (*RGB565ToUVRow)(const uint8* src_rgb565, int src_stride_rgb565,
|
| uint8* dst_u, uint8* dst_v, int width) =
|
| RGB565ToUVRow_C;
|
| void (*RGB565ToYRow)(const uint8* src_rgb565, uint8* dst_y, int width) =
|
| RGB565ToYRow_C;
|
| #else
|
| - void (*RGB565ToARGBRow)(const uint8* src_rgb, uint8* dst_argb,
|
| - int width) = RGB565ToARGBRow_C;
|
| - void (*ARGBToUVRow)(const uint8* src_argb0, int src_stride_argb,
|
| - uint8* dst_u, uint8* dst_v, int width) =
|
| - ARGBToUVRow_C;
|
| - void (*ARGBToYRow)(const uint8* src_argb, uint8* dst_y, int width) =
|
| - ARGBToYRow_C;
|
| + void (*RGB565ToARGBRow)(const uint8* src_rgb, uint8* dst_argb, int width) =
|
| + RGB565ToARGBRow_C;
|
| + void (*ARGBToUVRow)(const uint8* src_argb0, int src_stride_argb, uint8* dst_u,
|
| + uint8* dst_v, int width) = ARGBToUVRow_C;
|
| + void (*ARGBToYRow)(const uint8* src_argb, uint8* dst_y, int width) =
|
| + ARGBToYRow_C;
|
| #endif
|
| if (!src_rgb565 || !dst_y || !dst_u || !dst_v || width <= 0 || height == 0) {
|
| return -1;
|
| @@ -1105,6 +1122,15 @@ int RGB565ToI420(const uint8* src_rgb565,
|
| }
|
| }
|
| }
|
| +#elif defined(HAS_RGB565TOYROW_MSA)
|
| + if (TestCpuFlag(kCpuHasMSA)) {
|
| + RGB565ToUVRow = RGB565ToUVRow_Any_MSA;
|
| + RGB565ToYRow = RGB565ToYRow_Any_MSA;
|
| + if (IS_ALIGNED(width, 16)) {
|
| + RGB565ToYRow = RGB565ToYRow_MSA;
|
| + RGB565ToUVRow = RGB565ToUVRow_MSA;
|
| + }
|
| + }
|
| // Other platforms do intermediate conversion from RGB565 to ARGB.
|
| #else
|
| #if defined(HAS_RGB565TOARGBROW_SSE2)
|
| @@ -1150,17 +1176,16 @@ int RGB565ToI420(const uint8* src_rgb565,
|
| #endif
|
|
|
| for (y = 0; y < height - 1; y += 2) {
|
| -#if defined(HAS_RGB565TOYROW_NEON)
|
| +#if (defined(HAS_RGB565TOYROW_NEON) || defined(HAS_RGB565TOYROW_MSA))
|
| RGB565ToUVRow(src_rgb565, src_stride_rgb565, dst_u, dst_v, width);
|
| RGB565ToYRow(src_rgb565, dst_y, width);
|
| RGB565ToYRow(src_rgb565 + src_stride_rgb565, dst_y + dst_stride_y, width);
|
| #else
|
| - RGB565ToARGBRow(src_rgb565, row, width);
|
| - RGB565ToARGBRow(src_rgb565 + src_stride_rgb565, row + kRowSize,
|
| - width);
|
| - ARGBToUVRow(row, kRowSize, dst_u, dst_v, width);
|
| - ARGBToYRow(row, dst_y, width);
|
| - ARGBToYRow(row + kRowSize, dst_y + dst_stride_y, width);
|
| + RGB565ToARGBRow(src_rgb565, row, width);
|
| + RGB565ToARGBRow(src_rgb565 + src_stride_rgb565, row + kRowSize, width);
|
| + ARGBToUVRow(row, kRowSize, dst_u, dst_v, width);
|
| + ARGBToYRow(row, dst_y, width);
|
| + ARGBToYRow(row + kRowSize, dst_y + dst_stride_y, width);
|
| #endif
|
| src_rgb565 += src_stride_rgb565 * 2;
|
| dst_y += dst_stride_y * 2;
|
| @@ -1168,16 +1193,16 @@ int RGB565ToI420(const uint8* src_rgb565,
|
| dst_v += dst_stride_v;
|
| }
|
| if (height & 1) {
|
| -#if defined(HAS_RGB565TOYROW_NEON)
|
| +#if (defined(HAS_RGB565TOYROW_NEON) || defined(HAS_RGB565TOYROW_MSA))
|
| RGB565ToUVRow(src_rgb565, 0, dst_u, dst_v, width);
|
| RGB565ToYRow(src_rgb565, dst_y, width);
|
| #else
|
| - RGB565ToARGBRow(src_rgb565, row, width);
|
| - ARGBToUVRow(row, 0, dst_u, dst_v, width);
|
| - ARGBToYRow(row, dst_y, width);
|
| + RGB565ToARGBRow(src_rgb565, row, width);
|
| + ARGBToUVRow(row, 0, dst_u, dst_v, width);
|
| + ARGBToYRow(row, dst_y, width);
|
| #endif
|
| }
|
| -#if !defined(HAS_RGB565TOYROW_NEON)
|
| +#if !(defined(HAS_RGB565TOYROW_NEON) || defined(HAS_RGB565TOYROW_MSA))
|
| free_aligned_buffer_64(row);
|
| }
|
| #endif
|
| @@ -1197,20 +1222,19 @@ int ARGB1555ToI420(const uint8* src_argb1555,
|
| int width,
|
| int height) {
|
| int y;
|
| -#if defined(HAS_ARGB1555TOYROW_NEON)
|
| +#if (defined(HAS_ARGB1555TOYROW_NEON) || defined(HAS_ARGB1555TOYROW_MSA))
|
| void (*ARGB1555ToUVRow)(const uint8* src_argb1555, int src_stride_argb1555,
|
| uint8* dst_u, uint8* dst_v, int width) =
|
| ARGB1555ToUVRow_C;
|
| void (*ARGB1555ToYRow)(const uint8* src_argb1555, uint8* dst_y, int width) =
|
| ARGB1555ToYRow_C;
|
| #else
|
| - void (*ARGB1555ToARGBRow)(const uint8* src_rgb, uint8* dst_argb,
|
| - int width) = ARGB1555ToARGBRow_C;
|
| - void (*ARGBToUVRow)(const uint8* src_argb0, int src_stride_argb,
|
| - uint8* dst_u, uint8* dst_v, int width) =
|
| - ARGBToUVRow_C;
|
| - void (*ARGBToYRow)(const uint8* src_argb, uint8* dst_y, int width) =
|
| - ARGBToYRow_C;
|
| + void (*ARGB1555ToARGBRow)(const uint8* src_rgb, uint8* dst_argb, int width) =
|
| + ARGB1555ToARGBRow_C;
|
| + void (*ARGBToUVRow)(const uint8* src_argb0, int src_stride_argb, uint8* dst_u,
|
| + uint8* dst_v, int width) = ARGBToUVRow_C;
|
| + void (*ARGBToYRow)(const uint8* src_argb, uint8* dst_y, int width) =
|
| + ARGBToYRow_C;
|
| #endif
|
| if (!src_argb1555 || !dst_y || !dst_u || !dst_v || width <= 0 ||
|
| height == 0) {
|
| @@ -1235,6 +1259,15 @@ int ARGB1555ToI420(const uint8* src_argb1555,
|
| }
|
| }
|
| }
|
| +#elif defined(HAS_ARGB1555TOYROW_MSA)
|
| + if (TestCpuFlag(kCpuHasMSA)) {
|
| + ARGB1555ToUVRow = ARGB1555ToUVRow_Any_MSA;
|
| + ARGB1555ToYRow = ARGB1555ToYRow_Any_MSA;
|
| + if (IS_ALIGNED(width, 16)) {
|
| + ARGB1555ToYRow = ARGB1555ToYRow_MSA;
|
| + ARGB1555ToUVRow = ARGB1555ToUVRow_MSA;
|
| + }
|
| + }
|
| // Other platforms do intermediate conversion from ARGB1555 to ARGB.
|
| #else
|
| #if defined(HAS_ARGB1555TOARGBROW_SSE2)
|
| @@ -1280,18 +1313,18 @@ int ARGB1555ToI420(const uint8* src_argb1555,
|
| #endif
|
|
|
| for (y = 0; y < height - 1; y += 2) {
|
| -#if defined(HAS_ARGB1555TOYROW_NEON)
|
| +#if (defined(HAS_ARGB1555TOYROW_NEON) || defined(HAS_ARGB1555TOYROW_MSA))
|
| ARGB1555ToUVRow(src_argb1555, src_stride_argb1555, dst_u, dst_v, width);
|
| ARGB1555ToYRow(src_argb1555, dst_y, width);
|
| ARGB1555ToYRow(src_argb1555 + src_stride_argb1555, dst_y + dst_stride_y,
|
| width);
|
| #else
|
| - ARGB1555ToARGBRow(src_argb1555, row, width);
|
| - ARGB1555ToARGBRow(src_argb1555 + src_stride_argb1555,
|
| - row + kRowSize, width);
|
| - ARGBToUVRow(row, kRowSize, dst_u, dst_v, width);
|
| - ARGBToYRow(row, dst_y, width);
|
| - ARGBToYRow(row + kRowSize, dst_y + dst_stride_y, width);
|
| + ARGB1555ToARGBRow(src_argb1555, row, width);
|
| + ARGB1555ToARGBRow(src_argb1555 + src_stride_argb1555, row + kRowSize,
|
| + width);
|
| + ARGBToUVRow(row, kRowSize, dst_u, dst_v, width);
|
| + ARGBToYRow(row, dst_y, width);
|
| + ARGBToYRow(row + kRowSize, dst_y + dst_stride_y, width);
|
| #endif
|
| src_argb1555 += src_stride_argb1555 * 2;
|
| dst_y += dst_stride_y * 2;
|
| @@ -1299,16 +1332,16 @@ int ARGB1555ToI420(const uint8* src_argb1555,
|
| dst_v += dst_stride_v;
|
| }
|
| if (height & 1) {
|
| -#if defined(HAS_ARGB1555TOYROW_NEON)
|
| +#if (defined(HAS_ARGB1555TOYROW_NEON) || defined(HAS_ARGB1555TOYROW_MSA))
|
| ARGB1555ToUVRow(src_argb1555, 0, dst_u, dst_v, width);
|
| ARGB1555ToYRow(src_argb1555, dst_y, width);
|
| #else
|
| - ARGB1555ToARGBRow(src_argb1555, row, width);
|
| - ARGBToUVRow(row, 0, dst_u, dst_v, width);
|
| - ARGBToYRow(row, dst_y, width);
|
| + ARGB1555ToARGBRow(src_argb1555, row, width);
|
| + ARGBToUVRow(row, 0, dst_u, dst_v, width);
|
| + ARGBToYRow(row, dst_y, width);
|
| #endif
|
| }
|
| -#if !defined(HAS_ARGB1555TOYROW_NEON)
|
| +#if !(defined(HAS_ARGB1555TOYROW_NEON) || defined(HAS_ARGB1555TOYROW_MSA))
|
| free_aligned_buffer_64(row);
|
| }
|
| #endif
|
| @@ -1335,13 +1368,12 @@ int ARGB4444ToI420(const uint8* src_argb4444,
|
| void (*ARGB4444ToYRow)(const uint8* src_argb4444, uint8* dst_y, int width) =
|
| ARGB4444ToYRow_C;
|
| #else
|
| - void (*ARGB4444ToARGBRow)(const uint8* src_rgb, uint8* dst_argb,
|
| - int width) = ARGB4444ToARGBRow_C;
|
| - void (*ARGBToUVRow)(const uint8* src_argb0, int src_stride_argb,
|
| - uint8* dst_u, uint8* dst_v, int width) =
|
| - ARGBToUVRow_C;
|
| - void (*ARGBToYRow)(const uint8* src_argb, uint8* dst_y, int width) =
|
| - ARGBToYRow_C;
|
| + void (*ARGB4444ToARGBRow)(const uint8* src_rgb, uint8* dst_argb, int width) =
|
| + ARGB4444ToARGBRow_C;
|
| + void (*ARGBToUVRow)(const uint8* src_argb0, int src_stride_argb, uint8* dst_u,
|
| + uint8* dst_v, int width) = ARGBToUVRow_C;
|
| + void (*ARGBToYRow)(const uint8* src_argb, uint8* dst_y, int width) =
|
| + ARGBToYRow_C;
|
| #endif
|
| if (!src_argb4444 || !dst_y || !dst_u || !dst_v || width <= 0 ||
|
| height == 0) {
|
| @@ -1369,65 +1401,65 @@ int ARGB4444ToI420(const uint8* src_argb4444,
|
| // Other platforms do intermediate conversion from ARGB4444 to ARGB.
|
| #else
|
| #if defined(HAS_ARGB4444TOARGBROW_SSE2)
|
| - if (TestCpuFlag(kCpuHasSSE2)) {
|
| - ARGB4444ToARGBRow = ARGB4444ToARGBRow_Any_SSE2;
|
| - if (IS_ALIGNED(width, 8)) {
|
| - ARGB4444ToARGBRow = ARGB4444ToARGBRow_SSE2;
|
| - }
|
| - }
|
| + if (TestCpuFlag(kCpuHasSSE2)) {
|
| + ARGB4444ToARGBRow = ARGB4444ToARGBRow_Any_SSE2;
|
| + if (IS_ALIGNED(width, 8)) {
|
| + ARGB4444ToARGBRow = ARGB4444ToARGBRow_SSE2;
|
| + }
|
| + }
|
| #endif
|
| #if defined(HAS_ARGB4444TOARGBROW_AVX2)
|
| - if (TestCpuFlag(kCpuHasAVX2)) {
|
| - ARGB4444ToARGBRow = ARGB4444ToARGBRow_Any_AVX2;
|
| - if (IS_ALIGNED(width, 16)) {
|
| - ARGB4444ToARGBRow = ARGB4444ToARGBRow_AVX2;
|
| - }
|
| - }
|
| + if (TestCpuFlag(kCpuHasAVX2)) {
|
| + ARGB4444ToARGBRow = ARGB4444ToARGBRow_Any_AVX2;
|
| + if (IS_ALIGNED(width, 16)) {
|
| + ARGB4444ToARGBRow = ARGB4444ToARGBRow_AVX2;
|
| + }
|
| + }
|
| #endif
|
| #if defined(HAS_ARGB4444TOARGBROW_MSA)
|
| - if (TestCpuFlag(kCpuHasMSA)) {
|
| - ARGB4444ToARGBRow = ARGB4444ToARGBRow_Any_MSA;
|
| - if (IS_ALIGNED(width, 16)) {
|
| - ARGB4444ToARGBRow = ARGB4444ToARGBRow_MSA;
|
| - }
|
| - }
|
| + if (TestCpuFlag(kCpuHasMSA)) {
|
| + ARGB4444ToARGBRow = ARGB4444ToARGBRow_Any_MSA;
|
| + if (IS_ALIGNED(width, 16)) {
|
| + ARGB4444ToARGBRow = ARGB4444ToARGBRow_MSA;
|
| + }
|
| + }
|
| #endif
|
| #if defined(HAS_ARGBTOYROW_SSSE3) && defined(HAS_ARGBTOUVROW_SSSE3)
|
| - if (TestCpuFlag(kCpuHasSSSE3)) {
|
| - ARGBToUVRow = ARGBToUVRow_Any_SSSE3;
|
| - ARGBToYRow = ARGBToYRow_Any_SSSE3;
|
| - if (IS_ALIGNED(width, 16)) {
|
| - ARGBToUVRow = ARGBToUVRow_SSSE3;
|
| - ARGBToYRow = ARGBToYRow_SSSE3;
|
| - }
|
| - }
|
| + if (TestCpuFlag(kCpuHasSSSE3)) {
|
| + ARGBToUVRow = ARGBToUVRow_Any_SSSE3;
|
| + ARGBToYRow = ARGBToYRow_Any_SSSE3;
|
| + if (IS_ALIGNED(width, 16)) {
|
| + ARGBToUVRow = ARGBToUVRow_SSSE3;
|
| + ARGBToYRow = ARGBToYRow_SSSE3;
|
| + }
|
| + }
|
| #endif
|
| #if defined(HAS_ARGBTOYROW_AVX2) && defined(HAS_ARGBTOUVROW_AVX2)
|
| - if (TestCpuFlag(kCpuHasAVX2)) {
|
| - ARGBToUVRow = ARGBToUVRow_Any_AVX2;
|
| - ARGBToYRow = ARGBToYRow_Any_AVX2;
|
| - if (IS_ALIGNED(width, 32)) {
|
| - ARGBToUVRow = ARGBToUVRow_AVX2;
|
| - ARGBToYRow = ARGBToYRow_AVX2;
|
| - }
|
| - }
|
| + if (TestCpuFlag(kCpuHasAVX2)) {
|
| + ARGBToUVRow = ARGBToUVRow_Any_AVX2;
|
| + ARGBToYRow = ARGBToYRow_Any_AVX2;
|
| + if (IS_ALIGNED(width, 32)) {
|
| + ARGBToUVRow = ARGBToUVRow_AVX2;
|
| + ARGBToYRow = ARGBToYRow_AVX2;
|
| + }
|
| + }
|
| #endif
|
| #if defined(HAS_ARGBTOYROW_MSA)
|
| - if (TestCpuFlag(kCpuHasMSA)) {
|
| - ARGBToUVRow = ARGBToUVRow_Any_MSA;
|
| - ARGBToYRow = ARGBToYRow_Any_MSA;
|
| - if (IS_ALIGNED(width, 16)) {
|
| - ARGBToYRow = ARGBToYRow_MSA;
|
| - if (IS_ALIGNED(width, 32)) {
|
| - ARGBToUVRow = ARGBToUVRow_MSA;
|
| - }
|
| - }
|
| - }
|
| + if (TestCpuFlag(kCpuHasMSA)) {
|
| + ARGBToUVRow = ARGBToUVRow_Any_MSA;
|
| + ARGBToYRow = ARGBToYRow_Any_MSA;
|
| + if (IS_ALIGNED(width, 16)) {
|
| + ARGBToYRow = ARGBToYRow_MSA;
|
| + if (IS_ALIGNED(width, 32)) {
|
| + ARGBToUVRow = ARGBToUVRow_MSA;
|
| + }
|
| + }
|
| + }
|
| #endif
|
| - {
|
| - // Allocate 2 rows of ARGB.
|
| - const int kRowSize = (width * 4 + 31) & ~31;
|
| - align_buffer_64(row, kRowSize * 2);
|
| + {
|
| + // Allocate 2 rows of ARGB.
|
| + const int kRowSize = (width * 4 + 31) & ~31;
|
| + align_buffer_64(row, kRowSize * 2);
|
| #endif
|
|
|
| for (y = 0; y < height - 1; y += 2) {
|
| @@ -1437,12 +1469,12 @@ int ARGB4444ToI420(const uint8* src_argb4444,
|
| ARGB4444ToYRow(src_argb4444 + src_stride_argb4444, dst_y + dst_stride_y,
|
| width);
|
| #else
|
| - ARGB4444ToARGBRow(src_argb4444, row, width);
|
| - ARGB4444ToARGBRow(src_argb4444 + src_stride_argb4444,
|
| - row + kRowSize, width);
|
| - ARGBToUVRow(row, kRowSize, dst_u, dst_v, width);
|
| - ARGBToYRow(row, dst_y, width);
|
| - ARGBToYRow(row + kRowSize, dst_y + dst_stride_y, width);
|
| + ARGB4444ToARGBRow(src_argb4444, row, width);
|
| + ARGB4444ToARGBRow(src_argb4444 + src_stride_argb4444, row + kRowSize,
|
| + width);
|
| + ARGBToUVRow(row, kRowSize, dst_u, dst_v, width);
|
| + ARGBToYRow(row, dst_y, width);
|
| + ARGBToYRow(row + kRowSize, dst_y + dst_stride_y, width);
|
| #endif
|
| src_argb4444 += src_stride_argb4444 * 2;
|
| dst_y += dst_stride_y * 2;
|
| @@ -1454,9 +1486,9 @@ int ARGB4444ToI420(const uint8* src_argb4444,
|
| ARGB4444ToUVRow(src_argb4444, 0, dst_u, dst_v, width);
|
| ARGB4444ToYRow(src_argb4444, dst_y, width);
|
| #else
|
| - ARGB4444ToARGBRow(src_argb4444, row, width);
|
| - ARGBToUVRow(row, 0, dst_u, dst_v, width);
|
| - ARGBToYRow(row, dst_y, width);
|
| + ARGB4444ToARGBRow(src_argb4444, row, width);
|
| + ARGBToUVRow(row, 0, dst_u, dst_v, width);
|
| + ARGBToYRow(row, dst_y, width);
|
| #endif
|
| }
|
| #if !defined(HAS_ARGB4444TOYROW_NEON)
|
|
|