Browse Source

fix vaapi decoder capability check (#1740)

* fix decoder video profile check

* clarify changelog
pull/1742/head
Jason Dove 1 year ago committed by GitHub
parent
commit
c8113bdf25
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 2
      CHANGELOG.md
  2. 5
      ErsatzTV.Core/FFmpeg/FFmpegLibraryProcessService.cs
  3. 5
      ErsatzTV.FFmpeg.Tests/PipelineBuilderBaseTests.cs
  4. 1
      ErsatzTV.FFmpeg/InputFile.cs
  5. 1
      ErsatzTV.FFmpeg/MediaStream.cs
  6. 2
      ErsatzTV.FFmpeg/Pipeline/AmfPipelineBuilder.cs
  7. 2
      ErsatzTV.FFmpeg/Pipeline/NvidiaPipelineBuilder.cs
  8. 2
      ErsatzTV.FFmpeg/Pipeline/QsvPipelineBuilder.cs
  9. 2
      ErsatzTV.FFmpeg/Pipeline/VaapiPipelineBuilder.cs
  10. 2
      ErsatzTV.FFmpeg/Pipeline/VideoToolboxPipelineBuilder.cs

2
CHANGELOG.md

@ -89,6 +89,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). @@ -89,6 +89,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
- Erasing block playout history will also generate new random seeds for the playout
- Fix building playouts that use mid-roll filler and have content without chapter markers
- When this happens, mid-roll will be treated as post-roll
- Fix VAAPI decoder capability check
- This caused some streams to incorrectly use software decoding
### Changed
- Use ffmpeg 7 in all docker images

5
ErsatzTV.Core/FFmpeg/FFmpegLibraryProcessService.cs

