aboutsummaryrefslogtreecommitdiff
path: root/source/convert.cc
diff options
context:
space:
mode:
authorHao Chen <chenhao@loongson.cn>2023-01-09 17:15:22 +0800
committerlibyuv LUCI CQ <libyuv-scoped@luci-project-accounts.iam.gserviceaccount.com>2023-01-18 18:54:14 +0000
commit08097137751c4c2fb211bd00c69641e4c9ea723f (patch)
treedf8ccaa9b8825beac0b51671f58157093855f73b /source/convert.cc
parent0faf8dd0e004520a61a603a4d2996d5ecc80dc3f (diff)
downloadlibyuv-08097137751c4c2fb211bd00c69641e4c9ea723f.tar.gz
Refine some functions on the Longarch platform.
Add ARGBToYMatrixRow_LSX/LASX, RGBAToYMatrixRow_LSX/LASX and RGBToYMatrixRow_LSX/LASX functions with RgbConstants argument. Bug: libyuv:912 Change-Id: I956e639d1f0da4a47a55b79c9d41dcd29e29bdc5 Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/4167860 Reviewed-by: Frank Barchard <fbarchard@chromium.org> Reviewed-by: Mirko Bonadei <mbonadei@chromium.org> Commit-Queue: Frank Barchard <fbarchard@chromium.org>
Diffstat (limited to 'source/convert.cc')
-rw-r--r--source/convert.cc110
1 files changed, 107 insertions, 3 deletions
diff --git a/source/convert.cc b/source/convert.cc
index 9a263536..15c70a65 100644
--- a/source/convert.cc
+++ b/source/convert.cc
@@ -1793,6 +1793,14 @@ int ARGBToI420(const uint8_t* src_argb,
}
}
#endif
+#if defined(HAS_ARGBTOYROW_LSX)
+ if (TestCpuFlag(kCpuHasLSX)) {
+ ARGBToYRow = ARGBToYRow_Any_LSX;
+ if (IS_ALIGNED(width, 16)) {
+ ARGBToYRow = ARGBToYRow_LSX;
+ }
+ }
+#endif
#if defined(HAS_ARGBTOYROW_LASX) && defined(HAS_ARGBTOUVROW_LASX)
if (TestCpuFlag(kCpuHasLASX)) {
ARGBToYRow = ARGBToYRow_Any_LASX;
@@ -1907,13 +1915,21 @@ int BGRAToI420(const uint8_t* src_bgra,
}
}
#endif
-#if defined(HAS_BGRATOYROW_LASX) && defined(HAS_BGRATOUVROW_LASX)
+#if defined(HAS_BGRATOYROW_LSX) && defined(HAS_BGRATOUVROW_LSX)
+ if (TestCpuFlag(kCpuHasLSX)) {
+ BGRAToYRow = BGRAToYRow_Any_LSX;
+ BGRAToUVRow = BGRAToUVRow_Any_LSX;
+ if (IS_ALIGNED(width, 16)) {
+ BGRAToYRow = BGRAToYRow_LSX;
+ BGRAToUVRow = BGRAToUVRow_LSX;
+ }
+ }
+#endif
+#if defined(HAS_BGRATOYROW_LASX)
if (TestCpuFlag(kCpuHasLASX)) {
BGRAToYRow = BGRAToYRow_Any_LASX;
- BGRAToUVRow = BGRAToUVRow_Any_LASX;
if (IS_ALIGNED(width, 32)) {
BGRAToYRow = BGRAToYRow_LASX;
- BGRAToUVRow = BGRAToUVRow_LASX;
}
}
#endif
@@ -2029,6 +2045,14 @@ int ABGRToI420(const uint8_t* src_abgr,
}
}
#endif
+#if defined(HAS_ABGRTOYROW_LASX)
+ if (TestCpuFlag(kCpuHasLASX)) {
+ ABGRToYRow = ABGRToYRow_Any_LASX;
+ if (IS_ALIGNED(width, 32)) {
+ ABGRToYRow = ABGRToYRow_LASX;
+ }
+ }
+#endif
for (y = 0; y < height - 1; y += 2) {
ABGRToUVRow(src_abgr, src_stride_abgr, dst_u, dst_v, width);
@@ -2125,6 +2149,14 @@ int RGBAToI420(const uint8_t* src_rgba,
}
}
#endif
+#if defined(HAS_RGBATOYROW_LASX)
+ if (TestCpuFlag(kCpuHasNEON)) {
+ RGBAToYRow = RGBAToYRow_Any_LASX;
+ if (IS_ALIGNED(width, 32)) {
+ RGBAToYRow = RGBAToYRow_LASX;
+ }
+ }
+#endif
for (y = 0; y < height - 1; y += 2) {
RGBAToUVRow(src_rgba, src_stride_rgba, dst_u, dst_v, width);
@@ -2383,6 +2415,22 @@ int RGB24ToJ420(const uint8_t* src_rgb24,
}
}
#endif
+#if defined(HAS_RGB24TOYJROW_LSX)
+ if (TestCpuFlag(kCpuHasLSX)) {
+ RGB24ToYJRow = RGB24ToYJRow_Any_LSX;
+ if (IS_ALIGNED(width, 16)) {
+ RGB24ToYJRow = RGB24ToYJRow_LSX;
+ }
+ }
+#endif
+#if defined(HAS_RGB24TOYJROW_LASX)
+ if (TestCpuFlag(kCpuHasLASX)) {
+ RGB24ToYJRow = RGB24ToYJRow_Any_LASX;
+ if (IS_ALIGNED(width, 32)) {
+ RGB24ToYJRow = RGB24ToYJRow_LASX;
+ }
+ }
+#endif
// Other platforms do intermediate conversion from RGB24 to ARGB.
#else // HAS_RGB24TOYJROW
@@ -2711,6 +2759,22 @@ int RAWToJ420(const uint8_t* src_raw,
}
}
#endif
+#if defined(HAS_RAWTOYJROW_LSX)
+ if (TestCpuFlag(kCpuHasLSX)) {
+ RAWToYJRow = RAWToYJRow_Any_LSX;
+ if (IS_ALIGNED(width, 16)) {
+ RAWToYJRow = RAWToYJRow_LSX;
+ }
+ }
+#endif
+#if defined(HAS_RAWTOYJROW_LASX)
+ if (TestCpuFlag(kCpuHasLASX)) {
+ RAWToYJRow = RAWToYJRow_Any_LASX;
+ if (IS_ALIGNED(width, 32)) {
+ RAWToYJRow = RAWToYJRow_LASX;
+ }
+ }
+#endif
// Other platforms do intermediate conversion from RAW to ARGB.
#else // HAS_RAWTOYJROW
@@ -3298,6 +3362,14 @@ int ARGB4444ToI420(const uint8_t* src_argb4444,
}
}
#endif
+#if defined(HAS_ARGBTOYROW_LSX)
+ if (TestCpuFlag(kCpuHasLSX)) {
+ ARGBToYRow = ARGBToYRow_Any_LSX;
+ if (IS_ALIGNED(width, 16)) {
+ ARGBToYRow = ARGBToYRow_LSX;
+ }
+ }
+#endif
#if defined(HAS_ARGBTOYROW_LASX) && defined(HAS_ARGBTOUVROW_LASX)
if (TestCpuFlag(kCpuHasLASX)) {
ARGBToYRow = ARGBToYRow_Any_LASX;
@@ -3410,6 +3482,22 @@ int RGB24ToJ400(const uint8_t* src_rgb24,
}
}
#endif
+#if defined(HAS_RGB24TOYJROW_LSX)
+ if (TestCpuFlag(kCpuHasLSX)) {
+ RGB24ToYJRow = RGB24ToYJRow_Any_LSX;
+ if (IS_ALIGNED(width, 16)) {
+ RGB24ToYJRow = RGB24ToYJRow_LSX;
+ }
+ }
+#endif
+#if defined(HAS_RGB24TOYJROW_LASX)
+ if (TestCpuFlag(kCpuHasLASX)) {
+ RGB24ToYJRow = RGB24ToYJRow_Any_LASX;
+ if (IS_ALIGNED(width, 32)) {
+ RGB24ToYJRow = RGB24ToYJRow_LASX;
+ }
+ }
+#endif
for (y = 0; y < height; ++y) {
RGB24ToYJRow(src_rgb24, dst_yj, width);
@@ -3478,6 +3566,22 @@ int RAWToJ400(const uint8_t* src_raw,
}
}
#endif
+#if defined(HAS_RAWTOYJROW_LSX)
+ if (TestCpuFlag(kCpuHasLSX)) {
+ RAWToYJRow = RAWToYJRow_Any_LSX;
+ if (IS_ALIGNED(width, 16)) {
+ RAWToYJRow = RAWToYJRow_LSX;
+ }
+ }
+#endif
+#if defined(HAS_RAWTOYJROW_LASX)
+ if (TestCpuFlag(kCpuHasLASX)) {
+ RAWToYJRow = RAWToYJRow_Any_LASX;
+ if (IS_ALIGNED(width, 32)) {
+ RAWToYJRow = RAWToYJRow_LASX;
+ }
+ }
+#endif
for (y = 0; y < height; ++y) {
RAWToYJRow(src_raw, dst_yj, width);