Browse Source

add pad_vaapi filter (#2036)

hdr-vulkan-cuda-test
Jason Dove 1 week ago committed by GitHub
parent
commit
6b90da8982
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 1
      CHANGELOG.md
  2. 31
      ErsatzTV.FFmpeg/Filter/Vaapi/PadVaapiFilter.cs
  3. 2
      ErsatzTV.FFmpeg/Pipeline/VaapiPipelineBuilder.cs

1
CHANGELOG.md

@ -27,6 +27,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). @@ -27,6 +27,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
- NVIDIA may use hardware-accelerated tone mapping (when vulkan accel and libplacebo filter are also available)
- QSV may use hardware-accelerated tone mapping (when hardware decoding is used)
- In all other cases, HDR content will use a software pipeline and the clip algorithm
- Use hardware-accelerated padding with VAAPI
### Changed
- Start to make UI minimally responsive (functional on smaller screens)

31
ErsatzTV.FFmpeg/Filter/Vaapi/PadVaapiFilter.cs

@ -0,0 +1,31 @@ @@ -0,0 +1,31 @@
namespace ErsatzTV.FFmpeg.Filter.Vaapi;
public class PadVaapiFilter : BaseFilter
{
private readonly FrameState _currentState;
private readonly FrameSize _paddedSize;
public PadVaapiFilter(FrameState currentState, FrameSize paddedSize)
{
_currentState = currentState;
_paddedSize = paddedSize;
}
public override string Filter
{
get
{
var pad = $"pad_vaapi=w={_paddedSize.Width}:h={_paddedSize.Height}:x=-1:y=-1:color=black";
return _currentState.FrameDataLocation == FrameDataLocation.Hardware
? pad
: $"format=nv12|p010le|vaapi,hwupload,{pad}";
}
}
public override FrameState NextState(FrameState currentState) => currentState with
{
PaddedSize = _paddedSize,
FrameDataLocation = FrameDataLocation.Hardware
};
}

2
ErsatzTV.FFmpeg/Pipeline/VaapiPipelineBuilder.cs

@ -536,7 +536,7 @@ public class VaapiPipelineBuilder : SoftwarePipelineBuilder @@ -536,7 +536,7 @@ public class VaapiPipelineBuilder : SoftwarePipelineBuilder
{
if (desiredState.CroppedSize.IsNone && currentState.PaddedSize != desiredState.PaddedSize)
{
var padStep = new PadFilter(currentState, desiredState.PaddedSize);
var padStep = new PadVaapiFilter(currentState, desiredState.PaddedSize);
currentState = padStep.NextState(currentState);
videoInputFile.FilterSteps.Add(padStep);
}

Loading…
Cancel
Save