Files
screen_cast/.agents/MEMORY.md
T
fegger 6f4c670aa8 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.
2026-09-07 10:08:02 +02:00

41 lines
1.5 KiB
Markdown

# Project Memory — screen_cast
Last updated: initial scaffold.
## Project state
- 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
- Language: C++20 with explicit modern-C++ guidelines in `AGENTS.md` and
`cpp-meson-build/SKILL.md`.
- 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.
- Namespace: `sc`.
## Active blockers
None.
## Open questions
- GUI framework (Qt6 vs. none / CLI only) — deferred to later phase.
- Hardware acceleration strategy (VAAPI / Vulkan Video / NVENC) — evaluate after
software encode path works.