Skip to content

TackleCast v2.0.0

Choose a tag to compare

@SaltedByte SaltedByte released this 05 Apr 23:39
· 8 commits to main since this release

TackleCast v2.0.0 — Complete Rust Rewrite

TackleCast has been completely rewritten from scratch in Rust, replacing the original Python/mpv application. This is a ground-up rebuild with a GPU-accelerated decode and rendering pipeline for significantly lower latency and higher performance.

Platform & GPU Support

  • Windows only (DirectShow capture, WASAPI audio, DX12 rendering)
  • GPU decode requires an NVIDIA GPU with CUDA support (driver 570+)
  • Non-NVIDIA GPUs fall back to software (CPU) decode automatically — the app still works, just without GPU-accelerated MJPEG decoding
  • Tested on RTX 3050, RTX 4070 Ti, and RTX 5080

What's New in v2.0

Rust rewrite (replaces Python entirely)

  • Native Windows executable — no Python runtime, no mpv, no external dependencies
  • wgpu-based GPU rendering with a custom YUV-to-RGB WGSL shader
  • egui dark-theme UI with pause-style settings menu
  • winit window management with F11 fullscreen and DPI awareness
  • cpal WASAPI audio passthrough with volume control
  • ffmpeg-next DirectShow capture with multi-format support
  • DirectShow COM device enumeration (no ffmpeg.exe required)
  • Rotating file logger via tracing
  • No console window on launch

GPU-accelerated MJPEG decode (NVIDIA nvJPEG/CUDA)

  • Hardware JPEG decoding on NVIDIA GPUs for high-FPS MJPEG streams
  • Dynamic loading of CUDA and nvJPEG at runtime — no CUDA SDK needed to run
  • Automatic DHT injection for UVC MJPEG compatibility (works with Elgato, AVerMedia, cheap USB dongles, and other capture cards beyond ShadowCast)
  • Graceful fallback to CPU decode when CUDA/nvJPEG is unavailable

Zero-copy GPU pipeline (CUDA to DX12 to wgpu)

  • Decoded frames never leave the GPU — zero PCIe bandwidth for decoded video
  • CUDA imports shared DX12 buffers via cuImportExternalMemory
  • wgpu wraps DX12 buffers via HAL and does GPU-side copy_buffer_to_texture
  • Double-buffered (2 sets of Y/U/V planes) for concurrent decode and render
  • Three-tier automatic fallback: zero-copy, GPU decode + host readback, software decode

Capture improvements

  • Pixel format fallback chain: NV12, MJPEG, YUYV422, UYVY422, YUV420P, auto
  • Resolution/FPS fallback: automatically tries lower settings when the device rejects the request
  • Negotiated settings feedback: UI updates to show actual capture parameters after fallback
  • 30 FPS option added (30 / 60 / 120 / Custom 30-240)

Performance

  • VSync-free rendering (Mailbox present mode) — framerate not capped by monitor refresh rate
  • Pre-allocated scratch buffers eliminate per-frame memory allocations in all decode paths
  • Capture buffer tuned to 16MB with elevated decode thread priority
  • Tested at 1440p@120fps sustained on RTX 5080 with zero buffer overflow

Diagnostics

  • Frame arrival timing in decode summaries (distinguishes capture card vs GPU bottlenecks)
  • GPU temperature and utilization monitoring via NVML
  • Rendered FPS vs decoded FPS tracking
  • Stream negotiation logging (actual vs requested framerate)
  • 30-second periodic summaries instead of per-frame spam

Known Limitations

  • GPU decode is NVIDIA-only at this time (AMD AMF and Intel Quick Sync are planned for a future release)
  • Some smaller capture card dongles (e.g. Genki ShadowCast 2 Pro) may thermally throttle their internal MJPEG encoder at sustained 1440p@120fps, causing frame delivery to drop to ~60fps. This is a hardware limitation of the capture card, not a software issue. Devices with better thermal design (e.g. ShadowCast 3) are unaffected.
  • Webcams may partially work but are not officially supported — TackleCast is designed for capture cards
  • Laptop GPUs may thermal throttle at sustained 4K@60fps or 1440p@120fps (a cooling pad helps)

Download

Download TackleCast-v2.0.0.zip, extract anywhere, and run TackleCast.exe.

GPU decode DLLs (nvjpeg64_13.dll, cudart64_13.dll) are included in the zip. Users without an NVIDIA GPU can safely ignore them — the app will fall back to software decode.

NVIDIA users need driver version 570 or newer for CUDA 13 compatibility.

Bug Reports

If you run into issues, please open an issue at https://github.com/SaltedByte/TackleCast/issues and include your log file from the logs folder next to TackleCast.exe.