Fix CRT shader: add OpenCL capability check and scale_opencl syntax

- IsCrtShaderEnabled now guards on SupportsHwaccel("opencl"),
  SupportsFilter("program_opencl") and SupportsFilter("scale_opencl")
  so the filter is silently skipped instead of causing an FFmpeg error
  when OpenCL is unavailable
- Drop w=iw:h=ih from scale_opencl (iw/ih are not valid expressions in
  the OpenCL scale filter; omitting them defaults to input dimensions)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
mani
2026-02-24 14:24:38 +01:00
parent 6fbc0f87df
commit cddaff96c2

View File

@@ -3716,7 +3716,10 @@ namespace MediaBrowser.Controller.MediaEncoding
{
return state.BaseRequest.StreamOptions.TryGetValue("crtShader", out var val)
&& string.Equals(val, "true", StringComparison.OrdinalIgnoreCase)
&& File.Exists(Path.Combine(AppContext.BaseDirectory, "Resources", "Shaders", "crt_lottes.cl"));
&& File.Exists(Path.Combine(AppContext.BaseDirectory, "Resources", "Shaders", "crt_lottes.cl"))
&& _mediaEncoder.SupportsHwaccel("opencl")
&& _mediaEncoder.SupportsFilter("program_opencl")
&& _mediaEncoder.SupportsFilter("scale_opencl");
}
private string GetCrtEscapedShaderPath()
@@ -3751,10 +3754,10 @@ namespace MediaBrowser.Controller.MediaEncoding
return
[
"scale_opencl=w=iw:h=ih:format=rgba",
"scale_opencl=format=rgba",
FormattableString.Invariant(
$"program_opencl=source={escapedPath}:kernel=crt_lottes:build_opts='{buildOpts}'"),
"scale_opencl=w=iw:h=ih:format=nv12"
"scale_opencl=format=nv12"
];
}