* [PATCH v3 0/3] HDR10 static metadata
@ 2020-12-08 14:59 Stanimir Varbanov
2020-12-08 14:59 ` [PATCH v3 1/3] v4l: Add HDR10 static metadata controls Stanimir Varbanov
` (2 more replies)
0 siblings, 3 replies; 6+ messages in thread
From: Stanimir Varbanov @ 2020-12-08 14:59 UTC (permalink / raw)
To: linux-media, linux-kernel, linux-arm-msm
Cc: Hans Verkuil, Ezequiel Garcia, Nicolas Dufresne, Stanimir Varbanov
Hello,
Changes since v2:
* fixed typos
* introduce new colorimetry class
* kept the parameter validation (even though Hans suggested to drop it)
* rename to max/min_display_mastering_luminance
The previous patchset version can be found at [1].
regards,
Stan
[1] https://lore.kernel.org/linux-media/20201123230257.31690-1-stanimir.varbanov@linaro.org/T/#mba512702aab370d4b0aa393dea54095e55d78552
Stanimir Varbanov (3):
v4l: Add HDR10 static metadata controls
docs: media: Document CLL and Mastering display
venus: venc: Add support for CLL and Mastering display controls
.../userspace-api/media/v4l/common.rst | 1 +
.../media/v4l/ext-ctrls-colorimetry.rst | 88 +++++++++++++++++++
.../media/videodev2.h.rst.exceptions | 2 +
drivers/media/platform/qcom/venus/core.h | 3 +
drivers/media/platform/qcom/venus/hfi_cmds.c | 8 ++
.../media/platform/qcom/venus/hfi_helper.h | 20 +++++
drivers/media/platform/qcom/venus/venc.c | 29 ++++++
.../media/platform/qcom/venus/venc_ctrls.c | 16 +++-
drivers/media/v4l2-core/v4l2-ctrls.c | 68 ++++++++++++++
include/media/v4l2-ctrls.h | 4 +
include/uapi/linux/v4l2-controls.h | 35 ++++++++
include/uapi/linux/videodev2.h | 2 +
12 files changed, 275 insertions(+), 1 deletion(-)
create mode 100644 Documentation/userspace-api/media/v4l/ext-ctrls-colorimetry.rst
--
2.17.1
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH v3 1/3] v4l: Add HDR10 static metadata controls
2020-12-08 14:59 [PATCH v3 0/3] HDR10 static metadata Stanimir Varbanov
@ 2020-12-08 14:59 ` Stanimir Varbanov
2021-01-12 10:17 ` Hans Verkuil
2020-12-08 14:59 ` [PATCH v3 2/3] docs: media: Document CLL and Mastering display Stanimir Varbanov
2020-12-08 14:59 ` [PATCH v3 3/3] venus: venc: Add support for CLL and Mastering display controls Stanimir Varbanov
2 siblings, 1 reply; 6+ messages in thread
From: Stanimir Varbanov @ 2020-12-08 14:59 UTC (permalink / raw)
To: linux-media, linux-kernel, linux-arm-msm
Cc: Hans Verkuil, Ezequiel Garcia, Nicolas Dufresne, Stanimir Varbanov
Here we introduce a new Colorimetry control class and add
Content light level and Mastering display colour volume v4l2
compound controls, relevant payload structures and validation.
Signed-off-by: Stanimir Varbanov <stanimir.varbanov@linaro.org>
---
.../media/videodev2.h.rst.exceptions | 2 +
drivers/media/v4l2-core/v4l2-ctrls.c | 68 +++++++++++++++++++
include/media/v4l2-ctrls.h | 4 ++
include/uapi/linux/v4l2-controls.h | 35 ++++++++++
include/uapi/linux/videodev2.h | 2 +
5 files changed, 111 insertions(+)
diff --git a/Documentation/userspace-api/media/videodev2.h.rst.exceptions b/Documentation/userspace-api/media/videodev2.h.rst.exceptions
index 0ed170c6e720..af4b8b87c5d7 100644
--- a/Documentation/userspace-api/media/videodev2.h.rst.exceptions
+++ b/Documentation/userspace-api/media/videodev2.h.rst.exceptions
@@ -147,6 +147,8 @@ replace symbol V4L2_CTRL_TYPE_HEVC_PPS :c:type:`v4l2_ctrl_type`
replace symbol V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS :c:type:`v4l2_ctrl_type`
replace symbol V4L2_CTRL_TYPE_AREA :c:type:`v4l2_ctrl_type`
replace symbol V4L2_CTRL_TYPE_FWHT_PARAMS :c:type:`v4l2_ctrl_type`
+replace symbol V4L2_CTRL_TYPE_HDR10_CLL_INFO :c:type:`v4l2_ctrl_hdr10_cll_info`
+replace symbol V4L2_CTRL_TYPE_HDR10_MASTERING_DISPLAY :c:type:`v4l2_ctrl_hdr10_mastering_display`
# V4L2 capability defines
replace define V4L2_CAP_VIDEO_CAPTURE device-capabilities
diff --git a/drivers/media/v4l2-core/v4l2-ctrls.c b/drivers/media/v4l2-core/v4l2-ctrls.c
index 5cbe0ffbf501..7bd6c3098f30 100644
--- a/drivers/media/v4l2-core/v4l2-ctrls.c
+++ b/drivers/media/v4l2-core/v4l2-ctrls.c
@@ -1015,6 +1015,9 @@ const char *v4l2_ctrl_get_name(u32 id)
case V4L2_CID_MPEG_VIDEO_HEVC_DECODE_MODE: return "HEVC Decode Mode";
case V4L2_CID_MPEG_VIDEO_HEVC_START_CODE: return "HEVC Start Code";
+ case V4L2_CID_COLORIMETRY_HDR10_CLL_INFO: return "HDR10 Content Light Info";
+ case V4L2_CID_COLORIMETRY_HDR10_MASTERING_DISPLAY: return "HDR10 Mastering Display";
+
/* CAMERA controls */
/* Keep the order of the 'case's the same as in v4l2-controls.h! */
case V4L2_CID_CAMERA_CLASS: return "Camera Controls";
@@ -1466,6 +1469,12 @@ void v4l2_ctrl_fill(u32 id, const char **name, enum v4l2_ctrl_type *type,
case V4L2_CID_MPEG_VIDEO_HEVC_SLICE_PARAMS:
*type = V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS;
break;
+ case V4L2_CID_COLORIMETRY_HDR10_CLL_INFO:
+ *type = V4L2_CTRL_TYPE_HDR10_CLL_INFO;
+ break;
+ case V4L2_CID_COLORIMETRY_HDR10_MASTERING_DISPLAY:
+ *type = V4L2_CTRL_TYPE_HDR10_MASTERING_DISPLAY;
+ break;
case V4L2_CID_UNIT_CELL_SIZE:
*type = V4L2_CTRL_TYPE_AREA;
*flags |= V4L2_CTRL_FLAG_READ_ONLY;
@@ -1765,6 +1774,12 @@ static void std_log(const struct v4l2_ctrl *ctrl)
case V4L2_CTRL_TYPE_FWHT_PARAMS:
pr_cont("FWHT_PARAMS");
break;
+ case V4L2_CTRL_TYPE_HDR10_CLL_INFO:
+ pr_cont("HDR10_CLL_INFO");
+ break;
+ case V4L2_CTRL_TYPE_HDR10_MASTERING_DISPLAY:
+ pr_cont("HDR10_MASTERING_DISPLAY");
+ break;
default:
pr_cont("unknown type %d", ctrl->type);
break;
@@ -1817,6 +1832,7 @@ static int std_validate_compound(const struct v4l2_ctrl *ctrl, u32 idx,
struct v4l2_ctrl_hevc_sps *p_hevc_sps;
struct v4l2_ctrl_hevc_pps *p_hevc_pps;
struct v4l2_ctrl_hevc_slice_params *p_hevc_slice_params;
+ struct v4l2_ctrl_hdr10_mastering_display *p_hdr10_mastering;
struct v4l2_area *area;
void *p = ptr.p + idx * ctrl->elem_size;
unsigned int i;
@@ -2112,6 +2128,52 @@ static int std_validate_compound(const struct v4l2_ctrl *ctrl, u32 idx,
zero_padding(*p_hevc_slice_params);
break;
+ case V4L2_CTRL_TYPE_HDR10_CLL_INFO:
+ break;
+
+ case V4L2_CTRL_TYPE_HDR10_MASTERING_DISPLAY:
+ p_hdr10_mastering = p;
+
+ for (i = 0; i < 3; ++i) {
+ if (p_hdr10_mastering->display_primaries_x[i] <
+ V4L2_HDR10_MASTERING_PRIMARIES_X_LOW ||
+ p_hdr10_mastering->display_primaries_x[i] >
+ V4L2_HDR10_MASTERING_PRIMARIES_X_HIGH ||
+ p_hdr10_mastering->display_primaries_y[i] <
+ V4L2_HDR10_MASTERING_PRIMARIES_Y_LOW ||
+ p_hdr10_mastering->display_primaries_y[i] >
+ V4L2_HDR10_MASTERING_PRIMARIES_Y_HIGH)
+ return -EINVAL;
+ }
+
+ if (p_hdr10_mastering->white_point_x <
+ V4L2_HDR10_MASTERING_WHITE_POINT_X_LOW ||
+ p_hdr10_mastering->white_point_x >
+ V4L2_HDR10_MASTERING_WHITE_POINT_X_HIGH ||
+ p_hdr10_mastering->white_point_y <
+ V4L2_HDR10_MASTERING_WHITE_POINT_Y_LOW ||
+ p_hdr10_mastering->white_point_y >
+ V4L2_HDR10_MASTERING_WHITE_POINT_Y_HIGH)
+ return -EINVAL;
+
+ if (p_hdr10_mastering->max_display_mastering_luminance <
+ V4L2_HDR10_MASTERING_MAX_LUMA_LOW ||
+ p_hdr10_mastering->max_display_mastering_luminance >
+ V4L2_HDR10_MASTERING_MAX_LUMA_HIGH ||
+ p_hdr10_mastering->min_display_mastering_luminance <
+ V4L2_HDR10_MASTERING_MIN_LUMA_LOW ||
+ p_hdr10_mastering->min_display_mastering_luminance >
+ V4L2_HDR10_MASTERING_MIN_LUMA_HIGH)
+ return -EINVAL;
+
+ if (p_hdr10_mastering->max_display_mastering_luminance ==
+ V4L2_HDR10_MASTERING_MAX_LUMA_LOW &&
+ p_hdr10_mastering->min_display_mastering_luminance ==
+ V4L2_HDR10_MASTERING_MIN_LUMA_HIGH)
+ return -EINVAL;
+
+ break;
+
case V4L2_CTRL_TYPE_AREA:
area = p;
if (!area->width || !area->height)
@@ -2804,6 +2866,12 @@ static struct v4l2_ctrl *v4l2_ctrl_new(struct v4l2_ctrl_handler *hdl,
case V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS:
elem_size = sizeof(struct v4l2_ctrl_hevc_slice_params);
break;
+ case V4L2_CTRL_TYPE_HDR10_CLL_INFO:
+ elem_size = sizeof(struct v4l2_ctrl_hdr10_cll_info);
+ break;
+ case V4L2_CTRL_TYPE_HDR10_MASTERING_DISPLAY:
+ elem_size = sizeof(struct v4l2_ctrl_hdr10_mastering_display);
+ break;
case V4L2_CTRL_TYPE_AREA:
elem_size = sizeof(struct v4l2_area);
break;
diff --git a/include/media/v4l2-ctrls.h b/include/media/v4l2-ctrls.h
index 167ca8c8424f..8308acc89b11 100644
--- a/include/media/v4l2-ctrls.h
+++ b/include/media/v4l2-ctrls.h
@@ -54,6 +54,8 @@ struct video_device;
* @p_hevc_sps: Pointer to an HEVC sequence parameter set structure.
* @p_hevc_pps: Pointer to an HEVC picture parameter set structure.
* @p_hevc_slice_params: Pointer to an HEVC slice parameters structure.
+ * @p_hdr10_cll: Pointer to an HDR10 Content Light Level structure.
+ * @p_hdr10_mastering : Pointer to an HDR10 Mastering Display structure.
* @p_area: Pointer to an area.
* @p: Pointer to a compound value.
* @p_const: Pointer to a constant compound value.
@@ -78,6 +80,8 @@ union v4l2_ctrl_ptr {
struct v4l2_ctrl_hevc_sps *p_hevc_sps;
struct v4l2_ctrl_hevc_pps *p_hevc_pps;
struct v4l2_ctrl_hevc_slice_params *p_hevc_slice_params;
+ struct v4l2_ctrl_hdr10_cll_info *p_hdr10_cll;
+ struct v4l2_ctrl_hdr10_mastering_display *p_hdr10_mastering;
struct v4l2_area *p_area;
void *p;
const void *p_const;
diff --git a/include/uapi/linux/v4l2-controls.h b/include/uapi/linux/v4l2-controls.h
index 823b214aac0c..8563f789cbe2 100644
--- a/include/uapi/linux/v4l2-controls.h
+++ b/include/uapi/linux/v4l2-controls.h
@@ -66,6 +66,7 @@
#define V4L2_CTRL_CLASS_RF_TUNER 0x00a20000 /* RF tuner controls */
#define V4L2_CTRL_CLASS_DETECT 0x00a30000 /* Detection controls */
#define V4L2_CTRL_CLASS_CODEC_STATELESS 0x00a40000 /* Stateless codecs controls */
+#define V4L2_CTRL_CLASS_COLORIMETRY 0x00a50000 /* Colorimetry controls */
/* User-class control IDs */
@@ -1635,6 +1636,40 @@ struct v4l2_ctrl_fwht_params {
__u32 quantization;
};
+#define V4L2_CID_COLORIMETRY_BASE (V4L2_CTRL_CLASS_COLORIMETRY | 0x900)
+#define V4L2_CID_COLORIMETRY_CLASS (V4L2_CTRL_CLASS_COLORIMETRY | 1)
+
+#define V4L2_CID_COLORIMETRY_HDR10_CLL_INFO (V4L2_CID_COLORIMETRY_BASE + 0)
+
+struct v4l2_ctrl_hdr10_cll_info {
+ __u16 max_content_light_level;
+ __u16 max_pic_average_light_level;
+};
+
+#define V4L2_CID_COLORIMETRY_HDR10_MASTERING_DISPLAY (V4L2_CID_COLORIMETRY_BASE + 1)
+
+#define V4L2_HDR10_MASTERING_PRIMARIES_X_LOW 5
+#define V4L2_HDR10_MASTERING_PRIMARIES_X_HIGH 37000
+#define V4L2_HDR10_MASTERING_PRIMARIES_Y_LOW 5
+#define V4L2_HDR10_MASTERING_PRIMARIES_Y_HIGH 42000
+#define V4L2_HDR10_MASTERING_WHITE_POINT_X_LOW 5
+#define V4L2_HDR10_MASTERING_WHITE_POINT_X_HIGH 37000
+#define V4L2_HDR10_MASTERING_WHITE_POINT_Y_LOW 5
+#define V4L2_HDR10_MASTERING_WHITE_POINT_Y_HIGH 42000
+#define V4L2_HDR10_MASTERING_MAX_LUMA_LOW 50000
+#define V4L2_HDR10_MASTERING_MAX_LUMA_HIGH 100000000
+#define V4L2_HDR10_MASTERING_MIN_LUMA_LOW 1
+#define V4L2_HDR10_MASTERING_MIN_LUMA_HIGH 50000
+
+struct v4l2_ctrl_hdr10_mastering_display {
+ __u16 display_primaries_x[3];
+ __u16 display_primaries_y[3];
+ __u16 white_point_x;
+ __u16 white_point_y;
+ __u32 max_display_mastering_luminance;
+ __u32 min_display_mastering_luminance;
+};
+
/* MPEG-compression definitions kept for backwards compatibility */
#ifndef __KERNEL__
#define V4L2_CTRL_CLASS_MPEG V4L2_CTRL_CLASS_CODEC
diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
index 79dbde3bcf8d..1bde498e36a0 100644
--- a/include/uapi/linux/videodev2.h
+++ b/include/uapi/linux/videodev2.h
@@ -1792,6 +1792,8 @@ enum v4l2_ctrl_type {
V4L2_CTRL_TYPE_H264_PRED_WEIGHTS = 0x0205,
V4L2_CTRL_TYPE_FWHT_PARAMS = 0x0220,
+ V4L2_CTRL_TYPE_HDR10_CLL_INFO = 0x0221,
+ V4L2_CTRL_TYPE_HDR10_MASTERING_DISPLAY = 0x0222,
};
/* Used in the VIDIOC_QUERYCTRL ioctl for querying controls */
--
2.17.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH v3 2/3] docs: media: Document CLL and Mastering display
2020-12-08 14:59 [PATCH v3 0/3] HDR10 static metadata Stanimir Varbanov
2020-12-08 14:59 ` [PATCH v3 1/3] v4l: Add HDR10 static metadata controls Stanimir Varbanov
@ 2020-12-08 14:59 ` Stanimir Varbanov
2021-01-12 10:34 ` Hans Verkuil
2020-12-08 14:59 ` [PATCH v3 3/3] venus: venc: Add support for CLL and Mastering display controls Stanimir Varbanov
2 siblings, 1 reply; 6+ messages in thread
From: Stanimir Varbanov @ 2020-12-08 14:59 UTC (permalink / raw)
To: linux-media, linux-kernel, linux-arm-msm
Cc: Hans Verkuil, Ezequiel Garcia, Nicolas Dufresne, Stanimir Varbanov
Document Content light level and Mastering display colour volume.
Signed-off-by: Stanimir Varbanov <stanimir.varbanov@linaro.org>
---
.../userspace-api/media/v4l/common.rst | 1 +
.../media/v4l/ext-ctrls-colorimetry.rst | 88 +++++++++++++++++++
2 files changed, 89 insertions(+)
create mode 100644 Documentation/userspace-api/media/v4l/ext-ctrls-colorimetry.rst
diff --git a/Documentation/userspace-api/media/v4l/common.rst b/Documentation/userspace-api/media/v4l/common.rst
index 8c263c5a85d8..ea0435182e44 100644
--- a/Documentation/userspace-api/media/v4l/common.rst
+++ b/Documentation/userspace-api/media/v4l/common.rst
@@ -51,6 +51,7 @@ applicable to all devices.
ext-ctrls-fm-tx
ext-ctrls-fm-rx
ext-ctrls-detect
+ ext-ctrls-colorimetry
fourcc
format
planar-apis
diff --git a/Documentation/userspace-api/media/v4l/ext-ctrls-colorimetry.rst b/Documentation/userspace-api/media/v4l/ext-ctrls-colorimetry.rst
new file mode 100644
index 000000000000..16d9ddadbab6
--- /dev/null
+++ b/Documentation/userspace-api/media/v4l/ext-ctrls-colorimetry.rst
@@ -0,0 +1,88 @@
+.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
+
+.. _colorimetry-controls:
+
+*****************************
+Colorimetry Control Reference
+*****************************
+
+Below are controls within the Colorimetry control class.
+
+Colorimetry Control IDs
+-----------------------
+
+.. _colorimetry-control-id:
+
+``V4L2_CID_COLORIMETRY_CLASS (class)``
+ The Colorimetry class descriptor.
+
+``V4L2_CID_COLORIMETRY_HDR10_CLL_INFO (struct)``
+ The Content Light Level defines upper bounds for the nominal target
+ brightness light level of the pictures.
+
+.. c:type:: v4l2_ctrl_hdr10_cll_info
+
+.. cssclass:: longtable
+
+.. flat-table:: struct v4l2_ctrl_hdr10_cll_info
+ :header-rows: 0
+ :stub-columns: 0
+ :widths: 1 1 2
+
+ * - __u16
+ - ``max_content_light_level``
+ - An upper bound on the maximum light level among all individual
+ samples for the pictures of coded video sequence, cd/m2. When
+ equal to 0 no such uppper bound is present.
+ * - __u16
+ - ``max_pic_average_light_level``
+ - An upper bound on the maximum average light level among the
+ samples for any individual picture of coded video sequence, cd/m2.
+ When equal to 0 no such uppper bound is present.
+
+``V4L2_CID_COLORIMETRY_HDR10_MASTERING_DISPLAY (struct)``
+ The mastering display defines the colour volume (the colour primaries,
+ white point and luminance range) of a display considered to be the
+ mastering display for current video content.
+
+.. c:type:: v4l2_ctrl_hdr10_mastering_display
+
+.. cssclass:: longtable
+
+.. flat-table:: struct v4l2_ctrl_hdr10_mastering_display
+ :header-rows: 0
+ :stub-columns: 0
+ :widths: 1 1 2
+
+ * - __u16
+ - ``display_primaries_x[3]``
+ - Specifies the normalized x chromaticity coordinate of the colour
+ primary component c of the mastering display in increments of 0.00002.
+ For describing mastering display that use Red, Green and Blue colour
+ primaries, index value c equal to 0 correspond to Green primary, c
+ equal to 1 correspond to Blue primary and c equal to 2 correspond to
+ Red colour primary.
+ * - __u16
+ - ``display_primaries_y[3]``
+ - Specifies the normalized y chromaticity coordinate of the colour
+ primary component c of the mastering display in increments of 0.00002.
+ For describing mastering display that use Red, Green and Blue colour
+ primaries, index value c equal to 0 correspond to Green primary, c
+ equal to 1 correspond to Blue primary and c equal to 2 correspond to
+ Red colour primary.
+ * - __u16
+ - ``white_point_x``
+ - Specifies the normalized x chromaticity coordinate of the white
+ point of the mastering display in increments of 0.00002.
+ * - __u16
+ - ``white_point_y``
+ - Specifies the normalized y chromaticity coordinate of the white
+ point of the mastering display in increments of 0.00002.
+ * - __u32
+ - ``max_luminance``
+ - Specifies the nominal maximum display luminance of the mastering
+ display in units of 0.0001 cd/m2.
+ * - __u32
+ - ``min_luminance``
+ - specifies the nominal minimum display luminance of the mastering
+ display in units of 0.0001 cd/m2.
--
2.17.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH v3 3/3] venus: venc: Add support for CLL and Mastering display controls
2020-12-08 14:59 [PATCH v3 0/3] HDR10 static metadata Stanimir Varbanov
2020-12-08 14:59 ` [PATCH v3 1/3] v4l: Add HDR10 static metadata controls Stanimir Varbanov
2020-12-08 14:59 ` [PATCH v3 2/3] docs: media: Document CLL and Mastering display Stanimir Varbanov
@ 2020-12-08 14:59 ` Stanimir Varbanov
2 siblings, 0 replies; 6+ messages in thread
From: Stanimir Varbanov @ 2020-12-08 14:59 UTC (permalink / raw)
To: linux-media, linux-kernel, linux-arm-msm
Cc: Hans Verkuil, Ezequiel Garcia, Nicolas Dufresne, Stanimir Varbanov
Create CLL and Mastering display colour volume v4l2 controls for
encoder, add handling of HDR10 PQ SEI packet payloads for v4.
Signed-off-by: Stanimir Varbanov <stanimir.varbanov@linaro.org>
---
drivers/media/platform/qcom/venus/core.h | 3 ++
drivers/media/platform/qcom/venus/hfi_cmds.c | 8 +++++
.../media/platform/qcom/venus/hfi_helper.h | 20 +++++++++++++
drivers/media/platform/qcom/venus/venc.c | 29 +++++++++++++++++++
.../media/platform/qcom/venus/venc_ctrls.c | 16 +++++++++-
5 files changed, 75 insertions(+), 1 deletion(-)
diff --git a/drivers/media/platform/qcom/venus/core.h b/drivers/media/platform/qcom/venus/core.h
index f03ed427accd..2bf494020d18 100644
--- a/drivers/media/platform/qcom/venus/core.h
+++ b/drivers/media/platform/qcom/venus/core.h
@@ -256,6 +256,9 @@ struct venc_controls {
u32 hevc;
u32 vp9;
} level;
+
+ struct v4l2_ctrl_hdr10_cll_info cll;
+ struct v4l2_ctrl_hdr10_mastering_display mastering;
};
struct venus_buffer {
diff --git a/drivers/media/platform/qcom/venus/hfi_cmds.c b/drivers/media/platform/qcom/venus/hfi_cmds.c
index 7022368c1e63..081e5a816bca 100644
--- a/drivers/media/platform/qcom/venus/hfi_cmds.c
+++ b/drivers/media/platform/qcom/venus/hfi_cmds.c
@@ -1205,6 +1205,14 @@ pkt_session_set_property_4xx(struct hfi_session_set_property_pkt *pkt,
pkt->shdr.hdr.size += sizeof(u32) + sizeof(*cu);
break;
}
+ case HFI_PROPERTY_PARAM_VENC_HDR10_PQ_SEI: {
+ struct hfi_hdr10_pq_sei *in = pdata, *hdr10 = prop_data;
+
+ memcpy(hdr10, in, sizeof(*hdr10));
+ pkt->shdr.hdr.size += sizeof(u32) + sizeof(*hdr10);
+ break;
+ }
+
case HFI_PROPERTY_CONFIG_VENC_MAX_BITRATE:
case HFI_PROPERTY_CONFIG_VDEC_POST_LOOP_DEBLOCKER:
case HFI_PROPERTY_PARAM_BUFFER_ALLOC_MODE:
diff --git a/drivers/media/platform/qcom/venus/hfi_helper.h b/drivers/media/platform/qcom/venus/hfi_helper.h
index 60ee2479f7a6..8e8dc6b5c855 100644
--- a/drivers/media/platform/qcom/venus/hfi_helper.h
+++ b/drivers/media/platform/qcom/venus/hfi_helper.h
@@ -506,6 +506,7 @@
#define HFI_PROPERTY_PARAM_VENC_VPX_ERROR_RESILIENCE_MODE 0x2005029
#define HFI_PROPERTY_PARAM_VENC_HIER_B_MAX_NUM_ENH_LAYER 0x200502c
#define HFI_PROPERTY_PARAM_VENC_HIER_P_HYBRID_MODE 0x200502f
+#define HFI_PROPERTY_PARAM_VENC_HDR10_PQ_SEI 0x2005036
/*
* HFI_PROPERTY_CONFIG_VENC_COMMON_START
@@ -791,6 +792,25 @@ struct hfi_ltr_mark {
u32 mark_frame;
};
+struct hfi_mastering_display_colour_sei_payload {
+ u32 display_primaries_x[3];
+ u32 display_primaries_y[3];
+ u32 white_point_x;
+ u32 white_point_y;
+ u32 max_display_mastering_luminance;
+ u32 min_display_mastering_luminance;
+};
+
+struct hfi_content_light_level_sei_payload {
+ u32 max_content_light;
+ u32 max_pic_average_light;
+};
+
+struct hfi_hdr10_pq_sei {
+ struct hfi_mastering_display_colour_sei_payload mastering;
+ struct hfi_content_light_level_sei_payload cll;
+};
+
struct hfi_framesize {
u32 buffer_type;
u32 width;
diff --git a/drivers/media/platform/qcom/venus/venc.c b/drivers/media/platform/qcom/venus/venc.c
index 1c61602c5de1..90d7f967cd54 100644
--- a/drivers/media/platform/qcom/venus/venc.c
+++ b/drivers/media/platform/qcom/venus/venc.c
@@ -588,6 +588,35 @@ static int venc_set_properties(struct venus_inst *inst)
return ret;
}
+ if (inst->fmt_cap->pixfmt == V4L2_PIX_FMT_HEVC) {
+ struct hfi_hdr10_pq_sei hdr10;
+ unsigned int c;
+
+ ptype = HFI_PROPERTY_PARAM_VENC_HDR10_PQ_SEI;
+
+ for (c = 0; c < 3; c++) {
+ hdr10.mastering.display_primaries_x[c] =
+ ctr->mastering.display_primaries_x[c];
+ hdr10.mastering.display_primaries_y[c] =
+ ctr->mastering.display_primaries_y[c];
+ }
+
+ hdr10.mastering.white_point_x = ctr->mastering.white_point_x;
+ hdr10.mastering.white_point_y = ctr->mastering.white_point_y;
+ hdr10.mastering.max_display_mastering_luminance =
+ ctr->mastering.max_display_mastering_luminance;
+ hdr10.mastering.min_display_mastering_luminance =
+ ctr->mastering.min_display_mastering_luminance;
+
+ hdr10.cll.max_content_light = ctr->cll.max_content_light_level;
+ hdr10.cll.max_pic_average_light =
+ ctr->cll.max_pic_average_light_level;
+
+ ret = hfi_session_set_property(inst, ptype, &hdr10);
+ if (ret)
+ return ret;
+ }
+
/* IDR periodicity, n:
* n = 0 - only the first I-frame is IDR frame
* n = 1 - all I-frames will be IDR frames
diff --git a/drivers/media/platform/qcom/venus/venc_ctrls.c b/drivers/media/platform/qcom/venus/venc_ctrls.c
index cf860e6446c0..2e62666e3ff6 100644
--- a/drivers/media/platform/qcom/venus/venc_ctrls.c
+++ b/drivers/media/platform/qcom/venus/venc_ctrls.c
@@ -208,6 +208,12 @@ static int venc_op_s_ctrl(struct v4l2_ctrl *ctrl)
case V4L2_CID_MPEG_VIDEO_FRAME_SKIP_MODE:
ctr->frame_skip_mode = ctrl->val;
break;
+ case V4L2_CID_COLORIMETRY_HDR10_CLL_INFO:
+ ctr->cll = *ctrl->p_new.p_hdr10_cll;
+ break;
+ case V4L2_CID_COLORIMETRY_HDR10_MASTERING_DISPLAY:
+ ctr->mastering = *ctrl->p_new.p_hdr10_mastering;
+ break;
default:
return -EINVAL;
}
@@ -223,7 +229,7 @@ int venc_ctrl_init(struct venus_inst *inst)
{
int ret;
- ret = v4l2_ctrl_handler_init(&inst->ctrl_handler, 33);
+ ret = v4l2_ctrl_handler_init(&inst->ctrl_handler, 35);
if (ret)
return ret;
@@ -374,6 +380,14 @@ int venc_ctrl_init(struct venus_inst *inst)
(1 << V4L2_MPEG_VIDEO_FRAME_SKIP_MODE_BUF_LIMIT)),
V4L2_MPEG_VIDEO_FRAME_SKIP_MODE_DISABLED);
+ v4l2_ctrl_new_std_compound(&inst->ctrl_handler, &venc_ctrl_ops,
+ V4L2_CID_COLORIMETRY_HDR10_CLL_INFO,
+ v4l2_ctrl_ptr_create(NULL));
+
+ v4l2_ctrl_new_std_compound(&inst->ctrl_handler, &venc_ctrl_ops,
+ V4L2_CID_COLORIMETRY_HDR10_MASTERING_DISPLAY,
+ v4l2_ctrl_ptr_create(NULL));
+
ret = inst->ctrl_handler.error;
if (ret)
goto err;
--
2.17.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH v3 1/3] v4l: Add HDR10 static metadata controls
2020-12-08 14:59 ` [PATCH v3 1/3] v4l: Add HDR10 static metadata controls Stanimir Varbanov
@ 2021-01-12 10:17 ` Hans Verkuil
0 siblings, 0 replies; 6+ messages in thread
From: Hans Verkuil @ 2021-01-12 10:17 UTC (permalink / raw)
To: Stanimir Varbanov, linux-media, linux-kernel, linux-arm-msm
Cc: Ezequiel Garcia, Nicolas Dufresne
On 08/12/2020 15:59, Stanimir Varbanov wrote:
> Here we introduce a new Colorimetry control class and add
> Content light level and Mastering display colour volume v4l2
> compound controls, relevant payload structures and validation.
>
> Signed-off-by: Stanimir Varbanov <stanimir.varbanov@linaro.org>
> ---
> .../media/videodev2.h.rst.exceptions | 2 +
> drivers/media/v4l2-core/v4l2-ctrls.c | 68 +++++++++++++++++++
> include/media/v4l2-ctrls.h | 4 ++
> include/uapi/linux/v4l2-controls.h | 35 ++++++++++
> include/uapi/linux/videodev2.h | 2 +
> 5 files changed, 111 insertions(+)
>
> diff --git a/Documentation/userspace-api/media/videodev2.h.rst.exceptions b/Documentation/userspace-api/media/videodev2.h.rst.exceptions
> index 0ed170c6e720..af4b8b87c5d7 100644
> --- a/Documentation/userspace-api/media/videodev2.h.rst.exceptions
> +++ b/Documentation/userspace-api/media/videodev2.h.rst.exceptions
> @@ -147,6 +147,8 @@ replace symbol V4L2_CTRL_TYPE_HEVC_PPS :c:type:`v4l2_ctrl_type`
> replace symbol V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS :c:type:`v4l2_ctrl_type`
> replace symbol V4L2_CTRL_TYPE_AREA :c:type:`v4l2_ctrl_type`
> replace symbol V4L2_CTRL_TYPE_FWHT_PARAMS :c:type:`v4l2_ctrl_type`
> +replace symbol V4L2_CTRL_TYPE_HDR10_CLL_INFO :c:type:`v4l2_ctrl_hdr10_cll_info`
> +replace symbol V4L2_CTRL_TYPE_HDR10_MASTERING_DISPLAY :c:type:`v4l2_ctrl_hdr10_mastering_display`
>
> # V4L2 capability defines
> replace define V4L2_CAP_VIDEO_CAPTURE device-capabilities
> diff --git a/drivers/media/v4l2-core/v4l2-ctrls.c b/drivers/media/v4l2-core/v4l2-ctrls.c
> index 5cbe0ffbf501..7bd6c3098f30 100644
> --- a/drivers/media/v4l2-core/v4l2-ctrls.c
> +++ b/drivers/media/v4l2-core/v4l2-ctrls.c
> @@ -1015,6 +1015,9 @@ const char *v4l2_ctrl_get_name(u32 id)
> case V4L2_CID_MPEG_VIDEO_HEVC_DECODE_MODE: return "HEVC Decode Mode";
> case V4L2_CID_MPEG_VIDEO_HEVC_START_CODE: return "HEVC Start Code";
>
> + case V4L2_CID_COLORIMETRY_HDR10_CLL_INFO: return "HDR10 Content Light Info";
> + case V4L2_CID_COLORIMETRY_HDR10_MASTERING_DISPLAY: return "HDR10 Mastering Display";
> +
> /* CAMERA controls */
> /* Keep the order of the 'case's the same as in v4l2-controls.h! */
> case V4L2_CID_CAMERA_CLASS: return "Camera Controls";
> @@ -1466,6 +1469,12 @@ void v4l2_ctrl_fill(u32 id, const char **name, enum v4l2_ctrl_type *type,
> case V4L2_CID_MPEG_VIDEO_HEVC_SLICE_PARAMS:
> *type = V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS;
> break;
> + case V4L2_CID_COLORIMETRY_HDR10_CLL_INFO:
> + *type = V4L2_CTRL_TYPE_HDR10_CLL_INFO;
> + break;
> + case V4L2_CID_COLORIMETRY_HDR10_MASTERING_DISPLAY:
> + *type = V4L2_CTRL_TYPE_HDR10_MASTERING_DISPLAY;
> + break;
> case V4L2_CID_UNIT_CELL_SIZE:
> *type = V4L2_CTRL_TYPE_AREA;
> *flags |= V4L2_CTRL_FLAG_READ_ONLY;
> @@ -1765,6 +1774,12 @@ static void std_log(const struct v4l2_ctrl *ctrl)
> case V4L2_CTRL_TYPE_FWHT_PARAMS:
> pr_cont("FWHT_PARAMS");
> break;
> + case V4L2_CTRL_TYPE_HDR10_CLL_INFO:
> + pr_cont("HDR10_CLL_INFO");
> + break;
> + case V4L2_CTRL_TYPE_HDR10_MASTERING_DISPLAY:
> + pr_cont("HDR10_MASTERING_DISPLAY");
> + break;
> default:
> pr_cont("unknown type %d", ctrl->type);
> break;
I'm missing support for the new V4L2_CID_COLORIMETRY_CLASS here.
Please split up this patch in two parts: the first adds the new class, the
second adds the new controls in that class.
Ditto for the documentation. I recommend that you do a grep for e.g.
V4L2_CID_DETECT_CLASS to see all the places where you need to add something
for this new class.
> @@ -1817,6 +1832,7 @@ static int std_validate_compound(const struct v4l2_ctrl *ctrl, u32 idx,
> struct v4l2_ctrl_hevc_sps *p_hevc_sps;
> struct v4l2_ctrl_hevc_pps *p_hevc_pps;
> struct v4l2_ctrl_hevc_slice_params *p_hevc_slice_params;
> + struct v4l2_ctrl_hdr10_mastering_display *p_hdr10_mastering;
> struct v4l2_area *area;
> void *p = ptr.p + idx * ctrl->elem_size;
> unsigned int i;
> @@ -2112,6 +2128,52 @@ static int std_validate_compound(const struct v4l2_ctrl *ctrl, u32 idx,
> zero_padding(*p_hevc_slice_params);
> break;
>
> + case V4L2_CTRL_TYPE_HDR10_CLL_INFO:
> + break;
> +
> + case V4L2_CTRL_TYPE_HDR10_MASTERING_DISPLAY:
> + p_hdr10_mastering = p;
> +
> + for (i = 0; i < 3; ++i) {
> + if (p_hdr10_mastering->display_primaries_x[i] <
> + V4L2_HDR10_MASTERING_PRIMARIES_X_LOW ||
> + p_hdr10_mastering->display_primaries_x[i] >
> + V4L2_HDR10_MASTERING_PRIMARIES_X_HIGH ||
> + p_hdr10_mastering->display_primaries_y[i] <
> + V4L2_HDR10_MASTERING_PRIMARIES_Y_LOW ||
> + p_hdr10_mastering->display_primaries_y[i] >
> + V4L2_HDR10_MASTERING_PRIMARIES_Y_HIGH)
> + return -EINVAL;
> + }
> +
> + if (p_hdr10_mastering->white_point_x <
> + V4L2_HDR10_MASTERING_WHITE_POINT_X_LOW ||
> + p_hdr10_mastering->white_point_x >
> + V4L2_HDR10_MASTERING_WHITE_POINT_X_HIGH ||
> + p_hdr10_mastering->white_point_y <
> + V4L2_HDR10_MASTERING_WHITE_POINT_Y_LOW ||
> + p_hdr10_mastering->white_point_y >
> + V4L2_HDR10_MASTERING_WHITE_POINT_Y_HIGH)
> + return -EINVAL;
> +
> + if (p_hdr10_mastering->max_display_mastering_luminance <
> + V4L2_HDR10_MASTERING_MAX_LUMA_LOW ||
> + p_hdr10_mastering->max_display_mastering_luminance >
> + V4L2_HDR10_MASTERING_MAX_LUMA_HIGH ||
> + p_hdr10_mastering->min_display_mastering_luminance <
> + V4L2_HDR10_MASTERING_MIN_LUMA_LOW ||
> + p_hdr10_mastering->min_display_mastering_luminance >
> + V4L2_HDR10_MASTERING_MIN_LUMA_HIGH)
> + return -EINVAL;
> +
> + if (p_hdr10_mastering->max_display_mastering_luminance ==
> + V4L2_HDR10_MASTERING_MAX_LUMA_LOW &&
> + p_hdr10_mastering->min_display_mastering_luminance ==
> + V4L2_HDR10_MASTERING_MIN_LUMA_HIGH)
> + return -EINVAL;
> +
> + break;
> +
> case V4L2_CTRL_TYPE_AREA:
> area = p;
> if (!area->width || !area->height)
> @@ -2804,6 +2866,12 @@ static struct v4l2_ctrl *v4l2_ctrl_new(struct v4l2_ctrl_handler *hdl,
> case V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS:
> elem_size = sizeof(struct v4l2_ctrl_hevc_slice_params);
> break;
> + case V4L2_CTRL_TYPE_HDR10_CLL_INFO:
> + elem_size = sizeof(struct v4l2_ctrl_hdr10_cll_info);
> + break;
> + case V4L2_CTRL_TYPE_HDR10_MASTERING_DISPLAY:
> + elem_size = sizeof(struct v4l2_ctrl_hdr10_mastering_display);
> + break;
> case V4L2_CTRL_TYPE_AREA:
> elem_size = sizeof(struct v4l2_area);
> break;
> diff --git a/include/media/v4l2-ctrls.h b/include/media/v4l2-ctrls.h
> index 167ca8c8424f..8308acc89b11 100644
> --- a/include/media/v4l2-ctrls.h
> +++ b/include/media/v4l2-ctrls.h
> @@ -54,6 +54,8 @@ struct video_device;
> * @p_hevc_sps: Pointer to an HEVC sequence parameter set structure.
> * @p_hevc_pps: Pointer to an HEVC picture parameter set structure.
> * @p_hevc_slice_params: Pointer to an HEVC slice parameters structure.
> + * @p_hdr10_cll: Pointer to an HDR10 Content Light Level structure.
> + * @p_hdr10_mastering : Pointer to an HDR10 Mastering Display structure.
> * @p_area: Pointer to an area.
> * @p: Pointer to a compound value.
> * @p_const: Pointer to a constant compound value.
> @@ -78,6 +80,8 @@ union v4l2_ctrl_ptr {
> struct v4l2_ctrl_hevc_sps *p_hevc_sps;
> struct v4l2_ctrl_hevc_pps *p_hevc_pps;
> struct v4l2_ctrl_hevc_slice_params *p_hevc_slice_params;
> + struct v4l2_ctrl_hdr10_cll_info *p_hdr10_cll;
> + struct v4l2_ctrl_hdr10_mastering_display *p_hdr10_mastering;
> struct v4l2_area *p_area;
> void *p;
> const void *p_const;
> diff --git a/include/uapi/linux/v4l2-controls.h b/include/uapi/linux/v4l2-controls.h
> index 823b214aac0c..8563f789cbe2 100644
> --- a/include/uapi/linux/v4l2-controls.h
> +++ b/include/uapi/linux/v4l2-controls.h
> @@ -66,6 +66,7 @@
> #define V4L2_CTRL_CLASS_RF_TUNER 0x00a20000 /* RF tuner controls */
> #define V4L2_CTRL_CLASS_DETECT 0x00a30000 /* Detection controls */
> #define V4L2_CTRL_CLASS_CODEC_STATELESS 0x00a40000 /* Stateless codecs controls */
> +#define V4L2_CTRL_CLASS_COLORIMETRY 0x00a50000 /* Colorimetry controls */
>
> /* User-class control IDs */
>
> @@ -1635,6 +1636,40 @@ struct v4l2_ctrl_fwht_params {
> __u32 quantization;
> };
>
> +#define V4L2_CID_COLORIMETRY_BASE (V4L2_CTRL_CLASS_COLORIMETRY | 0x900)
> +#define V4L2_CID_COLORIMETRY_CLASS (V4L2_CTRL_CLASS_COLORIMETRY | 1)
> +
> +#define V4L2_CID_COLORIMETRY_HDR10_CLL_INFO (V4L2_CID_COLORIMETRY_BASE + 0)
> +
> +struct v4l2_ctrl_hdr10_cll_info {
> + __u16 max_content_light_level;
> + __u16 max_pic_average_light_level;
> +};
> +
> +#define V4L2_CID_COLORIMETRY_HDR10_MASTERING_DISPLAY (V4L2_CID_COLORIMETRY_BASE + 1)
> +
> +#define V4L2_HDR10_MASTERING_PRIMARIES_X_LOW 5
> +#define V4L2_HDR10_MASTERING_PRIMARIES_X_HIGH 37000
> +#define V4L2_HDR10_MASTERING_PRIMARIES_Y_LOW 5
> +#define V4L2_HDR10_MASTERING_PRIMARIES_Y_HIGH 42000
> +#define V4L2_HDR10_MASTERING_WHITE_POINT_X_LOW 5
> +#define V4L2_HDR10_MASTERING_WHITE_POINT_X_HIGH 37000
> +#define V4L2_HDR10_MASTERING_WHITE_POINT_Y_LOW 5
> +#define V4L2_HDR10_MASTERING_WHITE_POINT_Y_HIGH 42000
> +#define V4L2_HDR10_MASTERING_MAX_LUMA_LOW 50000
> +#define V4L2_HDR10_MASTERING_MAX_LUMA_HIGH 100000000
> +#define V4L2_HDR10_MASTERING_MIN_LUMA_LOW 1
> +#define V4L2_HDR10_MASTERING_MIN_LUMA_HIGH 50000
> +
> +struct v4l2_ctrl_hdr10_mastering_display {
> + __u16 display_primaries_x[3];
> + __u16 display_primaries_y[3];
> + __u16 white_point_x;
> + __u16 white_point_y;
> + __u32 max_display_mastering_luminance;
> + __u32 min_display_mastering_luminance;
> +};
> +
> /* MPEG-compression definitions kept for backwards compatibility */
> #ifndef __KERNEL__
> #define V4L2_CTRL_CLASS_MPEG V4L2_CTRL_CLASS_CODEC
> diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
> index 79dbde3bcf8d..1bde498e36a0 100644
> --- a/include/uapi/linux/videodev2.h
> +++ b/include/uapi/linux/videodev2.h
> @@ -1792,6 +1792,8 @@ enum v4l2_ctrl_type {
> V4L2_CTRL_TYPE_H264_PRED_WEIGHTS = 0x0205,
>
> V4L2_CTRL_TYPE_FWHT_PARAMS = 0x0220,
> + V4L2_CTRL_TYPE_HDR10_CLL_INFO = 0x0221,
I'd change this to 0x0110 and move it up to after V4L2_CTRL_TYPE_AREA.
> + V4L2_CTRL_TYPE_HDR10_MASTERING_DISPLAY = 0x0222,
> };
>
> /* Used in the VIDIOC_QUERYCTRL ioctl for querying controls */
>
Regards,
Hans
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v3 2/3] docs: media: Document CLL and Mastering display
2020-12-08 14:59 ` [PATCH v3 2/3] docs: media: Document CLL and Mastering display Stanimir Varbanov
@ 2021-01-12 10:34 ` Hans Verkuil
0 siblings, 0 replies; 6+ messages in thread
From: Hans Verkuil @ 2021-01-12 10:34 UTC (permalink / raw)
To: Stanimir Varbanov, linux-media, linux-kernel, linux-arm-msm
Cc: Ezequiel Garcia, Nicolas Dufresne
On 08/12/2020 15:59, Stanimir Varbanov wrote:
> Document Content light level and Mastering display colour volume.
>
> Signed-off-by: Stanimir Varbanov <stanimir.varbanov@linaro.org>
> ---
> .../userspace-api/media/v4l/common.rst | 1 +
> .../media/v4l/ext-ctrls-colorimetry.rst | 88 +++++++++++++++++++
> 2 files changed, 89 insertions(+)
> create mode 100644 Documentation/userspace-api/media/v4l/ext-ctrls-colorimetry.rst
>
> diff --git a/Documentation/userspace-api/media/v4l/common.rst b/Documentation/userspace-api/media/v4l/common.rst
> index 8c263c5a85d8..ea0435182e44 100644
> --- a/Documentation/userspace-api/media/v4l/common.rst
> +++ b/Documentation/userspace-api/media/v4l/common.rst
> @@ -51,6 +51,7 @@ applicable to all devices.
> ext-ctrls-fm-tx
> ext-ctrls-fm-rx
> ext-ctrls-detect
> + ext-ctrls-colorimetry
> fourcc
> format
> planar-apis
> diff --git a/Documentation/userspace-api/media/v4l/ext-ctrls-colorimetry.rst b/Documentation/userspace-api/media/v4l/ext-ctrls-colorimetry.rst
> new file mode 100644
> index 000000000000..16d9ddadbab6
> --- /dev/null
> +++ b/Documentation/userspace-api/media/v4l/ext-ctrls-colorimetry.rst
> @@ -0,0 +1,88 @@
> +.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
> +
> +.. _colorimetry-controls:
> +
> +*****************************
> +Colorimetry Control Reference
> +*****************************
> +
> +Below are controls within the Colorimetry control class.
> +
> +Colorimetry Control IDs
> +-----------------------
> +
> +.. _colorimetry-control-id:
> +
> +``V4L2_CID_COLORIMETRY_CLASS (class)``
> + The Colorimetry class descriptor.
> +
> +``V4L2_CID_COLORIMETRY_HDR10_CLL_INFO (struct)``
> + The Content Light Level defines upper bounds for the nominal target
> + brightness light level of the pictures.
> +
> +.. c:type:: v4l2_ctrl_hdr10_cll_info
> +
> +.. cssclass:: longtable
> +
> +.. flat-table:: struct v4l2_ctrl_hdr10_cll_info
> + :header-rows: 0
> + :stub-columns: 0
> + :widths: 1 1 2
> +
> + * - __u16
> + - ``max_content_light_level``
> + - An upper bound on the maximum light level among all individual
An -> The
on -> for
> + samples for the pictures of coded video sequence, cd/m2. When
of -> of a
> + equal to 0 no such uppper bound is present.
uppper -> upper
> + * - __u16
> + - ``max_pic_average_light_level``
> + - An upper bound on the maximum average light level among the
An -> The
on -> for
> + samples for any individual picture of coded video sequence, cd/m2.
of -> of a
> + When equal to 0 no such uppper bound is present.
uppper -> upper
> +
> +``V4L2_CID_COLORIMETRY_HDR10_MASTERING_DISPLAY (struct)``
> + The mastering display defines the colour volume (the colour primaries,
> + white point and luminance range) of a display considered to be the
> + mastering display for current video content.
for -> for the
> +
> +.. c:type:: v4l2_ctrl_hdr10_mastering_display
> +
> +.. cssclass:: longtable
> +
> +.. flat-table:: struct v4l2_ctrl_hdr10_mastering_display
> + :header-rows: 0
> + :stub-columns: 0
> + :widths: 1 1 2
> +
> + * - __u16
> + - ``display_primaries_x[3]``
> + - Specifies the normalized x chromaticity coordinate of the colour
> + primary component c of the mastering display in increments of 0.00002.
> + For describing mastering display that use Red, Green and Blue colour
describing -> describing the
use -> uses
> + primaries, index value c equal to 0 correspond to Green primary, c
to Green -> to the Green
correspond -> corresponds
> + equal to 1 correspond to Blue primary and c equal to 2 correspond to
ditto
> + Red colour primary.
> + * - __u16
> + - ``display_primaries_y[3]``
> + - Specifies the normalized y chromaticity coordinate of the colour
> + primary component c of the mastering display in increments of 0.00002.
> + For describing mastering display that use Red, Green and Blue colour
> + primaries, index value c equal to 0 correspond to Green primary, c
> + equal to 1 correspond to Blue primary and c equal to 2 correspond to
> + Red colour primary.
ditto
> + * - __u16
> + - ``white_point_x``
> + - Specifies the normalized x chromaticity coordinate of the white
> + point of the mastering display in increments of 0.00002.
> + * - __u16
> + - ``white_point_y``
> + - Specifies the normalized y chromaticity coordinate of the white
> + point of the mastering display in increments of 0.00002.
> + * - __u32
> + - ``max_luminance``
> + - Specifies the nominal maximum display luminance of the mastering
> + display in units of 0.0001 cd/m2.
> + * - __u32
> + - ``min_luminance``
> + - specifies the nominal minimum display luminance of the mastering
> + display in units of 0.0001 cd/m2.
>
Regards,
Hans
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2021-01-12 10:35 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-12-08 14:59 [PATCH v3 0/3] HDR10 static metadata Stanimir Varbanov
2020-12-08 14:59 ` [PATCH v3 1/3] v4l: Add HDR10 static metadata controls Stanimir Varbanov
2021-01-12 10:17 ` Hans Verkuil
2020-12-08 14:59 ` [PATCH v3 2/3] docs: media: Document CLL and Mastering display Stanimir Varbanov
2021-01-12 10:34 ` Hans Verkuil
2020-12-08 14:59 ` [PATCH v3 3/3] venus: venc: Add support for CLL and Mastering display controls Stanimir Varbanov
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).