diff --git a/CHANGELOG.md b/CHANGELOG.md index 5294b45d..8f1a9caf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -39,6 +39,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Fix database operations that were slowing down playout builds - YAML playouts in particular should build significantly faster - Fix channel playout mode `On Demand` for Block and YAML schedules +- Fix QSV transitions when remote streaming from a media server ### Changed - Allow multiple watermarks in playback troubleshooting diff --git a/ErsatzTV.FFmpeg/Filter/ColorspaceFilter.cs b/ErsatzTV.FFmpeg/Filter/ColorspaceFilter.cs index c6aa250a..e3a60a29 100644 --- a/ErsatzTV.FFmpeg/Filter/ColorspaceFilter.cs +++ b/ErsatzTV.FFmpeg/Filter/ColorspaceFilter.cs @@ -8,14 +8,17 @@ public class ColorspaceFilter : BaseFilter private readonly IPixelFormat _desiredPixelFormat; private readonly bool _forceInputOverrides; private readonly VideoStream _videoStream; + private readonly bool _isQsv; public ColorspaceFilter( FrameState currentState, VideoStream videoStream, IPixelFormat desiredPixelFormat, - bool forceInputOverrides = false) + bool forceInputOverrides = false, + bool isQsv = false) { _currentState = currentState; + _isQsv = isQsv; _videoStream = videoStream; _desiredPixelFormat = desiredPixelFormat; _forceInputOverrides = forceInputOverrides; @@ -103,6 +106,7 @@ public class ColorspaceFilter : BaseFilter string colorspace = _desiredPixelFormat.BitDepth switch { + _ when cp.IsUnknown && _isQsv => $"{hwdownload}setparams=range=tv:colorspace=bt709:color_trc=bt709:color_primaries=bt709", _ when cp.IsUnknown => "setparams=range=tv:colorspace=bt709:color_trc=bt709:color_primaries=bt709", 10 when !cp.IsUnknown => $"{hwdownload}colorspace={inputOverrides}all=bt709:format=yuv420p10", diff --git a/ErsatzTV.FFmpeg/Pipeline/QsvPipelineBuilder.cs b/ErsatzTV.FFmpeg/Pipeline/QsvPipelineBuilder.cs index 1d5313d5..10fc8c45 100644 --- a/ErsatzTV.FFmpeg/Pipeline/QsvPipelineBuilder.cs +++ b/ErsatzTV.FFmpeg/Pipeline/QsvPipelineBuilder.cs @@ -367,7 +367,8 @@ public class QsvPipelineBuilder : SoftwarePipelineBuilder currentState, videoStream, format, - usesVppQsv); + forceInputOverrides: usesVppQsv, + isQsv: true); currentState = colorspace.NextState(currentState); result.Add(colorspace); @@ -397,16 +398,6 @@ public class QsvPipelineBuilder : SoftwarePipelineBuilder currentState.PixelFormat.Map(f => f.FFmpegName), format.FFmpegName); - // remind qsv that it uses qsv - if (currentState.FrameDataLocation == FrameDataLocation.Hardware && - result is [ColorspaceFilter colorspace]) - { - if (colorspace.Filter.StartsWith("setparams=", StringComparison.OrdinalIgnoreCase)) - { - result.Insert(0, new QsvFormatFilter(new PixelFormatQsv(format.Name))); - } - } - pipelineSteps.Add(new PixelFormatOutputOption(format)); }