6f4c670aa8
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.
1.5 KiB
1.5 KiB
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-formatadded at repo root and clang-format enforcement added toAGENTS.mdandcpp-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.mdandcpp-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.