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;
public class VaapiHardwareAccelerationOption : GlobalOption public class VaapiHardwareAccelerationOption : GlobalOption
{ {
private readonly FFmpegCapability _decodeCapability; 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; _vaapiDevice = vaapiDevice;
_decodeCapability = decodeCapability; _decodeCapability = decodeCapability;
} }
public override string[] GlobalOptions => _decodeCapability == FFmpegCapability.Hardware public override string[] GlobalOptions
? new[] { "-hwaccel", "vaapi", "-vaapi_device", _vaapiDevice } {
: new[] { "-vaapi_device", _vaapiDevice }; 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 public override FrameState NextState(FrameState currentState) => currentState with
{ {

8
ErsatzTV.FFmpeg/Pipeline/VaapiPipelineBuilder.cs

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

Loading…
Cancel
Save