Browse Source

fix tonemapping with amd vaapi (#2187)

* fix amd vaapi tonemap

* fixes
pull/2191/head
Jason Dove 4 weeks ago committed by GitHub
parent
commit
da6cb09658
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 1
      CHANGELOG.md
  2. 2
      ErsatzTV.FFmpeg/Filter/TonemapFilter.cs
  3. 7
      ErsatzTV.FFmpeg/Pipeline/PipelineBuilderBase.cs
  4. 5
      ErsatzTV.FFmpeg/Pipeline/VaapiPipelineBuilder.cs

1
CHANGELOG.md

@ -162,6 +162,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). @@ -162,6 +162,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
- Fix QSV transcoding errors when scaling
- Fix QSV frame freezing in browser
- Fix some stream continuity issues, and some cases where audio sync is lost at transition
- Fix HDR transcoding with AMD VAAPI accel
## [25.2.0] - 2025-06-24
### Added

2
ErsatzTV.FFmpeg/Filter/TonemapFilter.cs

@ -26,7 +26,7 @@ public class TonemapFilter : BaseFilter @@ -26,7 +26,7 @@ public class TonemapFilter : BaseFilter
{
foreach (IPixelFormat pixelFormat in _currentState.PixelFormat)
{
if (pixelFormat is PixelFormatCuda)
if (pixelFormat is PixelFormatCuda or PixelFormatVaapi)
{
foreach (IPixelFormat pf in AvailablePixelFormats.ForPixelFormat(pixelFormat.Name, null))
{

7
ErsatzTV.FFmpeg/Pipeline/PipelineBuilderBase.cs

@ -204,6 +204,10 @@ public abstract class PipelineBuilderBase : IPipelineBuilder @@ -204,6 +204,10 @@ public abstract class PipelineBuilderBase : IPipelineBuilder
SetSceneDetect(videoStream, ffmpegState, desiredState, pipelineSteps);
SetFFReport(ffmpegState, pipelineSteps);
SetStreamSeek(ffmpegState, videoInputFile, context, pipelineSteps);
if (ffmpegState.IsTroubleshooting)
{
SetTimeLimit(ffmpegState, pipelineSteps);
}
(FilterChain filterChain, ffmpegState) = BuildVideoPipeline(
videoInputFile,
@ -829,5 +833,8 @@ public abstract class PipelineBuilderBase : IPipelineBuilder @@ -829,5 +833,8 @@ public abstract class PipelineBuilderBase : IPipelineBuilder
}
}
private static void SetTimeLimit(FFmpegState ffmpegState, List<IPipelineStep> pipelineSteps) =>
pipelineSteps.AddRange(ffmpegState.Finish.Map(finish => new TimeLimitOutputOption(finish)));
private sealed record FilterChainAndState(FilterChain FilterChain, FFmpegState FFmpegState);
}

5
ErsatzTV.FFmpeg/Pipeline/VaapiPipelineBuilder.cs

@ -650,8 +650,9 @@ public class VaapiPipelineBuilder : SoftwarePipelineBuilder @@ -650,8 +650,9 @@ public class VaapiPipelineBuilder : SoftwarePipelineBuilder
{
foreach (IPixelFormat pixelFormat in desiredState.PixelFormat)
{
if (ffmpegState.DecoderHardwareAccelerationMode == HardwareAccelerationMode.Vaapi &&
_ffmpegCapabilities.HasFilter(FFmpegKnownFilter.TonemapOpenCL))
if (ffmpegState.DecoderHardwareAccelerationMode == HardwareAccelerationMode.Vaapi
&& ffmpegState.VaapiDriver == "iHD"
&& _ffmpegCapabilities.HasFilter(FFmpegKnownFilter.TonemapOpenCL))
{
var filter = new TonemapVaapiFilter(ffmpegState);
currentState = filter.NextState(currentState);

Loading…
Cancel
Save