From 5439db89a73ee44336b70e7af4889a598489ceb5 Mon Sep 17 00:00:00 2001 From: Jason Dove Date: Sun, 19 Sep 2021 21:39:36 -0500 Subject: [PATCH] nvidia fixes (#380) * nvidia fixes * fix tests --- CHANGELOG.md | 2 ++ .../FFmpeg/FFmpegComplexFilterBuilderTests.cs | 12 ++++++------ ErsatzTV.Core/FFmpeg/FFmpegComplexFilterBuilder.cs | 3 ++- .../Health/Checks/HardwareAccelerationHealthCheck.cs | 3 +++ 4 files changed, 13 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 689ae70ac..2ce942bed 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ## [Unreleased] ### Fixed - Fix local television scanner to properly update episode metadata when NFO files have been added/changed +- Properly detect ffmpeg nvenc (cuda) support in Hardware Acceleration health check +- Fix nvenc/cuda filter for some yuv420p content ## [0.0.59-alpha] - 2021-09-18 ### Added diff --git a/ErsatzTV.Core.Tests/FFmpeg/FFmpegComplexFilterBuilderTests.cs b/ErsatzTV.Core.Tests/FFmpeg/FFmpegComplexFilterBuilderTests.cs index 7c250b6e3..2616b5477 100644 --- a/ErsatzTV.Core.Tests/FFmpeg/FFmpegComplexFilterBuilderTests.cs +++ b/ErsatzTV.Core.Tests/FFmpeg/FFmpegComplexFilterBuilderTests.cs @@ -365,37 +365,37 @@ namespace ErsatzTV.Core.Tests.FFmpeg true, true, false, - "[0:0]scale_npp=1920:1000,hwdownload,format=nv12,setsar=1,hwupload[v]", + "[0:0]hwupload_cuda,scale_npp=1920:1000,hwdownload,format=yuv420p|nv12,setsar=1,hwupload[v]", "[v]")] [TestCase( true, false, true, - "[0:0]hwdownload,format=nv12,setsar=1,pad=1920:1080:(ow-iw)/2:(oh-ih)/2,hwupload[v]", + "[0:0]hwdownload,format=yuv420p|nv12,setsar=1,pad=1920:1080:(ow-iw)/2:(oh-ih)/2,hwupload[v]", "[v]")] [TestCase( true, true, true, - "[0:0]scale_npp=1920:1000,hwdownload,format=nv12,setsar=1,pad=1920:1080:(ow-iw)/2:(oh-ih)/2,hwupload[v]", + "[0:0]hwupload_cuda,scale_npp=1920:1000,hwdownload,format=yuv420p|nv12,setsar=1,pad=1920:1080:(ow-iw)/2:(oh-ih)/2,hwupload[v]", "[v]")] [TestCase( false, true, false, - "[0:0]scale_npp=1920:1000,hwdownload,format=nv12,setsar=1,hwupload[v]", + "[0:0]hwupload_cuda,scale_npp=1920:1000,hwdownload,format=yuv420p|nv12,setsar=1,hwupload[v]", "[v]")] [TestCase( false, false, true, - "[0:0]hwdownload,format=nv12,setsar=1,pad=1920:1080:(ow-iw)/2:(oh-ih)/2,hwupload[v]", + "[0:0]hwdownload,format=yuv420p|nv12,setsar=1,pad=1920:1080:(ow-iw)/2:(oh-ih)/2,hwupload[v]", "[v]")] [TestCase( false, true, true, - "[0:0]scale_npp=1920:1000,hwdownload,format=nv12,setsar=1,pad=1920:1080:(ow-iw)/2:(oh-ih)/2,hwupload[v]", + "[0:0]hwupload_cuda,scale_npp=1920:1000,hwdownload,format=yuv420p|nv12,setsar=1,pad=1920:1080:(ow-iw)/2:(oh-ih)/2,hwupload[v]", "[v]")] public void Should_Return_NVENC_Video_Filter( bool deinterlace, diff --git a/ErsatzTV.Core/FFmpeg/FFmpegComplexFilterBuilder.cs b/ErsatzTV.Core/FFmpeg/FFmpegComplexFilterBuilder.cs index 68dd0665f..7a70f22fe 100644 --- a/ErsatzTV.Core/FFmpeg/FFmpegComplexFilterBuilder.cs +++ b/ErsatzTV.Core/FFmpeg/FFmpegComplexFilterBuilder.cs @@ -137,7 +137,7 @@ namespace ErsatzTV.Core.FFmpeg HardwareAccelerationKind.Qsv => $"scale_qsv=w={size.Width}:h={size.Height}", HardwareAccelerationKind.Nvenc when _pixelFormat == "yuv420p10le" => $"hwdownload,format=p010le,format=nv12,hwupload,scale_npp={size.Width}:{size.Height}", - HardwareAccelerationKind.Nvenc => $"scale_npp={size.Width}:{size.Height}", + HardwareAccelerationKind.Nvenc => $"hwupload_cuda,scale_npp={size.Width}:{size.Height}", HardwareAccelerationKind.Vaapi => $"scale_vaapi=w={size.Width}:h={size.Height}", _ => $"scale={size.Width}:{size.Height}:flags=fast_bilinear" }; @@ -161,6 +161,7 @@ namespace ErsatzTV.Core.FFmpeg HardwareAccelerationKind.Vaapi => "format=nv12|vaapi", HardwareAccelerationKind.Nvenc when _scaleToSize.IsNone && _pixelFormat == "yuv420p10le" => "format=p010le,format=nv12", + HardwareAccelerationKind.Nvenc => "format=yuv420p|nv12", _ => "format=nv12" }; videoFilterQueue.Add(format); diff --git a/ErsatzTV.Infrastructure/Health/Checks/HardwareAccelerationHealthCheck.cs b/ErsatzTV.Infrastructure/Health/Checks/HardwareAccelerationHealthCheck.cs index 25d2575ef..768168f23 100644 --- a/ErsatzTV.Infrastructure/Health/Checks/HardwareAccelerationHealthCheck.cs +++ b/ErsatzTV.Infrastructure/Health/Checks/HardwareAccelerationHealthCheck.cs @@ -109,6 +109,9 @@ namespace ErsatzTV.Infrastructure.Health.Checks case "nvenc": result.Add(HardwareAccelerationKind.Nvenc); break; + case "cuda": + result.Add(HardwareAccelerationKind.Nvenc); + break; case "qsv": // qsv is only supported on windows if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))