diff --git a/ErsatzTV.FFmpeg/Capabilities/HardwareCapabilitiesFactory.cs b/ErsatzTV.FFmpeg/Capabilities/HardwareCapabilitiesFactory.cs index 0a6e20c02..1bb27b9ec 100644 --- a/ErsatzTV.FFmpeg/Capabilities/HardwareCapabilitiesFactory.cs +++ b/ErsatzTV.FFmpeg/Capabilities/HardwareCapabilitiesFactory.cs @@ -47,6 +47,7 @@ public partial class HardwareCapabilitiesFactory( public void ClearCache() { + memoryCache.Remove(FFmpegVersionKey); memoryCache.Remove(string.Format(CultureInfo.InvariantCulture, FFmpegCapabilitiesCacheKeyFormat, "hwaccels")); memoryCache.Remove(string.Format(CultureInfo.InvariantCulture, FFmpegCapabilitiesCacheKeyFormat, "decoders")); memoryCache.Remove(string.Format(CultureInfo.InvariantCulture, FFmpegCapabilitiesCacheKeyFormat, "filters")); diff --git a/ErsatzTV.FFmpeg/Capabilities/NvidiaHardwareCapabilities.cs b/ErsatzTV.FFmpeg/Capabilities/NvidiaHardwareCapabilities.cs index 02fb5f33d..f8376ae56 100644 --- a/ErsatzTV.FFmpeg/Capabilities/NvidiaHardwareCapabilities.cs +++ b/ErsatzTV.FFmpeg/Capabilities/NvidiaHardwareCapabilities.cs @@ -60,8 +60,10 @@ public class NvidiaHardwareCapabilities(CudaDevice cudaDevice, IFFmpegCapabiliti // 10-bit h264 hardware decode is not supported until ffmpeg 8 if (isHardware && videoFormat is VideoFormat.H264 && bitDepth == 10) { - if (!ffmpegCapabilities.Version.StartsWith("8.", StringComparison.OrdinalIgnoreCase) && - !ffmpegCapabilities.Version.StartsWith("n8.", StringComparison.OrdinalIgnoreCase)) + bool isVersion8OrNewer = int.TryParse( + ffmpegCapabilities.Version.Split('.')[0].TrimStart('n', 'N'), + out int major) && major >= 8; + if (!isVersion8OrNewer) { isHardware = false; } diff --git a/ErsatzTV.Infrastructure/Health/Checks/FFmpegVersionHealthCheck.cs b/ErsatzTV.Infrastructure/Health/Checks/FFmpegVersionHealthCheck.cs index f7869bd25..f0f663f72 100644 --- a/ErsatzTV.Infrastructure/Health/Checks/FFmpegVersionHealthCheck.cs +++ b/ErsatzTV.Infrastructure/Health/Checks/FFmpegVersionHealthCheck.cs @@ -39,7 +39,7 @@ public class FFmpegVersionHealthCheck( { Option maybeVersion = await hardwareCapabilitiesFactory.GetFFmpegVersion(ffmpegPath.Value, cancellationToken); - if (maybeVersion.IsNone) + if (maybeVersion.IsNone || maybeVersion.Exists(string.IsNullOrWhiteSpace)) { return WarningResult("Unable to determine ffmpeg version", "Unable to determine ffmpeg version", link); } @@ -57,7 +57,7 @@ public class FFmpegVersionHealthCheck( { Option maybeVersion = await hardwareCapabilitiesFactory.GetFFmpegVersion(ffprobePath.Value, cancellationToken); - if (maybeVersion.IsNone) + if (maybeVersion.IsNone || maybeVersion.Exists(string.IsNullOrWhiteSpace)) { return WarningResult( "Unable to determine ffprobe version",