Skip to content

Commit bdb24c5

Browse files
committed
wayland_common: use only supported primaries when inferring from raw
1 parent c961c96 commit bdb24c5

1 file changed

Lines changed: 25 additions & 1 deletion

File tree

video/out/wayland_common.c

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2116,6 +2116,30 @@ static void supported_primaries_named(void *data, struct wp_color_manager_v1 *co
21162116
wl->primaries_map[pl_primaries] = primaries;
21172117
}
21182118

2119+
static enum pl_color_primaries get_best_supported_prim_container(const int primaries_map[PL_COLOR_PRIM_COUNT],
2120+
const struct pl_raw_primaries *gamut)
2121+
{
2122+
enum pl_color_primaries container = PL_COLOR_PRIM_UNKNOWN;
2123+
const struct pl_raw_primaries *best = NULL;
2124+
for (enum pl_color_primaries prim = 1; prim < PL_COLOR_PRIM_COUNT; prim++) {
2125+
if (!primaries_map[prim])
2126+
continue;
2127+
const struct pl_raw_primaries *raw = pl_raw_primaries_get(prim);
2128+
if (pl_raw_primaries_similar(raw, gamut)) {
2129+
container = prim;
2130+
best = raw;
2131+
break;
2132+
}
2133+
if (pl_primaries_superset(raw, gamut) &&
2134+
(!best || pl_primaries_superset(best, raw)))
2135+
{
2136+
container = prim;
2137+
best = raw;
2138+
}
2139+
}
2140+
return container;
2141+
}
2142+
21192143
static void color_manager_done(void *data, struct wp_color_manager_v1 *color_manager)
21202144
{
21212145
}
@@ -2184,7 +2208,7 @@ static void info_done(void *data, struct wp_image_description_info_v1 *image_des
21842208
MP_VERBOSE(wl, "Preferred surface feedback received:\n");
21852209
log_color_space(wl->log, wd);
21862210
if (!wd->csp.primaries) {
2187-
wd->csp.primaries = mp_get_best_prim_container(&wd->raw_prim);
2211+
wd->csp.primaries = get_best_supported_prim_container(wl->primaries_map, &wd->raw_prim);
21882212
MP_VERBOSE(wl, "Setting best primary container from raw primaries: %s\n",
21892213
m_opt_choice_str(pl_csp_prim_names, wd->csp.primaries));
21902214
}

0 commit comments

Comments
 (0)