mirror of
https://chromium.googlesource.com/libyuv/libyuv
synced 2025-12-07 01:06:46 +08:00
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 .
This commit is contained in:
parent
c39509c8e5
commit
0e554b18fe
@ -206,15 +206,19 @@ extern "C" {
|
|||||||
// https://code.google.com/p/libyuv/issues/detail?id=517
|
// https://code.google.com/p/libyuv/issues/detail?id=517
|
||||||
#define HAS_I422ALPHATOARGBROW_AVX2
|
#define HAS_I422ALPHATOARGBROW_AVX2
|
||||||
#endif
|
#endif
|
||||||
#define HAS_I444TOARGBROW_AVX2
|
#define HAS_I422TOARGB1555ROW_AVX2
|
||||||
|
#define HAS_I422TOARGB4444ROW_AVX2
|
||||||
#define HAS_I422TOARGBROW_AVX2
|
#define HAS_I422TOARGBROW_AVX2
|
||||||
#define HAS_I422TORGB24ROW_AVX2
|
#define HAS_I422TORGB24ROW_AVX2
|
||||||
|
#define HAS_I422TORGB565ROW_AVX2
|
||||||
#define HAS_I422TORGBAROW_AVX2
|
#define HAS_I422TORGBAROW_AVX2
|
||||||
|
#define HAS_I444TOARGBROW_AVX2
|
||||||
#define HAS_INTERPOLATEROW_AVX2
|
#define HAS_INTERPOLATEROW_AVX2
|
||||||
#define HAS_J422TOARGBROW_AVX2
|
#define HAS_J422TOARGBROW_AVX2
|
||||||
#define HAS_MERGEUVROW_AVX2
|
#define HAS_MERGEUVROW_AVX2
|
||||||
#define HAS_MIRRORROW_AVX2
|
#define HAS_MIRRORROW_AVX2
|
||||||
#define HAS_NV12TOARGBROW_AVX2
|
#define HAS_NV12TOARGBROW_AVX2
|
||||||
|
#define HAS_NV12TORGB565ROW_AVX2
|
||||||
#define HAS_NV21TOARGBROW_AVX2
|
#define HAS_NV21TOARGBROW_AVX2
|
||||||
#define HAS_SPLITUVROW_AVX2
|
#define HAS_SPLITUVROW_AVX2
|
||||||
#define HAS_UYVYTOARGBROW_AVX2
|
#define HAS_UYVYTOARGBROW_AVX2
|
||||||
@ -225,9 +229,6 @@ extern "C" {
|
|||||||
#define HAS_YUY2TOUV422ROW_AVX2
|
#define HAS_YUY2TOUV422ROW_AVX2
|
||||||
#define HAS_YUY2TOUVROW_AVX2
|
#define HAS_YUY2TOUVROW_AVX2
|
||||||
#define HAS_YUY2TOYROW_AVX2
|
#define HAS_YUY2TOYROW_AVX2
|
||||||
#define HAS_I422TOARGB1555ROW_AVX2
|
|
||||||
#define HAS_I422TOARGB4444ROW_AVX2
|
|
||||||
#define HAS_I422TORGB565ROW_AVX2
|
|
||||||
|
|
||||||
// Effects:
|
// Effects:
|
||||||
#define HAS_ARGBADDROW_AVX2
|
#define HAS_ARGBADDROW_AVX2
|
||||||
@ -249,7 +250,6 @@ extern "C" {
|
|||||||
#define HAS_ARGBTORGB565ROW_AVX2
|
#define HAS_ARGBTORGB565ROW_AVX2
|
||||||
#define HAS_I411TOARGBROW_AVX2
|
#define HAS_I411TOARGBROW_AVX2
|
||||||
#define HAS_J400TOARGBROW_AVX2
|
#define HAS_J400TOARGBROW_AVX2
|
||||||
#define HAS_NV12TORGB565ROW_AVX2
|
|
||||||
#define HAS_RGB565TOARGBROW_AVX2
|
#define HAS_RGB565TOARGBROW_AVX2
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@ -2595,7 +2595,11 @@ void NV12ToRGB565Row_AVX2(const uint8* src_y,
|
|||||||
while (width > 0) {
|
while (width > 0) {
|
||||||
int twidth = width > MAXTWIDTH ? MAXTWIDTH : width;
|
int twidth = width > MAXTWIDTH ? MAXTWIDTH : width;
|
||||||
NV12ToARGBRow_AVX2(src_y, src_uv, row, yuvconstants, twidth);
|
NV12ToARGBRow_AVX2(src_y, src_uv, row, yuvconstants, twidth);
|
||||||
|
#if defined(HAS_ARGBTORGB565ROW_AVX2)
|
||||||
ARGBToRGB565Row_AVX2(row, dst_rgb565, twidth);
|
ARGBToRGB565Row_AVX2(row, dst_rgb565, twidth);
|
||||||
|
#else
|
||||||
|
ARGBToRGB565Row_SSE2(row, dst_rgb565, twidth);
|
||||||
|
#endif
|
||||||
src_y += twidth;
|
src_y += twidth;
|
||||||
src_uv += twidth;
|
src_uv += twidth;
|
||||||
dst_rgb565 += twidth * 2;
|
dst_rgb565 += twidth * 2;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user