aboutsummaryrefslogtreecommitdiff
path: root/source/convert_from.cc
diff options
context:
space:
mode:
authorFrank Barchard <fbarchard@google.com>2016-10-03 18:21:31 -0700
committerFrank Barchard <fbarchard@google.com>2016-10-03 18:21:31 -0700
commit7018f5be0f98419c0e4eac518b0641655ba91c98 (patch)
tree00dddfba091e05d92343b3fe1aae117be5ff7f60 /source/convert_from.cc
parentaa197ee1a307fefb7853784fc04c82e0c7bd823b (diff)
downloadlibyuv-7018f5be0f98419c0e4eac518b0641655ba91c98.tar.gz
Add MSA optimized I422ToYUY2Row, I422ToUYVYRow functions
R=fbarchard@google.com BUG=libyuv:634 Performance gains :- I422ToYUY2Row_MSA - ~12x I422ToYUY2Row_Any_MSA - ~7x I422ToUYVYRow_MSA - ~12x I422ToUYVYRow_Any_MSA - ~7x Review URL: https://codereview.chromium.org/2378753004 .
Diffstat (limited to 'source/convert_from.cc')
-rw-r--r--source/convert_from.cc24
1 files changed, 24 insertions, 0 deletions
diff --git a/source/convert_from.cc b/source/convert_from.cc
index 3b2dca81..1256ca99 100644
--- a/source/convert_from.cc
+++ b/source/convert_from.cc
@@ -237,6 +237,14 @@ int I420ToYUY2(const uint8* src_y, int src_stride_y,
}
}
#endif
+#if defined(HAS_I422TOYUY2ROW_MSA)
+ if (TestCpuFlag(kCpuHasMSA)) {
+ I422ToYUY2Row = I422ToYUY2Row_Any_MSA;
+ if (IS_ALIGNED(width, 32)) {
+ I422ToYUY2Row = I422ToYUY2Row_MSA;
+ }
+ }
+#endif
for (y = 0; y < height - 1; y += 2) {
I422ToYUY2Row(src_y, src_u, src_v, dst_yuy2, width);
@@ -298,6 +306,14 @@ int I422ToUYVY(const uint8* src_y, int src_stride_y,
}
}
#endif
+#if defined(HAS_I422TOUYVYROW_MSA)
+ if (TestCpuFlag(kCpuHasMSA)) {
+ I422ToUYVYRow = I422ToUYVYRow_Any_MSA;
+ if (IS_ALIGNED(width, 32)) {
+ I422ToUYVYRow = I422ToUYVYRow_MSA;
+ }
+ }
+#endif
for (y = 0; y < height; ++y) {
I422ToUYVYRow(src_y, src_u, src_v, dst_uyvy, width);
@@ -345,6 +361,14 @@ int I420ToUYVY(const uint8* src_y, int src_stride_y,
}
}
#endif
+#if defined(HAS_I422TOUYVYROW_MSA)
+ if (TestCpuFlag(kCpuHasMSA)) {
+ I422ToUYVYRow = I422ToUYVYRow_Any_MSA;
+ if (IS_ALIGNED(width, 32)) {
+ I422ToUYVYRow = I422ToUYVYRow_MSA;
+ }
+ }
+#endif
for (y = 0; y < height - 1; y += 2) {
I422ToUYVYRow(src_y, src_u, src_v, dst_uyvy, width);