From d725f9a5832ea437023a4d682d137ecbb4d41d07 Mon Sep 17 00:00:00 2001 From: mani Date: Tue, 24 Feb 2026 14:39:21 +0100 Subject: [PATCH] Add CRT shader support to Intel QSV pipeline MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Insert VAAPI→OpenCL→CRT→VAAPI round-trip (isVaapiDecoder path) and inline OCL filters (doOclTonemap path) into GetIntelQsvVaapiVidFiltersPrefered so the CRT Lottes shader is applied when the h264_qsv encoder is active. Co-Authored-By: Claude Sonnet 4.6 --- .../MediaEncoding/EncodingHelper.cs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) 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"); }