mirror of
https://github.com/jellyfin/jellyfin.git
synced 2024-09-05 21:37:10 -04:00
Fix the wrong logic in HEVC VP9 10bit hwdec boxes
This commit is contained in:
parent
620a5d5e83
commit
ddc2569258
@ -11,6 +11,7 @@ using System.Text;
|
|||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using Jellyfin.Data.Enums;
|
using Jellyfin.Data.Enums;
|
||||||
|
using Jellyfin.Extensions;
|
||||||
using MediaBrowser.Model.Configuration;
|
using MediaBrowser.Model.Configuration;
|
||||||
using MediaBrowser.Model.Dlna;
|
using MediaBrowser.Model.Dlna;
|
||||||
using MediaBrowser.Model.Dto;
|
using MediaBrowser.Model.Dto;
|
||||||
@ -1318,7 +1319,7 @@ namespace MediaBrowser.Controller.MediaEncoding
|
|||||||
{
|
{
|
||||||
string[] valid_h264_qsv = { "veryslow", "slower", "slow", "medium", "fast", "faster", "veryfast" };
|
string[] valid_h264_qsv = { "veryslow", "slower", "slow", "medium", "fast", "faster", "veryfast" };
|
||||||
|
|
||||||
if (valid_h264_qsv.Contains(encodingOptions.EncoderPreset, StringComparer.OrdinalIgnoreCase))
|
if (valid_h264_qsv.Contains(encodingOptions.EncoderPreset, StringComparison.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
param += " -preset " + encodingOptions.EncoderPreset;
|
param += " -preset " + encodingOptions.EncoderPreset;
|
||||||
}
|
}
|
||||||
@ -1669,7 +1670,7 @@ namespace MediaBrowser.Controller.MediaEncoding
|
|||||||
|
|
||||||
// Source and target codecs must match
|
// Source and target codecs must match
|
||||||
if (string.IsNullOrEmpty(videoStream.Codec)
|
if (string.IsNullOrEmpty(videoStream.Codec)
|
||||||
|| !state.SupportedVideoCodecs.Contains(videoStream.Codec, StringComparer.OrdinalIgnoreCase))
|
|| !state.SupportedVideoCodecs.Contains(videoStream.Codec, StringComparison.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -1687,7 +1688,7 @@ namespace MediaBrowser.Controller.MediaEncoding
|
|||||||
var requestedProfile = requestedProfiles[0];
|
var requestedProfile = requestedProfiles[0];
|
||||||
// strip spaces because they may be stripped out on the query string as well
|
// strip spaces because they may be stripped out on the query string as well
|
||||||
if (!string.IsNullOrEmpty(videoStream.Profile)
|
if (!string.IsNullOrEmpty(videoStream.Profile)
|
||||||
&& !requestedProfiles.Contains(videoStream.Profile.Replace(" ", string.Empty, StringComparison.Ordinal), StringComparer.OrdinalIgnoreCase))
|
&& !requestedProfiles.Contains(videoStream.Profile.Replace(" ", string.Empty, StringComparison.Ordinal), StringComparison.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
var currentScore = GetVideoProfileScore(videoStream.Codec, videoStream.Profile);
|
var currentScore = GetVideoProfileScore(videoStream.Codec, videoStream.Profile);
|
||||||
var requestedScore = GetVideoProfileScore(videoStream.Codec, requestedProfile);
|
var requestedScore = GetVideoProfileScore(videoStream.Codec, requestedProfile);
|
||||||
@ -1794,7 +1795,7 @@ namespace MediaBrowser.Controller.MediaEncoding
|
|||||||
|
|
||||||
// Source and target codecs must match
|
// Source and target codecs must match
|
||||||
if (string.IsNullOrEmpty(audioStream.Codec)
|
if (string.IsNullOrEmpty(audioStream.Codec)
|
||||||
|| !supportedAudioCodecs.Contains(audioStream.Codec, StringComparer.OrdinalIgnoreCase))
|
|| !supportedAudioCodecs.Contains(audioStream.Codec, StringComparison.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -4302,11 +4303,19 @@ namespace MediaBrowser.Controller.MediaEncoding
|
|||||||
|
|
||||||
var decoderName = decoderPrefix + '_' + decoderSuffix;
|
var decoderName = decoderPrefix + '_' + decoderSuffix;
|
||||||
|
|
||||||
var isCodecAvailable = _mediaEncoder.SupportsDecoder(decoderName) && options.HardwareDecodingCodecs.Contains(videoCodec, StringComparer.OrdinalIgnoreCase);
|
var isCodecAvailable = _mediaEncoder.SupportsDecoder(decoderName) && options.HardwareDecodingCodecs.Contains(videoCodec, StringComparison.OrdinalIgnoreCase);
|
||||||
if (bitDepth == 10 && isCodecAvailable)
|
if (bitDepth == 10 && isCodecAvailable)
|
||||||
{
|
{
|
||||||
if ((options.HardwareDecodingCodecs.Contains("hevc", StringComparer.OrdinalIgnoreCase) && !options.EnableDecodingColorDepth10Hevc)
|
if (string.Equals(videoCodec, "hevc", StringComparison.OrdinalIgnoreCase)
|
||||||
|| (options.HardwareDecodingCodecs.Contains("vp9", StringComparer.OrdinalIgnoreCase) && !options.EnableDecodingColorDepth10Vp9))
|
&& options.HardwareDecodingCodecs.Contains("hevc", StringComparison.OrdinalIgnoreCase)
|
||||||
|
&& !options.EnableDecodingColorDepth10Hevc)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (string.Equals(videoCodec, "vp9", StringComparison.OrdinalIgnoreCase)
|
||||||
|
&& options.HardwareDecodingCodecs.Contains("vp9", StringComparison.OrdinalIgnoreCase)
|
||||||
|
&& !options.EnableDecodingColorDepth10Vp9)
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -4344,15 +4353,23 @@ namespace MediaBrowser.Controller.MediaEncoding
|
|||||||
var isCudaSupported = (isLinux || isWindows) && IsCudaFullSupported();
|
var isCudaSupported = (isLinux || isWindows) && IsCudaFullSupported();
|
||||||
var isQsvSupported = (isLinux || isWindows) && _mediaEncoder.SupportsHwaccel("qsv");
|
var isQsvSupported = (isLinux || isWindows) && _mediaEncoder.SupportsHwaccel("qsv");
|
||||||
var isVideotoolboxSupported = isMacOS && _mediaEncoder.SupportsHwaccel("videotoolbox");
|
var isVideotoolboxSupported = isMacOS && _mediaEncoder.SupportsHwaccel("videotoolbox");
|
||||||
var isCodecAvailable = options.HardwareDecodingCodecs.Contains(videoCodec, StringComparer.OrdinalIgnoreCase);
|
var isCodecAvailable = options.HardwareDecodingCodecs.Contains(videoCodec, StringComparison.OrdinalIgnoreCase);
|
||||||
|
|
||||||
// Set the av1 codec explicitly to trigger hw accelerator, otherwise libdav1d will be used.
|
// Set the av1 codec explicitly to trigger hw accelerator, otherwise libdav1d will be used.
|
||||||
var isAv1 = string.Equals(videoCodec, "av1", StringComparison.OrdinalIgnoreCase);
|
var isAv1 = string.Equals(videoCodec, "av1", StringComparison.OrdinalIgnoreCase);
|
||||||
|
|
||||||
if (bitDepth == 10 && isCodecAvailable)
|
if (bitDepth == 10 && isCodecAvailable)
|
||||||
{
|
{
|
||||||
if ((options.HardwareDecodingCodecs.Contains("hevc", StringComparer.OrdinalIgnoreCase) && !options.EnableDecodingColorDepth10Hevc)
|
if (string.Equals(videoCodec, "hevc", StringComparison.OrdinalIgnoreCase)
|
||||||
|| (options.HardwareDecodingCodecs.Contains("vp9", StringComparer.OrdinalIgnoreCase) && !options.EnableDecodingColorDepth10Vp9))
|
&& options.HardwareDecodingCodecs.Contains("hevc", StringComparison.OrdinalIgnoreCase)
|
||||||
|
&& !options.EnableDecodingColorDepth10Hevc)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (string.Equals(videoCodec, "vp9", StringComparison.OrdinalIgnoreCase)
|
||||||
|
&& options.HardwareDecodingCodecs.Contains("vp9", StringComparison.OrdinalIgnoreCase)
|
||||||
|
&& !options.EnableDecodingColorDepth10Vp9)
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -5072,12 +5089,12 @@ namespace MediaBrowser.Controller.MediaEncoding
|
|||||||
// Transcoding to 2ch ac3 almost always causes a playback failure
|
// Transcoding to 2ch ac3 almost always causes a playback failure
|
||||||
// Keep it in the supported codecs list, but shift it to the end of the list so that if transcoding happens, another codec is used
|
// Keep it in the supported codecs list, but shift it to the end of the list so that if transcoding happens, another codec is used
|
||||||
var shiftAudioCodecs = new[] { "ac3", "eac3" };
|
var shiftAudioCodecs = new[] { "ac3", "eac3" };
|
||||||
if (audioCodecs.All(i => shiftAudioCodecs.Contains(i, StringComparer.OrdinalIgnoreCase)))
|
if (audioCodecs.All(i => shiftAudioCodecs.Contains(i, StringComparison.OrdinalIgnoreCase)))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
while (shiftAudioCodecs.Contains(audioCodecs[0], StringComparer.OrdinalIgnoreCase))
|
while (shiftAudioCodecs.Contains(audioCodecs[0], StringComparison.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
var removed = shiftAudioCodecs[0];
|
var removed = shiftAudioCodecs[0];
|
||||||
audioCodecs.RemoveAt(0);
|
audioCodecs.RemoveAt(0);
|
||||||
@ -5100,12 +5117,12 @@ namespace MediaBrowser.Controller.MediaEncoding
|
|||||||
}
|
}
|
||||||
|
|
||||||
var shiftVideoCodecs = new[] { "hevc", "h265" };
|
var shiftVideoCodecs = new[] { "hevc", "h265" };
|
||||||
if (videoCodecs.All(i => shiftVideoCodecs.Contains(i, StringComparer.OrdinalIgnoreCase)))
|
if (videoCodecs.All(i => shiftVideoCodecs.Contains(i, StringComparison.OrdinalIgnoreCase)))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
while (shiftVideoCodecs.Contains(videoCodecs[0], StringComparer.OrdinalIgnoreCase))
|
while (shiftVideoCodecs.Contains(videoCodecs[0], StringComparison.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
var removed = shiftVideoCodecs[0];
|
var removed = shiftVideoCodecs[0];
|
||||||
videoCodecs.RemoveAt(0);
|
videoCodecs.RemoveAt(0);
|
||||||
|
Loading…
Reference in New Issue
Block a user