a02d0a2e9f
The decoder's NV12 dmabuf imports per-plane (R8 + GR88, explicit DRM format modifier, dedicated dup'd-fd import, FOREIGN→graphics acquire) and a fullscreen-triangle render pass converts it into the presenter's video image with the CICP-driven coefficients ported from video_gl.rs (same tests, plus a rows-vs-matrix agreement check). SPIR-V is committed (shaders/build.sh regenerates) so builds and CI need no toolchain. The import extension set is probed at device creation; unsupported boxes and 3-failure streaks demote the decoder to software via the existing force_software contract. The session binary now honors the Settings decoder preference instead of forcing software. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
31 lines
1.6 KiB
Markdown
31 lines
1.6 KiB
Markdown
# punktfunk-session
|
|
|
|
The Vulkan session binary: one stream per invocation in an SDL3 window — no UI toolkit,
|
|
no widgets, terminal stats. The power-user / gamescope stream client, and the stage-2
|
|
presenter of the Linux client re-architecture (punktfunk-planning:
|
|
`linux-client-rearchitecture.md`).
|
|
|
|
```
|
|
punktfunk-session --connect host[:port] [--fp HEX] [--launch id] [--fullscreen] [--stats]
|
|
```
|
|
|
|
Reads the same identity / known-hosts / settings stores as the desktop client
|
|
(`punktfunk-client`) — pair there (or via its headless `--pair`) first; this binary never
|
|
connects to a host it has no pinned fingerprint for (`--fp HEX` overrides the store).
|
|
|
|
Stdout is the machine interface: `{"ready":true}` after the first presented frame,
|
|
`stats: …` once per second (Ctrl+Alt+Shift+S toggles, `--stats` forces on), one
|
|
`{"error"|"ended": …}` JSON line on the way out. Logs go to stderr. Exit codes: `0`
|
|
clean end, `2` connect failed, `3` trust rejected / pairing required, `4` presenter
|
|
init failed.
|
|
|
|
In-stream keys match the desktop client: click captures input (Ctrl+Alt+Shift+Q
|
|
releases), Ctrl+Alt+Shift+D disconnects, F11 toggles fullscreen; the controller escape
|
|
chord (L1+R1+Start+Select, hold to disconnect) works the same.
|
|
|
|
Decode follows the Settings preference: VAAPI frames import zero-copy into Vulkan
|
|
(per-plane dmabuf + the stream's CICP-driven CSC shader); boxes whose driver can't
|
|
import (NVIDIA proprietary by design) fall back to software decode automatically —
|
|
`PUNKTFUNK_DECODER=software|vaapi` overrides for bisects. HDR/P010 and the Skia console
|
|
UI (`--browse`) are later phases of the plan.
|