Index: source/row_neon.cc |
diff --git a/source/row_neon.cc b/source/row_neon.cc |
index f7e6ba1dc1c940cdebcd03a027752b427c3c40ba..9052ed0438e5bacdc0f9126848bde66453e588ff 100644 |
--- a/source/row_neon.cc |
+++ b/source/row_neon.cc |
@@ -93,7 +93,7 @@ extern "C" { |
"vuzp.u8 d2, d3 \n" \ |
"vtrn.u32 d2, d3 \n" |
-#define YUV422TORGB_SETUP_REG \ |
+#define YUVTORGB_SETUP \ |
MEMACCESS([kUVToRB]) \ |
"vld1.8 {d24}, [%[kUVToRB]] \n" \ |
MEMACCESS([kUVToG]) \ |
@@ -107,7 +107,7 @@ extern "C" { |
MEMACCESS([kYToRgb]) \ |
"vld1.32 {d30[], d31[]}, [%[kYToRgb]] \n" |
-#define YUV422TORGB \ |
+#define YUVTORGB \ |
"vmull.u8 q8, d2, d24 \n" /* u/v B/R component */\ |
"vmull.u8 q9, d2, d25 \n" /* u/v G component */\ |
"vmovl.u8 q0, d0 \n" /* Y */\ |
@@ -138,12 +138,13 @@ void I444ToARGBRow_NEON(const uint8* src_y, |
const uint8* src_u, |
const uint8* src_v, |
uint8* dst_argb, |
+ struct YuvConstants* yuvconstants, |
int width) { |
asm volatile ( |
- YUV422TORGB_SETUP_REG |
+ YUVTORGB_SETUP |
"1: \n" |
READYUV444 |
- YUV422TORGB |
+ YUVTORGB |
"subs %4, %4, #8 \n" |
"vmov.u8 d23, #255 \n" |
MEMACCESS(3) |
@@ -154,26 +155,26 @@ void I444ToARGBRow_NEON(const uint8* src_y, |
"+r"(src_v), // %2 |
"+r"(dst_argb), // %3 |
"+r"(width) // %4 |
- : [kUVToRB]"r"(&kYuvConstantsNEON.kUVToRB), // %5 |
- [kUVToG]"r"(&kYuvConstantsNEON.kUVToG), // %6 |
- [kUVBiasBGR]"r"(&kYuvConstantsNEON.kUVBiasBGR), |
- [kYToRgb]"r"(&kYuvConstantsNEON.kYToRgb) |
+ : [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 I422ToARGBMatrixRow_NEON(const uint8* src_y, |
- const uint8* src_u, |
- const uint8* src_v, |
- uint8* dst_argb, |
- struct YuvConstantsNEON* YuvConstants, |
- int width) { |
+void I422ToARGBRow_NEON(const uint8* src_y, |
+ const uint8* src_u, |
+ const uint8* src_v, |
+ uint8* dst_argb, |
+ struct YuvConstants* yuvconstants, |
+ int width) { |
asm volatile ( |
- YUV422TORGB_SETUP_REG |
+ YUVTORGB_SETUP |
"1: \n" |
READYUV422 |
- YUV422TORGB |
+ YUVTORGB |
"subs %4, %4, #8 \n" |
"vmov.u8 d23, #255 \n" |
MEMACCESS(3) |
@@ -184,10 +185,10 @@ void I422ToARGBMatrixRow_NEON(const uint8* src_y, |
"+r"(src_v), // %2 |
"+r"(dst_argb), // %3 |
"+r"(width) // %4 |
- : [kUVToRB]"r"(&YuvConstants->kUVToRB), // %5 |
- [kUVToG]"r"(&YuvConstants->kUVToG), // %6 |
- [kUVBiasBGR]"r"(&YuvConstants->kUVBiasBGR), |
- [kYToRgb]"r"(&YuvConstants->kYToRgb) |
+ : [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" |
); |
@@ -197,12 +198,13 @@ void I411ToARGBRow_NEON(const uint8* src_y, |
const uint8* src_u, |
const uint8* src_v, |
uint8* dst_argb, |
+ struct YuvConstants* yuvconstants, |
int width) { |
asm volatile ( |
- YUV422TORGB_SETUP_REG |
+ YUVTORGB_SETUP |
"1: \n" |
READYUV411 |
- YUV422TORGB |
+ YUVTORGB |
"subs %4, %4, #8 \n" |
"vmov.u8 d23, #255 \n" |
MEMACCESS(3) |
@@ -213,10 +215,10 @@ void I411ToARGBRow_NEON(const uint8* src_y, |
"+r"(src_v), // %2 |
"+r"(dst_argb), // %3 |
"+r"(width) // %4 |
- : [kUVToRB]"r"(&kYuvConstantsNEON.kUVToRB), // %5 |
- [kUVToG]"r"(&kYuvConstantsNEON.kUVToG), // %6 |
- [kUVBiasBGR]"r"(&kYuvConstantsNEON.kUVBiasBGR), |
- [kYToRgb]"r"(&kYuvConstantsNEON.kYToRgb) |
+ : [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" |
); |
@@ -226,12 +228,13 @@ void I422ToBGRARow_NEON(const uint8* src_y, |
const uint8* src_u, |
const uint8* src_v, |
uint8* dst_bgra, |
+ struct YuvConstants* yuvconstants, |
int width) { |
asm volatile ( |
- YUV422TORGB_SETUP_REG |
+ YUVTORGB_SETUP |
"1: \n" |
READYUV422 |
- YUV422TORGB |
+ YUVTORGB |
"subs %4, %4, #8 \n" |
"vswp.u8 d20, d22 \n" |
"vmov.u8 d19, #255 \n" |
@@ -243,26 +246,26 @@ void I422ToBGRARow_NEON(const uint8* src_y, |
"+r"(src_v), // %2 |
"+r"(dst_bgra), // %3 |
"+r"(width) // %4 |
- : [kUVToRB]"r"(&kYuvConstantsNEON.kUVToRB), // %5 |
- [kUVToG]"r"(&kYuvConstantsNEON.kUVToG), // %6 |
- [kUVBiasBGR]"r"(&kYuvConstantsNEON.kUVBiasBGR), |
- [kYToRgb]"r"(&kYuvConstantsNEON.kYToRgb) |
+ : [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 I422ToABGRMatrixRow_NEON(const uint8* src_y, |
- const uint8* src_u, |
- const uint8* src_v, |
- uint8* dst_abgr, |
- struct YuvConstantsNEON* YuvConstants, |
- int width) { |
+void I422ToABGRRow_NEON(const uint8* src_y, |
+ const uint8* src_u, |
+ const uint8* src_v, |
+ uint8* dst_abgr, |
+ struct YuvConstants* yuvconstants, |
+ int width) { |
asm volatile ( |
- YUV422TORGB_SETUP_REG |
+ YUVTORGB_SETUP |
"1: \n" |
READYUV422 |
- YUV422TORGB |
+ YUVTORGB |
"subs %4, %4, #8 \n" |
"vswp.u8 d20, d22 \n" |
"vmov.u8 d23, #255 \n" |
@@ -274,10 +277,10 @@ void I422ToABGRMatrixRow_NEON(const uint8* src_y, |
"+r"(src_v), // %2 |
"+r"(dst_abgr), // %3 |
"+r"(width) // %4 |
- : [kUVToRB]"r"(&YuvConstants->kUVToRB), // %5 |
- [kUVToG]"r"(&YuvConstants->kUVToG), // %6 |
- [kUVBiasBGR]"r"(&YuvConstants->kUVBiasBGR), |
- [kYToRgb]"r"(&YuvConstants->kYToRgb) |
+ : [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" |
); |
@@ -287,12 +290,13 @@ void I422ToRGBARow_NEON(const uint8* src_y, |
const uint8* src_u, |
const uint8* src_v, |
uint8* dst_rgba, |
+ struct YuvConstants* yuvconstants, |
int width) { |
asm volatile ( |
- YUV422TORGB_SETUP_REG |
+ YUVTORGB_SETUP |
"1: \n" |
READYUV422 |
- YUV422TORGB |
+ YUVTORGB |
"subs %4, %4, #8 \n" |
"vmov.u8 d19, #255 \n" |
MEMACCESS(3) |
@@ -303,10 +307,10 @@ void I422ToRGBARow_NEON(const uint8* src_y, |
"+r"(src_v), // %2 |
"+r"(dst_rgba), // %3 |
"+r"(width) // %4 |
- : [kUVToRB]"r"(&kYuvConstantsNEON.kUVToRB), // %5 |
- [kUVToG]"r"(&kYuvConstantsNEON.kUVToG), // %6 |
- [kUVBiasBGR]"r"(&kYuvConstantsNEON.kUVBiasBGR), |
- [kYToRgb]"r"(&kYuvConstantsNEON.kYToRgb) |
+ : [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" |
); |
@@ -316,12 +320,13 @@ void I422ToRGB24Row_NEON(const uint8* src_y, |
const uint8* src_u, |
const uint8* src_v, |
uint8* dst_rgb24, |
+ struct YuvConstants* yuvconstants, |
int width) { |
asm volatile ( |
- YUV422TORGB_SETUP_REG |
+ YUVTORGB_SETUP |
"1: \n" |
READYUV422 |
- YUV422TORGB |
+ YUVTORGB |
"subs %4, %4, #8 \n" |
MEMACCESS(3) |
"vst3.8 {d20, d21, d22}, [%3]! \n" |
@@ -331,10 +336,10 @@ void I422ToRGB24Row_NEON(const uint8* src_y, |
"+r"(src_v), // %2 |
"+r"(dst_rgb24), // %3 |
"+r"(width) // %4 |
- : [kUVToRB]"r"(&kYuvConstantsNEON.kUVToRB), // %5 |
- [kUVToG]"r"(&kYuvConstantsNEON.kUVToG), // %6 |
- [kUVBiasBGR]"r"(&kYuvConstantsNEON.kUVBiasBGR), |
- [kYToRgb]"r"(&kYuvConstantsNEON.kYToRgb) |
+ : [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" |
); |
@@ -344,12 +349,13 @@ void I422ToRAWRow_NEON(const uint8* src_y, |
const uint8* src_u, |
const uint8* src_v, |
uint8* dst_raw, |
+ struct YuvConstants* yuvconstants, |
int width) { |
asm volatile ( |
- YUV422TORGB_SETUP_REG |
+ YUVTORGB_SETUP |
"1: \n" |
READYUV422 |
- YUV422TORGB |
+ YUVTORGB |
"subs %4, %4, #8 \n" |
"vswp.u8 d20, d22 \n" |
MEMACCESS(3) |
@@ -360,10 +366,10 @@ void I422ToRAWRow_NEON(const uint8* src_y, |
"+r"(src_v), // %2 |
"+r"(dst_raw), // %3 |
"+r"(width) // %4 |
- : [kUVToRB]"r"(&kYuvConstantsNEON.kUVToRB), // %5 |
- [kUVToG]"r"(&kYuvConstantsNEON.kUVToG), // %6 |
- [kUVBiasBGR]"r"(&kYuvConstantsNEON.kUVBiasBGR), |
- [kYToRgb]"r"(&kYuvConstantsNEON.kYToRgb) |
+ : [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" |
); |
@@ -385,12 +391,13 @@ void I422ToRGB565Row_NEON(const uint8* src_y, |
const uint8* src_u, |
const uint8* src_v, |
uint8* dst_rgb565, |
+ struct YuvConstants* yuvconstants, |
int width) { |
asm volatile ( |
- YUV422TORGB_SETUP_REG |
+ YUVTORGB_SETUP |
"1: \n" |
READYUV422 |
- YUV422TORGB |
+ YUVTORGB |
"subs %4, %4, #8 \n" |
ARGBTORGB565 |
MEMACCESS(3) |
@@ -401,10 +408,10 @@ void I422ToRGB565Row_NEON(const uint8* src_y, |
"+r"(src_v), // %2 |
"+r"(dst_rgb565), // %3 |
"+r"(width) // %4 |
- : [kUVToRB]"r"(&kYuvConstantsNEON.kUVToRB), // %5 |
- [kUVToG]"r"(&kYuvConstantsNEON.kUVToG), // %6 |
- [kUVBiasBGR]"r"(&kYuvConstantsNEON.kUVBiasBGR), |
- [kYToRgb]"r"(&kYuvConstantsNEON.kYToRgb) |
+ : [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" |
); |
@@ -429,12 +436,13 @@ void I422ToARGB1555Row_NEON(const uint8* src_y, |
const uint8* src_u, |
const uint8* src_v, |
uint8* dst_argb1555, |
+ struct YuvConstants* yuvconstants, |
int width) { |
asm volatile ( |
- YUV422TORGB_SETUP_REG |
+ YUVTORGB_SETUP |
"1: \n" |
READYUV422 |
- YUV422TORGB |
+ YUVTORGB |
"subs %4, %4, #8 \n" |
"vmov.u8 d23, #255 \n" |
ARGBTOARGB1555 |
@@ -446,10 +454,10 @@ void I422ToARGB1555Row_NEON(const uint8* src_y, |
"+r"(src_v), // %2 |
"+r"(dst_argb1555), // %3 |
"+r"(width) // %4 |
- : [kUVToRB]"r"(&kYuvConstantsNEON.kUVToRB), // %5 |
- [kUVToG]"r"(&kYuvConstantsNEON.kUVToG), // %6 |
- [kUVBiasBGR]"r"(&kYuvConstantsNEON.kUVBiasBGR), |
- [kYToRgb]"r"(&kYuvConstantsNEON.kYToRgb) |
+ : [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" |
); |
@@ -468,13 +476,14 @@ void I422ToARGB4444Row_NEON(const uint8* src_y, |
const uint8* src_u, |
const uint8* src_v, |
uint8* dst_argb4444, |
+ struct YuvConstants* yuvconstants, |
int width) { |
asm volatile ( |
- YUV422TORGB_SETUP_REG |
+ YUVTORGB_SETUP |
"vmov.u8 d4, #0x0f \n" // bits to clear with vbic. |
"1: \n" |
READYUV422 |
- YUV422TORGB |
+ YUVTORGB |
"subs %4, %4, #8 \n" |
"vmov.u8 d23, #255 \n" |
ARGBTOARGB4444 |
@@ -486,10 +495,10 @@ void I422ToARGB4444Row_NEON(const uint8* src_y, |
"+r"(src_v), // %2 |
"+r"(dst_argb4444), // %3 |
"+r"(width) // %4 |
- : [kUVToRB]"r"(&kYuvConstantsNEON.kUVToRB), // %5 |
- [kUVToG]"r"(&kYuvConstantsNEON.kUVToG), // %6 |
- [kUVBiasBGR]"r"(&kYuvConstantsNEON.kUVBiasBGR), |
- [kYToRgb]"r"(&kYuvConstantsNEON.kYToRgb) |
+ : [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" |
); |
@@ -499,10 +508,10 @@ void I400ToARGBRow_NEON(const uint8* src_y, |
uint8* dst_argb, |
int width) { |
asm volatile ( |
- YUV422TORGB_SETUP_REG |
+ YUVTORGB_SETUP |
"1: \n" |
READYUV400 |
- YUV422TORGB |
+ YUVTORGB |
"subs %2, %2, #8 \n" |
"vmov.u8 d23, #255 \n" |
MEMACCESS(1) |
@@ -511,10 +520,10 @@ void I400ToARGBRow_NEON(const uint8* src_y, |
: "+r"(src_y), // %0 |
"+r"(dst_argb), // %1 |
"+r"(width) // %2 |
- : [kUVToRB]"r"(&kYuvConstantsNEON.kUVToRB), // %3 |
- [kUVToG]"r"(&kYuvConstantsNEON.kUVToG), // %4 |
- [kUVBiasBGR]"r"(&kYuvConstantsNEON.kUVBiasBGR), |
- [kYToRgb]"r"(&kYuvConstantsNEON.kYToRgb) |
+ : [kUVToRB]"r"(&kYuvConstants.kUVToRB), |
+ [kUVToG]"r"(&kYuvConstants.kUVToG), |
+ [kUVBiasBGR]"r"(&kYuvConstants.kUVBiasBGR), |
+ [kYToRgb]"r"(&kYuvConstants.kYToRgb) |
: "cc", "memory", "q0", "q1", "q2", "q3", "q4", |
"q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15" |
); |
@@ -545,12 +554,13 @@ void J400ToARGBRow_NEON(const uint8* src_y, |
void NV12ToARGBRow_NEON(const uint8* src_y, |
const uint8* src_uv, |
uint8* dst_argb, |
+ struct YuvConstants* yuvconstants, |
int width) { |
asm volatile ( |
- YUV422TORGB_SETUP_REG |
+ YUVTORGB_SETUP |
"1: \n" |
READNV12 |
- YUV422TORGB |
+ YUVTORGB |
"subs %3, %3, #8 \n" |
"vmov.u8 d23, #255 \n" |
MEMACCESS(2) |
@@ -560,37 +570,10 @@ void NV12ToARGBRow_NEON(const uint8* src_y, |
"+r"(src_uv), // %1 |
"+r"(dst_argb), // %2 |
"+r"(width) // %3 |
- : [kUVToRB]"r"(&kYuvConstantsNEON.kUVToRB), // %4 |
- [kUVToG]"r"(&kYuvConstantsNEON.kUVToG), // %5 |
- [kUVBiasBGR]"r"(&kYuvConstantsNEON.kUVBiasBGR), |
- [kYToRgb]"r"(&kYuvConstantsNEON.kYToRgb) |
- : "cc", "memory", "q0", "q1", "q2", "q3", "q4", |
- "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15" |
- ); |
-} |
- |
-void NV21ToARGBRow_NEON(const uint8* src_y, |
- const uint8* src_uv, |
- uint8* dst_argb, |
- int width) { |
- asm volatile ( |
- YUV422TORGB_SETUP_REG |
- "1: \n" |
- READNV21 |
- YUV422TORGB |
- "subs %3, %3, #8 \n" |
- "vmov.u8 d23, #255 \n" |
- MEMACCESS(2) |
- "vst4.8 {d20, d21, d22, d23}, [%2]! \n" |
- "bgt 1b \n" |
- : "+r"(src_y), // %0 |
- "+r"(src_uv), // %1 |
- "+r"(dst_argb), // %2 |
- "+r"(width) // %3 |
- : [kUVToRB]"r"(&kYuvConstantsNEON.kUVToRB), // %4 |
- [kUVToG]"r"(&kYuvConstantsNEON.kUVToG), // %5 |
- [kUVBiasBGR]"r"(&kYuvConstantsNEON.kUVBiasBGR), |
- [kYToRgb]"r"(&kYuvConstantsNEON.kYToRgb) |
+ : [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" |
); |
@@ -599,39 +582,13 @@ void NV21ToARGBRow_NEON(const uint8* src_y, |
void NV12ToRGB565Row_NEON(const uint8* src_y, |
const uint8* src_uv, |
uint8* dst_rgb565, |
+ struct YuvConstants* yuvconstants, |
int width) { |
asm volatile ( |
- YUV422TORGB_SETUP_REG |
+ YUVTORGB_SETUP |
"1: \n" |
READNV12 |
- YUV422TORGB |
- "subs %3, %3, #8 \n" |
- ARGBTORGB565 |
- MEMACCESS(2) |
- "vst1.8 {q0}, [%2]! \n" // store 8 pixels RGB565. |
- "bgt 1b \n" |
- : "+r"(src_y), // %0 |
- "+r"(src_uv), // %1 |
- "+r"(dst_rgb565), // %2 |
- "+r"(width) // %3 |
- : [kUVToRB]"r"(&kYuvConstantsNEON.kUVToRB), // %4 |
- [kUVToG]"r"(&kYuvConstantsNEON.kUVToG), // %5 |
- [kUVBiasBGR]"r"(&kYuvConstantsNEON.kUVBiasBGR), |
- [kYToRgb]"r"(&kYuvConstantsNEON.kYToRgb) |
- : "cc", "memory", "q0", "q1", "q2", "q3", "q4", |
- "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15" |
- ); |
-} |
- |
-void NV21ToRGB565Row_NEON(const uint8* src_y, |
- const uint8* src_uv, |
- uint8* dst_rgb565, |
- int width) { |
- asm volatile ( |
- YUV422TORGB_SETUP_REG |
- "1: \n" |
- READNV21 |
- YUV422TORGB |
+ YUVTORGB |
"subs %3, %3, #8 \n" |
ARGBTORGB565 |
MEMACCESS(2) |
@@ -641,10 +598,10 @@ void NV21ToRGB565Row_NEON(const uint8* src_y, |
"+r"(src_uv), // %1 |
"+r"(dst_rgb565), // %2 |
"+r"(width) // %3 |
- : [kUVToRB]"r"(&kYuvConstantsNEON.kUVToRB), // %4 |
- [kUVToG]"r"(&kYuvConstantsNEON.kUVToG), // %5 |
- [kUVBiasBGR]"r"(&kYuvConstantsNEON.kUVBiasBGR), |
- [kYToRgb]"r"(&kYuvConstantsNEON.kYToRgb) |
+ : [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" |
); |
@@ -652,12 +609,13 @@ void NV21ToRGB565Row_NEON(const uint8* src_y, |
void YUY2ToARGBRow_NEON(const uint8* src_yuy2, |
uint8* dst_argb, |
+ struct YuvConstants* yuvconstants, |
int width) { |
asm volatile ( |
- YUV422TORGB_SETUP_REG |
+ YUVTORGB_SETUP |
"1: \n" |
READYUY2 |
- YUV422TORGB |
+ YUVTORGB |
"subs %2, %2, #8 \n" |
"vmov.u8 d23, #255 \n" |
MEMACCESS(1) |
@@ -666,10 +624,10 @@ void YUY2ToARGBRow_NEON(const uint8* src_yuy2, |
: "+r"(src_yuy2), // %0 |
"+r"(dst_argb), // %1 |
"+r"(width) // %2 |
- : [kUVToRB]"r"(&kYuvConstantsNEON.kUVToRB), // %3 |
- [kUVToG]"r"(&kYuvConstantsNEON.kUVToG), // %4 |
- [kUVBiasBGR]"r"(&kYuvConstantsNEON.kUVBiasBGR), |
- [kYToRgb]"r"(&kYuvConstantsNEON.kYToRgb) |
+ : [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" |
); |
@@ -677,12 +635,13 @@ void YUY2ToARGBRow_NEON(const uint8* src_yuy2, |
void UYVYToARGBRow_NEON(const uint8* src_uyvy, |
uint8* dst_argb, |
+ struct YuvConstants* yuvconstants, |
int width) { |
asm volatile ( |
- YUV422TORGB_SETUP_REG |
+ YUVTORGB_SETUP |
"1: \n" |
READUYVY |
- YUV422TORGB |
+ YUVTORGB |
"subs %2, %2, #8 \n" |
"vmov.u8 d23, #255 \n" |
MEMACCESS(1) |
@@ -691,10 +650,10 @@ void UYVYToARGBRow_NEON(const uint8* src_uyvy, |
: "+r"(src_uyvy), // %0 |
"+r"(dst_argb), // %1 |
"+r"(width) // %2 |
- : [kUVToRB]"r"(&kYuvConstantsNEON.kUVToRB), // %3 |
- [kUVToG]"r"(&kYuvConstantsNEON.kUVToG), // %4 |
- [kUVBiasBGR]"r"(&kYuvConstantsNEON.kUVBiasBGR), |
- [kYToRgb]"r"(&kYuvConstantsNEON.kYToRgb) |
+ : [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" |
); |