Browse Source

re-enable hardware acceleration for songs (#499)

pull/500/head
Jason Dove 5 years ago committed by GitHub
parent
commit
55d1871d94
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 29
      ErsatzTV.Core/FFmpeg/FFmpegComplexFilterBuilder.cs
  2. 9
      ErsatzTV.Core/FFmpeg/FFmpegProcessService.cs

29
ErsatzTV.Core/FFmpeg/FFmpegComplexFilterBuilder.cs

@ -143,9 +143,9 @@ namespace ErsatzTV.Core.FFmpeg @@ -143,9 +143,9 @@ namespace ErsatzTV.Core.FFmpeg
HardwareAccelerationKind acceleration = _hardwareAccelerationKind.IfNone(HardwareAccelerationKind.None);
bool isHardwareDecode = acceleration switch
{
HardwareAccelerationKind.Vaapi => _inputCodec != "mpeg4",
HardwareAccelerationKind.Nvenc => true,
HardwareAccelerationKind.Qsv => true,
HardwareAccelerationKind.Vaapi => !isSong && _inputCodec != "mpeg4",
HardwareAccelerationKind.Nvenc => !isSong,
HardwareAccelerationKind.Qsv => !isSong,
_ => false
};
@ -168,6 +168,19 @@ namespace ErsatzTV.Core.FFmpeg @@ -168,6 +168,19 @@ namespace ErsatzTV.Core.FFmpeg
bool usesHardwareFilters = acceleration != HardwareAccelerationKind.None && !isHardwareDecode &&
(_deinterlace || _scaleToSize.IsSome);
if (isSong)
{
switch (acceleration)
{
case HardwareAccelerationKind.Qsv:
videoFilterQueue.Add("format=nv12");
break;
default:
videoFilterQueue.Add("format=yuv420p");
break;
}
}
switch (usesHardwareFilters, false, acceleration)
{
@ -220,6 +233,7 @@ namespace ErsatzTV.Core.FFmpeg @@ -220,6 +233,7 @@ namespace ErsatzTV.Core.FFmpeg
HardwareAccelerationKind.Qsv => $"scale_qsv=w={size.Width}:h={size.Height}",
HardwareAccelerationKind.Nvenc when _pixelFormat is "yuv420p10le" =>
$"hwupload_cuda,scale_cuda={size.Width}:{size.Height}",
HardwareAccelerationKind.Nvenc when isSong => $"scale_cuda={size.Width}:{size.Height}:format=yuv420p",
HardwareAccelerationKind.Nvenc => $"scale_cuda={size.Width}:{size.Height}",
HardwareAccelerationKind.Vaapi => $"scale_vaapi=format=nv12:w={size.Width}:h={size.Height}",
_ => $"scale={size.Width}:{size.Height}:flags=fast_bilinear"
@ -244,6 +258,8 @@ namespace ErsatzTV.Core.FFmpeg @@ -244,6 +258,8 @@ namespace ErsatzTV.Core.FFmpeg
HardwareAccelerationKind.Vaapi => "format=nv12|vaapi",
HardwareAccelerationKind.Nvenc when _pixelFormat == "yuv420p10le" =>
"format=p010le,format=nv12",
HardwareAccelerationKind.Qsv when isSong => "format=nv12,format=yuv420p",
_ when isSong => "format=yuv420p",
_ => "format=nv12"
};
videoFilterQueue.Add(format);
@ -397,9 +413,12 @@ namespace ErsatzTV.Core.FFmpeg @@ -397,9 +413,12 @@ namespace ErsatzTV.Core.FFmpeg
if (usesSoftwareFilters && acceleration != HardwareAccelerationKind.None)
{
switch (acceleration)
switch (isSong, acceleration)
{
case HardwareAccelerationKind.Qsv:
case (true, HardwareAccelerationKind.Nvenc):
complexFilter.Append(",hwupload_cuda");
break;
case (_, HardwareAccelerationKind.Qsv):
complexFilter.Append(",format=yuv420p,hwupload=extra_hw_frames=64");
break;
default:

9
ErsatzTV.Core/FFmpeg/FFmpegProcessService.cs

@ -64,15 +64,6 @@ namespace ErsatzTV.Core.FFmpeg @@ -64,15 +64,6 @@ namespace ErsatzTV.Core.FFmpeg
inPoint,
outPoint);
if (videoVersion is BackgroundImageMediaVersion)
{
FFmpegPlaybackSettings errorSettings =
_playbackSettingsCalculator.CalculateErrorSettings(channel.FFmpegProfile);
playbackSettings.HardwareAcceleration = errorSettings.HardwareAcceleration;
playbackSettings.VideoCodec = errorSettings.VideoCodec;
}
Option<WatermarkOptions> watermarkOptions =
await GetWatermarkOptions(channel, globalWatermark, videoVersion);

Loading…
Cancel
Save