diff --git a/include/wlr/types/wlr_color_management_v1.h b/include/wlr/types/wlr_color_management_v1.h index e6cb7dfbb..8caa61c6a 100644 --- a/include/wlr/types/wlr_color_management_v1.h +++ b/include/wlr/types/wlr_color_management_v1.h @@ -14,6 +14,7 @@ #include +struct wlr_renderer; struct wlr_surface; struct wlr_image_description_v1_data { @@ -119,4 +120,18 @@ wlr_color_manager_v1_primaries_to_wlr(enum wp_color_manager_v1_primaries primari enum wp_color_manager_v1_primaries wlr_color_manager_v1_primaries_from_wlr(enum wlr_color_named_primaries primaries); +/** + * Get a list of supported transfer functions for a renderer. The caller is + * responsible for free'ing the array. + */ +enum wp_color_manager_v1_transfer_function * +wlr_color_manager_v1_transfer_function_list_from_renderer(struct wlr_renderer *renderer, size_t *len); + +/** + * Get a list of supported named primaries for a renderer. The caller is + * responsible for free'ing the array. + */ +enum wp_color_manager_v1_primaries * +wlr_color_manager_v1_primaries_list_from_renderer(struct wlr_renderer *renderer, size_t *len); + #endif diff --git a/types/wlr_color_management_v1.c b/types/wlr_color_management_v1.c index c69a69c81..14c7acabd 100644 --- a/types/wlr_color_management_v1.c +++ b/types/wlr_color_management_v1.c @@ -2,6 +2,7 @@ #include #include +#include #include #include #include @@ -1041,3 +1042,49 @@ wlr_color_manager_v1_primaries_from_wlr(enum wlr_color_named_primaries primaries } abort(); } + +enum wp_color_manager_v1_transfer_function * +wlr_color_manager_v1_transfer_function_list_from_renderer(struct wlr_renderer *renderer, size_t *len) { + if (!renderer->features.input_color_transform) { + *len = 0; + return NULL; + } + + const enum wp_color_manager_v1_transfer_function list[] = { + WP_COLOR_MANAGER_V1_TRANSFER_FUNCTION_SRGB, + WP_COLOR_MANAGER_V1_TRANSFER_FUNCTION_GAMMA22, + WP_COLOR_MANAGER_V1_TRANSFER_FUNCTION_ST2084_PQ, + WP_COLOR_MANAGER_V1_TRANSFER_FUNCTION_EXT_LINEAR, + }; + + enum wp_color_manager_v1_transfer_function *out = NULL; + if (!memdup(&out, list, sizeof(list))) { + *len = 0; + return NULL; + } + + *len = sizeof(list) / sizeof(list[0]); + return out; +} + +enum wp_color_manager_v1_primaries * +wlr_color_manager_v1_primaries_list_from_renderer(struct wlr_renderer *renderer, size_t *len) { + if (!renderer->features.input_color_transform) { + *len = 0; + return NULL; + } + + const enum wp_color_manager_v1_primaries list[] = { + WP_COLOR_MANAGER_V1_PRIMARIES_SRGB, + WP_COLOR_MANAGER_V1_PRIMARIES_BT2020, + }; + + enum wp_color_manager_v1_primaries *out = NULL; + if (!memdup(&out, list, sizeof(list))) { + *len = 0; + return NULL; + } + + *len = sizeof(list) / sizeof(list[0]); + return out; +}