Backport pull request #18025 from jellyfin/release-12.z

Fix incorrect color range during CSC after VK tonemapping

Original-merge: 8455f7c838

Merged-by: crobibero <cody@robibe.ro>

Backported-by: Cody Robibero <cody@robibe.ro>
This commit is contained in:
nyanmisaka authored and Cody Robibero committed 2026-09-15 11:17:04 -04:00
1 parent f87390e218
commit 57d19b185c
1 file changed
+25 -2
@@ -3807,6 +3807,11 @@ namespace MediaBrowser.Controller.MediaEncoding
var formatArg = isFormatFixed ? (":format=" + videoFormat) : string.Empty;
var tonemapArg = string.Empty;
// libplacebo only support full range RGB
forceFullRange = forceFullRange
|| (videoFormat ?? string.Empty).Contains("rgb", StringComparison.OrdinalIgnoreCase)
|| (videoFormat ?? string.Empty).Contains("bgr", StringComparison.OrdinalIgnoreCase);
if (doTonemap)
{
var algorithm = options.TonemappingAlgorithm;
@@ -3830,6 +3835,10 @@ namespace MediaBrowser.Controller.MediaEncoding
tonemapArg += ":range=" + range.ToString().ToLowerInvariant();
}
}
else if (forceFullRange)
{
formatArg += ":range=pc";
}
return string.Format(
CultureInfo.InvariantCulture,
@@ -5470,7 +5479,14 @@ namespace MediaBrowser.Controller.MediaEncoding
mainFilters.Add("format=vaapi");
// clear the surf->meta_offset and output nv12
mainFilters.Add("scale_vaapi=format=nv12");
var hwCscFilter = "scale_vaapi=format=nv12";
if (!isMjpegEncoder && options.TonemappingRange != TonemappingRange.pc)
{
hwCscFilter += ":out_range=tv";
}
mainFilters.Add(hwCscFilter);
// hw deint
if (doDeintH2645)
@@ -5540,7 +5556,14 @@ namespace MediaBrowser.Controller.MediaEncoding
overlayFilters.Add("format=vaapi");
// clear the surf->meta_offset and output nv12
overlayFilters.Add("scale_vaapi=format=nv12");
var hwCscFilter = "scale_vaapi=format=nv12";
if (!doVkTonemap || (doVkTonemap && options.TonemappingRange != TonemappingRange.pc))
{
hwCscFilter += ":out_range=tv";
}
overlayFilters.Add(hwCscFilter);
// hw deint
if (doDeintH2645)