Browse Source

add vaapi hardware acceleration

pull/41/head
Jason Dove 5 years ago
parent
commit
c22913dd82
  1. 3
      ErsatzTV.Core/Domain/HardwareAccelerationKind.cs
  2. 10
      ErsatzTV.Core/FFmpeg/FFmpegProcessBuilder.cs
  3. 1
      ErsatzTV.sln.DotSettings
  4. 9
      ErsatzTV/Validators/FFmpegProfileEditViewModelValidator.cs

3
ErsatzTV.Core/Domain/HardwareAccelerationKind.cs

@ -4,6 +4,7 @@ @@ -4,6 +4,7 @@
{
None = 0,
Qsv = 1,
Nvenc = 2
Nvenc = 2,
Vaapi = 3
}
}

10
ErsatzTV.Core/FFmpeg/FFmpegProcessBuilder.cs

@ -66,6 +66,14 @@ namespace ErsatzTV.Core.FFmpeg @@ -66,6 +66,14 @@ namespace ErsatzTV.Core.FFmpeg
_arguments.Add("-hwaccel_output_format");
_arguments.Add("cuda");
break;
case HardwareAccelerationKind.Vaapi:
_arguments.Add("-hwaccel");
_arguments.Add("vaapi");
_arguments.Add("-vaapi_device");
_arguments.Add("/dev/dri/renderD128");
_arguments.Add("-hwaccel_output_format");
_arguments.Add("vaapi");
break;
}
return this;
@ -291,6 +299,8 @@ namespace ErsatzTV.Core.FFmpeg @@ -291,6 +299,8 @@ namespace ErsatzTV.Core.FFmpeg
{
HardwareAccelerationKind.Qsv => $"scale_qsv=w={displaySize.Width}:h={displaySize.Height}",
HardwareAccelerationKind.Nvenc => $"scale_cuda={displaySize.Width}:{displaySize.Height}",
HardwareAccelerationKind.Vaapi =>
$"hwupload,scale_vaapi=w={displaySize.Width}:h={displaySize.Height}:format=nv12",
_ => $"scale={displaySize.Width}:{displaySize.Height}:flags={algorithm}"
});

1
ErsatzTV.sln.DotSettings

@ -39,4 +39,5 @@ @@ -39,4 +39,5 @@
<s:Boolean x:Key="/Default/UserDictionary/Words/=probesize/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=setsar/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=tvshow/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Vaapi/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=yadif/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>

9
ErsatzTV/Validators/FFmpegProfileEditViewModelValidator.cs

@ -9,6 +9,7 @@ namespace ErsatzTV.Validators @@ -9,6 +9,7 @@ namespace ErsatzTV.Validators
{
private static readonly List<string> QsvEncoders = new() { "h264_qsv", "hevc_qsv", "mpeg2_qsv" };
private static readonly List<string> NvencEncoders = new() { "h264_nvenc", "hevc_nvenc" };
private static readonly List<string> VaapiEncoders = new() { "h264_vaapi", "hevc_vaapi", "mpeg2_vaapi" };
public FFmpegProfileEditViewModelValidator()
{
@ -47,6 +48,14 @@ namespace ErsatzTV.Validators @@ -47,6 +48,14 @@ namespace ErsatzTV.Validators
RuleFor(x => x.NormalizeResolution).Must(x => x == false)
.WithMessage("Resolution normalization (scaling) is not yet supported with NVENC");
});
When(
x => x.HardwareAcceleration == HardwareAccelerationKind.Vaapi,
() =>
{
RuleFor(x => x.VideoCodec).Must(c => VaapiEncoders.Contains(c))
.WithMessage("VAAPI codec is required (h264_vaapi, hevc_vaapi, mpeg2_vaapi)");
});
When(
x => x.HardwareAcceleration == HardwareAccelerationKind.None,

Loading…
Cancel
Save