diff --git a/CLAUDE.md b/CLAUDE.md index b53d693..df7294d 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -72,8 +72,11 @@ Low-latency desktop/game streaming stack, Linux-first, with a shared Rust protoc **ViGEm** gamepads (`inject/gamepad_windows.rs`), WASAPI loopback + virtual mic (`audio/wasapi_*`). Ships as a **signed Inno Setup installer** that registers a `LocalSystem` SCM service launching into the interactive session for secure-desktop (UAC/lock-screen) capture (`service.rs`), bundles the - SudoVDA driver, and is published by `windows-host.yml`. Newer/less battle-tested than the Linux - host; no AMD/Intel/software encode path. Packaging: `packaging/windows/`. + SudoVDA driver, and is published by `windows-host.yml`. **HDR (10-bit)**: WGC captures the HDR + desktop as FP16/Rgb10a2 (DDA FP16 for the secure desktop), NVENC forces HEVC Main10 + BT.2020 PQ, + the client auto-detects PQ from the HEVC VUI — gated by `PUNKTFUNK_10BIT` + client `VIDEO_CAP_10BIT`; + **Windows host only** (the Linux host stays 8-bit, blocked upstream). Newer/less battle-tested than + the Linux host; no AMD/Intel/software encode path. Packaging: `packaging/windows/`. ## What's left diff --git a/docs-site/content/docs/roadmap.md b/docs-site/content/docs/roadmap.md index 6701384..54a7b3c 100644 --- a/docs-site/content/docs/roadmap.md +++ b/docs-site/content/docs/roadmap.md @@ -24,7 +24,7 @@ see [Status & Progress](/docs/status). | Web console + pairing | ✅ | | Concurrent sessions (shared desktop) | ✅ | | Network speed test + bitrate | ✅ | -| HDR / 10-bit (host capture) | ⛔ | +| HDR / 10-bit streaming | ✅ Windows host · ⛔ Linux host | | Sub-frame pipelining (latency) | 🔭 | ## ✅ Shipped @@ -35,8 +35,9 @@ see [Status & Progress](/docs/status). - **Native-resolution virtual displays** on Linux across KWin, GNOME/Mutter, gamescope, and Sway/wlroots, with a fully zero-copy GPU path to NVENC (stable 240 fps at 5120×1440). - **A native Windows host** (NVIDIA, x64) — a signed installer with secure-desktop capture and a - bundled virtual-display driver. See [Windows Host](/docs/windows-host). *(Beta — newer than the - Linux host.)* + bundled virtual-display driver, and the only host that can stream **HDR** (10-bit BT.2020 PQ, + captured from an HDR Windows desktop and encoded as HEVC Main10). See + [Windows Host](/docs/windows-host). *(Beta — newer than the Linux host.)* - **Clients on every platform** — native apps for **Apple** (macOS, iOS, iPadOS, tvOS), **Linux**, **Android** (phone + TV), and **Windows**, each with hardware decode, controllers including DualSense, audio + mic, and automatic host discovery. See [Clients](/docs/clients). @@ -67,8 +68,10 @@ see [Status & Progress](/docs/status). ## ⛔ Parked / blocked -- **HDR / 10-bit streaming.** Designed end to end, but blocked upstream — no shipping compositor emits - a 10-bit/HDR capture stream yet. Ready to build the moment one lands. +- **HDR / 10-bit on the *Linux* host.** HDR streaming already works from a + [Windows host](/docs/windows-host) to an HDR-capable client (Windows, Android). On Linux it's + blocked upstream — no shipping compositor emits a 10-bit/HDR capture stream yet — and ready the + moment one does. - **Advanced DualSense voice-coil haptics.** Scoped and shelved (it rides the controller's USB audio interface, with near-zero game support on Linux). Adaptive triggers, rumble, and the lightbar already ship. diff --git a/docs-site/content/docs/status.md b/docs-site/content/docs/status.md index af92fb7..7c26229 100644 --- a/docs-site/content/docs/status.md +++ b/docs-site/content/docs/status.md @@ -36,6 +36,9 @@ Linux, Windows, and Android. - **Zero-copy GPU pipeline.** Captured frames stay on the GPU (dmabuf → CUDA → NVENC) with automatic split-encode at very high resolutions. Stable 240 fps at 5120×1440 has been measured. +- **HDR (10-bit), on the Windows host.** An HDR Windows desktop is captured and encoded as HEVC + Main10 (BT.2020 PQ) to HDR-capable clients (Windows, Android). Linux hosts stream 8-bit for now — + HDR there is blocked upstream at the compositor. - **Secure by default.** A **SPAKE2 PIN pairing** ceremony establishes trust (the host shows a 4-digit PIN; an attacker gets a single online guess, no offline dictionary attack). Trust-on-first-use (TOFU) remains an explicit opt-in for fully trusted LANs. diff --git a/docs-site/content/docs/windows-host.md b/docs-site/content/docs/windows-host.md index bb73261..c0e5109 100644 --- a/docs-site/content/docs/windows-host.md +++ b/docs-site/content/docs/windows-host.md @@ -7,8 +7,9 @@ description: "Run the punktfunk streaming host on a Windows PC with an NVIDIA GP **Status: implemented and shipping — NVIDIA-only, x64-only.** punktfunk is Linux-first, but it also runs as a native **Windows host**: a signed installer registers a `LocalSystem` service that streams your Windows desktop or games to any punktfunk or Moonlight client, at the client's exact resolution -via a virtual display. It's newer and less battle-tested than the Linux host, and it is built -specifically around NVIDIA hardware. +via a virtual display — including **HDR10** (10-bit BT.2020 PQ) when your Windows desktop is in HDR +mode. It's newer and less battle-tested than the Linux host, and it is built specifically around +NVIDIA hardware. (The Linux host is 8-bit only — HDR there is blocked upstream.) > This page is about the Windows **host** (streaming *from* a Windows PC). To stream *to* a Windows > PC, see the [Windows client](/docs/clients#windows-desktop-client). @@ -48,9 +49,9 @@ pipeline orchestration are all shared with the Linux host. The Windows host is a | Subsystem | Linux backend | Windows backend | |---|---|---| -| **Capture** | xdg ScreenCast portal → PipeWire (dmabuf) | **DXGI Desktop Duplication** → D3D11 texture | +| **Capture** | xdg ScreenCast portal → PipeWire (dmabuf) | **Windows.Graphics.Capture** (+ Desktop Duplication for the secure desktop) → D3D11 texture; FP16/10-bit when the desktop is HDR | | **Virtual display** | KWin / Mutter / Sway / gamescope | **SudoVDA** signed IDD — create a `WxH@Hz` monitor per session, capture it, tear it down | -| **Encode** | `ffmpeg-next` NVENC (CUDA hwframes) | **NVENC** with a D3D11 device (`--features nvenc`) | +| **Encode** | `ffmpeg-next` NVENC (CUDA hwframes) | **NVENC** with a D3D11 device (`--features nvenc`); HEVC Main10 / BT.2020 PQ for HDR | | **Input — mouse/keyboard** | libei / wlr protocols | **SendInput** (Win32 VK + absolute mouse) | | **Input — gamepads** | uinput Xbox 360 pad + rumble | **ViGEm** virtual pad + rumble back-channel | | **Audio capture** | PipeWire sink-monitor | **WASAPI loopback** |