From 0e554b18fe2a60f2a384d0dc86154b69bb7bc1b7 Mon Sep 17 00:00:00 2001 From: Frank Barchard Date: Wed, 10 Feb 2016 11:13:41 -0800 Subject: [PATCH] port NV12ToRGB565Row_AVX2 to gcc NV12ToRGB565Row for Intel is implemented as a 2 step conversion: NV12ToARGBRow_SSSE3 and ARGBToRGB565Row_SSE2 NV12ToARGBRow has an AVX2 version, so this CL implements NV12ToRGB565Row_AVX2 with call to NV12ToARGBRow_AVX2 and ARGBToRGB565Row_SSE2. R=harryjin@google.com BUG=libyuv:554 Review URL: https://codereview.chromium.org/1687953002 . --- include/libyuv/row.h | 10 +++++----- source/row_common.cc | 4 ++++ 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/include/libyuv/row.h b/include/libyuv/row.h index 4ae216dd4..64190dd96 100644 --- a/include/libyuv/row.h +++ b/include/libyuv/row.h @@ -206,15 +206,19 @@ extern "C" { // https://code.google.com/p/libyuv/issues/detail?id=517 #define HAS_I422ALPHATOARGBROW_AVX2 #endif -#define HAS_I444TOARGBROW_AVX2 +#define HAS_I422TOARGB1555ROW_AVX2 +#define HAS_I422TOARGB4444ROW_AVX2 #define HAS_I422TOARGBROW_AVX2 #define HAS_I422TORGB24ROW_AVX2 +#define HAS_I422TORGB565ROW_AVX2 #define HAS_I422TORGBAROW_AVX2 +#define HAS_I444TOARGBROW_AVX2 #define HAS_INTERPOLATEROW_AVX2 #define HAS_J422TOARGBROW_AVX2 #define HAS_MERGEUVROW_AVX2 #define HAS_MIRRORROW_AVX2 #define HAS_NV12TOARGBROW_AVX2 +#define HAS_NV12TORGB565ROW_AVX2 #define HAS_NV21TOARGBROW_AVX2 #define HAS_SPLITUVROW_AVX2 #define HAS_UYVYTOARGBROW_AVX2 @@ -225,9 +229,6 @@ extern "C" { #define HAS_YUY2TOUV422ROW_AVX2 #define HAS_YUY2TOUVROW_AVX2 #define HAS_YUY2TOYROW_AVX2 -#define HAS_I422TOARGB1555ROW_AVX2 -#define HAS_I422TOARGB4444ROW_AVX2 -#define HAS_I422TORGB565ROW_AVX2 // Effects: #define HAS_ARGBADDROW_AVX2 @@ -249,7 +250,6 @@ extern "C" { #define HAS_ARGBTORGB565ROW_AVX2 #define HAS_I411TOARGBROW_AVX2 #define HAS_J400TOARGBROW_AVX2 -#define HAS_NV12TORGB565ROW_AVX2 #define HAS_RGB565TOARGBROW_AVX2 #endif diff --git a/source/row_common.cc b/source/row_common.cc index e5a095325..2b80d074c 100644 --- a/source/row_common.cc +++ b/source/row_common.cc @@ -2595,7 +2595,11 @@ void NV12ToRGB565Row_AVX2(const uint8* src_y, while (width > 0) { int twidth = width > MAXTWIDTH ? MAXTWIDTH : width; NV12ToARGBRow_AVX2(src_y, src_uv, row, yuvconstants, twidth); +#if defined(HAS_ARGBTORGB565ROW_AVX2) ARGBToRGB565Row_AVX2(row, dst_rgb565, twidth); +#else + ARGBToRGB565Row_SSE2(row, dst_rgb565, twidth); +#endif src_y += twidth; src_uv += twidth; dst_rgb565 += twidth * 2;