Browse Source

fixes #2578 - [VAAPI Bug] HEVC Decoding not possible on Intel hardware without this ability

Luke Pulverenti 8 năm trước cách đây
mục cha
commit
ceed0241fd

+ 16 - 7
MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs

@@ -42,6 +42,11 @@ namespace MediaBrowser.Controller.MediaEncoding
             {
                 var hwType = encodingOptions.HardwareAccelerationType;
 
+                if (!encodingOptions.EnableHardwareEncoding)
+                {
+                    hwType = null;
+                }
+
                 if (string.Equals(hwType, "qsv", StringComparison.OrdinalIgnoreCase) ||
                     string.Equals(hwType, "h264_qsv", StringComparison.OrdinalIgnoreCase))
                 {
@@ -1761,14 +1766,11 @@ namespace MediaBrowser.Controller.MediaEncoding
                 return null;
             }
 
-            if (state.VideoStream != null && !string.IsNullOrWhiteSpace(state.VideoStream.Codec))
+            if (state.VideoStream != null && 
+                !string.IsNullOrWhiteSpace(state.VideoStream.Codec) && 
+                !string.IsNullOrWhiteSpace(encodingOptions.HardwareAccelerationType) &&
+                encodingOptions.EnableHardwareDecoding)
             {
-                if (!string.IsNullOrWhiteSpace(encodingOptions.HardwareAccelerationType))
-                {
-                    // causing unpredictable results
-                    //return "-hwaccel auto";
-                }
-
                 if (string.Equals(encodingOptions.HardwareAccelerationType, "qsv", StringComparison.OrdinalIgnoreCase))
                 {
                     switch (state.MediaSource.VideoStream.Codec.ToLower())
@@ -1818,6 +1820,13 @@ namespace MediaBrowser.Controller.MediaEncoding
                                 return "-c:v h264_cuvid ";
                             }
                             break;
+                        case "hevc":
+                        case "h265":
+                            if (_mediaEncoder.SupportsDecoder("hevc_cuvid"))
+                            {
+                                return "-c:v hevc_cuvid ";
+                            }
+                            break;
                     }
                 }
             }

+ 4 - 0
MediaBrowser.Model/Configuration/EncodingOptions.cs

@@ -13,6 +13,8 @@ namespace MediaBrowser.Model.Configuration
         public string VaapiDevice { get; set; }
         public int H264Crf { get; set; }
         public string H264Preset { get; set; }
+        public bool EnableHardwareDecoding { get; set; }
+        public bool EnableHardwareEncoding { get; set; }
 
         public EncodingOptions()
         {
@@ -22,6 +24,8 @@ namespace MediaBrowser.Model.Configuration
             EncodingThreadCount = -1;
             VaapiDevice = "/dev/dri/card0";
             H264Crf = 23;
+            EnableHardwareDecoding = true;
+            EnableHardwareEncoding = true;
         }
     }
 }