fix: time out a stalled portal and sample motion across segments
Rust checks / windows-cross-check (push) Successful in 41s
Rust checks / linux (push) Failing after 5m39s

Hyprland's portal sometimes creates the session and never answers source
selection, before any picker appears. Recording now fails if the portal has
not reached its picker within 10 s; time in the picker is not limited. The
motion check uses the segment with the most motion, since capture can start
late.
This commit is contained in:
2026-10-08 15:16:52 +02:00
parent 06377de707
commit afc54b363e
4 changed files with 135 additions and 20 deletions
+18 -1
View File
@@ -9,7 +9,7 @@ pass/fail results.
| Where | Script | Status |
| --- | --- | --- |
| Linux, headless rig (Wayland portal + Xwayland) | `scripts/validate/linux-rig.sh` | All 9 scenarios pass on devbox (Intel UHD 770, VA-API) |
| Linux, real session (CachyOS, Hyprland, RX 9070 XT, 1440p60) | `scripts/validate/linux-hardware.sh` | First run 2026-10-08: H.264, HEVC and AV1 all usable; restore token still to confirm |
| Linux, real session (CachyOS, Hyprland, RX 9070 XT, 1440p60) | `scripts/validate/linux-hardware.sh` | 2026-10-08: H.264, HEVC and AV1 usable; restore token works; portal stall fix awaiting re-run |
| Windows (Game Capture, NVENC/AMF/QSV) | `scripts/validate/windows.ps1` | Not run yet; script untested |
## Probe commands
@@ -77,6 +77,20 @@ CachyOS 7.2.9, Hyprland, RX 9070 XT, 1440p60, OBS 32.0.4:
the PipeWire stream `streaming` and OBS repeats the window's last frame.
See findings.
### Second hardware run (2026-10-08)
- The restore token works: the restored run started recording in 2 s without
showing the picker.
- The portal stalled silently on one run again: it created the session but
never answered `SelectSources`, before any picker. Recording now fails if
the portal has not reached its picker 10 s after the request
(`StatusTracker::PORTAL_RESPONSE_LIMIT`); time spent in the picker itself
is not limited.
- The motion check sampled a segment from before capture started (the user
took 16 s in the picker); it now uses the segment with the most motion.
- A portrait monitor (Hyprland transform 3) is captured as 1440x2560 and
pillarboxed in the 2560x1440 canvas.
## Windows
Run `scripts/validate/windows.ps1 -GameWindow "<title>:<class>:<exe>"` with a
@@ -133,6 +147,9 @@ Windows status:
has a picture, so a source that never arrives produces black segments. The
session timeline should show that time as missing footage, or the output
should start only once capture is usable.
- **Canvas orientation.** The output canvas is fixed by the configured
resolution, so portrait or other-aspect sources are letterboxed. Decide
whether the canvas should follow the captured source.
- **Audio capture failures are not detected yet.** When the PulseAudio server
was unreachable, recording continued with a silent track.
- **Linux runtime dependencies.** The Linux OBS build links the system's