diff --git a/README.md b/README.md index 2bf54a47..905b3834 100644 --- a/README.md +++ b/README.md @@ -21,8 +21,8 @@ Currently FFmpeg 9.0.1 is built with the following packages enabled for all plat - png 1.6.58 - webp 1.6.0 - libvmaf 3.2.0 -- x264 32c3b801191522961102d4bea292cdb61068d0dd (except armv7l) -- x265 4.2 (except armv7l) +- x264 b35605ace3ddf7c1a5d67a2eb553f034aef41d55 (except armv7l) +- x265 4.3 The following additional packages are also enabled on Linux: diff --git a/patches/x265.patch b/patches/x265.patch new file mode 100644 index 00000000..1bb31e97 --- /dev/null +++ b/patches/x265.patch @@ -0,0 +1,24 @@ +--- a/source/CMakeLists.txt ++++ b/source/CMakeLists.txt +@@ -47,7 +47,7 @@ + string(TOLOWER "${CMAKE_SYSTEM_PROCESSOR}" SYSPROC) + endif() + set(X86_ALIASES x86 i386 i686 x86_64 amd64) +-set(ARM_ALIASES armv6l armv7l) ++set(ARM_ALIASES armv6l armv7l armv8l) + set(ARM64_ALIASES arm64 arm64e aarch64) + set(RISCV64_ALIASES riscv64) + set(LOONGARCH64_ALIASES loongarch64) +@@ -325,10 +325,10 @@ + elseif(ARM) + find_package(Neon) + if(CPU_HAS_NEON) +- set(ARM_ARGS -mcpu=native -mfloat-abi=hard -mfpu=neon -marm -fPIC) ++ set(ARM_ARGS -march=armv7-a -mfloat-abi=hard -mfpu=neon -marm -fPIC) + add_definitions(-DHAVE_NEON) + else() +- set(ARM_ARGS -mcpu=native -mfloat-abi=hard -mfpu=vfp -marm) ++ set(ARM_ARGS -march=armv7-a -mfloat-abi=hard -mfpu=vfp -marm) + endif() + endif() + if(ARM64) diff --git a/scripts/build-ffmpeg.py b/scripts/build-ffmpeg.py index d74e8f32..239a7c5a 100644 --- a/scripts/build-ffmpeg.py +++ b/scripts/build-ffmpeg.py @@ -180,11 +180,10 @@ def main(): "--enable-zlib", ] - # x264/x265 are skipped on 32-bit ARM (armv7) + # x264 is skipped on 32-bit ARM (armv7) + ffmpeg_package.build_arguments.append("--enable-libx265") if not is_arm32: - ffmpeg_package.build_arguments.extend( - ["--enable-libx264", "--enable-libx265"] - ) + ffmpeg_package.build_arguments.append("--enable-libx264") if use_cuda: ffmpeg_package.build_arguments.extend(["--enable-nvenc", "--enable-nvdec"]) @@ -247,8 +246,8 @@ def main(): if use_gnutls: packages += gnutls_group if is_arm32: - # x264/x265 are not built on 32-bit ARM (armv7) - packages += [p for p in codec_group if p.name not in {"x264", "x265"}] + # x264 is not built on 32-bit ARM (armv7) + packages += [p for p in codec_group if p.name != "x264"] else: packages += codec_group packages += [ffmpeg_package] diff --git a/scripts/cibuildpkg.py b/scripts/cibuildpkg.py index 85a0f6e9..e000c4a8 100644 --- a/scripts/cibuildpkg.py +++ b/scripts/cibuildpkg.py @@ -371,6 +371,15 @@ def _build_x265(self, package: Package) -> None: if disable_sve: flags_high_bits.append("-DENABLE_SVE2=OFF") + # x265 greps /proc/cpuinfo for NEON, which reports the aarch64 host's + # flags ("asimd") inside the 32-bit ARM container. Its NEON .S files are + # assembled regardless, so tell it NEON is there or they get -mfpu=vfp. + arm32_flags = ( + ["-DCPU_HAS_NEON=1"] + if platform.machine().lower() in {"armv7l", "armv8l", "arm"} + else [] + ) + x265_12bits = replace( package, build_dir="x265-12bits", @@ -411,7 +420,7 @@ def _build_x265(self, package: Package) -> None: "-DLINKED_10BIT=1", "-DLINKED_12BIT=1", "-DEXTRA_LINK_FLAGS=-L../x265-10bits -L../x265-12bits", - ] + (["-DENABLE_SVE2=OFF"] if disable_sve else []) + ] + (["-DENABLE_SVE2=OFF"] if disable_sve else []) + arm32_flags self._build_with_cmake(package=package, for_builder=False) def _extract(self, package: Package) -> None: diff --git a/scripts/pkg.py b/scripts/pkg.py index 963a431e..ebfc3b0d 100644 --- a/scripts/pkg.py +++ b/scripts/pkg.py @@ -150,8 +150,8 @@ def __lt__(self, other): ), Package( name="x265", - source_url="https://bitbucket.org/multicoreware/x265_git/downloads/x265_4.2.tar.gz", - sha256="40b1ea0453e0309f0eba934e0ddf533f8f6295966679e8894e8f1c1c8d5e1210", + source_url="https://github.com/Multicorewareinc/x265/releases/download/4.3/x265_4.3.tar.gz", + sha256="83c53e4c8bbb8f1e33ed59e10a7d621d1d7801ca853910c3eb41f038b8ffb121", build_system="cmake", source_dir="source", ),