Chromium Code Reviews| Index: source/convert.cc |
| diff --git a/source/convert.cc b/source/convert.cc |
| index ba07b3959c71d8e7b46abbd43d08f4aebf14db1b..f2eafe216d45acc36ef0b11b164defcbf8729d52 100644 |
| --- a/source/convert.cc |
| +++ b/source/convert.cc |
| @@ -1229,7 +1229,7 @@ int ARGB4444ToI420(const uint8* src_argb4444, int src_stride_argb4444, |
| uint8* dst_v, int dst_stride_v, |
| int width, int height) { |
| int y; |
| -#if defined(HAS_ARGB4444TOYROW_NEON) |
| +#if (defined(HAS_ARGB4444TOYROW_NEON) || defined(HAS_ARGB4444TOYROW_MSA)) |
|
fbarchard1
2016/10/14 21:35:16
I'd have suggested taking the intel approach, whic
manojkumar.bhosale
2016/10/19 11:56:27
Done.
|
| void (*ARGB4444ToUVRow)(const uint8* src_argb4444, int src_stride_argb4444, |
| uint8* dst_u, uint8* dst_v, int width) = ARGB4444ToUVRow_C; |
| void (*ARGB4444ToYRow)(const uint8* src_argb4444, uint8* dst_y, int width) = |
| @@ -1265,6 +1265,17 @@ int ARGB4444ToI420(const uint8* src_argb4444, int src_stride_argb4444, |
| } |
| } |
| } |
| +#elif defined(HAS_ARGB4444TOYROW_MSA) |
| + if (TestCpuFlag(kCpuHasMSA)) { |
| + ARGB4444ToUVRow = ARGB4444ToUVRow_Any_MSA; |
| + ARGB4444ToYRow = ARGB4444ToYRow_Any_MSA; |
| + if (IS_ALIGNED(width, 16)) { |
| + ARGB4444ToYRow = ARGB4444ToYRow_MSA; |
| + if (IS_ALIGNED(width, 32)) { |
| + ARGB4444ToUVRow = ARGB4444ToUVRow_MSA; |
| + } |
| + } |
| + } |
| // Other platforms do intermediate conversion from ARGB4444 to ARGB. |
| #else |
| #if defined(HAS_ARGB4444TOARGBROW_SSE2) |
| @@ -1310,7 +1321,7 @@ int ARGB4444ToI420(const uint8* src_argb4444, int src_stride_argb4444, |
| #endif |
| for (y = 0; y < height - 1; y += 2) { |
| -#if defined(HAS_ARGB4444TOYROW_NEON) |
| +#if (defined(HAS_ARGB4444TOYROW_NEON) || defined(HAS_ARGB4444TOYROW_MSA)) |
| ARGB4444ToUVRow(src_argb4444, src_stride_argb4444, dst_u, dst_v, width); |
| ARGB4444ToYRow(src_argb4444, dst_y, width); |
| ARGB4444ToYRow(src_argb4444 + src_stride_argb4444, dst_y + dst_stride_y, |
| @@ -1329,7 +1340,7 @@ int ARGB4444ToI420(const uint8* src_argb4444, int src_stride_argb4444, |
| dst_v += dst_stride_v; |
| } |
| if (height & 1) { |
| -#if defined(HAS_ARGB4444TOYROW_NEON) |
| +#if (defined(HAS_ARGB4444TOYROW_NEON) || defined(HAS_ARGB4444TOYROW_MSA)) |
| ARGB4444ToUVRow(src_argb4444, 0, dst_u, dst_v, width); |
| ARGB4444ToYRow(src_argb4444, dst_y, width); |
| #else |
| @@ -1338,7 +1349,7 @@ int ARGB4444ToI420(const uint8* src_argb4444, int src_stride_argb4444, |
| ARGBToYRow(row, dst_y, width); |
| #endif |
| } |
| -#if !defined(HAS_ARGB4444TOYROW_NEON) |
| +#if !(defined(HAS_ARGB4444TOYROW_NEON) || defined(HAS_ARGB4444TOYROW_MSA)) |
| free_aligned_buffer_64(row); |
| } |
| #endif |