Browse Source

fix vaapi capabilities detection when display is not drm (#1949)

* fix vainfo device syntax

* update logging

* don't pass vaapi_device when display is not drm

* fix hw accel

* proper accel fix

* Revert "proper accel fix"

This reverts commit 5dbadb1f79.

* Revert "fix hw accel"

This reverts commit b6b132d7b9.

* Revert "don't pass vaapi_device when display is not drm"

This reverts commit 0459210718.

* still show vaapi device
pull/1951/head
Jason Dove 2 years ago committed by GitHub
parent
commit
375a306edc
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 36
      ErsatzTV.FFmpeg/Capabilities/HardwareCapabilitiesFactory.cs
  2. 16
      ErsatzTV/Pages/FFmpegEditor.razor

36
ErsatzTV.FFmpeg/Capabilities/HardwareCapabilitiesFactory.cs

@ -172,19 +172,19 @@ public class HardwareCapabilitiesFactory : IHardwareCapabilitiesFactory
var lines = new List<string>(); var lines = new List<string>();
string arguments = display == "drm"
? $"--display drm --device {vaapiDevice} -a"
: $"--display {display} -a";
await Cli.Wrap("vainfo") await Cli.Wrap("vainfo")
.WithArguments($"--display {display} --device {vaapiDevice} -a") .WithArguments(arguments)
.WithEnvironmentVariables(envVars) .WithEnvironmentVariables(envVars)
.WithValidation(CommandResultValidation.None) .WithValidation(CommandResultValidation.None)
.WithStandardOutputPipe(PipeTarget.ToDelegate(lines.Add)) .WithStandardOutputPipe(PipeTarget.ToDelegate(lines.Add))
.WithStandardErrorPipe(PipeTarget.ToDelegate(lines.Add)) .WithStandardErrorPipe(PipeTarget.ToDelegate(lines.Add))
.ExecuteAsync(); .ExecuteAsync();
var mergedOutput = string.Join(System.Environment.NewLine, lines); return string.Join(System.Environment.NewLine, lines);
return mergedOutput.Contains("trying display", StringComparison.OrdinalIgnoreCase)
? mergedOutput
: string.Empty;
} }
public async Task<List<string>> GetVaapiDisplays() public async Task<List<string>> GetVaapiDisplays()
@ -326,12 +326,22 @@ public class HardwareCapabilitiesFactory : IHardwareCapabilitiesFactory
if (profileEntrypoints is not null && profileEntrypoints.Count != 0) if (profileEntrypoints is not null && profileEntrypoints.Count != 0)
{ {
_logger.LogDebug( if (display == "drm")
"Detected {Count} VAAPI profile entrypoints for using {Display} {Driver} {Device}", {
profileEntrypoints.Count, _logger.LogDebug(
display, "Detected {Count} VAAPI profile entrypoints using {Driver} {Device}",
driver, profileEntrypoints.Count,
device); driver,
device);
}
else
{
_logger.LogDebug(
"Detected {Count} VAAPI profile entrypoints using {Display} {Driver}",
profileEntrypoints.Count,
display,
driver);
}
_memoryCache.Set(cacheKey, profileEntrypoints); _memoryCache.Set(cacheKey, profileEntrypoints);
return new VaapiHardwareCapabilities(profileEntrypoints, _logger); return new VaapiHardwareCapabilities(profileEntrypoints, _logger);
} }
@ -394,7 +404,7 @@ public class HardwareCapabilitiesFactory : IHardwareCapabilitiesFactory
if (profileEntrypoints is not null && profileEntrypoints.Count != 0) if (profileEntrypoints is not null && profileEntrypoints.Count != 0)
{ {
_logger.LogDebug( _logger.LogDebug(
"Detected {Count} VAAPI profile entrypoints for using QSV device {Device}", "Detected {Count} VAAPI profile entrypoints using QSV device {Device}",
profileEntrypoints.Count, profileEntrypoints.Count,
device); device);

16
ErsatzTV/Pages/FFmpegEditor.razor

@ -110,12 +110,10 @@
@if (_model.HardwareAcceleration == HardwareAccelerationKind.Vaapi) @if (_model.HardwareAcceleration == HardwareAccelerationKind.Vaapi)
{ {
<MudElement HtmlTag="div" Class="mt-3"> <MudElement HtmlTag="div" Class="mt-3">
<MudSelect Disabled="@(_model.HardwareAcceleration != HardwareAccelerationKind.Vaapi)" <MudSelect Disabled="@(_model.HardwareAcceleration != HardwareAccelerationKind.Vaapi)" Label="VAAPI Driver" @bind-Value="_model.VaapiDriver" For="@(() => _model.VaapiDriver)">
Label="VAAPI Display" @foreach (VaapiDriver driver in Enum.GetValues<VaapiDriver>())
@bind-Value="_model.VaapiDisplay" For="@(() => _model.VaapiDisplay)">
@foreach (string display in _vaapiDisplays)
{ {
<MudSelectItem Value="@display">@display</MudSelectItem> <MudSelectItem Value="@driver">@driver</MudSelectItem>
} }
</MudSelect> </MudSelect>
</MudElement> </MudElement>
@ -124,10 +122,12 @@
@if (_model.HardwareAcceleration == HardwareAccelerationKind.Vaapi) @if (_model.HardwareAcceleration == HardwareAccelerationKind.Vaapi)
{ {
<MudElement HtmlTag="div" Class="mt-3"> <MudElement HtmlTag="div" Class="mt-3">
<MudSelect Disabled="@(_model.HardwareAcceleration != HardwareAccelerationKind.Vaapi)" Label="VAAPI Driver" @bind-Value="_model.VaapiDriver" For="@(() => _model.VaapiDriver)"> <MudSelect Disabled="@(_model.HardwareAcceleration != HardwareAccelerationKind.Vaapi)"
@foreach (VaapiDriver driver in Enum.GetValues<VaapiDriver>()) Label="VAAPI Display"
@bind-Value="_model.VaapiDisplay" For="@(() => _model.VaapiDisplay)">
@foreach (string display in _vaapiDisplays)
{ {
<MudSelectItem Value="@driver">@driver</MudSelectItem> <MudSelectItem Value="@display">@display</MudSelectItem>
} }
</MudSelect> </MudSelect>
</MudElement> </MudElement>

Loading…
Cancel
Save