Merge pull request #14179 from nyanmisaka/offload-sub-scale-to-rkrga

Offload 1080p+ subtitle scaling to RKRGA
This commit is contained in:
Bond-009 2025-06-01 20:07:26 +02:00 committed by GitHub
commit c565010f28
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -5940,7 +5940,7 @@ namespace MediaBrowser.Controller.MediaEncoding
// Use NV15 instead of P010 to avoid the issue. // Use NV15 instead of P010 to avoid the issue.
// SDR inputs are using BGRA formats already which is not affected. // SDR inputs are using BGRA formats already which is not affected.
var intermediateFormat = string.Equals(outFormat, "p010", StringComparison.OrdinalIgnoreCase) ? "nv15" : outFormat; 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); mainFilters.Add(hwScaleFilterFirstPass);
} }
@ -6018,9 +6018,10 @@ namespace MediaBrowser.Controller.MediaEncoding
{ {
if (hasSubs) if (hasSubs)
{ {
var subMaxH = 1080;
if (hasGraphicalSubs) 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(subPreProcFilters);
subFilters.Add("format=bgra"); subFilters.Add("format=bgra");
} }
@ -6030,7 +6031,7 @@ namespace MediaBrowser.Controller.MediaEncoding
var subFramerate = hasAssSubs ? Math.Min(framerate ?? 25, 60) : 10; var subFramerate = hasAssSubs ? Math.Min(framerate ?? 25, 60) : 10;
// alphasrc=s=1280x720:r=10:start=0,format=bgra,subtitles,hwupload // 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); var subTextSubtitlesFilter = GetTextSubtitlesFilter(state, true, true);
subFilters.Add(alphaSrcFilter); subFilters.Add(alphaSrcFilter);
subFilters.Add("format=bgra"); subFilters.Add("format=bgra");
@ -6039,6 +6040,13 @@ namespace MediaBrowser.Controller.MediaEncoding
subFilters.Add("hwupload=derive_device=rkmpp"); 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 // try enabling AFBC to save DDR bandwidth
var hwOverlayFilter = "overlay_rkrga=eof_action=pass:repeatlast=0:format=nv12"; var hwOverlayFilter = "overlay_rkrga=eof_action=pass:repeatlast=0:format=nv12";
if (isEncoderSupportAfbc) if (isEncoderSupportAfbc)