From 464c02885ea7b1ec7f7d073fd938fd39ee161839 Mon Sep 17 00:00:00 2001 From: mani Date: Wed, 25 Feb 2026 21:15:41 +0100 Subject: [PATCH] Fix CRT shader: add missing QSV decoder path in VAAPI+QSV pipeline MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The SDR case (QSV decoder + QSV encoder, no OCL tonemap) was never handled — the frame stayed in QSV VRAM with no OpenCL round-trip, so the CRT filter was simply never applied. Add else-if (isQsvDecoder) branch that maps QSV→OpenCL, applies the CRT kernel, then reverse-maps back to QSV. Co-Authored-By: Claude Sonnet 4.6 --- .../MediaEncoding/EncodingHelper.cs | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs b/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs index 4c8a2b39e9..d4852decba 100644 --- a/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs +++ b/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs @@ -4933,6 +4933,17 @@ namespace MediaBrowser.Controller.MediaEncoding mainFilters.Add("hwmap=derive_device=qsv"); mainFilters.Add("format=qsv"); } + else if (isQsvDecoder) + { + if (IsCrtShaderEnabled(state)) + { + // QSV → OpenCL → CRT → QSV round-trip (SDR, no tonemap) + mainFilters.Add("hwmap=derive_device=opencl:mode=read"); + mainFilters.AddRange(GetCrtShaderOclFilters(state)); + mainFilters.Add("hwmap=derive_device=qsv:mode=write:reverse=1:extra_hw_frames=16"); + mainFilters.Add("format=qsv"); + } + } } /* Make sub and overlay filters for subtitle stream */