[V7 29/45] drm/colorop: Add PQ 125 EOTF and its inverse
Harry Wentland
harry.wentland at amd.com
Thu Jan 23 20:09:30 UTC 2025
On 2025-01-17 04:04, Pekka Paalanen wrote:
> On Thu, 19 Dec 2024 21:33:35 -0700
> Alex Hung <alex.hung at amd.com> wrote:
>
>> From: Harry Wentland <harry.wentland at amd.com>
>>
>> The PQ function defines a mapping of code values to nits (cd/m^2).
>> The max code value maps to 10,000 nits.
>>
>> Windows DWM's canonical composition color space (CCCS) defaults
>> to composing SDR contents to 80 nits and uses a float value of
>> 1.0 to represent this. For this reason AMD HW hard-codes a PQ
>> function that is scaled by 125, yielding 80 nit PQ values for
>> 1.0 and 10,000 nits at 125.0.
>>
>> This patch introduces this scaled PQ EOTF and its inverse as
>> 1D curve types.
>>
>> Signed-off-by: Alex Hung <alex.hung at amd.com>
>> Signed-off-by: Harry Wentland <harry.wentland at amd.com>
>> ---
>> drivers/gpu/drm/drm_colorop.c | 2 ++
>> include/drm/drm_colorop.h | 21 ++++++++++++++++++++-
>> 2 files changed, 22 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/gpu/drm/drm_colorop.c b/drivers/gpu/drm/drm_colorop.c
>> index 7d4b29c0a0cc..f3391602a577 100644
>> --- a/drivers/gpu/drm/drm_colorop.c
>> +++ b/drivers/gpu/drm/drm_colorop.c
>> @@ -70,6 +70,8 @@ static const struct drm_prop_enum_list drm_colorop_type_enum_list[] = {
>> static const char * const colorop_curve_1d_type_names[] = {
>> [DRM_COLOROP_1D_CURVE_SRGB_EOTF] = "sRGB EOTF",
>> [DRM_COLOROP_1D_CURVE_SRGB_INV_EOTF] = "sRGB Inverse EOTF",
>> + [DRM_COLOROP_1D_CURVE_PQ_125_EOTF] = "PQ 125 EOTF",
>> + [DRM_COLOROP_1D_CURVE_PQ_125_INV_EOTF] = "PQ 125 Inverse EOTF",
>> };
>>
>>
>> diff --git a/include/drm/drm_colorop.h b/include/drm/drm_colorop.h
>> index e9f5c1adc2fe..4084a7438032 100644
>> --- a/include/drm/drm_colorop.h
>> +++ b/include/drm/drm_colorop.h
>> @@ -36,7 +36,6 @@
>> * enum drm_colorop_curve_1d_type - type of 1D curve
>> *
>> * Describes a 1D curve to be applied by the DRM_COLOROP_1D_CURVE colorop.
>> - *
>> */
>> enum drm_colorop_curve_1d_type {
>> /**
>> @@ -56,6 +55,26 @@ enum drm_colorop_curve_1d_type {
>> */
>> DRM_COLOROP_1D_CURVE_SRGB_INV_EOTF,
>>
>> + /**
>> + * @DRM_COLOROP_1D_CURVE_PQ_125_EOTF:
>> + *
>> + * The PQ transfer function, scaled by 125.0f, so that 10,000
>> + * nits correspond to 125.0f.
>> + *
>> + * Transfer characteristics of the PQ function as defined by
>> + * SMPTE ST 2084 (2014) for 10-, 12-, 14-, and 16-bit systems
>> + * and Rec. ITU-R BT.2100-2 perceptual quantization (PQ) system.
>> + * Equivalent to H.273 TransferCharacteristics code point 16.
>> + */
>
> Hi,
>
> this all good, I'd just clarify a minor detail.
>
> H.273 code point 16 defines the normalised formula
> TF: [0.0, 1.0] -> [0.0, 1.0]
> so it is not equivalent to the 125-scaled version.
>
> Maybe you meant something like this?
>
> + * Transfer characteristics of the PQ function as defined by
> + * SMPTE ST 2084 (2014) for 10-, 12-, 14-, and 16-bit systems
> + * and Rec. ITU-R BT.2100-2 perceptual quantization (PQ) system,
> + * represented by H.273 TransferCharacteristics code point 16.
>
Right, and thanks for the clarification.
Harry
>
> Thanks,
> pq
>
>
>> + DRM_COLOROP_1D_CURVE_PQ_125_EOTF,
>> +
>> + /**
>> + * @DRM_COLOROP_1D_CURVE_PQ_125_INV_EOTF:
>> + *
>> + * The inverse of DRM_COLOROP_1D_CURVE_PQ_125_EOTF.
>> + */
>> + DRM_COLOROP_1D_CURVE_PQ_125_INV_EOTF,
>> +
>> /**
>> * @DRM_COLOROP_1D_CURVE_COUNT:
>> *
>
More information about the dri-devel
mailing list