From 018f759fa40b211020339ee0e26fcd3928a0549a Mon Sep 17 00:00:00 2001 From: Jason Dove Date: Tue, 21 Feb 2023 09:53:23 -0600 Subject: [PATCH] improve vaapi capability detection (#1171) --- CHANGELOG.md | 1 + .../Capabilities/Vaapi/VaapiEntrypoint.cs | 1 + .../Capabilities/VaapiHardwareCapabilities.cs | 16 ++++++++++++---- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index dc95c37ca..4a2b94baf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ### Fixed - Align default docker image (no acceleration) with new images from [ErsatzTV-ffmpeg](https://github.com/jasongdove/ErsatzTV-ffmpeg) - Fix some transcoding pipelines that use software decoders +- Improve VAAPI encoder capability detection on newer hardware ### Changed - Plex, Jellyfin and Emby libraries now retrieve all metadata and statistics from the media server diff --git a/ErsatzTV.FFmpeg/Capabilities/Vaapi/VaapiEntrypoint.cs b/ErsatzTV.FFmpeg/Capabilities/Vaapi/VaapiEntrypoint.cs index c990e5b88..041cb8f34 100644 --- a/ErsatzTV.FFmpeg/Capabilities/Vaapi/VaapiEntrypoint.cs +++ b/ErsatzTV.FFmpeg/Capabilities/Vaapi/VaapiEntrypoint.cs @@ -4,4 +4,5 @@ public class VaapiEntrypoint { public const string Decode = "VAEntrypointVLD"; public const string Encode = "VAEntrypointEncSlice"; + public const string EncodeLowPower = "VAEntrypointEncSliceLP"; } diff --git a/ErsatzTV.FFmpeg/Capabilities/VaapiHardwareCapabilities.cs b/ErsatzTV.FFmpeg/Capabilities/VaapiHardwareCapabilities.cs index e9e594d1e..146d2a0a6 100644 --- a/ErsatzTV.FFmpeg/Capabilities/VaapiHardwareCapabilities.cs +++ b/ErsatzTV.FFmpeg/Capabilities/VaapiHardwareCapabilities.cs @@ -97,19 +97,27 @@ public class VaapiHardwareCapabilities : IHardwareCapabilities VideoFormat.H264 => _profileEntrypoints.Contains( - new VaapiProfileEntrypoint(VaapiProfile.H264Main, VaapiEntrypoint.Encode)), + new VaapiProfileEntrypoint(VaapiProfile.H264Main, VaapiEntrypoint.Encode)) || + _profileEntrypoints.Contains( + new VaapiProfileEntrypoint(VaapiProfile.H264Main, VaapiEntrypoint.EncodeLowPower)), VideoFormat.Hevc when bitDepth == 10 => _profileEntrypoints.Contains( - new VaapiProfileEntrypoint(VaapiProfile.HevcMain10, VaapiEntrypoint.Encode)), + new VaapiProfileEntrypoint(VaapiProfile.HevcMain10, VaapiEntrypoint.Encode)) || + _profileEntrypoints.Contains( + new VaapiProfileEntrypoint(VaapiProfile.HevcMain10, VaapiEntrypoint.EncodeLowPower)), VideoFormat.Hevc => _profileEntrypoints.Contains( - new VaapiProfileEntrypoint(VaapiProfile.HevcMain, VaapiEntrypoint.Encode)), + new VaapiProfileEntrypoint(VaapiProfile.HevcMain, VaapiEntrypoint.Encode)) || + _profileEntrypoints.Contains( + new VaapiProfileEntrypoint(VaapiProfile.HevcMain, VaapiEntrypoint.EncodeLowPower)), VideoFormat.Mpeg2Video => _profileEntrypoints.Contains( - new VaapiProfileEntrypoint(VaapiProfile.Mpeg2Main, VaapiEntrypoint.Encode)), + new VaapiProfileEntrypoint(VaapiProfile.Mpeg2Main, VaapiEntrypoint.Encode)) || + _profileEntrypoints.Contains( + new VaapiProfileEntrypoint(VaapiProfile.Mpeg2Main, VaapiEntrypoint.EncodeLowPower)), _ => false };