Explorar el Código

Merge pull request #9391 from nyanmisaka/next-fixes

Bond-009 hace 2 años
padre
commit
22a8283a9e

+ 13 - 4
MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs

@@ -4541,6 +4541,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)
@@ -4565,14 +4569,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
@@ -4607,7 +4613,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);
                 }
                 }
             }
             }
 
 
@@ -4616,9 +4623,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)

+ 2 - 1
MediaBrowser.Model/Configuration/EncodingOptions.cs

@@ -34,7 +34,8 @@ namespace MediaBrowser.Model.Configuration
             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;