89f56e4b49
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
88 lines
3.7 KiB
Markdown
88 lines
3.7 KiB
Markdown
# 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
|
||
|
||
Sibling repo to
|
||
[daedalus-fourier](https://git.reauktion.de/marfrit/daedalus-fourier)
|
||
(the kernel library; cycles 1-9 closed).
|
||
|
||
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).
|