Phase 27: Complete Recording System - MP4/MKV containers, VP9/AV1 encoders, replay buffer, KDE UI integration#71
Conversation
…egration Co-authored-by: infinityabundance <255699974+infinityabundance@users.noreply.github.com>
Co-authored-by: infinityabundance <255699974+infinityabundance@users.noreply.github.com>
Co-authored-by: infinityabundance <255699974+infinityabundance@users.noreply.github.com>
Co-authored-by: infinityabundance <255699974+infinityabundance@users.noreply.github.com>
Co-authored-by: infinityabundance <255699974+infinityabundance@users.noreply.github.com>
Co-authored-by: infinityabundance <255699974+infinityabundance@users.noreply.github.com>
Co-authored-by: infinityabundance <255699974+infinityabundance@users.noreply.github.com>
Co-authored-by: infinityabundance <255699974+infinityabundance@users.noreply.github.com>
Co-authored-by: infinityabundance <255699974+infinityabundance@users.noreply.github.com>
Co-authored-by: infinityabundance <255699974+infinityabundance@users.noreply.github.com>
Co-authored-by: infinityabundance <255699974+infinityabundance@users.noreply.github.com>
Co-authored-by: infinityabundance <255699974+infinityabundance@users.noreply.github.com>
…client Co-authored-by: infinityabundance <255699974+infinityabundance@users.noreply.github.com>
Co-authored-by: infinityabundance <255699974+infinityabundance@users.noreply.github.com>
Co-authored-by: infinityabundance <255699974+infinityabundance@users.noreply.github.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: f174cfb199
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| ) | ||
| # Audio components | ||
| src/audio/audio_player.cpp |
There was a problem hiding this comment.
Keep audio sources inside SOURCES list
This closing parenthesis terminates set(SOURCES ...) too early, so the following audio file entries are parsed as top-level tokens instead of list items. CMake then aborts during configure with a parse error (e.g., Expected a command name, got ... src/audio/audio_player.cpp), which blocks building the KDE client in all environments.
Useful? React with 👍 / 👎.
| extern "C" { | ||
| #include "../../src/recording/recording_manager.h" |
There was a problem hiding this comment.
Remove C linkage wrapper around C++ recording manager header
Wrapping recording_manager.h in extern "C" is invalid because that header defines C++ classes and pulls in STL templates; this causes compilation failures like template with C linkage when the wrapper header is compiled. Only pure C headers should be placed inside an extern "C" block.
Useful? React with 👍 / 👎.
| ${CMAKE_SOURCE_DIR}/../../src/recording/recording_manager.cpp | ||
| ${CMAKE_SOURCE_DIR}/../../src/recording/disk_manager.cpp | ||
| ${CMAKE_SOURCE_DIR}/../../src/recording/replay_buffer.cpp |
There was a problem hiding this comment.
Gate FFmpeg recording sources behind FFMPEG_FOUND
These FFmpeg-dependent recording sources are added unconditionally even though the script advertises that recording is disabled when FFMPEG_FOUND is false. On systems without FFmpeg development packages, this still tries to compile/link files that include libav headers, so the build fails instead of gracefully disabling recording.
Useful? React with 👍 / 👎.
Summary
Implements complete recording system with multi-codec support (H.264/VP9/AV1), MP4/MKV muxing, instant replay buffer, and native KDE Plasma UI integration. Users can record gameplay with configurable presets and save instant replays.
Details
What changed?
Core Recording Infrastructure (Phase 27.1):
src/recording/muxer.cpp)src/recording/replay_buffer.cpp)RecordingManagerclass coordinating presets, disk management, metadataEncoder Integration (Phase 27.2):
RecordingManagerinit_video_encoder()- preset-based encoder selectionencode_frame_with_active_encoder()- frame encoding with proper packet muxingcleanup_encoders()- resource management with flushingMulti-Codec Replay Buffer (Phase 27.3):
replay_buffer_save()KDE Plasma Client Integration (Phase 27.4):
RecordingManagerWrapper- Qt wrapper with Q_PROPERTY/signals for C++ backendMainWindowwith full implementation:--output-dir,--replay-buffer-secondsRecording Presets:
Usage Example:
Rationale
Testing
Tested changes:
make)Notes
submit_video_frame()to actual capture pipeline (currently stubbed)💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.