mirror of
https://gitlab.freedesktop.org/wlroots/wlroots.git
synced 2026-04-14 08:22:25 -04:00
output, backend/drm: add wlr_output.color_primaries
This contains the output's color primaries, if known.
This commit is contained in:
parent
8c7041c4e8
commit
b7fe653aac
3 changed files with 20 additions and 0 deletions
|
|
@ -50,6 +50,14 @@ enum wlr_output_mode_aspect_ratio get_picture_aspect_ratio(const drmModeModeInfo
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void copy_chromaticity_cie1931(struct wlr_color_cie1931_xy *dst,
|
||||||
|
const struct di_chromaticity_cie1931 *src) {
|
||||||
|
*dst = (struct wlr_color_cie1931_xy){
|
||||||
|
.x = src->x,
|
||||||
|
.y = src->y,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
void parse_edid(struct wlr_drm_connector *conn, size_t len, const uint8_t *data) {
|
void parse_edid(struct wlr_drm_connector *conn, size_t len, const uint8_t *data) {
|
||||||
struct wlr_output *output = &conn->output;
|
struct wlr_output *output = &conn->output;
|
||||||
|
|
||||||
|
|
@ -83,6 +91,15 @@ void parse_edid(struct wlr_drm_connector *conn, size_t len, const uint8_t *data)
|
||||||
output->model = di_info_get_model(info);
|
output->model = di_info_get_model(info);
|
||||||
output->serial = di_info_get_serial(info);
|
output->serial = di_info_get_serial(info);
|
||||||
|
|
||||||
|
const struct di_color_primaries *primaries = di_info_get_default_color_primaries(info);
|
||||||
|
if (primaries->has_primaries && primaries->has_default_white_point) {
|
||||||
|
copy_chromaticity_cie1931(&conn->color_primaries.red, &primaries->primary[0]);
|
||||||
|
copy_chromaticity_cie1931(&conn->color_primaries.green, &primaries->primary[1]);
|
||||||
|
copy_chromaticity_cie1931(&conn->color_primaries.blue, &primaries->primary[2]);
|
||||||
|
copy_chromaticity_cie1931(&conn->color_primaries.white, &primaries->default_white);
|
||||||
|
output->color_primaries = &conn->color_primaries;
|
||||||
|
}
|
||||||
|
|
||||||
const struct di_supported_signal_colorimetry *colorimetry = di_info_get_supported_signal_colorimetry(info);
|
const struct di_supported_signal_colorimetry *colorimetry = di_info_get_supported_signal_colorimetry(info);
|
||||||
bool has_bt2020 = colorimetry->bt2020_cycc || colorimetry->bt2020_ycc || colorimetry->bt2020_rgb;
|
bool has_bt2020 = colorimetry->bt2020_cycc || colorimetry->bt2020_ycc || colorimetry->bt2020_rgb;
|
||||||
if (conn->props.colorspace != 0 && has_bt2020) {
|
if (conn->props.colorspace != 0 && has_bt2020) {
|
||||||
|
|
|
||||||
|
|
@ -195,6 +195,7 @@ struct wlr_drm_connector {
|
||||||
drmModeConnection status;
|
drmModeConnection status;
|
||||||
uint32_t id;
|
uint32_t id;
|
||||||
uint64_t max_bpc_bounds[2];
|
uint64_t max_bpc_bounds[2];
|
||||||
|
struct wlr_color_primaries color_primaries; // might be zero
|
||||||
struct wlr_drm_lease *lease;
|
struct wlr_drm_lease *lease;
|
||||||
|
|
||||||
struct wlr_drm_crtc *crtc;
|
struct wlr_drm_crtc *crtc;
|
||||||
|
|
|
||||||
|
|
@ -197,6 +197,8 @@ struct wlr_output {
|
||||||
uint32_t supported_primaries; // bitfield of enum wlr_color_named_primaries
|
uint32_t supported_primaries; // bitfield of enum wlr_color_named_primaries
|
||||||
uint32_t supported_transfer_functions; // bitfield of enum wlr_color_transfer_function
|
uint32_t supported_transfer_functions; // bitfield of enum wlr_color_transfer_function
|
||||||
|
|
||||||
|
const struct wlr_color_primaries *color_primaries; // NULL if unset
|
||||||
|
|
||||||
bool enabled;
|
bool enabled;
|
||||||
float scale;
|
float scale;
|
||||||
enum wl_output_subpixel subpixel;
|
enum wl_output_subpixel subpixel;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue