#!/bin/bash # Build libva-v4l2-request-fourier__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. c1bb444 = PR #9 merge "h264: # max_num_ref_frames fallback + libva-boundary instrumentation (#8)" — # addresses the libva-side portion of marfrit/libva-v4l2-request-fourier#8. # The daedalus_v4l2-via-libavcodec strict consumer rejected frames whose # sps.max_num_ref_frames was 0 (older ffmpeg-vaapi paths leave the field # unset and HW decoders tolerated it). PR adds a per-profile spec # minimum fallback (counts valid DPB entries first; 1 for baseline / 4 # for main+high if even that is 0) and a one-line request_log at # h264_set_controls entry dumping raw VAAPI bitfields for diagnosing # the still-open PPS-flag-zero portion of issue #8. # # Prior pin (9898331) was the LIBVA-2 close — config-side # video_fd_daedalus added to the profile enumeration probe array. UPSTREAM_COMMIT=c1bb444d0731ca7ca831c7e01ec4b52ed736ca8e PKGVER=1.0.0+r382+gc1bb444 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_ # matching the install target's libva runtime. Build is expected to run on # a Debian trixie runner where '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_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" < 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"