aboutsummaryrefslogtreecommitdiff
path: root/source/convert.cc
diff options
context:
space:
mode:
authorManojkumar Bhosale <manojkumar.bhosale@imgtec.com>2017-02-01 10:31:28 +0530
committerManojkumar Bhosale <manojkumar.bhosale@imgtec.com>2017-02-01 10:31:28 +0530
commit54ce8f23d6d82d671ec05229812842548faf14ef (patch)
tree8f4f7680b8aad4fa443b38ee59ab560c767f2f8f /source/convert.cc
parent03510421970e0029bf744feac5c128c2ee22c90c (diff)
downloadlibyuv-54ce8f23d6d82d671ec05229812842548faf14ef.tar.gz
Add MSA optimized ARGB/ABGR/BGRA/RGBA To Y/UV row functions
R=fbarchard@google.com BUG=libyuv:634 Performance Gain (vs C auto-vectorized) ARGBToYJRow_MSA - ~3.2x ARGBToYJRow_Any_MSA - ~2.7x BGRAToYRow_MSA - ~3.2x BGRAToYRow_Any_MSA - ~2.7x ABGRToYRow_MSA - ~3.2x ABGRToYRow_Any_MSA - ~2.6x RGBAToYRow_MSA - ~3.1x RGBAToYRow_Any_MSA - ~2.7x ARGBToUVJRow_MSA - ~5.5x ARGBToUVJRow_Any_MSA - ~4.5x BGRAToUVRow_MSA - ~2.1x BGRAToUVRow_Any_MSA - ~2.0x ABGRToUVRow_MSA - ~2.1x ABGRToUVRow_Any_MSA - ~1.9x RGBAToUVRow_MSA - ~2.2x RGBAToUVRow_Any_MSA - ~1.9x Performance Gain (vs C non-vectorized) ARGBToYJRow_MSA - ~10.9x ARGBToYJRow_Any_MSA - ~9.2x BGRAToYRow_MSA - ~10.9x BGRAToYRow_Any_MSA - ~9.3x ABGRToYRow_MSA - ~11.0x ABGRToYRow_Any_MSA - ~9.3x RGBAToYRow_MSA - ~10.9x RGBAToYRow_Any_MSA - ~9.1x ARGBToUVJRow_MSA - ~12.4x ARGBToUVJRow_Any_MSA - ~10.5x BGRAToUVRow_MSA - ~4.7x BGRAToUVRow_Any_MSA - ~4.4x ABGRToUVRow_MSA - ~4.7x ABGRToUVRow_Any_MSA - ~4.5x RGBAToUVRow_MSA - ~4.8x RGBAToUVRow_Any_MSA - ~4.4x Review-Url: https://codereview.chromium.org/2641153003 .
Diffstat (limited to 'source/convert.cc')
-rw-r--r--source/convert.cc48
1 files changed, 48 insertions, 0 deletions
diff --git a/source/convert.cc b/source/convert.cc
index d5d12acb..f79acaca 100644
--- a/source/convert.cc
+++ b/source/convert.cc
@@ -696,6 +696,22 @@ int BGRAToI420(const uint8* src_bgra,
}
}
#endif
+#if defined(HAS_BGRATOYROW_MSA)
+ if (TestCpuFlag(kCpuHasMSA)) {
+ BGRAToYRow = BGRAToYRow_Any_MSA;
+ if (IS_ALIGNED(width, 16)) {
+ BGRAToYRow = BGRAToYRow_MSA;
+ }
+ }
+#endif
+#if defined(HAS_BGRATOUVROW_MSA)
+ if (TestCpuFlag(kCpuHasMSA)) {
+ BGRAToUVRow = BGRAToUVRow_Any_MSA;
+ if (IS_ALIGNED(width, 16)) {
+ BGRAToUVRow = BGRAToUVRow_MSA;
+ }
+ }
+#endif
for (y = 0; y < height - 1; y += 2) {
BGRAToUVRow(src_bgra, src_stride_bgra, dst_u, dst_v, width);
@@ -781,6 +797,22 @@ int ABGRToI420(const uint8* src_abgr,
}
}
#endif
+#if defined(HAS_ABGRTOYROW_MSA)
+ if (TestCpuFlag(kCpuHasMSA)) {
+ ABGRToYRow = ABGRToYRow_Any_MSA;
+ if (IS_ALIGNED(width, 16)) {
+ ABGRToYRow = ABGRToYRow_MSA;
+ }
+ }
+#endif
+#if defined(HAS_ABGRTOUVROW_MSA)
+ if (TestCpuFlag(kCpuHasMSA)) {
+ ABGRToUVRow = ABGRToUVRow_Any_MSA;
+ if (IS_ALIGNED(width, 16)) {
+ ABGRToUVRow = ABGRToUVRow_MSA;
+ }
+ }
+#endif
for (y = 0; y < height - 1; y += 2) {
ABGRToUVRow(src_abgr, src_stride_abgr, dst_u, dst_v, width);
@@ -866,6 +898,22 @@ int RGBAToI420(const uint8* src_rgba,
}
}
#endif
+#if defined(HAS_RGBATOYROW_MSA)
+ if (TestCpuFlag(kCpuHasMSA)) {
+ RGBAToYRow = RGBAToYRow_Any_MSA;
+ if (IS_ALIGNED(width, 16)) {
+ RGBAToYRow = RGBAToYRow_MSA;
+ }
+ }
+#endif
+#if defined(HAS_RGBATOUVROW_MSA)
+ if (TestCpuFlag(kCpuHasMSA)) {
+ RGBAToUVRow = RGBAToUVRow_Any_MSA;
+ if (IS_ALIGNED(width, 16)) {
+ RGBAToUVRow = RGBAToUVRow_MSA;
+ }
+ }
+#endif
for (y = 0; y < height - 1; y += 2) {
RGBAToUVRow(src_rgba, src_stride_rgba, dst_u, dst_v, width);