|
@@ -5940,7 +5940,7 @@ namespace MediaBrowser.Controller.MediaEncoding
|
|
|
// Use NV15 instead of P010 to avoid the issue.
|
|
|
// SDR inputs are using BGRA formats already which is not affected.
|
|
|
var intermediateFormat = string.Equals(outFormat, "p010", StringComparison.OrdinalIgnoreCase) ? "nv15" : outFormat;
|
|
|
- var hwScaleFilterFirstPass = $"scale_rkrga=w=iw/7.9:h=ih/7.9:format={intermediateFormat}:force_divisible_by=4:afbc=1";
|
|
|
+ var hwScaleFilterFirstPass = $"scale_rkrga=w=iw/7.9:h=ih/7.9:format={intermediateFormat}:force_original_aspect_ratio=increase:force_divisible_by=4:afbc=1";
|
|
|
mainFilters.Add(hwScaleFilterFirstPass);
|
|
|
}
|
|
|
|
|
@@ -6018,9 +6018,10 @@ namespace MediaBrowser.Controller.MediaEncoding
|
|
|
{
|
|
|
if (hasSubs)
|
|
|
{
|
|
|
+ var subMaxH = 1080;
|
|
|
if (hasGraphicalSubs)
|
|
|
{
|
|
|
- var subPreProcFilters = GetGraphicalSubPreProcessFilters(swpInW, swpInH, subW, subH, reqW, reqH, reqMaxW, reqMaxH);
|
|
|
+ var subPreProcFilters = GetGraphicalSubPreProcessFilters(swpInW, swpInH, subW, subH, reqW, reqH, reqMaxW, subMaxH);
|
|
|
subFilters.Add(subPreProcFilters);
|
|
|
subFilters.Add("format=bgra");
|
|
|
}
|
|
@@ -6030,7 +6031,7 @@ namespace MediaBrowser.Controller.MediaEncoding
|
|
|
var subFramerate = hasAssSubs ? Math.Min(framerate ?? 25, 60) : 10;
|
|
|
|
|
|
// alphasrc=s=1280x720:r=10:start=0,format=bgra,subtitles,hwupload
|
|
|
- var alphaSrcFilter = GetAlphaSrcFilter(state, swpInW, swpInH, reqW, reqH, reqMaxW, reqMaxH, subFramerate);
|
|
|
+ var alphaSrcFilter = GetAlphaSrcFilter(state, swpInW, swpInH, reqW, reqH, reqMaxW, subMaxH, subFramerate);
|
|
|
var subTextSubtitlesFilter = GetTextSubtitlesFilter(state, true, true);
|
|
|
subFilters.Add(alphaSrcFilter);
|
|
|
subFilters.Add("format=bgra");
|
|
@@ -6039,6 +6040,13 @@ namespace MediaBrowser.Controller.MediaEncoding
|
|
|
|
|
|
subFilters.Add("hwupload=derive_device=rkmpp");
|
|
|
|
|
|
+ // offload 1080p+ subtitles swscale upscaling from CPU to RGA
|
|
|
+ var (overlayW, overlayH) = GetFixedOutputSize(swpInW, swpInH, reqW, reqH, reqMaxW, reqMaxH);
|
|
|
+ if (overlayW.HasValue && overlayH.HasValue && overlayH.Value > subMaxH)
|
|
|
+ {
|
|
|
+ subFilters.Add($"vpp_rkrga=w={overlayW.Value}:h={overlayH.Value}:format=bgra:afbc=1");
|
|
|
+ }
|
|
|
+
|
|
|
// try enabling AFBC to save DDR bandwidth
|
|
|
var hwOverlayFilter = "overlay_rkrga=eof_action=pass:repeatlast=0:format=nv12";
|
|
|
if (isEncoderSupportAfbc)
|