Files
jellyfin/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs
mani 6fbc0f87df Add CRT-Lottes shader via FFmpeg program_opencl
Implements Timothy Lottes' CRT shader (port of mpv-retro-shaders) as an
optional server-side post-processing filter activated per playback session
via streamOptions[crtShader]=true.

Server-side changes:
- Add crt_lottes.cl OpenCL kernel (scanlines, bloom, curvature, shadow mask
  variants 0-4, sRGB linearisation) deployed alongside the server binary
- Add IsCrtShaderEnabled / GetCrtShaderOclFilters / GetCrtShaderFilter
  helpers to EncodingHelper
- SW pipeline: format=rgba → hwupload → program_opencl → hwdownload
- Intel VAAPI + OCL tonemap: inline scale_opencl round-trip (zero PCIe)
- Intel VAAPI, VAAPI encoder, no tonemap: hwmap→opencl→CRT→hwmap (zero PCIe)
- Intel VAAPI, SW encoder, no tonemap: hwmap→opencl→CRT→hwdownload (1× PCIe)
- AMD VAAPI + VK tonemap: hwmap→opencl→CRT→hwmap after scale_vaapi (zero PCIe)
- AMD VAAPI, SW encoder: hwmap→opencl→CRT→hwdownload (1× PCIe)

Shadow mask variant is configurable via streamOptions[crtShadowMask]=0..4.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-24 14:19:31 +01:00

342 KiB