diff options
| author | Bond-009 <bond.009@outlook.com> | 2024-09-04 16:06:07 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-09-04 16:06:07 +0200 |
| commit | 737a1b8a37e95bb4ed5e622d53209fa498239084 (patch) | |
| tree | cca3ae52142f2b89bd864439e4f6bcde505c85b3 | |
| parent | 3b2e4e27ebf0cdad827041f470a78d0334786e8a (diff) | |
| parent | 6eec6c9957fcbf10ac80c4b66ceed06ef4fbe0ce (diff) | |
Merge pull request #12384 from evanjarrett/qsv-renderdevice
Update QSV device args to use the renderNodePath
| -rw-r--r-- | MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs | 12 | ||||
| -rw-r--r-- | MediaBrowser.Model/Configuration/EncodingOptions.cs | 6 |
2 files changed, 15 insertions, 3 deletions
diff --git a/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs b/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs index 0530e2af0..a459ce8b6 100644 --- a/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs +++ b/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs @@ -878,17 +878,23 @@ namespace MediaBrowser.Controller.MediaEncoding renderNodePath); } - private string GetQsvDeviceArgs(string alias) + private string GetQsvDeviceArgs(string renderNodePath, string alias) { var arg = " -init_hw_device qsv=" + (alias ?? QsvAlias); if (OperatingSystem.IsLinux()) { // derive qsv from vaapi device - return GetVaapiDeviceArgs(null, "iHD", "i915", null, VaapiAlias) + arg + "@" + VaapiAlias; + return GetVaapiDeviceArgs(renderNodePath, "iHD", "i915", null, VaapiAlias) + arg + "@" + VaapiAlias; } if (OperatingSystem.IsWindows()) { + // on Windows, the deviceIndex is an int + if (int.TryParse(renderNodePath, NumberStyles.Integer, CultureInfo.InvariantCulture, out int deviceIndex)) + { + return GetD3d11vaDeviceArgs(deviceIndex, string.Empty, D3d11vaAlias) + arg + "@" + D3d11vaAlias; + } + // derive qsv from d3d11va device return GetD3d11vaDeviceArgs(0, "0x8086", D3d11vaAlias) + arg + "@" + D3d11vaAlias; } @@ -1048,7 +1054,7 @@ namespace MediaBrowser.Controller.MediaEncoding return string.Empty; } - args.Append(GetQsvDeviceArgs(QsvAlias)); + args.Append(GetQsvDeviceArgs(options.QsvDevice, QsvAlias)); var filterDevArgs = GetFilterHwDeviceArgs(QsvAlias); // child device used by qsv. if (_mediaEncoder.SupportsHwaccel("vaapi") || _mediaEncoder.SupportsHwaccel("d3d11va")) diff --git a/MediaBrowser.Model/Configuration/EncodingOptions.cs b/MediaBrowser.Model/Configuration/EncodingOptions.cs index 9a192f584..4c5213d4e 100644 --- a/MediaBrowser.Model/Configuration/EncodingOptions.cs +++ b/MediaBrowser.Model/Configuration/EncodingOptions.cs @@ -26,6 +26,7 @@ public class EncodingOptions // This is a DRM device that is almost guaranteed to be there on every intel platform, // plus it's the default one in ffmpeg if you don't specify anything VaapiDevice = "/dev/dri/renderD128"; + QsvDevice = string.Empty; EnableTonemapping = false; EnableVppTonemapping = false; EnableVideoToolboxTonemapping = false; @@ -137,6 +138,11 @@ public class EncodingOptions public string VaapiDevice { get; set; } /// <summary> + /// Gets or sets the QSV device. + /// </summary> + public string QsvDevice { get; set; } + + /// <summary> /// Gets or sets a value indicating whether tonemapping is enabled. /// </summary> public bool EnableTonemapping { get; set; } |
