libyuv: Apply patch to fix ARGBToRGB565DitherRow_C on big-endian

Makes LibYUVConvertTest.Test{,No}Dither pass.

OPNA2608 369d01f4 19e28509

+37
+32
pkgs/by-name/li/libyuv/dither-honour-byte-order.patch
··· 1 + diff '--color=auto' -ruN a/source/row_common.cc b/source/row_common.cc 2 + --- a/source/row_common.cc 2025-07-15 17:55:24.611751521 +0200 3 + +++ b/source/row_common.cc 2025-07-15 18:01:57.808312551 +0200 4 + @@ -104,8 +104,13 @@ 5 + #if defined(__x86_64__) || defined(_M_X64) || defined(__i386__) || \ 6 + defined(_M_IX86) || defined(__arm__) || defined(_M_ARM) || \ 7 + (defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) 8 + +#define WRITE16(p, v) *(uint16_t*)(p) = v 9 + #define WRITEWORD(p, v) *(uint32_t*)(p) = v 10 + #else 11 + +static inline void WRITE16(uint8_t* p, uint16_t v) { 12 + + p[0] = (uint8_t)(v & 255); 13 + + p[1] = (uint8_t)((v >> 8) & 255); 14 + +} 15 + static inline void WRITEWORD(uint8_t* p, uint32_t v) { 16 + p[0] = (uint8_t)(v & 255); 17 + p[1] = (uint8_t)((v >> 8) & 255); 18 + @@ -408,10 +413,10 @@ 19 + uint8_t b1 = STATIC_CAST(uint8_t, clamp255(src_argb[4] + dither1) >> 3); 20 + uint8_t g1 = STATIC_CAST(uint8_t, clamp255(src_argb[5] + dither1) >> 2); 21 + uint8_t r1 = STATIC_CAST(uint8_t, clamp255(src_argb[6] + dither1) >> 3); 22 + - *(uint16_t*)(dst_rgb + 0) = 23 + - STATIC_CAST(uint16_t, b0 | (g0 << 5) | (r0 << 11)); 24 + - *(uint16_t*)(dst_rgb + 2) = 25 + - STATIC_CAST(uint16_t, b1 | (g1 << 5) | (r1 << 11)); 26 + + WRITE16((dst_rgb + 0), 27 + + STATIC_CAST(uint16_t, b0 | (g0 << 5) | (r0 << 11))); 28 + + WRITE16((dst_rgb + 2), 29 + + STATIC_CAST(uint16_t, b1 | (g1 << 5) | (r1 << 11))); 30 + dst_rgb += 4; 31 + src_argb += 8; 32 + }
+5
pkgs/by-name/li/libyuv/package.nix
··· 17 17 hash = "sha256-4Irs+hlAvr6v5UKXmKHhg4IK3cTWdsFWxt1QTS0rizU="; 18 18 }; 19 19 20 + patches = [ 21 + # Fixes wrong byte order in ARGBToRGB565DitherRow_C on big-endian 22 + ./dither-honour-byte-order.patch 23 + ]; 24 + 20 25 nativeBuildInputs = [ 21 26 cmake 22 27 ];