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:
Frank Barchard 2026-08-27 16:46:43 -07:00 committed by libyuv-scoped@luci-project-accounts.iam.gserviceaccount.com
parent bcb7507cb4
commit cb6c9d6fd9
10 changed files with 1 additions and 41 deletions

View File

@ -52,7 +52,6 @@ PLATFORM_COPTS = select({
"//conditions:default": [],
}) + [
"-DLIBYUV_DISABLE_SME",
"-DLIBYUV_UNBIASED_DATA",
"-DLIBYUV_USE_ABSL_FLAGS",
"-DGOOGLE_COMMANDLINEFLAGS_FULL_API",
]

View File

@ -25,7 +25,6 @@ config("libyuv_config") {
# Define CHROMIUM to tell cpu_id to avoid sandbox unsafe system calls.
defines = [ "CHROMIUM" ]
defines += [ "LIBYUV_UNBIASED_DATA" ]
if (libyuv_enable_rowwin) {
defines += [ "LIBYUV_ENABLE_ROWWIN=1" ]
}

View File

@ -66,8 +66,6 @@ list ( SORT ly_unittest_sources )
include_directories( BEFORE ${ly_inc_dir} )
add_definitions(-DLIBYUV_UNBIASED_DATA)
if(MSVC)
add_definitions ( -D_CRT_SECURE_NO_WARNINGS )
endif()

View File

@ -72,7 +72,6 @@ Additional commonly used compiler options can be passed to Bazel via `--copt`:
bazel build -c opt --config=android_arm64 \
--copt=-DLIBYUV_UNLIMITED_DATA \
--copt=-DLIBYUV_UNBIASED_DATA \
--copt=-DENABLE_ROW_TESTS \
//:libyuv_test

View File

@ -39,15 +39,11 @@ extern "C" {
"ld1rh {z26.h}, p0/z, [%[kRGBCoeffBias], #4] \n" \
"ld1rh {z27.h}, p0/z, [%[kRGBCoeffBias], #6] \n"
#if defined(LIBYUV_UNBIASED_DATA)
#define YUVTORGB_SVE_SETUP_AR30 \
YUVTORGB_SVE_SETUP \
"add z25.h, z25.h, #24 \n" \
"sub z26.h, z26.h, #24 \n" \
"add z27.h, z27.h, #24 \n"
#else
#define YUVTORGB_SVE_SETUP_AR30 YUVTORGB_SVE_SETUP
#endif
#define READYUV444_SVE \
"ld1b {z0.h}, p1/z, [%[src_y]] \n" \

View File

@ -11,6 +11,6 @@
#ifndef INCLUDE_LIBYUV_VERSION_H_
#define INCLUDE_LIBYUV_VERSION_H_
#define LIBYUV_VERSION 1965
#define LIBYUV_VERSION 1966
#endif // INCLUDE_LIBYUV_VERSION_H_

View File

@ -37,9 +37,6 @@ extern "C" {
// LIBYUV_UNLIMITED_BT709
// 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.
#define USE_BRANCHLESS 1
@ -1788,7 +1785,6 @@ MAKEYUVCONSTANTS(V2020, YG, YB, UB, UG, VG, VR)
int r16 = y1 + (vi * vr)
#endif
#if defined(LIBYUV_UNBIASED_DATA)
#if defined(__aarch64__) || defined(__arm__) || defined(__riscv)
#define LOAD_YUV_CONSTANTS_AR30 \
int ub = yuvconstants->kUVCoeff[0]; \
@ -1808,9 +1804,6 @@ MAKEYUVCONSTANTS(V2020, YG, YB, UB, UG, VG, VR)
int yg = yuvconstants->kYToRgb[0]; \
int yb = yuvconstants->kYBiasToRgb[0] - 24
#endif
#else
#define LOAD_YUV_CONSTANTS_AR30 LOAD_YUV_CONSTANTS
#endif
// C reference code that mimics the YUV assembly.
// Reads 8 bit YUV and leaves result as 16 bit.

View File

@ -2639,17 +2639,12 @@ void ARGBToUVMatrixRow_AVX512BW(const uint8_t* src_argb,
"movdqa 96(%[yuvconstants]),%%xmm11 \n" \
"movdqa 128(%[yuvconstants]),%%xmm12 \n"
#if defined(LIBYUV_UNBIASED_DATA)
#define YUVTORGB_SETUP_AR30(yuvconstants) \
YUVTORGB_SETUP(yuvconstants) \
"pcmpeqb %%xmm0,%%xmm0 \n" \
"psrlw $14,%%xmm0 \n" \
"psllw $3,%%xmm0 \n" \
"psubw %%xmm0,%%xmm12 \n"
#else
#define YUVTORGB_SETUP_AR30(yuvconstants) \
YUVTORGB_SETUP(yuvconstants)
#endif
// Convert 8 pixels: 8 UV and 8 Y
#define YUVTORGB16(yuvconstants) \
@ -3722,7 +3717,6 @@ void OMITFP I422ToRGBARow_SSSE3(const uint8_t* y_buf,
"vmovups (%[dquadsplitperm]),%%zmm17 \n" \
"vmovups (%[unperm]),%%zmm18 \n"
#if defined(LIBYUV_UNBIASED_DATA)
#define YUVTORGB_SETUP_AR30_AVX2(yuvconstants) \
YUVTORGB_SETUP_AVX2(yuvconstants) \
"vpcmpeqb %%ymm0,%%ymm0,%%ymm0 \n" \
@ -3736,12 +3730,6 @@ void OMITFP I422ToRGBARow_SSSE3(const uint8_t* y_buf,
"vpsrlw $14,%%zmm0,%%zmm0 \n" \
"vpsllw $3,%%zmm0,%%zmm0 \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) \
"vpsubb %%ymm13,%%ymm3,%%ymm3 \n" \

View File

@ -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 {v24.8h, v25.8h, v26.8h, v27.8h}, [%[kRGBCoeffBias]] \n"
#if defined(LIBYUV_UNBIASED_DATA)
#define YUVTORGB_SETUP_AR30 \
YUVTORGB_SETUP \
"movi v2.8h, #24 \n" \
"add v25.8h, v25.8h, v2.8h \n" \
"sub v26.8h, v26.8h, v2.8h \n" \
"add v27.8h, v27.8h, v2.8h \n"
#else
#define YUVTORGB_SETUP_AR30 YUVTORGB_SETUP
#endif
// v16.8h: B
// v17.8h: G

View File

@ -1516,13 +1516,9 @@ void I422ToAR30Row_AVX2(const uint8_t* src_y,
__m256i ymm_kUVToG = _mm256_loadu_si256((const __m256i*)yuvconstants->kUVToG);
__m256i ymm_kUVToR = _mm256_loadu_si256((const __m256i*)yuvconstants->kUVToR);
__m256i ymm_kYToRgb = _mm256_loadu_si256((const __m256i*)yuvconstants->kYToRgb);
#if defined(LIBYUV_UNBIASED_DATA)
__m256i ymm_kYBiasToRgb = _mm256_sub_epi16(
_mm256_loadu_si256((const __m256i*)yuvconstants->kYBiasToRgb),
_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_3ff0 = _mm256_set1_epi16((short)0x3ff0);
__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_kUVToR = _mm512_broadcast_i32x4(_mm_loadu_si128((const __m128i*)yuvconstants->kUVToR));
__m512i zmm_kYToRgb = _mm512_broadcast_i32x4(_mm_loadu_si128((const __m128i*)yuvconstants->kYToRgb));
#if defined(LIBYUV_UNBIASED_DATA)
__m512i zmm_kYBiasToRgb = _mm512_sub_epi16(
_mm512_broadcast_i32x4(_mm_loadu_si128((const __m128i*)yuvconstants->kYBiasToRgb)),
_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_3ff0 = _mm512_set1_epi16((short)0x3ff0);
__m512i zmm_fc00 = _mm512_set1_epi16((short)0xfc00);