#!/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. 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_ # 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"