Major A/V (Playback & Rendering) Improvements
Significant A/V performance and stability upgrades resulting in no tearing, fewer dropped frames (even on high refresh rates) and no audio crackling.
Core Changes
-
Switched from DXGI swapchain to DirectComposition (DComp) with WS_EX_NOREDIRECTIONBITMAP, bypassing the WPF/WinForms/WinUI rendering pipeline and rendering directly to the DWM compositor
✅ Eliminates GPU→CPU copies, frame drops, and UI freezes -
Re-implemented high-performance rendering loops (for both Playback and Idle modes)
✅ Calls to ResizeBuffers and SetViewPort occur only when necessary
✅ Avoids locking and improves frame throughput -
Re-implemented A/V Playback (Screamer)
✅ Fully separated A/V threads to prevent desync and delay issues
✅ Decoupled Render/Draw from Present, giving the GPU more time per frame for smooth playback
Changelog
- Renderer.Device: Improves creation implementation
- Renderer.Swapchain: Switches to DirectComposition (DComp)
- Renderer.Swapchain: Gets dynamically the GPU output from the adapter during creation
- Renderer.Swapchain: Fixes support for RGBA (instead of BGRA) and might perform even better (currently not default as causes critical issues with Super Resolution - see Config.Video.SwapForceR8G8B8A8)
- Renderer.Present: Re-implementation with new rendering loops for playback and idle modes with VSync-Wait mode (deprecates DoNotWait)
- Renderer.Present: Separates rendering and presenting for playback to achieve less dropped frames
- Renderer.D3D11VP: Fixes an issue with Super Resolution during Rotation
- Renderer.D3D11VP: Fixes issues with DeInterlace (separates Bob for double rate with Weave/Blend for normal rate)
- Player.Screamer: New AVSD implementation which separates A/V threads with less dropped frames, less audio crackling and better A/V sync
- Player.Stats: Real-time accurate frame statistics from DWM
- AudioDecoder: Workaround with Circular Buffer that could cause unexpected results during re-allocation
- VideoDecoder: Fixes issues with extra frames (+1 required for renderer and handle max allowed by the system)
- VideoStream: Better handling of Fps (could cause issues with interlace and formats that announce huge wrong numbers)
- Demuxer: Fixes an issue with IsHLSLive falsely set to true
- Demuxer: Fixes an issue with backwards seeking that it would return forward packets from cache
- Config.Video: Introduces DoubleRate for DeInterlace (forces D3D11VP to use Bob instead of Weave/Blend)
- FlyleafME.Settings.Video: Adds DoubleRate for DeInterlace
Breaking Changes
- Config.Video: Defaults VSync to 1 to avoid tearing
- Config.Video: Deprecates PresentFlags (no support for DoNotWait - no reason)
- Config.Player: Deprecates IdleFps
- Config.Player: Renames UICurTimePerFrame to UICurTime
- Config.Decoder: Defaults AllowProfileMismatch to true
- Engine.Config: Deprecates UICurTimePerSecond (use Config.Player.UICurTime instead)
- Engine.Config: Defaults UIRefresh to true (for proper UI updates/refreshes)
- Engine.Video: Deprecates Screens and RecommendedLuminance (use GPUAdapter.GetGPUOutputs instead)
- Engine.Video: Separates GPUOutput from GPUAdapter
- Renderer/FlyleafHost.Wpf: Deprecates replica/child (might re-include it in the future)
Package Contains (x64)
FlyleafPlayer Pop-up on first run is to add itself to windows firewall for proper yt-dlp and bitswarm playback
Plugins
- OpenSubtitlesOrg
- SubtitlesConverter
- TorrentBitSwarm
- YoutubeDL
FFmpeg v8.0 (d8605a6)
- Patched for HLS issue
- Patched for .NET issue
- No encoders