Index: source/row_win.cc |
diff --git a/source/row_win.cc b/source/row_win.cc |
index f7a31052003be8ac259c06e7cf69fb050c807e71..f09d2a75be433942f5d816f572837cab344eaa75 100644 |
--- a/source/row_win.cc |
+++ b/source/row_win.cc |
@@ -83,13 +83,13 @@ extern "C" { |
dst_argb += 32; |
-#if defined(HAS_I422TOARGBMATRIXROW_SSSE3) |
-void I422ToARGBMatrixRow_SSSE3(const uint8* y_buf, |
- const uint8* u_buf, |
- const uint8* v_buf, |
- uint8* dst_argb, |
- struct YuvConstants* YuvConstants, |
- int width) { |
+#if defined(HAS_I422TOARGBROW_SSSE3) |
+void I422ToARGBRow_SSSE3(const uint8* y_buf, |
+ const uint8* u_buf, |
+ const uint8* v_buf, |
+ uint8* dst_argb, |
+ struct YuvConstants* yuvconstants, |
+ int width) { |
__m128i xmm0, xmm1, xmm2, xmm3; |
const __m128i xmm5 = _mm_set1_epi8(-1); |
const ptrdiff_t offset = (uint8*)v_buf - (uint8*)u_buf; |
@@ -102,13 +102,13 @@ void I422ToARGBMatrixRow_SSSE3(const uint8* y_buf, |
} |
#endif |
-#if defined(HAS_I422TOABGRMATRIXROW_SSSE3) |
-void I422ToABGRMatrixRow_SSSE3(const uint8* y_buf, |
- const uint8* u_buf, |
- const uint8* v_buf, |
- uint8* dst_argb, |
- struct YuvConstants* YuvConstants, |
- int width) { |
+#if defined(HAS_I422TOABGRROW_SSSE3) |
+void I422ToABGRRow_SSSE3(const uint8* y_buf, |
+ const uint8* u_buf, |
+ const uint8* v_buf, |
+ uint8* dst_argb, |
+ struct YuvConstants* yuvconstants, |
+ int width) { |
__m128i xmm0, xmm1, xmm2, xmm3; |
const __m128i xmm5 = _mm_set1_epi8(-1); |
const ptrdiff_t offset = (uint8*)v_buf - (uint8*)u_buf; |
@@ -1963,16 +1963,16 @@ void RGBAToUVRow_SSSE3(const uint8* src_argb0, int src_stride_argb, |
__asm lea edx, [edx + 64] \ |
} |
-#ifdef HAS_I422TOARGBMATRIXROW_AVX2 |
+#ifdef HAS_I422TOARGBROW_AVX2 |
// 16 pixels |
// 8 UV values upsampled to 16 UV, mixed with 16 Y producing 16 ARGB (64 bytes). |
__declspec(naked) |
-void I422ToARGBMatrixRow_AVX2(const uint8* y_buf, |
- const uint8* u_buf, |
- const uint8* v_buf, |
- uint8* dst_argb, |
- struct YuvConstants* YuvConstants, |
- int width) { |
+void I422ToARGBRow_AVX2(const uint8* y_buf, |
+ const uint8* u_buf, |
+ const uint8* v_buf, |
+ uint8* dst_argb, |
+ struct YuvConstants* yuvconstants, |
+ int width) { |
__asm { |
push esi |
push edi |
@@ -2001,18 +2001,18 @@ void I422ToARGBMatrixRow_AVX2(const uint8* y_buf, |
ret |
} |
} |
-#endif // HAS_I422TOARGBMATRIXROW_AVX2 |
+#endif // HAS_I422TOARGBROW_AVX2 |
-#ifdef HAS_I444TOARGBMATRIXROW_AVX2 |
+#ifdef HAS_I444TOARGBROW_AVX2 |
// 16 pixels |
// 16 UV values with 16 Y producing 16 ARGB (64 bytes). |
__declspec(naked) |
-void I444ToARGBMatrixRow_AVX2(const uint8* y_buf, |
- const uint8* u_buf, |
- const uint8* v_buf, |
- uint8* dst_argb, |
- struct YuvConstants* YuvConstants, |
- int width) { |
+void I444ToARGBRow_AVX2(const uint8* y_buf, |
+ const uint8* u_buf, |
+ const uint8* v_buf, |
+ uint8* dst_argb, |
+ struct YuvConstants* yuvconstants, |
+ int width) { |
__asm { |
push esi |
push edi |
@@ -2040,18 +2040,18 @@ void I444ToARGBMatrixRow_AVX2(const uint8* y_buf, |
ret |
} |
} |
-#endif // HAS_I444TOARGBMATRIXROW_AVX2 |
+#endif // HAS_I444TOARGBROW_AVX2 |
-#ifdef HAS_I444TOABGRMATRIXROW_AVX2 |
+#ifdef HAS_I444TOABGRROW_AVX2 |
// 16 pixels |
// 16 UV values with 16 Y producing 16 ABGR (64 bytes). |
__declspec(naked) |
-void I444ToABGRMatrixRow_AVX2(const uint8* y_buf, |
- const uint8* u_buf, |
- const uint8* v_buf, |
- uint8* dst_abgr, |
- struct YuvConstants* YuvConstants, |
- int width) { |
+void I444ToABGRRow_AVX2(const uint8* y_buf, |
+ const uint8* u_buf, |
+ const uint8* v_buf, |
+ uint8* dst_abgr, |
+ struct YuvConstants* yuvconstants, |
+ int width) { |
__asm { |
push esi |
push edi |
@@ -2079,7 +2079,7 @@ void I444ToABGRMatrixRow_AVX2(const uint8* y_buf, |
ret |
} |
} |
-#endif // HAS_I444TOABGRMATRIXROW_AVX2 |
+#endif // HAS_I444TOABGRROW_AVX2 |
#ifdef HAS_I411TOARGBROW_AVX2 |
// 16 pixels |
@@ -2089,26 +2089,30 @@ void I411ToARGBRow_AVX2(const uint8* y_buf, |
const uint8* u_buf, |
const uint8* v_buf, |
uint8* dst_argb, |
+ struct YuvConstants* yuvconstants, |
int width) { |
__asm { |
push esi |
push edi |
- mov eax, [esp + 8 + 4] // Y |
- mov esi, [esp + 8 + 8] // U |
- mov edi, [esp + 8 + 12] // V |
- mov edx, [esp + 8 + 16] // argb |
- mov ecx, [esp + 8 + 20] // width |
+ push ebp |
+ mov eax, [esp + 12 + 4] // Y |
+ mov esi, [esp + 12 + 8] // U |
+ mov edi, [esp + 12 + 12] // V |
+ mov edx, [esp + 12 + 16] // abgr |
+ mov ebp, [esp + 12 + 20] // YuvConstants |
+ mov ecx, [esp + 12 + 24] // width |
sub edi, esi |
vpcmpeqb ymm5, ymm5, ymm5 // generate 0xffffffffffffffff for alpha |
convertloop: |
READYUV411_AVX2 |
- YUVTORGB_AVX2(kYuvConstants) |
+ YUVTORGB_AVX2(ebp) |
STOREARGB_AVX2 |
sub ecx, 16 |
jg convertloop |
+ pop ebp |
pop edi |
pop esi |
vzeroupper |
@@ -2124,23 +2128,27 @@ __declspec(naked) |
void NV12ToARGBRow_AVX2(const uint8* y_buf, |
const uint8* uv_buf, |
uint8* dst_argb, |
+ struct YuvConstants* yuvconstants, |
int width) { |
__asm { |
push esi |
- mov eax, [esp + 4 + 4] // Y |
- mov esi, [esp + 4 + 8] // UV |
- mov edx, [esp + 4 + 12] // argb |
- mov ecx, [esp + 4 + 16] // width |
+ push ebp |
+ mov eax, [esp + 8 + 4] // Y |
+ mov esi, [esp + 8 + 8] // UV |
+ mov edx, [esp + 8 + 12] // argb |
+ mov ebp, [esp + 8 + 16] // YuvConstants |
+ mov ecx, [esp + 8 + 20] // width |
vpcmpeqb ymm5, ymm5, ymm5 // generate 0xffffffffffffffff for alpha |
convertloop: |
READNV12_AVX2 |
- YUVTORGB_AVX2(kYuvConstants) |
+ YUVTORGB_AVX2(ebp) |
STOREARGB_AVX2 |
sub ecx, 16 |
jg convertloop |
+ pop ebp |
pop esi |
vzeroupper |
ret |
@@ -2148,37 +2156,6 @@ void NV12ToARGBRow_AVX2(const uint8* y_buf, |
} |
#endif // HAS_NV12TOARGBROW_AVX2 |
-#ifdef HAS_NV21TOARGBROW_AVX2 |
-// 16 pixels. |
-// 8 VU values upsampled to 16 VU, mixed with 16 Y producing 16 ARGB (64 bytes). |
-__declspec(naked) |
-void NV21ToARGBRow_AVX2(const uint8* y_buf, |
- const uint8* uv_buf, |
- uint8* dst_argb, |
- int width) { |
- __asm { |
- push esi |
- mov eax, [esp + 4 + 4] // Y |
- mov esi, [esp + 4 + 8] // UV |
- mov edx, [esp + 4 + 12] // argb |
- mov ecx, [esp + 4 + 16] // width |
- vpcmpeqb ymm5, ymm5, ymm5 // generate 0xffffffffffffffff for alpha |
- |
- convertloop: |
- READNV12_AVX2 |
- YUVTORGB_AVX2(kYvuConstants) |
- STOREARGB_AVX2 |
- |
- sub ecx, 16 |
- jg convertloop |
- |
- pop esi |
- vzeroupper |
- ret |
- } |
-} |
-#endif // HAS_NV21TOARGBROW_AVX2 |
- |
#ifdef HAS_I422TOBGRAROW_AVX2 |
// 16 pixels |
// 8 UV values upsampled to 16 UV, mixed with 16 Y producing 16 BGRA (64 bytes). |
@@ -2188,26 +2165,30 @@ void I422ToBGRARow_AVX2(const uint8* y_buf, |
const uint8* u_buf, |
const uint8* v_buf, |
uint8* dst_argb, |
+ struct YuvConstants* yuvconstants, |
int width) { |
__asm { |
push esi |
push edi |
- mov eax, [esp + 8 + 4] // Y |
- mov esi, [esp + 8 + 8] // U |
- mov edi, [esp + 8 + 12] // V |
- mov edx, [esp + 8 + 16] // argb |
- mov ecx, [esp + 8 + 20] // width |
+ push ebp |
+ mov eax, [esp + 12 + 4] // Y |
+ mov esi, [esp + 12 + 8] // U |
+ mov edi, [esp + 12 + 12] // V |
+ mov edx, [esp + 12 + 16] // abgr |
+ mov ebp, [esp + 12 + 20] // YuvConstants |
+ mov ecx, [esp + 12 + 24] // width |
sub edi, esi |
vpcmpeqb ymm5, ymm5, ymm5 // generate 0xffffffffffffffff for alpha |
convertloop: |
READYUV422_AVX2 |
- YUVTORGB_AVX2(kYuvConstants) |
+ YUVTORGB_AVX2(ebp) |
STOREBGRA_AVX2 |
sub ecx, 16 |
jg convertloop |
+ pop ebp |
pop edi |
pop esi |
vzeroupper |
@@ -2224,26 +2205,30 @@ void I422ToRGBARow_AVX2(const uint8* y_buf, |
const uint8* u_buf, |
const uint8* v_buf, |
uint8* dst_argb, |
+ struct YuvConstants* yuvconstants, |
int width) { |
__asm { |
push esi |
push edi |
- mov eax, [esp + 8 + 4] // Y |
- mov esi, [esp + 8 + 8] // U |
- mov edi, [esp + 8 + 12] // V |
- mov edx, [esp + 8 + 16] // argb |
- mov ecx, [esp + 8 + 20] // width |
+ push ebp |
+ mov eax, [esp + 12 + 4] // Y |
+ mov esi, [esp + 12 + 8] // U |
+ mov edi, [esp + 12 + 12] // V |
+ mov edx, [esp + 12 + 16] // abgr |
+ mov ebp, [esp + 12 + 20] // YuvConstants |
+ mov ecx, [esp + 12 + 24] // width |
sub edi, esi |
vpcmpeqb ymm5, ymm5, ymm5 // generate 0xffffffffffffffff for alpha |
convertloop: |
READYUV422_AVX2 |
- YUVTORGB_AVX2(kYuvConstants) |
+ YUVTORGB_AVX2(ebp) |
STORERGBA_AVX2 |
sub ecx, 16 |
jg convertloop |
+ pop ebp |
pop edi |
pop esi |
vzeroupper |
@@ -2256,12 +2241,12 @@ void I422ToRGBARow_AVX2(const uint8* y_buf, |
// 16 pixels |
// 8 UV values upsampled to 16 UV, mixed with 16 Y producing 16 ABGR (64 bytes). |
__declspec(naked) |
-void I422ToABGRMatrixRow_AVX2(const uint8* y_buf, |
- const uint8* u_buf, |
- const uint8* v_buf, |
- uint8* dst_argb, |
- struct YuvConstants* YuvConstants, |
- int width) { |
+void I422ToABGRRow_AVX2(const uint8* y_buf, |
+ const uint8* u_buf, |
+ const uint8* v_buf, |
+ uint8* dst_argb, |
+ struct YuvConstants* yuvconstants, |
+ int width) { |
__asm { |
push esi |
push edi |
@@ -2481,12 +2466,12 @@ void I422ToABGRMatrixRow_AVX2(const uint8* y_buf, |
// 8 pixels. |
// 8 UV values, mixed with 8 Y producing 8 ARGB (32 bytes). |
__declspec(naked) |
-void I444ToARGBMatrixRow_SSSE3(const uint8* y_buf, |
- const uint8* u_buf, |
- const uint8* v_buf, |
- uint8* dst_argb, |
- struct YuvConstants* YuvConstants, |
- int width) { |
+void I444ToARGBRow_SSSE3(const uint8* y_buf, |
+ const uint8* u_buf, |
+ const uint8* v_buf, |
+ uint8* dst_argb, |
+ struct YuvConstants* yuvconstants, |
+ int width) { |
__asm { |
push esi |
push edi |
@@ -2518,12 +2503,12 @@ void I444ToARGBMatrixRow_SSSE3(const uint8* y_buf, |
// 8 pixels. |
// 8 UV values, mixed with 8 Y producing 8 ABGR (32 bytes). |
__declspec(naked) |
-void I444ToABGRMatrixRow_SSSE3(const uint8* y_buf, |
- const uint8* u_buf, |
- const uint8* v_buf, |
- uint8* dst_abgr, |
- struct YuvConstants* YuvConstants, |
- int width) { |
+void I444ToABGRRow_SSSE3(const uint8* y_buf, |
+ const uint8* u_buf, |
+ const uint8* v_buf, |
+ uint8* dst_abgr, |
+ struct YuvConstants* yuvconstants, |
+ int width) { |
__asm { |
push esi |
push edi |
@@ -2559,27 +2544,31 @@ void I422ToRGB24Row_SSSE3(const uint8* y_buf, |
const uint8* u_buf, |
const uint8* v_buf, |
uint8* dst_rgb24, |
+ struct YuvConstants* yuvconstants, |
int width) { |
__asm { |
push esi |
push edi |
- mov eax, [esp + 8 + 4] // Y |
- mov esi, [esp + 8 + 8] // U |
- mov edi, [esp + 8 + 12] // V |
- mov edx, [esp + 8 + 16] // rgb24 |
- mov ecx, [esp + 8 + 20] // width |
+ push ebp |
+ mov eax, [esp + 12 + 4] // Y |
+ mov esi, [esp + 12 + 8] // U |
+ mov edi, [esp + 12 + 12] // V |
+ mov edx, [esp + 12 + 16] // argb |
+ mov ebp, [esp + 12 + 20] // YuvConstants |
+ mov ecx, [esp + 12 + 24] // width |
sub edi, esi |
movdqa xmm5, xmmword ptr kShuffleMaskARGBToRGB24_0 |
movdqa xmm6, xmmword ptr kShuffleMaskARGBToRGB24 |
convertloop: |
READYUV422 |
- YUVTORGB(kYuvConstants) |
+ YUVTORGB(ebp) |
STORERGB24 |
sub ecx, 8 |
jg convertloop |
+ pop ebp |
pop edi |
pop esi |
ret |
@@ -2593,27 +2582,31 @@ void I422ToRAWRow_SSSE3(const uint8* y_buf, |
const uint8* u_buf, |
const uint8* v_buf, |
uint8* dst_raw, |
+ struct YuvConstants* yuvconstants, |
int width) { |
__asm { |
push esi |
push edi |
- mov eax, [esp + 8 + 4] // Y |
- mov esi, [esp + 8 + 8] // U |
- mov edi, [esp + 8 + 12] // V |
- mov edx, [esp + 8 + 16] // raw |
- mov ecx, [esp + 8 + 20] // width |
+ push ebp |
+ mov eax, [esp + 12 + 4] // Y |
+ mov esi, [esp + 12 + 8] // U |
+ mov edi, [esp + 12 + 12] // V |
+ mov edx, [esp + 12 + 16] // argb |
+ mov ebp, [esp + 12 + 20] // YuvConstants |
+ mov ecx, [esp + 12 + 24] // width |
sub edi, esi |
movdqa xmm5, xmmword ptr kShuffleMaskARGBToRAW_0 |
movdqa xmm6, xmmword ptr kShuffleMaskARGBToRAW |
convertloop: |
READYUV422 |
- YUVTORGB(kYuvConstants) |
+ YUVTORGB(ebp) |
STORERAW |
sub ecx, 8 |
jg convertloop |
+ pop ebp |
pop edi |
pop esi |
ret |
@@ -2627,15 +2620,18 @@ void I422ToRGB565Row_SSSE3(const uint8* y_buf, |
const uint8* u_buf, |
const uint8* v_buf, |
uint8* rgb565_buf, |
+ struct YuvConstants* yuvconstants, |
int width) { |
__asm { |
push esi |
push edi |
- mov eax, [esp + 8 + 4] // Y |
- mov esi, [esp + 8 + 8] // U |
- mov edi, [esp + 8 + 12] // V |
- mov edx, [esp + 8 + 16] // rgb565 |
- mov ecx, [esp + 8 + 20] // width |
+ push ebp |
+ mov eax, [esp + 12 + 4] // Y |
+ mov esi, [esp + 12 + 8] // U |
+ mov edi, [esp + 12 + 12] // V |
+ mov edx, [esp + 12 + 16] // argb |
+ mov ebp, [esp + 12 + 20] // YuvConstants |
+ mov ecx, [esp + 12 + 24] // width |
sub edi, esi |
pcmpeqb xmm5, xmm5 // generate mask 0x0000001f |
psrld xmm5, 27 |
@@ -2647,12 +2643,13 @@ void I422ToRGB565Row_SSSE3(const uint8* y_buf, |
convertloop: |
READYUV422 |
- YUVTORGB(kYuvConstants) |
+ YUVTORGB(ebp) |
STORERGB565 |
sub ecx, 8 |
jg convertloop |
+ pop ebp |
pop edi |
pop esi |
ret |
@@ -2662,12 +2659,12 @@ void I422ToRGB565Row_SSSE3(const uint8* y_buf, |
// 8 pixels. |
// 4 UV values upsampled to 8 UV, mixed with 8 Y producing 8 ARGB (32 bytes). |
__declspec(naked) |
-void I422ToARGBMatrixRow_SSSE3(const uint8* y_buf, |
- const uint8* u_buf, |
- const uint8* v_buf, |
- uint8* dst_argb, |
- struct YuvConstants* YuvConstants, |
- int width) { |
+void I422ToARGBRow_SSSE3(const uint8* y_buf, |
+ const uint8* u_buf, |
+ const uint8* v_buf, |
+ uint8* dst_argb, |
+ struct YuvConstants* yuvconstants, |
+ int width) { |
__asm { |
push esi |
push edi |
@@ -2704,30 +2701,32 @@ void I411ToARGBRow_SSSE3(const uint8* y_buf, |
const uint8* u_buf, |
const uint8* v_buf, |
uint8* dst_argb, |
+ struct YuvConstants* yuvconstants, |
int width) { |
__asm { |
- push ebx |
push esi |
push edi |
+ push ebp |
mov eax, [esp + 12 + 4] // Y |
mov esi, [esp + 12 + 8] // U |
mov edi, [esp + 12 + 12] // V |
- mov edx, [esp + 12 + 16] // argb |
- mov ecx, [esp + 12 + 20] // width |
+ mov edx, [esp + 12 + 16] // abgr |
+ mov ebp, [esp + 12 + 20] // YuvConstants |
+ mov ecx, [esp + 12 + 24] // width |
sub edi, esi |
pcmpeqb xmm5, xmm5 // generate 0xffffffff for alpha |
convertloop: |
- READYUV411 // modifies EBX |
- YUVTORGB(kYuvConstants) |
+ READYUV411 |
+ YUVTORGB(ebp) |
STOREARGB |
sub ecx, 8 |
jg convertloop |
+ pop ebp |
pop edi |
pop esi |
- pop ebx |
ret |
} |
} |
@@ -2738,51 +2737,27 @@ __declspec(naked) |
void NV12ToARGBRow_SSSE3(const uint8* y_buf, |
const uint8* uv_buf, |
uint8* dst_argb, |
+ struct YuvConstants* yuvconstants, |
int width) { |
__asm { |
push esi |
- mov eax, [esp + 4 + 4] // Y |
- mov esi, [esp + 4 + 8] // UV |
- mov edx, [esp + 4 + 12] // argb |
- mov ecx, [esp + 4 + 16] // width |
- pcmpeqb xmm5, xmm5 // generate 0xffffffff for alpha |
- |
- convertloop: |
- READNV12 |
- YUVTORGB(kYuvConstants) |
- STOREARGB |
- |
- sub ecx, 8 |
- jg convertloop |
- |
- pop esi |
- ret |
- } |
-} |
- |
-// 8 pixels. |
-// 4 VU values upsampled to 8 VU, mixed with 8 Y producing 8 ARGB (32 bytes). |
-__declspec(naked) |
-void NV21ToARGBRow_SSSE3(const uint8* y_buf, |
- const uint8* uv_buf, |
- uint8* dst_argb, |
- int width) { |
- __asm { |
- push esi |
- mov eax, [esp + 4 + 4] // Y |
- mov esi, [esp + 4 + 8] // UV |
- mov edx, [esp + 4 + 12] // argb |
- mov ecx, [esp + 4 + 16] // width |
+ push ebp |
+ mov eax, [esp + 8 + 4] // Y |
+ mov esi, [esp + 8 + 8] // UV |
+ mov edx, [esp + 8 + 12] // argb |
+ mov ebp, [esp + 8 + 16] // YuvConstants |
+ mov ecx, [esp + 8 + 20] // width |
pcmpeqb xmm5, xmm5 // generate 0xffffffff for alpha |
convertloop: |
READNV12 |
- YUVTORGB(kYvuConstants) |
+ YUVTORGB(ebp) |
STOREARGB |
sub ecx, 8 |
jg convertloop |
+ pop ebp |
pop esi |
ret |
} |
@@ -2793,25 +2768,29 @@ void I422ToBGRARow_SSSE3(const uint8* y_buf, |
const uint8* u_buf, |
const uint8* v_buf, |
uint8* dst_bgra, |
+ struct YuvConstants* yuvconstants, |
int width) { |
__asm { |
push esi |
push edi |
- mov eax, [esp + 8 + 4] // Y |
- mov esi, [esp + 8 + 8] // U |
- mov edi, [esp + 8 + 12] // V |
- mov edx, [esp + 8 + 16] // bgra |
- mov ecx, [esp + 8 + 20] // width |
+ push ebp |
+ mov eax, [esp + 12 + 4] // Y |
+ mov esi, [esp + 12 + 8] // U |
+ mov edi, [esp + 12 + 12] // V |
+ mov edx, [esp + 12 + 16] // argb |
+ mov ebp, [esp + 12 + 20] // YuvConstants |
+ mov ecx, [esp + 12 + 24] // width |
sub edi, esi |
convertloop: |
READYUV422 |
- YUVTORGB(kYuvConstants) |
+ YUVTORGB(ebp) |
STOREBGRA |
sub ecx, 8 |
jg convertloop |
+ pop ebp |
pop edi |
pop esi |
ret |
@@ -2819,12 +2798,12 @@ void I422ToBGRARow_SSSE3(const uint8* y_buf, |
} |
__declspec(naked) |
-void I422ToABGRMatrixRow_SSSE3(const uint8* y_buf, |
- const uint8* u_buf, |
- const uint8* v_buf, |
- uint8* dst_abgr, |
- struct YuvConstants* YuvConstants, |
- int width) { |
+void I422ToABGRRow_SSSE3(const uint8* y_buf, |
+ const uint8* u_buf, |
+ const uint8* v_buf, |
+ uint8* dst_abgr, |
+ struct YuvConstants* yuvconstants, |
+ int width) { |
__asm { |
push esi |
push edi |
@@ -2858,31 +2837,34 @@ void I422ToRGBARow_SSSE3(const uint8* y_buf, |
const uint8* u_buf, |
const uint8* v_buf, |
uint8* dst_rgba, |
+ struct YuvConstants* yuvconstants, |
int width) { |
__asm { |
push esi |
push edi |
- mov eax, [esp + 8 + 4] // Y |
- mov esi, [esp + 8 + 8] // U |
- mov edi, [esp + 8 + 12] // V |
- mov edx, [esp + 8 + 16] // rgba |
- mov ecx, [esp + 8 + 20] // width |
+ push ebp |
+ mov eax, [esp + 12 + 4] // Y |
+ mov esi, [esp + 12 + 8] // U |
+ mov edi, [esp + 12 + 12] // V |
+ mov edx, [esp + 12 + 16] // argb |
+ mov ebp, [esp + 12 + 20] // YuvConstants |
+ mov ecx, [esp + 12 + 24] // width |
sub edi, esi |
convertloop: |
READYUV422 |
- YUVTORGB(kYuvConstants) |
+ YUVTORGB(ebp) |
STORERGBA |
sub ecx, 8 |
jg convertloop |
+ pop ebp |
pop edi |
pop esi |
ret |
} |
} |
- |
#endif // HAS_I422TOARGBROW_SSSE3 |
#ifdef HAS_I400TOARGBROW_SSE2 |