From 36d72df503d0917cbd978e517cb029263dbf04e4 Mon Sep 17 00:00:00 2001 From: WyattBlue Date: Sun, 25 Oct 2026 10:50:37 -0400 Subject: [PATCH 1/3] Update dependencies libunistring 1.5, libpng 1.6.59, harfbuzz 15.0.0, alsa-lib 1.2.16.1, nv-codec-headers n13.0.19.1, AMF headers 1.5.3, libvpl 2.17.0, nasm 3.02, static-clang 23.1.4.0, setup-python v7, cache v6 --- .github/workflows/build-ffmpeg.yml | 8 ++++---- README.md | 6 +++--- scripts/install-static-clang.sh | 18 ++++++++--------- scripts/pkg.py | 32 +++++++++++++++--------------- 4 files changed, 32 insertions(+), 32 deletions(-) diff --git a/.github/workflows/build-ffmpeg.yml b/.github/workflows/build-ffmpeg.yml index 4fff9062..1b243185 100644 --- a/.github/workflows/build-ffmpeg.yml +++ b/.github/workflows/build-ffmpeg.yml @@ -20,14 +20,14 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v7 - - uses: actions/setup-python@v6 + - uses: actions/setup-python@v7 with: python-version: "3.14" - name: Make cache file run: python scripts/cache.py - name: Cache tarballs id: cache-tarballs - uses: actions/cache@v5 + uses: actions/cache@v6 with: path: source key: tarballs-${{ hashFiles('cache.txt') }} @@ -74,7 +74,7 @@ jobs: shell: ${{ matrix.shell }} steps: - uses: actions/checkout@v7 - - uses: actions/setup-python@v6 + - uses: actions/setup-python@v7 with: python-version: "3.14" - name: Get sources @@ -136,7 +136,7 @@ jobs: arch: [ "armv7l", "ppc64le", "riscv64" ] steps: - uses: actions/checkout@v7 - - uses: actions/setup-python@v6 + - uses: actions/setup-python@v7 with: python-version: "3.14" - name: Get sources diff --git a/README.md b/README.md index 0d66c9bb..ca08b862 100644 --- a/README.md +++ b/README.md @@ -18,18 +18,18 @@ Currently FFmpeg 9.0.2 is built with the following packages enabled for all plat - dav1d 1.5.4 - libsvtav1 4.2.0 - vpx 1.17.0 -- png 1.6.58 +- png 1.6.59 - webp 1.6.0 - libvmaf 3.2.1 - x264 b35605ace3ddf7c1a5d67a2eb553f034aef41d55 (except armv7l) - x265 4.3 - freetype 2.15.0 - fribidi 1.0.17 -- harfbuzz 14.6.0 +- harfbuzz 15.0.0 - libass 0.17.5 The following additional packages are also enabled on Linux: - gnutls 3.8.13 - nettle 4.0 -- unistring 1.4.2 +- unistring 1.5 diff --git a/scripts/install-static-clang.sh b/scripts/install-static-clang.sh index a85bcea4..239c4ad3 100755 --- a/scripts/install-static-clang.sh +++ b/scripts/install-static-clang.sh @@ -20,19 +20,19 @@ case "${STATIC_CLANG_ARCH}" in s390x) GO_ARCH=s390x;; *) echo "No static-clang toolchain for ${CLANG_ARCH}">2; exit 1;; esac -STATIC_CLANG_VERSION=21.1.8.1 +STATIC_CLANG_VERSION=23.1.4.0 STATIC_CLANG_FILENAME="static-clang-linux-${GO_ARCH}.tar.xz" STATIC_CLANG_URL="https://github.com/mayeut/static-clang-images/releases/download/v${STATIC_CLANG_VERSION}/${STATIC_CLANG_FILENAME}" pushd /tmp cat<<'EOF' | grep "${STATIC_CLANG_FILENAME}" > "${STATIC_CLANG_FILENAME}.sha256" -583980309e73fa753c0791e05deceac7cb06c5444956d61189f1d651941bcd8e static-clang-linux-386.tar.xz -f539f1fd24bcc07ecc220594022907865914236540091fbf189cb496a9a3751c static-clang-linux-amd64.tar.xz -d0c8b7fac4734cc8048fda3b1f33ccdf24d26f81a52df53348e5fa84ab4b203a static-clang-linux-arm.tar.xz -57fb9cf798b3a2c4b0f3c31c0b7fe3803b5319d2af075407e1aef0cd57882f65 static-clang-linux-arm64.tar.xz -5a2b296e9030d0320d9e4eac8859e5db0504cf1d4169981af233cb339292fa4c static-clang-linux-loong64.tar.xz -c8541b2d36f0fd8f13ddabe1292b6fb7550a742e76e0f1f70fb29fcee073be4a static-clang-linux-ppc64le.tar.xz -b311137f955b55139b02e8c1d7ec259628404a0563d136df7a817a33784bd2bf static-clang-linux-riscv64.tar.xz -de74fd8e5de244d36398684b2afa67add2311df6ccfa24f3c08a1d777ca814fa static-clang-linux-s390x.tar.xz +4070a2a3342eb93fcc686b974dcd663490bbe8da01c082924cce6e07675bcc85 static-clang-linux-386.tar.xz +6580146eab36228d9e10dbf280a67adb11ce5d4b0275ac14302fcbf4f722e2a3 static-clang-linux-amd64.tar.xz +41ecc4bda79a3db83fe6f1b719f368b201ed0ced614856c3ce32fa3f031ed6bf static-clang-linux-arm.tar.xz +501b34ca9d21bfa08a40d99eb5bd06664f6209a244bb2d52f007ad6fec977623 static-clang-linux-arm64.tar.xz +cc45b104c92201361446e20794c59011b4f9005f3601354b31f22ff4414e79f1 static-clang-linux-loong64.tar.xz +88097702c270ad3646ad47f90ad9d77b48aa321e04b33a24120d7b7ccbfdc927 static-clang-linux-ppc64le.tar.xz +775437eb73958e24328f36135f92cbe3db964771e5bd0354b0f1cffa5c784798 static-clang-linux-riscv64.tar.xz +1004c314ce1e0a14c216df0d350c8e5da3978085f269c8ee6cee03354b78c0d9 static-clang-linux-s390x.tar.xz EOF curl -fsSLO "${STATIC_CLANG_URL}" sha256sum -c "${STATIC_CLANG_FILENAME}.sha256" diff --git a/scripts/pkg.py b/scripts/pkg.py index 289ffa5c..b299c9d6 100644 --- a/scripts/pkg.py +++ b/scripts/pkg.py @@ -30,8 +30,8 @@ def __lt__(self, other): ), Package( name="unistring", - source_url="https://ftp.gnu.org/gnu/libunistring/libunistring-1.4.2.tar.gz", - sha256="e82664b170064e62331962126b259d452d53b227bb4a93ab20040d846fec01d8", + source_url="https://ftp.gnu.org/gnu/libunistring/libunistring-1.5.tar.gz", + sha256="5b0ecd46cbf225375f20ab4056197e66a7ac590e2684c069af407ae3383c9d81", ), Package( name="nettle", @@ -102,8 +102,8 @@ def __lt__(self, other): ), Package( name="png", - source_url="https://downloads.sourceforge.net/project/libpng/libpng16/1.6.58/libpng-1.6.58.tar.xz", - sha256="28eb403f51f0f7405249132cecfe82ea5c0ef97f1b32c5a65828814ae0d34775", + source_url="https://downloads.sourceforge.net/project/libpng/libpng16/1.6.59/libpng-1.6.59.tar.xz", + sha256="d80dd2a38a37f803cb9b6ac7b14bd6e74ddc3b654780a8380bdf93523fdb4389", # avoid an assembler error on Windows build_arguments=["PNG_COPTS=-fno-asynchronous-unwind-tables"], ), @@ -184,8 +184,8 @@ def __lt__(self, other): ), Package( name="harfbuzz", - source_url="https://github.com/harfbuzz/harfbuzz/releases/download/14.6.0/harfbuzz-14.6.0.tar.xz", - sha256="d07a007327277708a2a73ae437887cdbaf282937f6d03ca5467723e9099af586", + source_url="https://github.com/harfbuzz/harfbuzz/releases/download/15.0.0/harfbuzz-15.0.0.tar.xz", + sha256="968536e9abd782f07f7954044c0c4020199fcdd39b41d221ec42d2a3be4a44df", build_system="meson", build_arguments=[ "--auto-features=disabled", @@ -221,29 +221,29 @@ def __lt__(self, other): alsa_package = Package( name="alsa-lib", - source_url="https://www.alsa-project.org/files/pub/lib/alsa-lib-1.2.14.tar.bz2", - sha256="be9c88a0b3604367dd74167a2b754a35e142f670292ae47a2fdef27a2ee97a32", + source_url="https://www.alsa-project.org/files/pub/lib/alsa-lib-1.2.16.1.tar.bz2", + sha256="f740db7f488255944ffd4428416ee3390a96742856916433df468c281436480e", build_arguments=["--disable-python"], ) nvheaders_package = Package( name="nv-codec-headers", - source_url="https://github.com/FFmpeg/nv-codec-headers/archive/refs/tags/n13.0.19.0.tar.gz", - sha256="86d15d1a7c0ac73a0eafdfc57bebfeba7da8264595bf531cf4d8db1c22940116", + source_url="https://github.com/FFmpeg/nv-codec-headers/archive/refs/tags/n13.0.19.1.tar.gz", + sha256="c293161bd92dac53f2f8fab08abcd4f96773c3644a57b23c2260b4be2311ab2f", build_system="make", ) amfheaders_package = Package( name="amf-headers", - source_url="https://github.com/GPUOpen-LibrariesAndSDKs/AMF/releases/download/v1.5.2/AMF-headers-v1.5.2.tar.gz", - sha256="d3c12eb324edf05e214608b6a395a51dd95770ed9d45520185d6c3a206811c99", + source_url="https://github.com/GPUOpen-LibrariesAndSDKs/AMF/releases/download/v1.5.3/AMF-headers-v1.5.3.tar.gz", + sha256="0f521ad98041f8001147cded4a660127f18b1c27a801a5cd691bda1fa48381be", build_system="make", ) libvpl_package = Package( name="libvpl", - source_url="https://github.com/intel/libvpl/archive/refs/tags/v2.16.0.tar.gz", - sha256="d60931937426130ddad9f1975c010543f0da99e67edb1c6070656b7947f633b6", + source_url="https://github.com/intel/libvpl/archive/refs/tags/v2.17.0.tar.gz", + sha256="4de3e2faf1e8307fb282e4a43f443191810f6a6b0a484fffa7995ba1c814c6ec", build_system="cmake", build_arguments=[ "-DINSTALL_LIB=ON", @@ -257,8 +257,8 @@ def __lt__(self, other): nasm_package = Package( name="nasm", - source_url="https://www.nasm.us/pub/nasm/releasebuilds/2.16.03/nasm-2.16.03.tar.xz", - sha256="1412a1c760bbd05db026b6c0d1657affd6631cd0a63cddb6f73cc6d4aa616148", + source_url="https://www.nasm.us/pub/nasm/releasebuilds/3.02/nasm-3.02.tar.xz", + sha256="87336eba53b4acfe917424ab5d500d2b0054d9f5148d35c2273ccf2cfb712f0d", ) ffmpeg_package = Package( From 7f32c495ba7eab56cd848b3b8808f0c27faf46fe Mon Sep 17 00:00:00 2001 From: WyattBlue Date: Sun, 25 Oct 2026 10:58:47 -0400 Subject: [PATCH 2/3] Fix x265 parallel build race on shared/static asm objects --- patches/x265.patch | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/patches/x265.patch b/patches/x265.patch index 1bb31e97..d6cf09ac 100644 --- a/patches/x265.patch +++ b/patches/x265.patch @@ -22,3 +22,13 @@ endif() endif() if(ARM64) +@@ -1148,6 +1148,9 @@ + add_library(x265-shared SHARED "${PROJECT_BINARY_DIR}/x265.def" ${ASM_OBJS} + ${X265_RC_FILE} $ $) + endif() ++ # x265-static and x265-shared both list ${ASM_OBJS}, so a parallel make ++ # assembles each object twice at once and can link a half-written file. ++ add_dependencies(x265-shared x265-static) + if(EXTRA_LIB) + target_link_libraries(x265-shared ${EXTRA_LIB}) + endif() From 4daee260b514066923863bda8dc885bf0ab21828 Mon Sep 17 00:00:00 2001 From: WyattBlue Date: Sun, 25 Oct 2026 11:43:02 -0400 Subject: [PATCH 3/3] Enable x264 asm on Windows arm64 and libass asm on arm64 --- scripts/build-ffmpeg.py | 4 ++-- scripts/cibuildpkg.py | 2 -- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/scripts/build-ffmpeg.py b/scripts/build-ffmpeg.py index cc010725..ffb4c6df 100644 --- a/scripts/build-ffmpeg.py +++ b/scripts/build-ffmpeg.py @@ -256,7 +256,7 @@ def main(): packages += [ffmpeg_package] # Where libass finds the system's fonts. Linux has no provider without - # fontconfig. Its x86 assembly needs nasm; elsewhere it's plain C. + # fontconfig. It has x86 (nasm) and aarch64 assembly; elsewhere it's plain C. for pkg in packages: if pkg.name == "libass": pkg.build_arguments += [ @@ -264,7 +264,7 @@ def main(): "-Ddirectwrite=" + ("enabled" if plat == "Windows" else "disabled"), "-Drequire-system-font-provider=" + ("false" if plat == "Linux" else "true"), - "-Dasm=" + ("enabled" if is_x86 else "disabled"), + "-Dasm=" + ("enabled" if is_x86 or (is_arm and not is_arm32) else "disabled"), ] # Disable runtime CPU detection for opus on Windows ARM64 diff --git a/scripts/cibuildpkg.py b/scripts/cibuildpkg.py index c68eed31..805eff55 100644 --- a/scripts/cibuildpkg.py +++ b/scripts/cibuildpkg.py @@ -225,9 +225,7 @@ def _build_with_autoconf(self, package: Package, for_builder: bool) -> None: ] if package.name == "x264": - # Disable asm on Windows ARM64 (no nasm available) if platform.system() == "Windows" and platform.machine().lower() in {"arm64", "aarch64"}: - configure_args.append("--disable-asm") # Specify host to ensure correct resource compiler target configure_args.append("--host=aarch64-w64-mingw32")