Releases: josephinoo/jade-vita
Releases · josephinoo/jade-vita
Release list
Jade Vita v0.2.0
This release is mostly about the video pipeline finally behaving, plus a rebuilt catalog UI.
Fixed
- Playback collapsed to ~8 fps on real hardware. Two independent bugs:
- The hardware H.264 decoder was being destroyed and recreated on every packet-damage
resync — several times per second on a lossy link. Damage recovery now flushes the queue
and keeps the decoder alive (begin_resync), and a full rebuild is reserved for genuine
decode errors. - The decoder was initialized to retain 1 reference frame while GFN's encoder was never
told to match it. Any P-frame referencing an already-dropped picture madesceAvcdecDecode
consume the data and return no picture. The client now requests
a=video.maxNumReferenceFrames:4and initializes the decoder to the same value, driven by
a single shared constant.
- The hardware H.264 decoder was being destroyed and recreated on every packet-damage
- Failed launches leaked a live session against your NVIDIA account. Since GFN caps
concurrent sessions, each failure made the next attempt more likely to fail with HTTP 503. - Touch input was being discarded. egui only counts a press as a click if it lasts under
0.8s and moves less than 6pt — a thumb tap on the Vita routinely breaks both, so buttons
silently did nothing. Thresholds retuned for touch. - Wrong game title on five screens — they indexed the unfiltered game list, so with a
search or non-default sort active they showed a different title than the one Confirm launched. - Unbounded cover-art cache and a failed-cover retry loop that re-downloaded at 60 Hz.
- Install failure
0x8010113d— allsce_sysPNGs are now 8-bit indexed andbg0.png
matches the 840x500 LiveArea spec.
Added
- Live pipeline diagnostics during streaming: frames/s, access units, decode time, queue
drops, decoder rebuilds, RTP rate, damaged frames, keyframe requests and input-channel state. - Catalog pagination — up to ~1000 titles, streamed in the background so page one renders
immediately. Server-side search still reaches the whole catalog. - Full localization (English / Spanish). Previously only a handful of strings were wired up,
so most screens stayed in one language regardless of the setting. - GeForce NOW branding: header logo and a startup animation.
- Game covers framed in a PS Vita cartridge, with the art also used as a dimmed panel backdrop.
Changed
- Stream profile raised to 60 fps at up to 15 Mbps (was 30 fps / 8 Mbps).
- Catalog rebuilt as a title list with a live detail panel — no separate detail screen.
- Cover cache is now a bounded LRU (8 covers, 24 row thumbnails) and is released entirely
before the video decoder claims its CDRAM. - Per-keystroke search no longer allocates (~44k allocations per keystroke at 2000 titles → 1).
Notes
- Session length is enforced by NVIDIA per account tier — the client cannot extend it.
- Actual framerate depends on your Wi-Fi. The Vita is 2.4 GHz only; a weak link shows up as
drop/pliclimbing in the diagnostics overlay. - Not affiliated with or endorsed by NVIDIA.
Jade Vita v0.1.0
Core / Bootstrap
- Bootstrapped the Jade Vita GFN client in Rust/VitaSDK with cargo-vita build/toolchain setup and an SDL2 + egui app shell
- Added NVIDIA device-code authentication with encrypted token storage
- Implemented catalog browsing, search, and cover art loading
Streaming
- Added a real WebRTC peer engine with SDP sanitization, NVST answer generation, and ICE/signaling forwarding
- Implemented Vita hardware H.264 decode worker with direct SDL texture output
- Added Opus audio playback via a dedicated decode thread and SDL queue output
- Restored Bgr565 as the default video path on real hardware, with automatic fallback to Iyuv when Bgr565 is detected as broken
- Reduced input/video queueing latency by draining all queued UDP packets and peer commands per loop iteration, coalescing gamepad input to the latest snapshot, and tightening the compressed video buffer (4 → 2 pending units)
- Moved cover image decoding off the UI thread and pinned peer/audio threads to reduce scheduler jitter
Input
- Added NVST input-channel support (protocol encoding, handshake parsing, per-frame gamepad snapshots, heartbeat packets)
- Forced DTLS client role for NVIDIA ICE-lite sessions to improve WebRTC bring-up reliability
Session Management (CloudMatch)
- Hardened CloudMatch/catalog handling to match NVIDIA/OpenNOW behavior: session retries, session-limit cleanup, long-queue polling with progress tracking, zone/host resolution
- Made CloudMatch polling tolerant of transient 5xx errors
- Added forced re-login (clearing stored tokens) on catalog-load auth expiration
- Tightened session lifecycle to trigger stop on exit and on fatal disconnects, including signaling loss during streaming
UI / UX
- Refreshed the UI with a darker, NVIDIA-inspired theme across catalog, detail, and session screens
- Replaced emoji glyphs with Vita-friendly text labels
- Added a prominent play button on the detail screen
- Fixed catalog navigation so exiting a non-empty search clears the query and triggers a full catalog refresh
- Added queue progress display and confirm-exit controls during session setup/streaming
Localization
- Added a Fluent-based i18n layer with en-US and es-ES resources
- Added a language picker to the catalog UI with localized search/footer/count text
- Fixed scroll-follow jitter in the catalog grid
Diagnostics
- Added pipeline status events/counters for on-screen debugging
- Added SDP snapshot logging for offline troubleshooting
Assets
- Refreshed Vita icon and LiveArea artwork (icon0.png, bg0.png, startup.png)