feat(capture): add Phase 3 PipeWire capture stub and config string safety

Add a linkable CaptureFactory stub so the capture API can be consumed

without unresolved symbols. Change remaining config string_view fields to

std::string to prevent dangling references. Update handoff memory.
This commit is contained in:
2026-09-07 10:08:02 +02:00
parent 71218b1b1f
commit 6f4c670aa8
6 changed files with 58 additions and 24 deletions
+12 -4
View File
@@ -4,10 +4,16 @@ Last updated: initial scaffold.
## Project state
- Phase 1 complete: Meson build, C++20 module headers, agent workflow, clock
utility, and a passing unit test.
- Active phase is now Phase 2 (software H.264 encode/decode).
- No implementation yet for capture/codec/network/render.
- Phase 2 follow-up review items addressed: encoder rate control is now
bitrate-only (removed CRF), encoder/decoder cache their SwsContext, configs
own their strings, bitstream helper is internal to the encoder with a NAL
length guard, FFmpeg open errors are reported, and the round-trip test
verifies Annex-B prefix and keyframes.
- `.clang-format` added at repo root and clang-format enforcement added to
`AGENTS.md` and `cpp-meson-build/SKILL.md`.
- Phase 3 capture now has a linkable stub (`src/capture/pipewire_capture.cpp`)
so the API can be consumed without an unresolved symbol.
- Remaining implementation: capture, transport, rendering, and CLI/pipeline glue.
## Decisions
@@ -16,6 +22,8 @@ Last updated: initial scaffold.
- Build system: Meson.
- Capture: PipeWire + xdg-desktop-portal.
- Encode/Decode: FFmpeg (libavcodec, libavutil, libswscale).
- H.264 encoder path: software `libx264`, low-latency settings, Annex-B output.
- Decoder receives SPS/PPS through `DecoderConfig.extradata`.
- Transport: RTP over UDP; signaling via WebSocket/JSON.
- Discovery: mDNS/Avahi.
- Rendering: SDL2 or SDL3 + OpenGL.