Browse Source

fix qsv transitions when remote streaming (#2291)

pull/2293/head
Jason Dove 1 week ago committed by GitHub
parent
commit
0e7ec6e3b9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 1
      CHANGELOG.md
  2. 6
      ErsatzTV.FFmpeg/Filter/ColorspaceFilter.cs
  3. 13
      ErsatzTV.FFmpeg/Pipeline/QsvPipelineBuilder.cs

1
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 - Fix database operations that were slowing down playout builds
- YAML playouts in particular should build significantly faster - YAML playouts in particular should build significantly faster
- Fix channel playout mode `On Demand` for Block and YAML schedules - Fix channel playout mode `On Demand` for Block and YAML schedules
- Fix QSV transitions when remote streaming from a media server
### Changed ### Changed
- Allow multiple watermarks in playback troubleshooting - Allow multiple watermarks in playback troubleshooting

6
ErsatzTV.FFmpeg/Filter/ColorspaceFilter.cs

@ -8,14 +8,17 @@ public class ColorspaceFilter : BaseFilter
private readonly IPixelFormat _desiredPixelFormat; private readonly IPixelFormat _desiredPixelFormat;
private readonly bool _forceInputOverrides; private readonly bool _forceInputOverrides;
private readonly VideoStream _videoStream; private readonly VideoStream _videoStream;
private readonly bool _isQsv;
public ColorspaceFilter( public ColorspaceFilter(
FrameState currentState, FrameState currentState,
VideoStream videoStream, VideoStream videoStream,
IPixelFormat desiredPixelFormat, IPixelFormat desiredPixelFormat,
bool forceInputOverrides = false) bool forceInputOverrides = false,
bool isQsv = false)
{ {
_currentState = currentState; _currentState = currentState;
_isQsv = isQsv;
_videoStream = videoStream; _videoStream = videoStream;
_desiredPixelFormat = desiredPixelFormat; _desiredPixelFormat = desiredPixelFormat;
_forceInputOverrides = forceInputOverrides; _forceInputOverrides = forceInputOverrides;
@ -103,6 +106,7 @@ public class ColorspaceFilter : BaseFilter
string colorspace = _desiredPixelFormat.BitDepth switch 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", _ when cp.IsUnknown => "setparams=range=tv:colorspace=bt709:color_trc=bt709:color_primaries=bt709",
10 when !cp.IsUnknown => 10 when !cp.IsUnknown =>
$"{hwdownload}colorspace={inputOverrides}all=bt709:format=yuv420p10", $"{hwdownload}colorspace={inputOverrides}all=bt709:format=yuv420p10",

13
ErsatzTV.FFmpeg/Pipeline/QsvPipelineBuilder.cs

@ -367,7 +367,8 @@ public class QsvPipelineBuilder : SoftwarePipelineBuilder
currentState, currentState,
videoStream, videoStream,
format, format,
usesVppQsv); forceInputOverrides: usesVppQsv,
isQsv: true);
currentState = colorspace.NextState(currentState); currentState = colorspace.NextState(currentState);
result.Add(colorspace); result.Add(colorspace);
@ -397,16 +398,6 @@ public class QsvPipelineBuilder : SoftwarePipelineBuilder
currentState.PixelFormat.Map(f => f.FFmpegName), currentState.PixelFormat.Map(f => f.FFmpegName),
format.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)); pipelineSteps.Add(new PixelFormatOutputOption(format));
} }

Loading…
Cancel
Save