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.
41 lines
1.5 KiB
Markdown
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.
|