Skip to content

Builds 1563, 1568 & 1569

Choose a tag to compare

@ffbsoffa ffbsoffa released this 28 Mar 21:43
· 66 commits to stable since this release
2521 ---

Improvements

'Betacam' effect — compositing and reverse playback
At 1× reverse the 'Betacam' stripe is now visible for the first time: the helical drum misalignment during backward tape travel is modelled correctly, with the stripe scrolling downward and compositing following the same physical model as forward playback. The compositing itself was also fixed — a skip condition on same-frame-number during pause was preventing the N/N+1 blend from re-rendering as audio position (and therefore stripe phase) changed. A sticky adjacent-frame cache eliminates the 60 fps flickering that occurred when the decoder mutex was briefly held by the decoding thread.

Audio — tape transport physics
Two new behaviours added to the audio engine. First, a 1st-order IIR low-pass filter rolls off high frequencies during shuttle: at lock speed (0.95×–1.05×) it is fully bypassed; at 8× it cuts above ~3 kHz; at moderate shuttle (~1.5×) above ~10 kHz — reducing harshness and better matching the limited bandwidth of real tape playback. Second, reversing direction now triggers a physical ramp-down / hold / ramp-up sequencer that mimics tape transport mechanics; the instant-change path is preserved separately for mouse-shuttle use.

Settings dialog — redesigned for Windows 10/11 (Windows, Build 1568)
Completely rebuilt with a sidebar navigation layout, Windows accent-blue selection, Segoe UI at DPI-aware sizes, DWM integration, and ComCtl32 v6 visual styles. The previous tab-strip layout has been retired.


Fixed Bugs

  1. Jumping frames from full-res decoder The V2 full-resolution decoder was being rejected on every render frame due to a systematic timestamp deviation, causing quality to oscillate between proxy and full-resolution visibly. Fixed by evaluating the sync check against nominal time (frame_number / fps) rather than the raw audio clock.

  2. Fixed UTF-8 file paths in proxy decoder (Windows, Build 1568) popen() on Windows routes through cmd.exe with the ANSI code page, silently corrupting paths with non-ASCII characters (Cyrillic, CJK, accented Latin) before they reach ffprobe / ffmpeg. Replaced with a direct CreateProcessW call on Windows; popen() is retained on macOS and Linux.

  3. Heap corruption and use-after-free on file reload. Two related race conditions fixed in the decoder/render pipeline. A shared_ptr<AVFrame> holding an adjacent frame was being released from the load thread while the render thread read it — producing heap corruption. Separately, the render thread could access the full-resolution decoder after it had already been destroyed during a file transition. Both are resolved by ensuring adjacent-frame cache resets happen exclusively on the render thread and by guarding decoder access with an active-decoder flag.


Other

--debug flag — debug console on Windows (Windows, Build 1568)
Launching TapeXPlayer.exe --debug opens a console capturing all log output. Attaches to a parent terminal if present (MSYS2, cmd, PowerShell); otherwise opens a new window. The binary remains a GUI build in all other cases.


Requirements.
Minimum macOS: Ventura or later, Apple Silicon or Intel, 16 GB RAM, Metal-capable GPU.
Recommended macOS: Sonoma or later, modern Apple Silicon (M1 Pro/Max/Ultra or M2/M3), 8 GB+ RAM; for multiple instances, 16 GB helps.
Linux: Debian/Ubuntu 25.04 or later. Tested on Ubuntu 25.04 with an Intel Celeron Gold 7505. Target CPUs: 2022-era Intel Core i3 or AMD Ryzen 5600.
Minimum Windows: Windows 10 (64-bit), x86-64 CPU, 8 GB RAM, DirectX 11-capable GPU.
Recommended Windows: Windows 10/11, modern CPU, dedicated GPU with DXVA2/D3D11VA support, 8 GB RAM.


© 2026 Maksim Maloletkin (FFB_soffa). Licensed under GPL v3.0.