From cb2dbff490bf27547261afdee100d1005d59705d Mon Sep 17 00:00:00 2001 From: Jason Dove <1695733+jasongdove@users.noreply.github.com> Date: Sat, 22 Nov 2025 11:14:57 -0600 Subject: [PATCH] try software decode for polaris --- .../Capabilities/VaapiHardwareCapabilities.cs | 7 +++++-- .../Pipeline/VaapiPipelineBuilder.cs | 18 ------------------ 2 files changed, 5 insertions(+), 20 deletions(-) diff --git a/ErsatzTV.FFmpeg/Capabilities/VaapiHardwareCapabilities.cs b/ErsatzTV.FFmpeg/Capabilities/VaapiHardwareCapabilities.cs index 77b540c27..4a4c9957a 100644 --- a/ErsatzTV.FFmpeg/Capabilities/VaapiHardwareCapabilities.cs +++ b/ErsatzTV.FFmpeg/Capabilities/VaapiHardwareCapabilities.cs @@ -12,8 +12,6 @@ public class VaapiHardwareCapabilities( { public int EntrypointCount => profileEntrypoints.Count; - public string Generation => generation; - public FFmpegCapability CanDecode( string videoFormat, Option videoProfile, @@ -22,11 +20,16 @@ public class VaapiHardwareCapabilities( { int bitDepth = maybePixelFormat.Map(pf => pf.BitDepth).IfNone(8); + bool isPolaris = generation.Contains("polaris", StringComparison.OrdinalIgnoreCase); + bool isHardware = (videoFormat, videoProfile.IfNone(string.Empty).ToLowerInvariant()) switch { // no hardware decoding of 10-bit h264 (VideoFormat.H264, _) when bitDepth == 10 => false, + // skip polaris hardware decoding 10-bit + (_, _) when bitDepth == 10 && isPolaris => false, + // no hardware decoding of h264 baseline profile (VideoFormat.H264, "baseline" or "66") => false, diff --git a/ErsatzTV.FFmpeg/Pipeline/VaapiPipelineBuilder.cs b/ErsatzTV.FFmpeg/Pipeline/VaapiPipelineBuilder.cs index 9f567054a..16b5bb5e4 100644 --- a/ErsatzTV.FFmpeg/Pipeline/VaapiPipelineBuilder.cs +++ b/ErsatzTV.FFmpeg/Pipeline/VaapiPipelineBuilder.cs @@ -355,25 +355,7 @@ public class VaapiPipelineBuilder : SoftwarePipelineBuilder if (currentState.FrameDataLocation == FrameDataLocation.Hardware) { - if (_hardwareCapabilities is VaapiHardwareCapabilities vaapiCapabilities && - vaapiCapabilities.Generation.Contains("polaris", StringComparison.OrdinalIgnoreCase)) - { - // don't try to download from 8-bit to 10-bit, or 10-bit to 8-bit - HardwareDownloadFilter hardwareDownload = - currentState.BitDepth == 8 && desiredPixelFormat.Map(pf => pf.BitDepth).IfNone(8) == 10 || - currentState.BitDepth == 10 && desiredPixelFormat.Map(pf => pf.BitDepth).IfNone(10) == 8 - ? new HardwareDownloadFilter(currentState) - : new HardwareDownloadFilter(currentState with { PixelFormat = Some(format) }); - - currentState = hardwareDownload.NextState(currentState); - result.Add(hardwareDownload); - - result.Add(new PixelFormatFilter(format)); - } - else - { result.Add(new VaapiFormatFilter(format)); - } } else {