#!/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. 2860d75 = PR #14 merge "picture: # bounds-check codec_store_buffer slice writes against source_size # (#13)" — guards the three append sites in codec_store_buffer's # VASliceDataBufferType branch (H.264 Annex-B start code, VP8 # uncompressed-header pad, slice payload) against the OUTPUT pool # slot's fixed sizeimage; returns VA_STATUS_ERROR_ALLOCATION_FAILED # with a request_log line instead of memcpy'ing past the mmap on a # resolution upshift mid-stream. Fixes a SIGSEGV in mpv # --hwdec=vaapi-copy and a heap-corruption hazard in Firefox RDD. # The root-cause refactor (re-init OUTPUT pool / re-create surfaces # on resolution change, or grow source_data on demand) is tracked # as the follow-up backlog item; this is the memory-safety floor. # # Prior pin (77f9236) = PR #12 merge — av1_set_controls # (V4L2_CID_STATELESS_AV1_SEQUENCE for the daedalus daemon track). UPSTREAM_COMMIT=2860d75afe6a8e34df6afb508ff85c822bf9e908 PKGVER=1.0.0+r388+g2860d75 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"