vo_gpu_next: update to new libplacebo gamut mapping API

This just replaces the API calls to get rid of deprecation warnings, it
doesn't yet expand the enum, nor replace them by the proper options.

The translation from tone map modes to hybrid mix parameters is taken
from the libplacebo source code.
This commit is contained in:
Niklas Haas 2023-05-24 21:24:48 +02:00
parent dc13d47c73
commit a5da8b2c87
1 changed files with 29 additions and 3 deletions

View File

@ -1847,6 +1847,22 @@ static void update_render_options(struct vo *vo)
[TONE_MAPPING_ST2094_10] = &pl_tone_map_st2094_10,
};
#if PL_API_VER >= 269
static const struct pl_gamut_map_function *gamut_modes[] = {
[GAMUT_CLIP] = &pl_gamut_map_clip,
[GAMUT_WARN] = &pl_gamut_map_highlight,
[GAMUT_DESATURATE] = &pl_gamut_map_desaturate,
[GAMUT_DARKEN] = &pl_gamut_map_darken,
};
// Back-compat approximation, taken from libplacebo source code
static const float hybrid_mix[] = {
[TONE_MAP_MODE_RGB] = 1.0f,
[TONE_MAP_MODE_MAX] = 0.0f,
[TONE_MAP_MODE_LUMA] = 0.0f,
[TONE_MAP_MODE_HYBRID] = 0.20f,
};
#else
static const enum pl_gamut_mode gamut_modes[] = {
[GAMUT_CLIP] = PL_GAMUT_CLIP,
[GAMUT_WARN] = PL_GAMUT_WARN,
@ -1861,18 +1877,28 @@ static void update_render_options(struct vo *vo)
[TONE_MAP_MODE_HYBRID] = PL_TONE_MAP_HYBRID,
[TONE_MAP_MODE_LUMA] = PL_TONE_MAP_LUMA,
};
#endif
p->color_map = pl_color_map_default_params;
p->color_map.intent = opts->icc_opts->intent;
p->color_map.tone_mapping_function = tone_map_funs[opts->tone_map.curve];
p->color_map.tone_mapping_param = opts->tone_map.curve_param;
p->color_map.inverse_tone_mapping = opts->tone_map.inverse;
p->color_map.tone_mapping_mode = tone_map_modes[opts->tone_map.mode];
if (isnan(p->color_map.tone_mapping_param)) // vo_gpu compatibility
p->color_map.tone_mapping_param = 0.0;
p->color_map.visualize_lut = opts->tone_map.visualize;
#if PL_API_VER >= 269
if (opts->tone_map.gamut_mode != GAMUT_AUTO)
p->color_map.gamut_mapping = gamut_modes[opts->tone_map.gamut_mode];
if (opts->tone_map.mode != TONE_MAP_MODE_AUTO)
p->color_map.hybrid_mix = hybrid_mix[opts->tone_map.mode];
#else
p->color_map.intent = opts->icc_opts->intent;
p->color_map.tone_mapping_crosstalk = opts->tone_map.crosstalk;
p->color_map.tone_mapping_mode = tone_map_modes[opts->tone_map.mode];
if (opts->tone_map.gamut_mode != GAMUT_AUTO)
p->color_map.gamut_mode = gamut_modes[opts->tone_map.gamut_mode];
p->color_map.visualize_lut = opts->tone_map.visualize;
#endif
switch (opts->dither_algo) {
case DITHER_NONE: