diff --git a/ErsatzTV.Application/Troubleshooting/Queries/GetTroubleshootingInfoHandler.cs b/ErsatzTV.Application/Troubleshooting/Queries/GetTroubleshootingInfoHandler.cs index 419ff268a..f344eef74 100644 --- a/ErsatzTV.Application/Troubleshooting/Queries/GetTroubleshootingInfoHandler.cs +++ b/ErsatzTV.Application/Troubleshooting/Queries/GetTroubleshootingInfoHandler.cs @@ -102,12 +102,7 @@ public class GetTroubleshootingInfoHandler : IRequestHandler qsvInitModes = [QsvInitMode.None]; - if (_runtimeInfo.IsOSPlatform(OSPlatform.Windows)) - { - qsvInitModes.Add(QsvInitMode.D3d11Va); - } - qsvInitModes.Add(QsvInitMode.Qsv); + var qsvInitModes = QsvInitModes.GetModesToTest(_runtimeInfo).ToList(); foreach (string qsvDevice in vaapiDevices) { diff --git a/ErsatzTV.FFmpeg/Capabilities/HardwareCapabilitiesFactory.cs b/ErsatzTV.FFmpeg/Capabilities/HardwareCapabilitiesFactory.cs index c3f8184d6..f34544a5d 100644 --- a/ErsatzTV.FFmpeg/Capabilities/HardwareCapabilitiesFactory.cs +++ b/ErsatzTV.FFmpeg/Capabilities/HardwareCapabilitiesFactory.cs @@ -577,18 +577,13 @@ public partial class HardwareCapabilitiesFactory( return new QsvHardwareCapabilities(vaapiCapabilities, qsvInitMode.Value); } - var initModesToTest = new Queue(); - initModesToTest.Enqueue(QsvInitMode.None); - if (runtimeInfo.IsOSPlatform(OSPlatform.Windows)) - { - initModesToTest.Enqueue(QsvInitMode.D3d11Va); - } - initModesToTest.Enqueue(QsvInitMode.Qsv); + var initModesToTest = new Queue(QsvInitModes.GetModesToTest(runtimeInfo)); QsvOutput output; - QsvInitMode initMode = initModesToTest.Dequeue(); + QsvInitMode initMode; do { + initMode = initModesToTest.Dequeue(); output = await GetQsvOutput(ffmpegPath, qsvDevice, initMode); if (output.ExitCode == 0) { diff --git a/ErsatzTV.FFmpeg/Capabilities/Qsv/QsvInitModes.cs b/ErsatzTV.FFmpeg/Capabilities/Qsv/QsvInitModes.cs new file mode 100644 index 000000000..d2c6cd45d --- /dev/null +++ b/ErsatzTV.FFmpeg/Capabilities/Qsv/QsvInitModes.cs @@ -0,0 +1,19 @@ +using System.Runtime.InteropServices; +using ErsatzTV.FFmpeg.Runtime; + +namespace ErsatzTV.FFmpeg.Capabilities.Qsv; + +public static class QsvInitModes +{ + public static IEnumerable GetModesToTest(IRuntimeInfo runtimeInfo) + { + yield return QsvInitMode.None; + + if (runtimeInfo.IsOSPlatform(OSPlatform.Windows)) + { + yield return QsvInitMode.D3d11Va; + } + + yield return QsvInitMode.Qsv; + } +}