diff --git a/backend/drm/util.c b/backend/drm/util.c index dd2b37351..1e0307dcb 100644 --- a/backend/drm/util.c +++ b/backend/drm/util.c @@ -83,6 +83,17 @@ void parse_edid(struct wlr_drm_connector *conn, size_t len, const uint8_t *data) output->model = di_info_get_model(info); output->serial = di_info_get_serial(info); + const struct di_color_primaries *color_characteristics = di_info_get_default_color_primaries(info); + if (color_characteristics->has_primaries) { + output->default_primaries_value = (struct wlr_color_primaries) { + .red = { .x = color_characteristics->primary[0].x, .y = color_characteristics->primary[0].y }, + .green = { .x = color_characteristics->primary[1].x, .y = color_characteristics->primary[1].y }, + .blue = { .x = color_characteristics->primary[2].x, .y = color_characteristics->primary[2].y }, + .white = { .x = color_characteristics->default_white.x, .y = color_characteristics->default_white.y }, + }; + output->default_primaries = &output->default_primaries_value; + } + 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; if (conn->props.colorspace != 0 && has_bt2020) { diff --git a/include/wlr/types/wlr_output.h b/include/wlr/types/wlr_output.h index 2ae11a4d3..3cf8778a5 100644 --- a/include/wlr/types/wlr_output.h +++ b/include/wlr/types/wlr_output.h @@ -187,6 +187,7 @@ struct wlr_output { char *description; // may be NULL char *make, *model, *serial; // may be NULL int32_t phys_width, phys_height; // mm + const struct wlr_color_primaries *default_primaries; // may be NULL // Note: some backends may have zero modes struct wl_list modes; // wlr_output_mode.link @@ -268,6 +269,7 @@ struct wlr_output { struct wl_listener display_destroy; struct wlr_output_image_description image_description_value; struct wlr_color_transform *color_transform; + struct wlr_color_primaries default_primaries_value; } WLR_PRIVATE; };