diff --git a/arch/daedalus-v4l2/PKGBUILD b/arch/daedalus-v4l2/PKGBUILD new file mode 100644 index 0000000000..3e146f1f6a --- /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 +}