From: Harry Wentland <harry.wentland@amd.com>
To: <amd-gfx@lists.freedesktop.org>,
<dri-devel@lists.freedesktop.org>, <ppaalanen@gmail.com>,
<sebastian@sebastianwick.net>, <mcasas@google.com>
Cc: Deepak.Sharma@amd.com, aric.cyr@amd.com, Krunoslav.Kovac@amd.com,
Shashank.Sharma@amd.com, Harry Wentland <harry.wentland@amd.com>,
Shirish.S@amd.com, hersenxs.wu@amd.com, Vitaly.Prosyak@amd.com,
laurentiu.palcu@oss.nxp.com, Bhawanpreet.Lakha@amd.com,
Nicholas.Kazlauskas@amd.com, ville.syrjala@linux.intel.com
Subject: [RFC PATCH 3/3] drm/color: Add sdr boost property
Date: Mon, 26 Apr 2021 13:38:52 -0400 [thread overview]
Message-ID: <20210426173852.484368-4-harry.wentland@amd.com> (raw)
In-Reply-To: <20210426173852.484368-1-harry.wentland@amd.com>
From: Bhawanpreet Lakha <Bhawanpreet.Lakha@amd.com>
SDR is typically mastered at 200 nits and HDR is mastered at up to 10,000
nits. Due to this luminance range difference if we blend a SDR and
HDR plane together, we can run into problems where the HDR plane is too
bright or the SDR plane is too dim
A common solution to this problem is to boost the SDR plane so that its
not too dim.
This patch introduces a "sdr_white_level" property, this property can be
used by the userspace to boost the SDR content luminance. The boost
value is a explicit luiminance value in nits. This allows the userspace
to set the maximum white level for the SDR plane.
Signed-off-by: Bhawanpreet Lakha <Bhawanpreet.Lakha@amd.com>
Signed-off-by: Harry Wentland <harry.wentland@amd.com>
---
drivers/gpu/drm/drm_atomic_uapi.c | 4 ++++
drivers/gpu/drm/drm_color_mgmt.c | 17 +++++++++++++++++
include/drm/drm_color_mgmt.h | 6 ++++++
include/drm/drm_plane.h | 14 ++++++++++++++
4 files changed, 41 insertions(+)
diff --git a/drivers/gpu/drm/drm_atomic_uapi.c b/drivers/gpu/drm/drm_atomic_uapi.c
index ea95c1224253..b3b6de7b74aa 100644
--- a/drivers/gpu/drm/drm_atomic_uapi.c
+++ b/drivers/gpu/drm/drm_atomic_uapi.c
@@ -597,6 +597,8 @@ static int drm_atomic_plane_set_property(struct drm_plane *plane,
state->color_range = val;
} else if (property == plane->color_tf_property) {
state->color_tf = val;
+ } else if (property == plane->sdr_white_level_property) {
+ state->sdr_white_level = val;
} else if (property == config->prop_fb_damage_clips) {
ret = drm_atomic_replace_property_blob_from_id(dev,
&state->fb_damage_clips,
@@ -665,6 +667,8 @@ drm_atomic_plane_get_property(struct drm_plane *plane,
*val = state->color_range;
} else if (property == plane->color_tf_property) {
*val = state->color_tf;
+ } else if (property == plane->sdr_white_level_property) {
+ *val = state->sdr_white_level;
} else if (property == config->prop_fb_damage_clips) {
*val = (state->fb_damage_clips) ?
state->fb_damage_clips->base.id : 0;
diff --git a/drivers/gpu/drm/drm_color_mgmt.c b/drivers/gpu/drm/drm_color_mgmt.c
index 2404b07046c5..a0b77d7d0565 100644
--- a/drivers/gpu/drm/drm_color_mgmt.c
+++ b/drivers/gpu/drm/drm_color_mgmt.c
@@ -519,6 +519,23 @@ const char *drm_get_color_range_name(enum drm_color_range range)
return color_range_name[range];
}
+int drm_plane_create_sdr_white_level_property(struct drm_plane *plane){
+
+ struct drm_property *prop;
+
+ prop = drm_property_create_range(plane->dev, 0, "SDR_WHITE_LEVEL", 0, UINT_MAX);
+
+ if (!prop)
+ return -ENOMEM;
+
+ plane->sdr_white_level_property = prop;
+ drm_object_attach_property(&plane->base, prop, DRM_DEFAULT_SDR_WHITE_LEVEL);
+
+ if (plane->state)
+ plane->state->sdr_white_level = DRM_DEFAULT_SDR_WHITE_LEVEL;
+
+ return 0;
+}
/**
* drm_get_color_transfer_function - return a string for color transfer function
* @tf: transfer function to compute name of
diff --git a/include/drm/drm_color_mgmt.h b/include/drm/drm_color_mgmt.h
index f59806366855..a020346b1747 100644
--- a/include/drm/drm_color_mgmt.h
+++ b/include/drm/drm_color_mgmt.h
@@ -26,6 +26,12 @@
#include <linux/ctype.h>
#include <drm/drm_property.h>
+/**
+ * Default SDR white level in nits. Although there is no standard SDR nit level, 200
+ * is chosen as the default since that is the generally accepted value.
+ */
+#define DRM_DEFAULT_SDR_WHITE_LEVEL 200
+
struct drm_crtc;
struct drm_plane;
diff --git a/include/drm/drm_plane.h b/include/drm/drm_plane.h
index c85c59501a7a..fad8b7dd430c 100644
--- a/include/drm/drm_plane.h
+++ b/include/drm/drm_plane.h
@@ -187,6 +187,11 @@ struct drm_plane_state {
* format for a proper HDR color/luminance output.
*/
enum drm_color_transfer_function color_tf;
+ /**
+ * @sdr_white_level:
+ * SDR white level boost for HDR+SDR multi plane usecases. max white level in nits
+ */
+ unsigned int sdr_white_level;
/**
* @fb_damage_clips:
*
@@ -757,6 +762,15 @@ struct drm_plane {
* See drm_plane_create_color_properties().
*/
struct drm_property *color_tf_property;
+ /**
+ * @sdr_white_level:
+ *
+ * Optional sdr_white_level. When HDR and SDR are combined in multi plane
+ * overlay cases, the sdr plane will be very dim. This property allows
+ * the driver to boost the sdr plane's white level. The value should be
+ * max white level in nits.
+ */
+ struct drm_property *sdr_white_level_property;
/**
* @scaling_filter_property: property to apply a particular filter while
--
2.31.0
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx
next prev parent reply other threads:[~2021-04-26 17:39 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-04-26 17:38 [RFC PATCH 0/3] A drm_plane API to support HDR planes Harry Wentland
2021-04-26 17:38 ` [RFC PATCH 1/3] drm/color: Add RGB Color encodings Harry Wentland
2021-04-26 18:07 ` Ville Syrjälä
2021-04-26 18:56 ` Harry Wentland
2021-04-26 19:08 ` Ville Syrjälä
2021-04-30 9:04 ` Pekka Paalanen
2021-05-01 0:53 ` Sebastian Wick
2021-05-14 21:04 ` Harry Wentland
2021-05-17 8:34 ` Pekka Paalanen
2021-05-18 14:32 ` Harry Wentland
2021-05-19 7:56 ` Pekka Paalanen
2021-04-26 17:38 ` [RFC PATCH 2/3] drm/color: Add Color transfer functions for HDR/SDR Harry Wentland
2021-04-26 17:38 ` Harry Wentland [this message]
2021-04-27 9:09 ` [RFC PATCH 0/3] A drm_plane API to support HDR planes Daniel Vetter
2021-04-27 14:50 ` Pekka Paalanen
2021-04-28 7:54 ` Shashank Sharma
2021-04-30 9:43 ` Pekka Paalanen
2021-04-30 10:39 ` Shashank Sharma
2021-05-14 21:01 ` Harry Wentland
2021-05-14 21:05 ` Harry Wentland
2021-05-17 8:57 ` Pekka Paalanen
2021-05-17 16:48 ` Sebastian Wick
2021-05-17 19:39 ` Vitaly Prosyak
2021-05-18 7:56 ` Pekka Paalanen
2021-05-18 14:19 ` Harry Wentland
2021-05-18 23:00 ` Sebastian Wick
2021-05-19 8:53 ` Pekka Paalanen
2021-05-19 10:02 ` Pekka Paalanen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210426173852.484368-4-harry.wentland@amd.com \
--to=harry.wentland@amd.com \
--cc=Bhawanpreet.Lakha@amd.com \
--cc=Deepak.Sharma@amd.com \
--cc=Krunoslav.Kovac@amd.com \
--cc=Nicholas.Kazlauskas@amd.com \
--cc=Shashank.Sharma@amd.com \
--cc=Shirish.S@amd.com \
--cc=Vitaly.Prosyak@amd.com \
--cc=amd-gfx@lists.freedesktop.org \
--cc=aric.cyr@amd.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=hersenxs.wu@amd.com \
--cc=laurentiu.palcu@oss.nxp.com \
--cc=mcasas@google.com \
--cc=ppaalanen@gmail.com \
--cc=sebastian@sebastianwick.net \
--cc=ville.syrjala@linux.intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).