Nuvio Linux 0.1.20-alpha-5 — render-pipeline upgrade + interaction fixes
This release rebuilds the desktop playback pipeline end-to-end and fixes three
long-standing interaction bugs. All packages are built from the same source
(render-pipeline-upgrade merged to dev), verified per-format before upload.
Render pipeline
- Direct-write frames: mpv now writes video straight into Skia pixel memory
(stride-aware viaGL_PACK_ROW_LENGTH/SW_STRIDE), deleting the per-frame
CPU copy (~800 MB/s at 4K24) and one of three per-slot allocations. - Event-driven frame pump: the frame producer sleeps until mpv signals a new
frame (bounded 50 Hz pull) instead of polling at ~1000 wakeups/s — roughly a
93% reduction in timer wakeups per playing surface, with cadence still locked
to video FPS (verified 24.0 fps on 24 fps content, both AMD and NVIDIA). - Playback-quality telemetry: under
NUVIO_MPV_DEBUG=1the per-second line
now reportsmpv-fps, measuredbitrate, decoder drops, mistimed/delayed
frames; decoder transitions (vaapi→vaapi-copy, etc.) are logged
unconditionally the moment they happen. - Compatibility Rendering toggle (Settings → Playback → Decoder): forces the
software render path while keeping decode on the GPU (auto-copy) — a last
resort for broken GPU driver stacks.
Fixes
- Preferred audio/subtitle tracks now apply reliably on slow-opening
sources: selection retries key on mpvFILE_LOADEDand re-apply opportunistically
until they latch, instead of giving up after ~3 s from player open
(previously the container-default track — e.g. French on MULTI releases —
played for the whole session). - Volume slider / seek / track switching latency: queued mpv commands now
apply within ~1–2 ms instead of waiting up to 250 ms in the event loop;
slider drags no longer trail the pointer audibly. - Cursor idle-hide: hero/trailer preview surfaces no longer fight the main
player over the window cursor — the idle timeout is deterministic even while
previews play.
Notes
- If your
~/.config/mpv/mpv.confsetsalang=…, mpv's own default selection
masks Nuvio's per-track selection; language preferences are applied by the app
after load either way. - Dolby Vision HEVC sources that fail zero-copy import now fall back to
vaapi-copyautomatically (existing behavior, verified on RDNA4 with this release).
All commits since 0.1.20-alpha-4
521cf7d fix(player): cursor idle-hide ownership — passive surfaces opt out @JJDizz1L
c5ec5da perf(player): wake event loop on queued commands — immediate apply @JJDizz1L
8ec773a fix(player): apply preferred audio/subtitle tracks whenever tracks appear @JJDizz1L
a9a0671 feat(player): Compatibility Rendering toggle — SW render + copy-back decode (render-pipeline phase 4) @JJDizz1L
c7010d2 feat(player): event-driven frame pump via mpv update callback (render-pipeline phase 2) @JJDizz1L
0d8d8e0 feat(player): direct-write render into Skia pixel memory (render-pipeline phase 1) @JJDizz1L
f1ab550 feat(player): playback-quality telemetry + decoder transition logging (render-pipeline phase 3) @JJDizz1L