diff options
author | Yuan Tong <tongyuan200097@gmail.com> | 2021-01-18 11:53:26 +0800 |
---|---|---|
committer | Frank Barchard <fbarchard@chromium.org> | 2021-01-23 00:40:33 +0000 |
commit | 08d0dce5fca126af9601304581f6cec27440077c (patch) | |
tree | 6534eda415caf76c3bf4fc963a9ec4e4d518e4b5 /source/row_neon.cc | |
parent | 93b1b332cd60b56ab90aea14182755e379c28a80 (diff) | |
download | libyuv-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.cc | 28 |
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, |