Skip to content

Releases: josephinoo/jade-vita

Jade Vita v0.2.0

Choose a tag to compare

@josephinoo josephinoo released this 27 Jul 21:15

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 made sceAvcdecDecode
      consume the data and return no picture. The client now requests
      a=video.maxNumReferenceFrames:4 and initializes the decoder to the same value, driven by
      a single shared constant.
  • 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 — all sce_sys PNGs are now 8-bit indexed and bg0.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/pli climbing in the diagnostics overlay.
  • Not affiliated with or endorsed by NVIDIA.

Jade Vita v0.1.0

Choose a tag to compare

@josephinoo josephinoo released this 24 Jul 16:33

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)