diff options
author | Frank Barchard <fbarchard@google.com> | 2017-01-11 12:19:13 -0800 |
---|---|---|
committer | Frank Barchard <fbarchard@google.com> | 2017-01-11 12:19:13 -0800 |
commit | 000d2fa91a487a2430be8ace333f199c51467b5b (patch) | |
tree | 8705c5950fb359faf47f4de00157f1fefb98a7a5 /source/convert_from_argb.cc | |
parent | 288bfbefb5f7966b56c7293c727c41aa674e86fb (diff) | |
download | libyuv-000d2fa91a487a2430be8ace333f199c51467b5b.tar.gz |
Libyuv MIPS DSPR2 optimizations.
Optimized functions:
I444ToARGBRow_DSPR2
I422ToARGB4444Row_DSPR2
I422ToARGB1555Row_DSPR2
NV12ToARGBRow_DSPR2
BGRAToUVRow_DSPR2
BGRAToYRow_DSPR2
ABGRToUVRow_DSPR2
ARGBToYRow_DSPR2
ABGRToYRow_DSPR2
RGBAToUVRow_DSPR2
RGBAToYRow_DSPR2
ARGBToUVRow_DSPR2
RGB24ToARGBRow_DSPR2
RAWToARGBRow_DSPR2
RGB565ToARGBRow_DSPR2
ARGB1555ToARGBRow_DSPR2
ARGB4444ToARGBRow_DSPR2
ScaleAddRow_DSPR2
Bug-fixes in functions:
ScaleRowDown2_DSPR2
ScaleRowDown4_DSPR2
BUG=
Review-Url: https://codereview.chromium.org/2626123003 .
Diffstat (limited to 'source/convert_from_argb.cc')
-rw-r--r-- | source/convert_from_argb.cc | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/source/convert_from_argb.cc b/source/convert_from_argb.cc index 81b59ba2..e45bb230 100644 --- a/source/convert_from_argb.cc +++ b/source/convert_from_argb.cc @@ -100,6 +100,14 @@ int ARGBToI444(const uint8* src_argb, } } #endif +#if defined(HAS_ARGBTOYROW_DSPR2) + if (TestCpuFlag(kCpuHasDSPR2)) { + ARGBToYRow = ARGBToYRow_Any_DSPR2; + if (IS_ALIGNED(width, 8)) { + ARGBToYRow = ARGBToYRow_DSPR2; + } + } +#endif #if defined(HAS_ARGBTOYROW_MSA) if (TestCpuFlag(kCpuHasMSA)) { ARGBToYRow = ARGBToYRow_Any_MSA; @@ -189,6 +197,23 @@ int ARGBToI422(const uint8* src_argb, } } #endif +#if defined(HAS_ARGBTOYROW_DSPR2) + if (TestCpuFlag(kCpuHasDSPR2)) { + ARGBToYRow = ARGBToYRow_Any_DSPR2; + if (IS_ALIGNED(width, 8)) { + ARGBToYRow = ARGBToYRow_DSPR2; + } + } +#endif +#if defined(HAS_ARGBTOUVROW_DSPR2) + if (TestCpuFlag(kCpuHasDSPR2)) { + ARGBToUVRow = ARGBToUVRow_Any_DSPR2; + if (IS_ALIGNED(width, 16)) { + ARGBToUVRow = ARGBToUVRow_DSPR2; + } + } +#endif + #if defined(HAS_ARGBTOYROW_MSA) if (TestCpuFlag(kCpuHasMSA)) { ARGBToYRow = ARGBToYRow_Any_MSA; @@ -319,6 +344,22 @@ int ARGBToNV12(const uint8* src_argb, } } #endif +#if defined(HAS_ARGBTOYROW_DSPR2) + if (TestCpuFlag(kCpuHasDSPR2)) { + ARGBToYRow = ARGBToYRow_Any_DSPR2; + if (IS_ALIGNED(width, 8)) { + ARGBToYRow = ARGBToYRow_DSPR2; + } + } +#endif +#if defined(HAS_ARGBTOUVROW_DSPR2) + if (TestCpuFlag(kCpuHasDSPR2)) { + ARGBToUVRow = ARGBToUVRow_Any_DSPR2; + if (IS_ALIGNED(width, 16)) { + ARGBToUVRow = ARGBToUVRow_DSPR2; + } + } +#endif { // Allocate a rows of uv. align_buffer_64(row_u, ((halfwidth + 31) & ~31) * 2); @@ -446,6 +487,22 @@ int ARGBToNV21(const uint8* src_argb, } } #endif +#if defined(HAS_ARGBTOYROW_DSPR2) + if (TestCpuFlag(kCpuHasDSPR2)) { + ARGBToYRow = ARGBToYRow_Any_DSPR2; + if (IS_ALIGNED(width, 8)) { + ARGBToYRow = ARGBToYRow_DSPR2; + } + } +#endif +#if defined(HAS_ARGBTOUVROW_DSPR2) + if (TestCpuFlag(kCpuHasDSPR2)) { + ARGBToUVRow = ARGBToUVRow_Any_DSPR2; + if (IS_ALIGNED(width, 16)) { + ARGBToUVRow = ARGBToUVRow_DSPR2; + } + } +#endif { // Allocate a rows of uv. align_buffer_64(row_u, ((halfwidth + 31) & ~31) * 2); @@ -570,6 +627,22 @@ int ARGBToYUY2(const uint8* src_argb, } } #endif +#if defined(HAS_ARGBTOYROW_DSPR2) + if (TestCpuFlag(kCpuHasDSPR2)) { + ARGBToYRow = ARGBToYRow_Any_DSPR2; + if (IS_ALIGNED(width, 8)) { + ARGBToYRow = ARGBToYRow_DSPR2; + } + } +#endif +#if defined(HAS_ARGBTOUVROW_DSPR2) + if (TestCpuFlag(kCpuHasDSPR2)) { + ARGBToUVRow = ARGBToUVRow_Any_DSPR2; + if (IS_ALIGNED(width, 16)) { + ARGBToUVRow = ARGBToUVRow_DSPR2; + } + } +#endif #if defined(HAS_I422TOYUY2ROW_MSA) if (TestCpuFlag(kCpuHasMSA)) { I422ToYUY2Row = I422ToYUY2Row_Any_MSA; @@ -698,6 +771,22 @@ int ARGBToUYVY(const uint8* src_argb, } } #endif +#if defined(HAS_ARGBTOYROW_DSPR2) + if (TestCpuFlag(kCpuHasDSPR2)) { + ARGBToYRow = ARGBToYRow_Any_DSPR2; + if (IS_ALIGNED(width, 8)) { + ARGBToYRow = ARGBToYRow_DSPR2; + } + } +#endif +#if defined(HAS_ARGBTOUVROW_DSPR2) + if (TestCpuFlag(kCpuHasDSPR2)) { + ARGBToUVRow = ARGBToUVRow_Any_DSPR2; + if (IS_ALIGNED(width, 16)) { + ARGBToUVRow = ARGBToUVRow_DSPR2; + } + } +#endif #if defined(HAS_I422TOUYVYROW_MSA) if (TestCpuFlag(kCpuHasMSA)) { I422ToUYVYRow = I422ToUYVYRow_Any_MSA; @@ -775,6 +864,14 @@ int ARGBToI400(const uint8* src_argb, } } #endif +#if defined(HAS_ARGBTOYROW_DSPR2) + if (TestCpuFlag(kCpuHasDSPR2)) { + ARGBToYRow = ARGBToYRow_Any_DSPR2; + if (IS_ALIGNED(width, 8)) { + ARGBToYRow = ARGBToYRow_DSPR2; + } + } +#endif #if defined(HAS_ARGBTOYROW_MSA) if (TestCpuFlag(kCpuHasMSA)) { ARGBToYRow = ARGBToYRow_Any_MSA; |