feat(render): fullscreen headless receiver with letterboxing

A headless receiver has no window manager, so a windowed window is
meaningless there — the screencast should simply fill the screen. The
renderer now goes borderless fullscreen automatically when SDL runs
the KMSDRM backend, and --fullscreen forces the same behavior in
desktop sessions. The video keeps its aspect ratio via
SDL_SetRenderLogicalPresentation(LETTERBOX): a 4:3 desktop on a 16:9
TV renders with black bars instead of a stretched picture, the cursor
is hidden, and the clear-before-draw keeps the bars black.

Verified live on a 3440x1440 monitor: the --fullscreen receiver window
covered the entire display while a 4:3 synthetic feed rendered with
pure-black pillarbox bars (Y=0/SAT=0) and a saturated-red center
(V=254). meson test 5/5 in both build configurations.
This commit is contained in:
2026-09-07 13:18:08 +02:00
parent 47905004eb
commit 7c04506dde
8 changed files with 50 additions and 6 deletions
+3 -1
View File
@@ -57,7 +57,9 @@ installs and enables a systemd service so the receiver starts at boot —
Performance note: decoding is software H.264; on very small boards expect
smooth playback for modest resolutions and reduced frame rates at high
resolutions. Hardware decode is planned for Phase 7.
resolutions. Hardware decode is planned for Phase 7. On a headless console
the receiver runs fullscreen automatically with aspect-preserving
letterboxing.
## Architecture