Here is an update to dav1d 1.5.1.
Changes for 1.5.1 'Sonic': -------------------------- 1.5.1 is a minor release of dav1d, focusing on optimizations and stack reduction: - Rewrite of the looprestoration (SGR, wiener) to reduce stack usage - Rewrite of {put,prep}_scaled functions Now, the required stack space for dav1d should be: 62 KB on x86_64 and 58KB on arm and aarch64. - Improvements on the SSSE3 SGR - Improvements on ARM32/ARM64 looprestoration optimizations - RISC-V: blend optimizations for high bitdepth - Power9: blend optimizations for 8bpc - Port RISC-V to POSIX/non-Linux OS - AArch64: Add Neon implementation of load_tmvs - Fix a rare, but possible deadlock, in flush() Tested on aarch64 and amd64 IBT. Index: Makefile =================================================================== RCS file: /cvs/ports/multimedia/dav1d/Makefile,v retrieving revision 1.41 diff -u -p -u -p -r1.41 Makefile --- Makefile 1 Jan 2025 15:57:31 -0000 1.41 +++ Makefile 20 Jan 2025 06:23:13 -0000 @@ -4,7 +4,7 @@ COMMENT= small and fast AV1 decoder # /!\ DO NOT UPDATE WITHOUT RUNNING TESTS ON ARM64 (XONLY) and AMD64 (IBT) /!\ # ################################################################################# -VER= 1.5.0 +VER= 1.5.1 DISTNAME= dav1d-${VER} CATEGORIES= multimedia SITES= https://downloads.videolan.org/pub/videolan/dav1d/${VER}/ Index: distinfo =================================================================== RCS file: /cvs/ports/multimedia/dav1d/distinfo,v retrieving revision 1.19 diff -u -p -u -p -r1.19 distinfo --- distinfo 10 Dec 2024 12:14:18 -0000 1.19 +++ distinfo 20 Jan 2025 06:23:13 -0000 @@ -1,2 +1,2 @@ -SHA256 (dav1d-1.5.0.tar.xz) = FL1vUVeAjtmu3K++UN9onTBP1IEKwgvm7sGrA3Q2r9Y= -SIZE (dav1d-1.5.0.tar.xz) = 1017040 +SHA256 (dav1d-1.5.1.tar.xz) = QBgT8fifqP1ClYBapShNmu2bx/wf2+VUr0KS9ky6viE= +SIZE (dav1d-1.5.1.tar.xz) = 1020760 Index: patches/patch-src_arm_cpu_c =================================================================== RCS file: patches/patch-src_arm_cpu_c diff -N patches/patch-src_arm_cpu_c --- patches/patch-src_arm_cpu_c 10 Dec 2024 12:14:18 -0000 1.1 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,38 +0,0 @@ -Provide dav1d_getauxval() wrapper for getauxvaul() and elf_aux_info() -93f12c117a4e1c0cc2b129dcc52e84dbd9b84200 - -Index: src/arm/cpu.c ---- src/arm/cpu.c.orig -+++ src/arm/cpu.c -@@ -43,15 +43,8 @@ - #define HWCAP2_AARCH64_I8MM (1 << 13) - - COLD unsigned dav1d_get_cpu_flags_arm(void) { --#if HAVE_GETAUXVAL -- unsigned long hw_cap = getauxval(AT_HWCAP); -- unsigned long hw_cap2 = getauxval(AT_HWCAP2); --#else -- unsigned long hw_cap = 0; -- unsigned long hw_cap2 = 0; -- elf_aux_info(AT_HWCAP, &hw_cap, sizeof(hw_cap)); -- elf_aux_info(AT_HWCAP2, &hw_cap2, sizeof(hw_cap2)); --#endif -+ unsigned long hw_cap = dav1d_getauxval(AT_HWCAP); -+ unsigned long hw_cap2 = dav1d_getauxval(AT_HWCAP2); - - unsigned flags = dav1d_get_default_cpu_flags(); - flags |= (hw_cap & HWCAP_AARCH64_ASIMDDP) ? DAV1D_ARM_CPU_FLAG_DOTPROD : 0; -@@ -69,12 +62,7 @@ COLD unsigned dav1d_get_cpu_flags_arm(void) { - #define HWCAP_ARM_I8MM (1 << 27) - - COLD unsigned dav1d_get_cpu_flags_arm(void) { --#if HAVE_GETAUXVAL -- unsigned long hw_cap = getauxval(AT_HWCAP); --#else -- unsigned long hw_cap = 0; -- elf_aux_info(AT_HWCAP, &hw_cap, sizeof(hw_cap)); --#endif -+ unsigned long hw_cap = dav1d_getauxval(AT_HWCAP); - - unsigned flags = dav1d_get_default_cpu_flags(); - flags |= (hw_cap & HWCAP_ARM_NEON) ? DAV1D_ARM_CPU_FLAG_NEON : 0; Index: patches/patch-src_cpu_c =================================================================== RCS file: patches/patch-src_cpu_c diff -N patches/patch-src_cpu_c --- patches/patch-src_cpu_c 10 Dec 2024 12:14:18 -0000 1.1 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,37 +0,0 @@ -Provide dav1d_getauxval() wrapper for getauxvaul() and elf_aux_info() -93f12c117a4e1c0cc2b129dcc52e84dbd9b84200 - -Index: src/cpu.c ---- src/cpu.c.orig -+++ src/cpu.c -@@ -52,6 +52,10 @@ - #endif - #endif - -+#if HAVE_GETAUXVAL || HAVE_ELF_AUX_INFO -+#include <sys/auxv.h> -+#endif -+ - unsigned dav1d_cpu_flags = 0U; - unsigned dav1d_cpu_flags_mask = ~0U; - -@@ -106,4 +110,19 @@ COLD int dav1d_num_logical_processors(Dav1dContext *co - if (c) - dav1d_log(c, "Unable to detect thread count, defaulting to single-threaded mode\n"); - return 1; -+} -+ -+COLD unsigned long dav1d_getauxval(unsigned long type) { -+#if HAVE_GETAUXVAL -+ return getauxval(type); -+#elif HAVE_ELF_AUX_INFO -+ unsigned long aux = 0; -+ int ret = elf_aux_info(type, &aux, sizeof(aux)); -+ if (ret != 0) -+ errno = ret; -+ return aux; -+#else -+ errno = ENOSYS; -+ return 0; -+#endif - } Index: patches/patch-src_cpu_h =================================================================== RCS file: patches/patch-src_cpu_h diff -N patches/patch-src_cpu_h --- patches/patch-src_cpu_h 10 Dec 2024 12:14:18 -0000 1.1 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,14 +0,0 @@ -Provide dav1d_getauxval() wrapper for getauxvaul() and elf_aux_info() -93f12c117a4e1c0cc2b129dcc52e84dbd9b84200 - -Index: src/cpu.h ---- src/cpu.h.orig -+++ src/cpu.h -@@ -53,6 +53,7 @@ EXTERN unsigned dav1d_cpu_flags_mask; - void dav1d_init_cpu(void); - DAV1D_API void dav1d_set_cpu_flags_mask(unsigned mask); - int dav1d_num_logical_processors(Dav1dContext *c); -+unsigned long dav1d_getauxval(unsigned long); - - static ALWAYS_INLINE unsigned dav1d_get_default_cpu_flags(void) { - unsigned flags = 0; Index: patches/patch-src_loongarch_cpu_c =================================================================== RCS file: patches/patch-src_loongarch_cpu_c diff -N patches/patch-src_loongarch_cpu_c --- patches/patch-src_loongarch_cpu_c 10 Dec 2024 12:14:18 -0000 1.1 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,15 +0,0 @@ -Provide dav1d_getauxval() wrapper for getauxvaul() and elf_aux_info() -93f12c117a4e1c0cc2b129dcc52e84dbd9b84200 - -Index: src/loongarch/cpu.c ---- src/loongarch/cpu.c.orig -+++ src/loongarch/cpu.c -@@ -40,7 +40,7 @@ - COLD unsigned dav1d_get_cpu_flags_loongarch(void) { - unsigned flags = dav1d_get_default_cpu_flags(); - #if HAVE_GETAUXVAL -- unsigned long hw_cap = getauxval(AT_HWCAP); -+ unsigned long hw_cap = dav1d_getauxval(AT_HWCAP); - flags |= (hw_cap & LA_HWCAP_LSX) ? DAV1D_LOONGARCH_CPU_FLAG_LSX : 0; - flags |= (hw_cap & LA_HWCAP_LASX) ? DAV1D_LOONGARCH_CPU_FLAG_LASX : 0; - #endif Index: patches/patch-src_ppc_cpu_c =================================================================== RCS file: patches/patch-src_ppc_cpu_c diff -N patches/patch-src_ppc_cpu_c --- patches/patch-src_ppc_cpu_c 10 Dec 2024 12:14:18 -0000 1.1 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,25 +0,0 @@ -Provide dav1d_getauxval() wrapper for getauxvaul() and elf_aux_info() -93f12c117a4e1c0cc2b129dcc52e84dbd9b84200 - -Index: src/ppc/cpu.c ---- src/ppc/cpu.c.orig -+++ src/ppc/cpu.c -@@ -39,16 +39,9 @@ - - COLD unsigned dav1d_get_cpu_flags_ppc(void) { - unsigned flags = dav1d_get_default_cpu_flags(); --#if HAVE_GETAUXVAL && ARCH_PPC64LE -- unsigned long hw_cap = getauxval(AT_HWCAP); -- unsigned long hw_cap2 = getauxval(AT_HWCAP2); --#elif HAVE_ELF_AUX_INFO && ARCH_PPC64LE -- unsigned long hw_cap = 0; -- unsigned long hw_cap2 = 0; -- elf_aux_info(AT_HWCAP, &hw_cap, sizeof(hw_cap)); -- elf_aux_info(AT_HWCAP2, &hw_cap2, sizeof(hw_cap2)); --#endif - #if HAVE_AUX -+ unsigned long hw_cap = dav1d_getauxval(AT_HWCAP); -+ unsigned long hw_cap2 = dav1d_getauxval(AT_HWCAP2); - flags |= (hw_cap & PPC_FEATURE_HAS_VSX) ? DAV1D_PPC_CPU_FLAG_VSX : 0; - flags |= (hw_cap2 & PPC_FEATURE2_ARCH_3_00) ? DAV1D_PPC_CPU_FLAG_PWR9 : 0; - #endif Index: patches/patch-src_riscv_cpu_c =================================================================== RCS file: patches/patch-src_riscv_cpu_c diff -N patches/patch-src_riscv_cpu_c --- patches/patch-src_riscv_cpu_c 10 Dec 2024 12:14:18 -0000 1.1 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,31 +0,0 @@ -- Provide dav1d_getauxval() wrapper for getauxvaul() and elf_aux_info() - 93f12c117a4e1c0cc2b129dcc52e84dbd9b84200 -- riscv: Enable FreeBSD / OpenBSD elf_aux_info() support - f15666b7031fa6b50f0db516d78e966acd18f5ae - -Index: src/riscv/cpu.c ---- src/riscv/cpu.c.orig -+++ src/riscv/cpu.c -@@ -32,19 +32,17 @@ - #include "src/cpu.h" - #include "src/riscv/cpu.h" - --#if HAVE_GETAUXVAL -+#if HAVE_GETAUXVAL || HAVE_ELF_AUX_INFO - #include <sys/auxv.h> -- - #define HWCAP_RVV (1 << ('v' - 'a')) -- - #endif - - int dav1d_has_compliant_rvv(void); - - COLD unsigned dav1d_get_cpu_flags_riscv(void) { - unsigned flags = dav1d_get_default_cpu_flags(); --#if HAVE_GETAUXVAL -- unsigned long hw_cap = getauxval(AT_HWCAP); -+#if HAVE_GETAUXVAL || HAVE_ELF_AUX_INFO -+ unsigned long hw_cap = dav1d_getauxval(AT_HWCAP); - flags |= (hw_cap & HWCAP_RVV) && dav1d_has_compliant_rvv() ? DAV1D_RISCV_CPU_FLAG_V : 0; - #endif -