render/color: add wlr_color_transfer_function_get_default_luminance()

This commit is contained in:
Simon Ser 2025-02-26 08:58:15 +01:00
parent 50537e2e6f
commit 10b8880fc7
3 changed files with 33 additions and 0 deletions

View file

@ -56,4 +56,10 @@ void wlr_color_primaries_from_named(struct wlr_color_primaries *out,
*/ */
void wlr_color_primaries_to_xyz(const struct wlr_color_primaries *primaries, float matrix[static 9]); void wlr_color_primaries_to_xyz(const struct wlr_color_primaries *primaries, float matrix[static 9]);
/**
* Get default luminances for a transfer function.
*/
void wlr_color_transfer_function_get_default_luminance(enum wlr_color_transfer_function tf,
struct wlr_color_luminances *lum);
#endif #endif

View file

@ -42,6 +42,13 @@ struct wlr_color_primaries {
struct wlr_color_cie1931_xy red, green, blue, white; struct wlr_color_cie1931_xy red, green, blue, white;
}; };
/**
* Luminance range and reference white luminance level, in cd/m².
*/
struct wlr_color_luminances {
float min, max, reference;
};
/** /**
* A color transformation formula, which maps a linear color space with * A color transformation formula, which maps a linear color space with
* sRGB primaries to an output color space. * sRGB primaries to an output color space.

View file

@ -128,3 +128,23 @@ void wlr_color_primaries_to_xyz(const struct wlr_color_primaries *primaries, flo
}; };
memcpy(matrix, result, sizeof(result)); memcpy(matrix, result, sizeof(result));
} }
void wlr_color_transfer_function_get_default_luminance(enum wlr_color_transfer_function tf,
struct wlr_color_luminances *lum) {
switch (tf) {
case WLR_COLOR_TRANSFER_FUNCTION_ST2084_PQ:
*lum = (struct wlr_color_luminances){
.min = 0.005,
.max = 10000,
.reference = 203,
};
break;
default:
*lum = (struct wlr_color_luminances){
.min = 0.2,
.max = 80,
.reference = 80,
};
break;
}
}