aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs
diff options
context:
space:
mode:
authorgnattu <gnattuoc@me.com>2024-03-09 14:22:27 +0800
committergnattu <gnattuoc@me.com>2024-03-09 14:22:27 +0800
commite6dee627e3543e5d29fae0b1f96facab5092310c (patch)
tree09935ddaf13b6f9ec9fa428837879b29ba9c186d /MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs
parentd10ad6c383954e6acb76581d5459aa9740c66688 (diff)
fix: force a pixel format for 10-bit inputs
Signed-off-by: gnattu <gnattuoc@me.com>
Diffstat (limited to 'MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs')
-rw-r--r--MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs14
1 files changed, 9 insertions, 5 deletions
diff --git a/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs b/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs
index 37aa295dc..770e86f96 100644
--- a/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs
+++ b/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs
@@ -5011,16 +5011,22 @@ namespace MediaBrowser.Controller.MediaEncoding
var threeDFormat = state.MediaSource.Video3DFormat;
var isVtEncoder = vidEncoder.Contains("videotoolbox", StringComparison.OrdinalIgnoreCase);
- var hwScaleFilter = GetHwScaleFilter("vt", null, inW, inH, reqW, reqH, reqMaxW, reqMaxH);
var doDeintH264 = state.DeInterlace("h264", true) || state.DeInterlace("avc", true);
var doDeintHevc = state.DeInterlace("h265", true) || state.DeInterlace("hevc", true);
var doDeintH2645 = doDeintH264 || doDeintHevc;
var doVtTonemap = IsVideoToolboxTonemapAvailable(state, options);
var doOclTonemap = !doVtTonemap && IsHwTonemapAvailable(state, options);
- var doTonemap = doVtTonemap || doOclTonemap;
- var doScale = !string.IsNullOrEmpty(hwScaleFilter);
+ var scaleFormat = string.Empty;
+ if (GetVideoColorBitDepth(state) == 10)
+ {
+ // Use P010 for OpenCL tone mapping, otherwise force an 8bit output.
+ scaleFormat = doOclTonemap ? "p010le" : "nv12";
+ }
+
+ var hwScaleFilter = GetHwScaleFilter("vt", scaleFormat, inW, inH, reqW, reqH, reqMaxW, reqMaxH);
+
var hasSubs = state.SubtitleStream is not null && state.SubtitleDeliveryMethod == SubtitleDeliveryMethod.Encode;
var hasTextSubs = hasSubs && state.SubtitleStream.IsTextSubtitleStream;
var hasGraphicalSubs = hasSubs && !state.SubtitleStream.IsTextSubtitleStream;
@@ -5028,8 +5034,6 @@ namespace MediaBrowser.Controller.MediaEncoding
&& (string.Equals(state.SubtitleStream.Codec, "ass", StringComparison.OrdinalIgnoreCase)
|| string.Equals(state.SubtitleStream.Codec, "ssa", StringComparison.OrdinalIgnoreCase));
- // FIXME: scale_vt lacks of format option for the time being.
- // hwdownload/hwmap to sw requires setting a format explicitly.
if (!isVtEncoder)
{
// should not happen.