From 34ed2ac2256c7c613402c10353d08ec1d7907166 Mon Sep 17 00:00:00 2001 From: Leo Izen Date: Mon, 27 Feb 2023 10:39:33 -0500 Subject: [PATCH] video: add missing libplacebo colorspace enums Add some missing libplacebo primaries and transfer enums to mpv's enum constant tables, and update the functions that convert between the two. --- video/csputils.c | 36 ++++++++++++++++++++++++++++++++++++ video/csputils.h | 4 ++++ video/out/placebo/utils.c | 9 +++++++++ video/zimg.c | 4 ++++ 4 files changed, 53 insertions(+) diff --git a/video/csputils.c b/video/csputils.c index aaa32614b7..34fc4ead42 100644 --- a/video/csputils.c +++ b/video/csputils.c @@ -67,6 +67,10 @@ const struct m_opt_choice_alternatives mp_csp_prim_names[] = { {"display-p3", MP_CSP_PRIM_DISPLAY_P3}, {"v-gamut", MP_CSP_PRIM_V_GAMUT}, {"s-gamut", MP_CSP_PRIM_S_GAMUT}, + {"ebu3213", MP_CSP_PRIM_EBU_3213}, + {"film-c", MP_CSP_PRIM_FILM_C}, + {"aces-ap0", MP_CSP_PRIM_ACES_AP0}, + {"aces-ap1", MP_CSP_PRIM_ACES_AP1}, {0} }; @@ -479,6 +483,38 @@ struct mp_csp_primaries mp_get_csp_primaries(enum mp_csp_prim spc) .blue = {0.100, -0.05}, .white = d65 }; + // from EBU Tech. 3213-E + case MP_CSP_PRIM_EBU_3213: + return (struct mp_csp_primaries) { + .red = {0.630, 0.340}, + .green = {0.295, 0.605}, + .blue = {0.155, 0.077}, + .white = d65 + }; + // From H.273, traditional film with Illuminant C + case MP_CSP_PRIM_FILM_C: + return (struct mp_csp_primaries) { + .red = {0.681, 0.319}, + .green = {0.243, 0.692}, + .blue = {0.145, 0.049}, + .white = c + }; + // From libplacebo source code + case MP_CSP_PRIM_ACES_AP0: + return (struct mp_csp_primaries) { + .red = {0.7347, 0.2653}, + .green = {0.0000, 1.0000}, + .blue = {0.0001, -0.0770}, + .white = {0.32168, 0.33767}, + }; + // From libplacebo source code + case MP_CSP_PRIM_ACES_AP1: + return (struct mp_csp_primaries) { + .red = {0.713, 0.293}, + .green = {0.165, 0.830}, + .blue = {0.128, 0.044}, + .white = {0.32168, 0.33767}, + }; default: return (struct mp_csp_primaries) {{0}}; } diff --git a/video/csputils.h b/video/csputils.h index 69928b29f2..a1459e9512 100644 --- a/video/csputils.h +++ b/video/csputils.h @@ -67,6 +67,10 @@ enum mp_csp_prim { MP_CSP_PRIM_DISPLAY_P3, MP_CSP_PRIM_V_GAMUT, MP_CSP_PRIM_S_GAMUT, + MP_CSP_PRIM_EBU_3213, + MP_CSP_PRIM_FILM_C, + MP_CSP_PRIM_ACES_AP0, + MP_CSP_PRIM_ACES_AP1, MP_CSP_PRIM_COUNT }; diff --git a/video/out/placebo/utils.c b/video/out/placebo/utils.c index 03a2fdd005..961ffc0b97 100644 --- a/video/out/placebo/utils.c +++ b/video/out/placebo/utils.c @@ -85,6 +85,15 @@ enum pl_color_primaries mp_prim_to_pl(enum mp_csp_prim prim) case MP_CSP_PRIM_DISPLAY_P3: return PL_COLOR_PRIM_DISPLAY_P3; case MP_CSP_PRIM_V_GAMUT: return PL_COLOR_PRIM_V_GAMUT; case MP_CSP_PRIM_S_GAMUT: return PL_COLOR_PRIM_S_GAMUT; + case MP_CSP_PRIM_EBU_3213: return PL_COLOR_PRIM_EBU_3213; + case MP_CSP_PRIM_FILM_C: return PL_COLOR_PRIM_FILM_C; +#if PL_API_VER >= 230 + case MP_CSP_PRIM_ACES_AP0: return PL_COLOR_PRIM_ACES_AP0; + case MP_CSP_PRIM_ACES_AP1: return PL_COLOR_PRIM_ACES_AP1; +#else + case MP_CSP_PRIM_ACES_AP0: + case MP_CSP_PRIM_ACES_AP1: return PL_COLOR_PRIM_UNKNOWN; +#endif case MP_CSP_PRIM_COUNT: return PL_COLOR_PRIM_COUNT; } diff --git a/video/zimg.c b/video/zimg.c index 9374cd9f95..f0a945f494 100644 --- a/video/zimg.c +++ b/video/zimg.c @@ -181,12 +181,16 @@ static zimg_color_primaries_e mp_to_z_prim(enum mp_csp_prim prim) case MP_CSP_PRIM_BT_470M: return ZIMG_PRIMARIES_BT470_M; case MP_CSP_PRIM_DCI_P3: return ZIMG_PRIMARIES_ST431_2; case MP_CSP_PRIM_DISPLAY_P3:return ZIMG_PRIMARIES_ST432_1; + case MP_CSP_PRIM_EBU_3213: return ZIMG_PRIMARIES_EBU3213_E; + case MP_CSP_PRIM_FILM_C: return ZIMG_PRIMARIES_FILM; case MP_CSP_PRIM_CIE_1931: case MP_CSP_PRIM_APPLE: // ? case MP_CSP_PRIM_ADOBE: case MP_CSP_PRIM_PRO_PHOTO: case MP_CSP_PRIM_V_GAMUT: case MP_CSP_PRIM_S_GAMUT: // ? + case MP_CSP_PRIM_ACES_AP0: + case MP_CSP_PRIM_ACES_AP1: default: return ZIMG_PRIMARIES_BT709; } }