Merge pull request 'fourier-debian: Path A — ffmpeg into /opt/fourier prefix (no more KDE cascade)' (#36) from noether/fourier-private-prefix into main
build and publish packages / distcc-avahi-aarch64 (push) Successful in 2m10s
build and publish packages / lmcp-any (push) Successful in 26s
build and publish packages / lmcp-debian (push) Successful in 12s
build and publish packages / claude-his-any (push) Successful in 25s
build and publish packages / ffmpeg-v4l2-request-aarch64 (push) Successful in 45m37s
build and publish packages / claude-his-debian (push) Successful in 12s
build and publish packages / libva-v4l2-request-fourier-aarch64 (push) Successful in 40s
build and publish packages / ffmpeg-v4l2-request-debian (push) Successful in 49m0s
build and publish packages / daedalus-v4l2-debian (push) Failing after 12s
build and publish packages / daedalus-v4l2-dkms-debian (push) Has been skipped
build and publish packages / mpv-fourier-aarch64 (push) Successful in 2m22s
build and publish packages / libva-v4l2-request-fourier-debian (push) Successful in 42s
build and publish packages / mpv-fourier-debian (push) Successful in 3m55s

Reviewed-on: #36
This commit was merged in pull request #36.
This commit is contained in:
2026-05-19 08:15:25 +00:00
2 changed files with 69 additions and 25 deletions
+2 -2
View File
@@ -17,7 +17,7 @@ set -euo pipefail
# a pixel-correct decoded frame back in ffmpeg. # a pixel-correct decoded frame back in ffmpeg.
UPSTREAM_COMMIT=f55b2cdab8a8c0bc04e8c1bb1d0b6ca85e7d96d2 UPSTREAM_COMMIT=f55b2cdab8a8c0bc04e8c1bb1d0b6ca85e7d96d2
PKGVER=0.1.0+r16+gf55b2cd PKGVER=0.1.0+r16+gf55b2cd
PKGREL=1 PKGREL=2 # pkgrel=2 — Depends on ffmpeg-v4l2-request-fourier (Path A SONAME .so.62)
HERE=$(dirname "$(readlink -f "$0")") HERE=$(dirname "$(readlink -f "$0")")
@@ -81,7 +81,7 @@ Version: ${PKGVER}-${PKGREL}
Section: video Section: video
Priority: optional Priority: optional
Architecture: arm64 Architecture: arm64
Depends: ffmpeg (>= 7.1), libdrm2 Depends: ffmpeg-v4l2-request-fourier (>= 2:8.1+rfourier), libdrm2
Recommends: daedalus-v4l2-dkms Recommends: daedalus-v4l2-dkms
Maintainer: Markus Fritsche <mfritsche@reauktion.de> Maintainer: Markus Fritsche <mfritsche@reauktion.de>
Homepage: https://git.reauktion.de/reauktion/daedalus-v4l2 Homepage: https://git.reauktion.de/reauktion/daedalus-v4l2
+67 -23
View File
@@ -8,14 +8,18 @@
# mpv-fourier (and the kdirect bit-exact reference test rig) work # mpv-fourier (and the kdirect bit-exact reference test rig) work
# end-to-end without a stock-Debian FFmpeg fallback. # end-to-end without a stock-Debian FFmpeg fallback.
# #
# Conflicts: ffmpeg, libav* — this is a drop-in replacement. Pi 5 / # **Private prefix /opt/fourier** (Path A per fourier-debian
# CM5 (BCM2712) hosts using daedalus_v4l2 + libva-v4l2-request-fourier # architecture discussion 2026-05-19). Stock Debian trixie ships
# DON'T strictly need this package (stock Debian ffmpeg + libva path # FFmpeg 7.1.x = libavcodec.so.61; this package ships FFmpeg 8.1 =
# is sufficient for the VAAPI route), but the kdirect bit-exact # libavcodec.so.62 — different SOVERSION, NOT a drop-in for trixie's
# reference + firefox-fourier / mpv-fourier consumers do. # KDE/VLC/etc. Living in /opt/fourier/lib keeps the stock system
# intact; only fourier-aware consumers (firefox-fourier, mpv-fourier,
# daedalus-v4l2) RPATH into /opt/fourier/lib. Postinst drops an
# ld.so.conf.d entry so dlopen-based consumers (firefox at runtime)
# find the libs by SONAME without LD_LIBRARY_PATH wrappers.
# #
# Big build: 25-40 min on a runner. Output is a single .deb that # Big build: 25-40 min on a runner. Output is a single .deb that
# bundles ffmpeg/ffprobe + libavcodec.so.61 + libavformat.so.61 etc. # bundles ffmpeg/ffprobe + libavcodec.so.62 + libavformat.so.62 etc.
# all together — no split per-library subpackages. Easier to consume, # all together — no split per-library subpackages. Easier to consume,
# trades off finer-grained downgrades. # trades off finer-grained downgrades.
# #
@@ -29,7 +33,7 @@ FFMPEG_VERSION=8.1
# epoch 2 matches Debian's stock ffmpeg (currently 7:7.1.x in trixie); # epoch 2 matches Debian's stock ffmpeg (currently 7:7.1.x in trixie);
# +rfourier suffix to avoid colliding with upstream/Debian rebuilds. # +rfourier suffix to avoid colliding with upstream/Debian rebuilds.
PKGVER=2:${FFMPEG_VERSION}+rfourier+gb57fbbe PKGVER=2:${FFMPEG_VERSION}+rfourier+gb57fbbe
PKGREL=1 PKGREL=2 # pkgrel=2 — Path A move to /opt/fourier prefix (2026-05-19)
HERE=$(dirname "$(readlink -f "$0")") HERE=$(dirname "$(readlink -f "$0")")
@@ -60,10 +64,15 @@ patch -Np1 -i "$HERE/0002-nv15-to-p010-unpack.patch"
# JACK, GSM, Speex) — not needed on the Fourier fleet, keeps the .deb # JACK, GSM, Speex) — not needed on the Fourier fleet, keeps the .deb
# smaller and the dependency graph tighter. # smaller and the dependency graph tighter.
./configure \ ./configure \
--prefix=/usr \ --prefix=/opt/fourier \
--libdir=/usr/lib/aarch64-linux-gnu \ --bindir=/opt/fourier/bin \
--shlibdir=/usr/lib/aarch64-linux-gnu \ --libdir=/opt/fourier/lib \
--incdir=/usr/include/aarch64-linux-gnu \ --shlibdir=/opt/fourier/lib \
--incdir=/opt/fourier/include \
--datadir=/opt/fourier/share/ffmpeg \
--mandir=/opt/fourier/share/man \
--extra-ldexeflags='-Wl,-rpath,/opt/fourier/lib' \
--extra-ldsoflags='-Wl,-rpath,/opt/fourier/lib' \
--disable-debug \ --disable-debug \
--disable-static \ --disable-static \
--disable-doc \ --disable-doc \
@@ -104,7 +113,23 @@ make tools/qt-faststart
# Stage # Stage
ROOT="$work/pkgroot" ROOT="$work/pkgroot"
make DESTDIR="$ROOT" install make DESTDIR="$ROOT" install
install -Dm755 tools/qt-faststart "$ROOT/usr/bin/qt-faststart" install -Dm755 tools/qt-faststart "$ROOT/opt/fourier/bin/qt-faststart"
# ld.so.conf.d entry so dlopen-based consumers (firefox-fourier at
# runtime) find /opt/fourier/lib/libavcodec.so.62 by SONAME without an
# LD_LIBRARY_PATH wrapper. No risk of contaminating stock binaries:
# stock KDE/VLC link against libavcodec.so.61 (different SONAME), so
# the loader never sees our .so.62 as a match for their .so.61.
install -Dm644 /dev/stdin "$ROOT/etc/ld.so.conf.d/fourier.conf" <<EOF
# fourier campaign: FFmpeg 8.1 fork + libVA fork in private prefix.
/opt/fourier/lib
EOF
# Optional /usr/bin shims so users can call ffmpeg-fourier without
# remembering the /opt path. No conflict with stock /usr/bin/ffmpeg.
install -d "$ROOT/usr/bin"
ln -sf /opt/fourier/bin/ffmpeg "$ROOT/usr/bin/ffmpeg-fourier"
ln -sf /opt/fourier/bin/ffprobe "$ROOT/usr/bin/ffprobe-fourier"
# Doc # Doc
mkdir -p "$ROOT/usr/share/doc/ffmpeg-v4l2-request-fourier" "$ROOT/DEBIAN" mkdir -p "$ROOT/usr/share/doc/ffmpeg-v4l2-request-fourier" "$ROOT/DEBIAN"
@@ -143,19 +168,9 @@ Depends: libc6,
libv4l-0, libv4l-0,
libva2, libva2,
libva-drm2 libva-drm2
Conflicts: ffmpeg, libavcodec61, libavformat61, libavutil59,
libswresample5, libswscale8, libavdevice61, libavfilter10,
libpostproc58
Replaces: ffmpeg, libavcodec61, libavformat61, libavutil59,
libswresample5, libswscale8, libavdevice61, libavfilter10,
libpostproc58
Provides: ffmpeg (= ${PKGVER}-${PKGREL}),
libavcodec.so.61,
libavformat.so.61,
libavutil.so.59
Maintainer: Markus Fritsche <mfritsche@reauktion.de> Maintainer: Markus Fritsche <mfritsche@reauktion.de>
Homepage: https://github.com/Kwiboo/FFmpeg Homepage: https://github.com/Kwiboo/FFmpeg
Description: FFmpeg with V4L2 Request API hwaccel (Kwiboo fork) Description: FFmpeg with V4L2 Request API hwaccel (Kwiboo fork, /opt/fourier prefix)
FFmpeg ${FFMPEG_VERSION} patched with the V4L2 Request API stateless FFmpeg ${FFMPEG_VERSION} patched with the V4L2 Request API stateless
video decoder hwaccel — Kwiboo's long-running rebase of Jernej video decoder hwaccel — Kwiboo's long-running rebase of Jernej
Škrabec's v4l2-request patchset onto FFmpeg release tags. Škrabec's v4l2-request patchset onto FFmpeg release tags.
@@ -167,11 +182,40 @@ Description: FFmpeg with V4L2 Request API hwaccel (Kwiboo fork)
backing FFmpeg, and as the kdirect bit-exact reference in libva-v4l2- backing FFmpeg, and as the kdirect bit-exact reference in libva-v4l2-
request-fourier validation. request-fourier validation.
. .
INSTALLED TO /opt/fourier (NOT /usr): this is FFmpeg 8.1 (libav*.so.62)
sitting alongside Debian trixie's stock FFmpeg 7.1 (libav*.so.61) —
different SONAMEs, no symbol clash. Consumer binaries RPATH into
/opt/fourier/lib; ld.so.conf.d/fourier.conf adds the path to ld.so
cache for dlopen-by-SONAME (firefox). /usr/bin/ffmpeg-fourier and
/usr/bin/ffprobe-fourier are convenience symlinks to /opt/fourier/bin.
Stock 'ffmpeg' command unaffected.
.
Drops X11/AMF/CUDA/Bluray/JACK/Vulkan/SDL2/Theora/XVid/Speex/JPEG-XL Drops X11/AMF/CUDA/Bluray/JACK/Vulkan/SDL2/Theora/XVid/Speex/JPEG-XL
per Fourier fleet policy (Wayland + ARM + video-decode focus). per Fourier fleet policy (Wayland + ARM + video-decode focus).
No 'ffplay' binary; mpv-fourier covers interactive playback. No 'ffplay' binary; mpv-fourier covers interactive playback.
EOF EOF
# ldconfig must be re-run after install so /opt/fourier/lib is in the cache.
cat > "$ROOT/DEBIAN/postinst" <<'PEOF'
#!/bin/sh
set -e
if [ "$1" = "configure" ]; then
ldconfig
fi
#DEBHELPER#
PEOF
chmod 755 "$ROOT/DEBIAN/postinst"
cat > "$ROOT/DEBIAN/postrm" <<'PEOF'
#!/bin/sh
set -e
if [ "$1" = "remove" ] || [ "$1" = "purge" ]; then
ldconfig
fi
#DEBHELPER#
PEOF
chmod 755 "$ROOT/DEBIAN/postrm"
DEB_OUT="ffmpeg-v4l2-request-fourier_${PKGVER//:/%3a}-${PKGREL}_arm64.deb" DEB_OUT="ffmpeg-v4l2-request-fourier_${PKGVER//:/%3a}-${PKGREL}_arm64.deb"
dpkg-deb --root-owner-group --build "$ROOT" "$HERE/$DEB_OUT" dpkg-deb --root-owner-group --build "$ROOT" "$HERE/$DEB_OUT"
echo "built: $HERE/$DEB_OUT" echo "built: $HERE/$DEB_OUT"