mirror of
https://github.com/jellyfin/jellyfin.git
synced 2025-07-09 03:04:24 -04:00
Backport pull request #9391 from jellyfin/release-10.8.z
Fix H.264 baseline hwaccel and enable enhanced Nvdec by default Original-merge: 22a8283a9e3425da0496c28e6737dfadf9c67b33 Merged-by: Bond-009 <bond.009@outlook.com> Backported-by: crobibero <cody@robibe.ro>
This commit is contained in:
parent
f6060bd14b
commit
638bda629b
@ -4909,6 +4909,10 @@ namespace MediaBrowser.Controller.MediaEncoding
|
|||||||
// 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);
|
||||||
|
|
||||||
|
// Allow profile mismatch if decoding H.264 baseline with d3d11va and vaapi hwaccels.
|
||||||
|
var profileMismatch = string.Equals(videoCodec, "h264", StringComparison.OrdinalIgnoreCase)
|
||||||
|
&& string.Equals(state.VideoStream?.Profile, "baseline", StringComparison.OrdinalIgnoreCase);
|
||||||
|
|
||||||
if (bitDepth == 10 && isCodecAvailable)
|
if (bitDepth == 10 && isCodecAvailable)
|
||||||
{
|
{
|
||||||
if (string.Equals(videoCodec, "hevc", StringComparison.OrdinalIgnoreCase)
|
if (string.Equals(videoCodec, "hevc", StringComparison.OrdinalIgnoreCase)
|
||||||
@ -4933,14 +4937,16 @@ namespace MediaBrowser.Controller.MediaEncoding
|
|||||||
{
|
{
|
||||||
if (isVaapiSupported && isCodecAvailable)
|
if (isVaapiSupported && isCodecAvailable)
|
||||||
{
|
{
|
||||||
return " -hwaccel vaapi" + (outputHwSurface ? " -hwaccel_output_format vaapi" : string.Empty) + (isAv1 ? " -c:v av1" : string.Empty);
|
return " -hwaccel vaapi" + (outputHwSurface ? " -hwaccel_output_format vaapi" : string.Empty)
|
||||||
|
+ (profileMismatch ? " -hwaccel_flags +allow_profile_mismatch" : string.Empty) + (isAv1 ? " -c:v av1" : string.Empty);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isD3d11Supported && isCodecAvailable)
|
if (isD3d11Supported && isCodecAvailable)
|
||||||
{
|
{
|
||||||
// set -threads 3 to intel d3d11va decoder explicitly. Lower threads may result in dead lock.
|
// set -threads 3 to intel d3d11va decoder explicitly. Lower threads may result in dead lock.
|
||||||
// on newer devices such as Xe, the larger the init_pool_size, the longer the initialization time for opencl to derive from d3d11.
|
// on newer devices such as Xe, the larger the init_pool_size, the longer the initialization time for opencl to derive from d3d11.
|
||||||
return " -hwaccel d3d11va" + (outputHwSurface ? " -hwaccel_output_format d3d11" : string.Empty) + " -threads 3" + (isAv1 ? " -c:v av1" : string.Empty);
|
return " -hwaccel d3d11va" + (outputHwSurface ? " -hwaccel_output_format d3d11" : string.Empty)
|
||||||
|
+ (profileMismatch ? " -hwaccel_flags +allow_profile_mismatch" : string.Empty) + " -threads 3" + (isAv1 ? " -c:v av1" : string.Empty);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -4975,7 +4981,8 @@ namespace MediaBrowser.Controller.MediaEncoding
|
|||||||
{
|
{
|
||||||
if (isD3d11Supported && isCodecAvailable)
|
if (isD3d11Supported && isCodecAvailable)
|
||||||
{
|
{
|
||||||
return " -hwaccel d3d11va" + (outputHwSurface ? " -hwaccel_output_format d3d11" : string.Empty) + (isAv1 ? " -c:v av1" : string.Empty);
|
return " -hwaccel d3d11va" + (outputHwSurface ? " -hwaccel_output_format d3d11" : string.Empty)
|
||||||
|
+ (profileMismatch ? " -hwaccel_flags +allow_profile_mismatch" : string.Empty) + (isAv1 ? " -c:v av1" : string.Empty);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4984,9 +4991,11 @@ namespace MediaBrowser.Controller.MediaEncoding
|
|||||||
&& isVaapiSupported
|
&& isVaapiSupported
|
||||||
&& isCodecAvailable)
|
&& isCodecAvailable)
|
||||||
{
|
{
|
||||||
return " -hwaccel vaapi" + (outputHwSurface ? " -hwaccel_output_format vaapi" : string.Empty) + (isAv1 ? " -c:v av1" : string.Empty);
|
return " -hwaccel vaapi" + (outputHwSurface ? " -hwaccel_output_format vaapi" : string.Empty)
|
||||||
|
+ (profileMismatch ? " -hwaccel_flags +allow_profile_mismatch" : string.Empty) + (isAv1 ? " -c:v av1" : string.Empty);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Apple videotoolbox
|
||||||
if (string.Equals(options.HardwareAccelerationType, "videotoolbox", StringComparison.OrdinalIgnoreCase)
|
if (string.Equals(options.HardwareAccelerationType, "videotoolbox", StringComparison.OrdinalIgnoreCase)
|
||||||
&& isVideotoolboxSupported
|
&& isVideotoolboxSupported
|
||||||
&& isCodecAvailable)
|
&& isCodecAvailable)
|
||||||
|
@ -39,7 +39,8 @@ public class EncodingOptions
|
|||||||
DeinterlaceMethod = "yadif";
|
DeinterlaceMethod = "yadif";
|
||||||
EnableDecodingColorDepth10Hevc = true;
|
EnableDecodingColorDepth10Hevc = true;
|
||||||
EnableDecodingColorDepth10Vp9 = true;
|
EnableDecodingColorDepth10Vp9 = true;
|
||||||
EnableEnhancedNvdecDecoder = false;
|
// Enhanced Nvdec or system native decoder is required for DoVi to SDR tone-mapping.
|
||||||
|
EnableEnhancedNvdecDecoder = true;
|
||||||
PreferSystemNativeHwDecoder = true;
|
PreferSystemNativeHwDecoder = true;
|
||||||
EnableIntelLowPowerH264HwEncoder = false;
|
EnableIntelLowPowerH264HwEncoder = false;
|
||||||
EnableIntelLowPowerHevcHwEncoder = false;
|
EnableIntelLowPowerHevcHwEncoder = false;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user