Add native RDP server backend - #41
Conversation
| # Source capture FPS. RDP uses this same value for frame pacing and encoders. | ||
| fps=30 | ||
|
|
||
| [remote] |
There was a problem hiding this comment.
I think there is no need to add another section, this option could be part of [reframe] group.
| @@ -23,5 +23,6 @@ executable( | |||
| sources: sources, | |||
| dependencies: dependencies, | |||
| include_directories: include_directories, | |||
| install_rpath: libdir, | |||
There was a problem hiding this comment.
There is no reason that we need rpath.
| @@ -0,0 +1,248 @@ | |||
| #include "rf-rdp-audio-stream.h" | |||
There was a problem hiding this comment.
At least currently we have no way to get audio via streamer, what is this handling?
|
Are you coding with AI/LLM? Check your produced output, I don't think things have to be done in such a complex way, your PR smells like pouring code anywhere, only crazy man will allow such kind of code to be merged. Check your code, don't waste my time to review/refactor your LLM code, YOU should do it. |
| @@ -0,0 +1,336 @@ | |||
| #include "rf-clipboard-rich.h" | |||
There was a problem hiding this comment.
I don't think we need to handle rich format clipboard, I am even not sure whether VNC supports it, so don't do this, at least for this PR, focus on core RDP.
Summary
This draft PR adds a native RDP server backend for ReFrame, behind an optional Meson feature flag. The goal is to let ReFrame expose the existing capture/conversion/input/session pipeline over RDP, with FreeRDP used as a reference for the protocol implementation.
This is intentionally opened as a draft because the branch is large and the protocol surface is broad. I would like early feedback on the direction, module boundaries, and which pieces should be reduced or split before review.
Implemented
RfRemoteServerabstraction so the main server pipeline can use VNC or RDP backends through the same start/stop/update/flush/input/resize/clipboard-style interface.[remote] protocol=vnc|rdpconfiguration, with VNC remaining the default for compatibility.cliprdrtext, HTML, and common image clipboard paths, including CF_UNICODETEXT, HTML Format, DIB/DIBV5, BMP, PNG, JPEG, WEBP, and TIFF handling.rdpsnd, including static channel negotiation, PCM and IMA/DVI ADPCM format selection, Wave/Wave2 PDUs, WaveConfirm/training/quality-mode handling, PipeWire monitor capture, configurable sample rate/channels/frame size, sender queueing, latency statistics, silence suppression for better A/V sync, andaudio-codec=auto|pcm|adpcmconfiguration.Not Implemented / Future Work
rdpsndencoded formats beyond PCM and IMA/DVI ADPCM are future work.Audio Scope
The audio path implemented in this PR covers the main remote-desktop playback case: server-side audio capture from PipeWire and client playback through
rdpsnd, with low-latency scheduling, confirmation handling, and PCM/IMA ADPCM output depending on client support. Audio input redirection is intentionally out of scope for this PR because it is more relevant to conferencing or microphone-forwarding workflows than to the core cross-platform remote desktop path.Test Plan
Automated checks run on the RDP development target:
meson test -C build-rdp --print-errorlogsmeson test -C build-rdp reframe:rdp-rdpsnd reframe:rdp-audio-stream reframe:rdp-core reframe:config --print-errorlogsmeson setup build-nordp -Drdp=falsemeson compile -C build-nordpManual smoke testing performed during development:
rdpsndaudio output with a compatible client, including Wave2 playback, confirmation handling, silence-suppression behavior for improved A/V sync, and compressed ADPCM negotiation fallback throughaudio-codec=auto.Notes for Reviewers