enhance workload when tone mapping with AMF

zscale filter is required.
This commit is contained in:
Nyanmisaka 2020-10-03 16:04:39 +08:00 committed by GitHub
parent db07510017
commit 2124bc2e18
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -859,29 +859,44 @@ namespace MediaBrowser.Controller.MediaEncoding
else if (string.Equals(videoEncoder, "h264_amf", StringComparison.OrdinalIgnoreCase) else if (string.Equals(videoEncoder, "h264_amf", StringComparison.OrdinalIgnoreCase)
|| string.Equals(videoEncoder, "hevc_amf", StringComparison.OrdinalIgnoreCase)) || string.Equals(videoEncoder, "hevc_amf", StringComparison.OrdinalIgnoreCase))
{ {
switch (encodingOptions.EncoderPreset) var videoStream = state.VideoStream;
var isColorDepth10 = IsColorDepth10(state);
if (isColorDepth10
&& _mediaEncoder.SupportsHwaccel("opencl")
&& encodingOptions.EnableTonemapping
&& !string.IsNullOrEmpty(videoStream.VideoRange)
&& videoStream.VideoRange.Contains("HDR", StringComparison.OrdinalIgnoreCase))
{ {
case "veryslow": // Enhance quality and workload when tone mapping with AMF
case "slow": param += "-quality quality -preanalysis true";
case "slower": }
param += "-quality quality"; else
break; {
switch (encodingOptions.EncoderPreset)
{
case "veryslow":
case "slow":
case "slower":
param += "-quality quality";
break;
case "medium": case "medium":
param += "-quality balanced"; param += "-quality balanced";
break; break;
case "fast": case "fast":
case "faster": case "faster":
case "veryfast": case "veryfast":
case "superfast": case "superfast":
case "ultrafast": case "ultrafast":
param += "-quality speed"; param += "-quality speed";
break; break;
default: default:
param += "-quality speed"; param += "-quality speed";
break; break;
}
} }
} }
else if (string.Equals(videoEncoder, "libvpx", StringComparison.OrdinalIgnoreCase)) // webm else if (string.Equals(videoEncoder, "libvpx", StringComparison.OrdinalIgnoreCase)) // webm
@ -2123,19 +2138,18 @@ namespace MediaBrowser.Controller.MediaEncoding
if (isSwDecoder || isD3d11vaDecoder) if (isSwDecoder || isD3d11vaDecoder)
{ {
isScalingInAdvance = true; isScalingInAdvance = true;
// Add scaling filter before tonemapping filter for performance. // Add zscale filter before tone mapping filter for performance.
filters.AddRange( var (width, height) = GetFixedOutputSize(inputWidth, inputHeight, request.Width, request.Height, request.MaxWidth, request.MaxHeight);
GetScalingFilters( if (width.HasValue && height.HasValue)
state, {
inputWidth, filters.Add(
inputHeight, string.Format(
threeDFormat, CultureInfo.InvariantCulture,
videoDecoder, "zscale=s={0}x{1}",
outputVideoCodec, width.Value,
request.Width, height.Value));
request.Height, }
request.MaxWidth,
request.MaxHeight));
// Convert to hardware pixel format p010 when using SW decoder. // Convert to hardware pixel format p010 when using SW decoder.
filters.Add("format=p010"); filters.Add("format=p010");
} }