Browse Source

fix hw accel

pull/1949/head
Jason Dove 8 months ago
parent
commit
b6b132d7b9
No known key found for this signature in database
  1. 21
      ErsatzTV.FFmpeg/GlobalOption/HardwareAcceleration/VaapiHardwareAccelerationOption.cs
  2. 8
      ErsatzTV.FFmpeg/Pipeline/VaapiPipelineBuilder.cs

21
ErsatzTV.FFmpeg/GlobalOption/HardwareAcceleration/VaapiHardwareAccelerationOption.cs

@ -5,17 +5,28 @@ namespace ErsatzTV.FFmpeg.GlobalOption.HardwareAcceleration; @@ -5,17 +5,28 @@ namespace ErsatzTV.FFmpeg.GlobalOption.HardwareAcceleration;
public class VaapiHardwareAccelerationOption : GlobalOption
{
private readonly FFmpegCapability _decodeCapability;
private readonly string _vaapiDevice;
private readonly Option<string> _vaapiDevice;
public VaapiHardwareAccelerationOption(string vaapiDevice, FFmpegCapability decodeCapability)
public VaapiHardwareAccelerationOption(Option<string> 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
{

8
ErsatzTV.FFmpeg/Pipeline/VaapiPipelineBuilder.cs

@ -80,14 +80,14 @@ public class VaapiPipelineBuilder : SoftwarePipelineBuilder @@ -80,14 +80,14 @@ public class VaapiPipelineBuilder : SoftwarePipelineBuilder
pipelineSteps.Add(new LibvaDriverNameVariable(driverName));
}
Option<string> vaapiDevice = ffmpegState.VaapiDevice;
if (ffmpegState.VaapiDisplay.IfNone("drm") == "drm")
{
foreach (string vaapiDevice in ffmpegState.VaapiDevice)
{
pipelineSteps.Add(new VaapiHardwareAccelerationOption(vaapiDevice, decodeCapability));
}
vaapiDevice = Option<string>.None;
}
pipelineSteps.Add(new VaapiHardwareAccelerationOption(vaapiDevice, decodeCapability));
// use software decoding with an extensive pipeline
if (context is { HasSubtitleOverlay: true, HasWatermark: true })
{

Loading…
Cancel
Save