From b579384a239683232f5558216cc03c6ae5a5dc38 Mon Sep 17 00:00:00 2001 From: Niklas Haas Date: Mon, 6 May 2019 09:56:36 +0200 Subject: [PATCH] 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 --- .../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 @@ -148,6 +148,15 @@ #define TONEMAP_DESAT_TEXT "Tone-mapping desaturation coefficient" #define TONEMAP_DESAT_LONGTEXT "How strongly to desaturate overbright 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 TONEMAP_WARN_TEXT "Highlight clipped pixels" #define TONEMAP_WARN_LONGTEXT "Debugging tool to indicate which pixels were clipped as part of the tone mapping process." @@ -171,6 +180,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, \ @@ -200,10 +184,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, TONEMAP_WARN_TEXT, TONEMAP_WARN_LONGTEXT, false) \ set_section("Dithering", NULL) \ add_integer("dither-algo", -1, DITHER_TEXT, DITHER_LONGTEXT, false) \ -- 2.22.0 From 24dc03640d3cfd89aa87ce63929aba17911c4b85 Mon Sep 17 00:00:00 2001 From: Niklas Haas Date: Mon, 6 May 2019 09:56:38 +0200 Subject: [PATCH] opengl: update libplacebo call for changed API This will be the last time a change to this signature is needed, since we just switched to using a params struct rather than updating the signature constantly. Signed-off-by: Thomas Guillem --- modules/video_output/opengl/vout_helper.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/modules/video_output/opengl/vout_helper.c b/modules/video_output/opengl/vout_helper.c index f1069ccb1f9..b59343f7b5f 100644 --- a/modules/video_output/opengl/vout_helper.c +++ b/modules/video_output/opengl/vout_helper.c @@ -551,7 +551,9 @@ opengl_init_program(vout_display_opengl_t *vgl, vlc_video_context *context, { tc->pl_ctx = vlc_placebo_Create(VLC_OBJECT(tc)); if (tc->pl_ctx) { -# if PL_API_VER >= 6 +# if PL_API_VER >= 20 + tc->pl_sh = pl_shader_alloc(tc->pl_ctx, NULL); +# elif PL_API_VER >= 6 tc->pl_sh = pl_shader_alloc(tc->pl_ctx, NULL, 0); # else tc->pl_sh = pl_shader_alloc(tc->pl_ctx, NULL, 0, 0);