From 0459210718b35509597ec27991bb18982062e281 Mon Sep 17 00:00:00 2001 From: Jason Dove <1695733+jasongdove@users.noreply.github.com> Date: Mon, 25 Nov 2024 14:11:20 -0600 Subject: [PATCH] don't pass vaapi_device when display is not drm --- ErsatzTV.Core/FFmpeg/FFmpegLibraryProcessService.cs | 3 +++ ErsatzTV.FFmpeg.Tests/PipelineBuilderBaseTests.cs | 4 ++++ ErsatzTV.FFmpeg/FFmpegState.cs | 2 ++ ErsatzTV.FFmpeg/Pipeline/VaapiPipelineBuilder.cs | 11 +++++++---- 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/ErsatzTV.Core/FFmpeg/FFmpegLibraryProcessService.cs b/ErsatzTV.Core/FFmpeg/FFmpegLibraryProcessService.cs index 301b5cbb..7d5da5ee 100644 --- a/ErsatzTV.Core/FFmpeg/FFmpegLibraryProcessService.cs +++ b/ErsatzTV.Core/FFmpeg/FFmpegLibraryProcessService.cs @@ -382,6 +382,7 @@ public class FFmpegLibraryProcessService : IFFmpegProcessService saveReports, hwAccel, hwAccel, + VaapiDisplayName(hwAccel, vaapiDisplay), VaapiDriverName(hwAccel, vaapiDriver), VaapiDeviceName(hwAccel, vaapiDevice), playbackSettings.StreamSeek, @@ -536,6 +537,7 @@ public class FFmpegLibraryProcessService : IFFmpegProcessService false, HardwareAccelerationMode.None, // no hw accel decode since errors loop hwAccel, + VaapiDisplayName(hwAccel, vaapiDisplay), VaapiDriverName(hwAccel, vaapiDriver), VaapiDeviceName(hwAccel, vaapiDevice), playbackSettings.StreamSeek, @@ -730,6 +732,7 @@ public class FFmpegLibraryProcessService : IFFmpegProcessService saveReports, HardwareAccelerationMode.None, hwAccel, + vaapiDisplay, vaapiDriver, vaapiDevice, playbackSettings.StreamSeek, diff --git a/ErsatzTV.FFmpeg.Tests/PipelineBuilderBaseTests.cs b/ErsatzTV.FFmpeg.Tests/PipelineBuilderBaseTests.cs index ba51ec24..88c6f040 100644 --- a/ErsatzTV.FFmpeg.Tests/PipelineBuilderBaseTests.cs +++ b/ErsatzTV.FFmpeg.Tests/PipelineBuilderBaseTests.cs @@ -79,6 +79,7 @@ public class PipelineBuilderBaseTests HardwareAccelerationMode.None, Option.None, Option.None, + Option.None, TimeSpan.FromSeconds(1), Option.None, false, @@ -173,6 +174,7 @@ public class PipelineBuilderBaseTests HardwareAccelerationMode.None, Option.None, Option.None, + Option.None, TimeSpan.FromSeconds(1), Option.None, false, @@ -323,6 +325,7 @@ public class PipelineBuilderBaseTests HardwareAccelerationMode.None, Option.None, Option.None, + Option.None, Option.None, Option.None, false, @@ -411,6 +414,7 @@ public class PipelineBuilderBaseTests HardwareAccelerationMode.None, Option.None, Option.None, + Option.None, Option.None, Option.None, false, diff --git a/ErsatzTV.FFmpeg/FFmpegState.cs b/ErsatzTV.FFmpeg/FFmpegState.cs index 0620d5ee..e88e0c58 100644 --- a/ErsatzTV.FFmpeg/FFmpegState.cs +++ b/ErsatzTV.FFmpeg/FFmpegState.cs @@ -6,6 +6,7 @@ public record FFmpegState( bool SaveReport, HardwareAccelerationMode DecoderHardwareAccelerationMode, HardwareAccelerationMode EncoderHardwareAccelerationMode, + Option VaapiDisplay, Option VaapiDriver, Option VaapiDevice, Option Start, @@ -33,6 +34,7 @@ public record FFmpegState( HardwareAccelerationMode.None, Option.None, Option.None, + Option.None, Option.None, Option.None, true, // do not map metadata diff --git a/ErsatzTV.FFmpeg/Pipeline/VaapiPipelineBuilder.cs b/ErsatzTV.FFmpeg/Pipeline/VaapiPipelineBuilder.cs index 465e0d5b..8042ad93 100644 --- a/ErsatzTV.FFmpeg/Pipeline/VaapiPipelineBuilder.cs +++ b/ErsatzTV.FFmpeg/Pipeline/VaapiPipelineBuilder.cs @@ -75,13 +75,16 @@ public class VaapiPipelineBuilder : SoftwarePipelineBuilder encodeCapability = FFmpegCapability.Software; } - foreach (string vaapiDevice in ffmpegState.VaapiDevice) + foreach (string driverName in ffmpegState.VaapiDriver) { - pipelineSteps.Add(new VaapiHardwareAccelerationOption(vaapiDevice, decodeCapability)); + pipelineSteps.Add(new LibvaDriverNameVariable(driverName)); + } - foreach (string driverName in ffmpegState.VaapiDriver) + if (ffmpegState.VaapiDisplay.IfNone("drm") == "drm") + { + foreach (string vaapiDevice in ffmpegState.VaapiDevice) { - pipelineSteps.Add(new LibvaDriverNameVariable(driverName)); + pipelineSteps.Add(new VaapiHardwareAccelerationOption(vaapiDevice, decodeCapability)); } }