瀏覽代碼

Fix mismatch between intel VAAPI UMD/KMD in rare cases

Signed-off-by: nyanmisaka <nst799610810@gmail.com>
nyanmisaka 1 年之前
父節點
當前提交
9c270b149c
共有 1 個文件被更改,包括 12 次插入7 次删除
  1. 12 7
      MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs

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

@@ -775,12 +775,17 @@ namespace MediaBrowser.Controller.MediaEncoding
         private string GetVaapiDeviceArgs(string renderNodePath, string driver, string kernelDriver, string srcDeviceAlias, string alias)
         private string GetVaapiDeviceArgs(string renderNodePath, string driver, string kernelDriver, string srcDeviceAlias, string alias)
         {
         {
             alias ??= VaapiAlias;
             alias ??= VaapiAlias;
-            renderNodePath = renderNodePath ?? "/dev/dri/renderD128";
-            var driverOpts = string.IsNullOrEmpty(driver)
-                ? ":" + renderNodePath
-                : ":,driver=" + driver + (string.IsNullOrEmpty(kernelDriver) ? string.Empty : ",kernel_driver=" + kernelDriver);
+
+            // 'renderNodePath' has higher priority than 'kernelDriver'
+            var driverOpts = string.IsNullOrEmpty(renderNodePath)
+                ? (string.IsNullOrEmpty(kernelDriver) ? string.Empty : ",kernel_driver=" + kernelDriver)
+                : renderNodePath;
+
+            // 'driver' behaves similarly to env LIBVA_DRIVER_NAME
+            driverOpts += string.IsNullOrEmpty(driver) ? string.Empty : ",driver=" + driver;
+
             var options = string.IsNullOrEmpty(srcDeviceAlias)
             var options = string.IsNullOrEmpty(srcDeviceAlias)
-                ? driverOpts
+                ? (string.IsNullOrEmpty(driverOpts) ? string.Empty : ":" + driverOpts)
                 : "@" + srcDeviceAlias;
                 : "@" + srcDeviceAlias;
 
 
             return string.Format(
             return string.Format(
@@ -902,14 +907,14 @@ namespace MediaBrowser.Controller.MediaEncoding
 
 
                 if (_mediaEncoder.IsVaapiDeviceInteliHD)
                 if (_mediaEncoder.IsVaapiDeviceInteliHD)
                 {
                 {
-                    args.Append(GetVaapiDeviceArgs(null, "iHD", null, null, VaapiAlias));
+                    args.Append(GetVaapiDeviceArgs(options.VaapiDevice, "iHD", null, null, VaapiAlias));
                 }
                 }
                 else if (_mediaEncoder.IsVaapiDeviceInteli965)
                 else if (_mediaEncoder.IsVaapiDeviceInteli965)
                 {
                 {
                     // Only override i965 since it has lower priority than iHD in libva lookup.
                     // Only override i965 since it has lower priority than iHD in libva lookup.
                     Environment.SetEnvironmentVariable("LIBVA_DRIVER_NAME", "i965");
                     Environment.SetEnvironmentVariable("LIBVA_DRIVER_NAME", "i965");
                     Environment.SetEnvironmentVariable("LIBVA_DRIVER_NAME_JELLYFIN", "i965");
                     Environment.SetEnvironmentVariable("LIBVA_DRIVER_NAME_JELLYFIN", "i965");
-                    args.Append(GetVaapiDeviceArgs(null, "i965", null, null, VaapiAlias));
+                    args.Append(GetVaapiDeviceArgs(options.VaapiDevice, "i965", null, null, VaapiAlias));
                 }
                 }
 
 
                 var filterDevArgs = string.Empty;
                 var filterDevArgs = string.Empty;