@ -178,6 +178,7 @@ public class FFmpegLibraryProcessService : IFFmpegProcessService @@ -178,6 +178,7 @@ public class FFmpegLibraryProcessService : IFFmpegProcessService
var ffmpegVideoStream = new VideoStream(
videoStream.Index,
videoStream.Codec,
videoStream.Profile,
Some(pixelFormat),
new ColorParams(
videoStream.ColorRange,
@ -495,6 +496,7 @@ public class FFmpegLibraryProcessService : IFFmpegProcessService @@ -495,6 +496,7 @@ public class FFmpegLibraryProcessService : IFFmpegProcessService
var ffmpegVideoStream = new VideoStream(
0,
VideoFormat.GeneratedImage,
string.Empty,
new PixelFormatUnknown(), // leave this unknown so we convert to desired yuv420p
ColorParams.Default,
new FrameSize(videoVersion.Width, videoVersion.Height),
@ -641,6 +643,7 @@ public class FFmpegLibraryProcessService : IFFmpegProcessService @@ -641,6 +643,7 @@ public class FFmpegLibraryProcessService : IFFmpegProcessService
var ffmpegVideoStream = new VideoStream(
0,
VideoFormat.Raw,
string.Empty,
Some(pixelFormat),
ColorParams.Default,
resolution,
@ -790,6 +793,7 @@ public class FFmpegLibraryProcessService : IFFmpegProcessService @@ -790,6 +793,7 @@ public class FFmpegLibraryProcessService : IFFmpegProcessService
new(
0,
string.Empty,
string.Empty,
None,
ColorParams.Default,
FrameSize.Unknown,
@ -873,6 +877,7 @@ public class FFmpegLibraryProcessService : IFFmpegProcessService @@ -873,6 +877,7 @@ public class FFmpegLibraryProcessService : IFFmpegProcessService
new(
options.ImageStreamIndex.IfNone(0),
"unknown",
string.Empty,
new PixelFormatUnknown(),
ColorParams.Default,
new FrameSize(1, 1),

5
ErsatzTV.FFmpeg.Tests/PipelineBuilderBaseTests.cs

@ -32,6 +32,7 @@ public class PipelineBuilderBaseTests @@ -32,6 +32,7 @@ public class PipelineBuilderBaseTests
new(
0,
VideoFormat.H264,
VideoProfile.Main,
new PixelFormatYuv420P(),
ColorParams.Default,
new FrameSize(1920, 1080),
@ -124,6 +125,7 @@ public class PipelineBuilderBaseTests @@ -124,6 +125,7 @@ public class PipelineBuilderBaseTests
new(
0,
VideoFormat.H264,
VideoProfile.Main,
new PixelFormatYuv420P(),
ColorParams.Default,
new FrameSize(1920, 1080),
@ -272,6 +274,7 @@ public class PipelineBuilderBaseTests @@ -272,6 +274,7 @@ public class PipelineBuilderBaseTests
new(
0,
VideoFormat.H264,
VideoProfile.Main,
new PixelFormatYuv420P(),
ColorParams.Default,
new FrameSize(1920, 1080),
@ -368,6 +371,7 @@ public class PipelineBuilderBaseTests @@ -368,6 +371,7 @@ public class PipelineBuilderBaseTests
new(
0,
VideoFormat.H264,
VideoProfile.Main,
new PixelFormatYuv420P(),
ColorParams.Default,
new FrameSize(1920, 1080),
@ -454,6 +458,7 @@ public class PipelineBuilderBaseTests @@ -454,6 +458,7 @@ public class PipelineBuilderBaseTests
new(
0,
string.Empty,
string.Empty,
Option<IPixelFormat>.None,
ColorParams.Default,
FrameSize.Unknown,

1
ErsatzTV.FFmpeg/InputFile.cs

@ -17,6 +17,7 @@ public record ConcatInputFile(string Url, FrameSize Resolution) : InputFile( @@ -17,6 +17,7 @@ public record ConcatInputFile(string Url, FrameSize Resolution) : InputFile(
new VideoStream(
0,
string.Empty,
string.Empty,
Option<IPixelFormat>.None,
ColorParams.Default,
Resolution,

1
ErsatzTV.FFmpeg/MediaStream.cs

@ -17,6 +17,7 @@ public record AudioStream(int Index, string Codec, int Channels) : MediaStream( @@ -17,6 +17,7 @@ public record AudioStream(int Index, string Codec, int Channels) : MediaStream(
public record VideoStream(
int Index,
string Codec,
string Profile,
Option<IPixelFormat> PixelFormat,
ColorParams ColorParams,
FrameSize FrameSize,

2
ErsatzTV.FFmpeg/Pipeline/AmfPipelineBuilder.cs

@ -50,7 +50,7 @@ public class AmfPipelineBuilder : SoftwarePipelineBuilder @@ -50,7 +50,7 @@ public class AmfPipelineBuilder : SoftwarePipelineBuilder
{
FFmpegCapability decodeCapability = _hardwareCapabilities.CanDecode(
videoStream.Codec,
desiredState.VideoProfile,
videoStream.Profile,
videoStream.PixelFormat);
FFmpegCapability encodeCapability = _hardwareCapabilities.CanEncode(
desiredState.VideoFormat,

2
ErsatzTV.FFmpeg/Pipeline/NvidiaPipelineBuilder.cs

@ -58,7 +58,7 @@ public class NvidiaPipelineBuilder : SoftwarePipelineBuilder @@ -58,7 +58,7 @@ public class NvidiaPipelineBuilder : SoftwarePipelineBuilder
{
FFmpegCapability decodeCapability = _hardwareCapabilities.CanDecode(
videoStream.Codec,
desiredState.VideoProfile,
videoStream.Profile,
videoStream.PixelFormat);
FFmpegCapability encodeCapability = _hardwareCapabilities.CanEncode(
desiredState.VideoFormat,

2
ErsatzTV.FFmpeg/Pipeline/QsvPipelineBuilder.cs

@ -60,7 +60,7 @@ public class QsvPipelineBuilder : SoftwarePipelineBuilder @@ -60,7 +60,7 @@ public class QsvPipelineBuilder : SoftwarePipelineBuilder
{
FFmpegCapability decodeCapability = _hardwareCapabilities.CanDecode(
videoStream.Codec,
desiredState.VideoProfile,
videoStream.Profile,
videoStream.PixelFormat);
FFmpegCapability encodeCapability = _hardwareCapabilities.CanEncode(
desiredState.VideoFormat,

2
ErsatzTV.FFmpeg/Pipeline/VaapiPipelineBuilder.cs

@ -62,7 +62,7 @@ public class VaapiPipelineBuilder : SoftwarePipelineBuilder @@ -62,7 +62,7 @@ public class VaapiPipelineBuilder : SoftwarePipelineBuilder
{
FFmpegCapability decodeCapability = _hardwareCapabilities.CanDecode(
videoStream.Codec,
desiredState.VideoProfile,
videoStream.Profile,
videoStream.PixelFormat);
FFmpegCapability encodeCapability = _hardwareCapabilities.CanEncode(
desiredState.VideoFormat,

2
ErsatzTV.FFmpeg/Pipeline/VideoToolboxPipelineBuilder.cs

@ -51,7 +51,7 @@ public class VideoToolboxPipelineBuilder : SoftwarePipelineBuilder @@ -51,7 +51,7 @@ public class VideoToolboxPipelineBuilder : SoftwarePipelineBuilder
{
FFmpegCapability decodeCapability = _hardwareCapabilities.CanDecode(
videoStream.Codec,
desiredState.VideoProfile,
videoStream.Profile,
videoStream.PixelFormat);
FFmpegCapability encodeCapability = _hardwareCapabilities.CanEncode(
desiredState.VideoFormat,

Loading…
Cancel
Save