aboutsummaryrefslogtreecommitdiff
path: root/source/row_neon.cc
diff options
context:
space:
mode:
authorYuan Tong <tongyuan200097@gmail.com>2021-01-18 11:53:26 +0800
committerFrank Barchard <fbarchard@chromium.org>2021-01-23 00:40:33 +0000
commit08d0dce5fca126af9601304581f6cec27440077c (patch)
tree6534eda415caf76c3bf4fc963a9ec4e4d518e4b5 /source/row_neon.cc
parent93b1b332cd60b56ab90aea14182755e379c28a80 (diff)
downloadlibyuv-08d0dce5fca126af9601304581f6cec27440077c.tar.gz
Add I422AlphaToARGB and I444AlphaToARGB
Bug: libyuv:878 Change-Id: I64c314326ac7ae5242acc64e20016e30adc6d17f Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/2639439 Reviewed-by: Frank Barchard <fbarchard@chromium.org>
Diffstat (limited to 'source/row_neon.cc')
-rw-r--r--source/row_neon.cc28
1 files changed, 28 insertions, 0 deletions
diff --git a/source/row_neon.cc b/source/row_neon.cc
index a5aeaabf..f73f7da9 100644
--- a/source/row_neon.cc
+++ b/source/row_neon.cc
@@ -158,6 +158,34 @@ void I422ToARGBRow_NEON(const uint8_t* src_y,
"q12", "q13", "q14", "q15");
}
+void I444AlphaToARGBRow_NEON(const uint8_t* src_y,
+ const uint8_t* src_u,
+ const uint8_t* src_v,
+ const uint8_t* src_a,
+ uint8_t* dst_argb,
+ const struct YuvConstants* yuvconstants,
+ int width) {
+ asm volatile(
+ YUVTORGB_SETUP
+ "1: \n" READYUV444 YUVTORGB
+ "subs %5, %5, #8 \n"
+ "vld1.8 {d23}, [%3]! \n"
+ "vst4.8 {d20, d21, d22, d23}, [%4]! \n"
+ "bgt 1b \n"
+ : "+r"(src_y), // %0
+ "+r"(src_u), // %1
+ "+r"(src_v), // %2
+ "+r"(src_a), // %3
+ "+r"(dst_argb), // %4
+ "+r"(width) // %5
+ : [kUVToRB] "r"(&yuvconstants->kUVToRB),
+ [kUVToG] "r"(&yuvconstants->kUVToG),
+ [kUVBiasBGR] "r"(&yuvconstants->kUVBiasBGR),
+ [kYToRgb] "r"(&yuvconstants->kYToRgb)
+ : "cc", "memory", "q0", "q1", "q2", "q3", "q4", "q8", "q9", "q10", "q11",
+ "q12", "q13", "q14", "q15");
+}
+
void I422AlphaToARGBRow_NEON(const uint8_t* src_y,
const uint8_t* src_u,
const uint8_t* src_v,