diff --git a/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs b/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs index bc8190975f..cc088a411c 100644 --- a/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs +++ b/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs @@ -4896,6 +4896,12 @@ namespace MediaBrowser.Controller.MediaEncoding { if (doOclTonemap) { + // CRT shader while already in OpenCL memory (after tonemap) + if (IsCrtShaderEnabled(state)) + { + mainFilters.AddRange(GetCrtShaderOclFilters(state)); + } + // OUTPUT qsv(nv12) surface(vram) // reverse-mapping via qsv(vaapi)-opencl interop. // add extra pool size to avoid the 'cannot allocate memory' error on hevc_qsv. @@ -4904,6 +4910,14 @@ namespace MediaBrowser.Controller.MediaEncoding } else if (isVaapiDecoder) { + if (IsCrtShaderEnabled(state)) + { + // VAAPI → OpenCL → CRT → VAAPI round-trip, then map to QSV + mainFilters.Add("hwmap=derive_device=opencl:mode=read"); + mainFilters.AddRange(GetCrtShaderOclFilters(state)); + mainFilters.Add("hwmap=derive_device=vaapi:mode=write:reverse=1"); + } + mainFilters.Add("hwmap=derive_device=qsv"); mainFilters.Add("format=qsv"); }