ce2fff1a4f
Bumps both Arch PKGBUILD and Debian build-deb.sh pins to PR #16 — codec_store_buffer + request_pool_resize transparent OUTPUT-pool grow on a mid-session resolution upshift overrun. Picks up the frame- survival path that supersedes #13's drop-and-recreate fallback. Dual-pin per feedback_marfrit_packages_dual_pin so both Arch and Debian repos see check-already-published.sh report a new version.
112 lines
4.9 KiB
Bash
Executable File
112 lines
4.9 KiB
Bash
Executable File
#!/bin/bash
|
||
# Build libva-v4l2-request-fourier_<ver>_arm64.deb.
|
||
#
|
||
# Compiles the libva ICD from the marfrit/libva-v4l2-request-fourier
|
||
# tip pinned in PKGVER below. Mirrors arch/libva-v4l2-request-fourier
|
||
# (Arch Linux build). Output is a single arm64 .deb that ships the
|
||
# VA-API driver as /usr/lib/aarch64-linux-gnu/dri/v4l2_request_drv_video.so.
|
||
#
|
||
# Sibling Arch package: ../../arch/libva-v4l2-request-fourier/PKGBUILD
|
||
# Upstream fork: https://git.reauktion.de/marfrit/libva-v4l2-request-fourier
|
||
set -euo pipefail
|
||
|
||
# Same pin as the Arch PKGBUILD. c454618 = PR #16 merge "picture,
|
||
# request_pool: transparent OUTPUT-pool resize on bitstream overrun
|
||
# (#15)" — follow-up root-cause fix to #13/#14. On a mid-stream
|
||
# bitstream-budget overrun (typical cause: SPS-driven resolution
|
||
# upshift in an adaptive-bitrate stream), codec_store_buffer now
|
||
# snapshots the in-flight surface's accumulated bytes, releases its
|
||
# OUTPUT pool slot, calls request_pool_resize (STREAMOFF →
|
||
# REQBUFS(0) → S_FMT with 2×sizeimage hint, capped at 1 GiB, page-
|
||
# aligned → CREATE_BUFS → mmap → media_request_alloc → STREAMON),
|
||
# re-acquires a slot, re-mirrors the surface's source_{data,size,
|
||
# request_fd}, restores the bytes, and continues. The frame
|
||
# survives instead of being dropped back to libavcodec for surface
|
||
# recreation. CAPTURE side untouched (per-queue V4L2 streaming
|
||
# independence).
|
||
#
|
||
# Prior pin (2860d75) = PR #14 merge — codec_store_buffer bounds-
|
||
# check floor (#13).
|
||
UPSTREAM_COMMIT=c454618ae11addce2e17b560f4deeacbed067d98
|
||
PKGVER=1.0.0+r390+gc454618
|
||
PKGREL=1
|
||
|
||
HERE=$(dirname "$(readlink -f "$0")")
|
||
|
||
# Reproducible build. 2026-05-18 23:00 UTC — Phase 8.13 close.
|
||
export SOURCE_DATE_EPOCH=1779231600
|
||
|
||
work=$(mktemp -d)
|
||
trap "rm -rf $work" EXIT
|
||
|
||
cd "$work"
|
||
curl --connect-timeout 10 --max-time 600 --retry 3 --retry-delay 5 -sSLfo libva-fourier.tar.gz \
|
||
"https://git.reauktion.de/marfrit/libva-v4l2-request-fourier/archive/${UPSTREAM_COMMIT}.tar.gz"
|
||
tar xzf libva-fourier.tar.gz
|
||
SRCDIR=$(echo libva-v4l2-request-fourier)
|
||
|
||
cd "$SRCDIR"
|
||
meson setup build \
|
||
--buildtype=release \
|
||
--prefix=/usr \
|
||
--libdir=lib/aarch64-linux-gnu \
|
||
-Db_lto=false
|
||
meson compile -C build
|
||
|
||
# ---------------------------------------------------------------------------
|
||
# ABI sanity check: the produced .so MUST export __vaDriverInit_1_<MINOR>
|
||
# matching the install target's libva runtime. Build is expected to run on
|
||
# a Debian trixie runner where <va/va.h>'s VA_MINOR is 22 — see
|
||
# .gitea/workflows/build.yml (runs-on: actrunner-debian-aarch64-bohr). If a future
|
||
# runner change lands the build on a host with a different libva-dev
|
||
# version, the produced symbol won't bind on the install target and ffmpeg/
|
||
# vainfo/firefox-vaapi will all fail with "has no function
|
||
# __vaDriverInit_1_0". Fail loud at build time instead of shipping a
|
||
# silently-broken .deb (which is what happened in -1).
|
||
# ---------------------------------------------------------------------------
|
||
SO=$(find build -name 'v4l2_request_drv_video.so' | head -1)
|
||
if ! nm -D --defined-only "$SO" | grep -q '__vaDriverInit_1_22'; then
|
||
echo "FATAL: built driver does not export __vaDriverInit_1_22."
|
||
echo " Build host's <va/va.h> VA_MINOR_VERSION is likely != 22."
|
||
echo " Expected runner: actrunner-debian-aarch64-bohr (trixie, libva 2.22)."
|
||
echo " Symbol exports found:"
|
||
nm -D --defined-only "$SO" | grep -i vadriverinit || echo " (none)"
|
||
exit 1
|
||
fi
|
||
echo "ABI check: $SO exports __vaDriverInit_1_22 (matches trixie libva 2.22)"
|
||
|
||
ROOT="$work/pkgroot"
|
||
DESTDIR="$ROOT" meson install -C build
|
||
|
||
# Strip any non-package debug, then drop dependencies + control.
|
||
install -Dm644 "$HERE/debian/copyright" "$ROOT/usr/share/doc/libva-v4l2-request-fourier/copyright"
|
||
install -Dm644 "$HERE/debian/changelog" "$ROOT/usr/share/doc/libva-v4l2-request-fourier/changelog.Debian"
|
||
gzip -9 -n "$ROOT/usr/share/doc/libva-v4l2-request-fourier/changelog.Debian"
|
||
|
||
mkdir -p "$ROOT/DEBIAN"
|
||
cat > "$ROOT/DEBIAN/control" <<EOF
|
||
Package: libva-v4l2-request-fourier
|
||
Version: ${PKGVER}-${PKGREL}
|
||
Section: libs
|
||
Priority: optional
|
||
Architecture: arm64
|
||
Depends: libva2, libdrm2
|
||
Conflicts: libva-v4l2-request
|
||
Replaces: libva-v4l2-request
|
||
Provides: libva-driver, libva-v4l2-request (= ${PKGVER}-${PKGREL})
|
||
Maintainer: Markus Fritsche <mfritsche@reauktion.de>
|
||
Homepage: https://git.reauktion.de/marfrit/libva-v4l2-request-fourier
|
||
Description: VA-API backend for V4L2 stateless decoders (fourier fork)
|
||
LibVA implementation for the Linux Video4Linux2 Request API, multiplanar
|
||
fork of bootlin/libva-v4l2-request. Drives rkvdec / hantro / cedrus /
|
||
rpi-hevc-dec / daedalus_v4l2 stateless decoders for H.264, HEVC, VP8,
|
||
VP9, AV1, and MPEG-2.
|
||
.
|
||
Auto-detected by VAAPI consumers (ffmpeg -hwaccel vaapi, mpv --hwdec=vaapi,
|
||
Firefox VAAPI accel) when LIBVA_DRIVER_NAME=v4l2_request is set.
|
||
EOF
|
||
|
||
DEB_OUT="libva-v4l2-request-fourier_${PKGVER}-${PKGREL}_arm64.deb"
|
||
dpkg-deb --root-owner-group --build "$ROOT" "$HERE/$DEB_OUT"
|
||
echo "built: $HERE/$DEB_OUT"
|