|
|
|
@ -21,6 +21,7 @@ namespace ErsatzTV.Core.FFmpeg |
|
|
|
private Option<IDisplaySize> _scaleToSize = None; |
|
|
|
private Option<IDisplaySize> _scaleToSize = None; |
|
|
|
private Option<ChannelWatermark> _watermark; |
|
|
|
private Option<ChannelWatermark> _watermark; |
|
|
|
private string _pixelFormat; |
|
|
|
private string _pixelFormat; |
|
|
|
|
|
|
|
private string _videoEncoder; |
|
|
|
|
|
|
|
|
|
|
|
public FFmpegComplexFilterBuilder WithHardwareAcceleration(HardwareAccelerationKind hardwareAccelerationKind) |
|
|
|
public FFmpegComplexFilterBuilder WithHardwareAcceleration(HardwareAccelerationKind hardwareAccelerationKind) |
|
|
|
{ |
|
|
|
{ |
|
|
|
@ -77,6 +78,12 @@ namespace ErsatzTV.Core.FFmpeg |
|
|
|
return this; |
|
|
|
return this; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public FFmpegComplexFilterBuilder WithVideoEncoder(string videoEncoder) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
_videoEncoder = videoEncoder; |
|
|
|
|
|
|
|
return this; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public Option<FFmpegComplexFilter> Build(int videoStreamIndex, Option<int> audioStreamIndex) |
|
|
|
public Option<FFmpegComplexFilter> Build(int videoStreamIndex, Option<int> audioStreamIndex) |
|
|
|
{ |
|
|
|
{ |
|
|
|
var complexFilter = new StringBuilder(); |
|
|
|
var complexFilter = new StringBuilder(); |
|
|
|
@ -247,6 +254,13 @@ namespace ErsatzTV.Core.FFmpeg |
|
|
|
complexFilter.Append(audioLabel); |
|
|
|
complexFilter.Append(audioLabel); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// vaapi downsample 10bit hevc to 8bit h264
|
|
|
|
|
|
|
|
if (acceleration == HardwareAccelerationKind.Vaapi && !videoFilterQueue.Any() && |
|
|
|
|
|
|
|
_pixelFormat == "yuv420p10le" && _videoEncoder.StartsWith("h264")) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
videoFilterQueue.Add("scale_vaapi=format=nv12"); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (videoFilterQueue.Any() || !string.IsNullOrWhiteSpace(watermarkOverlay)) |
|
|
|
if (videoFilterQueue.Any() || !string.IsNullOrWhiteSpace(watermarkOverlay)) |
|
|
|
{ |
|
|
|
{ |
|
|
|
if (hasAudioFilters) |
|
|
|
if (hasAudioFilters) |
|
|
|
|