Files
daedalus-v4l2/README.md
T
marfrit c7d8050cc9 Initial scaffold: daedalus-v4l2 sibling repo
V4L2 stateless decoder for Pi 5, backed by sibling
daedalus-fourier kernel library (VP9 + AV1 CDEF + H.264 video
decode kernels on VideoCore VII compute + ARM NEON).

Architecture locked 2026-05-18 by mfritsche per
daedalus-fourier/docs/phase8_scoping.md:
- Option B: Linux kernel V4L2 shim + userspace daemon (not
  v4l2loopback). Real /dev/videoNN; proper DRM PRIME for
  browser zero-copy.
- Option γ: dlopen FFmpeg at runtime as parser. No vendoring;
  fastest to v1.
- Sibling repo (this repo): V4L2-side work outside of
  daedalus-fourier so kernel-library API stays clean.

Components:
  kernel/ - Linux out-of-tree kernel module (GPLv2; V4L2
    device + chardev bridge to userspace daemon)
  daemon/ - userspace decoder daemon (BSD-2-Clause; links
    libdaedalus_core.a from sibling; dlopens FFmpeg)
  docs/   - architecture + 7-phase roadmap (8.1..8.7)
  include/ - shared headers between kernel and daemon

Roadmap (7 sub-phases, ~1 week each):
  8.1 kernel skeleton (/dev/videoNN with no-op ioctls)
  8.2 chardev bridge (kernel ↔ daemon ping-pong)
  8.3 daemon FFmpeg dlopen + parse path
  8.4 VP9 end-to-end via daedalus_dispatch_*
  8.5 dmabuf / DRM PRIME for zero-copy
  8.6 AV1 + H.264 codec support
  8.7 performance: hit 30fps@1080p (project floor)

No code yet — only README + design docs + directory structure.
First implementation work starts in Phase 8.1 next session.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-18 14:54:56 +00:00

84 lines
3.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# daedalus-v4l2
V4L2 stateless decoder for the Raspberry Pi 5 / CM5, backed by the
`daedalus-fourier` kernel library (VP9 + AV1 CDEF + H.264 video
decode kernels on VideoCore VII compute + ARM NEON).
**Status:** scaffold (2026-05-18). Architecture locked per
[daedalus-fourier session memory](https://git.reauktion.de/marfrit/daedalus-fourier);
implementation not yet begun.
## What this is
A two-piece userspace + kernel-module stack that exposes a V4L2
stateless decoder interface (`/dev/videoNN`) so that
`libva-v4l2-request-fourier``firefox-fourier` /
`chromium-fourier` can drive it the same way they drive existing
hardware-decode pipelines on Pi 5 / RK3588.
```
+-----------------------------------------------------------+
| firefox-fourier / chromium-fourier (existing) |
+-----------------------------------------------------------+
| VA-API |
+-----------------------------------------------------------+
| libva-v4l2-request-fourier (existing, sibling project) |
+-----------------------------------------------------------+
| V4L2 stateless ioctl uAPI |
+-----------------------------------------------------------+
| daedalus-v4l2 kernel module (`kernel/`) |
| - registers /dev/videoNN |
| - parses V4L2 stateless ioctls (VP9/AV1/H.264 controls) |
| - forwards bitstream + controls to userspace daemon |
| via chardev or netlink |
+-----------------------------------------------------------+
| daedalus-v4l2 userspace daemon (`daemon/`) |
| - takes bitstream blobs + per-slice controls |
| - drives FFmpeg parsers via dlopen (Option γ) |
| - dispatches per-block ops via daedalus-fourier |
| public API (daedalus_dispatch_*) |
| - posts decoded frames back to kernel module |
+-----------------------------------------------------------+
| daedalus-fourier kernel library (sibling project) |
| - exports include/daedalus.h public API |
| - per-kernel CPU NEON + opportunistic V3D QPU dispatch |
| - 9 closed cycles across VP9, AV1 CDEF, H.264 |
+-----------------------------------------------------------+
| V3D 7.1 (Mesa userspace v3dv) + ARM NEON (BCM2712) |
+-----------------------------------------------------------+
```
## Why this architecture (Option B + γ + sibling)
Locked by user 2026-05-18 from 3 options in
`daedalus-fourier/docs/phase8_scoping.md`:
- **Option B** over A (userspace v4l2loopback): real `/dev/videoNN`,
proper DRM PRIME / dmabuf for browser zero-copy.
- **Option γ**: dlopen FFmpeg as parser at runtime. No vendoring,
fastest to v1.
- **Sibling repo**: per `project_consumer_target` convention,
V4L2-side work lives outside daedalus-fourier so the
kernel-library has a clean API boundary.
## Status
Initial scaffold only. See `docs/architecture.md` for the
deeper design and `docs/roadmap.md` for the
sub-phase breakdown.
## Repo layout
- `kernel/` — Linux kernel module (V4L2 device registration +
ioctl handling + userspace chardev bridge). Out-of-tree.
- `daemon/` — userspace decoder daemon (links
`libdaedalus_core.a` from sibling daedalus-fourier; uses
dlopen for FFmpeg parser).
- `include/` — shared headers between kernel and daemon.
- `docs/` — architecture + roadmap.
## License
Kernel module: GPLv2 (required for kernel-tree compatibility).
Userspace daemon: BSD-2-Clause (matches daedalus-fourier).