diff --git a/README.chromium b/README.chromium index 90ff5c2b9..7ec2f908c 100644 --- a/README.chromium +++ b/README.chromium @@ -1,6 +1,6 @@ Name: libyuv URL: http://code.google.com/p/libyuv/ -Version: 1130 +Version: 1132 License: BSD License File: LICENSE diff --git a/include/libyuv/version.h b/include/libyuv/version.h index 2e34fc805..736897ca2 100644 --- a/include/libyuv/version.h +++ b/include/libyuv/version.h @@ -11,6 +11,6 @@ #ifndef INCLUDE_LIBYUV_VERSION_H_ // NOLINT #define INCLUDE_LIBYUV_VERSION_H_ -#define LIBYUV_VERSION 1130 +#define LIBYUV_VERSION 1132 #endif // INCLUDE_LIBYUV_VERSION_H_ NOLINT diff --git a/source/row_win.cc b/source/row_win.cc index d0a10590c..69da937fe 100644 --- a/source/row_win.cc +++ b/source/row_win.cc @@ -1496,9 +1496,9 @@ void RGBAToUVRow_SSSE3(const uint8* src_argb0, int src_stride_argb, ret } } - #endif // HAS_ARGBTOYROW_SSSE3 + #ifdef HAS_I422TOARGBROW_AVX2 static const lvec8 kUVToB_AVX = { @@ -1557,12 +1557,12 @@ void I422ToARGBRow_AVX2(const uint8* y_buf, vpunpcklbw ymm0, ymm0, ymm1 // UV vpermq ymm0, ymm0, 0xd8 vpunpcklwd ymm0, ymm0, ymm0 // UVUV - vpmaddubsw ymm2, ymm0, kUVToB_AVX // scale B UV + vpmaddubsw ymm2, ymm0, kUVToR_AVX // scale R UV vpmaddubsw ymm1, ymm0, kUVToG_AVX // scale G UV - vpmaddubsw ymm0, ymm0, kUVToR_AVX // scale R UV - vpsubw ymm2, ymm2, kUVBiasB_AVX // unbias back to signed + vpmaddubsw ymm0, ymm0, kUVToB_AVX // scale B UV + vpsubw ymm2, ymm2, kUVBiasR_AVX // unbias back to signed vpsubw ymm1, ymm1, kUVBiasG_AVX - vpsubw ymm0, ymm0, kUVBiasR_AVX + vpsubw ymm0, ymm0, kUVBiasB_AVX // Step 2: Find Y contribution to 16 R,G,B values vmovdqu xmm3, [eax] // NOLINT @@ -1571,25 +1571,25 @@ void I422ToARGBRow_AVX2(const uint8* y_buf, vpunpcklbw ymm3, ymm3, ymm4 vpsubsw ymm3, ymm3, kYSub16_AVX vpmullw ymm3, ymm3, kYToRgb_AVX - vpaddsw ymm2, ymm2, ymm3 // B += Y + vpaddsw ymm0, ymm0, ymm3 // B += Y vpaddsw ymm1, ymm1, ymm3 // G += Y - vpaddsw ymm0, ymm0, ymm3 // R += Y - vpsraw ymm2, ymm2, 6 - vpsraw ymm1, ymm1, 6 + vpaddsw ymm2, ymm2, ymm3 // R += Y vpsraw ymm0, ymm0, 6 - vpackuswb ymm2, ymm2, ymm2 // B + vpsraw ymm1, ymm1, 6 + vpsraw ymm2, ymm2, 6 + vpackuswb ymm0, ymm0, ymm0 // B vpackuswb ymm1, ymm1, ymm1 // G - vpackuswb ymm0, ymm0, ymm0 // R + vpackuswb ymm2, ymm2, ymm2 // R // Step 3: Weave into ARGB - vpunpcklbw ymm2, ymm2, ymm1 // BG - vpermq ymm2, ymm2, 0xd8 - vpunpcklbw ymm0, ymm0, ymm5 // RA + vpunpcklbw ymm0, ymm0, ymm1 // BG vpermq ymm0, ymm0, 0xd8 - vpunpcklwd ymm1, ymm2, ymm0 // BGRA first 8 pixels - vpunpckhwd ymm2, ymm2, ymm0 // BGRA next 8 pixels + vpunpcklbw ymm2, ymm2, ymm5 // RA + vpermq ymm2, ymm2, 0xd8 + vpunpcklwd ymm1, ymm0, ymm2 // BGRA first 8 pixels + vpunpckhwd ymm0, ymm0, ymm2 // BGRA next 8 pixels vmovdqu [edx], ymm1 - vmovdqu [edx + 32], ymm2 + vmovdqu [edx + 32], ymm0 lea edx, [edx + 64] sub ecx, 16 jg convertloop @@ -1630,12 +1630,12 @@ void I422ToBGRARow_AVX2(const uint8* y_buf, vpunpcklbw ymm0, ymm0, ymm1 // UV vpermq ymm0, ymm0, 0xd8 vpunpcklwd ymm0, ymm0, ymm0 // UVUV - vpmaddubsw ymm2, ymm0, kUVToB_AVX // scale B UV + vpmaddubsw ymm2, ymm0, kUVToR_AVX // scale R UV vpmaddubsw ymm1, ymm0, kUVToG_AVX // scale G UV - vpmaddubsw ymm0, ymm0, kUVToR_AVX // scale R UV - vpsubw ymm2, ymm2, kUVBiasB_AVX // unbias back to signed + vpmaddubsw ymm0, ymm0, kUVToB_AVX // scale B UV + vpsubw ymm2, ymm2, kUVBiasR_AVX // unbias back to signed vpsubw ymm1, ymm1, kUVBiasG_AVX - vpsubw ymm0, ymm0, kUVBiasR_AVX + vpsubw ymm0, ymm0, kUVBiasB_AVX // Step 2: Find Y contribution to 16 R,G,B values vmovdqu xmm3, [eax] // NOLINT @@ -1644,26 +1644,25 @@ void I422ToBGRARow_AVX2(const uint8* y_buf, vpunpcklbw ymm3, ymm3, ymm4 vpsubsw ymm3, ymm3, kYSub16_AVX vpmullw ymm3, ymm3, kYToRgb_AVX - vpaddsw ymm2, ymm2, ymm3 // B += Y + vpaddsw ymm0, ymm0, ymm3 // B += Y vpaddsw ymm1, ymm1, ymm3 // G += Y - vpaddsw ymm0, ymm0, ymm3 // R += Y - vpsraw ymm2, ymm2, 6 - vpsraw ymm1, ymm1, 6 + vpaddsw ymm2, ymm2, ymm3 // R += Y vpsraw ymm0, ymm0, 6 -// TODO(fbarchard): Switch register order to match SSSE3. - vpackuswb ymm2, ymm2, ymm2 // B + vpsraw ymm1, ymm1, 6 + vpsraw ymm2, ymm2, 6 + vpackuswb ymm0, ymm0, ymm0 // B vpackuswb ymm1, ymm1, ymm1 // G - vpackuswb ymm0, ymm0, ymm0 // R + vpackuswb ymm2, ymm2, ymm2 // R // Step 3: Weave into BGRA - vpunpcklbw ymm1, ymm1, ymm2 // GB + vpunpcklbw ymm1, ymm1, ymm0 // GB vpermq ymm1, ymm1, 0xd8 - vpunpcklbw ymm0, ymm5, ymm0 // AR - vpermq ymm0, ymm0, 0xd8 - vpunpcklwd ymm2, ymm0, ymm1 // ARGB first 8 pixels - vpunpckhwd ymm0, ymm0, ymm1 // ARGB next 8 pixels - vmovdqu [edx], ymm2 - vmovdqu [edx + 32], ymm0 + vpunpcklbw ymm2, ymm5, ymm2 // AR + vpermq ymm2, ymm2, 0xd8 + vpunpcklwd ymm0, ymm2, ymm1 // ARGB first 8 pixels + vpunpckhwd ymm2, ymm2, ymm1 // ARGB next 8 pixels + vmovdqu [edx], ymm0 + vmovdqu [edx + 32], ymm2 lea edx, [edx + 64] sub ecx, 16 jg convertloop @@ -1677,7 +1676,6 @@ void I422ToBGRARow_AVX2(const uint8* y_buf, #endif // HAS_I422TOARGBROW_AVX2 #ifdef HAS_I422TOARGBROW_SSSE3 - // TODO(fbarchard): Read that does half size on Y and treats 420 as 444. // Read 8 UV from 444.