Browse Source

qsv fixes

pull/41/head
Jason Dove 5 years ago
parent
commit
695c2689c2
  1. 17
      ErsatzTV.Core.Tests/FFmpeg/FFmpegComplexFilterBuilderTests.cs
  2. 6
      ErsatzTV.Core/FFmpeg/FFmpegComplexFilterBuilder.cs
  3. 2
      ErsatzTV.Core/FFmpeg/FFmpegProcessBuilder.cs

17
ErsatzTV.Core.Tests/FFmpeg/FFmpegComplexFilterBuilderTests.cs

@ -119,32 +119,32 @@ namespace ErsatzTV.Core.Tests.FFmpeg @@ -119,32 +119,32 @@ namespace ErsatzTV.Core.Tests.FFmpeg
true,
true,
false,
"[0:v]deinterlace_qsv,scale_qsv=w=1920:h=1000,hwdownload,setsar=1,hwupload[v]",
"[0:v]deinterlace_qsv,scale_qsv=w=1920:h=1000,hwdownload,format=nv12,setsar=1,hwupload=extra_hw_frames=64[v]",
"[v]")]
[TestCase(
true,
false,
true,
"[0:v]deinterlace_qsv,hwdownload,setsar=1,pad=1920:1080:(ow-iw)/2:(oh-ih)/2,hwupload[v]",
"[0:v]deinterlace_qsv,hwdownload,format=nv12,setsar=1,pad=1920:1080:(ow-iw)/2:(oh-ih)/2,hwupload=extra_hw_frames=64[v]",
"[v]")]
[TestCase(
true,
true,
true,
"[0:v]deinterlace_qsv,scale_qsv=w=1920:h=1000,hwdownload,setsar=1,pad=1920:1080:(ow-iw)/2:(oh-ih)/2,hwupload[v]",
"[0:v]deinterlace_qsv,scale_qsv=w=1920:h=1000,hwdownload,format=nv12,setsar=1,pad=1920:1080:(ow-iw)/2:(oh-ih)/2,hwupload=extra_hw_frames=64[v]",
"[v]")]
[TestCase(false, true, false, "[0:v]scale_qsv=w=1920:h=1000,hwdownload,setsar=1,hwupload[v]", "[v]")]
[TestCase(false, true, false, "[0:v]scale_qsv=w=1920:h=1000,hwdownload,format=nv12,setsar=1,hwupload=extra_hw_frames=64[v]", "[v]")]
[TestCase(
false,
false,
true,
"[0:v]hwdownload,setsar=1,pad=1920:1080:(ow-iw)/2:(oh-ih)/2,hwupload[v]",
"[0:v]hwdownload,format=nv12,setsar=1,pad=1920:1080:(ow-iw)/2:(oh-ih)/2,hwupload=extra_hw_frames=64[v]",
"[v]")]
[TestCase(
false,
true,
true,
"[0:v]scale_qsv=w=1920:h=1000,hwdownload,setsar=1,pad=1920:1080:(ow-iw)/2:(oh-ih)/2,hwupload[v]",
"[0:v]scale_qsv=w=1920:h=1000,hwdownload,format=nv12,setsar=1,pad=1920:1080:(ow-iw)/2:(oh-ih)/2,hwupload=extra_hw_frames=64[v]",
"[v]")]
public void Should_Return_QSV_Video_Filter(
bool deinterlace,
@ -200,7 +200,6 @@ namespace ErsatzTV.Core.Tests.FFmpeg @@ -200,7 +200,6 @@ namespace ErsatzTV.Core.Tests.FFmpeg
// true,
// "[0:v]yadif_cuda,scale_npp=1920:1000:format=yuv420p,hwdownload,setsar=1,pad=1920:1080:(ow-iw)/2:(oh-ih)/2,hwupload[v]",
// "[v]")]
[TestCase(true, false, false, "[0:v][v]", "[v]")]
[TestCase(
true,
true,
@ -211,7 +210,7 @@ namespace ErsatzTV.Core.Tests.FFmpeg @@ -211,7 +210,7 @@ namespace ErsatzTV.Core.Tests.FFmpeg
true,
false,
true,
"[0:v]hwdownload,setsar=1,pad=1920:1080:(ow-iw)/2:(oh-ih)/2,hwupload[v]",
"[0:v]hwdownload,format=nv12,setsar=1,pad=1920:1080:(ow-iw)/2:(oh-ih)/2,hwupload[v]",
"[v]")]
[TestCase(
true,
@ -229,7 +228,7 @@ namespace ErsatzTV.Core.Tests.FFmpeg @@ -229,7 +228,7 @@ namespace ErsatzTV.Core.Tests.FFmpeg
false,
false,
true,
"[0:v]hwdownload,setsar=1,pad=1920:1080:(ow-iw)/2:(oh-ih)/2,hwupload[v]",
"[0:v]hwdownload,format=nv12,setsar=1,pad=1920:1080:(ow-iw)/2:(oh-ih)/2,hwupload[v]",
"[v]")]
[TestCase(
false,

6
ErsatzTV.Core/FFmpeg/FFmpegComplexFilterBuilder.cs

@ -105,7 +105,8 @@ namespace ErsatzTV.Core.FFmpeg @@ -105,7 +105,8 @@ namespace ErsatzTV.Core.FFmpeg
if (acceleration != HardwareAccelerationKind.None)
{
filterQueue.Add("hwdownload");
if (_scaleToSize.IsNone && acceleration == HardwareAccelerationKind.Nvenc)
if ((_scaleToSize.IsNone && acceleration == HardwareAccelerationKind.Nvenc) ||
acceleration == HardwareAccelerationKind.Qsv)
{
filterQueue.Add("format=nv12");
}
@ -118,7 +119,8 @@ namespace ErsatzTV.Core.FFmpeg @@ -118,7 +119,8 @@ namespace ErsatzTV.Core.FFmpeg
if ((_scaleToSize.IsSome || _padToSize.IsSome) && acceleration != HardwareAccelerationKind.None)
{
filterQueue.Add("hwupload");
filterQueue.Add(
acceleration == HardwareAccelerationKind.Qsv ? "hwupload=extra_hw_frames=64" : "hwupload");
}
if (filterQueue.Any())

2
ErsatzTV.Core/FFmpeg/FFmpegProcessBuilder.cs

@ -57,6 +57,8 @@ namespace ErsatzTV.Core.FFmpeg @@ -57,6 +57,8 @@ namespace ErsatzTV.Core.FFmpeg
case HardwareAccelerationKind.Qsv:
_arguments.Add("-hwaccel");
_arguments.Add("qsv");
_arguments.Add("-init_hw_device");
_arguments.Add("qsv=qsv:MFX_IMPL_hw_any");
break;
case HardwareAccelerationKind.Nvenc:
_arguments.Add("-hwaccel");

Loading…
Cancel
Save