Files
2026-05-18 14:57:55 +00:00

88 lines
3.7 KiB
Markdown
Raw Permalink 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
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).