Browse Source

fix nvidia pipeline that only requires setparams (#1074)

pull/1075/head
Jason Dove 4 years ago committed by GitHub
parent
commit
731072425b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 3
      ErsatzTV.Core.Tests/FFmpeg/TranscodingTests.cs
  2. 9
      ErsatzTV.FFmpeg/Pipeline/NvidiaPipelineBuilder.cs

3
ErsatzTV.Core.Tests/FFmpeg/TranscodingTests.cs

@ -130,6 +130,9 @@ public class TranscodingTests @@ -130,6 +130,9 @@ public class TranscodingTests
// example format that requires colorspace filter
new("libx264", "yuv420p", "tv", "smpte170m", "bt709", "smpte170m"),
// example format that requires setparams filter
new("libx264", "yuv420p", string.Empty, string.Empty, string.Empty, string.Empty),
// new("libx264", "yuvj420p"),
new("libx264", "yuv420p10le"),
// new("libx264", "yuv444p10le"),

9
ErsatzTV.FFmpeg/Pipeline/NvidiaPipelineBuilder.cs

@ -300,13 +300,14 @@ public class NvidiaPipelineBuilder : SoftwarePipelineBuilder @@ -300,13 +300,14 @@ public class NvidiaPipelineBuilder : SoftwarePipelineBuilder
if (currentState.FrameDataLocation == FrameDataLocation.Hardware)
{
bool noPipelineFilters = !pipelineSteps.OfType<IPipelineFilterStep>().Any();
bool softwareColorspace = result is [ColorspaceFilter colorspace] &&
!colorspace.Filter.StartsWith("setparams=");
bool noPipelineFilters = !pipelineSteps
.Filter(ps => ps is not IEncoder)
.OfType<IPipelineFilterStep>().Any();
bool hasColorspace = result is [ColorspaceFilter];
bool softwareDecoder = ffmpegState.DecoderHardwareAccelerationMode == HardwareAccelerationMode.None;
if (softwareDecoder || (noPipelineFilters && softwareColorspace))
if (softwareDecoder || (noPipelineFilters && hasColorspace))
{
result.Add(new CudaFormatFilter(format));
}

Loading…
Cancel
Save