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

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-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.