Index: source/convert.cc |
diff --git a/source/convert.cc b/source/convert.cc |
index 6bea6472e3fe984bf938446b1ebbff9976b67a85..d5d12acb9f82ea0d6d1c6d592fb7e03508851335 100644 |
--- a/source/convert.cc |
+++ b/source/convert.cc |
@@ -896,7 +896,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) = |
@@ -931,6 +931,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) |
@@ -968,16 +977,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; |
@@ -985,16 +994,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 |
@@ -1014,18 +1023,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; |
@@ -1049,6 +1058,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) |
@@ -1094,16 +1112,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; |
@@ -1111,16 +1129,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 |
@@ -1140,20 +1158,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; |
@@ -1177,6 +1194,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) |
@@ -1230,17 +1256,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; |
@@ -1248,16 +1273,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 |
@@ -1277,20 +1302,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) { |
@@ -1315,6 +1339,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) |
@@ -1360,18 +1393,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; |
@@ -1379,16 +1412,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 |
@@ -1415,13 +1448,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) { |
@@ -1449,65 +1481,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) { |
@@ -1517,12 +1549,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; |
@@ -1534,9 +1566,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) |