1
0
mirror of https://git.savannah.gnu.org/git/guix.git synced 2026-05-15 13:45:54 +02:00

gnu: Upgrade Handbrake.

* gnu/packages/patches/ffmpeg-svt-av1-v3.patch,
gnu/packages/patches/x265-4-arm-flags.patch: New patches.
* gnu/local.mk (dist_patch_DATA): Register them.
* gnu/packages/video.scm (x265-4, svt-av1-3, ffmpeg-handbrake)
(ffmpeg-x265): New variables.
(handbrake): Upgrade to version 1.10.2.
[origin]: Move modules adjustment to ...
[arguments]: ... a new 'disable-contrib phase.
[native-inputs]: Use new list syntax.  Add meson, ninja.
[inputs]: Same.  "gtk+" -> "gtk", "ffmpeg" -> "ffmpeg-handbrake", "x265" ->
"x265-handbrake".  Add svt-av1-3.

Fixes: guix/guix#2337
Change-Id: Ia0e911e166f96a6f5e28697759a4abfa1a5d5f93
This commit is contained in:
Eric Bavier
2025-11-17 22:33:57 -06:00
parent 156f23bb1a
commit 307bfb0663
4 changed files with 245 additions and 68 deletions
+2
View File
@@ -1281,6 +1281,7 @@ dist_patch_DATA = \
%D%/packages/patches/ffmpeg-jami-remove-mjpeg-log.patch \
%D%/packages/patches/ffmpeg-jami-screen-sharing-x11-fix.patch \
%D%/packages/patches/ffmpeg-4-binutils-2.41.patch \
%D%/packages/patches/ffmpeg-svt-av1-v3.patch \
%D%/packages/patches/fgallery-also-look-for-7z.patch \
%D%/packages/patches/fifengine-boost-compat.patch \
%D%/packages/patches/fifengine-python-3.9-compat.patch \
@@ -2470,6 +2471,7 @@ dist_patch_DATA = \
%D%/packages/patches/wordnet-CVE-2008-3908-pt2.patch \
%D%/packages/patches/wpa-supplicant-dbus-group-policy.patch \
%D%/packages/patches/x265-arm-flags.patch \
%D%/packages/patches/x265-4-arm-flags.patch \
%D%/packages/patches/xdg-desktop-portal-disable-portal-tests.patch\
%D%/packages/patches/xdg-desktop-portal-disable-configuration-search-exit.patch\
%D%/packages/patches/xdg-desktop-portal-wlr-harcoded-length.patch\
@@ -0,0 +1,33 @@
From d1ed5c06e3edc5f2b5f3664c80121fa55b0baa95 Mon Sep 17 00:00:00 2001
From: Gyan Doshi <ffmpeg@gyani.pro>
Date: Sat, 22 Feb 2025 10:38:53 +0530
Subject: [PATCH] avcodec/libsvtav1: unbreak build with latest svtav1
SVT-AV1 made a change in their public API in 988e930c but without a
version bump or any other accessible marker, thus breaking ffmpeg build
with current versions of SVT-AV1.
They have finally bumped versions a month later, so check added.
---
libavcodec/libsvtav1.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/libavcodec/libsvtav1.c b/libavcodec/libsvtav1.c
index 79b28eb4df..43fe531fde 100644
--- a/libavcodec/libsvtav1.c
+++ b/libavcodec/libsvtav1.c
@@ -435,7 +435,11 @@ static av_cold int eb_enc_init(AVCodecContext *avctx)
svt_enc->eos_flag = EOS_NOT_REACHED;
+#if SVT_AV1_CHECK_VERSION(3, 0, 0)
+ svt_ret = svt_av1_enc_init_handle(&svt_enc->svt_handle, &svt_enc->enc_params);
+#else
svt_ret = svt_av1_enc_init_handle(&svt_enc->svt_handle, svt_enc, &svt_enc->enc_params);
+#endif
if (svt_ret != EB_ErrorNone) {
return svt_print_error(avctx, svt_ret, "Error initializing encoder handle");
}
--
2.25.1
@@ -0,0 +1,37 @@
Fix build flags for ARMv7.
Taken from Debian:
https://salsa.debian.org/multimedia-team/x265/-/blob/master/debian/patches/0001-Fix-arm-flags.patch
and adapted for x265_4.1.
From: Sebastian Ramacher <sramacher@debian.org>
Date: Wed, 26 Apr 2017 22:05:06 +0200
Subject: Fix arm* flags
---
source/CMakeLists.txt | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
--- x265_4.1/source/CMakeLists.txt
+++ x265_4.1/source/CMakeLists.txt
@@ -80,7 +80,7 @@
endif()
message(STATUS "Detected ARM target processor")
set(ARM 1)
- add_definitions(-DX265_ARCH_ARM=1 -DHAVE_ARMV6=1)
+ add_definitions(-DX265_ARCH_ARM=1)
elseif(ARM64MATCH GREATER "-1")
message(STATUS "Detected ARM64 target processor")
set(ARM64 1)
@@ -274,10 +274,7 @@
elseif(ARM)
find_package(Neon)
if(CPU_HAS_NEON)
- set(ARM_ARGS -mcpu=native -mfloat-abi=hard -mfpu=neon -marm -fPIC)
add_definitions(-DHAVE_NEON)
- else()
- set(ARM_ARGS -mcpu=native -mfloat-abi=hard -mfpu=vfp -marm)
endif()
endif()
if(ARM64)
+173 -68
View File
@@ -11,7 +11,7 @@
;;; Copyright © 2016 Kei Kebreau <kkebreau@posteo.net>
;;; Copyright © 2016 Dmitry Nikolaev <cameltheman@gmail.com>
;;; Copyright © 2016, 2017 Nikita <nikita@n0.is>
;;; Copyright © 2016, 2018, 2019, 2020, 2021 Eric Bavier <bavier@posteo.net>
;;; Copyright © 2016, 2018-2021, 2025 Eric Bavier <bavier@posteo.net>
;;; Copyright © 2016, 2024, 2025 Janneke Nieuwenhuizen <janneke@gnu.org>
;;; Copyright © 2017 Feng Shu <tumashu@163.com>
;;; Copyright © 20172021 Tobias Geerinckx-Rice <me@tobias.gr>
@@ -134,6 +134,7 @@
#:use-module (gnu packages bison)
#:use-module (gnu packages bittorrent)
#:use-module (gnu packages boost)
#:use-module (gnu packages build-tools)
#:use-module (gnu packages cdrom)
#:use-module (gnu packages nss)
#:use-module (gnu packages check)
@@ -191,6 +192,7 @@
#:use-module (gnu packages ncurses)
#:use-module (gnu packages nettle)
#:use-module (gnu packages networking)
#:use-module (gnu packages ninja)
#:use-module (gnu packages ocr)
#:use-module (gnu packages openkinect)
#:use-module (gnu packages pcre)
@@ -1428,6 +1430,21 @@ on the Invidious instances only as a fallback method.")
designed to encode video or images into an H.265 / HEVC encoded bitstream.")
(license license:gpl2+)))
(define-public x265-4
(package/inherit x265
(version "4.1")
(source
(origin
(method url-fetch)
(uri (string-append "https://bitbucket.org/multicoreware/x265_git"
"/downloads/x265_" version ".tar.gz"))
(sha256
(base32 "0acgmzbpjhwapxggx0h40m4lppk5vykydrai055vf1lqm339j5m3"))
(patches (search-patches "x265-4-arm-flags.patch"))
(modules '((guix build utils)))
(snippet '(begin
(delete-file-recursively "source/compat/getopt")))))))
(define-public libass
(package
(name "libass")
@@ -5028,10 +5045,89 @@ specifications.")
Content System specification.")
(license license:lgpl2.1+)))
;;; Custom ffmpeg package used by Handbrake, which incorporates custom
;;; patches. Modification include APIs that have not been upstreamed.
(define ffmpeg-handbrake
(let ((ffmpeg ffmpeg))
(hidden-package
(package
(inherit ffmpeg)
(version "7.1.1")
(source
(origin
(method url-fetch)
(uri (string-append "https://ffmpeg.org/releases/ffmpeg-"
version ".tar.bz2"))
(sha256
(base32
"1fj3y70cfzh9z33l62zxdb8a2kdvynncn1y09w0ix83r2pqs538c"))
(patches (search-patches "ffmpeg-svt-av1-v3.patch"))))
(inputs (modify-inputs (package-inputs ffmpeg)
(append zimg)
(replace "svt-av1" svt-av1-3)))
(arguments
(substitute-keyword-arguments (package-arguments ffmpeg)
((#:configure-flags flags)
#~(append #$flags
(list "--enable-gpl"
"--disable-doc"
"--disable-programs"
"--disable-avdevice"
"--disable-network"
"--disable-postproc"
"--enable-libzimg")))
((#:phases phases)
#~(modify-phases #$phases
(add-after 'unpack 'apply-handbrake-patches
(lambda _
(mkdir-p "/tmp/handbrake")
(with-directory-excursion "/tmp/handbrake"
(invoke "tar" "xf" #$(package-source handbrake)
(string-append "HandBrake-"
#$(package-version handbrake)
"/contrib/ffmpeg")))
(for-each
(lambda (patch)
(invoke "patch" "--force" "--no-backup-if-mismatch"
"-p1" "--input" patch))
(find-files "/tmp/handbrake" "\\.patch$"))))))))))))
;;; Custom x265 package used by Handbrake, which incorporates custom patches.
;;; Modification include APIs that have not been upstreamed.
(define x265-handbrake
(let ((x265 x265-4))
(hidden-package
(package
(inherit x265)
(arguments
(substitute-keyword-arguments (package-arguments x265)
((#:phases phases)
#~(modify-phases #$phases
(add-after 'unpack 'apply-handbrake-patches
(lambda _
(let ((patchdir "/tmp/hanbrake"))
(mkdir-p patchdir)
(with-directory-excursion patchdir
(invoke "tar" "xf" #$(package-source handbrake)
(string-append "HandBrake-"
#$(package-version handbrake)
"/contrib/x265")))
(for-each
(lambda (patch)
(unless (or (string-suffix?
"A06-Update-version-strings.patch"
patch)
(string-suffix?
"A08-Fix-inconsistent-bitrate-in-second-pass.patch"
patch))
(invoke "patch" "--force" "--no-backup-if-mismatch"
"-p1" "--input" patch)))
(find-files patchdir "\\.patch$")))))))))))))
(define-public handbrake
(package
(name "handbrake")
(version "1.5.1")
(version "1.10.2")
(source (origin
(method url-fetch)
(uri (string-append "https://github.com/HandBrake/HandBrake/"
@@ -5039,86 +5135,69 @@ Content System specification.")
"HandBrake-" version "-source.tar.bz2"))
(sha256
(base32
"1w1hjj6gvdydypw4mdn281w0x163is59cfm7k6bq371hsl3gx69r"))
"1nzqlpzgmkzs85c9lglqxj2z27p7c26w54kv20j6rhygz321qpn6"))
(modules '((guix build utils)))
(snippet
;; Remove "contrib" and source not necessary for
;; building/running under a GNU environment.
'(begin
(for-each delete-file-recursively
'("contrib" "macosx" "win")) ; 540KiB, 11MiB, 5.9MiB resp.
(substitute* "make/include/main.defs"
;; Disable unconditional inclusion of "contrib" libraries
;; (ffmpeg, libvpx, libdvdread, libdvdnav, and libbluray),
;; which would lead to fetching and building of these
;; libraries. Use our own instead.
(("MODULES \\+= contrib") "# MODULES += contrib"))))))
(build-system glib-or-gtk-build-system)
;; Remove source not needed for building/running
;; under a GNU environment.
'("macosx" "win")))))) ; 11MiB, 5.9MiB resp.
(build-system glib-or-gtk-build-system)
(native-inputs
`(("automake" ,automake) ; GUI subpackage must be bootstrapped
("autoconf" ,autoconf)
("intltool" ,intltool)
("libtool" ,libtool)
("pkg-config" ,pkg-config)
("python" ,python-2))) ; For configuration
(list autoconf
automake
intltool
libtool
meson
ninja
pkg-config
python)) ; For configuration
(inputs
`(("bzip2" ,bzip2)
("dbus-glib" ,dbus-glib)
("ffmpeg" ,ffmpeg-4)
("fontconfig" ,fontconfig)
("freetype" ,freetype)
("glib" ,glib)
("gstreamer" ,gstreamer)
("gst-plugins-base" ,gst-plugins-base)
("gtk+" ,gtk+)
("jansson" ,jansson)
("lame" ,lame)
("libass" ,libass)
("libbluray" ,libbluray)
("libdav1d" ,dav1d)
("libdvdnav" ,libdvdnav)
("libdvdread" ,libdvdread)
("libgudev" ,libgudev)
("libjpeg-turbo" ,libjpeg-turbo)
("libmpeg2" ,libmpeg2)
("libnotify" ,libnotify)
("libnuma" ,numactl)
("libogg" ,libogg)
("libopus" ,opus)
("libsamplerate" ,libsamplerate)
("libtheora" ,libtheora)
("libvorbis" ,libvorbis)
("libvpx" ,libvpx)
("libxml2" ,libxml2)
("libx264" ,libx264)
("speex" ,speex)
("x265" ,x265)
("zimg" ,zimg)
("zlib" ,zlib)))
(list bzip2
dav1d
dbus-glib
ffmpeg-handbrake
fontconfig
freetype
glib
gstreamer
gst-plugins-base
gtk
jansson
lame
libass
libbluray
libdvdnav
libdvdread
libgudev
libjpeg-turbo
libmpeg2
libnotify
libogg
libsamplerate
libtheora
libvorbis
libvpx
libxml2
libx264
numactl
opus
speex
svt-av1-3
x265-handbrake
zimg
zlib))
(arguments
`(#:tests? #f ;tests require Ruby and claim to be unsupported
#:configure-flags
(list "--disable-gtk-update-checks"
"--disable-nvenc"
(list "--disable-nvenc"
(string-append "CPPFLAGS=-I"
(assoc-ref %build-inputs "libxml2")
"/include/libxml2")
"LDFLAGS=-lx265")
#:phases
(modify-phases %standard-phases
(replace 'bootstrap
;; Run bootstrap ahead of time so that shebangs get patched.
(lambda _
(setenv "CONFIG_SHELL" (which "sh"))
;; Patch the Makefile so that it doesn't bootstrap again.
(substitute* "gtk/module.rules"
((".*autoreconf.*") ""))
(with-directory-excursion "gtk"
(invoke "autoreconf" "-fiv"))))
(add-before 'configure 'patch-SHELL
(lambda _
(substitute* "gtk/po/Makefile.in.in"
(("SHELL = /bin/sh") "SHELL = @SHELL@"))))
(add-before 'configure 'relax-reqs
(lambda _
(substitute* "make/configure.py"
@@ -5138,7 +5217,20 @@ Content System specification.")
(apply invoke "./configure"
(string-append "--prefix=" out)
(or configure-flags '())))))
(add-after 'configure 'chdir-build
(add-after 'configure 'disable-contrib
(lambda _
(begin
(substitute* "make/include/main.defs"
;; Disable unconditional inclusion of "contrib" libraries
;; (ffmpeg, libvpx, libdvdread, libdvdnav, and libbluray),
;; which would lead to fetching and building of these
;; libraries. Use our own instead.
(("MODULES \\+= contrib" &) (string-append "# " &)))
(substitute* "gtk/meson.build"
;; Disable unconditional inclusion of "contrib" headers
(("^(hb_incdirs = .*),[^,]+'contrib/include'(.*)" _ < >)
(string-append < >))))))
(add-before 'build 'chdir-build
(lambda _ (chdir "./build"))))))
(home-page "https://handbrake.fr")
(synopsis "Video transcoder")
@@ -6425,6 +6517,19 @@ Intel-compatible CPUs (x86), but has limited support for other architectures.")
(home-page "https://gitlab.com/AOMediaCodec/SVT-AV1")
(license license:bsd-2)))
(define-public svt-av1-3
(package/inherit svt-av1
(version "3.1.2")
(source
(origin
(method git-fetch)
(uri (git-reference
(url "https://gitlab.com/AOMediaCodec/SVT-AV1.git")
(commit (string-append "v" version))))
(file-name (git-file-name "svt-av1" version))
(sha256
(base32 "1ifvf4lmv92w87zc8si96rpcapn330iwkwywq7ysgql2vk2mqapw"))))))
(define-public svt-vp9
(package
(name "svt-vp9")