Commit 28ce7d94 authored by Frank Barchard's avatar Frank Barchard

j422toabgr neon port using i422toabgr matrix function.

R=harryjin@google.com
BUG=libyuv:488

Review URL: https://codereview.chromium.org/1353923003 .
parent 6fcbae14
...@@ -299,15 +299,18 @@ extern "C" { ...@@ -299,15 +299,18 @@ extern "C" {
#define HAS_COPYROW_NEON #define HAS_COPYROW_NEON
#define HAS_J400TOARGBROW_NEON #define HAS_J400TOARGBROW_NEON
#define HAS_I411TOARGBROW_NEON #define HAS_I411TOARGBROW_NEON
#define HAS_I422TOARGBROW_NEON
#define HAS_I422TOABGRROW_NEON #define HAS_I422TOABGRROW_NEON
#define HAS_I422TOARGB1555ROW_NEON #define HAS_I422TOARGB1555ROW_NEON
#define HAS_I422TOARGB4444ROW_NEON #define HAS_I422TOARGB4444ROW_NEON
#define HAS_I422TOARGBROW_NEON
// TODO(fbarchard): Implement aarch64 neon version // TODO(fbarchard): Implement aarch64 neon version
#ifndef __aarch64__ #ifndef __aarch64__
#define HAS_I422TOARGBMATRIXROW_NEON #define HAS_I422TOARGBMATRIXROW_NEON
#define HAS_I422TOABGRMATRIXROW_NEON
#define HAS_J422TOARGBROW_NEON #define HAS_J422TOARGBROW_NEON
#define HAS_J422TOABGRROW_NEON
#define HAS_H422TOARGBROW_NEON #define HAS_H422TOARGBROW_NEON
#define HAS_H422TOABGRROW_NEON
#endif #endif
// #define HAS_I422TOABGRMATRIXROW_NEON // #define HAS_I422TOABGRMATRIXROW_NEON
#define HAS_I422TOBGRAROW_NEON #define HAS_I422TOBGRAROW_NEON
......
...@@ -123,9 +123,15 @@ ANY31(I422ToRGB565Row_Any_NEON, I422ToRGB565Row_NEON, 1, 0, 2, 7) ...@@ -123,9 +123,15 @@ ANY31(I422ToRGB565Row_Any_NEON, I422ToRGB565Row_NEON, 1, 0, 2, 7)
#ifdef HAS_J422TOARGBROW_NEON #ifdef HAS_J422TOARGBROW_NEON
ANY31(J422ToARGBRow_Any_NEON, J422ToARGBRow_NEON, 1, 0, 4, 7) ANY31(J422ToARGBRow_Any_NEON, J422ToARGBRow_NEON, 1, 0, 4, 7)
#endif #endif
#ifdef HAS_J422TOABGRROW_NEON
ANY31(J422ToABGRRow_Any_NEON, J422ToABGRRow_NEON, 1, 0, 4, 7)
#endif
#ifdef HAS_H422TOARGBROW_NEON #ifdef HAS_H422TOARGBROW_NEON
ANY31(H422ToARGBRow_Any_NEON, H422ToARGBRow_NEON, 1, 0, 4, 7) ANY31(H422ToARGBRow_Any_NEON, H422ToARGBRow_NEON, 1, 0, 4, 7)
#endif #endif
#ifdef HAS_H422TOABGRROW_NEON
ANY31(H422ToABGRRow_Any_NEON, H422ToABGRRow_NEON, 1, 0, 4, 7)
#endif
#ifdef HAS_I422TOYUY2ROW_NEON #ifdef HAS_I422TOYUY2ROW_NEON
ANY31(I422ToYUY2Row_Any_NEON, I422ToYUY2Row_NEON, 1, 1, 4, 15) ANY31(I422ToYUY2Row_Any_NEON, I422ToYUY2Row_NEON, 1, 1, 4, 15)
#endif #endif
......
...@@ -2294,7 +2294,11 @@ ANYYUV(I422ToARGBRow_NEON, I422ToARGBMatrixRow_NEON, kYuvConstantsNEON) ...@@ -2294,7 +2294,11 @@ ANYYUV(I422ToARGBRow_NEON, I422ToARGBMatrixRow_NEON, kYuvConstantsNEON)
ANYYUV(J422ToARGBRow_NEON, I422ToARGBMatrixRow_NEON, kYuvJConstantsNEON) ANYYUV(J422ToARGBRow_NEON, I422ToARGBMatrixRow_NEON, kYuvJConstantsNEON)
ANYYUV(H422ToARGBRow_NEON, I422ToARGBMatrixRow_NEON, kYuvHConstantsNEON) ANYYUV(H422ToARGBRow_NEON, I422ToARGBMatrixRow_NEON, kYuvHConstantsNEON)
#endif #endif
#ifdef HAS_I422TOABGRMATRIXROW_NEON
ANYYUV(I422ToABGRRow_NEON, I422ToABGRMatrixRow_NEON, kYuvConstantsNEON)
ANYYUV(J422ToABGRRow_NEON, I422ToABGRMatrixRow_NEON, kYuvJConstantsNEON)
ANYYUV(H422ToABGRRow_NEON, I422ToABGRMatrixRow_NEON, kYuvHConstantsNEON)
#endif
#ifdef HAS_I422TOARGBMATRIXROW_SSSE3 #ifdef HAS_I422TOARGBMATRIXROW_SSSE3
ANYYUV(I422ToARGBRow_SSSE3, I422ToARGBMatrixRow_SSSE3, kYuvConstants) ANYYUV(I422ToARGBRow_SSSE3, I422ToARGBMatrixRow_SSSE3, kYuvConstants)
ANYYUV(J422ToARGBRow_SSSE3, I422ToARGBMatrixRow_SSSE3, kYuvJConstants) ANYYUV(J422ToARGBRow_SSSE3, I422ToARGBMatrixRow_SSSE3, kYuvJConstants)
......
...@@ -368,11 +368,12 @@ void I422ToBGRARow_NEON(const uint8* src_y, ...@@ -368,11 +368,12 @@ void I422ToBGRARow_NEON(const uint8* src_y,
); );
} }
void I422ToABGRRow_NEON(const uint8* src_y, void I422ToABGRMatrixRow_NEON(const uint8* src_y,
const uint8* src_u, const uint8* src_u,
const uint8* src_v, const uint8* src_v,
uint8* dst_abgr, uint8* dst_abgr,
int width) { struct YuvConstantsNEON* YuvConstants,
int width) {
asm volatile ( asm volatile (
YUV422TORGB_SETUP_REG YUV422TORGB_SETUP_REG
"1: \n" "1: \n"
...@@ -389,10 +390,10 @@ void I422ToABGRRow_NEON(const uint8* src_y, ...@@ -389,10 +390,10 @@ void I422ToABGRRow_NEON(const uint8* src_y,
"+r"(src_v), // %2 "+r"(src_v), // %2
"+r"(dst_abgr), // %3 "+r"(dst_abgr), // %3
"+r"(width) // %4 "+r"(width) // %4
: [kUVToRB]"r"(&kYuvConstantsNEON.kUVToRB), // %5 : [kUVToRB]"r"(&YuvConstants->kUVToRB), // %5
[kUVToG]"r"(&kYuvConstantsNEON.kUVToG), // %6 [kUVToG]"r"(&YuvConstants->kUVToG), // %6
[kUVBiasBGR]"r"(&kYuvConstantsNEON.kUVBiasBGR), [kUVBiasBGR]"r"(&YuvConstants->kUVBiasBGR),
[kYToRgb]"r"(&kYuvConstantsNEON.kYToRgb) [kYToRgb]"r"(&YuvConstants->kYToRgb)
: "cc", "memory", "q0", "q1", "q2", "q3", "q4", : "cc", "memory", "q0", "q1", "q2", "q3", "q4",
"q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15" "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15"
); );
......
...@@ -205,6 +205,7 @@ void I444ToARGBRow_NEON(const uint8* src_y, ...@@ -205,6 +205,7 @@ void I444ToARGBRow_NEON(const uint8* src_y,
} }
#endif // HAS_I444TOARGBROW_NEON #endif // HAS_I444TOARGBROW_NEON
// TODO(fbarchard): Switch to Matrix version of this function.
#ifdef HAS_I422TOARGBROW_NEON #ifdef HAS_I422TOARGBROW_NEON
void I422ToARGBRow_NEON(const uint8* src_y, void I422ToARGBRow_NEON(const uint8* src_y,
const uint8* src_u, const uint8* src_u,
...@@ -292,6 +293,7 @@ void I422ToBGRARow_NEON(const uint8* src_y, ...@@ -292,6 +293,7 @@ void I422ToBGRARow_NEON(const uint8* src_y,
} }
#endif // HAS_I422TOBGRAROW_NEON #endif // HAS_I422TOBGRAROW_NEON
// TODO(fbarchard): Switch to Matrix version of this function.
#ifdef HAS_I422TOABGRROW_NEON #ifdef HAS_I422TOABGRROW_NEON
void I422ToABGRRow_NEON(const uint8* src_y, void I422ToABGRRow_NEON(const uint8* src_y,
const uint8* src_u, const uint8* src_u,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment