From 4199f7acc24c60942a68039b48fc272e8f767acf Mon Sep 17 00:00:00 2001 From: Nyanmisaka Date: Sat, 3 May 2025 14:21:08 +0000 Subject: Fix the transparency issue of ASS subtitle rendering in HWA (#14024) --- .../Encoder/EncoderValidator.cs | 35 ++++++++-------------- MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs | 11 ++----- 2 files changed, 15 insertions(+), 31 deletions(-) (limited to 'MediaBrowser.MediaEncoding/Encoder') diff --git a/MediaBrowser.MediaEncoding/Encoder/EncoderValidator.cs b/MediaBrowser.MediaEncoding/Encoder/EncoderValidator.cs index 5683de169..77fd1bcd2 100644 --- a/MediaBrowser.MediaEncoding/Encoder/EncoderValidator.cs +++ b/MediaBrowser.MediaEncoding/Encoder/EncoderValidator.cs @@ -150,15 +150,17 @@ namespace MediaBrowser.MediaEncoding.Encoder "overlay_rkrga" ]; - private static readonly Dictionary _filterOptionsDict = new Dictionary + private static readonly Dictionary _filterOptionsDict = new Dictionary { - { 0, new string[] { "scale_cuda", "format" } }, - { 1, new string[] { "tonemap_cuda", "GPU accelerated HDR to SDR tonemapping" } }, - { 2, new string[] { "tonemap_opencl", "bt2390" } }, - { 3, new string[] { "overlay_opencl", "Action to take when encountering EOF from secondary input" } }, - { 4, new string[] { "overlay_vaapi", "Action to take when encountering EOF from secondary input" } }, - { 5, new string[] { "overlay_vulkan", "Action to take when encountering EOF from secondary input" } }, - { 6, new string[] { "transpose_opencl", "rotate by half-turn" } } + { FilterOptionType.ScaleCudaFormat, ("scale_cuda", "format") }, + { FilterOptionType.TonemapCudaName, ("tonemap_cuda", "GPU accelerated HDR to SDR tonemapping") }, + { FilterOptionType.TonemapOpenclBt2390, ("tonemap_opencl", "bt2390") }, + { FilterOptionType.OverlayOpenclFrameSync, ("overlay_opencl", "Action to take when encountering EOF from secondary input") }, + { FilterOptionType.OverlayVaapiFrameSync, ("overlay_vaapi", "Action to take when encountering EOF from secondary input") }, + { FilterOptionType.OverlayVulkanFrameSync, ("overlay_vulkan", "Action to take when encountering EOF from secondary input") }, + { FilterOptionType.TransposeOpenclReversal, ("transpose_opencl", "rotate by half-turn") }, + { FilterOptionType.OverlayOpenclAlphaFormat, ("overlay_opencl", "alpha_format") }, + { FilterOptionType.OverlayCudaAlphaFormat, ("overlay_cuda", "alpha_format") } }; private static readonly Dictionary _bsfOptionsDict = new Dictionary @@ -294,7 +296,8 @@ namespace MediaBrowser.MediaEncoding.Encoder public IEnumerable GetFilters() => GetFFmpegFilters(); - public IDictionary GetFiltersWithOption() => GetFFmpegFiltersWithOption(); + public IDictionary GetFiltersWithOption() => _filterOptionsDict + .ToDictionary(item => item.Key, item => CheckFilterWithOption(item.Value.Item1, item.Value.Item2)); public IDictionary GetBitStreamFiltersWithOption() => _bsfOptionsDict .ToDictionary(item => item.Key, item => CheckBitStreamFilterWithOption(item.Value.Item1, item.Value.Item2)); @@ -628,20 +631,6 @@ namespace MediaBrowser.MediaEncoding.Encoder return found; } - private Dictionary GetFFmpegFiltersWithOption() - { - Dictionary dict = new Dictionary(); - for (int i = 0; i < _filterOptionsDict.Count; i++) - { - if (_filterOptionsDict.TryGetValue(i, out var val) && val.Length == 2) - { - dict.Add(i, CheckFilterWithOption(val[0], val[1])); - } - } - - return dict; - } - private string GetProcessOutput(string path, string arguments, bool readStdErr, string? testKey) { var redirectStandardIn = !string.IsNullOrEmpty(testKey); diff --git a/MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs b/MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs index bf574a06f..897652fcd 100644 --- a/MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs +++ b/MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs @@ -72,7 +72,7 @@ namespace MediaBrowser.MediaEncoding.Encoder private List _decoders = new List(); private List _hwaccels = new List(); private List _filters = new List(); - private IDictionary _filtersWithOption = new Dictionary(); + private IDictionary _filtersWithOption = new Dictionary(); private IDictionary _bitStreamFiltersWithOption = new Dictionary(); private bool _isPkeyPauseSupported = false; @@ -341,7 +341,7 @@ namespace MediaBrowser.MediaEncoding.Encoder _filters = list.ToList(); } - public void SetAvailableFiltersWithOption(IDictionary dict) + public void SetAvailableFiltersWithOption(IDictionary dict) { _filtersWithOption = dict; } @@ -383,12 +383,7 @@ namespace MediaBrowser.MediaEncoding.Encoder /// public bool SupportsFilterWithOption(FilterOptionType option) { - if (_filtersWithOption.TryGetValue((int)option, out var val)) - { - return val; - } - - return false; + return _filtersWithOption.TryGetValue(option, out var val) && val; } public bool SupportsBitStreamFilterWithOption(BitStreamFilterOptionType option) -- cgit v1.2.3