diff --git a/ErsatzTV.FFmpeg/GlobalOption/HardwareAcceleration/VaapiHardwareAccelerationOption.cs b/ErsatzTV.FFmpeg/GlobalOption/HardwareAcceleration/VaapiHardwareAccelerationOption.cs index 1bea62e4..c57100ba 100644 --- a/ErsatzTV.FFmpeg/GlobalOption/HardwareAcceleration/VaapiHardwareAccelerationOption.cs +++ b/ErsatzTV.FFmpeg/GlobalOption/HardwareAcceleration/VaapiHardwareAccelerationOption.cs @@ -5,17 +5,28 @@ namespace ErsatzTV.FFmpeg.GlobalOption.HardwareAcceleration; public class VaapiHardwareAccelerationOption : GlobalOption { private readonly FFmpegCapability _decodeCapability; - private readonly string _vaapiDevice; + private readonly Option _vaapiDevice; - public VaapiHardwareAccelerationOption(string vaapiDevice, FFmpegCapability decodeCapability) + public VaapiHardwareAccelerationOption(Option vaapiDevice, FFmpegCapability decodeCapability) { _vaapiDevice = vaapiDevice; _decodeCapability = decodeCapability; } - public override string[] GlobalOptions => _decodeCapability == FFmpegCapability.Hardware - ? new[] { "-hwaccel", "vaapi", "-vaapi_device", _vaapiDevice } - : new[] { "-vaapi_device", _vaapiDevice }; + public override string[] GlobalOptions + { + get + { + foreach (string vaapiDevice in _vaapiDevice) + { + return _decodeCapability == FFmpegCapability.Hardware + ? ["-hwaccel", "vaapi", "-vaapi_device", vaapiDevice] + : ["-vaapi_device", vaapiDevice]; + } + + return [ "-hwaccel", "vaapi" ]; + } + } public override FrameState NextState(FrameState currentState) => currentState with { diff --git a/ErsatzTV.FFmpeg/Pipeline/VaapiPipelineBuilder.cs b/ErsatzTV.FFmpeg/Pipeline/VaapiPipelineBuilder.cs index 8042ad93..940634e7 100644 --- a/ErsatzTV.FFmpeg/Pipeline/VaapiPipelineBuilder.cs +++ b/ErsatzTV.FFmpeg/Pipeline/VaapiPipelineBuilder.cs @@ -80,14 +80,14 @@ public class VaapiPipelineBuilder : SoftwarePipelineBuilder pipelineSteps.Add(new LibvaDriverNameVariable(driverName)); } + Option vaapiDevice = ffmpegState.VaapiDevice; if (ffmpegState.VaapiDisplay.IfNone("drm") == "drm") { - foreach (string vaapiDevice in ffmpegState.VaapiDevice) - { - pipelineSteps.Add(new VaapiHardwareAccelerationOption(vaapiDevice, decodeCapability)); - } + vaapiDevice = Option.None; } + pipelineSteps.Add(new VaapiHardwareAccelerationOption(vaapiDevice, decodeCapability)); + // use software decoding with an extensive pipeline if (context is { HasSubtitleOverlay: true, HasWatermark: true }) {