Skip to content

Commit 75939c2

Browse files
committed
wayland_common: use only supported primaries when inferring from raw
1 parent ec4d50f commit 75939c2

1 file changed

Lines changed: 28 additions & 1 deletion

File tree

video/out/wayland_common.c

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2116,6 +2116,33 @@ 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+
enum pl_color_primaries widest = PL_COLOR_PRIM_UNKNOWN;
2124+
const struct pl_raw_primaries *best = NULL;
2125+
const struct pl_raw_primaries *widest_raw = NULL;
2126+
for (enum pl_color_primaries prim = 1; prim < PL_COLOR_PRIM_COUNT; prim++) {
2127+
if (!primaries_map[prim])
2128+
continue;
2129+
const struct pl_raw_primaries *raw = pl_raw_primaries_get(prim);
2130+
if (pl_raw_primaries_similar(raw, gamut))
2131+
return prim;
2132+
if (pl_primaries_superset(raw, gamut) &&
2133+
(!best || pl_primaries_superset(best, raw)))
2134+
{
2135+
container = prim;
2136+
best = raw;
2137+
}
2138+
if (!widest_raw || pl_primaries_superset(raw, widest_raw)) {
2139+
widest = prim;
2140+
widest_raw = raw;
2141+
}
2142+
}
2143+
return container != PL_COLOR_PRIM_UNKNOWN ? container : widest;
2144+
}
2145+
21192146
static void color_manager_done(void *data, struct wp_color_manager_v1 *color_manager)
21202147
{
21212148
}
@@ -2184,7 +2211,7 @@ static void info_done(void *data, struct wp_image_description_info_v1 *image_des
21842211
MP_VERBOSE(wl, "Preferred surface feedback received:\n");
21852212
log_color_space(wl->log, wd);
21862213
if (!wd->csp.primaries) {
2187-
wd->csp.primaries = mp_get_best_prim_container(&wd->raw_prim);
2214+
wd->csp.primaries = get_best_supported_prim_container(wl->primaries_map, &wd->raw_prim);
21882215
MP_VERBOSE(wl, "Setting best primary container from raw primaries: %s\n",
21892216
m_opt_choice_str(pl_csp_prim_names, wd->csp.primaries));
21902217
}

0 commit comments

Comments
 (0)