Browse Source

Backport pull request #9642 from jellyfin/release-10.8.z

Fix the brightness of VPP tonemap and add the tonemap mode

Original-merge: d5a8419bc52ba06c070012849ba166dd2fbff8b0

Merged-by: Cody Robibero <cody@robibe.ro>

Backported-by: Bond_009 <bond.009@outlook.com>
nyanmisaka 2 năm trước cách đây
mục cha
commit
4c8d382765

+ 18 - 5
MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs

@@ -45,6 +45,7 @@ namespace MediaBrowser.Controller.MediaEncoding
 
 
         private readonly Version _minFFmpegImplictHwaccel = new Version(6, 0);
         private readonly Version _minFFmpegImplictHwaccel = new Version(6, 0);
         private readonly Version _minFFmpegHwaUnsafeOutput = new Version(6, 0);
         private readonly Version _minFFmpegHwaUnsafeOutput = new Version(6, 0);
+        private readonly Version _minFFmpegOclCuTonemapMode = new Version(5, 1, 3);
 
 
         private static readonly string[] _videoProfilesH264 = new[]
         private static readonly string[] _videoProfilesH264 = new[]
         {
         {
@@ -2929,7 +2930,7 @@ namespace MediaBrowser.Controller.MediaEncoding
             return string.Empty;
             return string.Empty;
         }
         }
 
 
-        public static string GetHwTonemapFilter(EncodingOptions options, string hwTonemapSuffix, string videoFormat)
+        public string GetHwTonemapFilter(EncodingOptions options, string hwTonemapSuffix, string videoFormat)
         {
         {
             if (string.IsNullOrEmpty(hwTonemapSuffix))
             if (string.IsNullOrEmpty(hwTonemapSuffix))
             {
             {
@@ -2941,7 +2942,8 @@ namespace MediaBrowser.Controller.MediaEncoding
 
 
             if (string.Equals(hwTonemapSuffix, "vaapi", StringComparison.OrdinalIgnoreCase))
             if (string.Equals(hwTonemapSuffix, "vaapi", StringComparison.OrdinalIgnoreCase))
             {
             {
-                args = "tonemap_vaapi=format={0}:p=bt709:t=bt709:m=bt709,procamp_vaapi=b={1}:c={2}:extra_hw_frames=16";
+                args = "procamp_vaapi=b={2}:c={3}," + args + ":extra_hw_frames=32";
+
                 return string.Format(
                 return string.Format(
                         CultureInfo.InvariantCulture,
                         CultureInfo.InvariantCulture,
                         args,
                         args,
@@ -2972,14 +2974,24 @@ namespace MediaBrowser.Controller.MediaEncoding
             {
             {
                 args = "tonemap_{0}=format={1}:p=bt709:t=bt709:m=bt709:tonemap={2}:peak={3}:desat={4}";
                 args = "tonemap_{0}=format={1}:p=bt709:t=bt709:m=bt709:tonemap={2}:peak={3}:desat={4}";
 
 
+                if (string.Equals(options.TonemappingMode, "max", StringComparison.OrdinalIgnoreCase)
+                    || string.Equals(options.TonemappingMode, "rgb", StringComparison.OrdinalIgnoreCase))
+                {
+                    if (_mediaEncoder.EncoderVersion >= _minFFmpegOclCuTonemapMode)
+                    {
+                        args += ":tonemap_mode={5}";
+                    }
+                }
+
                 if (options.TonemappingParam != 0)
                 if (options.TonemappingParam != 0)
                 {
                 {
-                    args += ":param={5}";
+                    args += ":param={6}";
                 }
                 }
 
 
-                if (!string.Equals(options.TonemappingRange, "auto", StringComparison.OrdinalIgnoreCase))
+                if (string.Equals(options.TonemappingRange, "tv", StringComparison.OrdinalIgnoreCase)
+                    || string.Equals(options.TonemappingRange, "pc", StringComparison.OrdinalIgnoreCase))
                 {
                 {
-                    args += ":range={6}";
+                    args += ":range={7}";
                 }
                 }
             }
             }
 
 
@@ -2991,6 +3003,7 @@ namespace MediaBrowser.Controller.MediaEncoding
                     algorithm,
                     algorithm,
                     options.TonemappingPeak,
                     options.TonemappingPeak,
                     options.TonemappingDesat,
                     options.TonemappingDesat,
+                    options.TonemappingMode,
                     options.TonemappingParam,
                     options.TonemappingParam,
                     options.TonemappingRange);
                     options.TonemappingRange);
         }
         }

+ 8 - 8
MediaBrowser.Model/Configuration/EncodingOptions.cs

@@ -27,13 +27,13 @@ public class EncodingOptions
         EnableTonemapping = false;
         EnableTonemapping = false;
         EnableVppTonemapping = false;
         EnableVppTonemapping = false;
         TonemappingAlgorithm = "bt2390";
         TonemappingAlgorithm = "bt2390";
+        TonemappingMode = "auto";
         TonemappingRange = "auto";
         TonemappingRange = "auto";
         TonemappingDesat = 0;
         TonemappingDesat = 0;
-        TonemappingThreshold = 0.8;
         TonemappingPeak = 100;
         TonemappingPeak = 100;
         TonemappingParam = 0;
         TonemappingParam = 0;
-        VppTonemappingBrightness = 0;
-        VppTonemappingContrast = 1.2;
+        VppTonemappingBrightness = 16;
+        VppTonemappingContrast = 1;
         H264Crf = 23;
         H264Crf = 23;
         H265Crf = 28;
         H265Crf = 28;
         DeinterlaceDoubleRate = false;
         DeinterlaceDoubleRate = false;
@@ -137,6 +137,11 @@ public class EncodingOptions
     /// </summary>
     /// </summary>
     public string TonemappingAlgorithm { get; set; }
     public string TonemappingAlgorithm { get; set; }
 
 
+    /// <summary>
+    /// Gets or sets the tone-mapping mode.
+    /// </summary>
+    public string TonemappingMode { get; set; }
+
     /// <summary>
     /// <summary>
     /// Gets or sets the tone-mapping range.
     /// Gets or sets the tone-mapping range.
     /// </summary>
     /// </summary>
@@ -147,11 +152,6 @@ public class EncodingOptions
     /// </summary>
     /// </summary>
     public double TonemappingDesat { get; set; }
     public double TonemappingDesat { get; set; }
 
 
-    /// <summary>
-    /// Gets or sets the tone-mapping threshold.
-    /// </summary>
-    public double TonemappingThreshold { get; set; }
-
     /// <summary>
     /// <summary>
     /// Gets or sets the tone-mapping peak.
     /// Gets or sets the tone-mapping peak.
     /// </summary>
     /// </summary>