vlc | branch: master | Niklas Haas <[email protected]> | Mon May  6 09:56:36 2019 
+0200| [b579384a239683232f5558216cc03c6ae5a5dc38] | committer: Thomas Guillem

placebo: update for new tone mapping desaturation algo

This was introduced in API version 10, and refactors the tone mapping
desaturation curve into a new, more tunable algorithm that has some
different behavior. In particular, it allows us to simulate exactly the
"hollywood" style of tone mapping, so we document those special values
specifically.

Signed-off-by: Thomas Guillem <[email protected]>

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=b579384a239683232f5558216cc03c6ae5a5dc38
---

 modules/video_output/opengl/fragment_shaders.c |  6 ++++++
 modules/video_output/opengl/vout_helper.h      | 19 +++++++++++++++++--
 modules/video_output/placebo_utils.h           | 12 ++++++++++++
 modules/video_output/vulkan/display.c          | 18 ++++++++++++++++++
 4 files changed, 53 insertions(+), 2 deletions(-)

diff --git a/modules/video_output/opengl/fragment_shaders.c 
b/modules/video_output/opengl/fragment_shaders.c
index f58b4467b6..79bba13912 100644
--- a/modules/video_output/opengl/fragment_shaders.c
+++ b/modules/video_output/opengl/fragment_shaders.c
@@ -558,7 +558,13 @@ opengl_fragment_shader_init_impl(opengl_tex_converter_t 
*tc, GLenum tex_target,
         color_params.intent = var_InheritInteger(tc->gl, "rendering-intent");
         color_params.tone_mapping_algo = var_InheritInteger(tc->gl, 
"tone-mapping");
         color_params.tone_mapping_param = var_InheritFloat(tc->gl, 
"tone-mapping-param");
+#    if PL_API_VER >= 10
+        color_params.desaturation_strength = var_InheritFloat(tc->gl, 
"desat-strength");
+        color_params.desaturation_exponent = var_InheritFloat(tc->gl, 
"desat-exponent");
+        color_params.desaturation_base = var_InheritFloat(tc->gl, 
"desat-base");
+#    else
         color_params.tone_mapping_desaturate = var_InheritFloat(tc->gl, 
"tone-mapping-desat");
+#    endif
         color_params.gamut_warning = var_InheritBool(tc->gl, 
"tone-mapping-warn");
 
         struct pl_color_space dst_space = pl_color_space_unknown;
diff --git a/modules/video_output/opengl/vout_helper.h 
b/modules/video_output/opengl/vout_helper.h
index a13f66c1cc..332f63c79e 100644
--- a/modules/video_output/opengl/vout_helper.h
+++ b/modules/video_output/opengl/vout_helper.h
@@ -34,6 +34,22 @@
 #ifdef HAVE_LIBPLACEBO
 #include "../placebo_utils.h"
 
+
+#if PL_API_VER >= 10
+#define add_desat_params() \
+    add_float("desat-strength", 
pl_color_map_default_params.desaturation_strength, \
+              DESAT_STRENGTH_TEXT, DESAT_STRENGTH_LONGTEXT, false) \
+    add_float("desat-exponent", 
pl_color_map_default_params.desaturation_exponent, \
+              DESAT_EXPONENT_TEXT, DESAT_EXPONENT_LONGTEXT, false) \
+    add_float("desat-base", pl_color_map_default_params.desaturation_base, \
+              DESAT_BASE_TEXT, DESAT_BASE_LONGTEXT, false) \
+    add_obsolete_string("tone-mapping-desat")
+#else
+#define add_desat_params() \
+    add_float("tone-mapping-desat", 
pl_color_map_default_params.tone_mapping_desaturate, \
+              TONEMAP_DESAT_TEXT, TONEMAP_DESAT_LONGTEXT, false)
+#endif
+
 #define add_glopts_placebo() \
     set_section(N_("Colorspace conversion"), NULL) \
     add_integer("rendering-intent", pl_color_map_default_params.intent, \
@@ -47,10 +63,9 @@
     add_integer("tone-mapping", PL_TONE_MAPPING_HABLE, \
                 TONEMAPPING_TEXT, TONEMAPPING_LONGTEXT, false) \
             change_integer_list(tone_values, tone_text) \
+    add_desat_params() \
     add_float("tone-mapping-param", 
pl_color_map_default_params.tone_mapping_param, \
               TONEMAP_PARAM_TEXT, TONEMAP_PARAM_LONGTEXT, true) \
-    add_float("tone-mapping-desat", 
pl_color_map_default_params.tone_mapping_desaturate, \
-              TONEMAP_DESAT_TEXT, TONEMAP_DESAT_LONGTEXT, false) \
     add_bool("tone-mapping-warn", false, GAMUT_WARN_TEXT, GAMUT_WARN_LONGTEXT, 
false) \
     set_section(N_("Dithering"), NULL) \
     add_integer("dither-algo", -1, DITHER_TEXT, DITHER_LONGTEXT, false) \
diff --git a/modules/video_output/placebo_utils.h 
b/modules/video_output/placebo_utils.h
index 4ecf60e7e9..96a43cdf4b 100644
--- a/modules/video_output/placebo_utils.h
+++ b/modules/video_output/placebo_utils.h
@@ -165,6 +165,18 @@ static const char * const tone_text[] = {
 #define TONEMAP_DESAT_TEXT "Tone-mapping desaturation coefficient"
 #define TONEMAP_DESAT_LONGTEXT "How strongly to desaturate bright spectral 
colors towards white. 0.0 disables this behavior."
 
+#define DESAT_STRENGTH_TEXT "Desaturation strength"
+#define DESAT_STRENGTH_LONGTEXT "How strongly to desaturate bright spectral 
colors towards white. 0.0 disables this behavior, 1.0 enables full desaturation 
(hollywood-style)"
+
+#define DESAT_EXPONENT_TEXT "Desaturation exponent"
+#define DESAT_EXPONENT_LONGTEXT "Controls the steepness of the desaturation 
curve. If you set this to 0.0, the curve will be flat, i.e. desaturation always 
enabled (hollywood-style)."
+
+#define DESAT_BASE_TEXT "Desaturation base"
+#define DESAT_BASE_LONGTEXT "Controls the starting offset of the desaturation 
curve. Brightness values below this base will always be colorimetrically tone 
mapped (never desaturated)."
+
+#define MAX_BOOST_TEXT "Maximum brightness boost"
+#define MAX_BOOST_LONGTEXT "Maximum allowed brightness boost to compensate for 
dark scenes. A value of 1.0 means no brightness boost is allowed."
+
 #define GAMUT_WARN_TEXT "Highlight clipped pixels"
 #define GAMUT_WARN_LONGTEXT "Debugging tool to indicate which pixels were 
clipped as part of the tone mapping process."
 
diff --git a/modules/video_output/vulkan/display.c 
b/modules/video_output/vulkan/display.c
index 6250fba3c2..48fa4eafb2 100644
--- a/modules/video_output/vulkan/display.c
+++ b/modules/video_output/vulkan/display.c
@@ -603,8 +603,19 @@ vlc_module_begin () set_shortname ("Vulkan")
             change_integer_list(tone_values, tone_text)
     add_float("tone-mapping-param", 
pl_color_map_default_params.tone_mapping_param,
             TONEMAP_PARAM_TEXT, TONEMAP_PARAM_LONGTEXT, true)
+#if PL_API_VER >= 10
+    add_float("desat-strength", 
pl_color_map_default_params.desaturation_strength,
+            DESAT_STRENGTH_TEXT, DESAT_STRENGTH_LONGTEXT, false)
+    add_float("desat-exponent", 
pl_color_map_default_params.desaturation_exponent,
+            DESAT_EXPONENT_TEXT, DESAT_EXPONENT_LONGTEXT, false)
+    add_float("desat-base", pl_color_map_default_params.desaturation_base,
+            DESAT_BASE_TEXT, DESAT_BASE_LONGTEXT, false)
+    add_float("max-boost", pl_color_map_default_params.max_boost,
+            MAX_BOOST_TEXT, MAX_BOOST_LONGTEXT, false)
+#else
     add_float("tone-mapping-desat", 
pl_color_map_default_params.tone_mapping_desaturate,
             TONEMAP_DESAT_TEXT, TONEMAP_DESAT_LONGTEXT, false)
+#endif
     add_bool("gamut-warning", false, GAMUT_WARN_TEXT, GAMUT_WARN_LONGTEXT, 
true)
     add_integer_with_range("peak-frames", 
pl_color_map_default_params.peak_detect_frames,
             0, 255, PEAK_FRAMES_TEXT, PEAK_FRAMES_LONGTEXT, false)
@@ -691,7 +702,14 @@ static void UpdateParams(vout_display_t *vd)
     sys->color_map.intent = var_InheritInteger(vd, "intent");
     sys->color_map.tone_mapping_algo = var_InheritInteger(vd, "tone-mapping");
     sys->color_map.tone_mapping_param = var_InheritFloat(vd, 
"tone-mapping-param");
+#if PL_API_VER >= 10
+    sys->color_map.desaturation_strength = var_InheritFloat(vd, 
"desat-strength");
+    sys->color_map.desaturation_exponent = var_InheritFloat(vd, 
"desat-exponent");
+    sys->color_map.desaturation_base = var_InheritFloat(vd, "desat-base");
+    sys->color_map.max_boost = var_InheritFloat(vd, "max-boost");
+#else
     sys->color_map.tone_mapping_desaturate = var_InheritFloat(vd, 
"tone-mapping-desat");
+#endif
     sys->color_map.gamut_warning = var_InheritBool(vd, "gamut-warning");
     sys->color_map.peak_detect_frames = var_InheritInteger(vd, "peak-frames");
     sys->color_map.scene_threshold = var_InheritFloat(vd, "scene-threshold");

_______________________________________________
vlc-commits mailing list
[email protected]
https://mailman.videolan.org/listinfo/vlc-commits

Reply via email to