diff --git a/arch/daedalus-v4l2-dkms/PKGBUILD b/arch/daedalus-v4l2-dkms/PKGBUILD new file mode 100644 index 000000000..963f6a74d --- /dev/null +++ b/arch/daedalus-v4l2-dkms/PKGBUILD @@ -0,0 +1,68 @@ +# Maintainer: Markus Fritsche +# +# daedalus-v4l2-dkms — DKMS package for the daedalus_v4l2 out-of-tree +# kernel module (V4L2 stateless decoder shim for Pi 5 / CM5). +# +# Pair to daedalus-v4l2 (userspace daemon). When loaded, the module +# registers /dev/videoNN (V4L2 m2m) + /dev/mediaNN (media controller) + +# /dev/daedalus-v4l2 (chardev to the userspace daemon). Userspace +# clients drive the V4L2 m2m + request API path; the daemon does the +# actual FFmpeg-backed decode on /dev/daedalus-v4l2. +# +# Project: https://git.reauktion.de/reauktion/daedalus-v4l2 +# Sibling userspace package: daedalus-v4l2 +# Sibling consumer: libva-v4l2-request-fourier + +pkgname=daedalus-v4l2-dkms +_module=daedalus_v4l2 + +# Same pin as arch/daedalus-v4l2 — keep kernel module + daemon +# bit-versioned together so the chardev wire protocol stays in sync. +_commit=f04d7000f858fe51d867aba14a529d3aef4fbd54 + +pkgver=0.1.0.r15.f04d700 +pkgrel=1 +pkgdesc="V4L2 stateless decoder shim kernel module (DKMS) — Pi 5 / CM5" +arch=('any') +url="https://git.reauktion.de/reauktion/daedalus-v4l2" +license=('GPL-2.0-or-later') +depends=('dkms') +makedepends=('git') + +source=("git+https://git.reauktion.de/reauktion/daedalus-v4l2.git#commit=${_commit}" + "dkms.conf") +sha256sums=('SKIP' + 'SKIP') + +pkgver() { + cd "${srcdir}/daedalus-v4l2" + printf '0.1.0.r%s.%s' \ + "$(git rev-list --count HEAD)" \ + "$(git rev-parse --short=7 HEAD)" +} + +package() { + local _src="${pkgdir}/usr/src/${_module}-${pkgver}" + + install -dm755 "${_src}" + + # Install the kernel/ subdir and embed the shared proto header in + # the same tree. The in-tree Makefile uses + # `ccflags-y += -I$(src)/../include` (assuming the parent + # daedalus-v4l2 layout); for DKMS we flatten by copying the header + # into kernel/include/ and patching the Makefile to point there. + cp -r "${srcdir}/daedalus-v4l2/kernel/." "${_src}/" + install -Dm644 "${srcdir}/daedalus-v4l2/include/daedalus_v4l2_proto.h" \ + "${_src}/include/daedalus_v4l2_proto.h" + sed -i 's|-I\$(src)/\.\./include|-I$(src)/include|' "${_src}/Makefile" + + # dkms.conf at the root of the source tree (DKMS convention). + # Substitute #MODULE_VERSION# placeholder with the actual pkgver + # so dkms install/uninstall match what's on disk. + install -Dm644 "${srcdir}/dkms.conf" "${_src}/dkms.conf" + sed -i "s/#MODULE_VERSION#/${pkgver}/" "${_src}/dkms.conf" + + # License + install -Dm644 "${srcdir}/daedalus-v4l2/kernel/daedalus_v4l2_main.c" \ + "${pkgdir}/usr/share/licenses/${pkgname}/SPDX-HEADER" +} diff --git a/arch/daedalus-v4l2-dkms/dkms.conf b/arch/daedalus-v4l2-dkms/dkms.conf new file mode 100644 index 000000000..607c28c33 --- /dev/null +++ b/arch/daedalus-v4l2-dkms/dkms.conf @@ -0,0 +1,19 @@ +# DKMS configuration for daedalus_v4l2 — V4L2 stateless decoder shim. +# +# Built against /lib/modules/$kernelver/build with the in-tree Makefile. +# The Makefile uses `obj-m := daedalus_v4l2.o` and links +# daedalus_v4l2_main.o + daedalus_v4l2_chardev.o into the final .ko. + +PACKAGE_NAME="daedalus_v4l2" +PACKAGE_VERSION="#MODULE_VERSION#" + +# Single module produced by the Makefile. +BUILT_MODULE_NAME[0]="daedalus_v4l2" +DEST_MODULE_LOCATION[0]="/updates" + +# Use the package's own Makefile — it already does +# `$(MAKE) -C $(KERNELDIR) M=$(PWD) modules`. +MAKE[0]="make KERNELDIR=/lib/modules/${kernelver}/build all" +CLEAN="make KERNELDIR=/lib/modules/${kernelver}/build clean" + +AUTOINSTALL="yes" diff --git a/arch/daedalus-v4l2/PKGBUILD b/arch/daedalus-v4l2/PKGBUILD new file mode 100644 index 000000000..3e146f1f6 --- /dev/null +++ b/arch/daedalus-v4l2/PKGBUILD @@ -0,0 +1,105 @@ +# Maintainer: Markus Fritsche +# +# daedalus-v4l2 — userspace daemon + V4L2 m2m test tools. +# +# Pair to daedalus-v4l2-dkms (kernel module). Together they expose +# /dev/videoNN + /dev/mediaNN as a V4L2 stateless decoder shim on Pi 5 / +# CM5, decoding VP9 / AV1 / H.264 via dlopen'd FFmpeg in a single- +# threaded daemon and shipping decoded NV12 / P010 back through dmabuf. +# Consumed end-to-end by libva-v4l2-request-fourier (>= 1.0.0.r376) so +# `ffmpeg -hwaccel vaapi` against vp9_small.ivf produces byte-exact NV12. +# +# Project: https://git.reauktion.de/reauktion/daedalus-v4l2 +# Sibling kernel package: daedalus-v4l2-dkms +# Sibling consumer: libva-v4l2-request-fourier + +pkgname=daedalus-v4l2 +_upstreampkg=daedalus-v4l2 + +# Pin the daedalus-v4l2 tip. f04d700 = "Phase 8.13: byte-exact end-to- +# end via libva (consumer target hit)" — first commit where the full +# ffmpeg -hwaccel vaapi → libva → /dev/video0 → daemon path lands a +# pixel-correct decoded frame back in ffmpeg. Promote to a later pin +# only after a future phase closes cleanly. +_commit=f04d7000f858fe51d867aba14a529d3aef4fbd54 + +# 0.1.0 (pre-1.0) + commit count + short sha. Bump the .Y on each +# Phase 8.x close. pkgver() recomputes at build time. +pkgver=0.1.0.r15.f04d700 +pkgrel=1 +pkgdesc="Userspace daemon for the daedalus-v4l2 V4L2 stateless decoder shim (VP9/AV1/H.264 on Pi 5 / CM5)" +arch=('aarch64') +url="https://git.reauktion.de/reauktion/daedalus-v4l2" +license=('BSD-2-Clause' 'GPL-2.0-or-later') +# Daemon dlopens libavformat.so.61 / libavcodec.so.61 / libavutil.so.59 +# at runtime (Option γ — see daemon/src/ffmpeg_loader.h). ffmpeg +# provides those; we don't link them. +depends=('ffmpeg' 'libdrm') +# Headers from libav*-dev needed at compile time for type-safe function +# pointer signatures; pkg-config locates them. +makedepends=('cmake' 'ninja' 'pkgconf' 'git' 'ffmpeg') +optdepends=('daedalus-v4l2-dkms: kernel module providing /dev/video0 + /dev/daedalus-v4l2' + 'libva-v4l2-request-fourier: VA-API consumer routing through this daemon') + +source=("git+https://git.reauktion.de/reauktion/daedalus-v4l2.git#commit=${_commit}") +sha256sums=('SKIP') + +pkgver() { + cd "${srcdir}/${_upstreampkg}" + printf '0.1.0.r%s.%s' \ + "$(git rev-list --count HEAD)" \ + "$(git rev-parse --short=7 HEAD)" +} + +build() { + cd "${srcdir}/${_upstreampkg}/daemon" + cmake -B build -G Ninja \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=/usr + cmake --build build + + cd "${srcdir}/${_upstreampkg}/tools" + make +} + +package() { + cd "${srcdir}/${_upstreampkg}" + + # Daemon binary + install -Dm755 daemon/build/daedalus_v4l2_daemon \ + "${pkgdir}/usr/bin/daedalus_v4l2_daemon" + + # Test tools (under /usr/libexec to keep them out of the default PATH + # — they're for verification, not daily use). + install -Dm755 tools/test_chardev_pingpong \ + "${pkgdir}/usr/libexec/daedalus-v4l2/test_chardev_pingpong" + install -Dm755 tools/test_m2m_decode \ + "${pkgdir}/usr/libexec/daedalus-v4l2/test_m2m_decode" + install -Dm755 tools/test_m2m_stream \ + "${pkgdir}/usr/libexec/daedalus-v4l2/test_m2m_stream" + + # Shared wire-protocol header (kernel ↔ daemon); useful for + # third-party clients of the chardev. + install -Dm644 include/daedalus_v4l2_proto.h \ + "${pkgdir}/usr/include/daedalus_v4l2_proto.h" + + # Documentation + install -Dm644 README.md \ + "${pkgdir}/usr/share/doc/${pkgname}/README.md" + for d in docs/*.md; do + install -Dm644 "$d" "${pkgdir}/usr/share/doc/${pkgname}/$(basename "$d")" + done + + # Licenses: BSD-2-Clause for daemon/tools, GPL for the kernel proto + # header; the SPDX headers in src/ are the canonical declaration but + # ship a short note here for package-manager-driven license queries. + install -dm755 "${pkgdir}/usr/share/licenses/${pkgname}" + cat > "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE" <<'EOF' +daedalus-v4l2 userspace components are BSD-2-Clause licensed. +The shared kernel↔daemon wire protocol header +(/usr/include/daedalus_v4l2_proto.h) is GPL-2.0-or-later WITH +Linux-syscall-note for kernel-side compatibility. See SPDX +headers on individual source files for the canonical +per-file declaration. +EOF +} diff --git a/arch/libva-v4l2-request-fourier/PKGBUILD b/arch/libva-v4l2-request-fourier/PKGBUILD index 32bdcc016..56a1772c8 100644 --- a/arch/libva-v4l2-request-fourier/PKGBUILD +++ b/arch/libva-v4l2-request-fourier/PKGBUILD @@ -23,20 +23,26 @@ pkgname=libva-v4l2-request-fourier _upstreampkg=libva-v4l2-request -# Pin the fork tip. 7ac934e = "iter38b: bounds check uses MAX_PROFILES -# (11), not MAX_CONFIG_ATTRIBUTES (10)" — fresnel-fourier campaign -# production tip 2026-05-14, sibling iter38 added multi-device probe so -# a single libva session serves rkvdec + hantro without requiring -# LIBVA_V4L2_REQUEST_VIDEO_PATH overrides. Promote to a later pin only -# after a future iteration closes cleanly. -_commit=7ac934e0c5420814c7a5fc3e2a2f08251d590d9e +# Pin the fork tip. de27e95 = "v4l2: log error_idx + failing ctrl id +# on S_EXT_CTRLS failure" — Phase 8.13 diagnostic that surfaced the +# real root cause of the libva→daedalus_v4l2 request-completion +# timeout (turned out the EINVAL libva was logging was a harmless +# H264/HEVC probe; actual VP9 stateless control SET worked all along). +# +# Prior pin (7ac934e) was iter38b — fresnel-fourier multi-device probe +# + MAX_PROFILES bounds-check fix. de27e95 adds the daedalus_v4l2 +# probe slot (b5b3acf), the meson option gate (2146341), and the +# S_EXT_CTRLS diagnostic (de27e95 itself). Backward-compatible on +# rkvdec / hantro / cedrus / rpi-hevc-dec hosts — daedalus probe is +# off by default unless the kernel module is present. +_commit=de27e95571b67ef34619c23a12db4698f9b3454e # Project version from meson.build (1.0.0) + commit count + short sha, # matching the ffmpeg-v4l2-request-fourier convention. Recomputed at # build time by pkgver() below; the static value here is a placeholder # so AUR-style consumers see something coherent before src/ exists. -pkgver=1.0.0.r348.7ac934e -pkgrel=2 +pkgver=1.0.0.r376.de27e95 +pkgrel=1 pkgdesc="VA-API backend for V4L2 stateless decoders (multiplanar fork — fourier umbrella)" arch=('aarch64') url="https://git.reauktion.de/marfrit/libva-v4l2-request-fourier" diff --git a/debian/daedalus-v4l2-dkms/build-deb.sh b/debian/daedalus-v4l2-dkms/build-deb.sh new file mode 100755 index 000000000..c027e0395 --- /dev/null +++ b/debian/daedalus-v4l2-dkms/build-deb.sh @@ -0,0 +1,131 @@ +#!/bin/bash +# Build daedalus-v4l2-dkms__all.deb (kernel module via DKMS). +# +# Installs kernel/ source tree to /usr/src/daedalus_v4l2-${PKGVER}/ +# plus a dkms.conf. Postinst registers with DKMS (dkms add + build + +# install). Prerm deregisters. Result: the daedalus_v4l2 module +# auto-rebuilds against any installed kernel headers without users +# needing to remember to dkms-add it. +# +# Architecture: all. The kernel module itself is per-kernel-version, +# but the SOURCE package is arch-independent. +# +# Sibling Arch package: ../../arch/daedalus-v4l2-dkms/PKGBUILD +# Sibling userspace package: ../daedalus-v4l2/build-deb.sh +set -euo pipefail + +UPSTREAM_COMMIT=f04d7000f858fe51d867aba14a529d3aef4fbd54 +PKGVER=0.1.0+r15+gf04d700 +PKGREL=1 +MODULE_NAME=daedalus_v4l2 + +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 -sSLfo daedalus-v4l2.tar.gz \ + "https://git.reauktion.de/reauktion/daedalus-v4l2/archive/${UPSTREAM_COMMIT}.tar.gz" +tar xzf daedalus-v4l2.tar.gz +SRCDIR=daedalus-v4l2 + +ROOT="$work/pkgroot" +SRCROOT="$ROOT/usr/src/${MODULE_NAME}-${PKGVER}" + +mkdir -p "$SRCROOT/include" \ + "$ROOT/DEBIAN" \ + "$ROOT/usr/share/doc/daedalus-v4l2-dkms" + +# Copy kernel/ source files to the DKMS source dir. +cp -r "$work/$SRCDIR/kernel/." "$SRCROOT/" + +# Embed the shared protocol header inline (rather than referencing +# ../include/ which doesn't exist after DKMS extracts the tree). +# Patch the Makefile to find it at $SRCROOT/include/ instead. +install -m 644 "$work/$SRCDIR/include/daedalus_v4l2_proto.h" \ + "$SRCROOT/include/daedalus_v4l2_proto.h" +sed -i 's|-I\$(src)/\.\./include|-I$(src)/include|' "$SRCROOT/Makefile" + +# Generate dkms.conf with the actual version substituted. +cat > "$SRCROOT/dkms.conf" < "$ROOT/DEBIAN/postinst" </dev/null 2>&1; then + dkms add "\$NAME/\$VERSION" 2>/dev/null || true + dkms autoinstall "\$NAME/\$VERSION" || true +fi + +#DEBHELPER# +EOF +chmod 755 "$ROOT/DEBIAN/postinst" + +cat > "$ROOT/DEBIAN/prerm" </dev/null 2>&1; then + dkms remove "\$NAME/\$VERSION" --all || true +fi + +#DEBHELPER# +EOF +chmod 755 "$ROOT/DEBIAN/prerm" + +cat > "$ROOT/DEBIAN/control" <= 2.1.0.0) +Recommends: daedalus-v4l2, linux-headers-generic | linux-headers +Maintainer: Markus Fritsche +Homepage: https://git.reauktion.de/reauktion/daedalus-v4l2 +Description: V4L2 stateless decoder shim kernel module (DKMS) — Pi 5 / CM5 + Out-of-tree V4L2 m2m kernel module for the daedalus-v4l2 stack on + Raspberry Pi 5 / CM5. Registers /dev/videoNN (V4L2 stateless m2m + decoder), /dev/mediaNN (media controller with request API), and + /dev/daedalus-v4l2 (chardev bridge to the userspace daemon). + . + The actual decode happens in the userspace daemon shipped by the + daedalus-v4l2 package — this module is just the kernel-side V4L2 + plumbing. Install both to actually serve VAAPI / V4L2 clients. + . + Built via DKMS against the running kernel's headers. +EOF + +DEB_OUT="daedalus-v4l2-dkms_${PKGVER}-${PKGREL}_all.deb" +dpkg-deb --root-owner-group --build "$ROOT" "$HERE/$DEB_OUT" +echo "built: $HERE/$DEB_OUT" diff --git a/debian/daedalus-v4l2-dkms/debian/changelog b/debian/daedalus-v4l2-dkms/debian/changelog new file mode 100644 index 000000000..26c83642f --- /dev/null +++ b/debian/daedalus-v4l2-dkms/debian/changelog @@ -0,0 +1,11 @@ +daedalus-v4l2-dkms (0.1.0+r15+gf04d700-1) bookworm trixie; urgency=medium + + * Initial Debian DKMS packaging for the daedalus_v4l2 kernel module. + * Pinned to f04d700 (Phase 8.13 close): kernel-side framework + integration (V4L2 m2m, dmabuf-export, media controller, request + API, NV12 single-plane + NV12M + P010 CAPTURE) that closes the + libva→/dev/video0→daemon round-trip with byte-exact pixels. + * Auto-builds via DKMS against the running kernel's headers. + * Companion userspace package: daedalus-v4l2 (daemon + tools). + + -- Markus Fritsche Mon, 18 May 2026 23:00:00 +0000 diff --git a/debian/daedalus-v4l2-dkms/debian/control b/debian/daedalus-v4l2-dkms/debian/control new file mode 100644 index 000000000..15ff67b35 --- /dev/null +++ b/debian/daedalus-v4l2-dkms/debian/control @@ -0,0 +1,24 @@ +Source: daedalus-v4l2-dkms +Section: kernel +Priority: optional +Maintainer: Markus Fritsche +Build-Depends: debhelper-compat (= 13) +Standards-Version: 4.6.2 +Homepage: https://git.reauktion.de/reauktion/daedalus-v4l2 + +Package: daedalus-v4l2-dkms +Architecture: all +Depends: ${misc:Depends}, dkms (>= 2.1.0.0) +Recommends: daedalus-v4l2, + linux-headers-generic | linux-headers +Description: V4L2 stateless decoder shim kernel module (DKMS) — Pi 5 / CM5 + Out-of-tree V4L2 m2m kernel module for the daedalus-v4l2 stack on + Raspberry Pi 5 / CM5. Registers /dev/videoNN (V4L2 stateless m2m + decoder), /dev/mediaNN (media controller with request API), and + /dev/daedalus-v4l2 (chardev bridge to the userspace daemon). + . + The actual decode happens in the userspace daemon shipped by the + daedalus-v4l2 package — this module is just the kernel-side V4L2 + plumbing. Install both to actually serve VAAPI / V4L2 clients. + . + Built via DKMS against the running kernel's headers. diff --git a/debian/daedalus-v4l2-dkms/debian/copyright b/debian/daedalus-v4l2-dkms/debian/copyright new file mode 100644 index 000000000..9870f0236 --- /dev/null +++ b/debian/daedalus-v4l2-dkms/debian/copyright @@ -0,0 +1,21 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: daedalus-v4l2 +Upstream-Contact: Markus Fritsche +Source: https://git.reauktion.de/reauktion/daedalus-v4l2 + +Files: * +Copyright: 2026 Markus Fritsche +License: GPL-2.0-or-later +Comment: + Kernel module (loadable into the Linux kernel) — GPL-2.0-or-later. + The shared protocol header carries an additional Linux-syscall-note + exception so userspace inclusion is BSD-clean. + +License: GPL-2.0-or-later + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + . + On Debian systems, the complete text of the GNU General Public + License v2 can be found in `/usr/share/common-licenses/GPL-2'. diff --git a/debian/daedalus-v4l2/build-deb.sh b/debian/daedalus-v4l2/build-deb.sh new file mode 100755 index 000000000..e195c20dc --- /dev/null +++ b/debian/daedalus-v4l2/build-deb.sh @@ -0,0 +1,106 @@ +#!/bin/bash +# Build daedalus-v4l2__arm64.deb (userspace daemon + test tools). +# +# Mirrors arch/daedalus-v4l2 (Arch Linux build). The companion DKMS +# package (debian/daedalus-v4l2-dkms) carries the kernel module +# separately so apt/dpkg can split kernel-version-tied and userspace +# upgrade cadence. +# +# Sibling Arch package: ../../arch/daedalus-v4l2/PKGBUILD +# Sibling DKMS package: ../daedalus-v4l2-dkms/build-deb.sh +# Upstream repo: https://git.reauktion.de/reauktion/daedalus-v4l2 +set -euo pipefail + +# Same pin as the Arch PKGBUILD. f04d700 = "Phase 8.13: byte-exact +# end-to-end via libva (consumer target hit)" — first commit where the +# full ffmpeg -hwaccel vaapi → libva → /dev/video0 → daemon path lands +# a pixel-correct decoded frame back in ffmpeg. +UPSTREAM_COMMIT=f04d7000f858fe51d867aba14a529d3aef4fbd54 +PKGVER=0.1.0+r15+gf04d700 +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 -sSLfo daedalus-v4l2.tar.gz \ + "https://git.reauktion.de/reauktion/daedalus-v4l2/archive/${UPSTREAM_COMMIT}.tar.gz" +tar xzf daedalus-v4l2.tar.gz +SRCDIR=daedalus-v4l2 + +# Build daemon (CMake) +cd "$SRCDIR/daemon" +cmake -B build -G Ninja \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=/usr +cmake --build build + +# Build test tools (in-tree Makefile) +cd "$work/$SRCDIR/tools" +make + +# Stage +ROOT="$work/pkgroot" +mkdir -p "$ROOT/DEBIAN" \ + "$ROOT/usr/bin" \ + "$ROOT/usr/libexec/daedalus-v4l2" \ + "$ROOT/usr/include" \ + "$ROOT/usr/share/doc/daedalus-v4l2" + +install -m 755 "$work/$SRCDIR/daemon/build/daedalus_v4l2_daemon" \ + "$ROOT/usr/bin/daedalus_v4l2_daemon" + +install -m 755 "$work/$SRCDIR/tools/test_chardev_pingpong" \ + "$ROOT/usr/libexec/daedalus-v4l2/test_chardev_pingpong" +install -m 755 "$work/$SRCDIR/tools/test_m2m_decode" \ + "$ROOT/usr/libexec/daedalus-v4l2/test_m2m_decode" +install -m 755 "$work/$SRCDIR/tools/test_m2m_stream" \ + "$ROOT/usr/libexec/daedalus-v4l2/test_m2m_stream" + +install -m 644 "$work/$SRCDIR/include/daedalus_v4l2_proto.h" \ + "$ROOT/usr/include/daedalus_v4l2_proto.h" + +install -m 644 "$work/$SRCDIR/README.md" \ + "$ROOT/usr/share/doc/daedalus-v4l2/README.md" +for d in "$work/$SRCDIR/docs/"*.md; do + install -m 644 "$d" "$ROOT/usr/share/doc/daedalus-v4l2/$(basename "$d")" +done + +install -Dm644 "$HERE/debian/copyright" "$ROOT/usr/share/doc/daedalus-v4l2/copyright" +install -Dm644 "$HERE/debian/changelog" "$ROOT/usr/share/doc/daedalus-v4l2/changelog.Debian" +gzip -9 -n "$ROOT/usr/share/doc/daedalus-v4l2/changelog.Debian" + +cat > "$ROOT/DEBIAN/control" <= 7.1), libdrm2 +Recommends: daedalus-v4l2-dkms +Maintainer: Markus Fritsche +Homepage: https://git.reauktion.de/reauktion/daedalus-v4l2 +Description: Userspace daemon for the daedalus_v4l2 stateless decoder shim + daedalus-v4l2 ships the userspace daemon that backs the daedalus_v4l2 + out-of-tree V4L2 kernel module on Raspberry Pi 5 / CM5. Together they + expose /dev/videoNN + /dev/mediaNN as a V4L2 stateless decoder for + VP9, AV1, and H.264 — actual decoding happens in this single-threaded + daemon via dlopen'd FFmpeg, with decoded NV12 / P010 frames shipped + back through dmabuf. + . + Consumed end-to-end by libva-v4l2-request-fourier (>= 1.0.0+r376) so + that 'ffmpeg -hwaccel vaapi' against vp9_small.ivf produces a + byte-exact NV12 frame. + . + The kernel module ships separately in daedalus-v4l2-dkms; install + both to actually serve V4L2 clients. +EOF + +DEB_OUT="daedalus-v4l2_${PKGVER}-${PKGREL}_arm64.deb" +dpkg-deb --root-owner-group --build "$ROOT" "$HERE/$DEB_OUT" +echo "built: $HERE/$DEB_OUT" diff --git a/debian/daedalus-v4l2/debian/changelog b/debian/daedalus-v4l2/debian/changelog new file mode 100644 index 000000000..680fd670a --- /dev/null +++ b/debian/daedalus-v4l2/debian/changelog @@ -0,0 +1,13 @@ +daedalus-v4l2 (0.1.0+r15+gf04d700-1) bookworm trixie; urgency=medium + + * Initial Debian packaging for the daedalus-v4l2 userspace daemon. + * Pinned to f04d700 (Phase 8.13 close): first commit where the full + ffmpeg -hwaccel vaapi → libva-v4l2-request-fourier → /dev/video0 + → daemon path lands a pixel-correct decoded NV12 frame back in + ffmpeg. + * Codecs: VP9, AV1, H.264 (all via dlopen'd FFmpeg 7.1.3). + * Capture formats: NV12M (2 plane), NV12 (1 plane, for libva), + P010 (10-bit single plane). + * Companion package: daedalus-v4l2-dkms (kernel module). + + -- Markus Fritsche Mon, 18 May 2026 23:00:00 +0000 diff --git a/debian/daedalus-v4l2/debian/control b/debian/daedalus-v4l2/debian/control new file mode 100644 index 000000000..72ec51ae8 --- /dev/null +++ b/debian/daedalus-v4l2/debian/control @@ -0,0 +1,34 @@ +Source: daedalus-v4l2 +Section: video +Priority: optional +Maintainer: Markus Fritsche +Build-Depends: debhelper-compat (= 13), + cmake, + ninja-build, + pkg-config, + libavformat-dev (>= 7.1), + libavcodec-dev (>= 7.1), + libavutil-dev (>= 7.1) +Standards-Version: 4.6.2 +Homepage: https://git.reauktion.de/reauktion/daedalus-v4l2 + +Package: daedalus-v4l2 +Architecture: arm64 +Depends: ${misc:Depends}, ${shlibs:Depends}, + ffmpeg (>= 7.1), + libdrm2 +Recommends: daedalus-v4l2-dkms +Description: Userspace daemon for the daedalus_v4l2 stateless decoder shim + daedalus-v4l2 ships the userspace daemon that backs the daedalus_v4l2 + out-of-tree V4L2 kernel module on Raspberry Pi 5 / CM5. Together they + expose /dev/videoNN + /dev/mediaNN as a V4L2 stateless decoder for + VP9, AV1, and H.264 — actual decoding happens in this single-threaded + daemon via dlopen'd FFmpeg, with decoded NV12 / P010 frames shipped + back through dmabuf. + . + Consumed end-to-end by libva-v4l2-request-fourier (>= 1.0.0+r376) so + that 'ffmpeg -hwaccel vaapi' against vp9_small.ivf produces a + byte-exact NV12 frame. + . + The kernel module ships separately in daedalus-v4l2-dkms; install + both to actually serve V4L2 clients. diff --git a/debian/daedalus-v4l2/debian/copyright b/debian/daedalus-v4l2/debian/copyright new file mode 100644 index 000000000..90650d0ae --- /dev/null +++ b/debian/daedalus-v4l2/debian/copyright @@ -0,0 +1,40 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: daedalus-v4l2 +Upstream-Contact: Markus Fritsche +Source: https://git.reauktion.de/reauktion/daedalus-v4l2 + +Files: * +Copyright: 2026 Markus Fritsche +License: BSD-2-Clause + +Files: include/daedalus_v4l2_proto.h +Copyright: 2026 Markus Fritsche +License: GPL-2.0-or-later WITH Linux-syscall-note +Comment: + Shared kernel↔daemon wire-protocol header. GPL-2.0-or-later (matches + the kernel module that includes it) with the standard + Linux-syscall-note exception so userspace inclusion is BSD-clean. + +License: BSD-2-Clause + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + . + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + . + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES ARE DISCLAIMED. + +License: GPL-2.0-or-later + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + . + On Debian systems, the complete text of the GNU General Public + License v2 can be found in `/usr/share/common-licenses/GPL-2'. diff --git a/debian/libva-v4l2-request-fourier/build-deb.sh b/debian/libva-v4l2-request-fourier/build-deb.sh new file mode 100755 index 000000000..a3931ec54 --- /dev/null +++ b/debian/libva-v4l2-request-fourier/build-deb.sh @@ -0,0 +1,74 @@ +#!/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. de27e95 = "v4l2: log error_idx + +# failing ctrl id on S_EXT_CTRLS failure" (Phase 8.13 diagnostic). +UPSTREAM_COMMIT=de27e95571b67ef34619c23a12db4698f9b3454e +PKGVER=1.0.0+r376+gde27e95 +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 -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 + +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" diff --git a/debian/libva-v4l2-request-fourier/debian/changelog b/debian/libva-v4l2-request-fourier/debian/changelog new file mode 100644 index 000000000..fcb6873df --- /dev/null +++ b/debian/libva-v4l2-request-fourier/debian/changelog @@ -0,0 +1,15 @@ +libva-v4l2-request-fourier (1.0.0+r376+gde27e95-1) bookworm trixie; urgency=medium + + * Initial Debian packaging (sibling to existing + arch/libva-v4l2-request-fourier). + * Pinned to fork tip de27e95: "v4l2: log error_idx + failing ctrl id + on S_EXT_CTRLS failure" — Phase 8.13 diagnostic that surfaced the + real root cause of the libva→daedalus_v4l2 request-completion + timeout. + * Includes daedalus_v4l2 probe slot (b5b3acf) and meson option gate + (2146341) for the Pi 5 daemon-backed decoder shim. + * Backward-compatible on rkvdec / hantro / cedrus / rpi-hevc-dec + hosts — daedalus probe is off by default unless the kernel module + is present. + + -- Markus Fritsche Mon, 18 May 2026 23:00:00 +0000 diff --git a/debian/libva-v4l2-request-fourier/debian/control b/debian/libva-v4l2-request-fourier/debian/control new file mode 100644 index 000000000..6389b9baf --- /dev/null +++ b/debian/libva-v4l2-request-fourier/debian/control @@ -0,0 +1,27 @@ +Source: libva-v4l2-request-fourier +Section: libs +Priority: optional +Maintainer: Markus Fritsche +Build-Depends: debhelper-compat (= 13), + libva-dev, + libdrm-dev, + meson (>= 0.43), + ninja-build, + pkg-config +Standards-Version: 4.6.2 +Homepage: https://git.reauktion.de/marfrit/libva-v4l2-request-fourier + +Package: libva-v4l2-request-fourier +Architecture: arm64 +Depends: ${misc:Depends}, ${shlibs:Depends}, libva2, libdrm2 +Conflicts: libva-v4l2-request +Replaces: libva-v4l2-request +Provides: libva-driver, libva-v4l2-request (= ${binary:Version}) +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. diff --git a/debian/libva-v4l2-request-fourier/debian/copyright b/debian/libva-v4l2-request-fourier/debian/copyright new file mode 100644 index 000000000..684dc8dca --- /dev/null +++ b/debian/libva-v4l2-request-fourier/debian/copyright @@ -0,0 +1,38 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: libva-v4l2-request-fourier +Upstream-Contact: Markus Fritsche +Source: https://git.reauktion.de/marfrit/libva-v4l2-request-fourier +Comment: + Fork of bootlin/libva-v4l2-request with multi-codec / multi-device + enhancements for the fourier campaign (RK3399 / RK3588 / RK3566 / BCM2712). + Per-file SPDX headers are the canonical declaration; this summary + covers the aggregate. + +Files: * +Copyright: 2018 Paul Kocialkowski + 2018-2026 The libva-v4l2-request authors + 2024-2026 Markus Fritsche +License: LGPL-2.1+ or MIT + +License: LGPL-2.1+ + This package is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + . + On Debian systems, the complete text of the GNU Lesser General + Public License v2.1 can be found in `/usr/share/common-licenses/LGPL-2.1'. + +License: MIT + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject + to the following conditions: + . + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + . + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND.