mirror of
https://chromium.googlesource.com/libyuv/libyuv
synced 2026-10-28 18:07:12 +08:00
Remove LIBYUV_UNBIASED_DATA and make unbiased AR30 rounding default
Remove the LIBYUV_UNBIASED_DATA macro and make the unbiased AR30 rounding bias adjustment (+24 / -24) default across all x86, ARM, and C implementations. Bug: 551985141 Test: libyuv_unittest --gtest_filter=*AR30*:*AB30* Change-Id: I4a9b964ceef1d08580789cbba8c94846053c9d68 TAG=agy CONV=15289919-ad91-40b2-9ed5-30c3117a5ba4 Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/8305516 Commit-Queue: Wan-Teh Chang <wtc@google.com> Reviewed-by: Wan-Teh Chang <wtc@google.com>
This commit is contained in:
parent
bcb7507cb4
commit
cb6c9d6fd9
@ -52,7 +52,6 @@ PLATFORM_COPTS = select({
|
|||||||
"//conditions:default": [],
|
"//conditions:default": [],
|
||||||
}) + [
|
}) + [
|
||||||
"-DLIBYUV_DISABLE_SME",
|
"-DLIBYUV_DISABLE_SME",
|
||||||
"-DLIBYUV_UNBIASED_DATA",
|
|
||||||
"-DLIBYUV_USE_ABSL_FLAGS",
|
"-DLIBYUV_USE_ABSL_FLAGS",
|
||||||
"-DGOOGLE_COMMANDLINEFLAGS_FULL_API",
|
"-DGOOGLE_COMMANDLINEFLAGS_FULL_API",
|
||||||
]
|
]
|
||||||
|
|||||||
1
BUILD.gn
1
BUILD.gn
@ -25,7 +25,6 @@ config("libyuv_config") {
|
|||||||
|
|
||||||
# Define CHROMIUM to tell cpu_id to avoid sandbox unsafe system calls.
|
# Define CHROMIUM to tell cpu_id to avoid sandbox unsafe system calls.
|
||||||
defines = [ "CHROMIUM" ]
|
defines = [ "CHROMIUM" ]
|
||||||
defines += [ "LIBYUV_UNBIASED_DATA" ]
|
|
||||||
if (libyuv_enable_rowwin) {
|
if (libyuv_enable_rowwin) {
|
||||||
defines += [ "LIBYUV_ENABLE_ROWWIN=1" ]
|
defines += [ "LIBYUV_ENABLE_ROWWIN=1" ]
|
||||||
}
|
}
|
||||||
|
|||||||
@ -66,8 +66,6 @@ list ( SORT ly_unittest_sources )
|
|||||||
|
|
||||||
include_directories( BEFORE ${ly_inc_dir} )
|
include_directories( BEFORE ${ly_inc_dir} )
|
||||||
|
|
||||||
add_definitions(-DLIBYUV_UNBIASED_DATA)
|
|
||||||
|
|
||||||
if(MSVC)
|
if(MSVC)
|
||||||
add_definitions ( -D_CRT_SECURE_NO_WARNINGS )
|
add_definitions ( -D_CRT_SECURE_NO_WARNINGS )
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
@ -72,7 +72,6 @@ Additional commonly used compiler options can be passed to Bazel via `--copt`:
|
|||||||
|
|
||||||
bazel build -c opt --config=android_arm64 \
|
bazel build -c opt --config=android_arm64 \
|
||||||
--copt=-DLIBYUV_UNLIMITED_DATA \
|
--copt=-DLIBYUV_UNLIMITED_DATA \
|
||||||
--copt=-DLIBYUV_UNBIASED_DATA \
|
|
||||||
--copt=-DENABLE_ROW_TESTS \
|
--copt=-DENABLE_ROW_TESTS \
|
||||||
//:libyuv_test
|
//:libyuv_test
|
||||||
|
|
||||||
|
|||||||
@ -39,15 +39,11 @@ extern "C" {
|
|||||||
"ld1rh {z26.h}, p0/z, [%[kRGBCoeffBias], #4] \n" \
|
"ld1rh {z26.h}, p0/z, [%[kRGBCoeffBias], #4] \n" \
|
||||||
"ld1rh {z27.h}, p0/z, [%[kRGBCoeffBias], #6] \n"
|
"ld1rh {z27.h}, p0/z, [%[kRGBCoeffBias], #6] \n"
|
||||||
|
|
||||||
#if defined(LIBYUV_UNBIASED_DATA)
|
|
||||||
#define YUVTORGB_SVE_SETUP_AR30 \
|
#define YUVTORGB_SVE_SETUP_AR30 \
|
||||||
YUVTORGB_SVE_SETUP \
|
YUVTORGB_SVE_SETUP \
|
||||||
"add z25.h, z25.h, #24 \n" \
|
"add z25.h, z25.h, #24 \n" \
|
||||||
"sub z26.h, z26.h, #24 \n" \
|
"sub z26.h, z26.h, #24 \n" \
|
||||||
"add z27.h, z27.h, #24 \n"
|
"add z27.h, z27.h, #24 \n"
|
||||||
#else
|
|
||||||
#define YUVTORGB_SVE_SETUP_AR30 YUVTORGB_SVE_SETUP
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define READYUV444_SVE \
|
#define READYUV444_SVE \
|
||||||
"ld1b {z0.h}, p1/z, [%[src_y]] \n" \
|
"ld1b {z0.h}, p1/z, [%[src_y]] \n" \
|
||||||
|
|||||||
@ -11,6 +11,6 @@
|
|||||||
#ifndef INCLUDE_LIBYUV_VERSION_H_
|
#ifndef INCLUDE_LIBYUV_VERSION_H_
|
||||||
#define INCLUDE_LIBYUV_VERSION_H_
|
#define INCLUDE_LIBYUV_VERSION_H_
|
||||||
|
|
||||||
#define LIBYUV_VERSION 1965
|
#define LIBYUV_VERSION 1966
|
||||||
|
|
||||||
#endif // INCLUDE_LIBYUV_VERSION_H_
|
#endif // INCLUDE_LIBYUV_VERSION_H_
|
||||||
|
|||||||
@ -37,9 +37,6 @@ extern "C" {
|
|||||||
// LIBYUV_UNLIMITED_BT709
|
// LIBYUV_UNLIMITED_BT709
|
||||||
// LIBYUV_UNLIMITED_BT2020
|
// LIBYUV_UNLIMITED_BT2020
|
||||||
|
|
||||||
// This macro fixes the AR30 rounding bias offset (+24 / -24) for 10-bit YUV to RGB conversions:
|
|
||||||
// LIBYUV_UNBIASED_DATA
|
|
||||||
|
|
||||||
// llvm x86 is poor at ternary operator, so use branchless min/max.
|
// llvm x86 is poor at ternary operator, so use branchless min/max.
|
||||||
|
|
||||||
#define USE_BRANCHLESS 1
|
#define USE_BRANCHLESS 1
|
||||||
@ -1788,7 +1785,6 @@ MAKEYUVCONSTANTS(V2020, YG, YB, UB, UG, VG, VR)
|
|||||||
int r16 = y1 + (vi * vr)
|
int r16 = y1 + (vi * vr)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(LIBYUV_UNBIASED_DATA)
|
|
||||||
#if defined(__aarch64__) || defined(__arm__) || defined(__riscv)
|
#if defined(__aarch64__) || defined(__arm__) || defined(__riscv)
|
||||||
#define LOAD_YUV_CONSTANTS_AR30 \
|
#define LOAD_YUV_CONSTANTS_AR30 \
|
||||||
int ub = yuvconstants->kUVCoeff[0]; \
|
int ub = yuvconstants->kUVCoeff[0]; \
|
||||||
@ -1808,9 +1804,6 @@ MAKEYUVCONSTANTS(V2020, YG, YB, UB, UG, VG, VR)
|
|||||||
int yg = yuvconstants->kYToRgb[0]; \
|
int yg = yuvconstants->kYToRgb[0]; \
|
||||||
int yb = yuvconstants->kYBiasToRgb[0] - 24
|
int yb = yuvconstants->kYBiasToRgb[0] - 24
|
||||||
#endif
|
#endif
|
||||||
#else
|
|
||||||
#define LOAD_YUV_CONSTANTS_AR30 LOAD_YUV_CONSTANTS
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// C reference code that mimics the YUV assembly.
|
// C reference code that mimics the YUV assembly.
|
||||||
// Reads 8 bit YUV and leaves result as 16 bit.
|
// Reads 8 bit YUV and leaves result as 16 bit.
|
||||||
|
|||||||
@ -2639,17 +2639,12 @@ void ARGBToUVMatrixRow_AVX512BW(const uint8_t* src_argb,
|
|||||||
"movdqa 96(%[yuvconstants]),%%xmm11 \n" \
|
"movdqa 96(%[yuvconstants]),%%xmm11 \n" \
|
||||||
"movdqa 128(%[yuvconstants]),%%xmm12 \n"
|
"movdqa 128(%[yuvconstants]),%%xmm12 \n"
|
||||||
|
|
||||||
#if defined(LIBYUV_UNBIASED_DATA)
|
|
||||||
#define YUVTORGB_SETUP_AR30(yuvconstants) \
|
#define YUVTORGB_SETUP_AR30(yuvconstants) \
|
||||||
YUVTORGB_SETUP(yuvconstants) \
|
YUVTORGB_SETUP(yuvconstants) \
|
||||||
"pcmpeqb %%xmm0,%%xmm0 \n" \
|
"pcmpeqb %%xmm0,%%xmm0 \n" \
|
||||||
"psrlw $14,%%xmm0 \n" \
|
"psrlw $14,%%xmm0 \n" \
|
||||||
"psllw $3,%%xmm0 \n" \
|
"psllw $3,%%xmm0 \n" \
|
||||||
"psubw %%xmm0,%%xmm12 \n"
|
"psubw %%xmm0,%%xmm12 \n"
|
||||||
#else
|
|
||||||
#define YUVTORGB_SETUP_AR30(yuvconstants) \
|
|
||||||
YUVTORGB_SETUP(yuvconstants)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Convert 8 pixels: 8 UV and 8 Y
|
// Convert 8 pixels: 8 UV and 8 Y
|
||||||
#define YUVTORGB16(yuvconstants) \
|
#define YUVTORGB16(yuvconstants) \
|
||||||
@ -3722,7 +3717,6 @@ void OMITFP I422ToRGBARow_SSSE3(const uint8_t* y_buf,
|
|||||||
"vmovups (%[dquadsplitperm]),%%zmm17 \n" \
|
"vmovups (%[dquadsplitperm]),%%zmm17 \n" \
|
||||||
"vmovups (%[unperm]),%%zmm18 \n"
|
"vmovups (%[unperm]),%%zmm18 \n"
|
||||||
|
|
||||||
#if defined(LIBYUV_UNBIASED_DATA)
|
|
||||||
#define YUVTORGB_SETUP_AR30_AVX2(yuvconstants) \
|
#define YUVTORGB_SETUP_AR30_AVX2(yuvconstants) \
|
||||||
YUVTORGB_SETUP_AVX2(yuvconstants) \
|
YUVTORGB_SETUP_AVX2(yuvconstants) \
|
||||||
"vpcmpeqb %%ymm0,%%ymm0,%%ymm0 \n" \
|
"vpcmpeqb %%ymm0,%%ymm0,%%ymm0 \n" \
|
||||||
@ -3736,12 +3730,6 @@ void OMITFP I422ToRGBARow_SSSE3(const uint8_t* y_buf,
|
|||||||
"vpsrlw $14,%%zmm0,%%zmm0 \n" \
|
"vpsrlw $14,%%zmm0,%%zmm0 \n" \
|
||||||
"vpsllw $3,%%zmm0,%%zmm0 \n" \
|
"vpsllw $3,%%zmm0,%%zmm0 \n" \
|
||||||
"vpsubw %%zmm0,%%zmm12,%%zmm12 \n"
|
"vpsubw %%zmm0,%%zmm12,%%zmm12 \n"
|
||||||
#else
|
|
||||||
#define YUVTORGB_SETUP_AR30_AVX2(yuvconstants) \
|
|
||||||
YUVTORGB_SETUP_AVX2(yuvconstants)
|
|
||||||
#define YUVTORGB_SETUP_AR30_AVX512BW(yuvconstants) \
|
|
||||||
YUVTORGB_SETUP_AVX512BW(yuvconstants)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define YUVTORGB16_AVX2(yuvconstants) \
|
#define YUVTORGB16_AVX2(yuvconstants) \
|
||||||
"vpsubb %%ymm13,%%ymm3,%%ymm3 \n" \
|
"vpsubb %%ymm13,%%ymm3,%%ymm3 \n" \
|
||||||
|
|||||||
@ -149,16 +149,12 @@ static const uvec8 kNV21InterleavedTable = {1, 1, 5, 5, 9, 9, 13, 13,
|
|||||||
"ld4r {v28.16b, v29.16b, v30.16b, v31.16b}, [%[kUVCoeff]] \n" \
|
"ld4r {v28.16b, v29.16b, v30.16b, v31.16b}, [%[kUVCoeff]] \n" \
|
||||||
"ld4r {v24.8h, v25.8h, v26.8h, v27.8h}, [%[kRGBCoeffBias]] \n"
|
"ld4r {v24.8h, v25.8h, v26.8h, v27.8h}, [%[kRGBCoeffBias]] \n"
|
||||||
|
|
||||||
#if defined(LIBYUV_UNBIASED_DATA)
|
|
||||||
#define YUVTORGB_SETUP_AR30 \
|
#define YUVTORGB_SETUP_AR30 \
|
||||||
YUVTORGB_SETUP \
|
YUVTORGB_SETUP \
|
||||||
"movi v2.8h, #24 \n" \
|
"movi v2.8h, #24 \n" \
|
||||||
"add v25.8h, v25.8h, v2.8h \n" \
|
"add v25.8h, v25.8h, v2.8h \n" \
|
||||||
"sub v26.8h, v26.8h, v2.8h \n" \
|
"sub v26.8h, v26.8h, v2.8h \n" \
|
||||||
"add v27.8h, v27.8h, v2.8h \n"
|
"add v27.8h, v27.8h, v2.8h \n"
|
||||||
#else
|
|
||||||
#define YUVTORGB_SETUP_AR30 YUVTORGB_SETUP
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// v16.8h: B
|
// v16.8h: B
|
||||||
// v17.8h: G
|
// v17.8h: G
|
||||||
|
|||||||
@ -1516,13 +1516,9 @@ void I422ToAR30Row_AVX2(const uint8_t* src_y,
|
|||||||
__m256i ymm_kUVToG = _mm256_loadu_si256((const __m256i*)yuvconstants->kUVToG);
|
__m256i ymm_kUVToG = _mm256_loadu_si256((const __m256i*)yuvconstants->kUVToG);
|
||||||
__m256i ymm_kUVToR = _mm256_loadu_si256((const __m256i*)yuvconstants->kUVToR);
|
__m256i ymm_kUVToR = _mm256_loadu_si256((const __m256i*)yuvconstants->kUVToR);
|
||||||
__m256i ymm_kYToRgb = _mm256_loadu_si256((const __m256i*)yuvconstants->kYToRgb);
|
__m256i ymm_kYToRgb = _mm256_loadu_si256((const __m256i*)yuvconstants->kYToRgb);
|
||||||
#if defined(LIBYUV_UNBIASED_DATA)
|
|
||||||
__m256i ymm_kYBiasToRgb = _mm256_sub_epi16(
|
__m256i ymm_kYBiasToRgb = _mm256_sub_epi16(
|
||||||
_mm256_loadu_si256((const __m256i*)yuvconstants->kYBiasToRgb),
|
_mm256_loadu_si256((const __m256i*)yuvconstants->kYBiasToRgb),
|
||||||
_mm256_set1_epi16(24));
|
_mm256_set1_epi16(24));
|
||||||
#else
|
|
||||||
__m256i ymm_kYBiasToRgb = _mm256_loadu_si256((const __m256i*)yuvconstants->kYBiasToRgb);
|
|
||||||
#endif
|
|
||||||
__m256i ymm_128 = _mm256_set1_epi8((char)0x80);
|
__m256i ymm_128 = _mm256_set1_epi8((char)0x80);
|
||||||
__m256i ymm_3ff0 = _mm256_set1_epi16((short)0x3ff0);
|
__m256i ymm_3ff0 = _mm256_set1_epi16((short)0x3ff0);
|
||||||
__m256i ymm_c000 = _mm256_set1_epi16((short)0xc000);
|
__m256i ymm_c000 = _mm256_set1_epi16((short)0xc000);
|
||||||
@ -2072,13 +2068,9 @@ void I422ToAR30Row_AVX512BW(const uint8_t* src_y,
|
|||||||
__m512i zmm_kUVToG = _mm512_broadcast_i32x4(_mm_loadu_si128((const __m128i*)yuvconstants->kUVToG));
|
__m512i zmm_kUVToG = _mm512_broadcast_i32x4(_mm_loadu_si128((const __m128i*)yuvconstants->kUVToG));
|
||||||
__m512i zmm_kUVToR = _mm512_broadcast_i32x4(_mm_loadu_si128((const __m128i*)yuvconstants->kUVToR));
|
__m512i zmm_kUVToR = _mm512_broadcast_i32x4(_mm_loadu_si128((const __m128i*)yuvconstants->kUVToR));
|
||||||
__m512i zmm_kYToRgb = _mm512_broadcast_i32x4(_mm_loadu_si128((const __m128i*)yuvconstants->kYToRgb));
|
__m512i zmm_kYToRgb = _mm512_broadcast_i32x4(_mm_loadu_si128((const __m128i*)yuvconstants->kYToRgb));
|
||||||
#if defined(LIBYUV_UNBIASED_DATA)
|
|
||||||
__m512i zmm_kYBiasToRgb = _mm512_sub_epi16(
|
__m512i zmm_kYBiasToRgb = _mm512_sub_epi16(
|
||||||
_mm512_broadcast_i32x4(_mm_loadu_si128((const __m128i*)yuvconstants->kYBiasToRgb)),
|
_mm512_broadcast_i32x4(_mm_loadu_si128((const __m128i*)yuvconstants->kYBiasToRgb)),
|
||||||
_mm512_set1_epi16(24));
|
_mm512_set1_epi16(24));
|
||||||
#else
|
|
||||||
__m512i zmm_kYBiasToRgb = _mm512_broadcast_i32x4(_mm_loadu_si128((const __m128i*)yuvconstants->kYBiasToRgb));
|
|
||||||
#endif
|
|
||||||
__m512i zmm_128 = _mm512_set1_epi8((char)0x80);
|
__m512i zmm_128 = _mm512_set1_epi8((char)0x80);
|
||||||
__m512i zmm_3ff0 = _mm512_set1_epi16((short)0x3ff0);
|
__m512i zmm_3ff0 = _mm512_set1_epi16((short)0x3ff0);
|
||||||
__m512i zmm_fc00 = _mm512_set1_epi16((short)0xfc00);
|
__m512i zmm_fc00 = _mm512_set1_epi16((short)0xfc00);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user