backends/native: Add color space and HDR metadata KMS properties

The Colorspace property informs the display about the colorimetry of the
content. Only variants supported by the sink are exposed in the
property. The strings representing the color spaces are undocumented but
can be found in the `hdmi_colorspaces` list in
`drivers/gpu/drm/drm_connector.c` in the Linux kernel (v 6.2).

The HDR_OUTPUT_METADATA property is a blob with the InfoFrame content.
We have to query support for the different values in the struct from the
EDID/DisplayID ourselfs.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2879>
This commit is contained in:
Sebastian Wick 2023-03-02 01:47:00 +01:00 committed by Marge Bot
parent 48e759c443
commit 2e69eafa06
2 changed files with 105 additions and 1 deletions

View File

@ -40,6 +40,8 @@ typedef enum _MetaKmsConnectorProp
META_KMS_CONNECTOR_PROP_PANEL_ORIENTATION,
META_KMS_CONNECTOR_PROP_NON_DESKTOP,
META_KMS_CONNECTOR_PROP_MAX_BPC,
META_KMS_CONNECTOR_PROP_COLORSPACE,
META_KMS_CONNECTOR_PROP_HDR_OUTPUT_METADATA,
META_KMS_CONNECTOR_N_PROPS
} MetaKmsConnectorProp;
@ -92,6 +94,28 @@ typedef enum _MetaKmsConnectorPanelOrientation
META_KMS_CONNECTOR_PANEL_ORIENTATION_UNKNOWN,
} MetaKmsConnectorPanelOrientation;
typedef enum _MetaKmsConnectorColorspace
{
META_KMS_CONNECTOR_COLORSPACE_DEFAULT = 0,
META_KMS_CONNECTOR_COLORSPACE_RGB_WIDE_GAMUT_FIXED_POINT,
META_KMS_CONNECTOR_COLORSPACE_RGB_WIDE_GAMUT_FLOATING_POINT,
META_KMS_CONNECTOR_COLORSPACE_RGB_OPRGB,
META_KMS_CONNECTOR_COLORSPACE_RGB_DCI_P3_RGB_D65,
META_KMS_CONNECTOR_COLORSPACE_BT2020_RGB,
META_KMS_CONNECTOR_COLORSPACE_BT601_YCC,
META_KMS_CONNECTOR_COLORSPACE_BT709_YCC,
META_KMS_CONNECTOR_COLORSPACE_XVYCC_601,
META_KMS_CONNECTOR_COLORSPACE_XVYCC_709,
META_KMS_CONNECTOR_COLORSPACE_SYCC_601,
META_KMS_CONNECTOR_COLORSPACE_OPYCC_601,
META_KMS_CONNECTOR_COLORSPACE_BT2020_CYCC,
META_KMS_CONNECTOR_COLORSPACE_BT2020_YCC,
META_KMS_CONNECTOR_COLORSPACE_SMPTE_170M_YCC,
META_KMS_CONNECTOR_COLORSPACE_DCI_P3_RGB_THEATER,
META_KMS_CONNECTOR_COLORSPACE_N_PROPS,
META_KMS_CONNECTOR_COLORSPACE_UNKNOWN,
} MetaKmsConnectorColorspace;
uint32_t meta_kms_connector_get_prop_id (MetaKmsConnector *connector,
MetaKmsConnectorProp prop);

View File

@ -40,6 +40,7 @@ typedef struct _MetaKmsConnectorPropTable
MetaKmsEnum privacy_screen_hw_enum[META_KMS_CONNECTOR_PRIVACY_SCREEN_N_PROPS];
MetaKmsEnum scaling_mode_enum[META_KMS_CONNECTOR_SCALING_MODE_N_PROPS];
MetaKmsEnum panel_orientation_enum[META_KMS_CONNECTOR_PANEL_ORIENTATION_N_PROPS];
MetaKmsEnum colorspace_enum[META_KMS_CONNECTOR_COLORSPACE_N_PROPS];
} MetaKmsConnectorPropTable;
struct _MetaKmsConnector
@ -967,6 +968,19 @@ init_properties (MetaKmsConnector *connector,
.name = "max bpc",
.type = DRM_MODE_PROP_RANGE,
},
[META_KMS_CONNECTOR_PROP_COLORSPACE] =
{
.name = "Colorspace",
.type = DRM_MODE_PROP_ENUM,
.enum_values = prop_table->colorspace_enum,
.num_enum_values = META_KMS_CONNECTOR_COLORSPACE_N_PROPS,
.default_value = META_KMS_CONNECTOR_COLORSPACE_UNKNOWN,
},
[META_KMS_CONNECTOR_PROP_HDR_OUTPUT_METADATA] =
{
.name = "HDR_OUTPUT_METADATA",
.type = DRM_MODE_PROP_BLOB,
},
},
.dpms_enum = {
[META_KMS_CONNECTOR_DPMS_ON] =
@ -1071,7 +1085,73 @@ init_properties (MetaKmsConnector *connector,
{
.name = "Right Side Up",
},
}
},
.colorspace_enum = {
[META_KMS_CONNECTOR_COLORSPACE_DEFAULT] =
{
.name = "Default",
},
[META_KMS_CONNECTOR_COLORSPACE_RGB_WIDE_GAMUT_FIXED_POINT] =
{
.name = "RGB_Wide_Gamut_Fixed_Point",
},
[META_KMS_CONNECTOR_COLORSPACE_RGB_WIDE_GAMUT_FLOATING_POINT] =
{
.name = "RGB_Wide_Gamut_Floating_Point",
},
[META_KMS_CONNECTOR_COLORSPACE_RGB_OPRGB] =
{
.name = "opRGB",
},
[META_KMS_CONNECTOR_COLORSPACE_RGB_DCI_P3_RGB_D65] =
{
.name = "DCI-P3_RGB_D65",
},
[META_KMS_CONNECTOR_COLORSPACE_BT2020_RGB] =
{
.name = "BT2020_RGB",
},
[META_KMS_CONNECTOR_COLORSPACE_BT601_YCC] =
{
.name = "BT601_YCC",
},
[META_KMS_CONNECTOR_COLORSPACE_BT709_YCC] =
{
.name = "BT709_YCC",
},
[META_KMS_CONNECTOR_COLORSPACE_XVYCC_601] =
{
.name = "XVYCC_601",
},
[META_KMS_CONNECTOR_COLORSPACE_XVYCC_709] =
{
.name = "XVYCC_709",
},
[META_KMS_CONNECTOR_COLORSPACE_SYCC_601] =
{
.name = "SYCC_601",
},
[META_KMS_CONNECTOR_COLORSPACE_OPYCC_601] =
{
.name = "opYCC_601",
},
[META_KMS_CONNECTOR_COLORSPACE_BT2020_CYCC] =
{
.name = "BT2020_CYCC",
},
[META_KMS_CONNECTOR_COLORSPACE_BT2020_YCC] =
{
.name = "BT2020_YCC",
},
[META_KMS_CONNECTOR_COLORSPACE_SMPTE_170M_YCC] =
{
.name = "SMPTE_170M_YCC",
},
[META_KMS_CONNECTOR_COLORSPACE_DCI_P3_RGB_THEATER] =
{
.name = "DCI-P3_RGB_Theater",
},
},
};
}