From 5a45669663565219b61fb0ec3dede962b6b030bc Mon Sep 17 00:00:00 2001 From: llyyr Date: Tue, 17 Mar 2026 13:26:38 +0530 Subject: [PATCH] vo_gpu_next: move get_best_prim_container to csputils Used in next commit --- video/csputils.c | 30 ++++++++++++++++++++++++++++++ video/csputils.h | 2 ++ video/out/vo_gpu_next.c | 32 +------------------------------- 3 files changed, 33 insertions(+), 31 deletions(-) diff --git a/video/csputils.c b/video/csputils.c index 0b618afc6a..b31e394ba2 100644 --- a/video/csputils.c +++ b/video/csputils.c @@ -545,3 +545,33 @@ void mp_map_fixp_color(struct pl_transform3x3 *matrix, int ibits, int in[3], out[i] = av_clip(ival, 0, (1 << obits) - 1); } } + +enum pl_color_primaries mp_get_best_prim_container(const struct pl_raw_primaries *gamut) +{ + enum pl_color_primaries container = PL_COLOR_PRIM_UNKNOWN; + + if (!pl_primaries_valid(gamut)) + return container; + + const struct pl_raw_primaries *best = NULL; + for (enum pl_color_primaries prim = 1; prim < PL_COLOR_PRIM_COUNT; prim++) { + const struct pl_raw_primaries *raw = pl_raw_primaries_get(prim); + if (pl_raw_primaries_similar(raw, gamut)) { + container = prim; + best = raw; + break; + } + + if (pl_primaries_superset(raw, gamut) && + (!best || pl_primaries_superset(best, raw))) + { + container = prim; + best = raw; + } + } + + if (!best) + container = PL_COLOR_PRIM_BT_2020; + + return container; +} diff --git a/video/csputils.h b/video/csputils.h index 832c925ba8..2c71d30df8 100644 --- a/video/csputils.h +++ b/video/csputils.h @@ -122,4 +122,6 @@ void mp_get_csp_matrix(struct mp_csp_params *params, struct pl_transform3x3 *out void mp_map_fixp_color(struct pl_transform3x3 *matrix, int ibits, int in[3], int obits, int out[3]); +enum pl_color_primaries mp_get_best_prim_container(const struct pl_raw_primaries *gamut); + #endif /* MPLAYER_CSPUTILS_H */ diff --git a/video/out/vo_gpu_next.c b/video/out/vo_gpu_next.c index 2e2369b7be..a23fba894f 100644 --- a/video/out/vo_gpu_next.c +++ b/video/out/vo_gpu_next.c @@ -979,36 +979,6 @@ static void update_tm_viz(struct pl_color_map_params *params, params->visualize_hue = M_PI / 4.0; } -static enum pl_color_primaries get_best_prim_container(const struct pl_raw_primaries *gamut) -{ - enum pl_color_primaries container = PL_COLOR_PRIM_UNKNOWN; - - if (!pl_primaries_valid(gamut)) - return container; - - const struct pl_raw_primaries *best = NULL; - for (enum pl_color_primaries prim = 1; prim < PL_COLOR_PRIM_COUNT; prim++) { - const struct pl_raw_primaries *raw = pl_raw_primaries_get(prim); - if (pl_raw_primaries_similar(raw, gamut)) { - container = prim; - best = raw; - break; - } - - if (pl_primaries_superset(raw, gamut) && - (!best || pl_primaries_superset(best, raw))) - { - container = prim; - best = raw; - } - } - - if (!best) - container = PL_COLOR_PRIM_BT_2020; - - return container; -} - static void update_hook_opts_dynamic(struct priv *p, const struct pl_hook *hook, const struct mp_image *mpi); @@ -1101,7 +1071,7 @@ static bool draw_frame(struct vo *vo, struct vo_frame *frame) if (sw->fns->target_csp) target_csp = sw->fns->target_csp(sw); if (target_csp.primaries == PL_COLOR_PRIM_UNKNOWN) - target_csp.primaries = get_best_prim_container(&target_csp.hdr.prim); + target_csp.primaries = mp_get_best_prim_container(&target_csp.hdr.prim); if (!pl_color_transfer_is_hdr(target_csp.transfer)) { // limit min_luma to 1000:1 contrast ratio in SDR mode if (target_csp.hdr.min_luma > PL_COLOR_SDR_WHITE / PL_COLOR_SDR_CONTRAST)