aboutsummaryrefslogtreecommitdiff
path: root/source/convert_from_argb.cc
diff options
context:
space:
mode:
authorFrank Barchard <fbarchard@google.com>2017-01-11 12:19:13 -0800
committerFrank Barchard <fbarchard@google.com>2017-01-11 12:19:13 -0800
commit000d2fa91a487a2430be8ace333f199c51467b5b (patch)
tree8705c5950fb359faf47f4de00157f1fefb98a7a5 /source/convert_from_argb.cc
parent288bfbefb5f7966b56c7293c727c41aa674e86fb (diff)
downloadlibyuv-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.cc97
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;