2022-04-07 20:25:27

by Benjamin Gaignard

[permalink] [raw]
Subject: [PATCH v5 00/17] Move HEVC stateless controls out of staging

This series aims to make HEVC uapi stable and usable for hardware
decoder. HEVC uapi is used by 2 mainlined drivers (Cedrus and Hantro)
and 2 out of the tree drivers (rkvdec and RPI).

version 5:
- Change __u16 pic_order_cnt[2] into __s32 pic_order_cnt_val in
hevc_dpb_entry structure
- Add defines for SEI pic_struct values (patch 4)
- Fix numbers of bits computation in cedrus_h265_skip_bits() parameters
- Fix num_short_term_ref_pic_sets and num_long_term_ref_pics_sps
documentation (patch 8)
- Rebased on v5-18-rc1

GStreamer H265 decoder plugin aligned with HEVC uAPI v5:
https://gitlab.freedesktop.org/benjamin.gaignard1/gstreamer/-/tree/HEVC_aligned_with_kernel_5.15

Version 4:
- Add num_entry_point_offsets field in struct v4l2_ctrl_hevc_slice_params
- Fix V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS name
- Initialize control V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS
- Fix space/tab issue in kernel-doc
- Add patch to change data_bit_offset definition
- Fix hantro-media SPDX license
- put controls under stateless section in v4l2-ctrls-defs.c

At the end fluster tests results on IMX8MQ is 77/147 for HEVC codec.

Benjamin Gaignard (14):
media: uapi: HEVC: Add missing fields in HEVC controls
media: uapi: HEVC: Rename HEVC stateless controls with STATELESS
prefix
media: uapi: HEVC: Change pic_order_cnt definition in
v4l2_hevc_dpb_entry
media: uapi: HEVC: Add SEI pic struct flags
media: uapi: HEVC: Add document uAPI structure
media: uapi: HEVC: Define V4L2_CID_STATELESS_HEVC_SLICE_PARAMS as a
dynamic array
media: uapi: Move parsed HEVC pixel format out of staging
media: uapi: Add V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS control
media: uapi: Move the HEVC stateless control type out of staging
media: controls: Log HEVC stateless control in .std_log
media: uapi: Create a dedicated header for Hantro control
media: uapi: HEVC: fix padding in v4l2 control structures
media: uapi: Change data_bit_offset definition
media: uapi: move HEVC stateless controls out of staging

Hans Verkuil (3):
videodev2.h: add V4L2_CTRL_FLAG_DYNAMIC_ARRAY
v4l2-ctrls: add support for dynamically allocated arrays.
vivid: add dynamic array test control

.../userspace-api/media/drivers/hantro.rst | 5 -
.../media/v4l/ext-ctrls-codec-stateless.rst | 882 ++++++++++++++++++
.../media/v4l/ext-ctrls-codec.rst | 780 ----------------
.../media/v4l/pixfmt-compressed.rst | 7 +-
.../media/v4l/vidioc-g-ext-ctrls.rst | 20 +
.../media/v4l/vidioc-queryctrl.rst | 8 +
.../media/videodev2.h.rst.exceptions | 5 +
.../media/test-drivers/vivid/vivid-ctrls.c | 15 +
drivers/media/v4l2-core/v4l2-ctrls-api.c | 103 +-
drivers/media/v4l2-core/v4l2-ctrls-core.c | 198 +++-
drivers/media/v4l2-core/v4l2-ctrls-defs.c | 37 +-
drivers/media/v4l2-core/v4l2-ctrls-priv.h | 3 +-
drivers/media/v4l2-core/v4l2-ctrls-request.c | 13 +-
drivers/staging/media/hantro/hantro_drv.c | 27 +-
.../staging/media/hantro/hantro_g2_hevc_dec.c | 4 +-
drivers/staging/media/hantro/hantro_hevc.c | 10 +-
drivers/staging/media/hantro/hantro_hw.h | 4 +-
drivers/staging/media/sunxi/cedrus/cedrus.c | 24 +-
.../staging/media/sunxi/cedrus/cedrus_dec.c | 10 +-
.../staging/media/sunxi/cedrus/cedrus_h265.c | 6 +-
include/media/hevc-ctrls.h | 250 -----
include/media/v4l2-ctrls.h | 48 +-
include/uapi/linux/hantro-media.h | 19 +
include/uapi/linux/v4l2-controls.h | 453 +++++++++
include/uapi/linux/videodev2.h | 13 +
25 files changed, 1767 insertions(+), 1177 deletions(-)
delete mode 100644 include/media/hevc-ctrls.h
create mode 100644 include/uapi/linux/hantro-media.h

--
2.32.0


2022-04-07 20:29:09

by Benjamin Gaignard

[permalink] [raw]
Subject: [PATCH v5 01/17] videodev2.h: add V4L2_CTRL_FLAG_DYNAMIC_ARRAY

From: Hans Verkuil <[email protected]>

Add a new flag that indicates that this control is a dynamically sized
array. Also document this flag.

Currently dynamically sized arrays are limited to one dimensional arrays,
but that might change in the future if there is a need for it.

The initial use-case of dynamic arrays are stateless codecs. A frame
can be divided in many slices, so you want to provide an array containing
slice information for each slice. Typically the number of slices is small,
but the standard allow for hundreds or thousands of slices. Dynamic arrays
are a good solution since sizing the array for the worst case would waste
substantial amounts of memory.

Signed-off-by: Hans Verkuil <[email protected]>
---
.../userspace-api/media/v4l/vidioc-queryctrl.rst | 8 ++++++++
include/uapi/linux/videodev2.h | 1 +
2 files changed, 9 insertions(+)

diff --git a/Documentation/userspace-api/media/v4l/vidioc-queryctrl.rst b/Documentation/userspace-api/media/v4l/vidioc-queryctrl.rst
index 88f630252d98..a20dfa2a933b 100644
--- a/Documentation/userspace-api/media/v4l/vidioc-queryctrl.rst
+++ b/Documentation/userspace-api/media/v4l/vidioc-queryctrl.rst
@@ -625,6 +625,14 @@ See also the examples in :ref:`control`.
``V4L2_CTRL_FLAG_GRABBED`` flag when buffers are allocated or
streaming is in progress since most drivers do not support changing
the format in that case.
+ * - ``V4L2_CTRL_FLAG_DYNAMIC_ARRAY``
+ - 0x0800
+ - This control is a dynamically sized 1-dimensional array. It
+ behaves the same as a regular array, except that the number
+ of elements as reported by the ``elems`` field is between 1 and
+ ``dims[0]``. So setting the control with a differently sized
+ array will change the ``elems`` field when the control is
+ queried afterwards.

Return Value
============
diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
index 3768a0a80830..8df13defde75 100644
--- a/include/uapi/linux/videodev2.h
+++ b/include/uapi/linux/videodev2.h
@@ -1886,6 +1886,7 @@ struct v4l2_querymenu {
#define V4L2_CTRL_FLAG_HAS_PAYLOAD 0x0100
#define V4L2_CTRL_FLAG_EXECUTE_ON_WRITE 0x0200
#define V4L2_CTRL_FLAG_MODIFY_LAYOUT 0x0400
+#define V4L2_CTRL_FLAG_DYNAMIC_ARRAY 0x0800

/* Query flags, to be ORed with the control ID */
#define V4L2_CTRL_FLAG_NEXT_CTRL 0x80000000
--
2.32.0

2022-04-07 20:36:53

by Benjamin Gaignard

[permalink] [raw]
Subject: [PATCH v5 09/17] media: uapi: HEVC: Define V4L2_CID_STATELESS_HEVC_SLICE_PARAMS as a dynamic array

Make explicit that V4L2_CID_STATELESS_HEVC_SLICE_PARAMS control is
a dynamic array control type.
Some drivers may be able to receive multiple slices in one control
to improve decoding performance.

Signed-off-by: Benjamin Gaignard <[email protected]>
---
Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst | 2 ++
include/media/hevc-ctrls.h | 3 +++
2 files changed, 5 insertions(+)

diff --git a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
index 7fcc6c2bac4c..1aaf3b84b584 100644
--- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
+++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
@@ -2964,6 +2964,8 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
These bitstream parameters are defined according to :ref:`hevc`.
They are described in section 7.4.7 "General slice segment header
semantics" of the specification.
+ This control is a dynamically sized 1-dimensional array,
+ V4L2_CTRL_FLAG_DYNAMIC_ARRAY flag must be set when using it.

.. c:type:: v4l2_ctrl_hevc_slice_params

diff --git a/include/media/hevc-ctrls.h b/include/media/hevc-ctrls.h
index 96a9b71d1def..28049e1a8a07 100644
--- a/include/media/hevc-ctrls.h
+++ b/include/media/hevc-ctrls.h
@@ -314,6 +314,9 @@ struct v4l2_hevc_pred_weight_table {
/**
* v4l2_ctrl_hevc_slice_params - HEVC slice parameters
*
+ * This control is a dynamically sized 1-dimensional array,
+ * V4L2_CTRL_FLAG_DYNAMIC_ARRAY flag must be set when using it.
+ *
* @bit_size: size (in bits) of the current slice data
* @data_bit_offset: offset (in bits) to the video data in the current slice data
* @nal_unit_type: specifies the coding type of the slice (B, P or I)
--
2.32.0

2022-04-07 20:40:12

by Benjamin Gaignard

[permalink] [raw]
Subject: [PATCH v5 11/17] media: uapi: Add V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS control

The number of 'entry point offset' could be very variable.
Rather than use a large static array define a v4l2 dynamic array
of U32 (V4L2_CTRL_TYPE_U32).
The number of entry point offsets is reported by the elems field
and in struct v4l2_ctrl_hevc_slice_params.num_entry_point_offsets
field.

Signed-off-by: Benjamin Gaignard <[email protected]>
---
.../userspace-api/media/v4l/ext-ctrls-codec.rst | 11 +++++++++++
drivers/media/v4l2-core/v4l2-ctrls-defs.c | 5 +++++
include/media/hevc-ctrls.h | 5 ++++-
3 files changed, 20 insertions(+), 1 deletion(-)

diff --git a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
index 1aaf3b84b584..a604dedce17c 100644
--- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
+++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
@@ -2988,6 +2988,9 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
* - __u32
- ``data_bit_offset``
- Offset (in bits) to the video data in the current slice data.
+ * - __u32
+ - ``num_entry_point_offsets``
+ - Specifies the number of entry point offset syntax elements in the slice header.
* - __u8
- ``nal_unit_type``
- Specifies the coding type of the slice (B, P or I).
@@ -3125,6 +3128,14 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -

\normalsize

+``V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS (integer)``
+ Specifies entry point offsets in bytes.
+ This control is a dynamically sized array. The number of entry point
+ offsets is reported by the ``elems`` field.
+ This bitstream parameter is defined according to :ref:`hevc`.
+ They are described in section 7.4.7.1 "General slice segment header
+ semantics" of the specification.
+
``V4L2_CID_STATELESS_HEVC_SCALING_MATRIX (struct)``
Specifies the HEVC scaling matrix parameters used for the scaling process
for transform coefficients.
diff --git a/drivers/media/v4l2-core/v4l2-ctrls-defs.c b/drivers/media/v4l2-core/v4l2-ctrls-defs.c
index 4b68cbe23309..48d385b776b1 100644
--- a/drivers/media/v4l2-core/v4l2-ctrls-defs.c
+++ b/drivers/media/v4l2-core/v4l2-ctrls-defs.c
@@ -1180,6 +1180,7 @@ const char *v4l2_ctrl_get_name(u32 id)
case V4L2_CID_STATELESS_HEVC_DECODE_PARAMS: return "HEVC Decode Parameters";
case V4L2_CID_STATELESS_HEVC_DECODE_MODE: return "HEVC Decode Mode";
case V4L2_CID_STATELESS_HEVC_START_CODE: return "HEVC Start Code";
+ case V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS: return "HEVC Entry Point Offsets";

/* Colorimetry controls */
/* Keep the order of the 'case's the same as in v4l2-controls.h! */
@@ -1508,6 +1509,10 @@ void v4l2_ctrl_fill(u32 id, const char **name, enum v4l2_ctrl_type *type,
case V4L2_CID_STATELESS_HEVC_DECODE_PARAMS:
*type = V4L2_CTRL_TYPE_HEVC_DECODE_PARAMS;
break;
+ case V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS:
+ *type = V4L2_CTRL_TYPE_U32;
+ *flags |= V4L2_CTRL_FLAG_DYNAMIC_ARRAY;
+ break;
case V4L2_CID_STATELESS_VP9_COMPRESSED_HDR:
*type = V4L2_CTRL_TYPE_VP9_COMPRESSED_HDR;
break;
diff --git a/include/media/hevc-ctrls.h b/include/media/hevc-ctrls.h
index 00abbf930235..97e049ccb966 100644
--- a/include/media/hevc-ctrls.h
+++ b/include/media/hevc-ctrls.h
@@ -20,6 +20,7 @@
#define V4L2_CID_STATELESS_HEVC_DECODE_PARAMS (V4L2_CID_CODEC_BASE + 1012)
#define V4L2_CID_STATELESS_HEVC_DECODE_MODE (V4L2_CID_CODEC_BASE + 1015)
#define V4L2_CID_STATELESS_HEVC_START_CODE (V4L2_CID_CODEC_BASE + 1016)
+#define V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS (V4L2_CID_CODEC_BASE + 1017)

/* enum v4l2_ctrl_type type values */
#define V4L2_CTRL_TYPE_HEVC_SPS 0x0120
@@ -316,6 +317,8 @@ struct v4l2_hevc_pred_weight_table {
*
* @bit_size: size (in bits) of the current slice data
* @data_bit_offset: offset (in bits) to the video data in the current slice data
+ * @num_entry_point_offsets: specifies the number of entry point offset syntax
+ * elements in the slice header.
* @nal_unit_type: specifies the coding type of the slice (B, P or I)
* @nuh_temporal_id_plus1: minus 1 specifies a temporal identifier for the NAL unit
* @slice_type: see V4L2_HEVC_SLICE_TYPE_{}
@@ -358,7 +361,7 @@ struct v4l2_hevc_pred_weight_table {
struct v4l2_ctrl_hevc_slice_params {
__u32 bit_size;
__u32 data_bit_offset;
-
+ __u32 num_entry_point_offsets;
/* ISO/IEC 23008-2, ITU-T Rec. H.265: NAL unit header */
__u8 nal_unit_type;
__u8 nuh_temporal_id_plus1;
--
2.32.0

2022-04-07 20:41:34

by Benjamin Gaignard

[permalink] [raw]
Subject: [PATCH v5 17/17] media: uapi: move HEVC stateless controls out of staging

HEVC uAPI is used by 2 mainline drivers (Hantro, Cedrus)
and at least 2 out-of-tree drivers (rkvdec, RPi).
The uAPI has reviewed so it is time to make it 'public' by
un-staging it.

Signed-off-by: Benjamin Gaignard <[email protected]>
---
.../media/v4l/ext-ctrls-codec-stateless.rst | 882 +++++++++++++++++
.../media/v4l/ext-ctrls-codec.rst | 888 ------------------
.../media/v4l/pixfmt-compressed.rst | 2 +-
.../media/v4l/vidioc-g-ext-ctrls.rst | 20 +
include/media/hevc-ctrls.h | 465 ---------
include/media/v4l2-ctrls.h | 6 -
include/uapi/linux/v4l2-controls.h | 448 +++++++++
include/uapi/linux/videodev2.h | 5 +
8 files changed, 1356 insertions(+), 1360 deletions(-)
delete mode 100644 include/media/hevc-ctrls.h

diff --git a/Documentation/userspace-api/media/v4l/ext-ctrls-codec-stateless.rst b/Documentation/userspace-api/media/v4l/ext-ctrls-codec-stateless.rst
index 6541e4c32b26..31560af6a797 100644
--- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec-stateless.rst
+++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec-stateless.rst
@@ -2042,3 +2042,885 @@ This structure contains all loop filter related parameters. See sections
- 0x2
- When set, the bitstream contains additional syntax elements that
specify which mode and reference frame deltas are to be updated.
+
+.. _v4l2-codec-stateless-hevc:
+
+``V4L2_CID_STATELESS_HEVC_SPS (struct)``
+ Specifies the Sequence Parameter Set fields (as extracted from the
+ bitstream) for the associated HEVC slice data.
+ These bitstream parameters are defined according to :ref:`hevc`.
+ They are described in section 7.4.3.2 "Sequence parameter set RBSP
+ semantics" of the specification.
+
+.. c:type:: v4l2_ctrl_hevc_sps
+
+.. raw:: latex
+
+ \small
+
+.. tabularcolumns:: |p{1.2cm}|p{9.2cm}|p{6.9cm}|
+
+.. cssclass:: longtable
+
+.. flat-table:: struct v4l2_ctrl_hevc_sps
+ :header-rows: 0
+ :stub-columns: 0
+ :widths: 1 1 2
+
+ * - __u8
+ - ``video_parameter_set_id``
+ - Specifies the value of the vps_video_parameter_set_id of the active VPS
+ as descibed in section "7.4.3.2.1 General sequence parameter set RBSP semantics"
+ of H.265 specifications.
+ * - __u8
+ - ``seq_parameter_set_id``
+ - Provides an identifier for the SPS for reference by other syntax elements
+ as descibed in section "7.4.3.2.1 General sequence parameter set RBSP semantics"
+ of H.265 specifications.
+ * - __u16
+ - ``pic_width_in_luma_samples``
+ - Specifies the width of each decoded picture in units of luma samples.
+ * - __u16
+ - ``pic_height_in_luma_samples``
+ - Specifies the height of each decoded picture in units of luma samples.
+ * - __u8
+ - ``bit_depth_luma_minus8``
+ - Specifies the bit depth of the samples of the luma array.
+ * - __u8
+ - ``bit_depth_chroma_minus8``
+ - Specifies the bit depth of the samples of the chroma arrays.
+ * - __u8
+ - ``log2_max_pic_order_cnt_lsb_minus4``
+ - Specifies the value of the variable MaxPicOrderCntLsb.
+ * - __u8
+ - ``sps_max_dec_pic_buffering_minus1``
+ - Plus 1 specifies the maximum required size of the decoded picture buffer for
+ the CVS
+ * - __u8
+ - ``sps_max_num_reorder_pics``
+ - Indicates the maximum allowed number of pictures.
+ * - __u8
+ - ``sps_max_latency_increase_plus1``
+ - Not equal to 0 is used to compute the value of SpsMaxLatencyPictures[i].
+ * - __u8
+ - ``log2_min_luma_coding_block_size_minus3``
+ - Plus 3 specifies the minimum luma coding block size.
+ * - __u8
+ - ``log2_diff_max_min_luma_coding_block_size``
+ - Specifies the difference between the maximum and minimum luma coding block size.
+ * - __u8
+ - ``log2_min_luma_transform_block_size_minus2``
+ - Plus 2 specifies the minimum luma transform block size.
+ * - __u8
+ - ``log2_diff_max_min_luma_transform_block_size``
+ - Specifies the difference between the maximum and minimum luma transform block size.
+ * - __u8
+ - ``max_transform_hierarchy_depth_inter``
+ - Specifies the maximum hierarchy depth for transform units of coding units coded
+ in inter prediction mode.
+ * - __u8
+ - ``max_transform_hierarchy_depth_intra``
+ - Specifies the maximum hierarchy depth for transform units of coding units coded in
+ intra prediction mode.
+ * - __u8
+ - ``pcm_sample_bit_depth_luma_minus1``
+ - Specifies the number of bits used to represent each of PCM sample values of the
+ luma component.
+ * - __u8
+ - ``pcm_sample_bit_depth_chroma_minus1``
+ - Specifies the number of bits used to represent each of PCM sample values of
+ the chroma components.
+ * - __u8
+ - ``log2_min_pcm_luma_coding_block_size_minus3``
+ - Plus 3 specifies the minimum size of coding blocks.
+ * - __u8
+ - ``log2_diff_max_min_pcm_luma_coding_block_size``
+ - Specifies the difference between the maximum and minimum size of coding blocks.
+ * - __u8
+ - ``num_short_term_ref_pic_sets``
+ - Specifies the number of st_ref_pic_set() syntax structures included in the SPS.
+ * - __u8
+ - ``num_long_term_ref_pics_sps``
+ - Specifies the number of candidate long-term reference pictures that are
+ specified in the SPS.
+ * - __u8
+ - ``chroma_format_idc``
+ - Specifies the chroma sampling.
+ * - __u8
+ - ``sps_max_sub_layers_minus1``
+ - plus 1 specifies the maximum number of temporal sub-layers.
+ * - __u64
+ - ``flags``
+ - See :ref:`Sequence Parameter Set Flags <hevc_sps_flags>`
+
+.. raw:: latex
+
+ \normalsize
+
+.. _hevc_sps_flags:
+
+``Sequence Parameter Set Flags``
+
+.. raw:: latex
+
+ \small
+
+.. cssclass:: longtable
+
+.. flat-table::
+ :header-rows: 0
+ :stub-columns: 0
+ :widths: 1 1 2
+
+ * - ``V4L2_HEVC_SPS_FLAG_SEPARATE_COLOUR_PLANE``
+ - 0x00000001
+ -
+ * - ``V4L2_HEVC_SPS_FLAG_SCALING_LIST_ENABLED``
+ - 0x00000002
+ -
+ * - ``V4L2_HEVC_SPS_FLAG_AMP_ENABLED``
+ - 0x00000004
+ -
+ * - ``V4L2_HEVC_SPS_FLAG_SAMPLE_ADAPTIVE_OFFSET``
+ - 0x00000008
+ -
+ * - ``V4L2_HEVC_SPS_FLAG_PCM_ENABLED``
+ - 0x00000010
+ -
+ * - ``V4L2_HEVC_SPS_FLAG_PCM_LOOP_FILTER_DISABLED``
+ - 0x00000020
+ -
+ * - ``V4L2_HEVC_SPS_FLAG_LONG_TERM_REF_PICS_PRESENT``
+ - 0x00000040
+ -
+ * - ``V4L2_HEVC_SPS_FLAG_SPS_TEMPORAL_MVP_ENABLED``
+ - 0x00000080
+ -
+ * - ``V4L2_HEVC_SPS_FLAG_STRONG_INTRA_SMOOTHING_ENABLED``
+ - 0x00000100
+ -
+
+.. raw:: latex
+
+ \normalsize
+
+``V4L2_CID_STATELESS_HEVC_PPS (struct)``
+ Specifies the Picture Parameter Set fields (as extracted from the
+ bitstream) for the associated HEVC slice data.
+ These bitstream parameters are defined according to :ref:`hevc`.
+ They are described in section 7.4.3.3 "Picture parameter set RBSP
+ semantics" of the specification.
+
+.. c:type:: v4l2_ctrl_hevc_pps
+
+.. tabularcolumns:: |p{1.2cm}|p{8.6cm}|p{7.5cm}|
+
+.. cssclass:: longtable
+
+.. flat-table:: struct v4l2_ctrl_hevc_pps
+ :header-rows: 0
+ :stub-columns: 0
+ :widths: 1 1 2
+
+ * - __u8
+ - ``pic_parameter_set_id``
+ - Identifies the PPS for reference by other syntax elements.
+ * - __u8
+ - ``num_extra_slice_header_bits``
+ - Specifies the number of extra slice header bits that are present
+ in the slice header RBSP for coded pictures referring to the PPS.
+ * - __u8
+ - ``num_ref_idx_l0_default_active_minus1``
+ - Specifies the inferred value of num_ref_idx_l0_active_minus1
+ * - __u8
+ - ``num_ref_idx_l1_default_active_minus1``
+ - Specifies the inferred value of num_ref_idx_l1_active_minus1
+ * - __s8
+ - ``init_qp_minus26``
+ - Plus 26 specifies the initial value of SliceQp Y for each slice
+ referring to the PPS.
+ * - __u8
+ - ``diff_cu_qp_delta_depth``
+ - Specifies the difference between the luma coding tree block size
+ and the minimum luma coding block size of coding units that
+ convey cu_qp_delta_abs and cu_qp_delta_sign_flag.
+ * - __s8
+ - ``pps_cb_qp_offset``
+ - Specify the offsets to the luma quantization parameter Cb.
+ * - __s8
+ - ``pps_cr_qp_offset``
+ - Specify the offsets to the luma quantization parameter Cr.
+ * - __u8
+ - ``num_tile_columns_minus1``
+ - Plus 1 specifies the number of tile columns partitioning the picture.
+ * - __u8
+ - ``num_tile_rows_minus1``
+ - Plus 1 specifies the number of tile rows partitioning the picture.
+ * - __u8
+ - ``column_width_minus1[20]``
+ - Plus 1 specifies the width of the i-th tile column in units of
+ coding tree blocks.
+ * - __u8
+ - ``row_height_minus1[22]``
+ - Plus 1 specifies the height of the i-th tile row in units of coding
+ tree blocks.
+ * - __s8
+ - ``pps_beta_offset_div2``
+ - Specify the default deblocking parameter offsets for beta divided by 2.
+ * - __s8
+ - ``pps_tc_offset_div2``
+ - Specify the default deblocking parameter offsets for tC divided by 2.
+ * - __u8
+ - ``log2_parallel_merge_level_minus2``
+ - Plus 2 specifies the value of the variable Log2ParMrgLevel.
+ * - __u8
+ - ``padding[4]``
+ - Applications and drivers must set this to zero.
+ * - __u64
+ - ``flags``
+ - See :ref:`Picture Parameter Set Flags <hevc_pps_flags>`
+
+.. _hevc_pps_flags:
+
+``Picture Parameter Set Flags``
+
+.. raw:: latex
+
+ \small
+
+.. flat-table::
+ :header-rows: 0
+ :stub-columns: 0
+ :widths: 1 1 2
+
+ * - ``V4L2_HEVC_PPS_FLAG_DEPENDENT_SLICE_SEGMENT_ENABLED``
+ - 0x00000001
+ -
+ * - ``V4L2_HEVC_PPS_FLAG_OUTPUT_FLAG_PRESENT``
+ - 0x00000002
+ -
+ * - ``V4L2_HEVC_PPS_FLAG_SIGN_DATA_HIDING_ENABLED``
+ - 0x00000004
+ -
+ * - ``V4L2_HEVC_PPS_FLAG_CABAC_INIT_PRESENT``
+ - 0x00000008
+ -
+ * - ``V4L2_HEVC_PPS_FLAG_CONSTRAINED_INTRA_PRED``
+ - 0x00000010
+ -
+ * - ``V4L2_HEVC_PPS_FLAG_TRANSFORM_SKIP_ENABLED``
+ - 0x00000020
+ -
+ * - ``V4L2_HEVC_PPS_FLAG_CU_QP_DELTA_ENABLED``
+ - 0x00000040
+ -
+ * - ``V4L2_HEVC_PPS_FLAG_PPS_SLICE_CHROMA_QP_OFFSETS_PRESENT``
+ - 0x00000080
+ -
+ * - ``V4L2_HEVC_PPS_FLAG_WEIGHTED_PRED``
+ - 0x00000100
+ -
+ * - ``V4L2_HEVC_PPS_FLAG_WEIGHTED_BIPRED``
+ - 0x00000200
+ -
+ * - ``V4L2_HEVC_PPS_FLAG_TRANSQUANT_BYPASS_ENABLED``
+ - 0x00000400
+ -
+ * - ``V4L2_HEVC_PPS_FLAG_TILES_ENABLED``
+ - 0x00000800
+ -
+ * - ``V4L2_HEVC_PPS_FLAG_ENTROPY_CODING_SYNC_ENABLED``
+ - 0x00001000
+ -
+ * - ``V4L2_HEVC_PPS_FLAG_LOOP_FILTER_ACROSS_TILES_ENABLED``
+ - 0x00002000
+ -
+ * - ``V4L2_HEVC_PPS_FLAG_PPS_LOOP_FILTER_ACROSS_SLICES_ENABLED``
+ - 0x00004000
+ -
+ * - ``V4L2_HEVC_PPS_FLAG_DEBLOCKING_FILTER_OVERRIDE_ENABLED``
+ - 0x00008000
+ -
+ * - ``V4L2_HEVC_PPS_FLAG_PPS_DISABLE_DEBLOCKING_FILTER``
+ - 0x00010000
+ -
+ * - ``V4L2_HEVC_PPS_FLAG_LISTS_MODIFICATION_PRESENT``
+ - 0x00020000
+ -
+ * - ``V4L2_HEVC_PPS_FLAG_SLICE_SEGMENT_HEADER_EXTENSION_PRESENT``
+ - 0x00040000
+ -
+ * - ``V4L2_HEVC_PPS_FLAG_DEBLOCKING_FILTER_CONTROL_PRESENT``
+ - 0x00080000
+ - Specifies the presence of deblocking filter control syntax elements in
+ the PPS
+ * - ``V4L2_HEVC_PPS_FLAG_UNIFORM_SPACING``
+ - 0x00100000
+ - Specifies that tile column boundaries and likewise tile row boundaries
+ are distributed uniformly across the picture
+
+.. raw:: latex
+
+ \normalsize
+
+``V4L2_CID_STATELESS_HEVC_SLICE_PARAMS (struct)``
+ Specifies various slice-specific parameters, especially from the NAL unit
+ header, general slice segment header and weighted prediction parameter
+ parts of the bitstream.
+ These bitstream parameters are defined according to :ref:`hevc`.
+ They are described in section 7.4.7 "General slice segment header
+ semantics" of the specification.
+ This control is a dynamically sized 1-dimensional array,
+ V4L2_CTRL_FLAG_DYNAMIC_ARRAY flag must be set when using it.
+
+.. c:type:: v4l2_ctrl_hevc_slice_params
+
+.. raw:: latex
+
+ \scriptsize
+
+.. tabularcolumns:: |p{5.4cm}|p{6.8cm}|p{5.1cm}|
+
+.. cssclass:: longtable
+
+.. flat-table:: struct v4l2_ctrl_hevc_slice_params
+ :header-rows: 0
+ :stub-columns: 0
+ :widths: 1 1 2
+
+ * - __u32
+ - ``bit_size``
+ - Size (in bits) of the current slice data.
+ * - __u32
+ - ``data_byte_offset``
+ - Offset (in byte) to the video data in the current slice data.
+ * - __u32
+ - ``num_entry_point_offsets``
+ - Specifies the number of entry point offset syntax elements in the slice header.
+ * - __u8
+ - ``nal_unit_type``
+ - Specifies the coding type of the slice (B, P or I).
+ * - __u8
+ - ``nuh_temporal_id_plus1``
+ - Minus 1 specifies a temporal identifier for the NAL unit.
+ * - __u8
+ - ``slice_type``
+ -
+ (V4L2_HEVC_SLICE_TYPE_I, V4L2_HEVC_SLICE_TYPE_P or
+ V4L2_HEVC_SLICE_TYPE_B).
+ * - __u8
+ - ``colour_plane_id``
+ - Specifies the colour plane associated with the current slice.
+ * - __u16
+ - ``slice_pic_order_cnt``
+ - Specifies the picture order count.
+ * - __u8
+ - ``num_ref_idx_l0_active_minus1``
+ - Specifies the maximum reference index for reference picture list 0
+ that may be used to decode the slice.
+ * - __u8
+ - ``num_ref_idx_l1_active_minus1``
+ - Specifies the maximum reference index for reference picture list 1
+ that may be used to decode the slice.
+ * - __u8
+ - ``collocated_ref_idx``
+ - Specifies the reference index of the collocated picture used for
+ temporal motion vector prediction.
+ * - __u8
+ - ``five_minus_max_num_merge_cand``
+ - Specifies the maximum number of merging motion vector prediction
+ candidates supported in the slice subtracted from 5.
+ * - __s8
+ - ``slice_qp_delta``
+ - Specifies the initial value of QpY to be used for the coding blocks in the slice.
+ * - __s8
+ - ``slice_cb_qp_offset``
+ - Specifies a difference to be added to the value of pps_cb_qp_offset.
+ * - __s8
+ - ``slice_cr_qp_offset``
+ - Specifies a difference to be added to the value of pps_cr_qp_offset.
+ * - __s8
+ - ``slice_act_y_qp_offset``
+ - screen content extension parameters
+ * - __s8
+ - ``slice_act_cb_qp_offset``
+ - screen content extension parameters
+ * - __s8
+ - ``slice_act_cr_qp_offset``
+ - screen content extension parameters
+ * - __s8
+ - ``slice_beta_offset_div2``
+ - Specify the deblocking parameter offsets for beta divided by 2.
+ * - __s8
+ - ``slice_tc_offset_div2``
+ - Specify the deblocking parameter offsets for tC divided by 2.
+ * - __u8
+ - ``pic_struct``
+ - Indicates whether a picture should be displayed as a frame or as one or more fields.
+ * - __u32
+ - ``slice_segment_addr``
+ - Specifies the address of the first coding tree block in the slice segment.
+ * - __u8
+ - ``ref_idx_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
+ - The list of L0 reference elements as indices in the DPB.
+ * - __u8
+ - ``ref_idx_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
+ - The list of L1 reference elements as indices in the DPB.
+ * - __u16
+ - ``short_term_ref_pic_set_size``
+ - Specifies the size of short-term reference pictures set included in the SPS.
+ * - __u16
+ - ``long_term_ref_pic_set_size``
+ - Specifies the size of long-term reference pictures set include in the SPS.
+ * - __u8
+ - ``padding``
+ - Applications and drivers must set this to zero.
+ * - struct :c:type:`v4l2_hevc_pred_weight_table`
+ - ``pred_weight_table``
+ - The prediction weight coefficients for inter-picture prediction.
+ * - __u64
+ - ``flags``
+ - See :ref:`Slice Parameters Flags <hevc_slice_params_flags>`
+
+.. raw:: latex
+
+ \normalsize
+
+.. _hevc_slice_params_flags:
+
+``Slice Parameters Flags``
+
+.. raw:: latex
+
+ \scriptsize
+
+.. flat-table::
+ :header-rows: 0
+ :stub-columns: 0
+ :widths: 1 1 2
+
+ * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_SAO_LUMA``
+ - 0x00000001
+ -
+ * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_SAO_CHROMA``
+ - 0x00000002
+ -
+ * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_TEMPORAL_MVP_ENABLED``
+ - 0x00000004
+ -
+ * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_MVD_L1_ZERO``
+ - 0x00000008
+ -
+ * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_CABAC_INIT``
+ - 0x00000010
+ -
+ * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_COLLOCATED_FROM_L0``
+ - 0x00000020
+ -
+ * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_USE_INTEGER_MV``
+ - 0x00000040
+ -
+ * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_DEBLOCKING_FILTER_DISABLED``
+ - 0x00000080
+ -
+ * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_LOOP_FILTER_ACROSS_SLICES_ENABLED``
+ - 0x00000100
+ -
+ * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_DEPENDENT_SLICE_SEGMENT``
+ - 0x00000200
+ -
+
+.. raw:: latex
+
+ \normalsize
+
+``V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS (integer)``
+ Specifies entry point offsets in bytes.
+ This control is a dynamically sized array. The number of entry point
+ offsets is reported by the ``elems`` field.
+ This bitstream parameter is defined according to :ref:`hevc`.
+ They are described in section 7.4.7.1 "General slice segment header
+ semantics" of the specification.
+
+``V4L2_CID_STATELESS_HEVC_SCALING_MATRIX (struct)``
+ Specifies the HEVC scaling matrix parameters used for the scaling process
+ for transform coefficients.
+ These matrix and parameters are defined according to :ref:`hevc`.
+ They are described in section 7.4.5 "Scaling list data semantics" of
+ the specification.
+
+.. c:type:: v4l2_ctrl_hevc_scaling_matrix
+
+.. raw:: latex
+
+ \scriptsize
+
+.. tabularcolumns:: |p{5.4cm}|p{6.8cm}|p{5.1cm}|
+
+.. cssclass:: longtable
+
+.. flat-table:: struct v4l2_ctrl_hevc_scaling_matrix
+ :header-rows: 0
+ :stub-columns: 0
+ :widths: 1 1 2
+
+ * - __u8
+ - ``scaling_list_4x4[6][16]``
+ - Scaling list is used for the scaling process for transform
+ coefficients. The values on each scaling list are expected
+ in raster scan order.
+ * - __u8
+ - ``scaling_list_8x8[6][64]``
+ - Scaling list is used for the scaling process for transform
+ coefficients. The values on each scaling list are expected
+ in raster scan order.
+ * - __u8
+ - ``scaling_list_16x16[6][64]``
+ - Scaling list is used for the scaling process for transform
+ coefficients. The values on each scaling list are expected
+ in raster scan order.
+ * - __u8
+ - ``scaling_list_32x32[2][64]``
+ - Scaling list is used for the scaling process for transform
+ coefficients. The values on each scaling list are expected
+ in raster scan order.
+ * - __u8
+ - ``scaling_list_dc_coef_16x16[6]``
+ - Scaling list is used for the scaling process for transform
+ coefficients. The values on each scaling list are expected
+ in raster scan order.
+ * - __u8
+ - ``scaling_list_dc_coef_32x32[2]``
+ - Scaling list is used for the scaling process for transform
+ coefficients. The values on each scaling list are expected
+ in raster scan order.
+
+.. raw:: latex
+
+ \normalsize
+
+.. c:type:: v4l2_hevc_dpb_entry
+
+.. raw:: latex
+
+ \small
+
+.. tabularcolumns:: |p{1.0cm}|p{4.2cm}|p{12.1cm}|
+
+.. flat-table:: struct v4l2_hevc_dpb_entry
+ :header-rows: 0
+ :stub-columns: 0
+ :widths: 1 1 2
+
+ * - __u64
+ - ``timestamp``
+ - Timestamp of the V4L2 capture buffer to use as reference, used
+ with B-coded and P-coded frames. The timestamp refers to the
+ ``timestamp`` field in struct :c:type:`v4l2_buffer`. Use the
+ :c:func:`v4l2_timeval_to_ns()` function to convert the struct
+ :c:type:`timeval` in struct :c:type:`v4l2_buffer` to a __u64.
+ * - __u8
+ - ``flags``
+ - Long term flag for the reference frame
+ (V4L2_HEVC_DPB_ENTRY_LONG_TERM_REFERENCE). The flag is set as
+ described in the ITU HEVC specification chapter "8.3.2 Decoding
+ process for reference picture set".
+ * - __u8
+ - ``field_pic``
+ - Whether the reference is a field picture or a frame.
+ See :ref:`HEVC dpb field pic Flags <hevc_dpb_field_pic_flags>`
+ * - __s32
+ - ``pic_order_cnt_val``
+ - The picture order count of the current picture.
+ * - __u8
+ - ``padding[2]``
+ - Applications and drivers must set this to zero.
+
+.. raw:: latex
+
+ \normalsize
+
+.. _hevc_dpb_field_pic_flags:
+
+``HEVC dpb field pic Flags``
+
+.. raw:: latex
+
+ \scriptsize
+
+.. flat-table::
+ :header-rows: 0
+ :stub-columns: 0
+ :widths: 1 1 2
+
+ * - ``V4L2_HEVC_SEI_PIC_STRUCT_FRAME``
+ - 0
+ - (progressive) Frame
+ * - ``V4L2_HEVC_SEI_PIC_STRUCT_TOP_FIELD``
+ - 1
+ - Top field
+ * - ``V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_FIELD``
+ - 2
+ - Bottom field
+ * - ``V4L2_HEVC_SEI_PIC_STRUCT_TOP_BOTTOM``
+ - 3
+ - Top field, bottom field, in that order
+ * - ``V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_TOP``
+ - 4
+ - Bottom field, top field, in that order
+ * - ``V4L2_HEVC_SEI_PIC_STRUCT_TOP_BOTTOM_TOP``
+ - 5
+ - Top field, bottom field, top field repeated, in that order
+ * - ``V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_TOP_BOTTOM``
+ - 6
+ - Bottom field, top field, bottom field repeated, in that order
+ * - ``V4L2_HEVC_SEI_PIC_STRUCT_FRAME_DOUBLING``
+ - 7
+ - Frame doubling
+ * - ``V4L2_HEVC_SEI_PIC_STRUCT_FRAME_TRIPLING``
+ - 8
+ - Frame tripling
+ * - ``V4L2_HEVC_SEI_PIC_STRUCT_TOP_PAIRED_PREVIOUS_BOTTOM``
+ - 9
+ - Top field paired with previous bottom field in output order
+ * - ``V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_PAIRED_PREVIOUS_TOP``
+ - 10
+ - Bottom field paired with previous top field in output order
+ * - ``V4L2_HEVC_SEI_PIC_STRUCT_TOP_PAIRED_NEXT_BOTTOM``
+ - 11
+ - Top field paired with next bottom field in output order
+ * - ``V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_PAIRED_NEXT_TOP``
+ - 12
+ - Bottom field paired with next top field in output order
+
+.. c:type:: v4l2_hevc_pred_weight_table
+
+.. raw:: latex
+
+ \footnotesize
+
+.. tabularcolumns:: |p{0.8cm}|p{10.6cm}|p{5.9cm}|
+
+.. flat-table:: struct v4l2_hevc_pred_weight_table
+ :header-rows: 0
+ :stub-columns: 0
+ :widths: 1 1 2
+
+ * - __s8
+ - ``delta_luma_weight_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
+ - The difference of the weighting factor applied to the luma
+ prediction value for list 0.
+ * - __s8
+ - ``luma_offset_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
+ - The additive offset applied to the luma prediction value for list 0.
+ * - __s8
+ - ``delta_chroma_weight_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]``
+ - The difference of the weighting factor applied to the chroma
+ prediction value for list 0.
+ * - __s8
+ - ``chroma_offset_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]``
+ - The difference of the additive offset applied to the chroma
+ prediction values for list 0.
+ * - __s8
+ - ``delta_luma_weight_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
+ - The difference of the weighting factor applied to the luma
+ prediction value for list 1.
+ * - __s8
+ - ``luma_offset_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
+ - The additive offset applied to the luma prediction value for list 1.
+ * - __s8
+ - ``delta_chroma_weight_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]``
+ - The difference of the weighting factor applied to the chroma
+ prediction value for list 1.
+ * - __s8
+ - ``chroma_offset_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]``
+ - The difference of the additive offset applied to the chroma
+ prediction values for list 1.
+ * - __u8
+ - ``luma_log2_weight_denom``
+ - The base 2 logarithm of the denominator for all luma weighting
+ factors.
+ * - __s8
+ - ``delta_chroma_log2_weight_denom``
+ - The difference of the base 2 logarithm of the denominator for
+ all chroma weighting factors.
+ * - __u8
+ - ``padding[6]``
+ - Applications and drivers must set this to zero.
+
+.. raw:: latex
+
+ \normalsize
+
+``V4L2_CID_STATELESS_HEVC_DECODE_MODE (enum)``
+ Specifies the decoding mode to use. Currently exposes slice-based and
+ frame-based decoding but new modes might be added later on.
+ This control is used as a modifier for V4L2_PIX_FMT_HEVC_SLICE
+ pixel format. Applications that support V4L2_PIX_FMT_HEVC_SLICE
+ are required to set this control in order to specify the decoding mode
+ that is expected for the buffer.
+ Drivers may expose a single or multiple decoding modes, depending
+ on what they can support.
+
+.. c:type:: v4l2_stateless_hevc_decode_mode
+
+.. raw:: latex
+
+ \small
+
+.. tabularcolumns:: |p{9.4cm}|p{0.6cm}|p{7.3cm}|
+
+.. flat-table::
+ :header-rows: 0
+ :stub-columns: 0
+ :widths: 1 1 2
+
+ * - ``V4L2_STATELESS_HEVC_DECODE_MODE_SLICE_BASED``
+ - 0
+ - Decoding is done at the slice granularity.
+ The OUTPUT buffer must contain a single slice.
+ * - ``V4L2_STATELESS_HEVC_DECODE_MODE_FRAME_BASED``
+ - 1
+ - Decoding is done at the frame granularity.
+ The OUTPUT buffer must contain all slices needed to decode the
+ frame.
+
+.. raw:: latex
+
+ \normalsize
+
+``V4L2_CID_STATELESS_HEVC_START_CODE (enum)``
+ Specifies the HEVC slice start code expected for each slice.
+ This control is used as a modifier for V4L2_PIX_FMT_HEVC_SLICE
+ pixel format. Applications that support V4L2_PIX_FMT_HEVC_SLICE
+ are required to set this control in order to specify the start code
+ that is expected for the buffer.
+ Drivers may expose a single or multiple start codes, depending
+ on what they can support.
+
+.. c:type:: v4l2_stateless_hevc_start_code
+
+.. tabularcolumns:: |p{9.2cm}|p{0.6cm}|p{7.5cm}|
+
+.. flat-table::
+ :header-rows: 0
+ :stub-columns: 0
+ :widths: 1 1 2
+
+ * - ``V4L2_STATELESS_HEVC_START_CODE_NONE``
+ - 0
+ - Selecting this value specifies that HEVC slices are passed
+ to the driver without any start code. The bitstream data should be
+ according to :ref:`hevc` 7.3.1.1 General NAL unit syntax, hence
+ contains emulation prevention bytes when required.
+ * - ``V4L2_STATELESS_HEVC_START_CODE_ANNEX_B``
+ - 1
+ - Selecting this value specifies that HEVC slices are expected
+ to be prefixed by Annex B start codes. According to :ref:`hevc`
+ valid start codes can be 3-bytes 0x000001 or 4-bytes 0x00000001.
+
+.. raw:: latex
+
+ \normalsize
+
+``V4L2_CID_MPEG_VIDEO_BASELAYER_PRIORITY_ID (integer)``
+ Specifies a priority identifier for the NAL unit, which will be applied to
+ the base layer. By default this value is set to 0 for the base layer,
+ and the next layer will have the priority ID assigned as 1, 2, 3 and so on.
+ The video encoder can't decide the priority id to be applied to a layer,
+ so this has to come from client.
+ This is applicable to H264 and valid Range is from 0 to 63.
+ Source Rec. ITU-T H.264 (06/2019); G.7.4.1.1, G.8.8.1.
+
+``V4L2_CID_MPEG_VIDEO_LTR_COUNT (integer)``
+ Specifies the maximum number of Long Term Reference (LTR) frames at any
+ given time that the encoder can keep.
+ This is applicable to the H264 and HEVC encoders.
+
+``V4L2_CID_MPEG_VIDEO_FRAME_LTR_INDEX (integer)``
+ After setting this control the frame that will be queued next
+ will be marked as a Long Term Reference (LTR) frame
+ and given this LTR index which ranges from 0 to LTR_COUNT-1.
+ This is applicable to the H264 and HEVC encoders.
+ Source Rec. ITU-T H.264 (06/2019); Table 7.9
+
+``V4L2_CID_MPEG_VIDEO_USE_LTR_FRAMES (bitmask)``
+ Specifies the Long Term Reference (LTR) frame(s) to be used for
+ encoding the next frame queued after setting this control.
+ This provides a bitmask which consists of bits [0, LTR_COUNT-1].
+ This is applicable to the H264 and HEVC encoders.
+
+``V4L2_CID_STATELESS_HEVC_DECODE_PARAMS (struct)``
+ Specifies various decode parameters, especially the references picture order
+ count (POC) for all the lists (short, long, before, current, after) and the
+ number of entries for each of them.
+ These parameters are defined according to :ref:`hevc`.
+ They are described in section 8.3 "Slice decoding process" of the
+ specification.
+
+.. c:type:: v4l2_ctrl_hevc_decode_params
+
+.. cssclass:: longtable
+
+.. flat-table:: struct v4l2_ctrl_hevc_decode_params
+ :header-rows: 0
+ :stub-columns: 0
+ :widths: 1 1 2
+
+ * - __s32
+ - ``pic_order_cnt_val``
+ - PicOrderCntVal as described in section 8.3.1 "Decoding process
+ for picture order count" of the specification.
+ * - __u8
+ - ``num_active_dpb_entries``
+ - The number of entries in ``dpb``.
+ * - __u8
+ - ``num_poc_st_curr_before``
+ - The number of reference pictures in the short-term set that come before
+ the current frame.
+ * - __u8
+ - ``num_poc_st_curr_after``
+ - The number of reference pictures in the short-term set that come after
+ the current frame.
+ * - __u8
+ - ``num_poc_lt_curr``
+ - The number of reference pictures in the long-term set.
+ * - __u8
+ - ``poc_st_curr_before[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
+ - PocStCurrBefore as described in section 8.3.2 "Decoding process for reference
+ picture set": provides the index of the short term before references in DPB array.
+ * - __u8
+ - ``poc_st_curr_after[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
+ - PocStCurrAfter as described in section 8.3.2 "Decoding process for reference
+ picture set": provides the index of the short term after references in DPB array.
+ * - __u8
+ - ``poc_lt_curr[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
+ - PocLtCurr as described in section 8.3.2 "Decoding process for reference
+ picture set": provides the index of the long term references in DPB array.
+ * - struct :c:type:`v4l2_hevc_dpb_entry`
+ - ``dpb[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
+ - The decoded picture buffer, for meta-data about reference frames.
+ * - __u64
+ - ``flags``
+ - See :ref:`Decode Parameters Flags <hevc_decode_params_flags>`
+
+.. _hevc_decode_params_flags:
+
+``Decode Parameters Flags``
+
+.. cssclass:: longtable
+
+.. flat-table::
+ :header-rows: 0
+ :stub-columns: 0
+ :widths: 1 1 2
+
+ * - ``V4L2_HEVC_DECODE_PARAM_FLAG_IRAP_PIC``
+ - 0x00000001
+ -
+ * - ``V4L2_HEVC_DECODE_PARAM_FLAG_IDR_PIC``
+ - 0x00000002
+ -
+ * - ``V4L2_HEVC_DECODE_PARAM_FLAG_NO_OUTPUT_OF_PRIOR``
+ - 0x00000004
+ -
diff --git a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
index 48b3f533bc17..25d6a79dd04b 100644
--- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
+++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
@@ -2636,891 +2636,3 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
Indicates whether to generate SPS and PPS at every IDR. Setting it to 0
disables generating SPS and PPS at every IDR. Setting it to one enables
generating SPS and PPS at every IDR.
-
-.. _v4l2-mpeg-hevc:
-
-``V4L2_CID_STATELESS_HEVC_SPS (struct)``
- Specifies the Sequence Parameter Set fields (as extracted from the
- bitstream) for the associated HEVC slice data.
- These bitstream parameters are defined according to :ref:`hevc`.
- They are described in section 7.4.3.2 "Sequence parameter set RBSP
- semantics" of the specification.
-
-.. c:type:: v4l2_ctrl_hevc_sps
-
-.. raw:: latex
-
- \small
-
-.. tabularcolumns:: |p{1.2cm}|p{9.2cm}|p{6.9cm}|
-
-.. cssclass:: longtable
-
-.. flat-table:: struct v4l2_ctrl_hevc_sps
- :header-rows: 0
- :stub-columns: 0
- :widths: 1 1 2
-
- * - __u8
- - ``video_parameter_set_id``
- - Specifies the value of the vps_video_parameter_set_id of the active VPS
- as descibed in section "7.4.3.2.1 General sequence parameter set RBSP semantics"
- of H.265 specifications.
- * - __u8
- - ``seq_parameter_set_id``
- - Provides an identifier for the SPS for reference by other syntax elements
- as descibed in section "7.4.3.2.1 General sequence parameter set RBSP semantics"
- of H.265 specifications.
- * - __u16
- - ``pic_width_in_luma_samples``
- - Specifies the width of each decoded picture in units of luma samples.
- * - __u16
- - ``pic_height_in_luma_samples``
- - Specifies the height of each decoded picture in units of luma samples.
- * - __u8
- - ``bit_depth_luma_minus8``
- - Specifies the bit depth of the samples of the luma array.
- * - __u8
- - ``bit_depth_chroma_minus8``
- - Specifies the bit depth of the samples of the chroma arrays.
- * - __u8
- - ``log2_max_pic_order_cnt_lsb_minus4``
- - Specifies the value of the variable MaxPicOrderCntLsb.
- * - __u8
- - ``sps_max_dec_pic_buffering_minus1``
- - Plus 1 specifies the maximum required size of the decoded picture buffer for
- the CVS
- * - __u8
- - ``sps_max_num_reorder_pics``
- - Indicates the maximum allowed number of pictures.
- * - __u8
- - ``sps_max_latency_increase_plus1``
- - Not equal to 0 is used to compute the value of SpsMaxLatencyPictures[i].
- * - __u8
- - ``log2_min_luma_coding_block_size_minus3``
- - Plus 3 specifies the minimum luma coding block size.
- * - __u8
- - ``log2_diff_max_min_luma_coding_block_size``
- - Specifies the difference between the maximum and minimum luma coding block size.
- * - __u8
- - ``log2_min_luma_transform_block_size_minus2``
- - Plus 2 specifies the minimum luma transform block size.
- * - __u8
- - ``log2_diff_max_min_luma_transform_block_size``
- - Specifies the difference between the maximum and minimum luma transform block size.
- * - __u8
- - ``max_transform_hierarchy_depth_inter``
- - Specifies the maximum hierarchy depth for transform units of coding units coded
- in inter prediction mode.
- * - __u8
- - ``max_transform_hierarchy_depth_intra``
- - Specifies the maximum hierarchy depth for transform units of coding units coded in
- intra prediction mode.
- * - __u8
- - ``pcm_sample_bit_depth_luma_minus1``
- - Specifies the number of bits used to represent each of PCM sample values of the
- luma component.
- * - __u8
- - ``pcm_sample_bit_depth_chroma_minus1``
- - Specifies the number of bits used to represent each of PCM sample values of
- the chroma components.
- * - __u8
- - ``log2_min_pcm_luma_coding_block_size_minus3``
- - Plus 3 specifies the minimum size of coding blocks.
- * - __u8
- - ``log2_diff_max_min_pcm_luma_coding_block_size``
- - Specifies the difference between the maximum and minimum size of coding blocks.
- * - __u8
- - ``num_short_term_ref_pic_sets``
- - Specifies the number of st_ref_pic_set() syntax structures included in the SPS.
- * - __u8
- - ``num_long_term_ref_pics_sps``
- - Specifies the number of candidate long-term reference pictures that are
- specified in the SPS.
- * - __u8
- - ``chroma_format_idc``
- - Specifies the chroma sampling.
- * - __u8
- - ``sps_max_sub_layers_minus1``
- - plus 1 specifies the maximum number of temporal sub-layers.
- * - __u64
- - ``flags``
- - See :ref:`Sequence Parameter Set Flags <hevc_sps_flags>`
-
-.. raw:: latex
-
- \normalsize
-
-.. _hevc_sps_flags:
-
-``Sequence Parameter Set Flags``
-
-.. raw:: latex
-
- \small
-
-.. cssclass:: longtable
-
-.. flat-table::
- :header-rows: 0
- :stub-columns: 0
- :widths: 1 1 2
-
- * - ``V4L2_HEVC_SPS_FLAG_SEPARATE_COLOUR_PLANE``
- - 0x00000001
- -
- * - ``V4L2_HEVC_SPS_FLAG_SCALING_LIST_ENABLED``
- - 0x00000002
- -
- * - ``V4L2_HEVC_SPS_FLAG_AMP_ENABLED``
- - 0x00000004
- -
- * - ``V4L2_HEVC_SPS_FLAG_SAMPLE_ADAPTIVE_OFFSET``
- - 0x00000008
- -
- * - ``V4L2_HEVC_SPS_FLAG_PCM_ENABLED``
- - 0x00000010
- -
- * - ``V4L2_HEVC_SPS_FLAG_PCM_LOOP_FILTER_DISABLED``
- - 0x00000020
- -
- * - ``V4L2_HEVC_SPS_FLAG_LONG_TERM_REF_PICS_PRESENT``
- - 0x00000040
- -
- * - ``V4L2_HEVC_SPS_FLAG_SPS_TEMPORAL_MVP_ENABLED``
- - 0x00000080
- -
- * - ``V4L2_HEVC_SPS_FLAG_STRONG_INTRA_SMOOTHING_ENABLED``
- - 0x00000100
- -
-
-.. raw:: latex
-
- \normalsize
-
-``V4L2_CID_STATELESS_HEVC_PPS (struct)``
- Specifies the Picture Parameter Set fields (as extracted from the
- bitstream) for the associated HEVC slice data.
- These bitstream parameters are defined according to :ref:`hevc`.
- They are described in section 7.4.3.3 "Picture parameter set RBSP
- semantics" of the specification.
-
-.. c:type:: v4l2_ctrl_hevc_pps
-
-.. tabularcolumns:: |p{1.2cm}|p{8.6cm}|p{7.5cm}|
-
-.. cssclass:: longtable
-
-.. flat-table:: struct v4l2_ctrl_hevc_pps
- :header-rows: 0
- :stub-columns: 0
- :widths: 1 1 2
-
- * - __u8
- - ``pic_parameter_set_id``
- - Identifies the PPS for reference by other syntax elements.
- * - __u8
- - ``num_extra_slice_header_bits``
- - Specifies the number of extra slice header bits that are present
- in the slice header RBSP for coded pictures referring to the PPS.
- * - __u8
- - ``num_ref_idx_l0_default_active_minus1``
- - Specifies the inferred value of num_ref_idx_l0_active_minus1
- * - __u8
- - ``num_ref_idx_l1_default_active_minus1``
- - Specifies the inferred value of num_ref_idx_l1_active_minus1
- * - __s8
- - ``init_qp_minus26``
- - Plus 26 specifies the initial value of SliceQp Y for each slice
- referring to the PPS.
- * - __u8
- - ``diff_cu_qp_delta_depth``
- - Specifies the difference between the luma coding tree block size
- and the minimum luma coding block size of coding units that
- convey cu_qp_delta_abs and cu_qp_delta_sign_flag.
- * - __s8
- - ``pps_cb_qp_offset``
- - Specify the offsets to the luma quantization parameter Cb.
- * - __s8
- - ``pps_cr_qp_offset``
- - Specify the offsets to the luma quantization parameter Cr.
- * - __u8
- - ``num_tile_columns_minus1``
- - Plus 1 specifies the number of tile columns partitioning the picture.
- * - __u8
- - ``num_tile_rows_minus1``
- - Plus 1 specifies the number of tile rows partitioning the picture.
- * - __u8
- - ``column_width_minus1[20]``
- - Plus 1 specifies the width of the i-th tile column in units of
- coding tree blocks.
- * - __u8
- - ``row_height_minus1[22]``
- - Plus 1 specifies the height of the i-th tile row in units of coding
- tree blocks.
- * - __s8
- - ``pps_beta_offset_div2``
- - Specify the default deblocking parameter offsets for beta divided by 2.
- * - __s8
- - ``pps_tc_offset_div2``
- - Specify the default deblocking parameter offsets for tC divided by 2.
- * - __u8
- - ``log2_parallel_merge_level_minus2``
- - Plus 2 specifies the value of the variable Log2ParMrgLevel.
- * - __u8
- - ``padding[4]``
- - Applications and drivers must set this to zero.
- * - __u64
- - ``flags``
- - See :ref:`Picture Parameter Set Flags <hevc_pps_flags>`
-
-.. _hevc_pps_flags:
-
-``Picture Parameter Set Flags``
-
-.. raw:: latex
-
- \small
-
-.. flat-table::
- :header-rows: 0
- :stub-columns: 0
- :widths: 1 1 2
-
- * - ``V4L2_HEVC_PPS_FLAG_DEPENDENT_SLICE_SEGMENT_ENABLED``
- - 0x00000001
- -
- * - ``V4L2_HEVC_PPS_FLAG_OUTPUT_FLAG_PRESENT``
- - 0x00000002
- -
- * - ``V4L2_HEVC_PPS_FLAG_SIGN_DATA_HIDING_ENABLED``
- - 0x00000004
- -
- * - ``V4L2_HEVC_PPS_FLAG_CABAC_INIT_PRESENT``
- - 0x00000008
- -
- * - ``V4L2_HEVC_PPS_FLAG_CONSTRAINED_INTRA_PRED``
- - 0x00000010
- -
- * - ``V4L2_HEVC_PPS_FLAG_TRANSFORM_SKIP_ENABLED``
- - 0x00000020
- -
- * - ``V4L2_HEVC_PPS_FLAG_CU_QP_DELTA_ENABLED``
- - 0x00000040
- -
- * - ``V4L2_HEVC_PPS_FLAG_PPS_SLICE_CHROMA_QP_OFFSETS_PRESENT``
- - 0x00000080
- -
- * - ``V4L2_HEVC_PPS_FLAG_WEIGHTED_PRED``
- - 0x00000100
- -
- * - ``V4L2_HEVC_PPS_FLAG_WEIGHTED_BIPRED``
- - 0x00000200
- -
- * - ``V4L2_HEVC_PPS_FLAG_TRANSQUANT_BYPASS_ENABLED``
- - 0x00000400
- -
- * - ``V4L2_HEVC_PPS_FLAG_TILES_ENABLED``
- - 0x00000800
- -
- * - ``V4L2_HEVC_PPS_FLAG_ENTROPY_CODING_SYNC_ENABLED``
- - 0x00001000
- -
- * - ``V4L2_HEVC_PPS_FLAG_LOOP_FILTER_ACROSS_TILES_ENABLED``
- - 0x00002000
- -
- * - ``V4L2_HEVC_PPS_FLAG_PPS_LOOP_FILTER_ACROSS_SLICES_ENABLED``
- - 0x00004000
- -
- * - ``V4L2_HEVC_PPS_FLAG_DEBLOCKING_FILTER_OVERRIDE_ENABLED``
- - 0x00008000
- -
- * - ``V4L2_HEVC_PPS_FLAG_PPS_DISABLE_DEBLOCKING_FILTER``
- - 0x00010000
- -
- * - ``V4L2_HEVC_PPS_FLAG_LISTS_MODIFICATION_PRESENT``
- - 0x00020000
- -
- * - ``V4L2_HEVC_PPS_FLAG_SLICE_SEGMENT_HEADER_EXTENSION_PRESENT``
- - 0x00040000
- -
- * - ``V4L2_HEVC_PPS_FLAG_DEBLOCKING_FILTER_CONTROL_PRESENT``
- - 0x00080000
- - Specifies the presence of deblocking filter control syntax elements in
- the PPS
- * - ``V4L2_HEVC_PPS_FLAG_UNIFORM_SPACING``
- - 0x00100000
- - Specifies that tile column boundaries and likewise tile row boundaries
- are distributed uniformly across the picture
-
-.. raw:: latex
-
- \normalsize
-
-``V4L2_CID_STATELESS_HEVC_SLICE_PARAMS (struct)``
- Specifies various slice-specific parameters, especially from the NAL unit
- header, general slice segment header and weighted prediction parameter
- parts of the bitstream.
- These bitstream parameters are defined according to :ref:`hevc`.
- They are described in section 7.4.7 "General slice segment header
- semantics" of the specification.
- This control is a dynamically sized 1-dimensional array,
- V4L2_CTRL_FLAG_DYNAMIC_ARRAY flag must be set when using it.
-
-.. c:type:: v4l2_ctrl_hevc_slice_params
-
-.. raw:: latex
-
- \scriptsize
-
-.. tabularcolumns:: |p{5.4cm}|p{6.8cm}|p{5.1cm}|
-
-.. cssclass:: longtable
-
-.. flat-table:: struct v4l2_ctrl_hevc_slice_params
- :header-rows: 0
- :stub-columns: 0
- :widths: 1 1 2
-
- * - __u32
- - ``bit_size``
- - Size (in bits) of the current slice data.
- * - __u32
- - ``data_byte_offset``
- - Offset (in bytes) to the video data in the current slice data.
- * - __u32
- - ``num_entry_point_offsets``
- - Specifies the number of entry point offset syntax elements in the slice header.
- * - __u8
- - ``nal_unit_type``
- - Specifies the coding type of the slice (B, P or I).
- * - __u8
- - ``nuh_temporal_id_plus1``
- - Minus 1 specifies a temporal identifier for the NAL unit.
- * - __u8
- - ``slice_type``
- -
- (V4L2_HEVC_SLICE_TYPE_I, V4L2_HEVC_SLICE_TYPE_P or
- V4L2_HEVC_SLICE_TYPE_B).
- * - __u8
- - ``colour_plane_id``
- - Specifies the colour plane associated with the current slice.
- * - __u16
- - ``slice_pic_order_cnt``
- - Specifies the picture order count.
- * - __u8
- - ``num_ref_idx_l0_active_minus1``
- - Specifies the maximum reference index for reference picture list 0
- that may be used to decode the slice.
- * - __u8
- - ``num_ref_idx_l1_active_minus1``
- - Specifies the maximum reference index for reference picture list 1
- that may be used to decode the slice.
- * - __u8
- - ``collocated_ref_idx``
- - Specifies the reference index of the collocated picture used for
- temporal motion vector prediction.
- * - __u8
- - ``five_minus_max_num_merge_cand``
- - Specifies the maximum number of merging motion vector prediction
- candidates supported in the slice subtracted from 5.
- * - __s8
- - ``slice_qp_delta``
- - Specifies the initial value of QpY to be used for the coding blocks in the slice.
- * - __s8
- - ``slice_cb_qp_offset``
- - Specifies a difference to be added to the value of pps_cb_qp_offset.
- * - __s8
- - ``slice_cr_qp_offset``
- - Specifies a difference to be added to the value of pps_cr_qp_offset.
- * - __s8
- - ``slice_act_y_qp_offset``
- - screen content extension parameters
- * - __s8
- - ``slice_act_cb_qp_offset``
- - screen content extension parameters
- * - __s8
- - ``slice_act_cr_qp_offset``
- - screen content extension parameters
- * - __s8
- - ``slice_beta_offset_div2``
- - Specify the deblocking parameter offsets for beta divided by 2.
- * - __s8
- - ``slice_tc_offset_div2``
- - Specify the deblocking parameter offsets for tC divided by 2.
- * - __u8
- - ``pic_struct``
- - Indicates whether a picture should be displayed as a frame or as one or more fields.
- * - __u32
- - ``slice_segment_addr``
- - Specifies the address of the first coding tree block in the slice segment.
- * - __u8
- - ``ref_idx_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
- - The list of L0 reference elements as indices in the DPB.
- * - __u8
- - ``ref_idx_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
- - The list of L1 reference elements as indices in the DPB.
- * - __u16
- - ``short_term_ref_pic_set_size``
- - Specifies the size of short-term reference pictures set included in the SPS.
- * - __u16
- - ``long_term_ref_pic_set_size``
- - Specifies the size of long-term reference pictures set include in the SPS.
- * - __u8
- - ``padding``
- - Applications and drivers must set this to zero.
- * - struct :c:type:`v4l2_hevc_pred_weight_table`
- - ``pred_weight_table``
- - The prediction weight coefficients for inter-picture prediction.
- * - __u64
- - ``flags``
- - See :ref:`Slice Parameters Flags <hevc_slice_params_flags>`
-
-.. raw:: latex
-
- \normalsize
-
-.. _hevc_slice_params_flags:
-
-``Slice Parameters Flags``
-
-.. raw:: latex
-
- \scriptsize
-
-.. flat-table::
- :header-rows: 0
- :stub-columns: 0
- :widths: 1 1 2
-
- * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_SAO_LUMA``
- - 0x00000001
- -
- * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_SAO_CHROMA``
- - 0x00000002
- -
- * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_TEMPORAL_MVP_ENABLED``
- - 0x00000004
- -
- * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_MVD_L1_ZERO``
- - 0x00000008
- -
- * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_CABAC_INIT``
- - 0x00000010
- -
- * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_COLLOCATED_FROM_L0``
- - 0x00000020
- -
- * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_USE_INTEGER_MV``
- - 0x00000040
- -
- * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_DEBLOCKING_FILTER_DISABLED``
- - 0x00000080
- -
- * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_LOOP_FILTER_ACROSS_SLICES_ENABLED``
- - 0x00000100
- -
- * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_DEPENDENT_SLICE_SEGMENT``
- - 0x00000200
- -
-
-.. raw:: latex
-
- \normalsize
-
-``V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS (integer)``
- Specifies entry point offsets in bytes.
- This control is a dynamically sized array. The number of entry point
- offsets is reported by the ``elems`` field.
- This bitstream parameter is defined according to :ref:`hevc`.
- They are described in section 7.4.7.1 "General slice segment header
- semantics" of the specification.
-
-``V4L2_CID_STATELESS_HEVC_SCALING_MATRIX (struct)``
- Specifies the HEVC scaling matrix parameters used for the scaling process
- for transform coefficients.
- These matrix and parameters are defined according to :ref:`hevc`.
- They are described in section 7.4.5 "Scaling list data semantics" of
- the specification.
-
-.. c:type:: v4l2_ctrl_hevc_scaling_matrix
-
-.. raw:: latex
-
- \scriptsize
-
-.. tabularcolumns:: |p{5.4cm}|p{6.8cm}|p{5.1cm}|
-
-.. cssclass:: longtable
-
-.. flat-table:: struct v4l2_ctrl_hevc_scaling_matrix
- :header-rows: 0
- :stub-columns: 0
- :widths: 1 1 2
-
- * - __u8
- - ``scaling_list_4x4[6][16]``
- - Scaling list is used for the scaling process for transform
- coefficients. The values on each scaling list are expected
- in raster scan order.
- * - __u8
- - ``scaling_list_8x8[6][64]``
- - Scaling list is used for the scaling process for transform
- coefficients. The values on each scaling list are expected
- in raster scan order.
- * - __u8
- - ``scaling_list_16x16[6][64]``
- - Scaling list is used for the scaling process for transform
- coefficients. The values on each scaling list are expected
- in raster scan order.
- * - __u8
- - ``scaling_list_32x32[2][64]``
- - Scaling list is used for the scaling process for transform
- coefficients. The values on each scaling list are expected
- in raster scan order.
- * - __u8
- - ``scaling_list_dc_coef_16x16[6]``
- - Scaling list is used for the scaling process for transform
- coefficients. The values on each scaling list are expected
- in raster scan order.
- * - __u8
- - ``scaling_list_dc_coef_32x32[2]``
- - Scaling list is used for the scaling process for transform
- coefficients. The values on each scaling list are expected
- in raster scan order.
-
-.. raw:: latex
-
- \normalsize
-
-.. c:type:: v4l2_hevc_dpb_entry
-
-.. raw:: latex
-
- \small
-
-.. tabularcolumns:: |p{1.0cm}|p{4.2cm}|p{12.1cm}|
-
-.. flat-table:: struct v4l2_hevc_dpb_entry
- :header-rows: 0
- :stub-columns: 0
- :widths: 1 1 2
-
- * - __u64
- - ``timestamp``
- - Timestamp of the V4L2 capture buffer to use as reference, used
- with B-coded and P-coded frames. The timestamp refers to the
- ``timestamp`` field in struct :c:type:`v4l2_buffer`. Use the
- :c:func:`v4l2_timeval_to_ns()` function to convert the struct
- :c:type:`timeval` in struct :c:type:`v4l2_buffer` to a __u64.
- * - __u8
- - ``flags``
- - Long term flag for the reference frame
- (V4L2_HEVC_DPB_ENTRY_LONG_TERM_REFERENCE). The flag is set as
- described in the ITU HEVC specification chapter "8.3.2 Decoding
- process for reference picture set".
- * - __u8
- - ``field_pic``
- - Whether the reference is a field picture or a frame.
- See :ref:`HEVC dpb field pic Flags <hevc_dpb_field_pic_flags>`
- * - __s32
- - ``pic_order_cnt_val``
- - The picture order count of the current picture.
- * - __u8
- - ``padding[2]``
- - Applications and drivers must set this to zero.
-
-.. raw:: latex
-
- \normalsize
-
-.. _hevc_dpb_field_pic_flags:
-
-``HEVC dpb field pic Flags``
-
-.. raw:: latex
-
- \scriptsize
-
-.. flat-table::
- :header-rows: 0
- :stub-columns: 0
- :widths: 1 1 2
-
- * - ``V4L2_HEVC_SEI_PIC_STRUCT_FRAME``
- - 0
- - (progressive) Frame
- * - ``V4L2_HEVC_SEI_PIC_STRUCT_TOP_FIELD``
- - 1
- - Top field
- * - ``V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_FIELD``
- - 2
- - Bottom field
- * - ``V4L2_HEVC_SEI_PIC_STRUCT_TOP_BOTTOM``
- - 3
- - Top field, bottom field, in that order
- * - ``V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_TOP``
- - 4
- - Bottom field, top field, in that order
- * - ``V4L2_HEVC_SEI_PIC_STRUCT_TOP_BOTTOM_TOP``
- - 5
- - Top field, bottom field, top field repeated, in that order
- * - ``V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_TOP_BOTTOM``
- - 6
- - Bottom field, top field, bottom field repeated, in that order
- * - ``V4L2_HEVC_SEI_PIC_STRUCT_FRAME_DOUBLING``
- - 7
- - Frame doubling
- * - ``V4L2_HEVC_SEI_PIC_STRUCT_FRAME_TRIPLING``
- - 8
- - Frame tripling
- * - ``V4L2_HEVC_SEI_PIC_STRUCT_TOP_PAIRED_PREVIOUS_BOTTOM``
- - 9
- - Top field paired with previous bottom field in output order
- * - ``V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_PAIRED_PREVIOUS_TOP``
- - 10
- - Bottom field paired with previous top field in output order
- * - ``V4L2_HEVC_SEI_PIC_STRUCT_TOP_PAIRED_NEXT_BOTTOM``
- - 11
- - Top field paired with next bottom field in output order
- * - ``V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_PAIRED_NEXT_TOP``
- - 12
- - Bottom field paired with next top field in output order
-
-.. c:type:: v4l2_hevc_pred_weight_table
-
-.. raw:: latex
-
- \footnotesize
-
-.. tabularcolumns:: |p{0.8cm}|p{10.6cm}|p{5.9cm}|
-
-.. flat-table:: struct v4l2_hevc_pred_weight_table
- :header-rows: 0
- :stub-columns: 0
- :widths: 1 1 2
-
- * - __s8
- - ``delta_luma_weight_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
- - The difference of the weighting factor applied to the luma
- prediction value for list 0.
- * - __s8
- - ``luma_offset_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
- - The additive offset applied to the luma prediction value for list 0.
- * - __s8
- - ``delta_chroma_weight_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]``
- - The difference of the weighting factor applied to the chroma
- prediction value for list 0.
- * - __s8
- - ``chroma_offset_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]``
- - The difference of the additive offset applied to the chroma
- prediction values for list 0.
- * - __s8
- - ``delta_luma_weight_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
- - The difference of the weighting factor applied to the luma
- prediction value for list 1.
- * - __s8
- - ``luma_offset_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
- - The additive offset applied to the luma prediction value for list 1.
- * - __s8
- - ``delta_chroma_weight_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]``
- - The difference of the weighting factor applied to the chroma
- prediction value for list 1.
- * - __s8
- - ``chroma_offset_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]``
- - The difference of the additive offset applied to the chroma
- prediction values for list 1.
- * - __u8
- - ``luma_log2_weight_denom``
- - The base 2 logarithm of the denominator for all luma weighting
- factors.
- * - __s8
- - ``delta_chroma_log2_weight_denom``
- - The difference of the base 2 logarithm of the denominator for
- all chroma weighting factors.
- * - __u8
- - ``padding[6]``
- - Applications and drivers must set this to zero.
-
-.. raw:: latex
-
- \normalsize
-
-``V4L2_CID_STATELESS_HEVC_DECODE_MODE (enum)``
- Specifies the decoding mode to use. Currently exposes slice-based and
- frame-based decoding but new modes might be added later on.
- This control is used as a modifier for V4L2_PIX_FMT_HEVC_SLICE
- pixel format. Applications that support V4L2_PIX_FMT_HEVC_SLICE
- are required to set this control in order to specify the decoding mode
- that is expected for the buffer.
- Drivers may expose a single or multiple decoding modes, depending
- on what they can support.
-
- .. note::
-
- This menu control is not yet part of the public kernel API and
- it is expected to change.
-
-.. c:type:: v4l2_stateless_hevc_decode_mode
-
-.. raw:: latex
-
- \small
-
-.. tabularcolumns:: |p{9.4cm}|p{0.6cm}|p{7.3cm}|
-
-.. flat-table::
- :header-rows: 0
- :stub-columns: 0
- :widths: 1 1 2
-
- * - ``V4L2_STATELESS_HEVC_DECODE_MODE_SLICE_BASED``
- - 0
- - Decoding is done at the slice granularity.
- The OUTPUT buffer must contain a single slice.
- * - ``V4L2_STATELESS_HEVC_DECODE_MODE_FRAME_BASED``
- - 1
- - Decoding is done at the frame granularity.
- The OUTPUT buffer must contain all slices needed to decode the
- frame. The OUTPUT buffer must also contain both fields.
-
-.. raw:: latex
-
- \normalsize
-
-``V4L2_CID_STATELESS_HEVC_START_CODE (enum)``
- Specifies the HEVC slice start code expected for each slice.
- This control is used as a modifier for V4L2_PIX_FMT_HEVC_SLICE
- pixel format. Applications that support V4L2_PIX_FMT_HEVC_SLICE
- are required to set this control in order to specify the start code
- that is expected for the buffer.
- Drivers may expose a single or multiple start codes, depending
- on what they can support.
-
- .. note::
-
- This menu control is not yet part of the public kernel API and
- it is expected to change.
-
-.. c:type:: v4l2_stateless_hevc_start_code
-
-.. tabularcolumns:: |p{9.2cm}|p{0.6cm}|p{7.5cm}|
-
-.. flat-table::
- :header-rows: 0
- :stub-columns: 0
- :widths: 1 1 2
-
- * - ``V4L2_STATELESS_HEVC_START_CODE_NONE``
- - 0
- - Selecting this value specifies that HEVC slices are passed
- to the driver without any start code. The bitstream data should be
- according to :ref:`hevc` 7.3.1.1 General NAL unit syntax, hence
- contains emulation prevention bytes when required.
- * - ``V4L2_STATELESS_HEVC_START_CODE_ANNEX_B``
- - 1
- - Selecting this value specifies that HEVC slices are expected
- to be prefixed by Annex B start codes. According to :ref:`hevc`
- valid start codes can be 3-bytes 0x000001 or 4-bytes 0x00000001.
-
-``V4L2_CID_MPEG_VIDEO_BASELAYER_PRIORITY_ID (integer)``
- Specifies a priority identifier for the NAL unit, which will be applied to
- the base layer. By default this value is set to 0 for the base layer,
- and the next layer will have the priority ID assigned as 1, 2, 3 and so on.
- The video encoder can't decide the priority id to be applied to a layer,
- so this has to come from client.
- This is applicable to H264 and valid Range is from 0 to 63.
- Source Rec. ITU-T H.264 (06/2019); G.7.4.1.1, G.8.8.1.
-
-``V4L2_CID_MPEG_VIDEO_LTR_COUNT (integer)``
- Specifies the maximum number of Long Term Reference (LTR) frames at any
- given time that the encoder can keep.
- This is applicable to the H264 and HEVC encoders.
-
-``V4L2_CID_MPEG_VIDEO_FRAME_LTR_INDEX (integer)``
- After setting this control the frame that will be queued next
- will be marked as a Long Term Reference (LTR) frame
- and given this LTR index which ranges from 0 to LTR_COUNT-1.
- This is applicable to the H264 and HEVC encoders.
- Source Rec. ITU-T H.264 (06/2019); Table 7.9
-
-``V4L2_CID_MPEG_VIDEO_USE_LTR_FRAMES (bitmask)``
- Specifies the Long Term Reference (LTR) frame(s) to be used for
- encoding the next frame queued after setting this control.
- This provides a bitmask which consists of bits [0, LTR_COUNT-1].
- This is applicable to the H264 and HEVC encoders.
-
-``V4L2_CID_STATELESS_HEVC_DECODE_PARAMS (struct)``
- Specifies various decode parameters, especially the references picture order
- count (POC) for all the lists (short, long, before, current, after) and the
- number of entries for each of them.
- These parameters are defined according to :ref:`hevc`.
- They are described in section 8.3 "Slice decoding process" of the
- specification.
-
-.. c:type:: v4l2_ctrl_hevc_decode_params
-
-.. cssclass:: longtable
-
-.. flat-table:: struct v4l2_ctrl_hevc_decode_params
- :header-rows: 0
- :stub-columns: 0
- :widths: 1 1 2
-
- * - __s32
- - ``pic_order_cnt_val``
- - PicOrderCntVal as described in section 8.3.1 "Decoding process
- for picture order count" of the specification.
- * - __u8
- - ``num_active_dpb_entries``
- - The number of entries in ``dpb``.
- * - __u8
- - ``num_poc_st_curr_before``
- - The number of reference pictures in the short-term set that come before
- the current frame.
- * - __u8
- - ``num_poc_st_curr_after``
- - The number of reference pictures in the short-term set that come after
- the current frame.
- * - __u8
- - ``num_poc_lt_curr``
- - The number of reference pictures in the long-term set.
- * - __u8
- - ``poc_st_curr_before[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
- - PocStCurrBefore as described in section 8.3.2 "Decoding process for reference
- picture set": provides the index of the short term before references in DPB array.
- * - __u8
- - ``poc_st_curr_after[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
- - PocStCurrAfter as described in section 8.3.2 "Decoding process for reference
- picture set": provides the index of the short term after references in DPB array.
- * - __u8
- - ``poc_lt_curr[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
- - PocLtCurr as described in section 8.3.2 "Decoding process for reference
- picture set": provides the index of the long term references in DPB array.
- * - struct :c:type:`v4l2_hevc_dpb_entry`
- - ``dpb[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
- - The decoded picture buffer, for meta-data about reference frames.
- * - __u64
- - ``flags``
- - See :ref:`Decode Parameters Flags <hevc_decode_params_flags>`
-
-.. _hevc_decode_params_flags:
-
-``Decode Parameters Flags``
-
-.. cssclass:: longtable
-
-.. flat-table::
- :header-rows: 0
- :stub-columns: 0
- :widths: 1 1 2
-
- * - ``V4L2_HEVC_DECODE_PARAM_FLAG_IRAP_PIC``
- - 0x00000001
- -
- * - ``V4L2_HEVC_DECODE_PARAM_FLAG_IDR_PIC``
- - 0x00000002
- -
- * - ``V4L2_HEVC_DECODE_PARAM_FLAG_NO_OUTPUT_OF_PRIOR``
- - 0x00000004
- -
diff --git a/Documentation/userspace-api/media/v4l/pixfmt-compressed.rst b/Documentation/userspace-api/media/v4l/pixfmt-compressed.rst
index c352d91a73d8..506dd3c98884 100644
--- a/Documentation/userspace-api/media/v4l/pixfmt-compressed.rst
+++ b/Documentation/userspace-api/media/v4l/pixfmt-compressed.rst
@@ -212,7 +212,7 @@ Compressed Formats
``V4L2_CID_MPEG_VIDEO_HEVC_SPS``,
``V4L2_CID_MPEG_VIDEO_HEVC_PPS``, and
``V4L2_CID_MPEG_VIDEO_HEVC_SLICE_PARAMS``.
- See the :ref:`associated Codec Control IDs <v4l2-mpeg-hevc>`.
+ See the :ref:`associated Codec Control IDs <v4l2-codec-stateless-hevc>`.
Buffers associated with this pixel format must contain the appropriate
number of macroblocks to decode a full corresponding frame.
* .. _V4L2-PIX-FMT-FWHT:
diff --git a/Documentation/userspace-api/media/v4l/vidioc-g-ext-ctrls.rst b/Documentation/userspace-api/media/v4l/vidioc-g-ext-ctrls.rst
index 29971a45a2d4..892cfeb8b988 100644
--- a/Documentation/userspace-api/media/v4l/vidioc-g-ext-ctrls.rst
+++ b/Documentation/userspace-api/media/v4l/vidioc-g-ext-ctrls.rst
@@ -249,6 +249,26 @@ still cause this situation.
- ``p_hdr10_mastering``
- A pointer to a struct :c:type:`v4l2_ctrl_hdr10_mastering_display`. Valid if this control is
of type ``V4L2_CTRL_TYPE_HDR10_MASTERING_DISPLAY``.
+ * - struct :c:type:`v4l2_ctrl_hevc_sps` *
+ - ``p_hevc_sps``
+ - A pointer to a struct :c:type:`v4l2_ctrl_hevc_sps`. Valid if this
+ control is of type ``V4L2_CTRL_TYPE_HEVC_SPS``.
+ * - struct :c:type:`v4l2_ctrl_hevc_pps` *
+ - ``p_hevc_pps``
+ - A pointer to a struct :c:type:`v4l2_ctrl_hevc_pps`. Valid if this
+ control is of type ``V4L2_CTRL_TYPE_HEVC_PPS``.
+ * - struct :c:type:`v4l2_ctrl_hevc_slice_params` *
+ - ``p_hevc_slice_params``
+ - A pointer to a struct :c:type:`v4l2_ctrl_hevc_slice_params`. Valid if this
+ control is of type ``V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS``.
+ * - struct :c:type:`v4l2_ctrl_hevc_scaling_matrix` *
+ - ``p_hevc_scaling_matrix``
+ - A pointer to a struct :c:type:`v4l2_ctrl_hevc_scaling_matrix`. Valid if this
+ control is of type ``V4L2_CTRL_TYPE_HEVC_SCALING_MATRIX``.
+ * - struct :c:type:`v4l2_ctrl_hevc_decode_params` *
+ - ``p_hevc_decode_params``
+ - A pointer to a struct :c:type:`v4l2_ctrl_hevc_decode_params`. Valid if this
+ control is of type ``V4L2_CTRL_TYPE_HEVC_DECODE_PARAMS``.
* - void *
- ``ptr``
- A pointer to a compound type which can be an N-dimensional array
diff --git a/include/media/hevc-ctrls.h b/include/media/hevc-ctrls.h
deleted file mode 100644
index 1834072c0a43..000000000000
--- a/include/media/hevc-ctrls.h
+++ /dev/null
@@ -1,465 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/*
- * These are the HEVC state controls for use with stateless HEVC
- * codec drivers.
- *
- * It turns out that these structs are not stable yet and will undergo
- * more changes. So keep them private until they are stable and ready to
- * become part of the official public API.
- */
-
-#ifndef _HEVC_CTRLS_H_
-#define _HEVC_CTRLS_H_
-
-#include <linux/videodev2.h>
-
-#define V4L2_CID_STATELESS_HEVC_SPS (V4L2_CID_CODEC_BASE + 1008)
-#define V4L2_CID_STATELESS_HEVC_PPS (V4L2_CID_CODEC_BASE + 1009)
-#define V4L2_CID_STATELESS_HEVC_SLICE_PARAMS (V4L2_CID_CODEC_BASE + 1010)
-#define V4L2_CID_STATELESS_HEVC_SCALING_MATRIX (V4L2_CID_CODEC_BASE + 1011)
-#define V4L2_CID_STATELESS_HEVC_DECODE_PARAMS (V4L2_CID_CODEC_BASE + 1012)
-#define V4L2_CID_STATELESS_HEVC_DECODE_MODE (V4L2_CID_CODEC_BASE + 1015)
-#define V4L2_CID_STATELESS_HEVC_START_CODE (V4L2_CID_CODEC_BASE + 1016)
-#define V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS (V4L2_CID_CODEC_BASE + 1017)
-
-enum v4l2_stateless_hevc_decode_mode {
- V4L2_STATELESS_HEVC_DECODE_MODE_SLICE_BASED,
- V4L2_STATELESS_HEVC_DECODE_MODE_FRAME_BASED,
-};
-
-enum v4l2_stateless_hevc_start_code {
- V4L2_STATELESS_HEVC_START_CODE_NONE,
- V4L2_STATELESS_HEVC_START_CODE_ANNEX_B,
-};
-
-#define V4L2_HEVC_SLICE_TYPE_B 0
-#define V4L2_HEVC_SLICE_TYPE_P 1
-#define V4L2_HEVC_SLICE_TYPE_I 2
-
-#define V4L2_HEVC_SPS_FLAG_SEPARATE_COLOUR_PLANE (1ULL << 0)
-#define V4L2_HEVC_SPS_FLAG_SCALING_LIST_ENABLED (1ULL << 1)
-#define V4L2_HEVC_SPS_FLAG_AMP_ENABLED (1ULL << 2)
-#define V4L2_HEVC_SPS_FLAG_SAMPLE_ADAPTIVE_OFFSET (1ULL << 3)
-#define V4L2_HEVC_SPS_FLAG_PCM_ENABLED (1ULL << 4)
-#define V4L2_HEVC_SPS_FLAG_PCM_LOOP_FILTER_DISABLED (1ULL << 5)
-#define V4L2_HEVC_SPS_FLAG_LONG_TERM_REF_PICS_PRESENT (1ULL << 6)
-#define V4L2_HEVC_SPS_FLAG_SPS_TEMPORAL_MVP_ENABLED (1ULL << 7)
-#define V4L2_HEVC_SPS_FLAG_STRONG_INTRA_SMOOTHING_ENABLED (1ULL << 8)
-
-/**
- * struct v4l2_ctrl_hevc_sps - ITU-T Rec. H.265: Sequence parameter set
- *
- * @video_parameter_set_id: specifies the value of the
- * vps_video_parameter_set_id of the active VPS
- * @seq_parameter_set_id: provides an identifier for the SPS for
- * reference by other syntax elements
- * @pic_width_in_luma_samples: specifies the width of each decoded picture
- * in units of luma samples
- * @pic_height_in_luma_samples: specifies the height of each decoded picture
- * in units of luma samples
- * @bit_depth_luma_minus8: specifies the bit depth of the samples of the
- * luma array
- * @bit_depth_chroma_minus8: specifies the bit depth of the samples of the
- * chroma arrays
- * @log2_max_pic_order_cnt_lsb_minus4: specifies the value of the variable
- * MaxPicOrderCntLsb
- * @sps_max_dec_pic_buffering_minus1: plus 1 specifies the maximum required
- * size of the decoded picture buffer for
- * the CVS
- * @sps_max_num_reorder_pics: indicates the maximum allowed number of pictures
- * @sps_max_latency_increase_plus1: not equal to 0 is used to compute the
- * value of SpsMaxLatencyPictures[i]
- * @log2_min_luma_coding_block_size_minus3: plus 3 specifies the minimum
- * luma coding block size
- * @log2_diff_max_min_luma_coding_block_size: specifies the difference between
- * the maximum and minimum luma
- * coding block size
- * @log2_min_luma_transform_block_size_minus2: plus 2 specifies the minimum luma
- * transform block size
- * @log2_diff_max_min_luma_transform_block_size: specifies the difference between
- * the maximum and minimum luma
- * transform block size
- * @max_transform_hierarchy_depth_inter: specifies the maximum hierarchy
- * depth for transform units of
- * coding units coded in inter
- * prediction mode
- * @max_transform_hierarchy_depth_intra: specifies the maximum hierarchy
- * depth for transform units of
- * coding units coded in intra
- * prediction mode
- * @pcm_sample_bit_depth_luma_minus1: specifies the number of bits used to
- * represent each of PCM sample values of the
- * luma component
- * @pcm_sample_bit_depth_chroma_minus1: specifies the number of bits used to
- * represent each of PCM sample values of
- * the chroma components
- * @log2_min_pcm_luma_coding_block_size_minus3: plus 3 specifies the minimum size
- * of coding blocks
- * @log2_diff_max_min_pcm_luma_coding_block_size: specifies the difference between
- * the maximum and minimum size of
- * coding blocks
- * @num_short_term_ref_pic_sets: speciefies the number of st_ref_pic_set()
- * syntax structures included in the SPS
- * @num_long_term_ref_pics_sps: specifies the number of candidate long-term
- * reference pictures that are specified in the SPS
- * @chroma_format_idc: specifies the chroma sampling
- * @sps_max_sub_layers_minus1: plus 1 specifies the maximum number of temporal
- * sub-layers
- * @flags: see V4L2_HEVC_SPS_FLAG_{}
- */
-struct v4l2_ctrl_hevc_sps {
- __u8 video_parameter_set_id;
- __u8 seq_parameter_set_id;
- __u16 pic_width_in_luma_samples;
- __u16 pic_height_in_luma_samples;
- __u8 bit_depth_luma_minus8;
- __u8 bit_depth_chroma_minus8;
- __u8 log2_max_pic_order_cnt_lsb_minus4;
- __u8 sps_max_dec_pic_buffering_minus1;
- __u8 sps_max_num_reorder_pics;
- __u8 sps_max_latency_increase_plus1;
- __u8 log2_min_luma_coding_block_size_minus3;
- __u8 log2_diff_max_min_luma_coding_block_size;
- __u8 log2_min_luma_transform_block_size_minus2;
- __u8 log2_diff_max_min_luma_transform_block_size;
- __u8 max_transform_hierarchy_depth_inter;
- __u8 max_transform_hierarchy_depth_intra;
- __u8 pcm_sample_bit_depth_luma_minus1;
- __u8 pcm_sample_bit_depth_chroma_minus1;
- __u8 log2_min_pcm_luma_coding_block_size_minus3;
- __u8 log2_diff_max_min_pcm_luma_coding_block_size;
- __u8 num_short_term_ref_pic_sets;
- __u8 num_long_term_ref_pics_sps;
- __u8 chroma_format_idc;
- __u8 sps_max_sub_layers_minus1;
-
- __u8 padding[6];
- __u64 flags;
- __u8 reserved[24];
-};
-
-#define V4L2_HEVC_PPS_FLAG_DEPENDENT_SLICE_SEGMENT_ENABLED (1ULL << 0)
-#define V4L2_HEVC_PPS_FLAG_OUTPUT_FLAG_PRESENT (1ULL << 1)
-#define V4L2_HEVC_PPS_FLAG_SIGN_DATA_HIDING_ENABLED (1ULL << 2)
-#define V4L2_HEVC_PPS_FLAG_CABAC_INIT_PRESENT (1ULL << 3)
-#define V4L2_HEVC_PPS_FLAG_CONSTRAINED_INTRA_PRED (1ULL << 4)
-#define V4L2_HEVC_PPS_FLAG_TRANSFORM_SKIP_ENABLED (1ULL << 5)
-#define V4L2_HEVC_PPS_FLAG_CU_QP_DELTA_ENABLED (1ULL << 6)
-#define V4L2_HEVC_PPS_FLAG_PPS_SLICE_CHROMA_QP_OFFSETS_PRESENT (1ULL << 7)
-#define V4L2_HEVC_PPS_FLAG_WEIGHTED_PRED (1ULL << 8)
-#define V4L2_HEVC_PPS_FLAG_WEIGHTED_BIPRED (1ULL << 9)
-#define V4L2_HEVC_PPS_FLAG_TRANSQUANT_BYPASS_ENABLED (1ULL << 10)
-#define V4L2_HEVC_PPS_FLAG_TILES_ENABLED (1ULL << 11)
-#define V4L2_HEVC_PPS_FLAG_ENTROPY_CODING_SYNC_ENABLED (1ULL << 12)
-#define V4L2_HEVC_PPS_FLAG_LOOP_FILTER_ACROSS_TILES_ENABLED (1ULL << 13)
-#define V4L2_HEVC_PPS_FLAG_PPS_LOOP_FILTER_ACROSS_SLICES_ENABLED (1ULL << 14)
-#define V4L2_HEVC_PPS_FLAG_DEBLOCKING_FILTER_OVERRIDE_ENABLED (1ULL << 15)
-#define V4L2_HEVC_PPS_FLAG_PPS_DISABLE_DEBLOCKING_FILTER (1ULL << 16)
-#define V4L2_HEVC_PPS_FLAG_LISTS_MODIFICATION_PRESENT (1ULL << 17)
-#define V4L2_HEVC_PPS_FLAG_SLICE_SEGMENT_HEADER_EXTENSION_PRESENT (1ULL << 18)
-#define V4L2_HEVC_PPS_FLAG_DEBLOCKING_FILTER_CONTROL_PRESENT (1ULL << 19)
-#define V4L2_HEVC_PPS_FLAG_UNIFORM_SPACING (1ULL << 20)
-
-/**
- * struct v4l2_ctrl_hevc_pps - ITU-T Rec. H.265: Picture parameter set
- *
- * @pic_parameter_set_id: identifies the PPS for reference by other
- * syntax elements
- * @num_extra_slice_header_bits: specifies the number of extra slice header
- * bits that are present in the slice header RBSP
- * for coded pictures referring to the PPS.
- * @num_ref_idx_l0_default_active_minus1: specifies the inferred value of
- * num_ref_idx_l0_active_minus1
- * @num_ref_idx_l1_default_active_minus1: specifies the inferred value of
- * num_ref_idx_l1_active_minus1
- * @init_qp_minus26: plus 26 specifies the initial value of SliceQp Y for
- * each slice referring to the PPS
- * @diff_cu_qp_delta_depth: specifies the difference between the luma coding
- * tree block size and the minimum luma coding block
- * size of coding units that convey cu_qp_delta_abs
- * and cu_qp_delta_sign_flag
- * @pps_cb_qp_offset: specify the offsets to the luma quantization parameter Cb
- * @pps_cr_qp_offset: specify the offsets to the luma quantization parameter Cr
- * @num_tile_columns_minus1: plus 1 specifies the number of tile columns
- * partitioning the picture
- * @num_tile_rows_minus1: plus 1 specifies the number of tile rows partitioning
- * the picture
- * @column_width_minus1: plus 1 specifies the width of the i-th tile column in
- * units of coding tree blocks
- * @row_height_minus1: plus 1 specifies the height of the i-th tile row in
- * units of coding tree blocks
- * @pps_beta_offset_div2: specify the default deblocking parameter offsets for
- * beta divided by 2
- * @pps_tc_offset_div2: specify the default deblocking parameter offsets for tC
- * divided by 2
- * @log2_parallel_merge_level_minus2: plus 2 specifies the value of the variable
- * Log2ParMrgLevel
- * @flags: see V4L2_HEVC_PPS_FLAG_{}
- */
-struct v4l2_ctrl_hevc_pps {
- __u8 pic_parameter_set_id;
- __u8 num_extra_slice_header_bits;
- __u8 num_ref_idx_l0_default_active_minus1;
- __u8 num_ref_idx_l1_default_active_minus1;
- __s8 init_qp_minus26;
- __u8 diff_cu_qp_delta_depth;
- __s8 pps_cb_qp_offset;
- __s8 pps_cr_qp_offset;
- __u8 num_tile_columns_minus1;
- __u8 num_tile_rows_minus1;
- __u8 column_width_minus1[20];
- __u8 row_height_minus1[22];
- __s8 pps_beta_offset_div2;
- __s8 pps_tc_offset_div2;
- __u8 log2_parallel_merge_level_minus2;
- __u8 padding[9];
-
- __u64 flags;
- __u8 reserved[56];
-};
-
-#define V4L2_HEVC_DPB_ENTRY_LONG_TERM_REFERENCE 0x01
-
-#define V4L2_HEVC_SEI_PIC_STRUCT_FRAME 0
-#define V4L2_HEVC_SEI_PIC_STRUCT_TOP_FIELD 1
-#define V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_FIELD 2
-#define V4L2_HEVC_SEI_PIC_STRUCT_TOP_BOTTOM 3
-#define V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_TOP 4
-#define V4L2_HEVC_SEI_PIC_STRUCT_TOP_BOTTOM_TOP 5
-#define V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_TOP_BOTTOM 6
-#define V4L2_HEVC_SEI_PIC_STRUCT_FRAME_DOUBLING 7
-#define V4L2_HEVC_SEI_PIC_STRUCT_FRAME_TRIPLING 8
-#define V4L2_HEVC_SEI_PIC_STRUCT_TOP_PAIRED_PREVIOUS_BOTTOM 9
-#define V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_PAIRED_PREVIOUS_TOP 10
-#define V4L2_HEVC_SEI_PIC_STRUCT_TOP_PAIRED_NEXT_BOTTOM 11
-#define V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_PAIRED_NEXT_TOP 12
-
-#define V4L2_HEVC_DPB_ENTRIES_NUM_MAX 16
-
-/**
- * struct v4l2_hevc_dpb_entry - HEVC decoded picture buffer entry
- *
- * @timestamp: timestamp of the V4L2 capture buffer to use as reference.
- * @flags: long term flag for the reference frame
- * @field_pic: whether the reference is a field picture or a frame.
- * @pic_order_cnt_val: the picture order count of the reference.
- */
-struct v4l2_hevc_dpb_entry {
- __u64 timestamp;
- __u8 flags;
- __u8 field_pic;
- __s32 pic_order_cnt_val;
- __u8 padding[2];
-};
-
-/**
- * struct v4l2_hevc_pred_weight_table - HEVC weighted prediction parameters
- *
- * @delta_luma_weight_l0: the difference of the weighting factor applied
- * to the luma prediction value for list 0
- * @luma_offset_l0: the additive offset applied to the luma prediction value
- * for list 0
- * @delta_chroma_weight_l0: the difference of the weighting factor applied
- * to the chroma prediction values for list 0
- * @chroma_offset_l0: the difference of the additive offset applied to
- * the chroma prediction values for list 0
- * @delta_luma_weight_l1: the difference of the weighting factor applied
- * to the luma prediction value for list 1
- * @luma_offset_l1: the additive offset applied to the luma prediction value
- * for list 1
- * @delta_chroma_weight_l1: the difference of the weighting factor applied
- * to the chroma prediction values for list 1
- * @chroma_offset_l1: the difference of the additive offset applied to
- * the chroma prediction values for list 1
- * @luma_log2_weight_denom: the base 2 logarithm of the denominator for
- * all luma weighting factors
- * @delta_chroma_log2_weight_denom: the difference of the base 2 logarithm
- * of the denominator for all chroma
- * weighting factors
- */
-struct v4l2_hevc_pred_weight_table {
- __s8 delta_luma_weight_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
- __s8 luma_offset_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
- __s8 delta_chroma_weight_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2];
- __s8 chroma_offset_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2];
-
- __s8 delta_luma_weight_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
- __s8 luma_offset_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
- __s8 delta_chroma_weight_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2];
- __s8 chroma_offset_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2];
-
- __u8 luma_log2_weight_denom;
- __s8 delta_chroma_log2_weight_denom;
-};
-
-#define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_SAO_LUMA (1ULL << 0)
-#define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_SAO_CHROMA (1ULL << 1)
-#define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_TEMPORAL_MVP_ENABLED (1ULL << 2)
-#define V4L2_HEVC_SLICE_PARAMS_FLAG_MVD_L1_ZERO (1ULL << 3)
-#define V4L2_HEVC_SLICE_PARAMS_FLAG_CABAC_INIT (1ULL << 4)
-#define V4L2_HEVC_SLICE_PARAMS_FLAG_COLLOCATED_FROM_L0 (1ULL << 5)
-#define V4L2_HEVC_SLICE_PARAMS_FLAG_USE_INTEGER_MV (1ULL << 6)
-#define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_DEBLOCKING_FILTER_DISABLED (1ULL << 7)
-#define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_LOOP_FILTER_ACROSS_SLICES_ENABLED (1ULL << 8)
-#define V4L2_HEVC_SLICE_PARAMS_FLAG_DEPENDENT_SLICE_SEGMENT (1ULL << 9)
-
-/**
- * v4l2_ctrl_hevc_slice_params - HEVC slice parameters
- *
- * This control is a dynamically sized 1-dimensional array,
- * V4L2_CTRL_FLAG_DYNAMIC_ARRAY flag must be set when using it.
- *
- * @bit_size: size (in bits) of the current slice data
- * @data_byte_offset: offset (in bytes) to the video data in the current slice data
- * @num_entry_point_offsets: specifies the number of entry point offset syntax
- * elements in the slice header.
- * @nal_unit_type: specifies the coding type of the slice (B, P or I)
- * @nuh_temporal_id_plus1: minus 1 specifies a temporal identifier for the NAL unit
- * @slice_type: see V4L2_HEVC_SLICE_TYPE_{}
- * @colour_plane_id: specifies the colour plane associated with the current slice
- * @slice_pic_order_cnt: specifies the picture order count
- * @num_ref_idx_l0_active_minus1: specifies the maximum reference index for
- * reference picture list 0 that may be used to decode
- * the slice
- * @num_ref_idx_l1_active_minus1: specifies the maximum reference index for
- * reference picture list 1 that may be used to decode
- * the slice
- * @collocated_ref_idx: specifies the reference index of the collocated picture used
- * for temporal motion vector prediction
- * @five_minus_max_num_merge_cand: specifies the maximum number of merging
- * motion vector prediction candidates supported in
- * the slice subtracted from 5
- * @slice_qp_delta: specifies the initial value of QpY to be used for the coding
- * blocks in the slice
- * @slice_cb_qp_offset: specifies a difference to be added to the value of pps_cb_qp_offset
- * @slice_cr_qp_offset: specifies a difference to be added to the value of pps_cr_qp_offset
- * @slice_act_y_qp_offset: screen content extension parameters
- * @slice_act_cb_qp_offset: screen content extension parameters
- * @slice_act_cr_qp_offset: screen content extension parameters
- * @slice_beta_offset_div2: specify the deblocking parameter offsets for beta divided by 2
- * @slice_tc_offset_div2: specify the deblocking parameter offsets for tC divided by 2
- * @pic_struct: indicates whether a picture should be displayed as a frame or as one or
- * more fields
- * @slice_segment_addr: specifies the address of the first coding tree block in
- * the slice segment
- * @ref_idx_l0: the list of L0 reference elements as indices in the DPB
- * @ref_idx_l1: the list of L1 reference elements as indices in the DPB
- * @short_term_ref_pic_set_size: specifies the size of short-term reference
- * pictures included in the SPS
- * @long_term_ref_pic_set_size: specifies the size of long-term reference
- * picture include in the SPS
- * @pred_weight_table: the prediction weight coefficients for inter-picture
- * prediction
- * @flags: see V4L2_HEVC_SLICE_PARAMS_FLAG_{}
- */
-struct v4l2_ctrl_hevc_slice_params {
- __u32 bit_size;
- __u32 data_byte_offset;
- __u32 num_entry_point_offsets;
- /* ISO/IEC 23008-2, ITU-T Rec. H.265: NAL unit header */
- __u8 nal_unit_type;
- __u8 nuh_temporal_id_plus1;
-
- /* ISO/IEC 23008-2, ITU-T Rec. H.265: General slice segment header */
- __u8 slice_type;
- __u8 colour_plane_id;
- __u16 slice_pic_order_cnt;
- __u8 num_ref_idx_l0_active_minus1;
- __u8 num_ref_idx_l1_active_minus1;
- __u8 collocated_ref_idx;
- __u8 five_minus_max_num_merge_cand;
- __s8 slice_qp_delta;
- __s8 slice_cb_qp_offset;
- __s8 slice_cr_qp_offset;
- __s8 slice_act_y_qp_offset;
- __s8 slice_act_cb_qp_offset;
- __s8 slice_act_cr_qp_offset;
- __s8 slice_beta_offset_div2;
- __s8 slice_tc_offset_div2;
-
- /* ISO/IEC 23008-2, ITU-T Rec. H.265: Picture timing SEI message */
- __u8 pic_struct;
-
- __u8 reserved;
- /* ISO/IEC 23008-2, ITU-T Rec. H.265: General slice segment header */
- __u32 slice_segment_addr;
- __u8 ref_idx_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
- __u8 ref_idx_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
- __u16 short_term_ref_pic_set_size;
- __u16 long_term_ref_pic_set_size;
-
- /* ISO/IEC 23008-2, ITU-T Rec. H.265: Weighted prediction parameter */
- struct v4l2_hevc_pred_weight_table pred_weight_table;
-
- __u8 reserved1[6];
- __u64 flags;
- __u8 padding[40];
-};
-
-#define V4L2_HEVC_DECODE_PARAM_FLAG_IRAP_PIC 0x1
-#define V4L2_HEVC_DECODE_PARAM_FLAG_IDR_PIC 0x2
-#define V4L2_HEVC_DECODE_PARAM_FLAG_NO_OUTPUT_OF_PRIOR 0x4
-
-/**
- * struct v4l2_ctrl_hevc_decode_params - HEVC decode parameters
- *
- * @pic_order_cnt_val: picture order count
- * @num_active_dpb_entries: the number of entries in dpb
- * @num_poc_st_curr_before: the number of reference pictures in the short-term
- * set that come before the current frame
- * @num_poc_st_curr_after: the number of reference pictures in the short-term
- * set that come after the current frame
- * @num_poc_lt_curr: the number of reference pictures in the long-term set
- * @poc_st_curr_before: provides the index of the short term before references
- * in DPB array
- * @poc_st_curr_after: provides the index of the short term after references
- * in DPB array
- * @poc_lt_curr: provides the index of the long term references in DPB array
- * @dpb: the decoded picture buffer, for meta-data about reference frames
- * @flags: see V4L2_HEVC_DECODE_PARAM_FLAG_{}
- */
-struct v4l2_ctrl_hevc_decode_params {
- __s32 pic_order_cnt_val;
- __u8 num_active_dpb_entries;
- __u8 num_poc_st_curr_before;
- __u8 num_poc_st_curr_after;
- __u8 num_poc_lt_curr;
- __u8 poc_st_curr_before[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
- __u8 poc_st_curr_after[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
- __u8 poc_lt_curr[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
- struct v4l2_hevc_dpb_entry dpb[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
- __u64 flags;
-};
-
-/**
- * struct v4l2_ctrl_hevc_scaling_matrix - HEVC scaling lists parameters
- *
- * @scaling_list_4x4: scaling list is used for the scaling process for
- * transform coefficients. The values on each scaling
- * list are expected in raster scan order
- * @scaling_list_8x8: scaling list is used for the scaling process for
- * transform coefficients. The values on each scaling
- * list are expected in raster scan order
- * @scaling_list_16x16: scaling list is used for the scaling process for
- * transform coefficients. The values on each scaling
- * list are expected in raster scan order
- * @scaling_list_32x32: scaling list is used for the scaling process for
- * transform coefficients. The values on each scaling
- * list are expected in raster scan order
- * @scaling_list_dc_coef_16x16: scaling list is used for the scaling process
- * for transform coefficients. The values on each
- * scaling list are expected in raster scan order.
- * @scaling_list_dc_coef_32x32: scaling list is used for the scaling process
- * for transform coefficients. The values on each
- * scaling list are expected in raster scan order.
- */
-struct v4l2_ctrl_hevc_scaling_matrix {
- __u8 scaling_list_4x4[6][16];
- __u8 scaling_list_8x8[6][64];
- __u8 scaling_list_16x16[6][64];
- __u8 scaling_list_32x32[2][64];
- __u8 scaling_list_dc_coef_16x16[6];
- __u8 scaling_list_dc_coef_32x32[2];
-};
-
-#endif
diff --git a/include/media/v4l2-ctrls.h b/include/media/v4l2-ctrls.h
index f4105de8a8d2..00828a4f9404 100644
--- a/include/media/v4l2-ctrls.h
+++ b/include/media/v4l2-ctrls.h
@@ -13,12 +13,6 @@
#include <linux/videodev2.h>
#include <media/media-request.h>

-/*
- * Include the stateless codec compound control definitions.
- * This will move to the public headers once this API is fully stable.
- */
-#include <media/hevc-ctrls.h>
-
/* forward references */
struct file;
struct poll_table_struct;
diff --git a/include/uapi/linux/v4l2-controls.h b/include/uapi/linux/v4l2-controls.h
index 17c6df3e9c0b..d3521ae2296b 100644
--- a/include/uapi/linux/v4l2-controls.h
+++ b/include/uapi/linux/v4l2-controls.h
@@ -1997,6 +1997,454 @@ struct v4l2_ctrl_mpeg2_quantisation {
__u8 chroma_non_intra_quantiser_matrix[64];
};

+#define V4L2_CID_STATELESS_HEVC_SPS (V4L2_CID_CODEC_STATELESS_BASE + 400)
+#define V4L2_CID_STATELESS_HEVC_PPS (V4L2_CID_CODEC_STATELESS_BASE + 401)
+#define V4L2_CID_STATELESS_HEVC_SLICE_PARAMS (V4L2_CID_CODEC_STATELESS_BASE + 402)
+#define V4L2_CID_STATELESS_HEVC_SCALING_MATRIX (V4L2_CID_CODEC_STATELESS_BASE + 403)
+#define V4L2_CID_STATELESS_HEVC_DECODE_PARAMS (V4L2_CID_CODEC_STATELESS_BASE + 404)
+#define V4L2_CID_STATELESS_HEVC_DECODE_MODE (V4L2_CID_CODEC_STATELESS_BASE + 405)
+#define V4L2_CID_STATELESS_HEVC_START_CODE (V4L2_CID_CODEC_STATELESS_BASE + 406)
+#define V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS (V4L2_CID_CODEC_STATELESS_BASE + 407)
+
+enum v4l2_stateless_hevc_decode_mode {
+ V4L2_STATELESS_HEVC_DECODE_MODE_SLICE_BASED,
+ V4L2_STATELESS_HEVC_DECODE_MODE_FRAME_BASED,
+};
+
+enum v4l2_stateless_hevc_start_code {
+ V4L2_STATELESS_HEVC_START_CODE_NONE,
+ V4L2_STATELESS_HEVC_START_CODE_ANNEX_B,
+};
+
+#define V4L2_HEVC_SLICE_TYPE_B 0
+#define V4L2_HEVC_SLICE_TYPE_P 1
+#define V4L2_HEVC_SLICE_TYPE_I 2
+
+#define V4L2_HEVC_SPS_FLAG_SEPARATE_COLOUR_PLANE (1ULL << 0)
+#define V4L2_HEVC_SPS_FLAG_SCALING_LIST_ENABLED (1ULL << 1)
+#define V4L2_HEVC_SPS_FLAG_AMP_ENABLED (1ULL << 2)
+#define V4L2_HEVC_SPS_FLAG_SAMPLE_ADAPTIVE_OFFSET (1ULL << 3)
+#define V4L2_HEVC_SPS_FLAG_PCM_ENABLED (1ULL << 4)
+#define V4L2_HEVC_SPS_FLAG_PCM_LOOP_FILTER_DISABLED (1ULL << 5)
+#define V4L2_HEVC_SPS_FLAG_LONG_TERM_REF_PICS_PRESENT (1ULL << 6)
+#define V4L2_HEVC_SPS_FLAG_SPS_TEMPORAL_MVP_ENABLED (1ULL << 7)
+#define V4L2_HEVC_SPS_FLAG_STRONG_INTRA_SMOOTHING_ENABLED (1ULL << 8)
+
+/**
+ * struct v4l2_ctrl_hevc_sps - ITU-T Rec. H.265: Sequence parameter set
+ *
+ * @video_parameter_set_id: specifies the value of the
+ * vps_video_parameter_set_id of the active VPS
+ * @seq_parameter_set_id: provides an identifier for the SPS for
+ * reference by other syntax elements
+ * @pic_width_in_luma_samples: specifies the width of each decoded picture
+ * in units of luma samples
+ * @pic_height_in_luma_samples: specifies the height of each decoded picture
+ * in units of luma samples
+ * @bit_depth_luma_minus8: specifies the bit depth of the samples of the
+ * luma array
+ * @bit_depth_chroma_minus8: specifies the bit depth of the samples of the
+ * chroma arrays
+ * @log2_max_pic_order_cnt_lsb_minus4: specifies the value of the variable
+ * MaxPicOrderCntLsb
+ * @sps_max_dec_pic_buffering_minus1: plus 1 specifies the maximum required
+ * size of the decoded picture buffer for
+ * the CVS
+ * @sps_max_num_reorder_pics: indicates the maximum allowed number of pictures
+ * @sps_max_latency_increase_plus1: not equal to 0 is used to compute the
+ * value of SpsMaxLatencyPictures[i]
+ * @log2_min_luma_coding_block_size_minus3: plus 3 specifies the minimum
+ * luma coding block size
+ * @log2_diff_max_min_luma_coding_block_size: specifies the difference between
+ * the maximum and minimum luma
+ * coding block size
+ * @log2_min_luma_transform_block_size_minus2: plus 2 specifies the minimum luma
+ * transform block size
+ * @log2_diff_max_min_luma_transform_block_size: specifies the difference between
+ * the maximum and minimum luma
+ * transform block size
+ * @max_transform_hierarchy_depth_inter: specifies the maximum hierarchy
+ * depth for transform units of
+ * coding units coded in inter
+ * prediction mode
+ * @max_transform_hierarchy_depth_intra: specifies the maximum hierarchy
+ * depth for transform units of
+ * coding units coded in intra
+ * prediction mode
+ * @pcm_sample_bit_depth_luma_minus1: specifies the number of bits used to
+ * represent each of PCM sample values of the
+ * luma component
+ * @pcm_sample_bit_depth_chroma_minus1: specifies the number of bits used to
+ * represent each of PCM sample values of
+ * the chroma components
+ * @log2_min_pcm_luma_coding_block_size_minus3: plus 3 specifies the minimum size
+ * of coding blocks
+ * @log2_diff_max_min_pcm_luma_coding_block_size: specifies the difference between
+ * the maximum and minimum size of
+ * coding blocks
+ * @num_short_term_ref_pic_sets: specifies the number of st_ref_pic_set()
+ * syntax structures included in the SPS
+ * @num_long_term_ref_pics_sps: specifies the number of candidate long-term
+ * reference pictures that are specified in the SPS
+ * @chroma_format_idc: specifies the chroma sampling
+ * @sps_max_sub_layers_minus1: plus 1 specifies the maximum number of temporal
+ * sub-layers
+ * @flags: see V4L2_HEVC_SPS_FLAG_{}
+ */
+struct v4l2_ctrl_hevc_sps {
+ __u8 video_parameter_set_id;
+ __u8 seq_parameter_set_id;
+ __u16 pic_width_in_luma_samples;
+ __u16 pic_height_in_luma_samples;
+ __u8 bit_depth_luma_minus8;
+ __u8 bit_depth_chroma_minus8;
+ __u8 log2_max_pic_order_cnt_lsb_minus4;
+ __u8 sps_max_dec_pic_buffering_minus1;
+ __u8 sps_max_num_reorder_pics;
+ __u8 sps_max_latency_increase_plus1;
+ __u8 log2_min_luma_coding_block_size_minus3;
+ __u8 log2_diff_max_min_luma_coding_block_size;
+ __u8 log2_min_luma_transform_block_size_minus2;
+ __u8 log2_diff_max_min_luma_transform_block_size;
+ __u8 max_transform_hierarchy_depth_inter;
+ __u8 max_transform_hierarchy_depth_intra;
+ __u8 pcm_sample_bit_depth_luma_minus1;
+ __u8 pcm_sample_bit_depth_chroma_minus1;
+ __u8 log2_min_pcm_luma_coding_block_size_minus3;
+ __u8 log2_diff_max_min_pcm_luma_coding_block_size;
+ __u8 num_short_term_ref_pic_sets;
+ __u8 num_long_term_ref_pics_sps;
+ __u8 chroma_format_idc;
+ __u8 sps_max_sub_layers_minus1;
+
+ __u8 padding[6];
+ __u64 flags;
+ __u8 reserved[24];
+};
+
+#define V4L2_HEVC_PPS_FLAG_DEPENDENT_SLICE_SEGMENT_ENABLED (1ULL << 0)
+#define V4L2_HEVC_PPS_FLAG_OUTPUT_FLAG_PRESENT (1ULL << 1)
+#define V4L2_HEVC_PPS_FLAG_SIGN_DATA_HIDING_ENABLED (1ULL << 2)
+#define V4L2_HEVC_PPS_FLAG_CABAC_INIT_PRESENT (1ULL << 3)
+#define V4L2_HEVC_PPS_FLAG_CONSTRAINED_INTRA_PRED (1ULL << 4)
+#define V4L2_HEVC_PPS_FLAG_TRANSFORM_SKIP_ENABLED (1ULL << 5)
+#define V4L2_HEVC_PPS_FLAG_CU_QP_DELTA_ENABLED (1ULL << 6)
+#define V4L2_HEVC_PPS_FLAG_PPS_SLICE_CHROMA_QP_OFFSETS_PRESENT (1ULL << 7)
+#define V4L2_HEVC_PPS_FLAG_WEIGHTED_PRED (1ULL << 8)
+#define V4L2_HEVC_PPS_FLAG_WEIGHTED_BIPRED (1ULL << 9)
+#define V4L2_HEVC_PPS_FLAG_TRANSQUANT_BYPASS_ENABLED (1ULL << 10)
+#define V4L2_HEVC_PPS_FLAG_TILES_ENABLED (1ULL << 11)
+#define V4L2_HEVC_PPS_FLAG_ENTROPY_CODING_SYNC_ENABLED (1ULL << 12)
+#define V4L2_HEVC_PPS_FLAG_LOOP_FILTER_ACROSS_TILES_ENABLED (1ULL << 13)
+#define V4L2_HEVC_PPS_FLAG_PPS_LOOP_FILTER_ACROSS_SLICES_ENABLED (1ULL << 14)
+#define V4L2_HEVC_PPS_FLAG_DEBLOCKING_FILTER_OVERRIDE_ENABLED (1ULL << 15)
+#define V4L2_HEVC_PPS_FLAG_PPS_DISABLE_DEBLOCKING_FILTER (1ULL << 16)
+#define V4L2_HEVC_PPS_FLAG_LISTS_MODIFICATION_PRESENT (1ULL << 17)
+#define V4L2_HEVC_PPS_FLAG_SLICE_SEGMENT_HEADER_EXTENSION_PRESENT (1ULL << 18)
+#define V4L2_HEVC_PPS_FLAG_DEBLOCKING_FILTER_CONTROL_PRESENT (1ULL << 19)
+#define V4L2_HEVC_PPS_FLAG_UNIFORM_SPACING (1ULL << 20)
+
+/**
+ * struct v4l2_ctrl_hevc_pps - ITU-T Rec. H.265: Picture parameter set
+ *
+ * @pic_parameter_set_id: identifies the PPS for reference by other
+ * syntax elements
+ * @num_extra_slice_header_bits: specifies the number of extra slice header
+ * bits that are present in the slice header RBSP
+ * for coded pictures referring to the PPS.
+ * @num_ref_idx_l0_default_active_minus1: specifies the inferred value of
+ * num_ref_idx_l0_active_minus1
+ * @num_ref_idx_l1_default_active_minus1: specifies the inferred value of
+ * num_ref_idx_l1_active_minus1
+ * @init_qp_minus26: plus 26 specifies the initial value of SliceQp Y for
+ * each slice referring to the PPS
+ * @diff_cu_qp_delta_depth: specifies the difference between the luma coding
+ * tree block size and the minimum luma coding block
+ * size of coding units that convey cu_qp_delta_abs
+ * and cu_qp_delta_sign_flag
+ * @pps_cb_qp_offset: specify the offsets to the luma quantization parameter Cb
+ * @pps_cr_qp_offset: specify the offsets to the luma quantization parameter Cr
+ * @num_tile_columns_minus1: plus 1 specifies the number of tile columns
+ * partitioning the picture
+ * @num_tile_rows_minus1: plus 1 specifies the number of tile rows partitioning
+ * the picture
+ * @column_width_minus1: plus 1 specifies the width of the i-th tile column in
+ * units of coding tree blocks
+ * @row_height_minus1: plus 1 specifies the height of the i-th tile row in
+ * units of coding tree blocks
+ * @pps_beta_offset_div2: specify the default deblocking parameter offsets for
+ * beta divided by 2
+ * @pps_tc_offset_div2: specify the default deblocking parameter offsets for tC
+ * divided by 2
+ * @log2_parallel_merge_level_minus2: plus 2 specifies the value of the variable
+ * Log2ParMrgLevel
+ * @flags: see V4L2_HEVC_PPS_FLAG_{}
+ */
+struct v4l2_ctrl_hevc_pps {
+ __u8 pic_parameter_set_id;
+ __u8 num_extra_slice_header_bits;
+ __u8 num_ref_idx_l0_default_active_minus1;
+ __u8 num_ref_idx_l1_default_active_minus1;
+ __s8 init_qp_minus26;
+ __u8 diff_cu_qp_delta_depth;
+ __s8 pps_cb_qp_offset;
+ __s8 pps_cr_qp_offset;
+ __u8 num_tile_columns_minus1;
+ __u8 num_tile_rows_minus1;
+ __u8 column_width_minus1[20];
+ __u8 row_height_minus1[22];
+ __s8 pps_beta_offset_div2;
+ __s8 pps_tc_offset_div2;
+ __u8 log2_parallel_merge_level_minus2;
+ __u8 padding[9];
+
+ __u64 flags;
+ __u8 reserved[56];
+};
+
+#define V4L2_HEVC_DPB_ENTRY_LONG_TERM_REFERENCE 0x01
+
+#define V4L2_HEVC_SEI_PIC_STRUCT_FRAME 0
+#define V4L2_HEVC_SEI_PIC_STRUCT_TOP_FIELD 1
+#define V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_FIELD 2
+#define V4L2_HEVC_SEI_PIC_STRUCT_TOP_BOTTOM 3
+#define V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_TOP 4
+#define V4L2_HEVC_SEI_PIC_STRUCT_TOP_BOTTOM_TOP 5
+#define V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_TOP_BOTTOM 6
+#define V4L2_HEVC_SEI_PIC_STRUCT_FRAME_DOUBLING 7
+#define V4L2_HEVC_SEI_PIC_STRUCT_FRAME_TRIPLING 8
+#define V4L2_HEVC_SEI_PIC_STRUCT_TOP_PAIRED_PREVIOUS_BOTTOM 9
+#define V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_PAIRED_PREVIOUS_TOP 10
+#define V4L2_HEVC_SEI_PIC_STRUCT_TOP_PAIRED_NEXT_BOTTOM 11
+#define V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_PAIRED_NEXT_TOP 12
+
+#define V4L2_HEVC_DPB_ENTRIES_NUM_MAX 16
+
+/**
+ * struct v4l2_hevc_dpb_entry - HEVC decoded picture buffer entry
+ *
+ * @timestamp: timestamp of the V4L2 capture buffer to use as reference.
+ * @flags: long term flag for the reference frame
+ * @field_pic: whether the reference is a field picture or a frame.
+ * @pic_order_cnt_val: the picture order count of the current picture.
+ */
+struct v4l2_hevc_dpb_entry {
+ __u64 timestamp;
+ __u8 flags;
+ __u8 field_pic;
+ __s32 pic_order_cnt_val;
+ __u8 padding[2];
+};
+
+/**
+ * struct v4l2_hevc_pred_weight_table - HEVC weighted prediction parameters
+ *
+ * @delta_luma_weight_l0: the difference of the weighting factor applied
+ * to the luma prediction value for list 0
+ * @luma_offset_l0: the additive offset applied to the luma prediction value
+ * for list 0
+ * @delta_chroma_weight_l0: the difference of the weighting factor applied
+ * to the chroma prediction values for list 0
+ * @chroma_offset_l0: the difference of the additive offset applied to
+ * the chroma prediction values for list 0
+ * @delta_luma_weight_l1: the difference of the weighting factor applied
+ * to the luma prediction value for list 1
+ * @luma_offset_l1: the additive offset applied to the luma prediction value
+ * for list 1
+ * @delta_chroma_weight_l1: the difference of the weighting factor applied
+ * to the chroma prediction values for list 1
+ * @chroma_offset_l1: the difference of the additive offset applied to
+ * the chroma prediction values for list 1
+ * @luma_log2_weight_denom: the base 2 logarithm of the denominator for
+ * all luma weighting factors
+ * @delta_chroma_log2_weight_denom: the difference of the base 2 logarithm
+ * of the denominator for all chroma
+ * weighting factors
+ */
+struct v4l2_hevc_pred_weight_table {
+ __s8 delta_luma_weight_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
+ __s8 luma_offset_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
+ __s8 delta_chroma_weight_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2];
+ __s8 chroma_offset_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2];
+
+ __s8 delta_luma_weight_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
+ __s8 luma_offset_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
+ __s8 delta_chroma_weight_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2];
+ __s8 chroma_offset_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2];
+
+ __u8 luma_log2_weight_denom;
+ __s8 delta_chroma_log2_weight_denom;
+};
+
+#define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_SAO_LUMA (1ULL << 0)
+#define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_SAO_CHROMA (1ULL << 1)
+#define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_TEMPORAL_MVP_ENABLED (1ULL << 2)
+#define V4L2_HEVC_SLICE_PARAMS_FLAG_MVD_L1_ZERO (1ULL << 3)
+#define V4L2_HEVC_SLICE_PARAMS_FLAG_CABAC_INIT (1ULL << 4)
+#define V4L2_HEVC_SLICE_PARAMS_FLAG_COLLOCATED_FROM_L0 (1ULL << 5)
+#define V4L2_HEVC_SLICE_PARAMS_FLAG_USE_INTEGER_MV (1ULL << 6)
+#define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_DEBLOCKING_FILTER_DISABLED (1ULL << 7)
+#define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_LOOP_FILTER_ACROSS_SLICES_ENABLED (1ULL << 8)
+#define V4L2_HEVC_SLICE_PARAMS_FLAG_DEPENDENT_SLICE_SEGMENT (1ULL << 9)
+
+/**
+ * v4l2_ctrl_hevc_slice_params - HEVC slice parameters
+ *
+ * This control is a dynamically sized 1-dimensional array,
+ * V4L2_CTRL_FLAG_DYNAMIC_ARRAY flag must be set when using it.
+ *
+ * @bit_size: size (in bits) of the current slice data
+ * @data_byte_offset: offset (in bytes) to the video data in the current slice data
+ * @num_entry_point_offsets: specifies the number of entry point offset syntax
+ * elements in the slice header.
+ * @nal_unit_type: specifies the coding type of the slice (B, P or I)
+ * @nuh_temporal_id_plus1: minus 1 specifies a temporal identifier for the NAL unit
+ * @slice_type: see V4L2_HEVC_SLICE_TYPE_{}
+ * @colour_plane_id: specifies the colour plane associated with the current slice
+ * @slice_pic_order_cnt: specifies the picture order count
+ * @num_ref_idx_l0_active_minus1: specifies the maximum reference index for reference
+ * picture list 0 that may be used to decode the slice
+ * @num_ref_idx_l1_active_minus1: specifies the maximum reference index for reference
+ * picture list 1 that may be used to decode the slice
+ * @collocated_ref_idx: specifies the reference index of the collocated picture used
+ * for temporal motion vector prediction
+ * @five_minus_max_num_merge_cand: specifies the maximum number of merging
+ * motion vector prediction candidates supported in
+ * the slice subtracted from 5
+ * @slice_qp_delta: specifies the initial value of QpY to be used for the coding
+ * blocks in the slice
+ * @slice_cb_qp_offset: specifies a difference to be added to the value of pps_cb_qp_offset
+ * @slice_cr_qp_offset: specifies a difference to be added to the value of pps_cr_qp_offset
+ * @slice_act_y_qp_offset: screen content extension parameters
+ * @slice_act_cb_qp_offset: screen content extension parameters
+ * @slice_act_cr_qp_offset: screen content extension parameters
+ * @slice_beta_offset_div2: specify the deblocking parameter offsets for beta divided by 2
+ * @slice_tc_offset_div2: specify the deblocking parameter offsets for tC divided by 2
+ * @pic_struct: indicates whether a picture should be displayed as a frame or as one or
+ * more fields
+ * @slice_segment_addr: specifies the address of the first coding tree block in
+ * the slice segment
+ * @ref_idx_l0: the list of L0 reference elements as indices in the DPB
+ * @ref_idx_l1: the list of L1 reference elements as indices in the DPB
+ * @short_term_ref_pic_set_size: specifies the size of short-term reference
+ * pictures set included in the SPS
+ * @long_term_ref_pic_set_size: specifies the size of long-term reference
+ * pictures set include in the SPS
+ * @pred_weight_table: the prediction weight coefficients for inter-picture
+ * prediction
+ * @flags: see V4L2_HEVC_SLICE_PARAMS_FLAG_{}
+ */
+struct v4l2_ctrl_hevc_slice_params {
+ __u32 bit_size;
+ __u32 data_byte_offset;
+ __u32 num_entry_point_offsets;
+
+ /* ISO/IEC 23008-2, ITU-T Rec. H.265: NAL unit header */
+ __u8 nal_unit_type;
+ __u8 nuh_temporal_id_plus1;
+
+ /* ISO/IEC 23008-2, ITU-T Rec. H.265: General slice segment header */
+ __u8 slice_type;
+ __u8 colour_plane_id;
+ __u16 slice_pic_order_cnt;
+ __u8 num_ref_idx_l0_active_minus1;
+ __u8 num_ref_idx_l1_active_minus1;
+ __u8 collocated_ref_idx;
+ __u8 five_minus_max_num_merge_cand;
+ __s8 slice_qp_delta;
+ __s8 slice_cb_qp_offset;
+ __s8 slice_cr_qp_offset;
+ __s8 slice_act_y_qp_offset;
+ __s8 slice_act_cb_qp_offset;
+ __s8 slice_act_cr_qp_offset;
+ __s8 slice_beta_offset_div2;
+ __s8 slice_tc_offset_div2;
+
+ /* ISO/IEC 23008-2, ITU-T Rec. H.265: Picture timing SEI message */
+ __u8 pic_struct;
+
+ __u8 reserved;
+ /* ISO/IEC 23008-2, ITU-T Rec. H.265: General slice segment header */
+ __u32 slice_segment_addr;
+ __u8 ref_idx_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
+ __u8 ref_idx_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
+ __u16 short_term_ref_pic_set_size;
+ __u16 long_term_ref_pic_set_size;
+
+ /* ISO/IEC 23008-2, ITU-T Rec. H.265: Weighted prediction parameter */
+ struct v4l2_hevc_pred_weight_table pred_weight_table;
+
+ __u8 reserved1[6];
+ __u64 flags;
+ __u8 padding[40];
+};
+
+#define V4L2_HEVC_DECODE_PARAM_FLAG_IRAP_PIC 0x1
+#define V4L2_HEVC_DECODE_PARAM_FLAG_IDR_PIC 0x2
+#define V4L2_HEVC_DECODE_PARAM_FLAG_NO_OUTPUT_OF_PRIOR 0x4
+
+/**
+ * struct v4l2_ctrl_hevc_decode_params - HEVC decode parameters
+ *
+ * @pic_order_cnt_val: picture order count
+ * @num_active_dpb_entries: the number of entries in dpb
+ * @num_poc_st_curr_before: the number of reference pictures in the short-term
+ * set that come before the current frame
+ * @num_poc_st_curr_after: the number of reference pictures in the short-term
+ * set that come after the current frame
+ * @num_poc_lt_curr: the number of reference pictures in the long-term set
+ * @poc_st_curr_before: provides the index of the short term before references
+ * in DPB array
+ * @poc_st_curr_after: provides the index of the short term after references
+ * in DPB array
+ * @poc_lt_curr: provides the index of the long term references in DPB array
+ * @dpb: the decoded picture buffer, for meta-data about reference frames
+ * @flags: see V4L2_HEVC_DECODE_PARAM_FLAG_{}
+ */
+struct v4l2_ctrl_hevc_decode_params {
+ __s32 pic_order_cnt_val;
+ __u8 num_active_dpb_entries;
+ __u8 num_poc_st_curr_before;
+ __u8 num_poc_st_curr_after;
+ __u8 num_poc_lt_curr;
+ __u8 poc_st_curr_before[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
+ __u8 poc_st_curr_after[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
+ __u8 poc_lt_curr[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
+ struct v4l2_hevc_dpb_entry dpb[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
+ __u64 flags;
+};
+
+/**
+ * struct v4l2_ctrl_hevc_scaling_matrix - HEVC scaling lists parameters
+ *
+ * @scaling_list_4x4: scaling list is used for the scaling process for
+ * transform coefficients. The values on each scaling
+ * list are expected in raster scan order
+ * @scaling_list_8x8: scaling list is used for the scaling process for
+ * transform coefficients. The values on each scaling
+ * list are expected in raster scan order
+ * @scaling_list_16x16: scaling list is used for the scaling process for
+ * transform coefficients. The values on each scaling
+ * list are expected in raster scan order
+ * @scaling_list_32x32: scaling list is used for the scaling process for
+ * transform coefficients. The values on each scaling
+ * list are expected in raster scan order
+ * @scaling_list_dc_coef_16x16: scaling list is used for the scaling process
+ * for transform coefficients. The values on each
+ * scaling list are expected in raster scan order.
+ * @scaling_list_dc_coef_32x32: scaling list is used for the scaling process
+ * for transform coefficients. The values on each
+ * scaling list are expected in raster scan order.
+ */
+struct v4l2_ctrl_hevc_scaling_matrix {
+ __u8 scaling_list_4x4[6][16];
+ __u8 scaling_list_8x8[6][64];
+ __u8 scaling_list_16x16[6][64];
+ __u8 scaling_list_32x32[2][64];
+ __u8 scaling_list_dc_coef_16x16[6];
+ __u8 scaling_list_dc_coef_32x32[2];
+};
+
#define V4L2_CID_COLORIMETRY_CLASS_BASE (V4L2_CTRL_CLASS_COLORIMETRY | 0x900)
#define V4L2_CID_COLORIMETRY_CLASS (V4L2_CTRL_CLASS_COLORIMETRY | 1)

diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
index 939775b145af..4c09969e7112 100644
--- a/include/uapi/linux/videodev2.h
+++ b/include/uapi/linux/videodev2.h
@@ -1765,6 +1765,11 @@ struct v4l2_ext_control {
struct v4l2_ctrl_mpeg2_quantisation __user *p_mpeg2_quantisation;
struct v4l2_ctrl_vp9_compressed_hdr __user *p_vp9_compressed_hdr_probs;
struct v4l2_ctrl_vp9_frame __user *p_vp9_frame;
+ struct v4l2_ctrl_hevc_sps __user *p_hevc_sps;
+ struct v4l2_ctrl_hevc_pps __user *p_hevc_pps;
+ struct v4l2_ctrl_hevc_slice_params __user *p_hevc_slice_params;
+ struct v4l2_ctrl_hevc_scaling_matrix __user *p_hevc_scaling_matrix;
+ struct v4l2_ctrl_hevc_decode_params __user *p_hevc_decode_params;
void __user *ptr;
};
} __attribute__ ((packed));
--
2.32.0

2022-04-07 20:41:40

by Benjamin Gaignard

[permalink] [raw]
Subject: [PATCH v5 13/17] media: controls: Log HEVC stateless control in .std_log

Simply print the type of the control.

Signed-off-by: Benjamin Gaignard <[email protected]>
---
drivers/media/v4l2-core/v4l2-ctrls-core.c | 15 +++++++++++++++
1 file changed, 15 insertions(+)

diff --git a/drivers/media/v4l2-core/v4l2-ctrls-core.c b/drivers/media/v4l2-core/v4l2-ctrls-core.c
index cb709c74e01e..6a48c9022b74 100644
--- a/drivers/media/v4l2-core/v4l2-ctrls-core.c
+++ b/drivers/media/v4l2-core/v4l2-ctrls-core.c
@@ -307,6 +307,21 @@ static void std_log(const struct v4l2_ctrl *ctrl)
case V4L2_CTRL_TYPE_VP9_FRAME:
pr_cont("VP9_FRAME");
break;
+ case V4L2_CTRL_TYPE_HEVC_SPS:
+ pr_cont("HEVC_SPS");
+ break;
+ case V4L2_CTRL_TYPE_HEVC_PPS:
+ pr_cont("HEVC_PPS");
+ break;
+ case V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS:
+ pr_cont("HEVC_SLICE_PARAMS");
+ break;
+ case V4L2_CTRL_TYPE_HEVC_SCALING_MATRIX:
+ pr_cont("HEVC_SCALING_MATRIX");
+ break;
+ case V4L2_CTRL_TYPE_HEVC_DECODE_PARAMS:
+ pr_cont("HEVC_DECODE_PARAMS");
+ break;
default:
pr_cont("unknown type %d", ctrl->type);
break;
--
2.32.0

2022-04-07 20:50:05

by Benjamin Gaignard

[permalink] [raw]
Subject: [PATCH v5 12/17] media: uapi: Move the HEVC stateless control type out of staging

Move the HEVC stateless controls types out of staging,
and re-number them.

Signed-off-by: Benjamin Gaignard <[email protected]>
---
.../userspace-api/media/videodev2.h.rst.exceptions | 5 +++++
include/media/hevc-ctrls.h | 7 -------
include/uapi/linux/videodev2.h | 6 ++++++
3 files changed, 11 insertions(+), 7 deletions(-)

diff --git a/Documentation/userspace-api/media/videodev2.h.rst.exceptions b/Documentation/userspace-api/media/videodev2.h.rst.exceptions
index 9cbb7a0c354a..ee34f13e8142 100644
--- a/Documentation/userspace-api/media/videodev2.h.rst.exceptions
+++ b/Documentation/userspace-api/media/videodev2.h.rst.exceptions
@@ -153,6 +153,11 @@ replace symbol V4L2_CTRL_TYPE_VP9_COMPRESSED_HDR :c:type:`v4l2_ctrl_type`
replace symbol V4L2_CTRL_TYPE_VP9_FRAME :c:type:`v4l2_ctrl_type`
replace symbol V4L2_CTRL_TYPE_HDR10_CLL_INFO :c:type:`v4l2_ctrl_type`
replace symbol V4L2_CTRL_TYPE_HDR10_MASTERING_DISPLAY :c:type:`v4l2_ctrl_type`
+replace symbol V4L2_CTRL_TYPE_HEVC_SPS :c:type:`v4l2_ctrl_type`
+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_HEVC_SCALING_MATRIX :c:type:`v4l2_ctrl_type`
+replace symbol V4L2_CTRL_TYPE_HEVC_DECODE_PARAMS :c:type:`v4l2_ctrl_type`

# V4L2 capability defines
replace define V4L2_CAP_VIDEO_CAPTURE device-capabilities
diff --git a/include/media/hevc-ctrls.h b/include/media/hevc-ctrls.h
index 97e049ccb966..d84edb7b8182 100644
--- a/include/media/hevc-ctrls.h
+++ b/include/media/hevc-ctrls.h
@@ -22,13 +22,6 @@
#define V4L2_CID_STATELESS_HEVC_START_CODE (V4L2_CID_CODEC_BASE + 1016)
#define V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS (V4L2_CID_CODEC_BASE + 1017)

-/* enum v4l2_ctrl_type type values */
-#define V4L2_CTRL_TYPE_HEVC_SPS 0x0120
-#define V4L2_CTRL_TYPE_HEVC_PPS 0x0121
-#define V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS 0x0122
-#define V4L2_CTRL_TYPE_HEVC_SCALING_MATRIX 0x0123
-#define V4L2_CTRL_TYPE_HEVC_DECODE_PARAMS 0x0124
-
enum v4l2_stateless_hevc_decode_mode {
V4L2_STATELESS_HEVC_DECODE_MODE_SLICE_BASED,
V4L2_STATELESS_HEVC_DECODE_MODE_FRAME_BASED,
diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
index 2888fef3cff7..939775b145af 100644
--- a/include/uapi/linux/videodev2.h
+++ b/include/uapi/linux/videodev2.h
@@ -1832,6 +1832,12 @@ enum v4l2_ctrl_type {

V4L2_CTRL_TYPE_VP9_COMPRESSED_HDR = 0x0260,
V4L2_CTRL_TYPE_VP9_FRAME = 0x0261,
+
+ V4L2_CTRL_TYPE_HEVC_SPS = 0x0270,
+ V4L2_CTRL_TYPE_HEVC_PPS = 0x0271,
+ V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS = 0x0272,
+ V4L2_CTRL_TYPE_HEVC_SCALING_MATRIX = 0x0273,
+ V4L2_CTRL_TYPE_HEVC_DECODE_PARAMS = 0x0274,
};

/* Used in the VIDIOC_QUERYCTRL ioctl for querying controls */
--
2.32.0

2022-04-07 20:57:36

by Benjamin Gaignard

[permalink] [raw]
Subject: [PATCH v5 05/17] media: uapi: HEVC: Rename HEVC stateless controls with STATELESS prefix

Change HEVC stateless controls names to V4L2_CID_STATELESS_HEVC instead
of V4L2_CID_MPEG_VIDEO_HEVC be coherent with v4l2 naming convention.

Signed-off-by: Benjamin Gaignard <[email protected]>
Reviewed-by: Nicolas Dufresne <[email protected]>
---
.../media/v4l/ext-ctrls-codec.rst | 26 +++++++--------
drivers/media/v4l2-core/v4l2-ctrls-defs.c | 32 +++++++++----------
drivers/staging/media/hantro/hantro_drv.c | 26 +++++++--------
drivers/staging/media/hantro/hantro_hevc.c | 8 ++---
drivers/staging/media/sunxi/cedrus/cedrus.c | 24 +++++++-------
.../staging/media/sunxi/cedrus/cedrus_dec.c | 10 +++---
include/media/hevc-ctrls.h | 26 +++++++--------
7 files changed, 76 insertions(+), 76 deletions(-)

diff --git a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
index dbb08603217b..c679b17b4426 100644
--- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
+++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
@@ -2639,7 +2639,7 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -

.. _v4l2-mpeg-hevc:

-``V4L2_CID_MPEG_VIDEO_HEVC_SPS (struct)``
+``V4L2_CID_STATELESS_HEVC_SPS (struct)``
Specifies the Sequence Parameter Set fields (as extracted from the
bitstream) for the associated HEVC slice data.
These bitstream parameters are defined according to :ref:`hevc`.
@@ -2792,7 +2792,7 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -

\normalsize

-``V4L2_CID_MPEG_VIDEO_HEVC_PPS (struct)``
+``V4L2_CID_STATELESS_HEVC_PPS (struct)``
Specifies the Picture Parameter Set fields (as extracted from the
bitstream) for the associated HEVC slice data.
These bitstream parameters are defined according to :ref:`hevc`.
@@ -2945,7 +2945,7 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -

\normalsize

-``V4L2_CID_MPEG_VIDEO_HEVC_SLICE_PARAMS (struct)``
+``V4L2_CID_STATELESS_HEVC_SLICE_PARAMS (struct)``
Specifies various slice-specific parameters, especially from the NAL unit
header, general slice segment header and weighted prediction parameter
parts of the bitstream.
@@ -3107,7 +3107,7 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -

\normalsize

-``V4L2_CID_MPEG_VIDEO_HEVC_SCALING_MATRIX (struct)``
+``V4L2_CID_STATELESS_HEVC_SCALING_MATRIX (struct)``
Specifies the HEVC scaling matrix parameters used for the scaling process
for transform coefficients.
These matrix and parameters are defined according to :ref:`hevc`.
@@ -3257,7 +3257,7 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -

\normalsize

-``V4L2_CID_MPEG_VIDEO_HEVC_DECODE_MODE (enum)``
+``V4L2_CID_STATELESS_HEVC_DECODE_MODE (enum)``
Specifies the decoding mode to use. Currently exposes slice-based and
frame-based decoding but new modes might be added later on.
This control is used as a modifier for V4L2_PIX_FMT_HEVC_SLICE
@@ -3272,7 +3272,7 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
This menu control is not yet part of the public kernel API and
it is expected to change.

-.. c:type:: v4l2_mpeg_video_hevc_decode_mode
+.. c:type:: v4l2_stateless_hevc_decode_mode

.. raw:: latex

@@ -3285,11 +3285,11 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
:stub-columns: 0
:widths: 1 1 2

- * - ``V4L2_MPEG_VIDEO_HEVC_DECODE_MODE_SLICE_BASED``
+ * - ``V4L2_STATELESS_HEVC_DECODE_MODE_SLICE_BASED``
- 0
- Decoding is done at the slice granularity.
The OUTPUT buffer must contain a single slice.
- * - ``V4L2_MPEG_VIDEO_HEVC_DECODE_MODE_FRAME_BASED``
+ * - ``V4L2_STATELESS_HEVC_DECODE_MODE_FRAME_BASED``
- 1
- Decoding is done at the frame granularity.
The OUTPUT buffer must contain all slices needed to decode the
@@ -3299,7 +3299,7 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -

\normalsize

-``V4L2_CID_MPEG_VIDEO_HEVC_START_CODE (enum)``
+``V4L2_CID_STATELESS_HEVC_START_CODE (enum)``
Specifies the HEVC slice start code expected for each slice.
This control is used as a modifier for V4L2_PIX_FMT_HEVC_SLICE
pixel format. Applications that support V4L2_PIX_FMT_HEVC_SLICE
@@ -3313,7 +3313,7 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
This menu control is not yet part of the public kernel API and
it is expected to change.

-.. c:type:: v4l2_mpeg_video_hevc_start_code
+.. c:type:: v4l2_stateless_hevc_start_code

.. tabularcolumns:: |p{9.2cm}|p{0.6cm}|p{7.5cm}|

@@ -3322,13 +3322,13 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
:stub-columns: 0
:widths: 1 1 2

- * - ``V4L2_MPEG_VIDEO_HEVC_START_CODE_NONE``
+ * - ``V4L2_STATELESS_HEVC_START_CODE_NONE``
- 0
- Selecting this value specifies that HEVC slices are passed
to the driver without any start code. The bitstream data should be
according to :ref:`hevc` 7.3.1.1 General NAL unit syntax, hence
contains emulation prevention bytes when required.
- * - ``V4L2_MPEG_VIDEO_HEVC_START_CODE_ANNEX_B``
+ * - ``V4L2_STATELESS_HEVC_START_CODE_ANNEX_B``
- 1
- Selecting this value specifies that HEVC slices are expected
to be prefixed by Annex B start codes. According to :ref:`hevc`
@@ -3361,7 +3361,7 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
This provides a bitmask which consists of bits [0, LTR_COUNT-1].
This is applicable to the H264 and HEVC encoders.

-``V4L2_CID_MPEG_VIDEO_HEVC_DECODE_PARAMS (struct)``
+``V4L2_CID_STATELESS_HEVC_DECODE_PARAMS (struct)``
Specifies various decode parameters, especially the references picture order
count (POC) for all the lists (short, long, before, current, after) and the
number of entries for each of them.
diff --git a/drivers/media/v4l2-core/v4l2-ctrls-defs.c b/drivers/media/v4l2-core/v4l2-ctrls-defs.c
index 54ca4e6b820b..4b68cbe23309 100644
--- a/drivers/media/v4l2-core/v4l2-ctrls-defs.c
+++ b/drivers/media/v4l2-core/v4l2-ctrls-defs.c
@@ -699,9 +699,9 @@ const char * const *v4l2_ctrl_get_menu(u32 id)
return hevc_tier;
case V4L2_CID_MPEG_VIDEO_HEVC_LOOP_FILTER_MODE:
return hevc_loop_filter_mode;
- case V4L2_CID_MPEG_VIDEO_HEVC_DECODE_MODE:
+ case V4L2_CID_STATELESS_HEVC_DECODE_MODE:
return hevc_decode_mode;
- case V4L2_CID_MPEG_VIDEO_HEVC_START_CODE:
+ case V4L2_CID_STATELESS_HEVC_START_CODE:
return hevc_start_code;
case V4L2_CID_CAMERA_ORIENTATION:
return camera_orientation;
@@ -995,13 +995,6 @@ const char *v4l2_ctrl_get_name(u32 id)
case V4L2_CID_MPEG_VIDEO_HEVC_SIZE_OF_LENGTH_FIELD: return "HEVC Size of Length Field";
case V4L2_CID_MPEG_VIDEO_REF_NUMBER_FOR_PFRAMES: return "Reference Frames for a P-Frame";
case V4L2_CID_MPEG_VIDEO_PREPEND_SPSPPS_TO_IDR: return "Prepend SPS and PPS to IDR";
- case V4L2_CID_MPEG_VIDEO_HEVC_SPS: return "HEVC Sequence Parameter Set";
- case V4L2_CID_MPEG_VIDEO_HEVC_PPS: return "HEVC Picture Parameter Set";
- case V4L2_CID_MPEG_VIDEO_HEVC_SLICE_PARAMS: return "HEVC Slice Parameters";
- case V4L2_CID_MPEG_VIDEO_HEVC_SCALING_MATRIX: return "HEVC Scaling Matrix";
- case V4L2_CID_MPEG_VIDEO_HEVC_DECODE_PARAMS: return "HEVC Decode Parameters";
- case V4L2_CID_MPEG_VIDEO_HEVC_DECODE_MODE: return "HEVC Decode Mode";
- case V4L2_CID_MPEG_VIDEO_HEVC_START_CODE: return "HEVC Start Code";

/* CAMERA controls */
/* Keep the order of the 'case's the same as in v4l2-controls.h! */
@@ -1180,6 +1173,13 @@ const char *v4l2_ctrl_get_name(u32 id)
case V4L2_CID_STATELESS_MPEG2_QUANTISATION: return "MPEG-2 Quantisation Matrices";
case V4L2_CID_STATELESS_VP9_COMPRESSED_HDR: return "VP9 Probabilities Updates";
case V4L2_CID_STATELESS_VP9_FRAME: return "VP9 Frame Decode Parameters";
+ case V4L2_CID_STATELESS_HEVC_SPS: return "HEVC Sequence Parameter Set";
+ case V4L2_CID_STATELESS_HEVC_PPS: return "HEVC Picture Parameter Set";
+ case V4L2_CID_STATELESS_HEVC_SLICE_PARAMS: return "HEVC Slice Parameters";
+ case V4L2_CID_STATELESS_HEVC_SCALING_MATRIX: return "HEVC Scaling Matrix";
+ case V4L2_CID_STATELESS_HEVC_DECODE_PARAMS: return "HEVC Decode Parameters";
+ case V4L2_CID_STATELESS_HEVC_DECODE_MODE: return "HEVC Decode Mode";
+ case V4L2_CID_STATELESS_HEVC_START_CODE: return "HEVC Start Code";

/* Colorimetry controls */
/* Keep the order of the 'case's the same as in v4l2-controls.h! */
@@ -1355,8 +1355,8 @@ void v4l2_ctrl_fill(u32 id, const char **name, enum v4l2_ctrl_type *type,
case V4L2_CID_MPEG_VIDEO_HEVC_SIZE_OF_LENGTH_FIELD:
case V4L2_CID_MPEG_VIDEO_HEVC_TIER:
case V4L2_CID_MPEG_VIDEO_HEVC_LOOP_FILTER_MODE:
- case V4L2_CID_MPEG_VIDEO_HEVC_DECODE_MODE:
- case V4L2_CID_MPEG_VIDEO_HEVC_START_CODE:
+ case V4L2_CID_STATELESS_HEVC_DECODE_MODE:
+ case V4L2_CID_STATELESS_HEVC_START_CODE:
case V4L2_CID_STATELESS_H264_DECODE_MODE:
case V4L2_CID_STATELESS_H264_START_CODE:
case V4L2_CID_CAMERA_ORIENTATION:
@@ -1493,19 +1493,19 @@ void v4l2_ctrl_fill(u32 id, const char **name, enum v4l2_ctrl_type *type,
case V4L2_CID_STATELESS_VP8_FRAME:
*type = V4L2_CTRL_TYPE_VP8_FRAME;
break;
- case V4L2_CID_MPEG_VIDEO_HEVC_SPS:
+ case V4L2_CID_STATELESS_HEVC_SPS:
*type = V4L2_CTRL_TYPE_HEVC_SPS;
break;
- case V4L2_CID_MPEG_VIDEO_HEVC_PPS:
+ case V4L2_CID_STATELESS_HEVC_PPS:
*type = V4L2_CTRL_TYPE_HEVC_PPS;
break;
- case V4L2_CID_MPEG_VIDEO_HEVC_SLICE_PARAMS:
+ case V4L2_CID_STATELESS_HEVC_SLICE_PARAMS:
*type = V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS;
break;
- case V4L2_CID_MPEG_VIDEO_HEVC_SCALING_MATRIX:
+ case V4L2_CID_STATELESS_HEVC_SCALING_MATRIX:
*type = V4L2_CTRL_TYPE_HEVC_SCALING_MATRIX;
break;
- case V4L2_CID_MPEG_VIDEO_HEVC_DECODE_PARAMS:
+ case V4L2_CID_STATELESS_HEVC_DECODE_PARAMS:
*type = V4L2_CTRL_TYPE_HEVC_DECODE_PARAMS;
break;
case V4L2_CID_STATELESS_VP9_COMPRESSED_HDR:
diff --git a/drivers/staging/media/hantro/hantro_drv.c b/drivers/staging/media/hantro/hantro_drv.c
index dc768884cb79..6f58c259d8fc 100644
--- a/drivers/staging/media/hantro/hantro_drv.c
+++ b/drivers/staging/media/hantro/hantro_drv.c
@@ -255,7 +255,7 @@ static int hantro_try_ctrl(struct v4l2_ctrl *ctrl)
if (sps->bit_depth_luma_minus8 != 0)
/* Only 8-bit is supported */
return -EINVAL;
- } else if (ctrl->id == V4L2_CID_MPEG_VIDEO_HEVC_SPS) {
+ } else if (ctrl->id == V4L2_CID_STATELESS_HEVC_SPS) {
const struct v4l2_ctrl_hevc_sps *sps = ctrl->p_new.p_hevc_sps;

if (sps->bit_depth_luma_minus8 != sps->bit_depth_chroma_minus8)
@@ -428,18 +428,18 @@ static const struct hantro_ctrl controls[] = {
}, {
.codec = HANTRO_HEVC_DECODER,
.cfg = {
- .id = V4L2_CID_MPEG_VIDEO_HEVC_DECODE_MODE,
- .min = V4L2_MPEG_VIDEO_HEVC_DECODE_MODE_FRAME_BASED,
- .max = V4L2_MPEG_VIDEO_HEVC_DECODE_MODE_FRAME_BASED,
- .def = V4L2_MPEG_VIDEO_HEVC_DECODE_MODE_FRAME_BASED,
+ .id = V4L2_CID_STATELESS_HEVC_DECODE_MODE,
+ .min = V4L2_STATELESS_HEVC_DECODE_MODE_FRAME_BASED,
+ .max = V4L2_STATELESS_HEVC_DECODE_MODE_FRAME_BASED,
+ .def = V4L2_STATELESS_HEVC_DECODE_MODE_FRAME_BASED,
},
}, {
.codec = HANTRO_HEVC_DECODER,
.cfg = {
- .id = V4L2_CID_MPEG_VIDEO_HEVC_START_CODE,
- .min = V4L2_MPEG_VIDEO_HEVC_START_CODE_ANNEX_B,
- .max = V4L2_MPEG_VIDEO_HEVC_START_CODE_ANNEX_B,
- .def = V4L2_MPEG_VIDEO_HEVC_START_CODE_ANNEX_B,
+ .id = V4L2_CID_STATELESS_HEVC_START_CODE,
+ .min = V4L2_STATELESS_HEVC_START_CODE_ANNEX_B,
+ .max = V4L2_STATELESS_HEVC_START_CODE_ANNEX_B,
+ .def = V4L2_STATELESS_HEVC_START_CODE_ANNEX_B,
},
}, {
.codec = HANTRO_HEVC_DECODER,
@@ -459,23 +459,23 @@ static const struct hantro_ctrl controls[] = {
}, {
.codec = HANTRO_HEVC_DECODER,
.cfg = {
- .id = V4L2_CID_MPEG_VIDEO_HEVC_SPS,
+ .id = V4L2_CID_STATELESS_HEVC_SPS,
.ops = &hantro_ctrl_ops,
},
}, {
.codec = HANTRO_HEVC_DECODER,
.cfg = {
- .id = V4L2_CID_MPEG_VIDEO_HEVC_PPS,
+ .id = V4L2_CID_STATELESS_HEVC_PPS,
},
}, {
.codec = HANTRO_HEVC_DECODER,
.cfg = {
- .id = V4L2_CID_MPEG_VIDEO_HEVC_DECODE_PARAMS,
+ .id = V4L2_CID_STATELESS_HEVC_DECODE_PARAMS,
},
}, {
.codec = HANTRO_HEVC_DECODER,
.cfg = {
- .id = V4L2_CID_MPEG_VIDEO_HEVC_SCALING_MATRIX,
+ .id = V4L2_CID_STATELESS_HEVC_SCALING_MATRIX,
},
}, {
.codec = HANTRO_HEVC_DECODER,
diff --git a/drivers/staging/media/hantro/hantro_hevc.c b/drivers/staging/media/hantro/hantro_hevc.c
index b49a41d7ae91..b6ec86d03d91 100644
--- a/drivers/staging/media/hantro/hantro_hevc.c
+++ b/drivers/staging/media/hantro/hantro_hevc.c
@@ -201,22 +201,22 @@ int hantro_hevc_dec_prepare_run(struct hantro_ctx *ctx)
hantro_start_prepare_run(ctx);

ctrls->decode_params =
- hantro_get_ctrl(ctx, V4L2_CID_MPEG_VIDEO_HEVC_DECODE_PARAMS);
+ hantro_get_ctrl(ctx, V4L2_CID_STATELESS_HEVC_DECODE_PARAMS);
if (WARN_ON(!ctrls->decode_params))
return -EINVAL;

ctrls->scaling =
- hantro_get_ctrl(ctx, V4L2_CID_MPEG_VIDEO_HEVC_SCALING_MATRIX);
+ hantro_get_ctrl(ctx, V4L2_CID_STATELESS_HEVC_SCALING_MATRIX);
if (WARN_ON(!ctrls->scaling))
return -EINVAL;

ctrls->sps =
- hantro_get_ctrl(ctx, V4L2_CID_MPEG_VIDEO_HEVC_SPS);
+ hantro_get_ctrl(ctx, V4L2_CID_STATELESS_HEVC_SPS);
if (WARN_ON(!ctrls->sps))
return -EINVAL;

ctrls->pps =
- hantro_get_ctrl(ctx, V4L2_CID_MPEG_VIDEO_HEVC_PPS);
+ hantro_get_ctrl(ctx, V4L2_CID_STATELESS_HEVC_PPS);
if (WARN_ON(!ctrls->pps))
return -EINVAL;

diff --git a/drivers/staging/media/sunxi/cedrus/cedrus.c b/drivers/staging/media/sunxi/cedrus/cedrus.c
index 68b3dcdb5df3..87be975a72b6 100644
--- a/drivers/staging/media/sunxi/cedrus/cedrus.c
+++ b/drivers/staging/media/sunxi/cedrus/cedrus.c
@@ -42,7 +42,7 @@ static int cedrus_try_ctrl(struct v4l2_ctrl *ctrl)
if (sps->bit_depth_luma_minus8 != 0)
/* Only 8-bit is supported */
return -EINVAL;
- } else if (ctrl->id == V4L2_CID_MPEG_VIDEO_HEVC_SPS) {
+ } else if (ctrl->id == V4L2_CID_STATELESS_HEVC_SPS) {
const struct v4l2_ctrl_hevc_sps *sps = ctrl->p_new.p_hevc_sps;
struct cedrus_ctx *ctx = container_of(ctrl->handler, struct cedrus_ctx, hdl);

@@ -164,42 +164,42 @@ static const struct cedrus_control cedrus_controls[] = {
},
{
.cfg = {
- .id = V4L2_CID_MPEG_VIDEO_HEVC_SPS,
+ .id = V4L2_CID_STATELESS_HEVC_SPS,
.ops = &cedrus_ctrl_ops,
},
.codec = CEDRUS_CODEC_H265,
},
{
.cfg = {
- .id = V4L2_CID_MPEG_VIDEO_HEVC_PPS,
+ .id = V4L2_CID_STATELESS_HEVC_PPS,
},
.codec = CEDRUS_CODEC_H265,
},
{
.cfg = {
- .id = V4L2_CID_MPEG_VIDEO_HEVC_SLICE_PARAMS,
+ .id = V4L2_CID_STATELESS_HEVC_SLICE_PARAMS,
},
.codec = CEDRUS_CODEC_H265,
},
{
.cfg = {
- .id = V4L2_CID_MPEG_VIDEO_HEVC_SCALING_MATRIX,
+ .id = V4L2_CID_STATELESS_HEVC_SCALING_MATRIX,
},
.codec = CEDRUS_CODEC_H265,
},
{
.cfg = {
- .id = V4L2_CID_MPEG_VIDEO_HEVC_DECODE_MODE,
- .max = V4L2_MPEG_VIDEO_HEVC_DECODE_MODE_SLICE_BASED,
- .def = V4L2_MPEG_VIDEO_HEVC_DECODE_MODE_SLICE_BASED,
+ .id = V4L2_CID_STATELESS_HEVC_DECODE_MODE,
+ .max = V4L2_STATELESS_HEVC_DECODE_MODE_SLICE_BASED,
+ .def = V4L2_STATELESS_HEVC_DECODE_MODE_SLICE_BASED,
},
.codec = CEDRUS_CODEC_H265,
},
{
.cfg = {
- .id = V4L2_CID_MPEG_VIDEO_HEVC_START_CODE,
- .max = V4L2_MPEG_VIDEO_HEVC_START_CODE_NONE,
- .def = V4L2_MPEG_VIDEO_HEVC_START_CODE_NONE,
+ .id = V4L2_CID_STATELESS_HEVC_START_CODE,
+ .max = V4L2_STATELESS_HEVC_START_CODE_NONE,
+ .def = V4L2_STATELESS_HEVC_START_CODE_NONE,
},
.codec = CEDRUS_CODEC_H265,
},
@@ -211,7 +211,7 @@ static const struct cedrus_control cedrus_controls[] = {
},
{
.cfg = {
- .id = V4L2_CID_MPEG_VIDEO_HEVC_DECODE_PARAMS,
+ .id = V4L2_CID_STATELESS_HEVC_DECODE_PARAMS,
},
.codec = CEDRUS_CODEC_H265,
},
diff --git a/drivers/staging/media/sunxi/cedrus/cedrus_dec.c b/drivers/staging/media/sunxi/cedrus/cedrus_dec.c
index 9c7200299465..aabe6253078e 100644
--- a/drivers/staging/media/sunxi/cedrus/cedrus_dec.c
+++ b/drivers/staging/media/sunxi/cedrus/cedrus_dec.c
@@ -65,15 +65,15 @@ void cedrus_device_run(void *priv)

case V4L2_PIX_FMT_HEVC_SLICE:
run.h265.sps = cedrus_find_control_data(ctx,
- V4L2_CID_MPEG_VIDEO_HEVC_SPS);
+ V4L2_CID_STATELESS_HEVC_SPS);
run.h265.pps = cedrus_find_control_data(ctx,
- V4L2_CID_MPEG_VIDEO_HEVC_PPS);
+ V4L2_CID_STATELESS_HEVC_PPS);
run.h265.slice_params = cedrus_find_control_data(ctx,
- V4L2_CID_MPEG_VIDEO_HEVC_SLICE_PARAMS);
+ V4L2_CID_STATELESS_HEVC_SLICE_PARAMS);
run.h265.decode_params = cedrus_find_control_data(ctx,
- V4L2_CID_MPEG_VIDEO_HEVC_DECODE_PARAMS);
+ V4L2_CID_STATELESS_HEVC_DECODE_PARAMS);
run.h265.scaling_matrix = cedrus_find_control_data(ctx,
- V4L2_CID_MPEG_VIDEO_HEVC_SCALING_MATRIX);
+ V4L2_CID_STATELESS_HEVC_SCALING_MATRIX);
break;

case V4L2_PIX_FMT_VP8_FRAME:
diff --git a/include/media/hevc-ctrls.h b/include/media/hevc-ctrls.h
index a329e086a89a..b3540167df9e 100644
--- a/include/media/hevc-ctrls.h
+++ b/include/media/hevc-ctrls.h
@@ -16,13 +16,13 @@
/* The pixel format isn't stable at the moment and will likely be renamed. */
#define V4L2_PIX_FMT_HEVC_SLICE v4l2_fourcc('S', '2', '6', '5') /* HEVC parsed slices */

-#define V4L2_CID_MPEG_VIDEO_HEVC_SPS (V4L2_CID_CODEC_BASE + 1008)
-#define V4L2_CID_MPEG_VIDEO_HEVC_PPS (V4L2_CID_CODEC_BASE + 1009)
-#define V4L2_CID_MPEG_VIDEO_HEVC_SLICE_PARAMS (V4L2_CID_CODEC_BASE + 1010)
-#define V4L2_CID_MPEG_VIDEO_HEVC_SCALING_MATRIX (V4L2_CID_CODEC_BASE + 1011)
-#define V4L2_CID_MPEG_VIDEO_HEVC_DECODE_PARAMS (V4L2_CID_CODEC_BASE + 1012)
-#define V4L2_CID_MPEG_VIDEO_HEVC_DECODE_MODE (V4L2_CID_CODEC_BASE + 1015)
-#define V4L2_CID_MPEG_VIDEO_HEVC_START_CODE (V4L2_CID_CODEC_BASE + 1016)
+#define V4L2_CID_STATELESS_HEVC_SPS (V4L2_CID_CODEC_BASE + 1008)
+#define V4L2_CID_STATELESS_HEVC_PPS (V4L2_CID_CODEC_BASE + 1009)
+#define V4L2_CID_STATELESS_HEVC_SLICE_PARAMS (V4L2_CID_CODEC_BASE + 1010)
+#define V4L2_CID_STATELESS_HEVC_SCALING_MATRIX (V4L2_CID_CODEC_BASE + 1011)
+#define V4L2_CID_STATELESS_HEVC_DECODE_PARAMS (V4L2_CID_CODEC_BASE + 1012)
+#define V4L2_CID_STATELESS_HEVC_DECODE_MODE (V4L2_CID_CODEC_BASE + 1015)
+#define V4L2_CID_STATELESS_HEVC_START_CODE (V4L2_CID_CODEC_BASE + 1016)

/* enum v4l2_ctrl_type type values */
#define V4L2_CTRL_TYPE_HEVC_SPS 0x0120
@@ -31,14 +31,14 @@
#define V4L2_CTRL_TYPE_HEVC_SCALING_MATRIX 0x0123
#define V4L2_CTRL_TYPE_HEVC_DECODE_PARAMS 0x0124

-enum v4l2_mpeg_video_hevc_decode_mode {
- V4L2_MPEG_VIDEO_HEVC_DECODE_MODE_SLICE_BASED,
- V4L2_MPEG_VIDEO_HEVC_DECODE_MODE_FRAME_BASED,
+enum v4l2_stateless_hevc_decode_mode {
+ V4L2_STATELESS_HEVC_DECODE_MODE_SLICE_BASED,
+ V4L2_STATELESS_HEVC_DECODE_MODE_FRAME_BASED,
};

-enum v4l2_mpeg_video_hevc_start_code {
- V4L2_MPEG_VIDEO_HEVC_START_CODE_NONE,
- V4L2_MPEG_VIDEO_HEVC_START_CODE_ANNEX_B,
+enum v4l2_stateless_hevc_start_code {
+ V4L2_STATELESS_HEVC_START_CODE_NONE,
+ V4L2_STATELESS_HEVC_START_CODE_ANNEX_B,
};

#define V4L2_HEVC_SLICE_TYPE_B 0
--
2.32.0

2022-04-07 21:24:46

by Benjamin Gaignard

[permalink] [raw]
Subject: [PATCH v5 04/17] media: uapi: HEVC: Add missing fields in HEVC controls

Complete the HEVC controls with missing fields from H.265 specifications.
Even if these fields aren't used by the current mainlined drivers
they will be need for (at least) rkvdec driver.

Signed-off-by: Benjamin Gaignard <[email protected]>
---
.../media/v4l/ext-ctrls-codec.rst | 19 +++++++++++++++++++
include/media/hevc-ctrls.h | 6 +++++-
2 files changed, 24 insertions(+), 1 deletion(-)

diff --git a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
index 4cd7c541fc30..dbb08603217b 100644
--- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
+++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
@@ -2661,6 +2661,16 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
:stub-columns: 0
:widths: 1 1 2

+ * - __u8
+ - ``video_parameter_set_id``
+ - Specifies the value of the vps_video_parameter_set_id of the active VPS
+ as descibed in section "7.4.3.2.1 General sequence parameter set RBSP semantics"
+ of H.265 specifications.
+ * - __u8
+ - ``seq_parameter_set_id``
+ - Provides an identifier for the SPS for reference by other syntax elements
+ as descibed in section "7.4.3.2.1 General sequence parameter set RBSP semantics"
+ of H.265 specifications.
* - __u16
- ``pic_width_in_luma_samples``
-
@@ -2800,6 +2810,9 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
:stub-columns: 0
:widths: 1 1 2

+ * - __u8
+ - ``pic_parameter_set_id``
+ - Identifies the PPS for reference by other syntax elements.
* - __u8
- ``num_extra_slice_header_bits``
-
@@ -3026,6 +3039,12 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
* - __u8
- ``ref_idx_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
- The list of L1 reference elements as indices in the DPB.
+ * - __u16
+ - ``short_term_ref_pic_set_size``
+ - Specifies the size of short-term reference pictures set included in the SPS.
+ * - __u16
+ - ``long_term_ref_pic_set_size``
+ - Specifies the size of long-term reference pictures set include in the SPS.
* - __u8
- ``padding``
- Applications and drivers must set this to zero.
diff --git a/include/media/hevc-ctrls.h b/include/media/hevc-ctrls.h
index 01ccda48d8c5..a329e086a89a 100644
--- a/include/media/hevc-ctrls.h
+++ b/include/media/hevc-ctrls.h
@@ -58,6 +58,8 @@ enum v4l2_mpeg_video_hevc_start_code {
/* The controls are not stable at the moment and will likely be reworked. */
struct v4l2_ctrl_hevc_sps {
/* ISO/IEC 23008-2, ITU-T Rec. H.265: Sequence parameter set */
+ __u8 video_parameter_set_id;
+ __u8 seq_parameter_set_id;
__u16 pic_width_in_luma_samples;
__u16 pic_height_in_luma_samples;
__u8 bit_depth_luma_minus8;
@@ -108,6 +110,7 @@ struct v4l2_ctrl_hevc_sps {

struct v4l2_ctrl_hevc_pps {
/* ISO/IEC 23008-2, ITU-T Rec. H.265: Picture parameter set */
+ __u8 pic_parameter_set_id;
__u8 num_extra_slice_header_bits;
__u8 num_ref_idx_l0_default_active_minus1;
__u8 num_ref_idx_l1_default_active_minus1;
@@ -199,7 +202,8 @@ struct v4l2_ctrl_hevc_slice_params {
__u32 slice_segment_addr;
__u8 ref_idx_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
__u8 ref_idx_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
-
+ __u16 short_term_ref_pic_set_size;
+ __u16 long_term_ref_pic_set_size;
__u8 padding;

/* ISO/IEC 23008-2, ITU-T Rec. H.265: Weighted prediction parameter */
--
2.32.0

2022-04-08 15:13:12

by [email protected]

[permalink] [raw]
Subject: Re: [PATCH v5 17/17] media: uapi: move HEVC stateless controls out of staging

Hey Benjamin,

On 07.04.2022 17:29, Benjamin Gaignard wrote:
>HEVC uAPI is used by 2 mainline drivers (Hantro, Cedrus)
>and at least 2 out-of-tree drivers (rkvdec, RPi).
>The uAPI has reviewed so it is time to make it 'public' by

s/has reviewed/has been reviewed/

>un-staging it.

I was unable to apply this patch and had to make some changes, I reply to
this message with my version.

Greetings,
Sebastian

>
>Signed-off-by: Benjamin Gaignard <[email protected]>
>---
> .../media/v4l/ext-ctrls-codec-stateless.rst | 882 +++++++++++++++++
> .../media/v4l/ext-ctrls-codec.rst | 888 ------------------
> .../media/v4l/pixfmt-compressed.rst | 2 +-
> .../media/v4l/vidioc-g-ext-ctrls.rst | 20 +
> include/media/hevc-ctrls.h | 465 ---------
> include/media/v4l2-ctrls.h | 6 -
> include/uapi/linux/v4l2-controls.h | 448 +++++++++
> include/uapi/linux/videodev2.h | 5 +
> 8 files changed, 1356 insertions(+), 1360 deletions(-)
> delete mode 100644 include/media/hevc-ctrls.h
>
>diff --git a/Documentation/userspace-api/media/v4l/ext-ctrls-codec-stateless.rst b/Documentation/userspace-api/media/v4l/ext-ctrls-codec-stateless.rst
>index 6541e4c32b26..31560af6a797 100644
>--- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec-stateless.rst
>+++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec-stateless.rst
>@@ -2042,3 +2042,885 @@ This structure contains all loop filter related parameters. See sections
> - 0x2
> - When set, the bitstream contains additional syntax elements that
> specify which mode and reference frame deltas are to be updated.
>+
>+.. _v4l2-codec-stateless-hevc:
>+
>+``V4L2_CID_STATELESS_HEVC_SPS (struct)``
>+ Specifies the Sequence Parameter Set fields (as extracted from the
>+ bitstream) for the associated HEVC slice data.
>+ These bitstream parameters are defined according to :ref:`hevc`.
>+ They are described in section 7.4.3.2 "Sequence parameter set RBSP
>+ semantics" of the specification.
>+
>+.. c:type:: v4l2_ctrl_hevc_sps
>+
>+.. raw:: latex
>+
>+ \small
>+
>+.. tabularcolumns:: |p{1.2cm}|p{9.2cm}|p{6.9cm}|
>+
>+.. cssclass:: longtable
>+
>+.. flat-table:: struct v4l2_ctrl_hevc_sps
>+ :header-rows: 0
>+ :stub-columns: 0
>+ :widths: 1 1 2
>+
>+ * - __u8
>+ - ``video_parameter_set_id``
>+ - Specifies the value of the vps_video_parameter_set_id of the active VPS
>+ as descibed in section "7.4.3.2.1 General sequence parameter set RBSP semantics"
>+ of H.265 specifications.
>+ * - __u8
>+ - ``seq_parameter_set_id``
>+ - Provides an identifier for the SPS for reference by other syntax elements
>+ as descibed in section "7.4.3.2.1 General sequence parameter set RBSP semantics"
>+ of H.265 specifications.
>+ * - __u16
>+ - ``pic_width_in_luma_samples``
>+ - Specifies the width of each decoded picture in units of luma samples.
>+ * - __u16
>+ - ``pic_height_in_luma_samples``
>+ - Specifies the height of each decoded picture in units of luma samples.
>+ * - __u8
>+ - ``bit_depth_luma_minus8``
>+ - Specifies the bit depth of the samples of the luma array.
>+ * - __u8
>+ - ``bit_depth_chroma_minus8``
>+ - Specifies the bit depth of the samples of the chroma arrays.
>+ * - __u8
>+ - ``log2_max_pic_order_cnt_lsb_minus4``
>+ - Specifies the value of the variable MaxPicOrderCntLsb.
>+ * - __u8
>+ - ``sps_max_dec_pic_buffering_minus1``
>+ - Plus 1 specifies the maximum required size of the decoded picture buffer for
>+ the CVS
>+ * - __u8
>+ - ``sps_max_num_reorder_pics``
>+ - Indicates the maximum allowed number of pictures.
>+ * - __u8
>+ - ``sps_max_latency_increase_plus1``
>+ - Not equal to 0 is used to compute the value of SpsMaxLatencyPictures[i].
>+ * - __u8
>+ - ``log2_min_luma_coding_block_size_minus3``
>+ - Plus 3 specifies the minimum luma coding block size.
>+ * - __u8
>+ - ``log2_diff_max_min_luma_coding_block_size``
>+ - Specifies the difference between the maximum and minimum luma coding block size.
>+ * - __u8
>+ - ``log2_min_luma_transform_block_size_minus2``
>+ - Plus 2 specifies the minimum luma transform block size.
>+ * - __u8
>+ - ``log2_diff_max_min_luma_transform_block_size``
>+ - Specifies the difference between the maximum and minimum luma transform block size.
>+ * - __u8
>+ - ``max_transform_hierarchy_depth_inter``
>+ - Specifies the maximum hierarchy depth for transform units of coding units coded
>+ in inter prediction mode.
>+ * - __u8
>+ - ``max_transform_hierarchy_depth_intra``
>+ - Specifies the maximum hierarchy depth for transform units of coding units coded in
>+ intra prediction mode.
>+ * - __u8
>+ - ``pcm_sample_bit_depth_luma_minus1``
>+ - Specifies the number of bits used to represent each of PCM sample values of the
>+ luma component.
>+ * - __u8
>+ - ``pcm_sample_bit_depth_chroma_minus1``
>+ - Specifies the number of bits used to represent each of PCM sample values of
>+ the chroma components.
>+ * - __u8
>+ - ``log2_min_pcm_luma_coding_block_size_minus3``
>+ - Plus 3 specifies the minimum size of coding blocks.
>+ * - __u8
>+ - ``log2_diff_max_min_pcm_luma_coding_block_size``
>+ - Specifies the difference between the maximum and minimum size of coding blocks.
>+ * - __u8
>+ - ``num_short_term_ref_pic_sets``
>+ - Specifies the number of st_ref_pic_set() syntax structures included in the SPS.
>+ * - __u8
>+ - ``num_long_term_ref_pics_sps``
>+ - Specifies the number of candidate long-term reference pictures that are
>+ specified in the SPS.
>+ * - __u8
>+ - ``chroma_format_idc``
>+ - Specifies the chroma sampling.
>+ * - __u8
>+ - ``sps_max_sub_layers_minus1``
>+ - plus 1 specifies the maximum number of temporal sub-layers.
>+ * - __u64
>+ - ``flags``
>+ - See :ref:`Sequence Parameter Set Flags <hevc_sps_flags>`
>+
>+.. raw:: latex
>+
>+ \normalsize
>+
>+.. _hevc_sps_flags:
>+
>+``Sequence Parameter Set Flags``
>+
>+.. raw:: latex
>+
>+ \small
>+
>+.. cssclass:: longtable
>+
>+.. flat-table::
>+ :header-rows: 0
>+ :stub-columns: 0
>+ :widths: 1 1 2
>+
>+ * - ``V4L2_HEVC_SPS_FLAG_SEPARATE_COLOUR_PLANE``
>+ - 0x00000001
>+ -
>+ * - ``V4L2_HEVC_SPS_FLAG_SCALING_LIST_ENABLED``
>+ - 0x00000002
>+ -
>+ * - ``V4L2_HEVC_SPS_FLAG_AMP_ENABLED``
>+ - 0x00000004
>+ -
>+ * - ``V4L2_HEVC_SPS_FLAG_SAMPLE_ADAPTIVE_OFFSET``
>+ - 0x00000008
>+ -
>+ * - ``V4L2_HEVC_SPS_FLAG_PCM_ENABLED``
>+ - 0x00000010
>+ -
>+ * - ``V4L2_HEVC_SPS_FLAG_PCM_LOOP_FILTER_DISABLED``
>+ - 0x00000020
>+ -
>+ * - ``V4L2_HEVC_SPS_FLAG_LONG_TERM_REF_PICS_PRESENT``
>+ - 0x00000040
>+ -
>+ * - ``V4L2_HEVC_SPS_FLAG_SPS_TEMPORAL_MVP_ENABLED``
>+ - 0x00000080
>+ -
>+ * - ``V4L2_HEVC_SPS_FLAG_STRONG_INTRA_SMOOTHING_ENABLED``
>+ - 0x00000100
>+ -
>+
>+.. raw:: latex
>+
>+ \normalsize
>+
>+``V4L2_CID_STATELESS_HEVC_PPS (struct)``
>+ Specifies the Picture Parameter Set fields (as extracted from the
>+ bitstream) for the associated HEVC slice data.
>+ These bitstream parameters are defined according to :ref:`hevc`.
>+ They are described in section 7.4.3.3 "Picture parameter set RBSP
>+ semantics" of the specification.
>+
>+.. c:type:: v4l2_ctrl_hevc_pps
>+
>+.. tabularcolumns:: |p{1.2cm}|p{8.6cm}|p{7.5cm}|
>+
>+.. cssclass:: longtable
>+
>+.. flat-table:: struct v4l2_ctrl_hevc_pps
>+ :header-rows: 0
>+ :stub-columns: 0
>+ :widths: 1 1 2
>+
>+ * - __u8
>+ - ``pic_parameter_set_id``
>+ - Identifies the PPS for reference by other syntax elements.
>+ * - __u8
>+ - ``num_extra_slice_header_bits``
>+ - Specifies the number of extra slice header bits that are present
>+ in the slice header RBSP for coded pictures referring to the PPS.
>+ * - __u8
>+ - ``num_ref_idx_l0_default_active_minus1``
>+ - Specifies the inferred value of num_ref_idx_l0_active_minus1
>+ * - __u8
>+ - ``num_ref_idx_l1_default_active_minus1``
>+ - Specifies the inferred value of num_ref_idx_l1_active_minus1
>+ * - __s8
>+ - ``init_qp_minus26``
>+ - Plus 26 specifies the initial value of SliceQp Y for each slice
>+ referring to the PPS.
>+ * - __u8
>+ - ``diff_cu_qp_delta_depth``
>+ - Specifies the difference between the luma coding tree block size
>+ and the minimum luma coding block size of coding units that
>+ convey cu_qp_delta_abs and cu_qp_delta_sign_flag.
>+ * - __s8
>+ - ``pps_cb_qp_offset``
>+ - Specify the offsets to the luma quantization parameter Cb.
>+ * - __s8
>+ - ``pps_cr_qp_offset``
>+ - Specify the offsets to the luma quantization parameter Cr.
>+ * - __u8
>+ - ``num_tile_columns_minus1``
>+ - Plus 1 specifies the number of tile columns partitioning the picture.
>+ * - __u8
>+ - ``num_tile_rows_minus1``
>+ - Plus 1 specifies the number of tile rows partitioning the picture.
>+ * - __u8
>+ - ``column_width_minus1[20]``
>+ - Plus 1 specifies the width of the i-th tile column in units of
>+ coding tree blocks.
>+ * - __u8
>+ - ``row_height_minus1[22]``
>+ - Plus 1 specifies the height of the i-th tile row in units of coding
>+ tree blocks.
>+ * - __s8
>+ - ``pps_beta_offset_div2``
>+ - Specify the default deblocking parameter offsets for beta divided by 2.
>+ * - __s8
>+ - ``pps_tc_offset_div2``
>+ - Specify the default deblocking parameter offsets for tC divided by 2.
>+ * - __u8
>+ - ``log2_parallel_merge_level_minus2``
>+ - Plus 2 specifies the value of the variable Log2ParMrgLevel.
>+ * - __u8
>+ - ``padding[4]``
>+ - Applications and drivers must set this to zero.
>+ * - __u64
>+ - ``flags``
>+ - See :ref:`Picture Parameter Set Flags <hevc_pps_flags>`
>+
>+.. _hevc_pps_flags:
>+
>+``Picture Parameter Set Flags``
>+
>+.. raw:: latex
>+
>+ \small
>+
>+.. flat-table::
>+ :header-rows: 0
>+ :stub-columns: 0
>+ :widths: 1 1 2
>+
>+ * - ``V4L2_HEVC_PPS_FLAG_DEPENDENT_SLICE_SEGMENT_ENABLED``
>+ - 0x00000001
>+ -
>+ * - ``V4L2_HEVC_PPS_FLAG_OUTPUT_FLAG_PRESENT``
>+ - 0x00000002
>+ -
>+ * - ``V4L2_HEVC_PPS_FLAG_SIGN_DATA_HIDING_ENABLED``
>+ - 0x00000004
>+ -
>+ * - ``V4L2_HEVC_PPS_FLAG_CABAC_INIT_PRESENT``
>+ - 0x00000008
>+ -
>+ * - ``V4L2_HEVC_PPS_FLAG_CONSTRAINED_INTRA_PRED``
>+ - 0x00000010
>+ -
>+ * - ``V4L2_HEVC_PPS_FLAG_TRANSFORM_SKIP_ENABLED``
>+ - 0x00000020
>+ -
>+ * - ``V4L2_HEVC_PPS_FLAG_CU_QP_DELTA_ENABLED``
>+ - 0x00000040
>+ -
>+ * - ``V4L2_HEVC_PPS_FLAG_PPS_SLICE_CHROMA_QP_OFFSETS_PRESENT``
>+ - 0x00000080
>+ -
>+ * - ``V4L2_HEVC_PPS_FLAG_WEIGHTED_PRED``
>+ - 0x00000100
>+ -
>+ * - ``V4L2_HEVC_PPS_FLAG_WEIGHTED_BIPRED``
>+ - 0x00000200
>+ -
>+ * - ``V4L2_HEVC_PPS_FLAG_TRANSQUANT_BYPASS_ENABLED``
>+ - 0x00000400
>+ -
>+ * - ``V4L2_HEVC_PPS_FLAG_TILES_ENABLED``
>+ - 0x00000800
>+ -
>+ * - ``V4L2_HEVC_PPS_FLAG_ENTROPY_CODING_SYNC_ENABLED``
>+ - 0x00001000
>+ -
>+ * - ``V4L2_HEVC_PPS_FLAG_LOOP_FILTER_ACROSS_TILES_ENABLED``
>+ - 0x00002000
>+ -
>+ * - ``V4L2_HEVC_PPS_FLAG_PPS_LOOP_FILTER_ACROSS_SLICES_ENABLED``
>+ - 0x00004000
>+ -
>+ * - ``V4L2_HEVC_PPS_FLAG_DEBLOCKING_FILTER_OVERRIDE_ENABLED``
>+ - 0x00008000
>+ -
>+ * - ``V4L2_HEVC_PPS_FLAG_PPS_DISABLE_DEBLOCKING_FILTER``
>+ - 0x00010000
>+ -
>+ * - ``V4L2_HEVC_PPS_FLAG_LISTS_MODIFICATION_PRESENT``
>+ - 0x00020000
>+ -
>+ * - ``V4L2_HEVC_PPS_FLAG_SLICE_SEGMENT_HEADER_EXTENSION_PRESENT``
>+ - 0x00040000
>+ -
>+ * - ``V4L2_HEVC_PPS_FLAG_DEBLOCKING_FILTER_CONTROL_PRESENT``
>+ - 0x00080000
>+ - Specifies the presence of deblocking filter control syntax elements in
>+ the PPS
>+ * - ``V4L2_HEVC_PPS_FLAG_UNIFORM_SPACING``
>+ - 0x00100000
>+ - Specifies that tile column boundaries and likewise tile row boundaries
>+ are distributed uniformly across the picture
>+
>+.. raw:: latex
>+
>+ \normalsize
>+
>+``V4L2_CID_STATELESS_HEVC_SLICE_PARAMS (struct)``
>+ Specifies various slice-specific parameters, especially from the NAL unit
>+ header, general slice segment header and weighted prediction parameter
>+ parts of the bitstream.
>+ These bitstream parameters are defined according to :ref:`hevc`.
>+ They are described in section 7.4.7 "General slice segment header
>+ semantics" of the specification.
>+ This control is a dynamically sized 1-dimensional array,
>+ V4L2_CTRL_FLAG_DYNAMIC_ARRAY flag must be set when using it.
>+
>+.. c:type:: v4l2_ctrl_hevc_slice_params
>+
>+.. raw:: latex
>+
>+ \scriptsize
>+
>+.. tabularcolumns:: |p{5.4cm}|p{6.8cm}|p{5.1cm}|
>+
>+.. cssclass:: longtable
>+
>+.. flat-table:: struct v4l2_ctrl_hevc_slice_params
>+ :header-rows: 0
>+ :stub-columns: 0
>+ :widths: 1 1 2
>+
>+ * - __u32
>+ - ``bit_size``
>+ - Size (in bits) of the current slice data.
>+ * - __u32
>+ - ``data_byte_offset``
>+ - Offset (in byte) to the video data in the current slice data.
>+ * - __u32
>+ - ``num_entry_point_offsets``
>+ - Specifies the number of entry point offset syntax elements in the slice header.
>+ * - __u8
>+ - ``nal_unit_type``
>+ - Specifies the coding type of the slice (B, P or I).
>+ * - __u8
>+ - ``nuh_temporal_id_plus1``
>+ - Minus 1 specifies a temporal identifier for the NAL unit.
>+ * - __u8
>+ - ``slice_type``
>+ -
>+ (V4L2_HEVC_SLICE_TYPE_I, V4L2_HEVC_SLICE_TYPE_P or
>+ V4L2_HEVC_SLICE_TYPE_B).
>+ * - __u8
>+ - ``colour_plane_id``
>+ - Specifies the colour plane associated with the current slice.
>+ * - __u16
>+ - ``slice_pic_order_cnt``
>+ - Specifies the picture order count.
>+ * - __u8
>+ - ``num_ref_idx_l0_active_minus1``
>+ - Specifies the maximum reference index for reference picture list 0
>+ that may be used to decode the slice.
>+ * - __u8
>+ - ``num_ref_idx_l1_active_minus1``
>+ - Specifies the maximum reference index for reference picture list 1
>+ that may be used to decode the slice.
>+ * - __u8
>+ - ``collocated_ref_idx``
>+ - Specifies the reference index of the collocated picture used for
>+ temporal motion vector prediction.
>+ * - __u8
>+ - ``five_minus_max_num_merge_cand``
>+ - Specifies the maximum number of merging motion vector prediction
>+ candidates supported in the slice subtracted from 5.
>+ * - __s8
>+ - ``slice_qp_delta``
>+ - Specifies the initial value of QpY to be used for the coding blocks in the slice.
>+ * - __s8
>+ - ``slice_cb_qp_offset``
>+ - Specifies a difference to be added to the value of pps_cb_qp_offset.
>+ * - __s8
>+ - ``slice_cr_qp_offset``
>+ - Specifies a difference to be added to the value of pps_cr_qp_offset.
>+ * - __s8
>+ - ``slice_act_y_qp_offset``
>+ - screen content extension parameters
>+ * - __s8
>+ - ``slice_act_cb_qp_offset``
>+ - screen content extension parameters
>+ * - __s8
>+ - ``slice_act_cr_qp_offset``
>+ - screen content extension parameters
>+ * - __s8
>+ - ``slice_beta_offset_div2``
>+ - Specify the deblocking parameter offsets for beta divided by 2.
>+ * - __s8
>+ - ``slice_tc_offset_div2``
>+ - Specify the deblocking parameter offsets for tC divided by 2.
>+ * - __u8
>+ - ``pic_struct``
>+ - Indicates whether a picture should be displayed as a frame or as one or more fields.
>+ * - __u32
>+ - ``slice_segment_addr``
>+ - Specifies the address of the first coding tree block in the slice segment.
>+ * - __u8
>+ - ``ref_idx_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
>+ - The list of L0 reference elements as indices in the DPB.
>+ * - __u8
>+ - ``ref_idx_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
>+ - The list of L1 reference elements as indices in the DPB.
>+ * - __u16
>+ - ``short_term_ref_pic_set_size``
>+ - Specifies the size of short-term reference pictures set included in the SPS.
>+ * - __u16
>+ - ``long_term_ref_pic_set_size``
>+ - Specifies the size of long-term reference pictures set include in the SPS.
>+ * - __u8
>+ - ``padding``
>+ - Applications and drivers must set this to zero.
>+ * - struct :c:type:`v4l2_hevc_pred_weight_table`
>+ - ``pred_weight_table``
>+ - The prediction weight coefficients for inter-picture prediction.
>+ * - __u64
>+ - ``flags``
>+ - See :ref:`Slice Parameters Flags <hevc_slice_params_flags>`
>+
>+.. raw:: latex
>+
>+ \normalsize
>+
>+.. _hevc_slice_params_flags:
>+
>+``Slice Parameters Flags``
>+
>+.. raw:: latex
>+
>+ \scriptsize
>+
>+.. flat-table::
>+ :header-rows: 0
>+ :stub-columns: 0
>+ :widths: 1 1 2
>+
>+ * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_SAO_LUMA``
>+ - 0x00000001
>+ -
>+ * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_SAO_CHROMA``
>+ - 0x00000002
>+ -
>+ * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_TEMPORAL_MVP_ENABLED``
>+ - 0x00000004
>+ -
>+ * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_MVD_L1_ZERO``
>+ - 0x00000008
>+ -
>+ * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_CABAC_INIT``
>+ - 0x00000010
>+ -
>+ * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_COLLOCATED_FROM_L0``
>+ - 0x00000020
>+ -
>+ * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_USE_INTEGER_MV``
>+ - 0x00000040
>+ -
>+ * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_DEBLOCKING_FILTER_DISABLED``
>+ - 0x00000080
>+ -
>+ * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_LOOP_FILTER_ACROSS_SLICES_ENABLED``
>+ - 0x00000100
>+ -
>+ * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_DEPENDENT_SLICE_SEGMENT``
>+ - 0x00000200
>+ -
>+
>+.. raw:: latex
>+
>+ \normalsize
>+
>+``V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS (integer)``
>+ Specifies entry point offsets in bytes.
>+ This control is a dynamically sized array. The number of entry point
>+ offsets is reported by the ``elems`` field.
>+ This bitstream parameter is defined according to :ref:`hevc`.
>+ They are described in section 7.4.7.1 "General slice segment header
>+ semantics" of the specification.
>+
>+``V4L2_CID_STATELESS_HEVC_SCALING_MATRIX (struct)``
>+ Specifies the HEVC scaling matrix parameters used for the scaling process
>+ for transform coefficients.
>+ These matrix and parameters are defined according to :ref:`hevc`.
>+ They are described in section 7.4.5 "Scaling list data semantics" of
>+ the specification.
>+
>+.. c:type:: v4l2_ctrl_hevc_scaling_matrix
>+
>+.. raw:: latex
>+
>+ \scriptsize
>+
>+.. tabularcolumns:: |p{5.4cm}|p{6.8cm}|p{5.1cm}|
>+
>+.. cssclass:: longtable
>+
>+.. flat-table:: struct v4l2_ctrl_hevc_scaling_matrix
>+ :header-rows: 0
>+ :stub-columns: 0
>+ :widths: 1 1 2
>+
>+ * - __u8
>+ - ``scaling_list_4x4[6][16]``
>+ - Scaling list is used for the scaling process for transform
>+ coefficients. The values on each scaling list are expected
>+ in raster scan order.
>+ * - __u8
>+ - ``scaling_list_8x8[6][64]``
>+ - Scaling list is used for the scaling process for transform
>+ coefficients. The values on each scaling list are expected
>+ in raster scan order.
>+ * - __u8
>+ - ``scaling_list_16x16[6][64]``
>+ - Scaling list is used for the scaling process for transform
>+ coefficients. The values on each scaling list are expected
>+ in raster scan order.
>+ * - __u8
>+ - ``scaling_list_32x32[2][64]``
>+ - Scaling list is used for the scaling process for transform
>+ coefficients. The values on each scaling list are expected
>+ in raster scan order.
>+ * - __u8
>+ - ``scaling_list_dc_coef_16x16[6]``
>+ - Scaling list is used for the scaling process for transform
>+ coefficients. The values on each scaling list are expected
>+ in raster scan order.
>+ * - __u8
>+ - ``scaling_list_dc_coef_32x32[2]``
>+ - Scaling list is used for the scaling process for transform
>+ coefficients. The values on each scaling list are expected
>+ in raster scan order.
>+
>+.. raw:: latex
>+
>+ \normalsize
>+
>+.. c:type:: v4l2_hevc_dpb_entry
>+
>+.. raw:: latex
>+
>+ \small
>+
>+.. tabularcolumns:: |p{1.0cm}|p{4.2cm}|p{12.1cm}|
>+
>+.. flat-table:: struct v4l2_hevc_dpb_entry
>+ :header-rows: 0
>+ :stub-columns: 0
>+ :widths: 1 1 2
>+
>+ * - __u64
>+ - ``timestamp``
>+ - Timestamp of the V4L2 capture buffer to use as reference, used
>+ with B-coded and P-coded frames. The timestamp refers to the
>+ ``timestamp`` field in struct :c:type:`v4l2_buffer`. Use the
>+ :c:func:`v4l2_timeval_to_ns()` function to convert the struct
>+ :c:type:`timeval` in struct :c:type:`v4l2_buffer` to a __u64.
>+ * - __u8
>+ - ``flags``
>+ - Long term flag for the reference frame
>+ (V4L2_HEVC_DPB_ENTRY_LONG_TERM_REFERENCE). The flag is set as
>+ described in the ITU HEVC specification chapter "8.3.2 Decoding
>+ process for reference picture set".
>+ * - __u8
>+ - ``field_pic``
>+ - Whether the reference is a field picture or a frame.
>+ See :ref:`HEVC dpb field pic Flags <hevc_dpb_field_pic_flags>`
>+ * - __s32
>+ - ``pic_order_cnt_val``
>+ - The picture order count of the current picture.
>+ * - __u8
>+ - ``padding[2]``
>+ - Applications and drivers must set this to zero.
>+
>+.. raw:: latex
>+
>+ \normalsize
>+
>+.. _hevc_dpb_field_pic_flags:
>+
>+``HEVC dpb field pic Flags``
>+
>+.. raw:: latex
>+
>+ \scriptsize
>+
>+.. flat-table::
>+ :header-rows: 0
>+ :stub-columns: 0
>+ :widths: 1 1 2
>+
>+ * - ``V4L2_HEVC_SEI_PIC_STRUCT_FRAME``
>+ - 0
>+ - (progressive) Frame
>+ * - ``V4L2_HEVC_SEI_PIC_STRUCT_TOP_FIELD``
>+ - 1
>+ - Top field
>+ * - ``V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_FIELD``
>+ - 2
>+ - Bottom field
>+ * - ``V4L2_HEVC_SEI_PIC_STRUCT_TOP_BOTTOM``
>+ - 3
>+ - Top field, bottom field, in that order
>+ * - ``V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_TOP``
>+ - 4
>+ - Bottom field, top field, in that order
>+ * - ``V4L2_HEVC_SEI_PIC_STRUCT_TOP_BOTTOM_TOP``
>+ - 5
>+ - Top field, bottom field, top field repeated, in that order
>+ * - ``V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_TOP_BOTTOM``
>+ - 6
>+ - Bottom field, top field, bottom field repeated, in that order
>+ * - ``V4L2_HEVC_SEI_PIC_STRUCT_FRAME_DOUBLING``
>+ - 7
>+ - Frame doubling
>+ * - ``V4L2_HEVC_SEI_PIC_STRUCT_FRAME_TRIPLING``
>+ - 8
>+ - Frame tripling
>+ * - ``V4L2_HEVC_SEI_PIC_STRUCT_TOP_PAIRED_PREVIOUS_BOTTOM``
>+ - 9
>+ - Top field paired with previous bottom field in output order
>+ * - ``V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_PAIRED_PREVIOUS_TOP``
>+ - 10
>+ - Bottom field paired with previous top field in output order
>+ * - ``V4L2_HEVC_SEI_PIC_STRUCT_TOP_PAIRED_NEXT_BOTTOM``
>+ - 11
>+ - Top field paired with next bottom field in output order
>+ * - ``V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_PAIRED_NEXT_TOP``
>+ - 12
>+ - Bottom field paired with next top field in output order
>+
>+.. c:type:: v4l2_hevc_pred_weight_table
>+
>+.. raw:: latex
>+
>+ \footnotesize
>+
>+.. tabularcolumns:: |p{0.8cm}|p{10.6cm}|p{5.9cm}|
>+
>+.. flat-table:: struct v4l2_hevc_pred_weight_table
>+ :header-rows: 0
>+ :stub-columns: 0
>+ :widths: 1 1 2
>+
>+ * - __s8
>+ - ``delta_luma_weight_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
>+ - The difference of the weighting factor applied to the luma
>+ prediction value for list 0.
>+ * - __s8
>+ - ``luma_offset_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
>+ - The additive offset applied to the luma prediction value for list 0.
>+ * - __s8
>+ - ``delta_chroma_weight_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]``
>+ - The difference of the weighting factor applied to the chroma
>+ prediction value for list 0.
>+ * - __s8
>+ - ``chroma_offset_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]``
>+ - The difference of the additive offset applied to the chroma
>+ prediction values for list 0.
>+ * - __s8
>+ - ``delta_luma_weight_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
>+ - The difference of the weighting factor applied to the luma
>+ prediction value for list 1.
>+ * - __s8
>+ - ``luma_offset_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
>+ - The additive offset applied to the luma prediction value for list 1.
>+ * - __s8
>+ - ``delta_chroma_weight_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]``
>+ - The difference of the weighting factor applied to the chroma
>+ prediction value for list 1.
>+ * - __s8
>+ - ``chroma_offset_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]``
>+ - The difference of the additive offset applied to the chroma
>+ prediction values for list 1.
>+ * - __u8
>+ - ``luma_log2_weight_denom``
>+ - The base 2 logarithm of the denominator for all luma weighting
>+ factors.
>+ * - __s8
>+ - ``delta_chroma_log2_weight_denom``
>+ - The difference of the base 2 logarithm of the denominator for
>+ all chroma weighting factors.
>+ * - __u8
>+ - ``padding[6]``
>+ - Applications and drivers must set this to zero.
>+
>+.. raw:: latex
>+
>+ \normalsize
>+
>+``V4L2_CID_STATELESS_HEVC_DECODE_MODE (enum)``
>+ Specifies the decoding mode to use. Currently exposes slice-based and
>+ frame-based decoding but new modes might be added later on.
>+ This control is used as a modifier for V4L2_PIX_FMT_HEVC_SLICE
>+ pixel format. Applications that support V4L2_PIX_FMT_HEVC_SLICE
>+ are required to set this control in order to specify the decoding mode
>+ that is expected for the buffer.
>+ Drivers may expose a single or multiple decoding modes, depending
>+ on what they can support.
>+
>+.. c:type:: v4l2_stateless_hevc_decode_mode
>+
>+.. raw:: latex
>+
>+ \small
>+
>+.. tabularcolumns:: |p{9.4cm}|p{0.6cm}|p{7.3cm}|
>+
>+.. flat-table::
>+ :header-rows: 0
>+ :stub-columns: 0
>+ :widths: 1 1 2
>+
>+ * - ``V4L2_STATELESS_HEVC_DECODE_MODE_SLICE_BASED``
>+ - 0
>+ - Decoding is done at the slice granularity.
>+ The OUTPUT buffer must contain a single slice.
>+ * - ``V4L2_STATELESS_HEVC_DECODE_MODE_FRAME_BASED``
>+ - 1
>+ - Decoding is done at the frame granularity.
>+ The OUTPUT buffer must contain all slices needed to decode the
>+ frame.
>+
>+.. raw:: latex
>+
>+ \normalsize
>+
>+``V4L2_CID_STATELESS_HEVC_START_CODE (enum)``
>+ Specifies the HEVC slice start code expected for each slice.
>+ This control is used as a modifier for V4L2_PIX_FMT_HEVC_SLICE
>+ pixel format. Applications that support V4L2_PIX_FMT_HEVC_SLICE
>+ are required to set this control in order to specify the start code
>+ that is expected for the buffer.
>+ Drivers may expose a single or multiple start codes, depending
>+ on what they can support.
>+
>+.. c:type:: v4l2_stateless_hevc_start_code
>+
>+.. tabularcolumns:: |p{9.2cm}|p{0.6cm}|p{7.5cm}|
>+
>+.. flat-table::
>+ :header-rows: 0
>+ :stub-columns: 0
>+ :widths: 1 1 2
>+
>+ * - ``V4L2_STATELESS_HEVC_START_CODE_NONE``
>+ - 0
>+ - Selecting this value specifies that HEVC slices are passed
>+ to the driver without any start code. The bitstream data should be
>+ according to :ref:`hevc` 7.3.1.1 General NAL unit syntax, hence
>+ contains emulation prevention bytes when required.
>+ * - ``V4L2_STATELESS_HEVC_START_CODE_ANNEX_B``
>+ - 1
>+ - Selecting this value specifies that HEVC slices are expected
>+ to be prefixed by Annex B start codes. According to :ref:`hevc`
>+ valid start codes can be 3-bytes 0x000001 or 4-bytes 0x00000001.
>+
>+.. raw:: latex
>+
>+ \normalsize
>+
>+``V4L2_CID_MPEG_VIDEO_BASELAYER_PRIORITY_ID (integer)``
>+ Specifies a priority identifier for the NAL unit, which will be applied to
>+ the base layer. By default this value is set to 0 for the base layer,
>+ and the next layer will have the priority ID assigned as 1, 2, 3 and so on.
>+ The video encoder can't decide the priority id to be applied to a layer,
>+ so this has to come from client.
>+ This is applicable to H264 and valid Range is from 0 to 63.
>+ Source Rec. ITU-T H.264 (06/2019); G.7.4.1.1, G.8.8.1.
>+
>+``V4L2_CID_MPEG_VIDEO_LTR_COUNT (integer)``
>+ Specifies the maximum number of Long Term Reference (LTR) frames at any
>+ given time that the encoder can keep.
>+ This is applicable to the H264 and HEVC encoders.
>+
>+``V4L2_CID_MPEG_VIDEO_FRAME_LTR_INDEX (integer)``
>+ After setting this control the frame that will be queued next
>+ will be marked as a Long Term Reference (LTR) frame
>+ and given this LTR index which ranges from 0 to LTR_COUNT-1.
>+ This is applicable to the H264 and HEVC encoders.
>+ Source Rec. ITU-T H.264 (06/2019); Table 7.9
>+
>+``V4L2_CID_MPEG_VIDEO_USE_LTR_FRAMES (bitmask)``
>+ Specifies the Long Term Reference (LTR) frame(s) to be used for
>+ encoding the next frame queued after setting this control.
>+ This provides a bitmask which consists of bits [0, LTR_COUNT-1].
>+ This is applicable to the H264 and HEVC encoders.
>+
>+``V4L2_CID_STATELESS_HEVC_DECODE_PARAMS (struct)``
>+ Specifies various decode parameters, especially the references picture order
>+ count (POC) for all the lists (short, long, before, current, after) and the
>+ number of entries for each of them.
>+ These parameters are defined according to :ref:`hevc`.
>+ They are described in section 8.3 "Slice decoding process" of the
>+ specification.
>+
>+.. c:type:: v4l2_ctrl_hevc_decode_params
>+
>+.. cssclass:: longtable
>+
>+.. flat-table:: struct v4l2_ctrl_hevc_decode_params
>+ :header-rows: 0
>+ :stub-columns: 0
>+ :widths: 1 1 2
>+
>+ * - __s32
>+ - ``pic_order_cnt_val``
>+ - PicOrderCntVal as described in section 8.3.1 "Decoding process
>+ for picture order count" of the specification.
>+ * - __u8
>+ - ``num_active_dpb_entries``
>+ - The number of entries in ``dpb``.
>+ * - __u8
>+ - ``num_poc_st_curr_before``
>+ - The number of reference pictures in the short-term set that come before
>+ the current frame.
>+ * - __u8
>+ - ``num_poc_st_curr_after``
>+ - The number of reference pictures in the short-term set that come after
>+ the current frame.
>+ * - __u8
>+ - ``num_poc_lt_curr``
>+ - The number of reference pictures in the long-term set.
>+ * - __u8
>+ - ``poc_st_curr_before[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
>+ - PocStCurrBefore as described in section 8.3.2 "Decoding process for reference
>+ picture set": provides the index of the short term before references in DPB array.
>+ * - __u8
>+ - ``poc_st_curr_after[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
>+ - PocStCurrAfter as described in section 8.3.2 "Decoding process for reference
>+ picture set": provides the index of the short term after references in DPB array.
>+ * - __u8
>+ - ``poc_lt_curr[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
>+ - PocLtCurr as described in section 8.3.2 "Decoding process for reference
>+ picture set": provides the index of the long term references in DPB array.
>+ * - struct :c:type:`v4l2_hevc_dpb_entry`
>+ - ``dpb[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
>+ - The decoded picture buffer, for meta-data about reference frames.
>+ * - __u64
>+ - ``flags``
>+ - See :ref:`Decode Parameters Flags <hevc_decode_params_flags>`
>+
>+.. _hevc_decode_params_flags:
>+
>+``Decode Parameters Flags``
>+
>+.. cssclass:: longtable
>+
>+.. flat-table::
>+ :header-rows: 0
>+ :stub-columns: 0
>+ :widths: 1 1 2
>+
>+ * - ``V4L2_HEVC_DECODE_PARAM_FLAG_IRAP_PIC``
>+ - 0x00000001
>+ -
>+ * - ``V4L2_HEVC_DECODE_PARAM_FLAG_IDR_PIC``
>+ - 0x00000002
>+ -
>+ * - ``V4L2_HEVC_DECODE_PARAM_FLAG_NO_OUTPUT_OF_PRIOR``
>+ - 0x00000004
>+ -
>diff --git a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
>index 48b3f533bc17..25d6a79dd04b 100644
>--- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
>+++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
>@@ -2636,891 +2636,3 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
> Indicates whether to generate SPS and PPS at every IDR. Setting it to 0
> disables generating SPS and PPS at every IDR. Setting it to one enables
> generating SPS and PPS at every IDR.
>-
>-.. _v4l2-mpeg-hevc:
>-
>-``V4L2_CID_STATELESS_HEVC_SPS (struct)``
>- Specifies the Sequence Parameter Set fields (as extracted from the
>- bitstream) for the associated HEVC slice data.
>- These bitstream parameters are defined according to :ref:`hevc`.
>- They are described in section 7.4.3.2 "Sequence parameter set RBSP
>- semantics" of the specification.
>-
>-.. c:type:: v4l2_ctrl_hevc_sps
>-
>-.. raw:: latex
>-
>- \small
>-
>-.. tabularcolumns:: |p{1.2cm}|p{9.2cm}|p{6.9cm}|
>-
>-.. cssclass:: longtable
>-
>-.. flat-table:: struct v4l2_ctrl_hevc_sps
>- :header-rows: 0
>- :stub-columns: 0
>- :widths: 1 1 2
>-
>- * - __u8
>- - ``video_parameter_set_id``
>- - Specifies the value of the vps_video_parameter_set_id of the active VPS
>- as descibed in section "7.4.3.2.1 General sequence parameter set RBSP semantics"
>- of H.265 specifications.
>- * - __u8
>- - ``seq_parameter_set_id``
>- - Provides an identifier for the SPS for reference by other syntax elements
>- as descibed in section "7.4.3.2.1 General sequence parameter set RBSP semantics"
>- of H.265 specifications.
>- * - __u16
>- - ``pic_width_in_luma_samples``
>- - Specifies the width of each decoded picture in units of luma samples.
>- * - __u16
>- - ``pic_height_in_luma_samples``
>- - Specifies the height of each decoded picture in units of luma samples.
>- * - __u8
>- - ``bit_depth_luma_minus8``
>- - Specifies the bit depth of the samples of the luma array.
>- * - __u8
>- - ``bit_depth_chroma_minus8``
>- - Specifies the bit depth of the samples of the chroma arrays.
>- * - __u8
>- - ``log2_max_pic_order_cnt_lsb_minus4``
>- - Specifies the value of the variable MaxPicOrderCntLsb.
>- * - __u8
>- - ``sps_max_dec_pic_buffering_minus1``
>- - Plus 1 specifies the maximum required size of the decoded picture buffer for
>- the CVS
>- * - __u8
>- - ``sps_max_num_reorder_pics``
>- - Indicates the maximum allowed number of pictures.
>- * - __u8
>- - ``sps_max_latency_increase_plus1``
>- - Not equal to 0 is used to compute the value of SpsMaxLatencyPictures[i].
>- * - __u8
>- - ``log2_min_luma_coding_block_size_minus3``
>- - Plus 3 specifies the minimum luma coding block size.
>- * - __u8
>- - ``log2_diff_max_min_luma_coding_block_size``
>- - Specifies the difference between the maximum and minimum luma coding block size.
>- * - __u8
>- - ``log2_min_luma_transform_block_size_minus2``
>- - Plus 2 specifies the minimum luma transform block size.
>- * - __u8
>- - ``log2_diff_max_min_luma_transform_block_size``
>- - Specifies the difference between the maximum and minimum luma transform block size.
>- * - __u8
>- - ``max_transform_hierarchy_depth_inter``
>- - Specifies the maximum hierarchy depth for transform units of coding units coded
>- in inter prediction mode.
>- * - __u8
>- - ``max_transform_hierarchy_depth_intra``
>- - Specifies the maximum hierarchy depth for transform units of coding units coded in
>- intra prediction mode.
>- * - __u8
>- - ``pcm_sample_bit_depth_luma_minus1``
>- - Specifies the number of bits used to represent each of PCM sample values of the
>- luma component.
>- * - __u8
>- - ``pcm_sample_bit_depth_chroma_minus1``
>- - Specifies the number of bits used to represent each of PCM sample values of
>- the chroma components.
>- * - __u8
>- - ``log2_min_pcm_luma_coding_block_size_minus3``
>- - Plus 3 specifies the minimum size of coding blocks.
>- * - __u8
>- - ``log2_diff_max_min_pcm_luma_coding_block_size``
>- - Specifies the difference between the maximum and minimum size of coding blocks.
>- * - __u8
>- - ``num_short_term_ref_pic_sets``
>- - Specifies the number of st_ref_pic_set() syntax structures included in the SPS.
>- * - __u8
>- - ``num_long_term_ref_pics_sps``
>- - Specifies the number of candidate long-term reference pictures that are
>- specified in the SPS.
>- * - __u8
>- - ``chroma_format_idc``
>- - Specifies the chroma sampling.
>- * - __u8
>- - ``sps_max_sub_layers_minus1``
>- - plus 1 specifies the maximum number of temporal sub-layers.
>- * - __u64
>- - ``flags``
>- - See :ref:`Sequence Parameter Set Flags <hevc_sps_flags>`
>-
>-.. raw:: latex
>-
>- \normalsize
>-
>-.. _hevc_sps_flags:
>-
>-``Sequence Parameter Set Flags``
>-
>-.. raw:: latex
>-
>- \small
>-
>-.. cssclass:: longtable
>-
>-.. flat-table::
>- :header-rows: 0
>- :stub-columns: 0
>- :widths: 1 1 2
>-
>- * - ``V4L2_HEVC_SPS_FLAG_SEPARATE_COLOUR_PLANE``
>- - 0x00000001
>- -
>- * - ``V4L2_HEVC_SPS_FLAG_SCALING_LIST_ENABLED``
>- - 0x00000002
>- -
>- * - ``V4L2_HEVC_SPS_FLAG_AMP_ENABLED``
>- - 0x00000004
>- -
>- * - ``V4L2_HEVC_SPS_FLAG_SAMPLE_ADAPTIVE_OFFSET``
>- - 0x00000008
>- -
>- * - ``V4L2_HEVC_SPS_FLAG_PCM_ENABLED``
>- - 0x00000010
>- -
>- * - ``V4L2_HEVC_SPS_FLAG_PCM_LOOP_FILTER_DISABLED``
>- - 0x00000020
>- -
>- * - ``V4L2_HEVC_SPS_FLAG_LONG_TERM_REF_PICS_PRESENT``
>- - 0x00000040
>- -
>- * - ``V4L2_HEVC_SPS_FLAG_SPS_TEMPORAL_MVP_ENABLED``
>- - 0x00000080
>- -
>- * - ``V4L2_HEVC_SPS_FLAG_STRONG_INTRA_SMOOTHING_ENABLED``
>- - 0x00000100
>- -
>-
>-.. raw:: latex
>-
>- \normalsize
>-
>-``V4L2_CID_STATELESS_HEVC_PPS (struct)``
>- Specifies the Picture Parameter Set fields (as extracted from the
>- bitstream) for the associated HEVC slice data.
>- These bitstream parameters are defined according to :ref:`hevc`.
>- They are described in section 7.4.3.3 "Picture parameter set RBSP
>- semantics" of the specification.
>-
>-.. c:type:: v4l2_ctrl_hevc_pps
>-
>-.. tabularcolumns:: |p{1.2cm}|p{8.6cm}|p{7.5cm}|
>-
>-.. cssclass:: longtable
>-
>-.. flat-table:: struct v4l2_ctrl_hevc_pps
>- :header-rows: 0
>- :stub-columns: 0
>- :widths: 1 1 2
>-
>- * - __u8
>- - ``pic_parameter_set_id``
>- - Identifies the PPS for reference by other syntax elements.
>- * - __u8
>- - ``num_extra_slice_header_bits``
>- - Specifies the number of extra slice header bits that are present
>- in the slice header RBSP for coded pictures referring to the PPS.
>- * - __u8
>- - ``num_ref_idx_l0_default_active_minus1``
>- - Specifies the inferred value of num_ref_idx_l0_active_minus1
>- * - __u8
>- - ``num_ref_idx_l1_default_active_minus1``
>- - Specifies the inferred value of num_ref_idx_l1_active_minus1
>- * - __s8
>- - ``init_qp_minus26``
>- - Plus 26 specifies the initial value of SliceQp Y for each slice
>- referring to the PPS.
>- * - __u8
>- - ``diff_cu_qp_delta_depth``
>- - Specifies the difference between the luma coding tree block size
>- and the minimum luma coding block size of coding units that
>- convey cu_qp_delta_abs and cu_qp_delta_sign_flag.
>- * - __s8
>- - ``pps_cb_qp_offset``
>- - Specify the offsets to the luma quantization parameter Cb.
>- * - __s8
>- - ``pps_cr_qp_offset``
>- - Specify the offsets to the luma quantization parameter Cr.
>- * - __u8
>- - ``num_tile_columns_minus1``
>- - Plus 1 specifies the number of tile columns partitioning the picture.
>- * - __u8
>- - ``num_tile_rows_minus1``
>- - Plus 1 specifies the number of tile rows partitioning the picture.
>- * - __u8
>- - ``column_width_minus1[20]``
>- - Plus 1 specifies the width of the i-th tile column in units of
>- coding tree blocks.
>- * - __u8
>- - ``row_height_minus1[22]``
>- - Plus 1 specifies the height of the i-th tile row in units of coding
>- tree blocks.
>- * - __s8
>- - ``pps_beta_offset_div2``
>- - Specify the default deblocking parameter offsets for beta divided by 2.
>- * - __s8
>- - ``pps_tc_offset_div2``
>- - Specify the default deblocking parameter offsets for tC divided by 2.
>- * - __u8
>- - ``log2_parallel_merge_level_minus2``
>- - Plus 2 specifies the value of the variable Log2ParMrgLevel.
>- * - __u8
>- - ``padding[4]``
>- - Applications and drivers must set this to zero.
>- * - __u64
>- - ``flags``
>- - See :ref:`Picture Parameter Set Flags <hevc_pps_flags>`
>-
>-.. _hevc_pps_flags:
>-
>-``Picture Parameter Set Flags``
>-
>-.. raw:: latex
>-
>- \small
>-
>-.. flat-table::
>- :header-rows: 0
>- :stub-columns: 0
>- :widths: 1 1 2
>-
>- * - ``V4L2_HEVC_PPS_FLAG_DEPENDENT_SLICE_SEGMENT_ENABLED``
>- - 0x00000001
>- -
>- * - ``V4L2_HEVC_PPS_FLAG_OUTPUT_FLAG_PRESENT``
>- - 0x00000002
>- -
>- * - ``V4L2_HEVC_PPS_FLAG_SIGN_DATA_HIDING_ENABLED``
>- - 0x00000004
>- -
>- * - ``V4L2_HEVC_PPS_FLAG_CABAC_INIT_PRESENT``
>- - 0x00000008
>- -
>- * - ``V4L2_HEVC_PPS_FLAG_CONSTRAINED_INTRA_PRED``
>- - 0x00000010
>- -
>- * - ``V4L2_HEVC_PPS_FLAG_TRANSFORM_SKIP_ENABLED``
>- - 0x00000020
>- -
>- * - ``V4L2_HEVC_PPS_FLAG_CU_QP_DELTA_ENABLED``
>- - 0x00000040
>- -
>- * - ``V4L2_HEVC_PPS_FLAG_PPS_SLICE_CHROMA_QP_OFFSETS_PRESENT``
>- - 0x00000080
>- -
>- * - ``V4L2_HEVC_PPS_FLAG_WEIGHTED_PRED``
>- - 0x00000100
>- -
>- * - ``V4L2_HEVC_PPS_FLAG_WEIGHTED_BIPRED``
>- - 0x00000200
>- -
>- * - ``V4L2_HEVC_PPS_FLAG_TRANSQUANT_BYPASS_ENABLED``
>- - 0x00000400
>- -
>- * - ``V4L2_HEVC_PPS_FLAG_TILES_ENABLED``
>- - 0x00000800
>- -
>- * - ``V4L2_HEVC_PPS_FLAG_ENTROPY_CODING_SYNC_ENABLED``
>- - 0x00001000
>- -
>- * - ``V4L2_HEVC_PPS_FLAG_LOOP_FILTER_ACROSS_TILES_ENABLED``
>- - 0x00002000
>- -
>- * - ``V4L2_HEVC_PPS_FLAG_PPS_LOOP_FILTER_ACROSS_SLICES_ENABLED``
>- - 0x00004000
>- -
>- * - ``V4L2_HEVC_PPS_FLAG_DEBLOCKING_FILTER_OVERRIDE_ENABLED``
>- - 0x00008000
>- -
>- * - ``V4L2_HEVC_PPS_FLAG_PPS_DISABLE_DEBLOCKING_FILTER``
>- - 0x00010000
>- -
>- * - ``V4L2_HEVC_PPS_FLAG_LISTS_MODIFICATION_PRESENT``
>- - 0x00020000
>- -
>- * - ``V4L2_HEVC_PPS_FLAG_SLICE_SEGMENT_HEADER_EXTENSION_PRESENT``
>- - 0x00040000
>- -
>- * - ``V4L2_HEVC_PPS_FLAG_DEBLOCKING_FILTER_CONTROL_PRESENT``
>- - 0x00080000
>- - Specifies the presence of deblocking filter control syntax elements in
>- the PPS
>- * - ``V4L2_HEVC_PPS_FLAG_UNIFORM_SPACING``
>- - 0x00100000
>- - Specifies that tile column boundaries and likewise tile row boundaries
>- are distributed uniformly across the picture
>-
>-.. raw:: latex
>-
>- \normalsize
>-
>-``V4L2_CID_STATELESS_HEVC_SLICE_PARAMS (struct)``
>- Specifies various slice-specific parameters, especially from the NAL unit
>- header, general slice segment header and weighted prediction parameter
>- parts of the bitstream.
>- These bitstream parameters are defined according to :ref:`hevc`.
>- They are described in section 7.4.7 "General slice segment header
>- semantics" of the specification.
>- This control is a dynamically sized 1-dimensional array,
>- V4L2_CTRL_FLAG_DYNAMIC_ARRAY flag must be set when using it.
>-
>-.. c:type:: v4l2_ctrl_hevc_slice_params
>-
>-.. raw:: latex
>-
>- \scriptsize
>-
>-.. tabularcolumns:: |p{5.4cm}|p{6.8cm}|p{5.1cm}|
>-
>-.. cssclass:: longtable
>-
>-.. flat-table:: struct v4l2_ctrl_hevc_slice_params
>- :header-rows: 0
>- :stub-columns: 0
>- :widths: 1 1 2
>-
>- * - __u32
>- - ``bit_size``
>- - Size (in bits) of the current slice data.
>- * - __u32
>- - ``data_byte_offset``
>- - Offset (in bytes) to the video data in the current slice data.
>- * - __u32
>- - ``num_entry_point_offsets``
>- - Specifies the number of entry point offset syntax elements in the slice header.
>- * - __u8
>- - ``nal_unit_type``
>- - Specifies the coding type of the slice (B, P or I).
>- * - __u8
>- - ``nuh_temporal_id_plus1``
>- - Minus 1 specifies a temporal identifier for the NAL unit.
>- * - __u8
>- - ``slice_type``
>- -
>- (V4L2_HEVC_SLICE_TYPE_I, V4L2_HEVC_SLICE_TYPE_P or
>- V4L2_HEVC_SLICE_TYPE_B).
>- * - __u8
>- - ``colour_plane_id``
>- - Specifies the colour plane associated with the current slice.
>- * - __u16
>- - ``slice_pic_order_cnt``
>- - Specifies the picture order count.
>- * - __u8
>- - ``num_ref_idx_l0_active_minus1``
>- - Specifies the maximum reference index for reference picture list 0
>- that may be used to decode the slice.
>- * - __u8
>- - ``num_ref_idx_l1_active_minus1``
>- - Specifies the maximum reference index for reference picture list 1
>- that may be used to decode the slice.
>- * - __u8
>- - ``collocated_ref_idx``
>- - Specifies the reference index of the collocated picture used for
>- temporal motion vector prediction.
>- * - __u8
>- - ``five_minus_max_num_merge_cand``
>- - Specifies the maximum number of merging motion vector prediction
>- candidates supported in the slice subtracted from 5.
>- * - __s8
>- - ``slice_qp_delta``
>- - Specifies the initial value of QpY to be used for the coding blocks in the slice.
>- * - __s8
>- - ``slice_cb_qp_offset``
>- - Specifies a difference to be added to the value of pps_cb_qp_offset.
>- * - __s8
>- - ``slice_cr_qp_offset``
>- - Specifies a difference to be added to the value of pps_cr_qp_offset.
>- * - __s8
>- - ``slice_act_y_qp_offset``
>- - screen content extension parameters
>- * - __s8
>- - ``slice_act_cb_qp_offset``
>- - screen content extension parameters
>- * - __s8
>- - ``slice_act_cr_qp_offset``
>- - screen content extension parameters
>- * - __s8
>- - ``slice_beta_offset_div2``
>- - Specify the deblocking parameter offsets for beta divided by 2.
>- * - __s8
>- - ``slice_tc_offset_div2``
>- - Specify the deblocking parameter offsets for tC divided by 2.
>- * - __u8
>- - ``pic_struct``
>- - Indicates whether a picture should be displayed as a frame or as one or more fields.
>- * - __u32
>- - ``slice_segment_addr``
>- - Specifies the address of the first coding tree block in the slice segment.
>- * - __u8
>- - ``ref_idx_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
>- - The list of L0 reference elements as indices in the DPB.
>- * - __u8
>- - ``ref_idx_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
>- - The list of L1 reference elements as indices in the DPB.
>- * - __u16
>- - ``short_term_ref_pic_set_size``
>- - Specifies the size of short-term reference pictures set included in the SPS.
>- * - __u16
>- - ``long_term_ref_pic_set_size``
>- - Specifies the size of long-term reference pictures set include in the SPS.
>- * - __u8
>- - ``padding``
>- - Applications and drivers must set this to zero.
>- * - struct :c:type:`v4l2_hevc_pred_weight_table`
>- - ``pred_weight_table``
>- - The prediction weight coefficients for inter-picture prediction.
>- * - __u64
>- - ``flags``
>- - See :ref:`Slice Parameters Flags <hevc_slice_params_flags>`
>-
>-.. raw:: latex
>-
>- \normalsize
>-
>-.. _hevc_slice_params_flags:
>-
>-``Slice Parameters Flags``
>-
>-.. raw:: latex
>-
>- \scriptsize
>-
>-.. flat-table::
>- :header-rows: 0
>- :stub-columns: 0
>- :widths: 1 1 2
>-
>- * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_SAO_LUMA``
>- - 0x00000001
>- -
>- * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_SAO_CHROMA``
>- - 0x00000002
>- -
>- * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_TEMPORAL_MVP_ENABLED``
>- - 0x00000004
>- -
>- * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_MVD_L1_ZERO``
>- - 0x00000008
>- -
>- * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_CABAC_INIT``
>- - 0x00000010
>- -
>- * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_COLLOCATED_FROM_L0``
>- - 0x00000020
>- -
>- * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_USE_INTEGER_MV``
>- - 0x00000040
>- -
>- * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_DEBLOCKING_FILTER_DISABLED``
>- - 0x00000080
>- -
>- * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_LOOP_FILTER_ACROSS_SLICES_ENABLED``
>- - 0x00000100
>- -
>- * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_DEPENDENT_SLICE_SEGMENT``
>- - 0x00000200
>- -
>-
>-.. raw:: latex
>-
>- \normalsize
>-
>-``V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS (integer)``
>- Specifies entry point offsets in bytes.
>- This control is a dynamically sized array. The number of entry point
>- offsets is reported by the ``elems`` field.
>- This bitstream parameter is defined according to :ref:`hevc`.
>- They are described in section 7.4.7.1 "General slice segment header
>- semantics" of the specification.
>-
>-``V4L2_CID_STATELESS_HEVC_SCALING_MATRIX (struct)``
>- Specifies the HEVC scaling matrix parameters used for the scaling process
>- for transform coefficients.
>- These matrix and parameters are defined according to :ref:`hevc`.
>- They are described in section 7.4.5 "Scaling list data semantics" of
>- the specification.
>-
>-.. c:type:: v4l2_ctrl_hevc_scaling_matrix
>-
>-.. raw:: latex
>-
>- \scriptsize
>-
>-.. tabularcolumns:: |p{5.4cm}|p{6.8cm}|p{5.1cm}|
>-
>-.. cssclass:: longtable
>-
>-.. flat-table:: struct v4l2_ctrl_hevc_scaling_matrix
>- :header-rows: 0
>- :stub-columns: 0
>- :widths: 1 1 2
>-
>- * - __u8
>- - ``scaling_list_4x4[6][16]``
>- - Scaling list is used for the scaling process for transform
>- coefficients. The values on each scaling list are expected
>- in raster scan order.
>- * - __u8
>- - ``scaling_list_8x8[6][64]``
>- - Scaling list is used for the scaling process for transform
>- coefficients. The values on each scaling list are expected
>- in raster scan order.
>- * - __u8
>- - ``scaling_list_16x16[6][64]``
>- - Scaling list is used for the scaling process for transform
>- coefficients. The values on each scaling list are expected
>- in raster scan order.
>- * - __u8
>- - ``scaling_list_32x32[2][64]``
>- - Scaling list is used for the scaling process for transform
>- coefficients. The values on each scaling list are expected
>- in raster scan order.
>- * - __u8
>- - ``scaling_list_dc_coef_16x16[6]``
>- - Scaling list is used for the scaling process for transform
>- coefficients. The values on each scaling list are expected
>- in raster scan order.
>- * - __u8
>- - ``scaling_list_dc_coef_32x32[2]``
>- - Scaling list is used for the scaling process for transform
>- coefficients. The values on each scaling list are expected
>- in raster scan order.
>-
>-.. raw:: latex
>-
>- \normalsize
>-
>-.. c:type:: v4l2_hevc_dpb_entry
>-
>-.. raw:: latex
>-
>- \small
>-
>-.. tabularcolumns:: |p{1.0cm}|p{4.2cm}|p{12.1cm}|
>-
>-.. flat-table:: struct v4l2_hevc_dpb_entry
>- :header-rows: 0
>- :stub-columns: 0
>- :widths: 1 1 2
>-
>- * - __u64
>- - ``timestamp``
>- - Timestamp of the V4L2 capture buffer to use as reference, used
>- with B-coded and P-coded frames. The timestamp refers to the
>- ``timestamp`` field in struct :c:type:`v4l2_buffer`. Use the
>- :c:func:`v4l2_timeval_to_ns()` function to convert the struct
>- :c:type:`timeval` in struct :c:type:`v4l2_buffer` to a __u64.
>- * - __u8
>- - ``flags``
>- - Long term flag for the reference frame
>- (V4L2_HEVC_DPB_ENTRY_LONG_TERM_REFERENCE). The flag is set as
>- described in the ITU HEVC specification chapter "8.3.2 Decoding
>- process for reference picture set".
>- * - __u8
>- - ``field_pic``
>- - Whether the reference is a field picture or a frame.
>- See :ref:`HEVC dpb field pic Flags <hevc_dpb_field_pic_flags>`
>- * - __s32
>- - ``pic_order_cnt_val``
>- - The picture order count of the current picture.
>- * - __u8
>- - ``padding[2]``
>- - Applications and drivers must set this to zero.
>-
>-.. raw:: latex
>-
>- \normalsize
>-
>-.. _hevc_dpb_field_pic_flags:
>-
>-``HEVC dpb field pic Flags``
>-
>-.. raw:: latex
>-
>- \scriptsize
>-
>-.. flat-table::
>- :header-rows: 0
>- :stub-columns: 0
>- :widths: 1 1 2
>-
>- * - ``V4L2_HEVC_SEI_PIC_STRUCT_FRAME``
>- - 0
>- - (progressive) Frame
>- * - ``V4L2_HEVC_SEI_PIC_STRUCT_TOP_FIELD``
>- - 1
>- - Top field
>- * - ``V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_FIELD``
>- - 2
>- - Bottom field
>- * - ``V4L2_HEVC_SEI_PIC_STRUCT_TOP_BOTTOM``
>- - 3
>- - Top field, bottom field, in that order
>- * - ``V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_TOP``
>- - 4
>- - Bottom field, top field, in that order
>- * - ``V4L2_HEVC_SEI_PIC_STRUCT_TOP_BOTTOM_TOP``
>- - 5
>- - Top field, bottom field, top field repeated, in that order
>- * - ``V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_TOP_BOTTOM``
>- - 6
>- - Bottom field, top field, bottom field repeated, in that order
>- * - ``V4L2_HEVC_SEI_PIC_STRUCT_FRAME_DOUBLING``
>- - 7
>- - Frame doubling
>- * - ``V4L2_HEVC_SEI_PIC_STRUCT_FRAME_TRIPLING``
>- - 8
>- - Frame tripling
>- * - ``V4L2_HEVC_SEI_PIC_STRUCT_TOP_PAIRED_PREVIOUS_BOTTOM``
>- - 9
>- - Top field paired with previous bottom field in output order
>- * - ``V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_PAIRED_PREVIOUS_TOP``
>- - 10
>- - Bottom field paired with previous top field in output order
>- * - ``V4L2_HEVC_SEI_PIC_STRUCT_TOP_PAIRED_NEXT_BOTTOM``
>- - 11
>- - Top field paired with next bottom field in output order
>- * - ``V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_PAIRED_NEXT_TOP``
>- - 12
>- - Bottom field paired with next top field in output order
>-
>-.. c:type:: v4l2_hevc_pred_weight_table
>-
>-.. raw:: latex
>-
>- \footnotesize
>-
>-.. tabularcolumns:: |p{0.8cm}|p{10.6cm}|p{5.9cm}|
>-
>-.. flat-table:: struct v4l2_hevc_pred_weight_table
>- :header-rows: 0
>- :stub-columns: 0
>- :widths: 1 1 2
>-
>- * - __s8
>- - ``delta_luma_weight_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
>- - The difference of the weighting factor applied to the luma
>- prediction value for list 0.
>- * - __s8
>- - ``luma_offset_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
>- - The additive offset applied to the luma prediction value for list 0.
>- * - __s8
>- - ``delta_chroma_weight_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]``
>- - The difference of the weighting factor applied to the chroma
>- prediction value for list 0.
>- * - __s8
>- - ``chroma_offset_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]``
>- - The difference of the additive offset applied to the chroma
>- prediction values for list 0.
>- * - __s8
>- - ``delta_luma_weight_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
>- - The difference of the weighting factor applied to the luma
>- prediction value for list 1.
>- * - __s8
>- - ``luma_offset_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
>- - The additive offset applied to the luma prediction value for list 1.
>- * - __s8
>- - ``delta_chroma_weight_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]``
>- - The difference of the weighting factor applied to the chroma
>- prediction value for list 1.
>- * - __s8
>- - ``chroma_offset_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]``
>- - The difference of the additive offset applied to the chroma
>- prediction values for list 1.
>- * - __u8
>- - ``luma_log2_weight_denom``
>- - The base 2 logarithm of the denominator for all luma weighting
>- factors.
>- * - __s8
>- - ``delta_chroma_log2_weight_denom``
>- - The difference of the base 2 logarithm of the denominator for
>- all chroma weighting factors.
>- * - __u8
>- - ``padding[6]``
>- - Applications and drivers must set this to zero.
>-
>-.. raw:: latex
>-
>- \normalsize
>-
>-``V4L2_CID_STATELESS_HEVC_DECODE_MODE (enum)``
>- Specifies the decoding mode to use. Currently exposes slice-based and
>- frame-based decoding but new modes might be added later on.
>- This control is used as a modifier for V4L2_PIX_FMT_HEVC_SLICE
>- pixel format. Applications that support V4L2_PIX_FMT_HEVC_SLICE
>- are required to set this control in order to specify the decoding mode
>- that is expected for the buffer.
>- Drivers may expose a single or multiple decoding modes, depending
>- on what they can support.
>-
>- .. note::
>-
>- This menu control is not yet part of the public kernel API and
>- it is expected to change.
>-
>-.. c:type:: v4l2_stateless_hevc_decode_mode
>-
>-.. raw:: latex
>-
>- \small
>-
>-.. tabularcolumns:: |p{9.4cm}|p{0.6cm}|p{7.3cm}|
>-
>-.. flat-table::
>- :header-rows: 0
>- :stub-columns: 0
>- :widths: 1 1 2
>-
>- * - ``V4L2_STATELESS_HEVC_DECODE_MODE_SLICE_BASED``
>- - 0
>- - Decoding is done at the slice granularity.
>- The OUTPUT buffer must contain a single slice.
>- * - ``V4L2_STATELESS_HEVC_DECODE_MODE_FRAME_BASED``
>- - 1
>- - Decoding is done at the frame granularity.
>- The OUTPUT buffer must contain all slices needed to decode the
>- frame. The OUTPUT buffer must also contain both fields.
>-
>-.. raw:: latex
>-
>- \normalsize
>-
>-``V4L2_CID_STATELESS_HEVC_START_CODE (enum)``
>- Specifies the HEVC slice start code expected for each slice.
>- This control is used as a modifier for V4L2_PIX_FMT_HEVC_SLICE
>- pixel format. Applications that support V4L2_PIX_FMT_HEVC_SLICE
>- are required to set this control in order to specify the start code
>- that is expected for the buffer.
>- Drivers may expose a single or multiple start codes, depending
>- on what they can support.
>-
>- .. note::
>-
>- This menu control is not yet part of the public kernel API and
>- it is expected to change.
>-
>-.. c:type:: v4l2_stateless_hevc_start_code
>-
>-.. tabularcolumns:: |p{9.2cm}|p{0.6cm}|p{7.5cm}|
>-
>-.. flat-table::
>- :header-rows: 0
>- :stub-columns: 0
>- :widths: 1 1 2
>-
>- * - ``V4L2_STATELESS_HEVC_START_CODE_NONE``
>- - 0
>- - Selecting this value specifies that HEVC slices are passed
>- to the driver without any start code. The bitstream data should be
>- according to :ref:`hevc` 7.3.1.1 General NAL unit syntax, hence
>- contains emulation prevention bytes when required.
>- * - ``V4L2_STATELESS_HEVC_START_CODE_ANNEX_B``
>- - 1
>- - Selecting this value specifies that HEVC slices are expected
>- to be prefixed by Annex B start codes. According to :ref:`hevc`
>- valid start codes can be 3-bytes 0x000001 or 4-bytes 0x00000001.
>-
>-``V4L2_CID_MPEG_VIDEO_BASELAYER_PRIORITY_ID (integer)``
>- Specifies a priority identifier for the NAL unit, which will be applied to
>- the base layer. By default this value is set to 0 for the base layer,
>- and the next layer will have the priority ID assigned as 1, 2, 3 and so on.
>- The video encoder can't decide the priority id to be applied to a layer,
>- so this has to come from client.
>- This is applicable to H264 and valid Range is from 0 to 63.
>- Source Rec. ITU-T H.264 (06/2019); G.7.4.1.1, G.8.8.1.
>-
>-``V4L2_CID_MPEG_VIDEO_LTR_COUNT (integer)``
>- Specifies the maximum number of Long Term Reference (LTR) frames at any
>- given time that the encoder can keep.
>- This is applicable to the H264 and HEVC encoders.
>-
>-``V4L2_CID_MPEG_VIDEO_FRAME_LTR_INDEX (integer)``
>- After setting this control the frame that will be queued next
>- will be marked as a Long Term Reference (LTR) frame
>- and given this LTR index which ranges from 0 to LTR_COUNT-1.
>- This is applicable to the H264 and HEVC encoders.
>- Source Rec. ITU-T H.264 (06/2019); Table 7.9
>-
>-``V4L2_CID_MPEG_VIDEO_USE_LTR_FRAMES (bitmask)``
>- Specifies the Long Term Reference (LTR) frame(s) to be used for
>- encoding the next frame queued after setting this control.
>- This provides a bitmask which consists of bits [0, LTR_COUNT-1].
>- This is applicable to the H264 and HEVC encoders.
>-
>-``V4L2_CID_STATELESS_HEVC_DECODE_PARAMS (struct)``
>- Specifies various decode parameters, especially the references picture order
>- count (POC) for all the lists (short, long, before, current, after) and the
>- number of entries for each of them.
>- These parameters are defined according to :ref:`hevc`.
>- They are described in section 8.3 "Slice decoding process" of the
>- specification.
>-
>-.. c:type:: v4l2_ctrl_hevc_decode_params
>-
>-.. cssclass:: longtable
>-
>-.. flat-table:: struct v4l2_ctrl_hevc_decode_params
>- :header-rows: 0
>- :stub-columns: 0
>- :widths: 1 1 2
>-
>- * - __s32
>- - ``pic_order_cnt_val``
>- - PicOrderCntVal as described in section 8.3.1 "Decoding process
>- for picture order count" of the specification.
>- * - __u8
>- - ``num_active_dpb_entries``
>- - The number of entries in ``dpb``.
>- * - __u8
>- - ``num_poc_st_curr_before``
>- - The number of reference pictures in the short-term set that come before
>- the current frame.
>- * - __u8
>- - ``num_poc_st_curr_after``
>- - The number of reference pictures in the short-term set that come after
>- the current frame.
>- * - __u8
>- - ``num_poc_lt_curr``
>- - The number of reference pictures in the long-term set.
>- * - __u8
>- - ``poc_st_curr_before[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
>- - PocStCurrBefore as described in section 8.3.2 "Decoding process for reference
>- picture set": provides the index of the short term before references in DPB array.
>- * - __u8
>- - ``poc_st_curr_after[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
>- - PocStCurrAfter as described in section 8.3.2 "Decoding process for reference
>- picture set": provides the index of the short term after references in DPB array.
>- * - __u8
>- - ``poc_lt_curr[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
>- - PocLtCurr as described in section 8.3.2 "Decoding process for reference
>- picture set": provides the index of the long term references in DPB array.
>- * - struct :c:type:`v4l2_hevc_dpb_entry`
>- - ``dpb[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
>- - The decoded picture buffer, for meta-data about reference frames.
>- * - __u64
>- - ``flags``
>- - See :ref:`Decode Parameters Flags <hevc_decode_params_flags>`
>-
>-.. _hevc_decode_params_flags:
>-
>-``Decode Parameters Flags``
>-
>-.. cssclass:: longtable
>-
>-.. flat-table::
>- :header-rows: 0
>- :stub-columns: 0
>- :widths: 1 1 2
>-
>- * - ``V4L2_HEVC_DECODE_PARAM_FLAG_IRAP_PIC``
>- - 0x00000001
>- -
>- * - ``V4L2_HEVC_DECODE_PARAM_FLAG_IDR_PIC``
>- - 0x00000002
>- -
>- * - ``V4L2_HEVC_DECODE_PARAM_FLAG_NO_OUTPUT_OF_PRIOR``
>- - 0x00000004
>- -
>diff --git a/Documentation/userspace-api/media/v4l/pixfmt-compressed.rst b/Documentation/userspace-api/media/v4l/pixfmt-compressed.rst
>index c352d91a73d8..506dd3c98884 100644
>--- a/Documentation/userspace-api/media/v4l/pixfmt-compressed.rst
>+++ b/Documentation/userspace-api/media/v4l/pixfmt-compressed.rst
>@@ -212,7 +212,7 @@ Compressed Formats
> ``V4L2_CID_MPEG_VIDEO_HEVC_SPS``,
> ``V4L2_CID_MPEG_VIDEO_HEVC_PPS``, and
> ``V4L2_CID_MPEG_VIDEO_HEVC_SLICE_PARAMS``.
>- See the :ref:`associated Codec Control IDs <v4l2-mpeg-hevc>`.
>+ See the :ref:`associated Codec Control IDs <v4l2-codec-stateless-hevc>`.
> Buffers associated with this pixel format must contain the appropriate
> number of macroblocks to decode a full corresponding frame.
> * .. _V4L2-PIX-FMT-FWHT:
>diff --git a/Documentation/userspace-api/media/v4l/vidioc-g-ext-ctrls.rst b/Documentation/userspace-api/media/v4l/vidioc-g-ext-ctrls.rst
>index 29971a45a2d4..892cfeb8b988 100644
>--- a/Documentation/userspace-api/media/v4l/vidioc-g-ext-ctrls.rst
>+++ b/Documentation/userspace-api/media/v4l/vidioc-g-ext-ctrls.rst
>@@ -249,6 +249,26 @@ still cause this situation.
> - ``p_hdr10_mastering``
> - A pointer to a struct :c:type:`v4l2_ctrl_hdr10_mastering_display`. Valid if this control is
> of type ``V4L2_CTRL_TYPE_HDR10_MASTERING_DISPLAY``.
>+ * - struct :c:type:`v4l2_ctrl_hevc_sps` *
>+ - ``p_hevc_sps``
>+ - A pointer to a struct :c:type:`v4l2_ctrl_hevc_sps`. Valid if this
>+ control is of type ``V4L2_CTRL_TYPE_HEVC_SPS``.
>+ * - struct :c:type:`v4l2_ctrl_hevc_pps` *
>+ - ``p_hevc_pps``
>+ - A pointer to a struct :c:type:`v4l2_ctrl_hevc_pps`. Valid if this
>+ control is of type ``V4L2_CTRL_TYPE_HEVC_PPS``.
>+ * - struct :c:type:`v4l2_ctrl_hevc_slice_params` *
>+ - ``p_hevc_slice_params``
>+ - A pointer to a struct :c:type:`v4l2_ctrl_hevc_slice_params`. Valid if this
>+ control is of type ``V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS``.
>+ * - struct :c:type:`v4l2_ctrl_hevc_scaling_matrix` *
>+ - ``p_hevc_scaling_matrix``
>+ - A pointer to a struct :c:type:`v4l2_ctrl_hevc_scaling_matrix`. Valid if this
>+ control is of type ``V4L2_CTRL_TYPE_HEVC_SCALING_MATRIX``.
>+ * - struct :c:type:`v4l2_ctrl_hevc_decode_params` *
>+ - ``p_hevc_decode_params``
>+ - A pointer to a struct :c:type:`v4l2_ctrl_hevc_decode_params`. Valid if this
>+ control is of type ``V4L2_CTRL_TYPE_HEVC_DECODE_PARAMS``.
> * - void *
> - ``ptr``
> - A pointer to a compound type which can be an N-dimensional array
>diff --git a/include/media/hevc-ctrls.h b/include/media/hevc-ctrls.h
>deleted file mode 100644
>index 1834072c0a43..000000000000
>--- a/include/media/hevc-ctrls.h
>+++ /dev/null
>@@ -1,465 +0,0 @@
>-/* SPDX-License-Identifier: GPL-2.0 */
>-/*
>- * These are the HEVC state controls for use with stateless HEVC
>- * codec drivers.
>- *
>- * It turns out that these structs are not stable yet and will undergo
>- * more changes. So keep them private until they are stable and ready to
>- * become part of the official public API.
>- */
>-
>-#ifndef _HEVC_CTRLS_H_
>-#define _HEVC_CTRLS_H_
>-
>-#include <linux/videodev2.h>
>-
>-#define V4L2_CID_STATELESS_HEVC_SPS (V4L2_CID_CODEC_BASE + 1008)
>-#define V4L2_CID_STATELESS_HEVC_PPS (V4L2_CID_CODEC_BASE + 1009)
>-#define V4L2_CID_STATELESS_HEVC_SLICE_PARAMS (V4L2_CID_CODEC_BASE + 1010)
>-#define V4L2_CID_STATELESS_HEVC_SCALING_MATRIX (V4L2_CID_CODEC_BASE + 1011)
>-#define V4L2_CID_STATELESS_HEVC_DECODE_PARAMS (V4L2_CID_CODEC_BASE + 1012)
>-#define V4L2_CID_STATELESS_HEVC_DECODE_MODE (V4L2_CID_CODEC_BASE + 1015)
>-#define V4L2_CID_STATELESS_HEVC_START_CODE (V4L2_CID_CODEC_BASE + 1016)
>-#define V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS (V4L2_CID_CODEC_BASE + 1017)
>-
>-enum v4l2_stateless_hevc_decode_mode {
>- V4L2_STATELESS_HEVC_DECODE_MODE_SLICE_BASED,
>- V4L2_STATELESS_HEVC_DECODE_MODE_FRAME_BASED,
>-};
>-
>-enum v4l2_stateless_hevc_start_code {
>- V4L2_STATELESS_HEVC_START_CODE_NONE,
>- V4L2_STATELESS_HEVC_START_CODE_ANNEX_B,
>-};
>-
>-#define V4L2_HEVC_SLICE_TYPE_B 0
>-#define V4L2_HEVC_SLICE_TYPE_P 1
>-#define V4L2_HEVC_SLICE_TYPE_I 2
>-
>-#define V4L2_HEVC_SPS_FLAG_SEPARATE_COLOUR_PLANE (1ULL << 0)
>-#define V4L2_HEVC_SPS_FLAG_SCALING_LIST_ENABLED (1ULL << 1)
>-#define V4L2_HEVC_SPS_FLAG_AMP_ENABLED (1ULL << 2)
>-#define V4L2_HEVC_SPS_FLAG_SAMPLE_ADAPTIVE_OFFSET (1ULL << 3)
>-#define V4L2_HEVC_SPS_FLAG_PCM_ENABLED (1ULL << 4)
>-#define V4L2_HEVC_SPS_FLAG_PCM_LOOP_FILTER_DISABLED (1ULL << 5)
>-#define V4L2_HEVC_SPS_FLAG_LONG_TERM_REF_PICS_PRESENT (1ULL << 6)
>-#define V4L2_HEVC_SPS_FLAG_SPS_TEMPORAL_MVP_ENABLED (1ULL << 7)
>-#define V4L2_HEVC_SPS_FLAG_STRONG_INTRA_SMOOTHING_ENABLED (1ULL << 8)
>-
>-/**
>- * struct v4l2_ctrl_hevc_sps - ITU-T Rec. H.265: Sequence parameter set
>- *
>- * @video_parameter_set_id: specifies the value of the
>- * vps_video_parameter_set_id of the active VPS
>- * @seq_parameter_set_id: provides an identifier for the SPS for
>- * reference by other syntax elements
>- * @pic_width_in_luma_samples: specifies the width of each decoded picture
>- * in units of luma samples
>- * @pic_height_in_luma_samples: specifies the height of each decoded picture
>- * in units of luma samples
>- * @bit_depth_luma_minus8: specifies the bit depth of the samples of the
>- * luma array
>- * @bit_depth_chroma_minus8: specifies the bit depth of the samples of the
>- * chroma arrays
>- * @log2_max_pic_order_cnt_lsb_minus4: specifies the value of the variable
>- * MaxPicOrderCntLsb
>- * @sps_max_dec_pic_buffering_minus1: plus 1 specifies the maximum required
>- * size of the decoded picture buffer for
>- * the CVS
>- * @sps_max_num_reorder_pics: indicates the maximum allowed number of pictures
>- * @sps_max_latency_increase_plus1: not equal to 0 is used to compute the
>- * value of SpsMaxLatencyPictures[i]
>- * @log2_min_luma_coding_block_size_minus3: plus 3 specifies the minimum
>- * luma coding block size
>- * @log2_diff_max_min_luma_coding_block_size: specifies the difference between
>- * the maximum and minimum luma
>- * coding block size
>- * @log2_min_luma_transform_block_size_minus2: plus 2 specifies the minimum luma
>- * transform block size
>- * @log2_diff_max_min_luma_transform_block_size: specifies the difference between
>- * the maximum and minimum luma
>- * transform block size
>- * @max_transform_hierarchy_depth_inter: specifies the maximum hierarchy
>- * depth for transform units of
>- * coding units coded in inter
>- * prediction mode
>- * @max_transform_hierarchy_depth_intra: specifies the maximum hierarchy
>- * depth for transform units of
>- * coding units coded in intra
>- * prediction mode
>- * @pcm_sample_bit_depth_luma_minus1: specifies the number of bits used to
>- * represent each of PCM sample values of the
>- * luma component
>- * @pcm_sample_bit_depth_chroma_minus1: specifies the number of bits used to
>- * represent each of PCM sample values of
>- * the chroma components
>- * @log2_min_pcm_luma_coding_block_size_minus3: plus 3 specifies the minimum size
>- * of coding blocks
>- * @log2_diff_max_min_pcm_luma_coding_block_size: specifies the difference between
>- * the maximum and minimum size of
>- * coding blocks
>- * @num_short_term_ref_pic_sets: speciefies the number of st_ref_pic_set()
>- * syntax structures included in the SPS
>- * @num_long_term_ref_pics_sps: specifies the number of candidate long-term
>- * reference pictures that are specified in the SPS
>- * @chroma_format_idc: specifies the chroma sampling
>- * @sps_max_sub_layers_minus1: plus 1 specifies the maximum number of temporal
>- * sub-layers
>- * @flags: see V4L2_HEVC_SPS_FLAG_{}
>- */
>-struct v4l2_ctrl_hevc_sps {
>- __u8 video_parameter_set_id;
>- __u8 seq_parameter_set_id;
>- __u16 pic_width_in_luma_samples;
>- __u16 pic_height_in_luma_samples;
>- __u8 bit_depth_luma_minus8;
>- __u8 bit_depth_chroma_minus8;
>- __u8 log2_max_pic_order_cnt_lsb_minus4;
>- __u8 sps_max_dec_pic_buffering_minus1;
>- __u8 sps_max_num_reorder_pics;
>- __u8 sps_max_latency_increase_plus1;
>- __u8 log2_min_luma_coding_block_size_minus3;
>- __u8 log2_diff_max_min_luma_coding_block_size;
>- __u8 log2_min_luma_transform_block_size_minus2;
>- __u8 log2_diff_max_min_luma_transform_block_size;
>- __u8 max_transform_hierarchy_depth_inter;
>- __u8 max_transform_hierarchy_depth_intra;
>- __u8 pcm_sample_bit_depth_luma_minus1;
>- __u8 pcm_sample_bit_depth_chroma_minus1;
>- __u8 log2_min_pcm_luma_coding_block_size_minus3;
>- __u8 log2_diff_max_min_pcm_luma_coding_block_size;
>- __u8 num_short_term_ref_pic_sets;
>- __u8 num_long_term_ref_pics_sps;
>- __u8 chroma_format_idc;
>- __u8 sps_max_sub_layers_minus1;
>-
>- __u8 padding[6];
>- __u64 flags;
>- __u8 reserved[24];
>-};
>-
>-#define V4L2_HEVC_PPS_FLAG_DEPENDENT_SLICE_SEGMENT_ENABLED (1ULL << 0)
>-#define V4L2_HEVC_PPS_FLAG_OUTPUT_FLAG_PRESENT (1ULL << 1)
>-#define V4L2_HEVC_PPS_FLAG_SIGN_DATA_HIDING_ENABLED (1ULL << 2)
>-#define V4L2_HEVC_PPS_FLAG_CABAC_INIT_PRESENT (1ULL << 3)
>-#define V4L2_HEVC_PPS_FLAG_CONSTRAINED_INTRA_PRED (1ULL << 4)
>-#define V4L2_HEVC_PPS_FLAG_TRANSFORM_SKIP_ENABLED (1ULL << 5)
>-#define V4L2_HEVC_PPS_FLAG_CU_QP_DELTA_ENABLED (1ULL << 6)
>-#define V4L2_HEVC_PPS_FLAG_PPS_SLICE_CHROMA_QP_OFFSETS_PRESENT (1ULL << 7)
>-#define V4L2_HEVC_PPS_FLAG_WEIGHTED_PRED (1ULL << 8)
>-#define V4L2_HEVC_PPS_FLAG_WEIGHTED_BIPRED (1ULL << 9)
>-#define V4L2_HEVC_PPS_FLAG_TRANSQUANT_BYPASS_ENABLED (1ULL << 10)
>-#define V4L2_HEVC_PPS_FLAG_TILES_ENABLED (1ULL << 11)
>-#define V4L2_HEVC_PPS_FLAG_ENTROPY_CODING_SYNC_ENABLED (1ULL << 12)
>-#define V4L2_HEVC_PPS_FLAG_LOOP_FILTER_ACROSS_TILES_ENABLED (1ULL << 13)
>-#define V4L2_HEVC_PPS_FLAG_PPS_LOOP_FILTER_ACROSS_SLICES_ENABLED (1ULL << 14)
>-#define V4L2_HEVC_PPS_FLAG_DEBLOCKING_FILTER_OVERRIDE_ENABLED (1ULL << 15)
>-#define V4L2_HEVC_PPS_FLAG_PPS_DISABLE_DEBLOCKING_FILTER (1ULL << 16)
>-#define V4L2_HEVC_PPS_FLAG_LISTS_MODIFICATION_PRESENT (1ULL << 17)
>-#define V4L2_HEVC_PPS_FLAG_SLICE_SEGMENT_HEADER_EXTENSION_PRESENT (1ULL << 18)
>-#define V4L2_HEVC_PPS_FLAG_DEBLOCKING_FILTER_CONTROL_PRESENT (1ULL << 19)
>-#define V4L2_HEVC_PPS_FLAG_UNIFORM_SPACING (1ULL << 20)
>-
>-/**
>- * struct v4l2_ctrl_hevc_pps - ITU-T Rec. H.265: Picture parameter set
>- *
>- * @pic_parameter_set_id: identifies the PPS for reference by other
>- * syntax elements
>- * @num_extra_slice_header_bits: specifies the number of extra slice header
>- * bits that are present in the slice header RBSP
>- * for coded pictures referring to the PPS.
>- * @num_ref_idx_l0_default_active_minus1: specifies the inferred value of
>- * num_ref_idx_l0_active_minus1
>- * @num_ref_idx_l1_default_active_minus1: specifies the inferred value of
>- * num_ref_idx_l1_active_minus1
>- * @init_qp_minus26: plus 26 specifies the initial value of SliceQp Y for
>- * each slice referring to the PPS
>- * @diff_cu_qp_delta_depth: specifies the difference between the luma coding
>- * tree block size and the minimum luma coding block
>- * size of coding units that convey cu_qp_delta_abs
>- * and cu_qp_delta_sign_flag
>- * @pps_cb_qp_offset: specify the offsets to the luma quantization parameter Cb
>- * @pps_cr_qp_offset: specify the offsets to the luma quantization parameter Cr
>- * @num_tile_columns_minus1: plus 1 specifies the number of tile columns
>- * partitioning the picture
>- * @num_tile_rows_minus1: plus 1 specifies the number of tile rows partitioning
>- * the picture
>- * @column_width_minus1: plus 1 specifies the width of the i-th tile column in
>- * units of coding tree blocks
>- * @row_height_minus1: plus 1 specifies the height of the i-th tile row in
>- * units of coding tree blocks
>- * @pps_beta_offset_div2: specify the default deblocking parameter offsets for
>- * beta divided by 2
>- * @pps_tc_offset_div2: specify the default deblocking parameter offsets for tC
>- * divided by 2
>- * @log2_parallel_merge_level_minus2: plus 2 specifies the value of the variable
>- * Log2ParMrgLevel
>- * @flags: see V4L2_HEVC_PPS_FLAG_{}
>- */
>-struct v4l2_ctrl_hevc_pps {
>- __u8 pic_parameter_set_id;
>- __u8 num_extra_slice_header_bits;
>- __u8 num_ref_idx_l0_default_active_minus1;
>- __u8 num_ref_idx_l1_default_active_minus1;
>- __s8 init_qp_minus26;
>- __u8 diff_cu_qp_delta_depth;
>- __s8 pps_cb_qp_offset;
>- __s8 pps_cr_qp_offset;
>- __u8 num_tile_columns_minus1;
>- __u8 num_tile_rows_minus1;
>- __u8 column_width_minus1[20];
>- __u8 row_height_minus1[22];
>- __s8 pps_beta_offset_div2;
>- __s8 pps_tc_offset_div2;
>- __u8 log2_parallel_merge_level_minus2;
>- __u8 padding[9];
>-
>- __u64 flags;
>- __u8 reserved[56];
>-};
>-
>-#define V4L2_HEVC_DPB_ENTRY_LONG_TERM_REFERENCE 0x01
>-
>-#define V4L2_HEVC_SEI_PIC_STRUCT_FRAME 0
>-#define V4L2_HEVC_SEI_PIC_STRUCT_TOP_FIELD 1
>-#define V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_FIELD 2
>-#define V4L2_HEVC_SEI_PIC_STRUCT_TOP_BOTTOM 3
>-#define V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_TOP 4
>-#define V4L2_HEVC_SEI_PIC_STRUCT_TOP_BOTTOM_TOP 5
>-#define V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_TOP_BOTTOM 6
>-#define V4L2_HEVC_SEI_PIC_STRUCT_FRAME_DOUBLING 7
>-#define V4L2_HEVC_SEI_PIC_STRUCT_FRAME_TRIPLING 8
>-#define V4L2_HEVC_SEI_PIC_STRUCT_TOP_PAIRED_PREVIOUS_BOTTOM 9
>-#define V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_PAIRED_PREVIOUS_TOP 10
>-#define V4L2_HEVC_SEI_PIC_STRUCT_TOP_PAIRED_NEXT_BOTTOM 11
>-#define V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_PAIRED_NEXT_TOP 12
>-
>-#define V4L2_HEVC_DPB_ENTRIES_NUM_MAX 16
>-
>-/**
>- * struct v4l2_hevc_dpb_entry - HEVC decoded picture buffer entry
>- *
>- * @timestamp: timestamp of the V4L2 capture buffer to use as reference.
>- * @flags: long term flag for the reference frame
>- * @field_pic: whether the reference is a field picture or a frame.
>- * @pic_order_cnt_val: the picture order count of the reference.
>- */
>-struct v4l2_hevc_dpb_entry {
>- __u64 timestamp;
>- __u8 flags;
>- __u8 field_pic;
>- __s32 pic_order_cnt_val;
>- __u8 padding[2];
>-};
>-
>-/**
>- * struct v4l2_hevc_pred_weight_table - HEVC weighted prediction parameters
>- *
>- * @delta_luma_weight_l0: the difference of the weighting factor applied
>- * to the luma prediction value for list 0
>- * @luma_offset_l0: the additive offset applied to the luma prediction value
>- * for list 0
>- * @delta_chroma_weight_l0: the difference of the weighting factor applied
>- * to the chroma prediction values for list 0
>- * @chroma_offset_l0: the difference of the additive offset applied to
>- * the chroma prediction values for list 0
>- * @delta_luma_weight_l1: the difference of the weighting factor applied
>- * to the luma prediction value for list 1
>- * @luma_offset_l1: the additive offset applied to the luma prediction value
>- * for list 1
>- * @delta_chroma_weight_l1: the difference of the weighting factor applied
>- * to the chroma prediction values for list 1
>- * @chroma_offset_l1: the difference of the additive offset applied to
>- * the chroma prediction values for list 1
>- * @luma_log2_weight_denom: the base 2 logarithm of the denominator for
>- * all luma weighting factors
>- * @delta_chroma_log2_weight_denom: the difference of the base 2 logarithm
>- * of the denominator for all chroma
>- * weighting factors
>- */
>-struct v4l2_hevc_pred_weight_table {
>- __s8 delta_luma_weight_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
>- __s8 luma_offset_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
>- __s8 delta_chroma_weight_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2];
>- __s8 chroma_offset_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2];
>-
>- __s8 delta_luma_weight_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
>- __s8 luma_offset_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
>- __s8 delta_chroma_weight_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2];
>- __s8 chroma_offset_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2];
>-
>- __u8 luma_log2_weight_denom;
>- __s8 delta_chroma_log2_weight_denom;
>-};
>-
>-#define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_SAO_LUMA (1ULL << 0)
>-#define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_SAO_CHROMA (1ULL << 1)
>-#define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_TEMPORAL_MVP_ENABLED (1ULL << 2)
>-#define V4L2_HEVC_SLICE_PARAMS_FLAG_MVD_L1_ZERO (1ULL << 3)
>-#define V4L2_HEVC_SLICE_PARAMS_FLAG_CABAC_INIT (1ULL << 4)
>-#define V4L2_HEVC_SLICE_PARAMS_FLAG_COLLOCATED_FROM_L0 (1ULL << 5)
>-#define V4L2_HEVC_SLICE_PARAMS_FLAG_USE_INTEGER_MV (1ULL << 6)
>-#define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_DEBLOCKING_FILTER_DISABLED (1ULL << 7)
>-#define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_LOOP_FILTER_ACROSS_SLICES_ENABLED (1ULL << 8)
>-#define V4L2_HEVC_SLICE_PARAMS_FLAG_DEPENDENT_SLICE_SEGMENT (1ULL << 9)
>-
>-/**
>- * v4l2_ctrl_hevc_slice_params - HEVC slice parameters
>- *
>- * This control is a dynamically sized 1-dimensional array,
>- * V4L2_CTRL_FLAG_DYNAMIC_ARRAY flag must be set when using it.
>- *
>- * @bit_size: size (in bits) of the current slice data
>- * @data_byte_offset: offset (in bytes) to the video data in the current slice data
>- * @num_entry_point_offsets: specifies the number of entry point offset syntax
>- * elements in the slice header.
>- * @nal_unit_type: specifies the coding type of the slice (B, P or I)
>- * @nuh_temporal_id_plus1: minus 1 specifies a temporal identifier for the NAL unit
>- * @slice_type: see V4L2_HEVC_SLICE_TYPE_{}
>- * @colour_plane_id: specifies the colour plane associated with the current slice
>- * @slice_pic_order_cnt: specifies the picture order count
>- * @num_ref_idx_l0_active_minus1: specifies the maximum reference index for
>- * reference picture list 0 that may be used to decode
>- * the slice
>- * @num_ref_idx_l1_active_minus1: specifies the maximum reference index for
>- * reference picture list 1 that may be used to decode
>- * the slice
>- * @collocated_ref_idx: specifies the reference index of the collocated picture used
>- * for temporal motion vector prediction
>- * @five_minus_max_num_merge_cand: specifies the maximum number of merging
>- * motion vector prediction candidates supported in
>- * the slice subtracted from 5
>- * @slice_qp_delta: specifies the initial value of QpY to be used for the coding
>- * blocks in the slice
>- * @slice_cb_qp_offset: specifies a difference to be added to the value of pps_cb_qp_offset
>- * @slice_cr_qp_offset: specifies a difference to be added to the value of pps_cr_qp_offset
>- * @slice_act_y_qp_offset: screen content extension parameters
>- * @slice_act_cb_qp_offset: screen content extension parameters
>- * @slice_act_cr_qp_offset: screen content extension parameters
>- * @slice_beta_offset_div2: specify the deblocking parameter offsets for beta divided by 2
>- * @slice_tc_offset_div2: specify the deblocking parameter offsets for tC divided by 2
>- * @pic_struct: indicates whether a picture should be displayed as a frame or as one or
>- * more fields
>- * @slice_segment_addr: specifies the address of the first coding tree block in
>- * the slice segment
>- * @ref_idx_l0: the list of L0 reference elements as indices in the DPB
>- * @ref_idx_l1: the list of L1 reference elements as indices in the DPB
>- * @short_term_ref_pic_set_size: specifies the size of short-term reference
>- * pictures included in the SPS
>- * @long_term_ref_pic_set_size: specifies the size of long-term reference
>- * picture include in the SPS
>- * @pred_weight_table: the prediction weight coefficients for inter-picture
>- * prediction
>- * @flags: see V4L2_HEVC_SLICE_PARAMS_FLAG_{}
>- */
>-struct v4l2_ctrl_hevc_slice_params {
>- __u32 bit_size;
>- __u32 data_byte_offset;
>- __u32 num_entry_point_offsets;
>- /* ISO/IEC 23008-2, ITU-T Rec. H.265: NAL unit header */
>- __u8 nal_unit_type;
>- __u8 nuh_temporal_id_plus1;
>-
>- /* ISO/IEC 23008-2, ITU-T Rec. H.265: General slice segment header */
>- __u8 slice_type;
>- __u8 colour_plane_id;
>- __u16 slice_pic_order_cnt;
>- __u8 num_ref_idx_l0_active_minus1;
>- __u8 num_ref_idx_l1_active_minus1;
>- __u8 collocated_ref_idx;
>- __u8 five_minus_max_num_merge_cand;
>- __s8 slice_qp_delta;
>- __s8 slice_cb_qp_offset;
>- __s8 slice_cr_qp_offset;
>- __s8 slice_act_y_qp_offset;
>- __s8 slice_act_cb_qp_offset;
>- __s8 slice_act_cr_qp_offset;
>- __s8 slice_beta_offset_div2;
>- __s8 slice_tc_offset_div2;
>-
>- /* ISO/IEC 23008-2, ITU-T Rec. H.265: Picture timing SEI message */
>- __u8 pic_struct;
>-
>- __u8 reserved;
>- /* ISO/IEC 23008-2, ITU-T Rec. H.265: General slice segment header */
>- __u32 slice_segment_addr;
>- __u8 ref_idx_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
>- __u8 ref_idx_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
>- __u16 short_term_ref_pic_set_size;
>- __u16 long_term_ref_pic_set_size;
>-
>- /* ISO/IEC 23008-2, ITU-T Rec. H.265: Weighted prediction parameter */
>- struct v4l2_hevc_pred_weight_table pred_weight_table;
>-
>- __u8 reserved1[6];
>- __u64 flags;
>- __u8 padding[40];
>-};
>-
>-#define V4L2_HEVC_DECODE_PARAM_FLAG_IRAP_PIC 0x1
>-#define V4L2_HEVC_DECODE_PARAM_FLAG_IDR_PIC 0x2
>-#define V4L2_HEVC_DECODE_PARAM_FLAG_NO_OUTPUT_OF_PRIOR 0x4
>-
>-/**
>- * struct v4l2_ctrl_hevc_decode_params - HEVC decode parameters
>- *
>- * @pic_order_cnt_val: picture order count
>- * @num_active_dpb_entries: the number of entries in dpb
>- * @num_poc_st_curr_before: the number of reference pictures in the short-term
>- * set that come before the current frame
>- * @num_poc_st_curr_after: the number of reference pictures in the short-term
>- * set that come after the current frame
>- * @num_poc_lt_curr: the number of reference pictures in the long-term set
>- * @poc_st_curr_before: provides the index of the short term before references
>- * in DPB array
>- * @poc_st_curr_after: provides the index of the short term after references
>- * in DPB array
>- * @poc_lt_curr: provides the index of the long term references in DPB array
>- * @dpb: the decoded picture buffer, for meta-data about reference frames
>- * @flags: see V4L2_HEVC_DECODE_PARAM_FLAG_{}
>- */
>-struct v4l2_ctrl_hevc_decode_params {
>- __s32 pic_order_cnt_val;
>- __u8 num_active_dpb_entries;
>- __u8 num_poc_st_curr_before;
>- __u8 num_poc_st_curr_after;
>- __u8 num_poc_lt_curr;
>- __u8 poc_st_curr_before[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
>- __u8 poc_st_curr_after[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
>- __u8 poc_lt_curr[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
>- struct v4l2_hevc_dpb_entry dpb[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
>- __u64 flags;
>-};
>-
>-/**
>- * struct v4l2_ctrl_hevc_scaling_matrix - HEVC scaling lists parameters
>- *
>- * @scaling_list_4x4: scaling list is used for the scaling process for
>- * transform coefficients. The values on each scaling
>- * list are expected in raster scan order
>- * @scaling_list_8x8: scaling list is used for the scaling process for
>- * transform coefficients. The values on each scaling
>- * list are expected in raster scan order
>- * @scaling_list_16x16: scaling list is used for the scaling process for
>- * transform coefficients. The values on each scaling
>- * list are expected in raster scan order
>- * @scaling_list_32x32: scaling list is used for the scaling process for
>- * transform coefficients. The values on each scaling
>- * list are expected in raster scan order
>- * @scaling_list_dc_coef_16x16: scaling list is used for the scaling process
>- * for transform coefficients. The values on each
>- * scaling list are expected in raster scan order.
>- * @scaling_list_dc_coef_32x32: scaling list is used for the scaling process
>- * for transform coefficients. The values on each
>- * scaling list are expected in raster scan order.
>- */
>-struct v4l2_ctrl_hevc_scaling_matrix {
>- __u8 scaling_list_4x4[6][16];
>- __u8 scaling_list_8x8[6][64];
>- __u8 scaling_list_16x16[6][64];
>- __u8 scaling_list_32x32[2][64];
>- __u8 scaling_list_dc_coef_16x16[6];
>- __u8 scaling_list_dc_coef_32x32[2];
>-};
>-
>-#endif
>diff --git a/include/media/v4l2-ctrls.h b/include/media/v4l2-ctrls.h
>index f4105de8a8d2..00828a4f9404 100644
>--- a/include/media/v4l2-ctrls.h
>+++ b/include/media/v4l2-ctrls.h
>@@ -13,12 +13,6 @@
> #include <linux/videodev2.h>
> #include <media/media-request.h>
>
>-/*
>- * Include the stateless codec compound control definitions.
>- * This will move to the public headers once this API is fully stable.
>- */
>-#include <media/hevc-ctrls.h>
>-
> /* forward references */
> struct file;
> struct poll_table_struct;
>diff --git a/include/uapi/linux/v4l2-controls.h b/include/uapi/linux/v4l2-controls.h
>index 17c6df3e9c0b..d3521ae2296b 100644
>--- a/include/uapi/linux/v4l2-controls.h
>+++ b/include/uapi/linux/v4l2-controls.h
>@@ -1997,6 +1997,454 @@ struct v4l2_ctrl_mpeg2_quantisation {
> __u8 chroma_non_intra_quantiser_matrix[64];
> };
>
>+#define V4L2_CID_STATELESS_HEVC_SPS (V4L2_CID_CODEC_STATELESS_BASE + 400)
>+#define V4L2_CID_STATELESS_HEVC_PPS (V4L2_CID_CODEC_STATELESS_BASE + 401)
>+#define V4L2_CID_STATELESS_HEVC_SLICE_PARAMS (V4L2_CID_CODEC_STATELESS_BASE + 402)
>+#define V4L2_CID_STATELESS_HEVC_SCALING_MATRIX (V4L2_CID_CODEC_STATELESS_BASE + 403)
>+#define V4L2_CID_STATELESS_HEVC_DECODE_PARAMS (V4L2_CID_CODEC_STATELESS_BASE + 404)
>+#define V4L2_CID_STATELESS_HEVC_DECODE_MODE (V4L2_CID_CODEC_STATELESS_BASE + 405)
>+#define V4L2_CID_STATELESS_HEVC_START_CODE (V4L2_CID_CODEC_STATELESS_BASE + 406)
>+#define V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS (V4L2_CID_CODEC_STATELESS_BASE + 407)
>+
>+enum v4l2_stateless_hevc_decode_mode {
>+ V4L2_STATELESS_HEVC_DECODE_MODE_SLICE_BASED,
>+ V4L2_STATELESS_HEVC_DECODE_MODE_FRAME_BASED,
>+};
>+
>+enum v4l2_stateless_hevc_start_code {
>+ V4L2_STATELESS_HEVC_START_CODE_NONE,
>+ V4L2_STATELESS_HEVC_START_CODE_ANNEX_B,
>+};
>+
>+#define V4L2_HEVC_SLICE_TYPE_B 0
>+#define V4L2_HEVC_SLICE_TYPE_P 1
>+#define V4L2_HEVC_SLICE_TYPE_I 2
>+
>+#define V4L2_HEVC_SPS_FLAG_SEPARATE_COLOUR_PLANE (1ULL << 0)
>+#define V4L2_HEVC_SPS_FLAG_SCALING_LIST_ENABLED (1ULL << 1)
>+#define V4L2_HEVC_SPS_FLAG_AMP_ENABLED (1ULL << 2)
>+#define V4L2_HEVC_SPS_FLAG_SAMPLE_ADAPTIVE_OFFSET (1ULL << 3)
>+#define V4L2_HEVC_SPS_FLAG_PCM_ENABLED (1ULL << 4)
>+#define V4L2_HEVC_SPS_FLAG_PCM_LOOP_FILTER_DISABLED (1ULL << 5)
>+#define V4L2_HEVC_SPS_FLAG_LONG_TERM_REF_PICS_PRESENT (1ULL << 6)
>+#define V4L2_HEVC_SPS_FLAG_SPS_TEMPORAL_MVP_ENABLED (1ULL << 7)
>+#define V4L2_HEVC_SPS_FLAG_STRONG_INTRA_SMOOTHING_ENABLED (1ULL << 8)
>+
>+/**
>+ * struct v4l2_ctrl_hevc_sps - ITU-T Rec. H.265: Sequence parameter set
>+ *
>+ * @video_parameter_set_id: specifies the value of the
>+ * vps_video_parameter_set_id of the active VPS
>+ * @seq_parameter_set_id: provides an identifier for the SPS for
>+ * reference by other syntax elements
>+ * @pic_width_in_luma_samples: specifies the width of each decoded picture
>+ * in units of luma samples
>+ * @pic_height_in_luma_samples: specifies the height of each decoded picture
>+ * in units of luma samples
>+ * @bit_depth_luma_minus8: specifies the bit depth of the samples of the
>+ * luma array
>+ * @bit_depth_chroma_minus8: specifies the bit depth of the samples of the
>+ * chroma arrays
>+ * @log2_max_pic_order_cnt_lsb_minus4: specifies the value of the variable
>+ * MaxPicOrderCntLsb
>+ * @sps_max_dec_pic_buffering_minus1: plus 1 specifies the maximum required
>+ * size of the decoded picture buffer for
>+ * the CVS
>+ * @sps_max_num_reorder_pics: indicates the maximum allowed number of pictures
>+ * @sps_max_latency_increase_plus1: not equal to 0 is used to compute the
>+ * value of SpsMaxLatencyPictures[i]
>+ * @log2_min_luma_coding_block_size_minus3: plus 3 specifies the minimum
>+ * luma coding block size
>+ * @log2_diff_max_min_luma_coding_block_size: specifies the difference between
>+ * the maximum and minimum luma
>+ * coding block size
>+ * @log2_min_luma_transform_block_size_minus2: plus 2 specifies the minimum luma
>+ * transform block size
>+ * @log2_diff_max_min_luma_transform_block_size: specifies the difference between
>+ * the maximum and minimum luma
>+ * transform block size
>+ * @max_transform_hierarchy_depth_inter: specifies the maximum hierarchy
>+ * depth for transform units of
>+ * coding units coded in inter
>+ * prediction mode
>+ * @max_transform_hierarchy_depth_intra: specifies the maximum hierarchy
>+ * depth for transform units of
>+ * coding units coded in intra
>+ * prediction mode
>+ * @pcm_sample_bit_depth_luma_minus1: specifies the number of bits used to
>+ * represent each of PCM sample values of the
>+ * luma component
>+ * @pcm_sample_bit_depth_chroma_minus1: specifies the number of bits used to
>+ * represent each of PCM sample values of
>+ * the chroma components
>+ * @log2_min_pcm_luma_coding_block_size_minus3: plus 3 specifies the minimum size
>+ * of coding blocks
>+ * @log2_diff_max_min_pcm_luma_coding_block_size: specifies the difference between
>+ * the maximum and minimum size of
>+ * coding blocks
>+ * @num_short_term_ref_pic_sets: specifies the number of st_ref_pic_set()
>+ * syntax structures included in the SPS
>+ * @num_long_term_ref_pics_sps: specifies the number of candidate long-term
>+ * reference pictures that are specified in the SPS
>+ * @chroma_format_idc: specifies the chroma sampling
>+ * @sps_max_sub_layers_minus1: plus 1 specifies the maximum number of temporal
>+ * sub-layers
>+ * @flags: see V4L2_HEVC_SPS_FLAG_{}
>+ */
>+struct v4l2_ctrl_hevc_sps {
>+ __u8 video_parameter_set_id;
>+ __u8 seq_parameter_set_id;
>+ __u16 pic_width_in_luma_samples;
>+ __u16 pic_height_in_luma_samples;
>+ __u8 bit_depth_luma_minus8;
>+ __u8 bit_depth_chroma_minus8;
>+ __u8 log2_max_pic_order_cnt_lsb_minus4;
>+ __u8 sps_max_dec_pic_buffering_minus1;
>+ __u8 sps_max_num_reorder_pics;
>+ __u8 sps_max_latency_increase_plus1;
>+ __u8 log2_min_luma_coding_block_size_minus3;
>+ __u8 log2_diff_max_min_luma_coding_block_size;
>+ __u8 log2_min_luma_transform_block_size_minus2;
>+ __u8 log2_diff_max_min_luma_transform_block_size;
>+ __u8 max_transform_hierarchy_depth_inter;
>+ __u8 max_transform_hierarchy_depth_intra;
>+ __u8 pcm_sample_bit_depth_luma_minus1;
>+ __u8 pcm_sample_bit_depth_chroma_minus1;
>+ __u8 log2_min_pcm_luma_coding_block_size_minus3;
>+ __u8 log2_diff_max_min_pcm_luma_coding_block_size;
>+ __u8 num_short_term_ref_pic_sets;
>+ __u8 num_long_term_ref_pics_sps;
>+ __u8 chroma_format_idc;
>+ __u8 sps_max_sub_layers_minus1;
>+
>+ __u8 padding[6];
>+ __u64 flags;
>+ __u8 reserved[24];
>+};
>+
>+#define V4L2_HEVC_PPS_FLAG_DEPENDENT_SLICE_SEGMENT_ENABLED (1ULL << 0)
>+#define V4L2_HEVC_PPS_FLAG_OUTPUT_FLAG_PRESENT (1ULL << 1)
>+#define V4L2_HEVC_PPS_FLAG_SIGN_DATA_HIDING_ENABLED (1ULL << 2)
>+#define V4L2_HEVC_PPS_FLAG_CABAC_INIT_PRESENT (1ULL << 3)
>+#define V4L2_HEVC_PPS_FLAG_CONSTRAINED_INTRA_PRED (1ULL << 4)
>+#define V4L2_HEVC_PPS_FLAG_TRANSFORM_SKIP_ENABLED (1ULL << 5)
>+#define V4L2_HEVC_PPS_FLAG_CU_QP_DELTA_ENABLED (1ULL << 6)
>+#define V4L2_HEVC_PPS_FLAG_PPS_SLICE_CHROMA_QP_OFFSETS_PRESENT (1ULL << 7)
>+#define V4L2_HEVC_PPS_FLAG_WEIGHTED_PRED (1ULL << 8)
>+#define V4L2_HEVC_PPS_FLAG_WEIGHTED_BIPRED (1ULL << 9)
>+#define V4L2_HEVC_PPS_FLAG_TRANSQUANT_BYPASS_ENABLED (1ULL << 10)
>+#define V4L2_HEVC_PPS_FLAG_TILES_ENABLED (1ULL << 11)
>+#define V4L2_HEVC_PPS_FLAG_ENTROPY_CODING_SYNC_ENABLED (1ULL << 12)
>+#define V4L2_HEVC_PPS_FLAG_LOOP_FILTER_ACROSS_TILES_ENABLED (1ULL << 13)
>+#define V4L2_HEVC_PPS_FLAG_PPS_LOOP_FILTER_ACROSS_SLICES_ENABLED (1ULL << 14)
>+#define V4L2_HEVC_PPS_FLAG_DEBLOCKING_FILTER_OVERRIDE_ENABLED (1ULL << 15)
>+#define V4L2_HEVC_PPS_FLAG_PPS_DISABLE_DEBLOCKING_FILTER (1ULL << 16)
>+#define V4L2_HEVC_PPS_FLAG_LISTS_MODIFICATION_PRESENT (1ULL << 17)
>+#define V4L2_HEVC_PPS_FLAG_SLICE_SEGMENT_HEADER_EXTENSION_PRESENT (1ULL << 18)
>+#define V4L2_HEVC_PPS_FLAG_DEBLOCKING_FILTER_CONTROL_PRESENT (1ULL << 19)
>+#define V4L2_HEVC_PPS_FLAG_UNIFORM_SPACING (1ULL << 20)
>+
>+/**
>+ * struct v4l2_ctrl_hevc_pps - ITU-T Rec. H.265: Picture parameter set
>+ *
>+ * @pic_parameter_set_id: identifies the PPS for reference by other
>+ * syntax elements
>+ * @num_extra_slice_header_bits: specifies the number of extra slice header
>+ * bits that are present in the slice header RBSP
>+ * for coded pictures referring to the PPS.
>+ * @num_ref_idx_l0_default_active_minus1: specifies the inferred value of
>+ * num_ref_idx_l0_active_minus1
>+ * @num_ref_idx_l1_default_active_minus1: specifies the inferred value of
>+ * num_ref_idx_l1_active_minus1
>+ * @init_qp_minus26: plus 26 specifies the initial value of SliceQp Y for
>+ * each slice referring to the PPS
>+ * @diff_cu_qp_delta_depth: specifies the difference between the luma coding
>+ * tree block size and the minimum luma coding block
>+ * size of coding units that convey cu_qp_delta_abs
>+ * and cu_qp_delta_sign_flag
>+ * @pps_cb_qp_offset: specify the offsets to the luma quantization parameter Cb
>+ * @pps_cr_qp_offset: specify the offsets to the luma quantization parameter Cr
>+ * @num_tile_columns_minus1: plus 1 specifies the number of tile columns
>+ * partitioning the picture
>+ * @num_tile_rows_minus1: plus 1 specifies the number of tile rows partitioning
>+ * the picture
>+ * @column_width_minus1: plus 1 specifies the width of the i-th tile column in
>+ * units of coding tree blocks
>+ * @row_height_minus1: plus 1 specifies the height of the i-th tile row in
>+ * units of coding tree blocks
>+ * @pps_beta_offset_div2: specify the default deblocking parameter offsets for
>+ * beta divided by 2
>+ * @pps_tc_offset_div2: specify the default deblocking parameter offsets for tC
>+ * divided by 2
>+ * @log2_parallel_merge_level_minus2: plus 2 specifies the value of the variable
>+ * Log2ParMrgLevel
>+ * @flags: see V4L2_HEVC_PPS_FLAG_{}
>+ */
>+struct v4l2_ctrl_hevc_pps {
>+ __u8 pic_parameter_set_id;
>+ __u8 num_extra_slice_header_bits;
>+ __u8 num_ref_idx_l0_default_active_minus1;
>+ __u8 num_ref_idx_l1_default_active_minus1;
>+ __s8 init_qp_minus26;
>+ __u8 diff_cu_qp_delta_depth;
>+ __s8 pps_cb_qp_offset;
>+ __s8 pps_cr_qp_offset;
>+ __u8 num_tile_columns_minus1;
>+ __u8 num_tile_rows_minus1;
>+ __u8 column_width_minus1[20];
>+ __u8 row_height_minus1[22];
>+ __s8 pps_beta_offset_div2;
>+ __s8 pps_tc_offset_div2;
>+ __u8 log2_parallel_merge_level_minus2;
>+ __u8 padding[9];
>+
>+ __u64 flags;
>+ __u8 reserved[56];
>+};
>+
>+#define V4L2_HEVC_DPB_ENTRY_LONG_TERM_REFERENCE 0x01
>+
>+#define V4L2_HEVC_SEI_PIC_STRUCT_FRAME 0
>+#define V4L2_HEVC_SEI_PIC_STRUCT_TOP_FIELD 1
>+#define V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_FIELD 2
>+#define V4L2_HEVC_SEI_PIC_STRUCT_TOP_BOTTOM 3
>+#define V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_TOP 4
>+#define V4L2_HEVC_SEI_PIC_STRUCT_TOP_BOTTOM_TOP 5
>+#define V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_TOP_BOTTOM 6
>+#define V4L2_HEVC_SEI_PIC_STRUCT_FRAME_DOUBLING 7
>+#define V4L2_HEVC_SEI_PIC_STRUCT_FRAME_TRIPLING 8
>+#define V4L2_HEVC_SEI_PIC_STRUCT_TOP_PAIRED_PREVIOUS_BOTTOM 9
>+#define V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_PAIRED_PREVIOUS_TOP 10
>+#define V4L2_HEVC_SEI_PIC_STRUCT_TOP_PAIRED_NEXT_BOTTOM 11
>+#define V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_PAIRED_NEXT_TOP 12
>+
>+#define V4L2_HEVC_DPB_ENTRIES_NUM_MAX 16
>+
>+/**
>+ * struct v4l2_hevc_dpb_entry - HEVC decoded picture buffer entry
>+ *
>+ * @timestamp: timestamp of the V4L2 capture buffer to use as reference.
>+ * @flags: long term flag for the reference frame
>+ * @field_pic: whether the reference is a field picture or a frame.
>+ * @pic_order_cnt_val: the picture order count of the current picture.
>+ */
>+struct v4l2_hevc_dpb_entry {
>+ __u64 timestamp;
>+ __u8 flags;
>+ __u8 field_pic;
>+ __s32 pic_order_cnt_val;
>+ __u8 padding[2];
>+};
>+
>+/**
>+ * struct v4l2_hevc_pred_weight_table - HEVC weighted prediction parameters
>+ *
>+ * @delta_luma_weight_l0: the difference of the weighting factor applied
>+ * to the luma prediction value for list 0
>+ * @luma_offset_l0: the additive offset applied to the luma prediction value
>+ * for list 0
>+ * @delta_chroma_weight_l0: the difference of the weighting factor applied
>+ * to the chroma prediction values for list 0
>+ * @chroma_offset_l0: the difference of the additive offset applied to
>+ * the chroma prediction values for list 0
>+ * @delta_luma_weight_l1: the difference of the weighting factor applied
>+ * to the luma prediction value for list 1
>+ * @luma_offset_l1: the additive offset applied to the luma prediction value
>+ * for list 1
>+ * @delta_chroma_weight_l1: the difference of the weighting factor applied
>+ * to the chroma prediction values for list 1
>+ * @chroma_offset_l1: the difference of the additive offset applied to
>+ * the chroma prediction values for list 1
>+ * @luma_log2_weight_denom: the base 2 logarithm of the denominator for
>+ * all luma weighting factors
>+ * @delta_chroma_log2_weight_denom: the difference of the base 2 logarithm
>+ * of the denominator for all chroma
>+ * weighting factors
>+ */
>+struct v4l2_hevc_pred_weight_table {
>+ __s8 delta_luma_weight_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
>+ __s8 luma_offset_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
>+ __s8 delta_chroma_weight_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2];
>+ __s8 chroma_offset_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2];
>+
>+ __s8 delta_luma_weight_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
>+ __s8 luma_offset_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
>+ __s8 delta_chroma_weight_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2];
>+ __s8 chroma_offset_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2];
>+
>+ __u8 luma_log2_weight_denom;
>+ __s8 delta_chroma_log2_weight_denom;
>+};
>+
>+#define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_SAO_LUMA (1ULL << 0)
>+#define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_SAO_CHROMA (1ULL << 1)
>+#define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_TEMPORAL_MVP_ENABLED (1ULL << 2)
>+#define V4L2_HEVC_SLICE_PARAMS_FLAG_MVD_L1_ZERO (1ULL << 3)
>+#define V4L2_HEVC_SLICE_PARAMS_FLAG_CABAC_INIT (1ULL << 4)
>+#define V4L2_HEVC_SLICE_PARAMS_FLAG_COLLOCATED_FROM_L0 (1ULL << 5)
>+#define V4L2_HEVC_SLICE_PARAMS_FLAG_USE_INTEGER_MV (1ULL << 6)
>+#define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_DEBLOCKING_FILTER_DISABLED (1ULL << 7)
>+#define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_LOOP_FILTER_ACROSS_SLICES_ENABLED (1ULL << 8)
>+#define V4L2_HEVC_SLICE_PARAMS_FLAG_DEPENDENT_SLICE_SEGMENT (1ULL << 9)
>+
>+/**
>+ * v4l2_ctrl_hevc_slice_params - HEVC slice parameters
>+ *
>+ * This control is a dynamically sized 1-dimensional array,
>+ * V4L2_CTRL_FLAG_DYNAMIC_ARRAY flag must be set when using it.
>+ *
>+ * @bit_size: size (in bits) of the current slice data
>+ * @data_byte_offset: offset (in bytes) to the video data in the current slice data
>+ * @num_entry_point_offsets: specifies the number of entry point offset syntax
>+ * elements in the slice header.
>+ * @nal_unit_type: specifies the coding type of the slice (B, P or I)
>+ * @nuh_temporal_id_plus1: minus 1 specifies a temporal identifier for the NAL unit
>+ * @slice_type: see V4L2_HEVC_SLICE_TYPE_{}
>+ * @colour_plane_id: specifies the colour plane associated with the current slice
>+ * @slice_pic_order_cnt: specifies the picture order count
>+ * @num_ref_idx_l0_active_minus1: specifies the maximum reference index for reference
>+ * picture list 0 that may be used to decode the slice
>+ * @num_ref_idx_l1_active_minus1: specifies the maximum reference index for reference
>+ * picture list 1 that may be used to decode the slice
>+ * @collocated_ref_idx: specifies the reference index of the collocated picture used
>+ * for temporal motion vector prediction
>+ * @five_minus_max_num_merge_cand: specifies the maximum number of merging
>+ * motion vector prediction candidates supported in
>+ * the slice subtracted from 5
>+ * @slice_qp_delta: specifies the initial value of QpY to be used for the coding
>+ * blocks in the slice
>+ * @slice_cb_qp_offset: specifies a difference to be added to the value of pps_cb_qp_offset
>+ * @slice_cr_qp_offset: specifies a difference to be added to the value of pps_cr_qp_offset
>+ * @slice_act_y_qp_offset: screen content extension parameters
>+ * @slice_act_cb_qp_offset: screen content extension parameters
>+ * @slice_act_cr_qp_offset: screen content extension parameters
>+ * @slice_beta_offset_div2: specify the deblocking parameter offsets for beta divided by 2
>+ * @slice_tc_offset_div2: specify the deblocking parameter offsets for tC divided by 2
>+ * @pic_struct: indicates whether a picture should be displayed as a frame or as one or
>+ * more fields
>+ * @slice_segment_addr: specifies the address of the first coding tree block in
>+ * the slice segment
>+ * @ref_idx_l0: the list of L0 reference elements as indices in the DPB
>+ * @ref_idx_l1: the list of L1 reference elements as indices in the DPB
>+ * @short_term_ref_pic_set_size: specifies the size of short-term reference
>+ * pictures set included in the SPS
>+ * @long_term_ref_pic_set_size: specifies the size of long-term reference
>+ * pictures set include in the SPS
>+ * @pred_weight_table: the prediction weight coefficients for inter-picture
>+ * prediction
>+ * @flags: see V4L2_HEVC_SLICE_PARAMS_FLAG_{}
>+ */
>+struct v4l2_ctrl_hevc_slice_params {
>+ __u32 bit_size;
>+ __u32 data_byte_offset;
>+ __u32 num_entry_point_offsets;
>+
>+ /* ISO/IEC 23008-2, ITU-T Rec. H.265: NAL unit header */
>+ __u8 nal_unit_type;
>+ __u8 nuh_temporal_id_plus1;
>+
>+ /* ISO/IEC 23008-2, ITU-T Rec. H.265: General slice segment header */
>+ __u8 slice_type;
>+ __u8 colour_plane_id;
>+ __u16 slice_pic_order_cnt;
>+ __u8 num_ref_idx_l0_active_minus1;
>+ __u8 num_ref_idx_l1_active_minus1;
>+ __u8 collocated_ref_idx;
>+ __u8 five_minus_max_num_merge_cand;
>+ __s8 slice_qp_delta;
>+ __s8 slice_cb_qp_offset;
>+ __s8 slice_cr_qp_offset;
>+ __s8 slice_act_y_qp_offset;
>+ __s8 slice_act_cb_qp_offset;
>+ __s8 slice_act_cr_qp_offset;
>+ __s8 slice_beta_offset_div2;
>+ __s8 slice_tc_offset_div2;
>+
>+ /* ISO/IEC 23008-2, ITU-T Rec. H.265: Picture timing SEI message */
>+ __u8 pic_struct;
>+
>+ __u8 reserved;
>+ /* ISO/IEC 23008-2, ITU-T Rec. H.265: General slice segment header */
>+ __u32 slice_segment_addr;
>+ __u8 ref_idx_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
>+ __u8 ref_idx_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
>+ __u16 short_term_ref_pic_set_size;
>+ __u16 long_term_ref_pic_set_size;
>+
>+ /* ISO/IEC 23008-2, ITU-T Rec. H.265: Weighted prediction parameter */
>+ struct v4l2_hevc_pred_weight_table pred_weight_table;
>+
>+ __u8 reserved1[6];
>+ __u64 flags;
>+ __u8 padding[40];
>+};
>+
>+#define V4L2_HEVC_DECODE_PARAM_FLAG_IRAP_PIC 0x1
>+#define V4L2_HEVC_DECODE_PARAM_FLAG_IDR_PIC 0x2
>+#define V4L2_HEVC_DECODE_PARAM_FLAG_NO_OUTPUT_OF_PRIOR 0x4
>+
>+/**
>+ * struct v4l2_ctrl_hevc_decode_params - HEVC decode parameters
>+ *
>+ * @pic_order_cnt_val: picture order count
>+ * @num_active_dpb_entries: the number of entries in dpb
>+ * @num_poc_st_curr_before: the number of reference pictures in the short-term
>+ * set that come before the current frame
>+ * @num_poc_st_curr_after: the number of reference pictures in the short-term
>+ * set that come after the current frame
>+ * @num_poc_lt_curr: the number of reference pictures in the long-term set
>+ * @poc_st_curr_before: provides the index of the short term before references
>+ * in DPB array
>+ * @poc_st_curr_after: provides the index of the short term after references
>+ * in DPB array
>+ * @poc_lt_curr: provides the index of the long term references in DPB array
>+ * @dpb: the decoded picture buffer, for meta-data about reference frames
>+ * @flags: see V4L2_HEVC_DECODE_PARAM_FLAG_{}
>+ */
>+struct v4l2_ctrl_hevc_decode_params {
>+ __s32 pic_order_cnt_val;
>+ __u8 num_active_dpb_entries;
>+ __u8 num_poc_st_curr_before;
>+ __u8 num_poc_st_curr_after;
>+ __u8 num_poc_lt_curr;
>+ __u8 poc_st_curr_before[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
>+ __u8 poc_st_curr_after[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
>+ __u8 poc_lt_curr[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
>+ struct v4l2_hevc_dpb_entry dpb[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
>+ __u64 flags;
>+};
>+
>+/**
>+ * struct v4l2_ctrl_hevc_scaling_matrix - HEVC scaling lists parameters
>+ *
>+ * @scaling_list_4x4: scaling list is used for the scaling process for
>+ * transform coefficients. The values on each scaling
>+ * list are expected in raster scan order
>+ * @scaling_list_8x8: scaling list is used for the scaling process for
>+ * transform coefficients. The values on each scaling
>+ * list are expected in raster scan order
>+ * @scaling_list_16x16: scaling list is used for the scaling process for
>+ * transform coefficients. The values on each scaling
>+ * list are expected in raster scan order
>+ * @scaling_list_32x32: scaling list is used for the scaling process for
>+ * transform coefficients. The values on each scaling
>+ * list are expected in raster scan order
>+ * @scaling_list_dc_coef_16x16: scaling list is used for the scaling process
>+ * for transform coefficients. The values on each
>+ * scaling list are expected in raster scan order.
>+ * @scaling_list_dc_coef_32x32: scaling list is used for the scaling process
>+ * for transform coefficients. The values on each
>+ * scaling list are expected in raster scan order.
>+ */
>+struct v4l2_ctrl_hevc_scaling_matrix {
>+ __u8 scaling_list_4x4[6][16];
>+ __u8 scaling_list_8x8[6][64];
>+ __u8 scaling_list_16x16[6][64];
>+ __u8 scaling_list_32x32[2][64];
>+ __u8 scaling_list_dc_coef_16x16[6];
>+ __u8 scaling_list_dc_coef_32x32[2];
>+};
>+
> #define V4L2_CID_COLORIMETRY_CLASS_BASE (V4L2_CTRL_CLASS_COLORIMETRY | 0x900)
> #define V4L2_CID_COLORIMETRY_CLASS (V4L2_CTRL_CLASS_COLORIMETRY | 1)
>
>diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
>index 939775b145af..4c09969e7112 100644
>--- a/include/uapi/linux/videodev2.h
>+++ b/include/uapi/linux/videodev2.h
>@@ -1765,6 +1765,11 @@ struct v4l2_ext_control {
> struct v4l2_ctrl_mpeg2_quantisation __user *p_mpeg2_quantisation;
> struct v4l2_ctrl_vp9_compressed_hdr __user *p_vp9_compressed_hdr_probs;
> struct v4l2_ctrl_vp9_frame __user *p_vp9_frame;
>+ struct v4l2_ctrl_hevc_sps __user *p_hevc_sps;
>+ struct v4l2_ctrl_hevc_pps __user *p_hevc_pps;
>+ struct v4l2_ctrl_hevc_slice_params __user *p_hevc_slice_params;
>+ struct v4l2_ctrl_hevc_scaling_matrix __user *p_hevc_scaling_matrix;
>+ struct v4l2_ctrl_hevc_decode_params __user *p_hevc_decode_params;
> void __user *ptr;
> };
> } __attribute__ ((packed));
>--
>2.32.0
>

2022-04-11 08:01:58

by Nicolas Dufresne

[permalink] [raw]
Subject: Re: [PATCH v5 09/17] media: uapi: HEVC: Define V4L2_CID_STATELESS_HEVC_SLICE_PARAMS as a dynamic array

Le jeudi 07 avril 2022 à 17:29 +0200, Benjamin Gaignard a écrit :
> Make explicit that V4L2_CID_STATELESS_HEVC_SLICE_PARAMS control is
> a dynamic array control type.
> Some drivers may be able to receive multiple slices in one control
> to improve decoding performance.
>
> Signed-off-by: Benjamin Gaignard <[email protected]>
> ---
> Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst | 2 ++
> include/media/hevc-ctrls.h | 3 +++
> 2 files changed, 5 insertions(+)
>
> diff --git a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
> index 7fcc6c2bac4c..1aaf3b84b584 100644
> --- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
> +++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
> @@ -2964,6 +2964,8 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
> These bitstream parameters are defined according to :ref:`hevc`.
> They are described in section 7.4.7 "General slice segment header
> semantics" of the specification.
> + This control is a dynamically sized 1-dimensional array,
> + V4L2_CTRL_FLAG_DYNAMIC_ARRAY flag must be set when using it.
>
> .. c:type:: v4l2_ctrl_hevc_slice_params
>
> diff --git a/include/media/hevc-ctrls.h b/include/media/hevc-ctrls.h
> index 96a9b71d1def..28049e1a8a07 100644
> --- a/include/media/hevc-ctrls.h
> +++ b/include/media/hevc-ctrls.h
> @@ -314,6 +314,9 @@ struct v4l2_hevc_pred_weight_table {
> /**
> * v4l2_ctrl_hevc_slice_params - HEVC slice parameters
> *
> + * This control is a dynamically sized 1-dimensional array,
> + * V4L2_CTRL_FLAG_DYNAMIC_ARRAY flag must be set when using it.
> + *

I'm not sure about this comment, but I'm sure you forgot:


--- a/drivers/media/v4l2-core/v4l2-ctrls-defs.c
+++ b/drivers/media/v4l2-core/v4l2-ctrls-defs.c
@@ -1505,6 +1505,7 @@ void v4l2_ctrl_fill(u32 id, const char **name, enum
v4l2_ctrl_type *type,
break;
case V4L2_CID_STATELESS_HEVC_SLICE_PARAMS:
*type = V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS;
+ *flags |= V4L2_CTRL_FLAG_DYNAMIC_ARRAY;
break;
case V4L2_CID_STATELESS_HEVC_SCALING_MATRIX:
*type = V4L2_CTRL_TYPE_HEVC_SCALING_MATRIX;

Also, in AV1 we have V4L2_AV1_MAX_TILE_COUNT, which can be used in cfg.dims,
something the driver will actually set. We could have

#define V4L2_HEVC_MAX_TILE_COUNT 600

And drives can set:

.dims = { V4L2_HEVC_MAX_TILE_COUNT },

In the control config.

> * @bit_size: size (in bits) of the current slice data
> * @data_bit_offset: offset (in bits) to the video data in the current slice data
> * @nal_unit_type: specifies the coding type of the slice (B, P or I)

2022-04-11 08:53:56

by [email protected]

[permalink] [raw]
Subject: [PATCH v5 17/17] media: uapi: move HEVC stateless controls out (FIXUP) of staging

---
FIXUP of the original patch to properly apply to the tree for testing.
---

HEVC uAPI is used by 2 mainline drivers (Hantro, Cedrus)
and at least 2 out-of-tree drivers (rkvdec, RPi).
The uAPI has reviewed so it is time to make it 'public' by
un-staging it.

Signed-off-by: Benjamin Gaignard <[email protected]>
---
.../media/v4l/ext-ctrls-codec-stateless.rst | 882 +++++++++++++++++
.../media/v4l/ext-ctrls-codec.rst | 888 ------------------
.../media/v4l/pixfmt-compressed.rst | 2 +-
.../media/v4l/vidioc-g-ext-ctrls.rst | 20 +
include/media/hevc-ctrls.h | 465 ---------
include/media/v4l2-ctrls.h | 6 -
include/uapi/linux/v4l2-controls.h | 448 +++++++++
include/uapi/linux/videodev2.h | 5 +
8 files changed, 1356 insertions(+), 1360 deletions(-)
delete mode 100644 include/media/hevc-ctrls.h

diff --git a/Documentation/userspace-api/media/v4l/ext-ctrls-codec-stateless.rst b/Documentation/userspace-api/media/v4l/ext-ctrls-codec-stateless.rst
index 6541e4c32b26..31560af6a797 100644
--- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec-stateless.rst
+++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec-stateless.rst
@@ -2042,3 +2042,885 @@ This structure contains all loop filter related parameters. See sections
- 0x2
- When set, the bitstream contains additional syntax elements that
specify which mode and reference frame deltas are to be updated.
+
+.. _v4l2-codec-stateless-hevc:
+
+``V4L2_CID_STATELESS_HEVC_SPS (struct)``
+ Specifies the Sequence Parameter Set fields (as extracted from the
+ bitstream) for the associated HEVC slice data.
+ These bitstream parameters are defined according to :ref:`hevc`.
+ They are described in section 7.4.3.2 "Sequence parameter set RBSP
+ semantics" of the specification.
+
+.. c:type:: v4l2_ctrl_hevc_sps
+
+.. raw:: latex
+
+ \small
+
+.. tabularcolumns:: |p{1.2cm}|p{9.2cm}|p{6.9cm}|
+
+.. cssclass:: longtable
+
+.. flat-table:: struct v4l2_ctrl_hevc_sps
+ :header-rows: 0
+ :stub-columns: 0
+ :widths: 1 1 2
+
+ * - __u8
+ - ``video_parameter_set_id``
+ - Specifies the value of the vps_video_parameter_set_id of the active VPS
+ as descibed in section "7.4.3.2.1 General sequence parameter set RBSP semantics"
+ of H.265 specifications.
+ * - __u8
+ - ``seq_parameter_set_id``
+ - Provides an identifier for the SPS for reference by other syntax elements
+ as descibed in section "7.4.3.2.1 General sequence parameter set RBSP semantics"
+ of H.265 specifications.
+ * - __u16
+ - ``pic_width_in_luma_samples``
+ - Specifies the width of each decoded picture in units of luma samples.
+ * - __u16
+ - ``pic_height_in_luma_samples``
+ - Specifies the height of each decoded picture in units of luma samples.
+ * - __u8
+ - ``bit_depth_luma_minus8``
+ - Specifies the bit depth of the samples of the luma array.
+ * - __u8
+ - ``bit_depth_chroma_minus8``
+ - Specifies the bit depth of the samples of the chroma arrays.
+ * - __u8
+ - ``log2_max_pic_order_cnt_lsb_minus4``
+ - Specifies the value of the variable MaxPicOrderCntLsb.
+ * - __u8
+ - ``sps_max_dec_pic_buffering_minus1``
+ - Plus 1 specifies the maximum required size of the decoded picture buffer for
+ the CVS
+ * - __u8
+ - ``sps_max_num_reorder_pics``
+ - Indicates the maximum allowed number of pictures.
+ * - __u8
+ - ``sps_max_latency_increase_plus1``
+ - Not equal to 0 is used to compute the value of SpsMaxLatencyPictures[i].
+ * - __u8
+ - ``log2_min_luma_coding_block_size_minus3``
+ - Plus 3 specifies the minimum luma coding block size.
+ * - __u8
+ - ``log2_diff_max_min_luma_coding_block_size``
+ - Specifies the difference between the maximum and minimum luma coding block size.
+ * - __u8
+ - ``log2_min_luma_transform_block_size_minus2``
+ - Plus 2 specifies the minimum luma transform block size.
+ * - __u8
+ - ``log2_diff_max_min_luma_transform_block_size``
+ - Specifies the difference between the maximum and minimum luma transform block size.
+ * - __u8
+ - ``max_transform_hierarchy_depth_inter``
+ - Specifies the maximum hierarchy depth for transform units of coding units coded
+ in inter prediction mode.
+ * - __u8
+ - ``max_transform_hierarchy_depth_intra``
+ - Specifies the maximum hierarchy depth for transform units of coding units coded in
+ intra prediction mode.
+ * - __u8
+ - ``pcm_sample_bit_depth_luma_minus1``
+ - Specifies the number of bits used to represent each of PCM sample values of the
+ luma component.
+ * - __u8
+ - ``pcm_sample_bit_depth_chroma_minus1``
+ - Specifies the number of bits used to represent each of PCM sample values of
+ the chroma components.
+ * - __u8
+ - ``log2_min_pcm_luma_coding_block_size_minus3``
+ - Plus 3 specifies the minimum size of coding blocks.
+ * - __u8
+ - ``log2_diff_max_min_pcm_luma_coding_block_size``
+ - Specifies the difference between the maximum and minimum size of coding blocks.
+ * - __u8
+ - ``num_short_term_ref_pic_sets``
+ - Specifies the number of st_ref_pic_set() syntax structures included in the SPS.
+ * - __u8
+ - ``num_long_term_ref_pics_sps``
+ - Specifies the number of candidate long-term reference pictures that are
+ specified in the SPS.
+ * - __u8
+ - ``chroma_format_idc``
+ - Specifies the chroma sampling.
+ * - __u8
+ - ``sps_max_sub_layers_minus1``
+ - plus 1 specifies the maximum number of temporal sub-layers.
+ * - __u64
+ - ``flags``
+ - See :ref:`Sequence Parameter Set Flags <hevc_sps_flags>`
+
+.. raw:: latex
+
+ \normalsize
+
+.. _hevc_sps_flags:
+
+``Sequence Parameter Set Flags``
+
+.. raw:: latex
+
+ \small
+
+.. cssclass:: longtable
+
+.. flat-table::
+ :header-rows: 0
+ :stub-columns: 0
+ :widths: 1 1 2
+
+ * - ``V4L2_HEVC_SPS_FLAG_SEPARATE_COLOUR_PLANE``
+ - 0x00000001
+ -
+ * - ``V4L2_HEVC_SPS_FLAG_SCALING_LIST_ENABLED``
+ - 0x00000002
+ -
+ * - ``V4L2_HEVC_SPS_FLAG_AMP_ENABLED``
+ - 0x00000004
+ -
+ * - ``V4L2_HEVC_SPS_FLAG_SAMPLE_ADAPTIVE_OFFSET``
+ - 0x00000008
+ -
+ * - ``V4L2_HEVC_SPS_FLAG_PCM_ENABLED``
+ - 0x00000010
+ -
+ * - ``V4L2_HEVC_SPS_FLAG_PCM_LOOP_FILTER_DISABLED``
+ - 0x00000020
+ -
+ * - ``V4L2_HEVC_SPS_FLAG_LONG_TERM_REF_PICS_PRESENT``
+ - 0x00000040
+ -
+ * - ``V4L2_HEVC_SPS_FLAG_SPS_TEMPORAL_MVP_ENABLED``
+ - 0x00000080
+ -
+ * - ``V4L2_HEVC_SPS_FLAG_STRONG_INTRA_SMOOTHING_ENABLED``
+ - 0x00000100
+ -
+
+.. raw:: latex
+
+ \normalsize
+
+``V4L2_CID_STATELESS_HEVC_PPS (struct)``
+ Specifies the Picture Parameter Set fields (as extracted from the
+ bitstream) for the associated HEVC slice data.
+ These bitstream parameters are defined according to :ref:`hevc`.
+ They are described in section 7.4.3.3 "Picture parameter set RBSP
+ semantics" of the specification.
+
+.. c:type:: v4l2_ctrl_hevc_pps
+
+.. tabularcolumns:: |p{1.2cm}|p{8.6cm}|p{7.5cm}|
+
+.. cssclass:: longtable
+
+.. flat-table:: struct v4l2_ctrl_hevc_pps
+ :header-rows: 0
+ :stub-columns: 0
+ :widths: 1 1 2
+
+ * - __u8
+ - ``pic_parameter_set_id``
+ - Identifies the PPS for reference by other syntax elements.
+ * - __u8
+ - ``num_extra_slice_header_bits``
+ - Specifies the number of extra slice header bits that are present
+ in the slice header RBSP for coded pictures referring to the PPS.
+ * - __u8
+ - ``num_ref_idx_l0_default_active_minus1``
+ - Specifies the inferred value of num_ref_idx_l0_active_minus1
+ * - __u8
+ - ``num_ref_idx_l1_default_active_minus1``
+ - Specifies the inferred value of num_ref_idx_l1_active_minus1
+ * - __s8
+ - ``init_qp_minus26``
+ - Plus 26 specifies the initial value of SliceQp Y for each slice
+ referring to the PPS.
+ * - __u8
+ - ``diff_cu_qp_delta_depth``
+ - Specifies the difference between the luma coding tree block size
+ and the minimum luma coding block size of coding units that
+ convey cu_qp_delta_abs and cu_qp_delta_sign_flag.
+ * - __s8
+ - ``pps_cb_qp_offset``
+ - Specify the offsets to the luma quantization parameter Cb.
+ * - __s8
+ - ``pps_cr_qp_offset``
+ - Specify the offsets to the luma quantization parameter Cr.
+ * - __u8
+ - ``num_tile_columns_minus1``
+ - Plus 1 specifies the number of tile columns partitioning the picture.
+ * - __u8
+ - ``num_tile_rows_minus1``
+ - Plus 1 specifies the number of tile rows partitioning the picture.
+ * - __u8
+ - ``column_width_minus1[20]``
+ - Plus 1 specifies the width of the i-th tile column in units of
+ coding tree blocks.
+ * - __u8
+ - ``row_height_minus1[22]``
+ - Plus 1 specifies the height of the i-th tile row in units of coding
+ tree blocks.
+ * - __s8
+ - ``pps_beta_offset_div2``
+ - Specify the default deblocking parameter offsets for beta divided by 2.
+ * - __s8
+ - ``pps_tc_offset_div2``
+ - Specify the default deblocking parameter offsets for tC divided by 2.
+ * - __u8
+ - ``log2_parallel_merge_level_minus2``
+ - Plus 2 specifies the value of the variable Log2ParMrgLevel.
+ * - __u8
+ - ``padding[4]``
+ - Applications and drivers must set this to zero.
+ * - __u64
+ - ``flags``
+ - See :ref:`Picture Parameter Set Flags <hevc_pps_flags>`
+
+.. _hevc_pps_flags:
+
+``Picture Parameter Set Flags``
+
+.. raw:: latex
+
+ \small
+
+.. flat-table::
+ :header-rows: 0
+ :stub-columns: 0
+ :widths: 1 1 2
+
+ * - ``V4L2_HEVC_PPS_FLAG_DEPENDENT_SLICE_SEGMENT_ENABLED``
+ - 0x00000001
+ -
+ * - ``V4L2_HEVC_PPS_FLAG_OUTPUT_FLAG_PRESENT``
+ - 0x00000002
+ -
+ * - ``V4L2_HEVC_PPS_FLAG_SIGN_DATA_HIDING_ENABLED``
+ - 0x00000004
+ -
+ * - ``V4L2_HEVC_PPS_FLAG_CABAC_INIT_PRESENT``
+ - 0x00000008
+ -
+ * - ``V4L2_HEVC_PPS_FLAG_CONSTRAINED_INTRA_PRED``
+ - 0x00000010
+ -
+ * - ``V4L2_HEVC_PPS_FLAG_TRANSFORM_SKIP_ENABLED``
+ - 0x00000020
+ -
+ * - ``V4L2_HEVC_PPS_FLAG_CU_QP_DELTA_ENABLED``
+ - 0x00000040
+ -
+ * - ``V4L2_HEVC_PPS_FLAG_PPS_SLICE_CHROMA_QP_OFFSETS_PRESENT``
+ - 0x00000080
+ -
+ * - ``V4L2_HEVC_PPS_FLAG_WEIGHTED_PRED``
+ - 0x00000100
+ -
+ * - ``V4L2_HEVC_PPS_FLAG_WEIGHTED_BIPRED``
+ - 0x00000200
+ -
+ * - ``V4L2_HEVC_PPS_FLAG_TRANSQUANT_BYPASS_ENABLED``
+ - 0x00000400
+ -
+ * - ``V4L2_HEVC_PPS_FLAG_TILES_ENABLED``
+ - 0x00000800
+ -
+ * - ``V4L2_HEVC_PPS_FLAG_ENTROPY_CODING_SYNC_ENABLED``
+ - 0x00001000
+ -
+ * - ``V4L2_HEVC_PPS_FLAG_LOOP_FILTER_ACROSS_TILES_ENABLED``
+ - 0x00002000
+ -
+ * - ``V4L2_HEVC_PPS_FLAG_PPS_LOOP_FILTER_ACROSS_SLICES_ENABLED``
+ - 0x00004000
+ -
+ * - ``V4L2_HEVC_PPS_FLAG_DEBLOCKING_FILTER_OVERRIDE_ENABLED``
+ - 0x00008000
+ -
+ * - ``V4L2_HEVC_PPS_FLAG_PPS_DISABLE_DEBLOCKING_FILTER``
+ - 0x00010000
+ -
+ * - ``V4L2_HEVC_PPS_FLAG_LISTS_MODIFICATION_PRESENT``
+ - 0x00020000
+ -
+ * - ``V4L2_HEVC_PPS_FLAG_SLICE_SEGMENT_HEADER_EXTENSION_PRESENT``
+ - 0x00040000
+ -
+ * - ``V4L2_HEVC_PPS_FLAG_DEBLOCKING_FILTER_CONTROL_PRESENT``
+ - 0x00080000
+ - Specifies the presence of deblocking filter control syntax elements in
+ the PPS
+ * - ``V4L2_HEVC_PPS_FLAG_UNIFORM_SPACING``
+ - 0x00100000
+ - Specifies that tile column boundaries and likewise tile row boundaries
+ are distributed uniformly across the picture
+
+.. raw:: latex
+
+ \normalsize
+
+``V4L2_CID_STATELESS_HEVC_SLICE_PARAMS (struct)``
+ Specifies various slice-specific parameters, especially from the NAL unit
+ header, general slice segment header and weighted prediction parameter
+ parts of the bitstream.
+ These bitstream parameters are defined according to :ref:`hevc`.
+ They are described in section 7.4.7 "General slice segment header
+ semantics" of the specification.
+ This control is a dynamically sized 1-dimensional array,
+ V4L2_CTRL_FLAG_DYNAMIC_ARRAY flag must be set when using it.
+
+.. c:type:: v4l2_ctrl_hevc_slice_params
+
+.. raw:: latex
+
+ \scriptsize
+
+.. tabularcolumns:: |p{5.4cm}|p{6.8cm}|p{5.1cm}|
+
+.. cssclass:: longtable
+
+.. flat-table:: struct v4l2_ctrl_hevc_slice_params
+ :header-rows: 0
+ :stub-columns: 0
+ :widths: 1 1 2
+
+ * - __u32
+ - ``bit_size``
+ - Size (in bits) of the current slice data.
+ * - __u32
+ - ``data_byte_offset``
+ - Offset (in byte) to the video data in the current slice data.
+ * - __u32
+ - ``num_entry_point_offsets``
+ - Specifies the number of entry point offset syntax elements in the slice header.
+ * - __u8
+ - ``nal_unit_type``
+ - Specifies the coding type of the slice (B, P or I).
+ * - __u8
+ - ``nuh_temporal_id_plus1``
+ - Minus 1 specifies a temporal identifier for the NAL unit.
+ * - __u8
+ - ``slice_type``
+ -
+ (V4L2_HEVC_SLICE_TYPE_I, V4L2_HEVC_SLICE_TYPE_P or
+ V4L2_HEVC_SLICE_TYPE_B).
+ * - __u8
+ - ``colour_plane_id``
+ - Specifies the colour plane associated with the current slice.
+ * - __u16
+ - ``slice_pic_order_cnt``
+ - Specifies the picture order count.
+ * - __u8
+ - ``num_ref_idx_l0_active_minus1``
+ - Specifies the maximum reference index for reference picture list 0
+ that may be used to decode the slice.
+ * - __u8
+ - ``num_ref_idx_l1_active_minus1``
+ - Specifies the maximum reference index for reference picture list 1
+ that may be used to decode the slice.
+ * - __u8
+ - ``collocated_ref_idx``
+ - Specifies the reference index of the collocated picture used for
+ temporal motion vector prediction.
+ * - __u8
+ - ``five_minus_max_num_merge_cand``
+ - Specifies the maximum number of merging motion vector prediction
+ candidates supported in the slice subtracted from 5.
+ * - __s8
+ - ``slice_qp_delta``
+ - Specifies the initial value of QpY to be used for the coding blocks in the slice.
+ * - __s8
+ - ``slice_cb_qp_offset``
+ - Specifies a difference to be added to the value of pps_cb_qp_offset.
+ * - __s8
+ - ``slice_cr_qp_offset``
+ - Specifies a difference to be added to the value of pps_cr_qp_offset.
+ * - __s8
+ - ``slice_act_y_qp_offset``
+ - screen content extension parameters
+ * - __s8
+ - ``slice_act_cb_qp_offset``
+ - screen content extension parameters
+ * - __s8
+ - ``slice_act_cr_qp_offset``
+ - screen content extension parameters
+ * - __s8
+ - ``slice_beta_offset_div2``
+ - Specify the deblocking parameter offsets for beta divided by 2.
+ * - __s8
+ - ``slice_tc_offset_div2``
+ - Specify the deblocking parameter offsets for tC divided by 2.
+ * - __u8
+ - ``pic_struct``
+ - Indicates whether a picture should be displayed as a frame or as one or more fields.
+ * - __u32
+ - ``slice_segment_addr``
+ - Specifies the address of the first coding tree block in the slice segment.
+ * - __u8
+ - ``ref_idx_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
+ - The list of L0 reference elements as indices in the DPB.
+ * - __u8
+ - ``ref_idx_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
+ - The list of L1 reference elements as indices in the DPB.
+ * - __u16
+ - ``short_term_ref_pic_set_size``
+ - Specifies the size of short-term reference pictures set included in the SPS.
+ * - __u16
+ - ``long_term_ref_pic_set_size``
+ - Specifies the size of long-term reference pictures set include in the SPS.
+ * - __u8
+ - ``padding``
+ - Applications and drivers must set this to zero.
+ * - struct :c:type:`v4l2_hevc_pred_weight_table`
+ - ``pred_weight_table``
+ - The prediction weight coefficients for inter-picture prediction.
+ * - __u64
+ - ``flags``
+ - See :ref:`Slice Parameters Flags <hevc_slice_params_flags>`
+
+.. raw:: latex
+
+ \normalsize
+
+.. _hevc_slice_params_flags:
+
+``Slice Parameters Flags``
+
+.. raw:: latex
+
+ \scriptsize
+
+.. flat-table::
+ :header-rows: 0
+ :stub-columns: 0
+ :widths: 1 1 2
+
+ * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_SAO_LUMA``
+ - 0x00000001
+ -
+ * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_SAO_CHROMA``
+ - 0x00000002
+ -
+ * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_TEMPORAL_MVP_ENABLED``
+ - 0x00000004
+ -
+ * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_MVD_L1_ZERO``
+ - 0x00000008
+ -
+ * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_CABAC_INIT``
+ - 0x00000010
+ -
+ * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_COLLOCATED_FROM_L0``
+ - 0x00000020
+ -
+ * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_USE_INTEGER_MV``
+ - 0x00000040
+ -
+ * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_DEBLOCKING_FILTER_DISABLED``
+ - 0x00000080
+ -
+ * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_LOOP_FILTER_ACROSS_SLICES_ENABLED``
+ - 0x00000100
+ -
+ * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_DEPENDENT_SLICE_SEGMENT``
+ - 0x00000200
+ -
+
+.. raw:: latex
+
+ \normalsize
+
+``V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS (integer)``
+ Specifies entry point offsets in bytes.
+ This control is a dynamically sized array. The number of entry point
+ offsets is reported by the ``elems`` field.
+ This bitstream parameter is defined according to :ref:`hevc`.
+ They are described in section 7.4.7.1 "General slice segment header
+ semantics" of the specification.
+
+``V4L2_CID_STATELESS_HEVC_SCALING_MATRIX (struct)``
+ Specifies the HEVC scaling matrix parameters used for the scaling process
+ for transform coefficients.
+ These matrix and parameters are defined according to :ref:`hevc`.
+ They are described in section 7.4.5 "Scaling list data semantics" of
+ the specification.
+
+.. c:type:: v4l2_ctrl_hevc_scaling_matrix
+
+.. raw:: latex
+
+ \scriptsize
+
+.. tabularcolumns:: |p{5.4cm}|p{6.8cm}|p{5.1cm}|
+
+.. cssclass:: longtable
+
+.. flat-table:: struct v4l2_ctrl_hevc_scaling_matrix
+ :header-rows: 0
+ :stub-columns: 0
+ :widths: 1 1 2
+
+ * - __u8
+ - ``scaling_list_4x4[6][16]``
+ - Scaling list is used for the scaling process for transform
+ coefficients. The values on each scaling list are expected
+ in raster scan order.
+ * - __u8
+ - ``scaling_list_8x8[6][64]``
+ - Scaling list is used for the scaling process for transform
+ coefficients. The values on each scaling list are expected
+ in raster scan order.
+ * - __u8
+ - ``scaling_list_16x16[6][64]``
+ - Scaling list is used for the scaling process for transform
+ coefficients. The values on each scaling list are expected
+ in raster scan order.
+ * - __u8
+ - ``scaling_list_32x32[2][64]``
+ - Scaling list is used for the scaling process for transform
+ coefficients. The values on each scaling list are expected
+ in raster scan order.
+ * - __u8
+ - ``scaling_list_dc_coef_16x16[6]``
+ - Scaling list is used for the scaling process for transform
+ coefficients. The values on each scaling list are expected
+ in raster scan order.
+ * - __u8
+ - ``scaling_list_dc_coef_32x32[2]``
+ - Scaling list is used for the scaling process for transform
+ coefficients. The values on each scaling list are expected
+ in raster scan order.
+
+.. raw:: latex
+
+ \normalsize
+
+.. c:type:: v4l2_hevc_dpb_entry
+
+.. raw:: latex
+
+ \small
+
+.. tabularcolumns:: |p{1.0cm}|p{4.2cm}|p{12.1cm}|
+
+.. flat-table:: struct v4l2_hevc_dpb_entry
+ :header-rows: 0
+ :stub-columns: 0
+ :widths: 1 1 2
+
+ * - __u64
+ - ``timestamp``
+ - Timestamp of the V4L2 capture buffer to use as reference, used
+ with B-coded and P-coded frames. The timestamp refers to the
+ ``timestamp`` field in struct :c:type:`v4l2_buffer`. Use the
+ :c:func:`v4l2_timeval_to_ns()` function to convert the struct
+ :c:type:`timeval` in struct :c:type:`v4l2_buffer` to a __u64.
+ * - __u8
+ - ``flags``
+ - Long term flag for the reference frame
+ (V4L2_HEVC_DPB_ENTRY_LONG_TERM_REFERENCE). The flag is set as
+ described in the ITU HEVC specification chapter "8.3.2 Decoding
+ process for reference picture set".
+ * - __u8
+ - ``field_pic``
+ - Whether the reference is a field picture or a frame.
+ See :ref:`HEVC dpb field pic Flags <hevc_dpb_field_pic_flags>`
+ * - __s32
+ - ``pic_order_cnt_val``
+ - The picture order count of the current picture.
+ * - __u8
+ - ``padding[2]``
+ - Applications and drivers must set this to zero.
+
+.. raw:: latex
+
+ \normalsize
+
+.. _hevc_dpb_field_pic_flags:
+
+``HEVC dpb field pic Flags``
+
+.. raw:: latex
+
+ \scriptsize
+
+.. flat-table::
+ :header-rows: 0
+ :stub-columns: 0
+ :widths: 1 1 2
+
+ * - ``V4L2_HEVC_SEI_PIC_STRUCT_FRAME``
+ - 0
+ - (progressive) Frame
+ * - ``V4L2_HEVC_SEI_PIC_STRUCT_TOP_FIELD``
+ - 1
+ - Top field
+ * - ``V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_FIELD``
+ - 2
+ - Bottom field
+ * - ``V4L2_HEVC_SEI_PIC_STRUCT_TOP_BOTTOM``
+ - 3
+ - Top field, bottom field, in that order
+ * - ``V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_TOP``
+ - 4
+ - Bottom field, top field, in that order
+ * - ``V4L2_HEVC_SEI_PIC_STRUCT_TOP_BOTTOM_TOP``
+ - 5
+ - Top field, bottom field, top field repeated, in that order
+ * - ``V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_TOP_BOTTOM``
+ - 6
+ - Bottom field, top field, bottom field repeated, in that order
+ * - ``V4L2_HEVC_SEI_PIC_STRUCT_FRAME_DOUBLING``
+ - 7
+ - Frame doubling
+ * - ``V4L2_HEVC_SEI_PIC_STRUCT_FRAME_TRIPLING``
+ - 8
+ - Frame tripling
+ * - ``V4L2_HEVC_SEI_PIC_STRUCT_TOP_PAIRED_PREVIOUS_BOTTOM``
+ - 9
+ - Top field paired with previous bottom field in output order
+ * - ``V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_PAIRED_PREVIOUS_TOP``
+ - 10
+ - Bottom field paired with previous top field in output order
+ * - ``V4L2_HEVC_SEI_PIC_STRUCT_TOP_PAIRED_NEXT_BOTTOM``
+ - 11
+ - Top field paired with next bottom field in output order
+ * - ``V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_PAIRED_NEXT_TOP``
+ - 12
+ - Bottom field paired with next top field in output order
+
+.. c:type:: v4l2_hevc_pred_weight_table
+
+.. raw:: latex
+
+ \footnotesize
+
+.. tabularcolumns:: |p{0.8cm}|p{10.6cm}|p{5.9cm}|
+
+.. flat-table:: struct v4l2_hevc_pred_weight_table
+ :header-rows: 0
+ :stub-columns: 0
+ :widths: 1 1 2
+
+ * - __s8
+ - ``delta_luma_weight_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
+ - The difference of the weighting factor applied to the luma
+ prediction value for list 0.
+ * - __s8
+ - ``luma_offset_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
+ - The additive offset applied to the luma prediction value for list 0.
+ * - __s8
+ - ``delta_chroma_weight_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]``
+ - The difference of the weighting factor applied to the chroma
+ prediction value for list 0.
+ * - __s8
+ - ``chroma_offset_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]``
+ - The difference of the additive offset applied to the chroma
+ prediction values for list 0.
+ * - __s8
+ - ``delta_luma_weight_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
+ - The difference of the weighting factor applied to the luma
+ prediction value for list 1.
+ * - __s8
+ - ``luma_offset_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
+ - The additive offset applied to the luma prediction value for list 1.
+ * - __s8
+ - ``delta_chroma_weight_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]``
+ - The difference of the weighting factor applied to the chroma
+ prediction value for list 1.
+ * - __s8
+ - ``chroma_offset_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]``
+ - The difference of the additive offset applied to the chroma
+ prediction values for list 1.
+ * - __u8
+ - ``luma_log2_weight_denom``
+ - The base 2 logarithm of the denominator for all luma weighting
+ factors.
+ * - __s8
+ - ``delta_chroma_log2_weight_denom``
+ - The difference of the base 2 logarithm of the denominator for
+ all chroma weighting factors.
+ * - __u8
+ - ``padding[6]``
+ - Applications and drivers must set this to zero.
+
+.. raw:: latex
+
+ \normalsize
+
+``V4L2_CID_STATELESS_HEVC_DECODE_MODE (enum)``
+ Specifies the decoding mode to use. Currently exposes slice-based and
+ frame-based decoding but new modes might be added later on.
+ This control is used as a modifier for V4L2_PIX_FMT_HEVC_SLICE
+ pixel format. Applications that support V4L2_PIX_FMT_HEVC_SLICE
+ are required to set this control in order to specify the decoding mode
+ that is expected for the buffer.
+ Drivers may expose a single or multiple decoding modes, depending
+ on what they can support.
+
+.. c:type:: v4l2_stateless_hevc_decode_mode
+
+.. raw:: latex
+
+ \small
+
+.. tabularcolumns:: |p{9.4cm}|p{0.6cm}|p{7.3cm}|
+
+.. flat-table::
+ :header-rows: 0
+ :stub-columns: 0
+ :widths: 1 1 2
+
+ * - ``V4L2_STATELESS_HEVC_DECODE_MODE_SLICE_BASED``
+ - 0
+ - Decoding is done at the slice granularity.
+ The OUTPUT buffer must contain a single slice.
+ * - ``V4L2_STATELESS_HEVC_DECODE_MODE_FRAME_BASED``
+ - 1
+ - Decoding is done at the frame granularity.
+ The OUTPUT buffer must contain all slices needed to decode the
+ frame.
+
+.. raw:: latex
+
+ \normalsize
+
+``V4L2_CID_STATELESS_HEVC_START_CODE (enum)``
+ Specifies the HEVC slice start code expected for each slice.
+ This control is used as a modifier for V4L2_PIX_FMT_HEVC_SLICE
+ pixel format. Applications that support V4L2_PIX_FMT_HEVC_SLICE
+ are required to set this control in order to specify the start code
+ that is expected for the buffer.
+ Drivers may expose a single or multiple start codes, depending
+ on what they can support.
+
+.. c:type:: v4l2_stateless_hevc_start_code
+
+.. tabularcolumns:: |p{9.2cm}|p{0.6cm}|p{7.5cm}|
+
+.. flat-table::
+ :header-rows: 0
+ :stub-columns: 0
+ :widths: 1 1 2
+
+ * - ``V4L2_STATELESS_HEVC_START_CODE_NONE``
+ - 0
+ - Selecting this value specifies that HEVC slices are passed
+ to the driver without any start code. The bitstream data should be
+ according to :ref:`hevc` 7.3.1.1 General NAL unit syntax, hence
+ contains emulation prevention bytes when required.
+ * - ``V4L2_STATELESS_HEVC_START_CODE_ANNEX_B``
+ - 1
+ - Selecting this value specifies that HEVC slices are expected
+ to be prefixed by Annex B start codes. According to :ref:`hevc`
+ valid start codes can be 3-bytes 0x000001 or 4-bytes 0x00000001.
+
+.. raw:: latex
+
+ \normalsize
+
+``V4L2_CID_MPEG_VIDEO_BASELAYER_PRIORITY_ID (integer)``
+ Specifies a priority identifier for the NAL unit, which will be applied to
+ the base layer. By default this value is set to 0 for the base layer,
+ and the next layer will have the priority ID assigned as 1, 2, 3 and so on.
+ The video encoder can't decide the priority id to be applied to a layer,
+ so this has to come from client.
+ This is applicable to H264 and valid Range is from 0 to 63.
+ Source Rec. ITU-T H.264 (06/2019); G.7.4.1.1, G.8.8.1.
+
+``V4L2_CID_MPEG_VIDEO_LTR_COUNT (integer)``
+ Specifies the maximum number of Long Term Reference (LTR) frames at any
+ given time that the encoder can keep.
+ This is applicable to the H264 and HEVC encoders.
+
+``V4L2_CID_MPEG_VIDEO_FRAME_LTR_INDEX (integer)``
+ After setting this control the frame that will be queued next
+ will be marked as a Long Term Reference (LTR) frame
+ and given this LTR index which ranges from 0 to LTR_COUNT-1.
+ This is applicable to the H264 and HEVC encoders.
+ Source Rec. ITU-T H.264 (06/2019); Table 7.9
+
+``V4L2_CID_MPEG_VIDEO_USE_LTR_FRAMES (bitmask)``
+ Specifies the Long Term Reference (LTR) frame(s) to be used for
+ encoding the next frame queued after setting this control.
+ This provides a bitmask which consists of bits [0, LTR_COUNT-1].
+ This is applicable to the H264 and HEVC encoders.
+
+``V4L2_CID_STATELESS_HEVC_DECODE_PARAMS (struct)``
+ Specifies various decode parameters, especially the references picture order
+ count (POC) for all the lists (short, long, before, current, after) and the
+ number of entries for each of them.
+ These parameters are defined according to :ref:`hevc`.
+ They are described in section 8.3 "Slice decoding process" of the
+ specification.
+
+.. c:type:: v4l2_ctrl_hevc_decode_params
+
+.. cssclass:: longtable
+
+.. flat-table:: struct v4l2_ctrl_hevc_decode_params
+ :header-rows: 0
+ :stub-columns: 0
+ :widths: 1 1 2
+
+ * - __s32
+ - ``pic_order_cnt_val``
+ - PicOrderCntVal as described in section 8.3.1 "Decoding process
+ for picture order count" of the specification.
+ * - __u8
+ - ``num_active_dpb_entries``
+ - The number of entries in ``dpb``.
+ * - __u8
+ - ``num_poc_st_curr_before``
+ - The number of reference pictures in the short-term set that come before
+ the current frame.
+ * - __u8
+ - ``num_poc_st_curr_after``
+ - The number of reference pictures in the short-term set that come after
+ the current frame.
+ * - __u8
+ - ``num_poc_lt_curr``
+ - The number of reference pictures in the long-term set.
+ * - __u8
+ - ``poc_st_curr_before[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
+ - PocStCurrBefore as described in section 8.3.2 "Decoding process for reference
+ picture set": provides the index of the short term before references in DPB array.
+ * - __u8
+ - ``poc_st_curr_after[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
+ - PocStCurrAfter as described in section 8.3.2 "Decoding process for reference
+ picture set": provides the index of the short term after references in DPB array.
+ * - __u8
+ - ``poc_lt_curr[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
+ - PocLtCurr as described in section 8.3.2 "Decoding process for reference
+ picture set": provides the index of the long term references in DPB array.
+ * - struct :c:type:`v4l2_hevc_dpb_entry`
+ - ``dpb[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
+ - The decoded picture buffer, for meta-data about reference frames.
+ * - __u64
+ - ``flags``
+ - See :ref:`Decode Parameters Flags <hevc_decode_params_flags>`
+
+.. _hevc_decode_params_flags:
+
+``Decode Parameters Flags``
+
+.. cssclass:: longtable
+
+.. flat-table::
+ :header-rows: 0
+ :stub-columns: 0
+ :widths: 1 1 2
+
+ * - ``V4L2_HEVC_DECODE_PARAM_FLAG_IRAP_PIC``
+ - 0x00000001
+ -
+ * - ``V4L2_HEVC_DECODE_PARAM_FLAG_IDR_PIC``
+ - 0x00000002
+ -
+ * - ``V4L2_HEVC_DECODE_PARAM_FLAG_NO_OUTPUT_OF_PRIOR``
+ - 0x00000004
+ -
diff --git a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
index 48b3f533bc17..25d6a79dd04b 100644
--- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
+++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
@@ -2636,891 +2636,3 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
Indicates whether to generate SPS and PPS at every IDR. Setting it to 0
disables generating SPS and PPS at every IDR. Setting it to one enables
generating SPS and PPS at every IDR.
-
-.. _v4l2-mpeg-hevc:
-
-``V4L2_CID_STATELESS_HEVC_SPS (struct)``
- Specifies the Sequence Parameter Set fields (as extracted from the
- bitstream) for the associated HEVC slice data.
- These bitstream parameters are defined according to :ref:`hevc`.
- They are described in section 7.4.3.2 "Sequence parameter set RBSP
- semantics" of the specification.
-
-.. c:type:: v4l2_ctrl_hevc_sps
-
-.. raw:: latex
-
- \small
-
-.. tabularcolumns:: |p{1.2cm}|p{9.2cm}|p{6.9cm}|
-
-.. cssclass:: longtable
-
-.. flat-table:: struct v4l2_ctrl_hevc_sps
- :header-rows: 0
- :stub-columns: 0
- :widths: 1 1 2
-
- * - __u8
- - ``video_parameter_set_id``
- - Specifies the value of the vps_video_parameter_set_id of the active VPS
- as descibed in section "7.4.3.2.1 General sequence parameter set RBSP semantics"
- of H.265 specifications.
- * - __u8
- - ``seq_parameter_set_id``
- - Provides an identifier for the SPS for reference by other syntax elements
- as descibed in section "7.4.3.2.1 General sequence parameter set RBSP semantics"
- of H.265 specifications.
- * - __u16
- - ``pic_width_in_luma_samples``
- - Specifies the width of each decoded picture in units of luma samples.
- * - __u16
- - ``pic_height_in_luma_samples``
- - Specifies the height of each decoded picture in units of luma samples.
- * - __u8
- - ``bit_depth_luma_minus8``
- - Specifies the bit depth of the samples of the luma array.
- * - __u8
- - ``bit_depth_chroma_minus8``
- - Specifies the bit depth of the samples of the chroma arrays.
- * - __u8
- - ``log2_max_pic_order_cnt_lsb_minus4``
- - Specifies the value of the variable MaxPicOrderCntLsb.
- * - __u8
- - ``sps_max_dec_pic_buffering_minus1``
- - Plus 1 specifies the maximum required size of the decoded picture buffer for
- the CVS
- * - __u8
- - ``sps_max_num_reorder_pics``
- - Indicates the maximum allowed number of pictures.
- * - __u8
- - ``sps_max_latency_increase_plus1``
- - Not equal to 0 is used to compute the value of SpsMaxLatencyPictures[i].
- * - __u8
- - ``log2_min_luma_coding_block_size_minus3``
- - Plus 3 specifies the minimum luma coding block size.
- * - __u8
- - ``log2_diff_max_min_luma_coding_block_size``
- - Specifies the difference between the maximum and minimum luma coding block size.
- * - __u8
- - ``log2_min_luma_transform_block_size_minus2``
- - Plus 2 specifies the minimum luma transform block size.
- * - __u8
- - ``log2_diff_max_min_luma_transform_block_size``
- - Specifies the difference between the maximum and minimum luma transform block size.
- * - __u8
- - ``max_transform_hierarchy_depth_inter``
- - Specifies the maximum hierarchy depth for transform units of coding units coded
- in inter prediction mode.
- * - __u8
- - ``max_transform_hierarchy_depth_intra``
- - Specifies the maximum hierarchy depth for transform units of coding units coded in
- intra prediction mode.
- * - __u8
- - ``pcm_sample_bit_depth_luma_minus1``
- - Specifies the number of bits used to represent each of PCM sample values of the
- luma component.
- * - __u8
- - ``pcm_sample_bit_depth_chroma_minus1``
- - Specifies the number of bits used to represent each of PCM sample values of
- the chroma components.
- * - __u8
- - ``log2_min_pcm_luma_coding_block_size_minus3``
- - Plus 3 specifies the minimum size of coding blocks.
- * - __u8
- - ``log2_diff_max_min_pcm_luma_coding_block_size``
- - Specifies the difference between the maximum and minimum size of coding blocks.
- * - __u8
- - ``num_short_term_ref_pic_sets``
- - Specifies the number of st_ref_pic_set() syntax structures included in the SPS.
- * - __u8
- - ``num_long_term_ref_pics_sps``
- - Specifies the number of candidate long-term reference pictures that are
- specified in the SPS.
- * - __u8
- - ``chroma_format_idc``
- - Specifies the chroma sampling.
- * - __u8
- - ``sps_max_sub_layers_minus1``
- - plus 1 specifies the maximum number of temporal sub-layers.
- * - __u64
- - ``flags``
- - See :ref:`Sequence Parameter Set Flags <hevc_sps_flags>`
-
-.. raw:: latex
-
- \normalsize
-
-.. _hevc_sps_flags:
-
-``Sequence Parameter Set Flags``
-
-.. raw:: latex
-
- \small
-
-.. cssclass:: longtable
-
-.. flat-table::
- :header-rows: 0
- :stub-columns: 0
- :widths: 1 1 2
-
- * - ``V4L2_HEVC_SPS_FLAG_SEPARATE_COLOUR_PLANE``
- - 0x00000001
- -
- * - ``V4L2_HEVC_SPS_FLAG_SCALING_LIST_ENABLED``
- - 0x00000002
- -
- * - ``V4L2_HEVC_SPS_FLAG_AMP_ENABLED``
- - 0x00000004
- -
- * - ``V4L2_HEVC_SPS_FLAG_SAMPLE_ADAPTIVE_OFFSET``
- - 0x00000008
- -
- * - ``V4L2_HEVC_SPS_FLAG_PCM_ENABLED``
- - 0x00000010
- -
- * - ``V4L2_HEVC_SPS_FLAG_PCM_LOOP_FILTER_DISABLED``
- - 0x00000020
- -
- * - ``V4L2_HEVC_SPS_FLAG_LONG_TERM_REF_PICS_PRESENT``
- - 0x00000040
- -
- * - ``V4L2_HEVC_SPS_FLAG_SPS_TEMPORAL_MVP_ENABLED``
- - 0x00000080
- -
- * - ``V4L2_HEVC_SPS_FLAG_STRONG_INTRA_SMOOTHING_ENABLED``
- - 0x00000100
- -
-
-.. raw:: latex
-
- \normalsize
-
-``V4L2_CID_STATELESS_HEVC_PPS (struct)``
- Specifies the Picture Parameter Set fields (as extracted from the
- bitstream) for the associated HEVC slice data.
- These bitstream parameters are defined according to :ref:`hevc`.
- They are described in section 7.4.3.3 "Picture parameter set RBSP
- semantics" of the specification.
-
-.. c:type:: v4l2_ctrl_hevc_pps
-
-.. tabularcolumns:: |p{1.2cm}|p{8.6cm}|p{7.5cm}|
-
-.. cssclass:: longtable
-
-.. flat-table:: struct v4l2_ctrl_hevc_pps
- :header-rows: 0
- :stub-columns: 0
- :widths: 1 1 2
-
- * - __u8
- - ``pic_parameter_set_id``
- - Identifies the PPS for reference by other syntax elements.
- * - __u8
- - ``num_extra_slice_header_bits``
- - Specifies the number of extra slice header bits that are present
- in the slice header RBSP for coded pictures referring to the PPS.
- * - __u8
- - ``num_ref_idx_l0_default_active_minus1``
- - Specifies the inferred value of num_ref_idx_l0_active_minus1
- * - __u8
- - ``num_ref_idx_l1_default_active_minus1``
- - Specifies the inferred value of num_ref_idx_l1_active_minus1
- * - __s8
- - ``init_qp_minus26``
- - Plus 26 specifies the initial value of SliceQp Y for each slice
- referring to the PPS.
- * - __u8
- - ``diff_cu_qp_delta_depth``
- - Specifies the difference between the luma coding tree block size
- and the minimum luma coding block size of coding units that
- convey cu_qp_delta_abs and cu_qp_delta_sign_flag.
- * - __s8
- - ``pps_cb_qp_offset``
- - Specify the offsets to the luma quantization parameter Cb.
- * - __s8
- - ``pps_cr_qp_offset``
- - Specify the offsets to the luma quantization parameter Cr.
- * - __u8
- - ``num_tile_columns_minus1``
- - Plus 1 specifies the number of tile columns partitioning the picture.
- * - __u8
- - ``num_tile_rows_minus1``
- - Plus 1 specifies the number of tile rows partitioning the picture.
- * - __u8
- - ``column_width_minus1[20]``
- - Plus 1 specifies the width of the i-th tile column in units of
- coding tree blocks.
- * - __u8
- - ``row_height_minus1[22]``
- - Plus 1 specifies the height of the i-th tile row in units of coding
- tree blocks.
- * - __s8
- - ``pps_beta_offset_div2``
- - Specify the default deblocking parameter offsets for beta divided by 2.
- * - __s8
- - ``pps_tc_offset_div2``
- - Specify the default deblocking parameter offsets for tC divided by 2.
- * - __u8
- - ``log2_parallel_merge_level_minus2``
- - Plus 2 specifies the value of the variable Log2ParMrgLevel.
- * - __u8
- - ``padding[4]``
- - Applications and drivers must set this to zero.
- * - __u64
- - ``flags``
- - See :ref:`Picture Parameter Set Flags <hevc_pps_flags>`
-
-.. _hevc_pps_flags:
-
-``Picture Parameter Set Flags``
-
-.. raw:: latex
-
- \small
-
-.. flat-table::
- :header-rows: 0
- :stub-columns: 0
- :widths: 1 1 2
-
- * - ``V4L2_HEVC_PPS_FLAG_DEPENDENT_SLICE_SEGMENT_ENABLED``
- - 0x00000001
- -
- * - ``V4L2_HEVC_PPS_FLAG_OUTPUT_FLAG_PRESENT``
- - 0x00000002
- -
- * - ``V4L2_HEVC_PPS_FLAG_SIGN_DATA_HIDING_ENABLED``
- - 0x00000004
- -
- * - ``V4L2_HEVC_PPS_FLAG_CABAC_INIT_PRESENT``
- - 0x00000008
- -
- * - ``V4L2_HEVC_PPS_FLAG_CONSTRAINED_INTRA_PRED``
- - 0x00000010
- -
- * - ``V4L2_HEVC_PPS_FLAG_TRANSFORM_SKIP_ENABLED``
- - 0x00000020
- -
- * - ``V4L2_HEVC_PPS_FLAG_CU_QP_DELTA_ENABLED``
- - 0x00000040
- -
- * - ``V4L2_HEVC_PPS_FLAG_PPS_SLICE_CHROMA_QP_OFFSETS_PRESENT``
- - 0x00000080
- -
- * - ``V4L2_HEVC_PPS_FLAG_WEIGHTED_PRED``
- - 0x00000100
- -
- * - ``V4L2_HEVC_PPS_FLAG_WEIGHTED_BIPRED``
- - 0x00000200
- -
- * - ``V4L2_HEVC_PPS_FLAG_TRANSQUANT_BYPASS_ENABLED``
- - 0x00000400
- -
- * - ``V4L2_HEVC_PPS_FLAG_TILES_ENABLED``
- - 0x00000800
- -
- * - ``V4L2_HEVC_PPS_FLAG_ENTROPY_CODING_SYNC_ENABLED``
- - 0x00001000
- -
- * - ``V4L2_HEVC_PPS_FLAG_LOOP_FILTER_ACROSS_TILES_ENABLED``
- - 0x00002000
- -
- * - ``V4L2_HEVC_PPS_FLAG_PPS_LOOP_FILTER_ACROSS_SLICES_ENABLED``
- - 0x00004000
- -
- * - ``V4L2_HEVC_PPS_FLAG_DEBLOCKING_FILTER_OVERRIDE_ENABLED``
- - 0x00008000
- -
- * - ``V4L2_HEVC_PPS_FLAG_PPS_DISABLE_DEBLOCKING_FILTER``
- - 0x00010000
- -
- * - ``V4L2_HEVC_PPS_FLAG_LISTS_MODIFICATION_PRESENT``
- - 0x00020000
- -
- * - ``V4L2_HEVC_PPS_FLAG_SLICE_SEGMENT_HEADER_EXTENSION_PRESENT``
- - 0x00040000
- -
- * - ``V4L2_HEVC_PPS_FLAG_DEBLOCKING_FILTER_CONTROL_PRESENT``
- - 0x00080000
- - Specifies the presence of deblocking filter control syntax elements in
- the PPS
- * - ``V4L2_HEVC_PPS_FLAG_UNIFORM_SPACING``
- - 0x00100000
- - Specifies that tile column boundaries and likewise tile row boundaries
- are distributed uniformly across the picture
-
-.. raw:: latex
-
- \normalsize
-
-``V4L2_CID_STATELESS_HEVC_SLICE_PARAMS (struct)``
- Specifies various slice-specific parameters, especially from the NAL unit
- header, general slice segment header and weighted prediction parameter
- parts of the bitstream.
- These bitstream parameters are defined according to :ref:`hevc`.
- They are described in section 7.4.7 "General slice segment header
- semantics" of the specification.
- This control is a dynamically sized 1-dimensional array,
- V4L2_CTRL_FLAG_DYNAMIC_ARRAY flag must be set when using it.
-
-.. c:type:: v4l2_ctrl_hevc_slice_params
-
-.. raw:: latex
-
- \scriptsize
-
-.. tabularcolumns:: |p{5.4cm}|p{6.8cm}|p{5.1cm}|
-
-.. cssclass:: longtable
-
-.. flat-table:: struct v4l2_ctrl_hevc_slice_params
- :header-rows: 0
- :stub-columns: 0
- :widths: 1 1 2
-
- * - __u32
- - ``bit_size``
- - Size (in bits) of the current slice data.
- * - __u32
- - ``data_byte_offset``
- - Offset (in bytes) to the video data in the current slice data.
- * - __u32
- - ``num_entry_point_offsets``
- - Specifies the number of entry point offset syntax elements in the slice header.
- * - __u8
- - ``nal_unit_type``
- - Specifies the coding type of the slice (B, P or I).
- * - __u8
- - ``nuh_temporal_id_plus1``
- - Minus 1 specifies a temporal identifier for the NAL unit.
- * - __u8
- - ``slice_type``
- -
- (V4L2_HEVC_SLICE_TYPE_I, V4L2_HEVC_SLICE_TYPE_P or
- V4L2_HEVC_SLICE_TYPE_B).
- * - __u8
- - ``colour_plane_id``
- - Specifies the colour plane associated with the current slice.
- * - __u16
- - ``slice_pic_order_cnt``
- - Specifies the picture order count.
- * - __u8
- - ``num_ref_idx_l0_active_minus1``
- - Specifies the maximum reference index for reference picture list 0
- that may be used to decode the slice.
- * - __u8
- - ``num_ref_idx_l1_active_minus1``
- - Specifies the maximum reference index for reference picture list 1
- that may be used to decode the slice.
- * - __u8
- - ``collocated_ref_idx``
- - Specifies the reference index of the collocated picture used for
- temporal motion vector prediction.
- * - __u8
- - ``five_minus_max_num_merge_cand``
- - Specifies the maximum number of merging motion vector prediction
- candidates supported in the slice subtracted from 5.
- * - __s8
- - ``slice_qp_delta``
- - Specifies the initial value of QpY to be used for the coding blocks in the slice.
- * - __s8
- - ``slice_cb_qp_offset``
- - Specifies a difference to be added to the value of pps_cb_qp_offset.
- * - __s8
- - ``slice_cr_qp_offset``
- - Specifies a difference to be added to the value of pps_cr_qp_offset.
- * - __s8
- - ``slice_act_y_qp_offset``
- - screen content extension parameters
- * - __s8
- - ``slice_act_cb_qp_offset``
- - screen content extension parameters
- * - __s8
- - ``slice_act_cr_qp_offset``
- - screen content extension parameters
- * - __s8
- - ``slice_beta_offset_div2``
- - Specify the deblocking parameter offsets for beta divided by 2.
- * - __s8
- - ``slice_tc_offset_div2``
- - Specify the deblocking parameter offsets for tC divided by 2.
- * - __u8
- - ``pic_struct``
- - Indicates whether a picture should be displayed as a frame or as one or more fields.
- * - __u32
- - ``slice_segment_addr``
- - Specifies the address of the first coding tree block in the slice segment.
- * - __u8
- - ``ref_idx_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
- - The list of L0 reference elements as indices in the DPB.
- * - __u8
- - ``ref_idx_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
- - The list of L1 reference elements as indices in the DPB.
- * - __u16
- - ``short_term_ref_pic_set_size``
- - Specifies the size of short-term reference pictures set included in the SPS.
- * - __u16
- - ``long_term_ref_pic_set_size``
- - Specifies the size of long-term reference pictures set include in the SPS.
- * - __u8
- - ``padding``
- - Applications and drivers must set this to zero.
- * - struct :c:type:`v4l2_hevc_pred_weight_table`
- - ``pred_weight_table``
- - The prediction weight coefficients for inter-picture prediction.
- * - __u64
- - ``flags``
- - See :ref:`Slice Parameters Flags <hevc_slice_params_flags>`
-
-.. raw:: latex
-
- \normalsize
-
-.. _hevc_slice_params_flags:
-
-``Slice Parameters Flags``
-
-.. raw:: latex
-
- \scriptsize
-
-.. flat-table::
- :header-rows: 0
- :stub-columns: 0
- :widths: 1 1 2
-
- * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_SAO_LUMA``
- - 0x00000001
- -
- * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_SAO_CHROMA``
- - 0x00000002
- -
- * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_TEMPORAL_MVP_ENABLED``
- - 0x00000004
- -
- * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_MVD_L1_ZERO``
- - 0x00000008
- -
- * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_CABAC_INIT``
- - 0x00000010
- -
- * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_COLLOCATED_FROM_L0``
- - 0x00000020
- -
- * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_USE_INTEGER_MV``
- - 0x00000040
- -
- * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_DEBLOCKING_FILTER_DISABLED``
- - 0x00000080
- -
- * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_LOOP_FILTER_ACROSS_SLICES_ENABLED``
- - 0x00000100
- -
- * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_DEPENDENT_SLICE_SEGMENT``
- - 0x00000200
- -
-
-.. raw:: latex
-
- \normalsize
-
-``V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS (integer)``
- Specifies entry point offsets in bytes.
- This control is a dynamically sized array. The number of entry point
- offsets is reported by the ``elems`` field.
- This bitstream parameter is defined according to :ref:`hevc`.
- They are described in section 7.4.7.1 "General slice segment header
- semantics" of the specification.
-
-``V4L2_CID_STATELESS_HEVC_SCALING_MATRIX (struct)``
- Specifies the HEVC scaling matrix parameters used for the scaling process
- for transform coefficients.
- These matrix and parameters are defined according to :ref:`hevc`.
- They are described in section 7.4.5 "Scaling list data semantics" of
- the specification.
-
-.. c:type:: v4l2_ctrl_hevc_scaling_matrix
-
-.. raw:: latex
-
- \scriptsize
-
-.. tabularcolumns:: |p{5.4cm}|p{6.8cm}|p{5.1cm}|
-
-.. cssclass:: longtable
-
-.. flat-table:: struct v4l2_ctrl_hevc_scaling_matrix
- :header-rows: 0
- :stub-columns: 0
- :widths: 1 1 2
-
- * - __u8
- - ``scaling_list_4x4[6][16]``
- - Scaling list is used for the scaling process for transform
- coefficients. The values on each scaling list are expected
- in raster scan order.
- * - __u8
- - ``scaling_list_8x8[6][64]``
- - Scaling list is used for the scaling process for transform
- coefficients. The values on each scaling list are expected
- in raster scan order.
- * - __u8
- - ``scaling_list_16x16[6][64]``
- - Scaling list is used for the scaling process for transform
- coefficients. The values on each scaling list are expected
- in raster scan order.
- * - __u8
- - ``scaling_list_32x32[2][64]``
- - Scaling list is used for the scaling process for transform
- coefficients. The values on each scaling list are expected
- in raster scan order.
- * - __u8
- - ``scaling_list_dc_coef_16x16[6]``
- - Scaling list is used for the scaling process for transform
- coefficients. The values on each scaling list are expected
- in raster scan order.
- * - __u8
- - ``scaling_list_dc_coef_32x32[2]``
- - Scaling list is used for the scaling process for transform
- coefficients. The values on each scaling list are expected
- in raster scan order.
-
-.. raw:: latex
-
- \normalsize
-
-.. c:type:: v4l2_hevc_dpb_entry
-
-.. raw:: latex
-
- \small
-
-.. tabularcolumns:: |p{1.0cm}|p{4.2cm}|p{12.1cm}|
-
-.. flat-table:: struct v4l2_hevc_dpb_entry
- :header-rows: 0
- :stub-columns: 0
- :widths: 1 1 2
-
- * - __u64
- - ``timestamp``
- - Timestamp of the V4L2 capture buffer to use as reference, used
- with B-coded and P-coded frames. The timestamp refers to the
- ``timestamp`` field in struct :c:type:`v4l2_buffer`. Use the
- :c:func:`v4l2_timeval_to_ns()` function to convert the struct
- :c:type:`timeval` in struct :c:type:`v4l2_buffer` to a __u64.
- * - __u8
- - ``flags``
- - Long term flag for the reference frame
- (V4L2_HEVC_DPB_ENTRY_LONG_TERM_REFERENCE). The flag is set as
- described in the ITU HEVC specification chapter "8.3.2 Decoding
- process for reference picture set".
- * - __u8
- - ``field_pic``
- - Whether the reference is a field picture or a frame.
- See :ref:`HEVC dpb field pic Flags <hevc_dpb_field_pic_flags>`
- * - __s32
- - ``pic_order_cnt_val``
- - The picture order count of the current picture.
- * - __u8
- - ``padding[2]``
- - Applications and drivers must set this to zero.
-
-.. raw:: latex
-
- \normalsize
-
-.. _hevc_dpb_field_pic_flags:
-
-``HEVC dpb field pic Flags``
-
-.. raw:: latex
-
- \scriptsize
-
-.. flat-table::
- :header-rows: 0
- :stub-columns: 0
- :widths: 1 1 2
-
- * - ``V4L2_HEVC_SEI_PIC_STRUCT_FRAME``
- - 0
- - (progressive) Frame
- * - ``V4L2_HEVC_SEI_PIC_STRUCT_TOP_FIELD``
- - 1
- - Top field
- * - ``V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_FIELD``
- - 2
- - Bottom field
- * - ``V4L2_HEVC_SEI_PIC_STRUCT_TOP_BOTTOM``
- - 3
- - Top field, bottom field, in that order
- * - ``V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_TOP``
- - 4
- - Bottom field, top field, in that order
- * - ``V4L2_HEVC_SEI_PIC_STRUCT_TOP_BOTTOM_TOP``
- - 5
- - Top field, bottom field, top field repeated, in that order
- * - ``V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_TOP_BOTTOM``
- - 6
- - Bottom field, top field, bottom field repeated, in that order
- * - ``V4L2_HEVC_SEI_PIC_STRUCT_FRAME_DOUBLING``
- - 7
- - Frame doubling
- * - ``V4L2_HEVC_SEI_PIC_STRUCT_FRAME_TRIPLING``
- - 8
- - Frame tripling
- * - ``V4L2_HEVC_SEI_PIC_STRUCT_TOP_PAIRED_PREVIOUS_BOTTOM``
- - 9
- - Top field paired with previous bottom field in output order
- * - ``V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_PAIRED_PREVIOUS_TOP``
- - 10
- - Bottom field paired with previous top field in output order
- * - ``V4L2_HEVC_SEI_PIC_STRUCT_TOP_PAIRED_NEXT_BOTTOM``
- - 11
- - Top field paired with next bottom field in output order
- * - ``V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_PAIRED_NEXT_TOP``
- - 12
- - Bottom field paired with next top field in output order
-
-.. c:type:: v4l2_hevc_pred_weight_table
-
-.. raw:: latex
-
- \footnotesize
-
-.. tabularcolumns:: |p{0.8cm}|p{10.6cm}|p{5.9cm}|
-
-.. flat-table:: struct v4l2_hevc_pred_weight_table
- :header-rows: 0
- :stub-columns: 0
- :widths: 1 1 2
-
- * - __s8
- - ``delta_luma_weight_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
- - The difference of the weighting factor applied to the luma
- prediction value for list 0.
- * - __s8
- - ``luma_offset_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
- - The additive offset applied to the luma prediction value for list 0.
- * - __s8
- - ``delta_chroma_weight_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]``
- - The difference of the weighting factor applied to the chroma
- prediction value for list 0.
- * - __s8
- - ``chroma_offset_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]``
- - The difference of the additive offset applied to the chroma
- prediction values for list 0.
- * - __s8
- - ``delta_luma_weight_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
- - The difference of the weighting factor applied to the luma
- prediction value for list 1.
- * - __s8
- - ``luma_offset_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
- - The additive offset applied to the luma prediction value for list 1.
- * - __s8
- - ``delta_chroma_weight_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]``
- - The difference of the weighting factor applied to the chroma
- prediction value for list 1.
- * - __s8
- - ``chroma_offset_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]``
- - The difference of the additive offset applied to the chroma
- prediction values for list 1.
- * - __u8
- - ``luma_log2_weight_denom``
- - The base 2 logarithm of the denominator for all luma weighting
- factors.
- * - __s8
- - ``delta_chroma_log2_weight_denom``
- - The difference of the base 2 logarithm of the denominator for
- all chroma weighting factors.
- * - __u8
- - ``padding[6]``
- - Applications and drivers must set this to zero.
-
-.. raw:: latex
-
- \normalsize
-
-``V4L2_CID_STATELESS_HEVC_DECODE_MODE (enum)``
- Specifies the decoding mode to use. Currently exposes slice-based and
- frame-based decoding but new modes might be added later on.
- This control is used as a modifier for V4L2_PIX_FMT_HEVC_SLICE
- pixel format. Applications that support V4L2_PIX_FMT_HEVC_SLICE
- are required to set this control in order to specify the decoding mode
- that is expected for the buffer.
- Drivers may expose a single or multiple decoding modes, depending
- on what they can support.
-
- .. note::
-
- This menu control is not yet part of the public kernel API and
- it is expected to change.
-
-.. c:type:: v4l2_stateless_hevc_decode_mode
-
-.. raw:: latex
-
- \small
-
-.. tabularcolumns:: |p{9.4cm}|p{0.6cm}|p{7.3cm}|
-
-.. flat-table::
- :header-rows: 0
- :stub-columns: 0
- :widths: 1 1 2
-
- * - ``V4L2_STATELESS_HEVC_DECODE_MODE_SLICE_BASED``
- - 0
- - Decoding is done at the slice granularity.
- The OUTPUT buffer must contain a single slice.
- * - ``V4L2_STATELESS_HEVC_DECODE_MODE_FRAME_BASED``
- - 1
- - Decoding is done at the frame granularity.
- The OUTPUT buffer must contain all slices needed to decode the
- frame. The OUTPUT buffer must also contain both fields.
-
-.. raw:: latex
-
- \normalsize
-
-``V4L2_CID_STATELESS_HEVC_START_CODE (enum)``
- Specifies the HEVC slice start code expected for each slice.
- This control is used as a modifier for V4L2_PIX_FMT_HEVC_SLICE
- pixel format. Applications that support V4L2_PIX_FMT_HEVC_SLICE
- are required to set this control in order to specify the start code
- that is expected for the buffer.
- Drivers may expose a single or multiple start codes, depending
- on what they can support.
-
- .. note::
-
- This menu control is not yet part of the public kernel API and
- it is expected to change.
-
-.. c:type:: v4l2_stateless_hevc_start_code
-
-.. tabularcolumns:: |p{9.2cm}|p{0.6cm}|p{7.5cm}|
-
-.. flat-table::
- :header-rows: 0
- :stub-columns: 0
- :widths: 1 1 2
-
- * - ``V4L2_STATELESS_HEVC_START_CODE_NONE``
- - 0
- - Selecting this value specifies that HEVC slices are passed
- to the driver without any start code. The bitstream data should be
- according to :ref:`hevc` 7.3.1.1 General NAL unit syntax, hence
- contains emulation prevention bytes when required.
- * - ``V4L2_STATELESS_HEVC_START_CODE_ANNEX_B``
- - 1
- - Selecting this value specifies that HEVC slices are expected
- to be prefixed by Annex B start codes. According to :ref:`hevc`
- valid start codes can be 3-bytes 0x000001 or 4-bytes 0x00000001.
-
-``V4L2_CID_MPEG_VIDEO_BASELAYER_PRIORITY_ID (integer)``
- Specifies a priority identifier for the NAL unit, which will be applied to
- the base layer. By default this value is set to 0 for the base layer,
- and the next layer will have the priority ID assigned as 1, 2, 3 and so on.
- The video encoder can't decide the priority id to be applied to a layer,
- so this has to come from client.
- This is applicable to H264 and valid Range is from 0 to 63.
- Source Rec. ITU-T H.264 (06/2019); G.7.4.1.1, G.8.8.1.
-
-``V4L2_CID_MPEG_VIDEO_LTR_COUNT (integer)``
- Specifies the maximum number of Long Term Reference (LTR) frames at any
- given time that the encoder can keep.
- This is applicable to the H264 and HEVC encoders.
-
-``V4L2_CID_MPEG_VIDEO_FRAME_LTR_INDEX (integer)``
- After setting this control the frame that will be queued next
- will be marked as a Long Term Reference (LTR) frame
- and given this LTR index which ranges from 0 to LTR_COUNT-1.
- This is applicable to the H264 and HEVC encoders.
- Source Rec. ITU-T H.264 (06/2019); Table 7.9
-
-``V4L2_CID_MPEG_VIDEO_USE_LTR_FRAMES (bitmask)``
- Specifies the Long Term Reference (LTR) frame(s) to be used for
- encoding the next frame queued after setting this control.
- This provides a bitmask which consists of bits [0, LTR_COUNT-1].
- This is applicable to the H264 and HEVC encoders.
-
-``V4L2_CID_STATELESS_HEVC_DECODE_PARAMS (struct)``
- Specifies various decode parameters, especially the references picture order
- count (POC) for all the lists (short, long, before, current, after) and the
- number of entries for each of them.
- These parameters are defined according to :ref:`hevc`.
- They are described in section 8.3 "Slice decoding process" of the
- specification.
-
-.. c:type:: v4l2_ctrl_hevc_decode_params
-
-.. cssclass:: longtable
-
-.. flat-table:: struct v4l2_ctrl_hevc_decode_params
- :header-rows: 0
- :stub-columns: 0
- :widths: 1 1 2
-
- * - __s32
- - ``pic_order_cnt_val``
- - PicOrderCntVal as described in section 8.3.1 "Decoding process
- for picture order count" of the specification.
- * - __u8
- - ``num_active_dpb_entries``
- - The number of entries in ``dpb``.
- * - __u8
- - ``num_poc_st_curr_before``
- - The number of reference pictures in the short-term set that come before
- the current frame.
- * - __u8
- - ``num_poc_st_curr_after``
- - The number of reference pictures in the short-term set that come after
- the current frame.
- * - __u8
- - ``num_poc_lt_curr``
- - The number of reference pictures in the long-term set.
- * - __u8
- - ``poc_st_curr_before[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
- - PocStCurrBefore as described in section 8.3.2 "Decoding process for reference
- picture set": provides the index of the short term before references in DPB array.
- * - __u8
- - ``poc_st_curr_after[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
- - PocStCurrAfter as described in section 8.3.2 "Decoding process for reference
- picture set": provides the index of the short term after references in DPB array.
- * - __u8
- - ``poc_lt_curr[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
- - PocLtCurr as described in section 8.3.2 "Decoding process for reference
- picture set": provides the index of the long term references in DPB array.
- * - struct :c:type:`v4l2_hevc_dpb_entry`
- - ``dpb[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
- - The decoded picture buffer, for meta-data about reference frames.
- * - __u64
- - ``flags``
- - See :ref:`Decode Parameters Flags <hevc_decode_params_flags>`
-
-.. _hevc_decode_params_flags:
-
-``Decode Parameters Flags``
-
-.. cssclass:: longtable
-
-.. flat-table::
- :header-rows: 0
- :stub-columns: 0
- :widths: 1 1 2
-
- * - ``V4L2_HEVC_DECODE_PARAM_FLAG_IRAP_PIC``
- - 0x00000001
- -
- * - ``V4L2_HEVC_DECODE_PARAM_FLAG_IDR_PIC``
- - 0x00000002
- -
- * - ``V4L2_HEVC_DECODE_PARAM_FLAG_NO_OUTPUT_OF_PRIOR``
- - 0x00000004
- -
diff --git a/Documentation/userspace-api/media/v4l/pixfmt-compressed.rst b/Documentation/userspace-api/media/v4l/pixfmt-compressed.rst
index c352d91a73d8..506dd3c98884 100644
--- a/Documentation/userspace-api/media/v4l/pixfmt-compressed.rst
+++ b/Documentation/userspace-api/media/v4l/pixfmt-compressed.rst
@@ -212,7 +212,7 @@ Compressed Formats
``V4L2_CID_MPEG_VIDEO_HEVC_SPS``,
``V4L2_CID_MPEG_VIDEO_HEVC_PPS``, and
``V4L2_CID_MPEG_VIDEO_HEVC_SLICE_PARAMS``.
- See the :ref:`associated Codec Control IDs <v4l2-mpeg-hevc>`.
+ See the :ref:`associated Codec Control IDs <v4l2-codec-stateless-hevc>`.
Buffers associated with this pixel format must contain the appropriate
number of macroblocks to decode a full corresponding frame.
* .. _V4L2-PIX-FMT-FWHT:
diff --git a/Documentation/userspace-api/media/v4l/vidioc-g-ext-ctrls.rst b/Documentation/userspace-api/media/v4l/vidioc-g-ext-ctrls.rst
index 29971a45a2d4..892cfeb8b988 100644
--- a/Documentation/userspace-api/media/v4l/vidioc-g-ext-ctrls.rst
+++ b/Documentation/userspace-api/media/v4l/vidioc-g-ext-ctrls.rst
@@ -249,6 +249,26 @@ still cause this situation.
- ``p_hdr10_mastering``
- A pointer to a struct :c:type:`v4l2_ctrl_hdr10_mastering_display`. Valid if this control is
of type ``V4L2_CTRL_TYPE_HDR10_MASTERING_DISPLAY``.
+ * - struct :c:type:`v4l2_ctrl_hevc_sps` *
+ - ``p_hevc_sps``
+ - A pointer to a struct :c:type:`v4l2_ctrl_hevc_sps`. Valid if this
+ control is of type ``V4L2_CTRL_TYPE_HEVC_SPS``.
+ * - struct :c:type:`v4l2_ctrl_hevc_pps` *
+ - ``p_hevc_pps``
+ - A pointer to a struct :c:type:`v4l2_ctrl_hevc_pps`. Valid if this
+ control is of type ``V4L2_CTRL_TYPE_HEVC_PPS``.
+ * - struct :c:type:`v4l2_ctrl_hevc_slice_params` *
+ - ``p_hevc_slice_params``
+ - A pointer to a struct :c:type:`v4l2_ctrl_hevc_slice_params`. Valid if this
+ control is of type ``V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS``.
+ * - struct :c:type:`v4l2_ctrl_hevc_scaling_matrix` *
+ - ``p_hevc_scaling_matrix``
+ - A pointer to a struct :c:type:`v4l2_ctrl_hevc_scaling_matrix`. Valid if this
+ control is of type ``V4L2_CTRL_TYPE_HEVC_SCALING_MATRIX``.
+ * - struct :c:type:`v4l2_ctrl_hevc_decode_params` *
+ - ``p_hevc_decode_params``
+ - A pointer to a struct :c:type:`v4l2_ctrl_hevc_decode_params`. Valid if this
+ control is of type ``V4L2_CTRL_TYPE_HEVC_DECODE_PARAMS``.
* - void *
- ``ptr``
- A pointer to a compound type which can be an N-dimensional array
diff --git a/include/media/hevc-ctrls.h b/include/media/hevc-ctrls.h
deleted file mode 100644
index d0a8032f744a..000000000000
--- a/include/media/hevc-ctrls.h
+++ /dev/null
@@ -1,465 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/*
- * These are the HEVC state controls for use with stateless HEVC
- * codec drivers.
- *
- * It turns out that these structs are not stable yet and will undergo
- * more changes. So keep them private until they are stable and ready to
- * become part of the official public API.
- */
-
-#ifndef _HEVC_CTRLS_H_
-#define _HEVC_CTRLS_H_
-
-#include <linux/videodev2.h>
-
-#define V4L2_CID_STATELESS_HEVC_SPS (V4L2_CID_CODEC_BASE + 1008)
-#define V4L2_CID_STATELESS_HEVC_PPS (V4L2_CID_CODEC_BASE + 1009)
-#define V4L2_CID_STATELESS_HEVC_SLICE_PARAMS (V4L2_CID_CODEC_BASE + 1010)
-#define V4L2_CID_STATELESS_HEVC_SCALING_MATRIX (V4L2_CID_CODEC_BASE + 1011)
-#define V4L2_CID_STATELESS_HEVC_DECODE_PARAMS (V4L2_CID_CODEC_BASE + 1012)
-#define V4L2_CID_STATELESS_HEVC_DECODE_MODE (V4L2_CID_CODEC_BASE + 1015)
-#define V4L2_CID_STATELESS_HEVC_START_CODE (V4L2_CID_CODEC_BASE + 1016)
-#define V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS (V4L2_CID_CODEC_BASE + 1017)
-
-enum v4l2_stateless_hevc_decode_mode {
- V4L2_STATELESS_HEVC_DECODE_MODE_SLICE_BASED,
- V4L2_STATELESS_HEVC_DECODE_MODE_FRAME_BASED,
-};
-
-enum v4l2_stateless_hevc_start_code {
- V4L2_STATELESS_HEVC_START_CODE_NONE,
- V4L2_STATELESS_HEVC_START_CODE_ANNEX_B,
-};
-
-#define V4L2_HEVC_SLICE_TYPE_B 0
-#define V4L2_HEVC_SLICE_TYPE_P 1
-#define V4L2_HEVC_SLICE_TYPE_I 2
-
-#define V4L2_HEVC_SPS_FLAG_SEPARATE_COLOUR_PLANE (1ULL << 0)
-#define V4L2_HEVC_SPS_FLAG_SCALING_LIST_ENABLED (1ULL << 1)
-#define V4L2_HEVC_SPS_FLAG_AMP_ENABLED (1ULL << 2)
-#define V4L2_HEVC_SPS_FLAG_SAMPLE_ADAPTIVE_OFFSET (1ULL << 3)
-#define V4L2_HEVC_SPS_FLAG_PCM_ENABLED (1ULL << 4)
-#define V4L2_HEVC_SPS_FLAG_PCM_LOOP_FILTER_DISABLED (1ULL << 5)
-#define V4L2_HEVC_SPS_FLAG_LONG_TERM_REF_PICS_PRESENT (1ULL << 6)
-#define V4L2_HEVC_SPS_FLAG_SPS_TEMPORAL_MVP_ENABLED (1ULL << 7)
-#define V4L2_HEVC_SPS_FLAG_STRONG_INTRA_SMOOTHING_ENABLED (1ULL << 8)
-
-/**
- * struct v4l2_ctrl_hevc_sps - ITU-T Rec. H.265: Sequence parameter set
- *
- * @video_parameter_set_id: specifies the value of the
- * vps_video_parameter_set_id of the active VPS
- * @seq_parameter_set_id: provides an identifier for the SPS for
- * reference by other syntax elements
- * @pic_width_in_luma_samples: specifies the width of each decoded picture
- * in units of luma samples
- * @pic_height_in_luma_samples: specifies the height of each decoded picture
- * in units of luma samples
- * @bit_depth_luma_minus8: specifies the bit depth of the samples of the
- * luma array
- * @bit_depth_chroma_minus8: specifies the bit depth of the samples of the
- * chroma arrays
- * @log2_max_pic_order_cnt_lsb_minus4: specifies the value of the variable
- * MaxPicOrderCntLsb
- * @sps_max_dec_pic_buffering_minus1: plus 1 specifies the maximum required
- * size of the decoded picture buffer for
- * the CVS
- * @sps_max_num_reorder_pics: indicates the maximum allowed number of pictures
- * @sps_max_latency_increase_plus1: not equal to 0 is used to compute the
- * value of SpsMaxLatencyPictures[i]
- * @log2_min_luma_coding_block_size_minus3: plus 3 specifies the minimum
- * luma coding block size
- * @log2_diff_max_min_luma_coding_block_size: specifies the difference between
- * the maximum and minimum luma
- * coding block size
- * @log2_min_luma_transform_block_size_minus2: plus 2 specifies the minimum luma
- * transform block size
- * @log2_diff_max_min_luma_transform_block_size: specifies the difference between
- * the maximum and minimum luma
- * transform block size
- * @max_transform_hierarchy_depth_inter: specifies the maximum hierarchy
- * depth for transform units of
- * coding units coded in inter
- * prediction mode
- * @max_transform_hierarchy_depth_intra: specifies the maximum hierarchy
- * depth for transform units of
- * coding units coded in intra
- * prediction mode
- * @pcm_sample_bit_depth_luma_minus1: specifies the number of bits used to
- * represent each of PCM sample values of the
- * luma component
- * @pcm_sample_bit_depth_chroma_minus1: specifies the number of bits used to
- * represent each of PCM sample values of
- * the chroma components
- * @log2_min_pcm_luma_coding_block_size_minus3: plus 3 specifies the minimum size
- * of coding blocks
- * @log2_diff_max_min_pcm_luma_coding_block_size: specifies the difference between
- * the maximum and minimum size of
- * coding blocks
- * @num_short_term_ref_pic_sets: specifies the number of st_ref_pic_set()
- * syntax structures included in the SPS
- * @num_long_term_ref_pics_sps: specifies the number of candidate long-term
- * reference pictures that are specified in the SPS
- * @chroma_format_idc: specifies the chroma sampling
- * @sps_max_sub_layers_minus1: plus 1 specifies the maximum number of temporal
- * sub-layers
- * @flags: see V4L2_HEVC_SPS_FLAG_{}
- */
-struct v4l2_ctrl_hevc_sps {
- __u8 video_parameter_set_id;
- __u8 seq_parameter_set_id;
- __u16 pic_width_in_luma_samples;
- __u16 pic_height_in_luma_samples;
- __u8 bit_depth_luma_minus8;
- __u8 bit_depth_chroma_minus8;
- __u8 log2_max_pic_order_cnt_lsb_minus4;
- __u8 sps_max_dec_pic_buffering_minus1;
- __u8 sps_max_num_reorder_pics;
- __u8 sps_max_latency_increase_plus1;
- __u8 log2_min_luma_coding_block_size_minus3;
- __u8 log2_diff_max_min_luma_coding_block_size;
- __u8 log2_min_luma_transform_block_size_minus2;
- __u8 log2_diff_max_min_luma_transform_block_size;
- __u8 max_transform_hierarchy_depth_inter;
- __u8 max_transform_hierarchy_depth_intra;
- __u8 pcm_sample_bit_depth_luma_minus1;
- __u8 pcm_sample_bit_depth_chroma_minus1;
- __u8 log2_min_pcm_luma_coding_block_size_minus3;
- __u8 log2_diff_max_min_pcm_luma_coding_block_size;
- __u8 num_short_term_ref_pic_sets;
- __u8 num_long_term_ref_pics_sps;
- __u8 chroma_format_idc;
- __u8 sps_max_sub_layers_minus1;
-
- __u8 padding[6];
- __u64 flags;
- __u8 reserved[24];
-};
-
-#define V4L2_HEVC_PPS_FLAG_DEPENDENT_SLICE_SEGMENT_ENABLED (1ULL << 0)
-#define V4L2_HEVC_PPS_FLAG_OUTPUT_FLAG_PRESENT (1ULL << 1)
-#define V4L2_HEVC_PPS_FLAG_SIGN_DATA_HIDING_ENABLED (1ULL << 2)
-#define V4L2_HEVC_PPS_FLAG_CABAC_INIT_PRESENT (1ULL << 3)
-#define V4L2_HEVC_PPS_FLAG_CONSTRAINED_INTRA_PRED (1ULL << 4)
-#define V4L2_HEVC_PPS_FLAG_TRANSFORM_SKIP_ENABLED (1ULL << 5)
-#define V4L2_HEVC_PPS_FLAG_CU_QP_DELTA_ENABLED (1ULL << 6)
-#define V4L2_HEVC_PPS_FLAG_PPS_SLICE_CHROMA_QP_OFFSETS_PRESENT (1ULL << 7)
-#define V4L2_HEVC_PPS_FLAG_WEIGHTED_PRED (1ULL << 8)
-#define V4L2_HEVC_PPS_FLAG_WEIGHTED_BIPRED (1ULL << 9)
-#define V4L2_HEVC_PPS_FLAG_TRANSQUANT_BYPASS_ENABLED (1ULL << 10)
-#define V4L2_HEVC_PPS_FLAG_TILES_ENABLED (1ULL << 11)
-#define V4L2_HEVC_PPS_FLAG_ENTROPY_CODING_SYNC_ENABLED (1ULL << 12)
-#define V4L2_HEVC_PPS_FLAG_LOOP_FILTER_ACROSS_TILES_ENABLED (1ULL << 13)
-#define V4L2_HEVC_PPS_FLAG_PPS_LOOP_FILTER_ACROSS_SLICES_ENABLED (1ULL << 14)
-#define V4L2_HEVC_PPS_FLAG_DEBLOCKING_FILTER_OVERRIDE_ENABLED (1ULL << 15)
-#define V4L2_HEVC_PPS_FLAG_PPS_DISABLE_DEBLOCKING_FILTER (1ULL << 16)
-#define V4L2_HEVC_PPS_FLAG_LISTS_MODIFICATION_PRESENT (1ULL << 17)
-#define V4L2_HEVC_PPS_FLAG_SLICE_SEGMENT_HEADER_EXTENSION_PRESENT (1ULL << 18)
-#define V4L2_HEVC_PPS_FLAG_DEBLOCKING_FILTER_CONTROL_PRESENT (1ULL << 19)
-#define V4L2_HEVC_PPS_FLAG_UNIFORM_SPACING (1ULL << 20)
-
-/**
- * struct v4l2_ctrl_hevc_pps - ITU-T Rec. H.265: Picture parameter set
- *
- * @pic_parameter_set_id: identifies the PPS for reference by other
- * syntax elements
- * @num_extra_slice_header_bits: specifies the number of extra slice header
- * bits that are present in the slice header RBSP
- * for coded pictures referring to the PPS.
- * @num_ref_idx_l0_default_active_minus1: specifies the inferred value of
- * num_ref_idx_l0_active_minus1
- * @num_ref_idx_l1_default_active_minus1: specifies the inferred value of
- * num_ref_idx_l1_active_minus1
- * @init_qp_minus26: plus 26 specifies the initial value of SliceQp Y for
- * each slice referring to the PPS
- * @diff_cu_qp_delta_depth: specifies the difference between the luma coding
- * tree block size and the minimum luma coding block
- * size of coding units that convey cu_qp_delta_abs
- * and cu_qp_delta_sign_flag
- * @pps_cb_qp_offset: specify the offsets to the luma quantization parameter Cb
- * @pps_cr_qp_offset: specify the offsets to the luma quantization parameter Cr
- * @num_tile_columns_minus1: plus 1 specifies the number of tile columns
- * partitioning the picture
- * @num_tile_rows_minus1: plus 1 specifies the number of tile rows partitioning
- * the picture
- * @column_width_minus1: plus 1 specifies the width of the i-th tile column in
- * units of coding tree blocks
- * @row_height_minus1: plus 1 specifies the height of the i-th tile row in
- * units of coding tree blocks
- * @pps_beta_offset_div2: specify the default deblocking parameter offsets for
- * beta divided by 2
- * @pps_tc_offset_div2: specify the default deblocking parameter offsets for tC
- * divided by 2
- * @log2_parallel_merge_level_minus2: plus 2 specifies the value of the variable
- * Log2ParMrgLevel
- * @flags: see V4L2_HEVC_PPS_FLAG_{}
- */
-struct v4l2_ctrl_hevc_pps {
- __u8 pic_parameter_set_id;
- __u8 num_extra_slice_header_bits;
- __u8 num_ref_idx_l0_default_active_minus1;
- __u8 num_ref_idx_l1_default_active_minus1;
- __s8 init_qp_minus26;
- __u8 diff_cu_qp_delta_depth;
- __s8 pps_cb_qp_offset;
- __s8 pps_cr_qp_offset;
- __u8 num_tile_columns_minus1;
- __u8 num_tile_rows_minus1;
- __u8 column_width_minus1[20];
- __u8 row_height_minus1[22];
- __s8 pps_beta_offset_div2;
- __s8 pps_tc_offset_div2;
- __u8 log2_parallel_merge_level_minus2;
- __u8 padding[9];
-
- __u64 flags;
- __u8 reserved[56];
-};
-
-#define V4L2_HEVC_DPB_ENTRY_LONG_TERM_REFERENCE 0x01
-
-#define V4L2_HEVC_SEI_PIC_STRUCT_FRAME 0
-#define V4L2_HEVC_SEI_PIC_STRUCT_TOP_FIELD 1
-#define V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_FIELD 2
-#define V4L2_HEVC_SEI_PIC_STRUCT_TOP_BOTTOM 3
-#define V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_TOP 4
-#define V4L2_HEVC_SEI_PIC_STRUCT_TOP_BOTTOM_TOP 5
-#define V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_TOP_BOTTOM 6
-#define V4L2_HEVC_SEI_PIC_STRUCT_FRAME_DOUBLING 7
-#define V4L2_HEVC_SEI_PIC_STRUCT_FRAME_TRIPLING 8
-#define V4L2_HEVC_SEI_PIC_STRUCT_TOP_PAIRED_PREVIOUS_BOTTOM 9
-#define V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_PAIRED_PREVIOUS_TOP 10
-#define V4L2_HEVC_SEI_PIC_STRUCT_TOP_PAIRED_NEXT_BOTTOM 11
-#define V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_PAIRED_NEXT_TOP 12
-
-#define V4L2_HEVC_DPB_ENTRIES_NUM_MAX 16
-
-/**
- * struct v4l2_hevc_dpb_entry - HEVC decoded picture buffer entry
- *
- * @timestamp: timestamp of the V4L2 capture buffer to use as reference.
- * @flags: long term flag for the reference frame
- * @field_pic: whether the reference is a field picture or a frame.
- * @pic_order_cnt_val: the picture order count of the reference.
- */
-struct v4l2_hevc_dpb_entry {
- __u64 timestamp;
- __u8 flags;
- __u8 field_pic;
- __s32 pic_order_cnt_val;
- __u8 padding[2];
-};
-
-/**
- * struct v4l2_hevc_pred_weight_table - HEVC weighted prediction parameters
- *
- * @delta_luma_weight_l0: the difference of the weighting factor applied
- * to the luma prediction value for list 0
- * @luma_offset_l0: the additive offset applied to the luma prediction value
- * for list 0
- * @delta_chroma_weight_l0: the difference of the weighting factor applied
- * to the chroma prediction values for list 0
- * @chroma_offset_l0: the difference of the additive offset applied to
- * the chroma prediction values for list 0
- * @delta_luma_weight_l1: the difference of the weighting factor applied
- * to the luma prediction value for list 1
- * @luma_offset_l1: the additive offset applied to the luma prediction value
- * for list 1
- * @delta_chroma_weight_l1: the difference of the weighting factor applied
- * to the chroma prediction values for list 1
- * @chroma_offset_l1: the difference of the additive offset applied to
- * the chroma prediction values for list 1
- * @luma_log2_weight_denom: the base 2 logarithm of the denominator for
- * all luma weighting factors
- * @delta_chroma_log2_weight_denom: the difference of the base 2 logarithm
- * of the denominator for all chroma
- * weighting factors
- */
-struct v4l2_hevc_pred_weight_table {
- __s8 delta_luma_weight_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
- __s8 luma_offset_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
- __s8 delta_chroma_weight_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2];
- __s8 chroma_offset_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2];
-
- __s8 delta_luma_weight_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
- __s8 luma_offset_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
- __s8 delta_chroma_weight_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2];
- __s8 chroma_offset_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2];
-
- __u8 luma_log2_weight_denom;
- __s8 delta_chroma_log2_weight_denom;
-};
-
-#define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_SAO_LUMA (1ULL << 0)
-#define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_SAO_CHROMA (1ULL << 1)
-#define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_TEMPORAL_MVP_ENABLED (1ULL << 2)
-#define V4L2_HEVC_SLICE_PARAMS_FLAG_MVD_L1_ZERO (1ULL << 3)
-#define V4L2_HEVC_SLICE_PARAMS_FLAG_CABAC_INIT (1ULL << 4)
-#define V4L2_HEVC_SLICE_PARAMS_FLAG_COLLOCATED_FROM_L0 (1ULL << 5)
-#define V4L2_HEVC_SLICE_PARAMS_FLAG_USE_INTEGER_MV (1ULL << 6)
-#define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_DEBLOCKING_FILTER_DISABLED (1ULL << 7)
-#define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_LOOP_FILTER_ACROSS_SLICES_ENABLED (1ULL << 8)
-#define V4L2_HEVC_SLICE_PARAMS_FLAG_DEPENDENT_SLICE_SEGMENT (1ULL << 9)
-
-/**
- * v4l2_ctrl_hevc_slice_params - HEVC slice parameters
- *
- * This control is a dynamically sized 1-dimensional array,
- * V4L2_CTRL_FLAG_DYNAMIC_ARRAY flag must be set when using it.
- *
- * @bit_size: size (in bits) of the current slice data
- * @data_byte_offset: offset (in bytes) to the video data in the current slice data
- * @num_entry_point_offsets: specifies the number of entry point offset syntax
- * elements in the slice header.
- * @nal_unit_type: specifies the coding type of the slice (B, P or I)
- * @nuh_temporal_id_plus1: minus 1 specifies a temporal identifier for the NAL unit
- * @slice_type: see V4L2_HEVC_SLICE_TYPE_{}
- * @colour_plane_id: specifies the colour plane associated with the current slice
- * @slice_pic_order_cnt: specifies the picture order count
- * @num_ref_idx_l0_active_minus1: specifies the maximum reference index for
- * reference picture list 0 that may be used to decode
- * the slice
- * @num_ref_idx_l1_active_minus1: specifies the maximum reference index for
- * reference picture list 1 that may be used to decode
- * the slice
- * @collocated_ref_idx: specifies the reference index of the collocated picture used
- * for temporal motion vector prediction
- * @five_minus_max_num_merge_cand: specifies the maximum number of merging
- * motion vector prediction candidates supported in
- * the slice subtracted from 5
- * @slice_qp_delta: specifies the initial value of QpY to be used for the coding
- * blocks in the slice
- * @slice_cb_qp_offset: specifies a difference to be added to the value of pps_cb_qp_offset
- * @slice_cr_qp_offset: specifies a difference to be added to the value of pps_cr_qp_offset
- * @slice_act_y_qp_offset: screen content extension parameters
- * @slice_act_cb_qp_offset: screen content extension parameters
- * @slice_act_cr_qp_offset: screen content extension parameters
- * @slice_beta_offset_div2: specify the deblocking parameter offsets for beta divided by 2
- * @slice_tc_offset_div2: specify the deblocking parameter offsets for tC divided by 2
- * @pic_struct: indicates whether a picture should be displayed as a frame or as one or
- * more fields
- * @slice_segment_addr: specifies the address of the first coding tree block in
- * the slice segment
- * @ref_idx_l0: the list of L0 reference elements as indices in the DPB
- * @ref_idx_l1: the list of L1 reference elements as indices in the DPB
- * @short_term_ref_pic_set_size: specifies the size of short-term reference
- * pictures included in the SPS
- * @long_term_ref_pic_set_size: specifies the size of long-term reference
- * picture include in the SPS
- * @pred_weight_table: the prediction weight coefficients for inter-picture
- * prediction
- * @flags: see V4L2_HEVC_SLICE_PARAMS_FLAG_{}
- */
-struct v4l2_ctrl_hevc_slice_params {
- __u32 bit_size;
- __u32 data_byte_offset;
- __u32 num_entry_point_offsets;
- /* ISO/IEC 23008-2, ITU-T Rec. H.265: NAL unit header */
- __u8 nal_unit_type;
- __u8 nuh_temporal_id_plus1;
-
- /* ISO/IEC 23008-2, ITU-T Rec. H.265: General slice segment header */
- __u8 slice_type;
- __u8 colour_plane_id;
- __u16 slice_pic_order_cnt;
- __u8 num_ref_idx_l0_active_minus1;
- __u8 num_ref_idx_l1_active_minus1;
- __u8 collocated_ref_idx;
- __u8 five_minus_max_num_merge_cand;
- __s8 slice_qp_delta;
- __s8 slice_cb_qp_offset;
- __s8 slice_cr_qp_offset;
- __s8 slice_act_y_qp_offset;
- __s8 slice_act_cb_qp_offset;
- __s8 slice_act_cr_qp_offset;
- __s8 slice_beta_offset_div2;
- __s8 slice_tc_offset_div2;
-
- /* ISO/IEC 23008-2, ITU-T Rec. H.265: Picture timing SEI message */
- __u8 pic_struct;
-
- __u8 reserved;
- /* ISO/IEC 23008-2, ITU-T Rec. H.265: General slice segment header */
- __u32 slice_segment_addr;
- __u8 ref_idx_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
- __u8 ref_idx_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
- __u16 short_term_ref_pic_set_size;
- __u16 long_term_ref_pic_set_size;
-
- /* ISO/IEC 23008-2, ITU-T Rec. H.265: Weighted prediction parameter */
- struct v4l2_hevc_pred_weight_table pred_weight_table;
-
- __u8 reserved1[6];
- __u64 flags;
- __u8 padding[40];
-};
-
-#define V4L2_HEVC_DECODE_PARAM_FLAG_IRAP_PIC 0x1
-#define V4L2_HEVC_DECODE_PARAM_FLAG_IDR_PIC 0x2
-#define V4L2_HEVC_DECODE_PARAM_FLAG_NO_OUTPUT_OF_PRIOR 0x4
-
-/**
- * struct v4l2_ctrl_hevc_decode_params - HEVC decode parameters
- *
- * @pic_order_cnt_val: picture order count
- * @num_active_dpb_entries: the number of entries in dpb
- * @num_poc_st_curr_before: the number of reference pictures in the short-term
- * set that come before the current frame
- * @num_poc_st_curr_after: the number of reference pictures in the short-term
- * set that come after the current frame
- * @num_poc_lt_curr: the number of reference pictures in the long-term set
- * @poc_st_curr_before: provides the index of the short term before references
- * in DPB array
- * @poc_st_curr_after: provides the index of the short term after references
- * in DPB array
- * @poc_lt_curr: provides the index of the long term references in DPB array
- * @dpb: the decoded picture buffer, for meta-data about reference frames
- * @flags: see V4L2_HEVC_DECODE_PARAM_FLAG_{}
- */
-struct v4l2_ctrl_hevc_decode_params {
- __s32 pic_order_cnt_val;
- __u8 num_active_dpb_entries;
- __u8 num_poc_st_curr_before;
- __u8 num_poc_st_curr_after;
- __u8 num_poc_lt_curr;
- __u8 poc_st_curr_before[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
- __u8 poc_st_curr_after[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
- __u8 poc_lt_curr[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
- struct v4l2_hevc_dpb_entry dpb[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
- __u64 flags;
-};
-
-/**
- * struct v4l2_ctrl_hevc_scaling_matrix - HEVC scaling lists parameters
- *
- * @scaling_list_4x4: scaling list is used for the scaling process for
- * transform coefficients. The values on each scaling
- * list are expected in raster scan order
- * @scaling_list_8x8: scaling list is used for the scaling process for
- * transform coefficients. The values on each scaling
- * list are expected in raster scan order
- * @scaling_list_16x16: scaling list is used for the scaling process for
- * transform coefficients. The values on each scaling
- * list are expected in raster scan order
- * @scaling_list_32x32: scaling list is used for the scaling process for
- * transform coefficients. The values on each scaling
- * list are expected in raster scan order
- * @scaling_list_dc_coef_16x16: scaling list is used for the scaling process
- * for transform coefficients. The values on each
- * scaling list are expected in raster scan order.
- * @scaling_list_dc_coef_32x32: scaling list is used for the scaling process
- * for transform coefficients. The values on each
- * scaling list are expected in raster scan order.
- */
-struct v4l2_ctrl_hevc_scaling_matrix {
- __u8 scaling_list_4x4[6][16];
- __u8 scaling_list_8x8[6][64];
- __u8 scaling_list_16x16[6][64];
- __u8 scaling_list_32x32[2][64];
- __u8 scaling_list_dc_coef_16x16[6];
- __u8 scaling_list_dc_coef_32x32[2];
-};
-
-#endif
diff --git a/include/media/v4l2-ctrls.h b/include/media/v4l2-ctrls.h
index f4105de8a8d2..00828a4f9404 100644
--- a/include/media/v4l2-ctrls.h
+++ b/include/media/v4l2-ctrls.h
@@ -13,12 +13,6 @@
#include <linux/videodev2.h>
#include <media/media-request.h>

-/*
- * Include the stateless codec compound control definitions.
- * This will move to the public headers once this API is fully stable.
- */
-#include <media/hevc-ctrls.h>
-
/* forward references */
struct file;
struct poll_table_struct;
diff --git a/include/uapi/linux/v4l2-controls.h b/include/uapi/linux/v4l2-controls.h
index 17c6df3e9c0b..d3521ae2296b 100644
--- a/include/uapi/linux/v4l2-controls.h
+++ b/include/uapi/linux/v4l2-controls.h
@@ -1997,6 +1997,454 @@ struct v4l2_ctrl_mpeg2_quantisation {
__u8 chroma_non_intra_quantiser_matrix[64];
};

+#define V4L2_CID_STATELESS_HEVC_SPS (V4L2_CID_CODEC_STATELESS_BASE + 400)
+#define V4L2_CID_STATELESS_HEVC_PPS (V4L2_CID_CODEC_STATELESS_BASE + 401)
+#define V4L2_CID_STATELESS_HEVC_SLICE_PARAMS (V4L2_CID_CODEC_STATELESS_BASE + 402)
+#define V4L2_CID_STATELESS_HEVC_SCALING_MATRIX (V4L2_CID_CODEC_STATELESS_BASE + 403)
+#define V4L2_CID_STATELESS_HEVC_DECODE_PARAMS (V4L2_CID_CODEC_STATELESS_BASE + 404)
+#define V4L2_CID_STATELESS_HEVC_DECODE_MODE (V4L2_CID_CODEC_STATELESS_BASE + 405)
+#define V4L2_CID_STATELESS_HEVC_START_CODE (V4L2_CID_CODEC_STATELESS_BASE + 406)
+#define V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS (V4L2_CID_CODEC_STATELESS_BASE + 407)
+
+enum v4l2_stateless_hevc_decode_mode {
+ V4L2_STATELESS_HEVC_DECODE_MODE_SLICE_BASED,
+ V4L2_STATELESS_HEVC_DECODE_MODE_FRAME_BASED,
+};
+
+enum v4l2_stateless_hevc_start_code {
+ V4L2_STATELESS_HEVC_START_CODE_NONE,
+ V4L2_STATELESS_HEVC_START_CODE_ANNEX_B,
+};
+
+#define V4L2_HEVC_SLICE_TYPE_B 0
+#define V4L2_HEVC_SLICE_TYPE_P 1
+#define V4L2_HEVC_SLICE_TYPE_I 2
+
+#define V4L2_HEVC_SPS_FLAG_SEPARATE_COLOUR_PLANE (1ULL << 0)
+#define V4L2_HEVC_SPS_FLAG_SCALING_LIST_ENABLED (1ULL << 1)
+#define V4L2_HEVC_SPS_FLAG_AMP_ENABLED (1ULL << 2)
+#define V4L2_HEVC_SPS_FLAG_SAMPLE_ADAPTIVE_OFFSET (1ULL << 3)
+#define V4L2_HEVC_SPS_FLAG_PCM_ENABLED (1ULL << 4)
+#define V4L2_HEVC_SPS_FLAG_PCM_LOOP_FILTER_DISABLED (1ULL << 5)
+#define V4L2_HEVC_SPS_FLAG_LONG_TERM_REF_PICS_PRESENT (1ULL << 6)
+#define V4L2_HEVC_SPS_FLAG_SPS_TEMPORAL_MVP_ENABLED (1ULL << 7)
+#define V4L2_HEVC_SPS_FLAG_STRONG_INTRA_SMOOTHING_ENABLED (1ULL << 8)
+
+/**
+ * struct v4l2_ctrl_hevc_sps - ITU-T Rec. H.265: Sequence parameter set
+ *
+ * @video_parameter_set_id: specifies the value of the
+ * vps_video_parameter_set_id of the active VPS
+ * @seq_parameter_set_id: provides an identifier for the SPS for
+ * reference by other syntax elements
+ * @pic_width_in_luma_samples: specifies the width of each decoded picture
+ * in units of luma samples
+ * @pic_height_in_luma_samples: specifies the height of each decoded picture
+ * in units of luma samples
+ * @bit_depth_luma_minus8: specifies the bit depth of the samples of the
+ * luma array
+ * @bit_depth_chroma_minus8: specifies the bit depth of the samples of the
+ * chroma arrays
+ * @log2_max_pic_order_cnt_lsb_minus4: specifies the value of the variable
+ * MaxPicOrderCntLsb
+ * @sps_max_dec_pic_buffering_minus1: plus 1 specifies the maximum required
+ * size of the decoded picture buffer for
+ * the CVS
+ * @sps_max_num_reorder_pics: indicates the maximum allowed number of pictures
+ * @sps_max_latency_increase_plus1: not equal to 0 is used to compute the
+ * value of SpsMaxLatencyPictures[i]
+ * @log2_min_luma_coding_block_size_minus3: plus 3 specifies the minimum
+ * luma coding block size
+ * @log2_diff_max_min_luma_coding_block_size: specifies the difference between
+ * the maximum and minimum luma
+ * coding block size
+ * @log2_min_luma_transform_block_size_minus2: plus 2 specifies the minimum luma
+ * transform block size
+ * @log2_diff_max_min_luma_transform_block_size: specifies the difference between
+ * the maximum and minimum luma
+ * transform block size
+ * @max_transform_hierarchy_depth_inter: specifies the maximum hierarchy
+ * depth for transform units of
+ * coding units coded in inter
+ * prediction mode
+ * @max_transform_hierarchy_depth_intra: specifies the maximum hierarchy
+ * depth for transform units of
+ * coding units coded in intra
+ * prediction mode
+ * @pcm_sample_bit_depth_luma_minus1: specifies the number of bits used to
+ * represent each of PCM sample values of the
+ * luma component
+ * @pcm_sample_bit_depth_chroma_minus1: specifies the number of bits used to
+ * represent each of PCM sample values of
+ * the chroma components
+ * @log2_min_pcm_luma_coding_block_size_minus3: plus 3 specifies the minimum size
+ * of coding blocks
+ * @log2_diff_max_min_pcm_luma_coding_block_size: specifies the difference between
+ * the maximum and minimum size of
+ * coding blocks
+ * @num_short_term_ref_pic_sets: specifies the number of st_ref_pic_set()
+ * syntax structures included in the SPS
+ * @num_long_term_ref_pics_sps: specifies the number of candidate long-term
+ * reference pictures that are specified in the SPS
+ * @chroma_format_idc: specifies the chroma sampling
+ * @sps_max_sub_layers_minus1: plus 1 specifies the maximum number of temporal
+ * sub-layers
+ * @flags: see V4L2_HEVC_SPS_FLAG_{}
+ */
+struct v4l2_ctrl_hevc_sps {
+ __u8 video_parameter_set_id;
+ __u8 seq_parameter_set_id;
+ __u16 pic_width_in_luma_samples;
+ __u16 pic_height_in_luma_samples;
+ __u8 bit_depth_luma_minus8;
+ __u8 bit_depth_chroma_minus8;
+ __u8 log2_max_pic_order_cnt_lsb_minus4;
+ __u8 sps_max_dec_pic_buffering_minus1;
+ __u8 sps_max_num_reorder_pics;
+ __u8 sps_max_latency_increase_plus1;
+ __u8 log2_min_luma_coding_block_size_minus3;
+ __u8 log2_diff_max_min_luma_coding_block_size;
+ __u8 log2_min_luma_transform_block_size_minus2;
+ __u8 log2_diff_max_min_luma_transform_block_size;
+ __u8 max_transform_hierarchy_depth_inter;
+ __u8 max_transform_hierarchy_depth_intra;
+ __u8 pcm_sample_bit_depth_luma_minus1;
+ __u8 pcm_sample_bit_depth_chroma_minus1;
+ __u8 log2_min_pcm_luma_coding_block_size_minus3;
+ __u8 log2_diff_max_min_pcm_luma_coding_block_size;
+ __u8 num_short_term_ref_pic_sets;
+ __u8 num_long_term_ref_pics_sps;
+ __u8 chroma_format_idc;
+ __u8 sps_max_sub_layers_minus1;
+
+ __u8 padding[6];
+ __u64 flags;
+ __u8 reserved[24];
+};
+
+#define V4L2_HEVC_PPS_FLAG_DEPENDENT_SLICE_SEGMENT_ENABLED (1ULL << 0)
+#define V4L2_HEVC_PPS_FLAG_OUTPUT_FLAG_PRESENT (1ULL << 1)
+#define V4L2_HEVC_PPS_FLAG_SIGN_DATA_HIDING_ENABLED (1ULL << 2)
+#define V4L2_HEVC_PPS_FLAG_CABAC_INIT_PRESENT (1ULL << 3)
+#define V4L2_HEVC_PPS_FLAG_CONSTRAINED_INTRA_PRED (1ULL << 4)
+#define V4L2_HEVC_PPS_FLAG_TRANSFORM_SKIP_ENABLED (1ULL << 5)
+#define V4L2_HEVC_PPS_FLAG_CU_QP_DELTA_ENABLED (1ULL << 6)
+#define V4L2_HEVC_PPS_FLAG_PPS_SLICE_CHROMA_QP_OFFSETS_PRESENT (1ULL << 7)
+#define V4L2_HEVC_PPS_FLAG_WEIGHTED_PRED (1ULL << 8)
+#define V4L2_HEVC_PPS_FLAG_WEIGHTED_BIPRED (1ULL << 9)
+#define V4L2_HEVC_PPS_FLAG_TRANSQUANT_BYPASS_ENABLED (1ULL << 10)
+#define V4L2_HEVC_PPS_FLAG_TILES_ENABLED (1ULL << 11)
+#define V4L2_HEVC_PPS_FLAG_ENTROPY_CODING_SYNC_ENABLED (1ULL << 12)
+#define V4L2_HEVC_PPS_FLAG_LOOP_FILTER_ACROSS_TILES_ENABLED (1ULL << 13)
+#define V4L2_HEVC_PPS_FLAG_PPS_LOOP_FILTER_ACROSS_SLICES_ENABLED (1ULL << 14)
+#define V4L2_HEVC_PPS_FLAG_DEBLOCKING_FILTER_OVERRIDE_ENABLED (1ULL << 15)
+#define V4L2_HEVC_PPS_FLAG_PPS_DISABLE_DEBLOCKING_FILTER (1ULL << 16)
+#define V4L2_HEVC_PPS_FLAG_LISTS_MODIFICATION_PRESENT (1ULL << 17)
+#define V4L2_HEVC_PPS_FLAG_SLICE_SEGMENT_HEADER_EXTENSION_PRESENT (1ULL << 18)
+#define V4L2_HEVC_PPS_FLAG_DEBLOCKING_FILTER_CONTROL_PRESENT (1ULL << 19)
+#define V4L2_HEVC_PPS_FLAG_UNIFORM_SPACING (1ULL << 20)
+
+/**
+ * struct v4l2_ctrl_hevc_pps - ITU-T Rec. H.265: Picture parameter set
+ *
+ * @pic_parameter_set_id: identifies the PPS for reference by other
+ * syntax elements
+ * @num_extra_slice_header_bits: specifies the number of extra slice header
+ * bits that are present in the slice header RBSP
+ * for coded pictures referring to the PPS.
+ * @num_ref_idx_l0_default_active_minus1: specifies the inferred value of
+ * num_ref_idx_l0_active_minus1
+ * @num_ref_idx_l1_default_active_minus1: specifies the inferred value of
+ * num_ref_idx_l1_active_minus1
+ * @init_qp_minus26: plus 26 specifies the initial value of SliceQp Y for
+ * each slice referring to the PPS
+ * @diff_cu_qp_delta_depth: specifies the difference between the luma coding
+ * tree block size and the minimum luma coding block
+ * size of coding units that convey cu_qp_delta_abs
+ * and cu_qp_delta_sign_flag
+ * @pps_cb_qp_offset: specify the offsets to the luma quantization parameter Cb
+ * @pps_cr_qp_offset: specify the offsets to the luma quantization parameter Cr
+ * @num_tile_columns_minus1: plus 1 specifies the number of tile columns
+ * partitioning the picture
+ * @num_tile_rows_minus1: plus 1 specifies the number of tile rows partitioning
+ * the picture
+ * @column_width_minus1: plus 1 specifies the width of the i-th tile column in
+ * units of coding tree blocks
+ * @row_height_minus1: plus 1 specifies the height of the i-th tile row in
+ * units of coding tree blocks
+ * @pps_beta_offset_div2: specify the default deblocking parameter offsets for
+ * beta divided by 2
+ * @pps_tc_offset_div2: specify the default deblocking parameter offsets for tC
+ * divided by 2
+ * @log2_parallel_merge_level_minus2: plus 2 specifies the value of the variable
+ * Log2ParMrgLevel
+ * @flags: see V4L2_HEVC_PPS_FLAG_{}
+ */
+struct v4l2_ctrl_hevc_pps {
+ __u8 pic_parameter_set_id;
+ __u8 num_extra_slice_header_bits;
+ __u8 num_ref_idx_l0_default_active_minus1;
+ __u8 num_ref_idx_l1_default_active_minus1;
+ __s8 init_qp_minus26;
+ __u8 diff_cu_qp_delta_depth;
+ __s8 pps_cb_qp_offset;
+ __s8 pps_cr_qp_offset;
+ __u8 num_tile_columns_minus1;
+ __u8 num_tile_rows_minus1;
+ __u8 column_width_minus1[20];
+ __u8 row_height_minus1[22];
+ __s8 pps_beta_offset_div2;
+ __s8 pps_tc_offset_div2;
+ __u8 log2_parallel_merge_level_minus2;
+ __u8 padding[9];
+
+ __u64 flags;
+ __u8 reserved[56];
+};
+
+#define V4L2_HEVC_DPB_ENTRY_LONG_TERM_REFERENCE 0x01
+
+#define V4L2_HEVC_SEI_PIC_STRUCT_FRAME 0
+#define V4L2_HEVC_SEI_PIC_STRUCT_TOP_FIELD 1
+#define V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_FIELD 2
+#define V4L2_HEVC_SEI_PIC_STRUCT_TOP_BOTTOM 3
+#define V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_TOP 4
+#define V4L2_HEVC_SEI_PIC_STRUCT_TOP_BOTTOM_TOP 5
+#define V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_TOP_BOTTOM 6
+#define V4L2_HEVC_SEI_PIC_STRUCT_FRAME_DOUBLING 7
+#define V4L2_HEVC_SEI_PIC_STRUCT_FRAME_TRIPLING 8
+#define V4L2_HEVC_SEI_PIC_STRUCT_TOP_PAIRED_PREVIOUS_BOTTOM 9
+#define V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_PAIRED_PREVIOUS_TOP 10
+#define V4L2_HEVC_SEI_PIC_STRUCT_TOP_PAIRED_NEXT_BOTTOM 11
+#define V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_PAIRED_NEXT_TOP 12
+
+#define V4L2_HEVC_DPB_ENTRIES_NUM_MAX 16
+
+/**
+ * struct v4l2_hevc_dpb_entry - HEVC decoded picture buffer entry
+ *
+ * @timestamp: timestamp of the V4L2 capture buffer to use as reference.
+ * @flags: long term flag for the reference frame
+ * @field_pic: whether the reference is a field picture or a frame.
+ * @pic_order_cnt_val: the picture order count of the current picture.
+ */
+struct v4l2_hevc_dpb_entry {
+ __u64 timestamp;
+ __u8 flags;
+ __u8 field_pic;
+ __s32 pic_order_cnt_val;
+ __u8 padding[2];
+};
+
+/**
+ * struct v4l2_hevc_pred_weight_table - HEVC weighted prediction parameters
+ *
+ * @delta_luma_weight_l0: the difference of the weighting factor applied
+ * to the luma prediction value for list 0
+ * @luma_offset_l0: the additive offset applied to the luma prediction value
+ * for list 0
+ * @delta_chroma_weight_l0: the difference of the weighting factor applied
+ * to the chroma prediction values for list 0
+ * @chroma_offset_l0: the difference of the additive offset applied to
+ * the chroma prediction values for list 0
+ * @delta_luma_weight_l1: the difference of the weighting factor applied
+ * to the luma prediction value for list 1
+ * @luma_offset_l1: the additive offset applied to the luma prediction value
+ * for list 1
+ * @delta_chroma_weight_l1: the difference of the weighting factor applied
+ * to the chroma prediction values for list 1
+ * @chroma_offset_l1: the difference of the additive offset applied to
+ * the chroma prediction values for list 1
+ * @luma_log2_weight_denom: the base 2 logarithm of the denominator for
+ * all luma weighting factors
+ * @delta_chroma_log2_weight_denom: the difference of the base 2 logarithm
+ * of the denominator for all chroma
+ * weighting factors
+ */
+struct v4l2_hevc_pred_weight_table {
+ __s8 delta_luma_weight_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
+ __s8 luma_offset_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
+ __s8 delta_chroma_weight_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2];
+ __s8 chroma_offset_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2];
+
+ __s8 delta_luma_weight_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
+ __s8 luma_offset_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
+ __s8 delta_chroma_weight_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2];
+ __s8 chroma_offset_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2];
+
+ __u8 luma_log2_weight_denom;
+ __s8 delta_chroma_log2_weight_denom;
+};
+
+#define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_SAO_LUMA (1ULL << 0)
+#define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_SAO_CHROMA (1ULL << 1)
+#define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_TEMPORAL_MVP_ENABLED (1ULL << 2)
+#define V4L2_HEVC_SLICE_PARAMS_FLAG_MVD_L1_ZERO (1ULL << 3)
+#define V4L2_HEVC_SLICE_PARAMS_FLAG_CABAC_INIT (1ULL << 4)
+#define V4L2_HEVC_SLICE_PARAMS_FLAG_COLLOCATED_FROM_L0 (1ULL << 5)
+#define V4L2_HEVC_SLICE_PARAMS_FLAG_USE_INTEGER_MV (1ULL << 6)
+#define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_DEBLOCKING_FILTER_DISABLED (1ULL << 7)
+#define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_LOOP_FILTER_ACROSS_SLICES_ENABLED (1ULL << 8)
+#define V4L2_HEVC_SLICE_PARAMS_FLAG_DEPENDENT_SLICE_SEGMENT (1ULL << 9)
+
+/**
+ * v4l2_ctrl_hevc_slice_params - HEVC slice parameters
+ *
+ * This control is a dynamically sized 1-dimensional array,
+ * V4L2_CTRL_FLAG_DYNAMIC_ARRAY flag must be set when using it.
+ *
+ * @bit_size: size (in bits) of the current slice data
+ * @data_byte_offset: offset (in bytes) to the video data in the current slice data
+ * @num_entry_point_offsets: specifies the number of entry point offset syntax
+ * elements in the slice header.
+ * @nal_unit_type: specifies the coding type of the slice (B, P or I)
+ * @nuh_temporal_id_plus1: minus 1 specifies a temporal identifier for the NAL unit
+ * @slice_type: see V4L2_HEVC_SLICE_TYPE_{}
+ * @colour_plane_id: specifies the colour plane associated with the current slice
+ * @slice_pic_order_cnt: specifies the picture order count
+ * @num_ref_idx_l0_active_minus1: specifies the maximum reference index for reference
+ * picture list 0 that may be used to decode the slice
+ * @num_ref_idx_l1_active_minus1: specifies the maximum reference index for reference
+ * picture list 1 that may be used to decode the slice
+ * @collocated_ref_idx: specifies the reference index of the collocated picture used
+ * for temporal motion vector prediction
+ * @five_minus_max_num_merge_cand: specifies the maximum number of merging
+ * motion vector prediction candidates supported in
+ * the slice subtracted from 5
+ * @slice_qp_delta: specifies the initial value of QpY to be used for the coding
+ * blocks in the slice
+ * @slice_cb_qp_offset: specifies a difference to be added to the value of pps_cb_qp_offset
+ * @slice_cr_qp_offset: specifies a difference to be added to the value of pps_cr_qp_offset
+ * @slice_act_y_qp_offset: screen content extension parameters
+ * @slice_act_cb_qp_offset: screen content extension parameters
+ * @slice_act_cr_qp_offset: screen content extension parameters
+ * @slice_beta_offset_div2: specify the deblocking parameter offsets for beta divided by 2
+ * @slice_tc_offset_div2: specify the deblocking parameter offsets for tC divided by 2
+ * @pic_struct: indicates whether a picture should be displayed as a frame or as one or
+ * more fields
+ * @slice_segment_addr: specifies the address of the first coding tree block in
+ * the slice segment
+ * @ref_idx_l0: the list of L0 reference elements as indices in the DPB
+ * @ref_idx_l1: the list of L1 reference elements as indices in the DPB
+ * @short_term_ref_pic_set_size: specifies the size of short-term reference
+ * pictures set included in the SPS
+ * @long_term_ref_pic_set_size: specifies the size of long-term reference
+ * pictures set include in the SPS
+ * @pred_weight_table: the prediction weight coefficients for inter-picture
+ * prediction
+ * @flags: see V4L2_HEVC_SLICE_PARAMS_FLAG_{}
+ */
+struct v4l2_ctrl_hevc_slice_params {
+ __u32 bit_size;
+ __u32 data_byte_offset;
+ __u32 num_entry_point_offsets;
+
+ /* ISO/IEC 23008-2, ITU-T Rec. H.265: NAL unit header */
+ __u8 nal_unit_type;
+ __u8 nuh_temporal_id_plus1;
+
+ /* ISO/IEC 23008-2, ITU-T Rec. H.265: General slice segment header */
+ __u8 slice_type;
+ __u8 colour_plane_id;
+ __u16 slice_pic_order_cnt;
+ __u8 num_ref_idx_l0_active_minus1;
+ __u8 num_ref_idx_l1_active_minus1;
+ __u8 collocated_ref_idx;
+ __u8 five_minus_max_num_merge_cand;
+ __s8 slice_qp_delta;
+ __s8 slice_cb_qp_offset;
+ __s8 slice_cr_qp_offset;
+ __s8 slice_act_y_qp_offset;
+ __s8 slice_act_cb_qp_offset;
+ __s8 slice_act_cr_qp_offset;
+ __s8 slice_beta_offset_div2;
+ __s8 slice_tc_offset_div2;
+
+ /* ISO/IEC 23008-2, ITU-T Rec. H.265: Picture timing SEI message */
+ __u8 pic_struct;
+
+ __u8 reserved;
+ /* ISO/IEC 23008-2, ITU-T Rec. H.265: General slice segment header */
+ __u32 slice_segment_addr;
+ __u8 ref_idx_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
+ __u8 ref_idx_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
+ __u16 short_term_ref_pic_set_size;
+ __u16 long_term_ref_pic_set_size;
+
+ /* ISO/IEC 23008-2, ITU-T Rec. H.265: Weighted prediction parameter */
+ struct v4l2_hevc_pred_weight_table pred_weight_table;
+
+ __u8 reserved1[6];
+ __u64 flags;
+ __u8 padding[40];
+};
+
+#define V4L2_HEVC_DECODE_PARAM_FLAG_IRAP_PIC 0x1
+#define V4L2_HEVC_DECODE_PARAM_FLAG_IDR_PIC 0x2
+#define V4L2_HEVC_DECODE_PARAM_FLAG_NO_OUTPUT_OF_PRIOR 0x4
+
+/**
+ * struct v4l2_ctrl_hevc_decode_params - HEVC decode parameters
+ *
+ * @pic_order_cnt_val: picture order count
+ * @num_active_dpb_entries: the number of entries in dpb
+ * @num_poc_st_curr_before: the number of reference pictures in the short-term
+ * set that come before the current frame
+ * @num_poc_st_curr_after: the number of reference pictures in the short-term
+ * set that come after the current frame
+ * @num_poc_lt_curr: the number of reference pictures in the long-term set
+ * @poc_st_curr_before: provides the index of the short term before references
+ * in DPB array
+ * @poc_st_curr_after: provides the index of the short term after references
+ * in DPB array
+ * @poc_lt_curr: provides the index of the long term references in DPB array
+ * @dpb: the decoded picture buffer, for meta-data about reference frames
+ * @flags: see V4L2_HEVC_DECODE_PARAM_FLAG_{}
+ */
+struct v4l2_ctrl_hevc_decode_params {
+ __s32 pic_order_cnt_val;
+ __u8 num_active_dpb_entries;
+ __u8 num_poc_st_curr_before;
+ __u8 num_poc_st_curr_after;
+ __u8 num_poc_lt_curr;
+ __u8 poc_st_curr_before[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
+ __u8 poc_st_curr_after[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
+ __u8 poc_lt_curr[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
+ struct v4l2_hevc_dpb_entry dpb[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
+ __u64 flags;
+};
+
+/**
+ * struct v4l2_ctrl_hevc_scaling_matrix - HEVC scaling lists parameters
+ *
+ * @scaling_list_4x4: scaling list is used for the scaling process for
+ * transform coefficients. The values on each scaling
+ * list are expected in raster scan order
+ * @scaling_list_8x8: scaling list is used for the scaling process for
+ * transform coefficients. The values on each scaling
+ * list are expected in raster scan order
+ * @scaling_list_16x16: scaling list is used for the scaling process for
+ * transform coefficients. The values on each scaling
+ * list are expected in raster scan order
+ * @scaling_list_32x32: scaling list is used for the scaling process for
+ * transform coefficients. The values on each scaling
+ * list are expected in raster scan order
+ * @scaling_list_dc_coef_16x16: scaling list is used for the scaling process
+ * for transform coefficients. The values on each
+ * scaling list are expected in raster scan order.
+ * @scaling_list_dc_coef_32x32: scaling list is used for the scaling process
+ * for transform coefficients. The values on each
+ * scaling list are expected in raster scan order.
+ */
+struct v4l2_ctrl_hevc_scaling_matrix {
+ __u8 scaling_list_4x4[6][16];
+ __u8 scaling_list_8x8[6][64];
+ __u8 scaling_list_16x16[6][64];
+ __u8 scaling_list_32x32[2][64];
+ __u8 scaling_list_dc_coef_16x16[6];
+ __u8 scaling_list_dc_coef_32x32[2];
+};
+
#define V4L2_CID_COLORIMETRY_CLASS_BASE (V4L2_CTRL_CLASS_COLORIMETRY | 0x900)
#define V4L2_CID_COLORIMETRY_CLASS (V4L2_CTRL_CLASS_COLORIMETRY | 1)

diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
index 939775b145af..4c09969e7112 100644
--- a/include/uapi/linux/videodev2.h
+++ b/include/uapi/linux/videodev2.h
@@ -1765,6 +1765,11 @@ struct v4l2_ext_control {
struct v4l2_ctrl_mpeg2_quantisation __user *p_mpeg2_quantisation;
struct v4l2_ctrl_vp9_compressed_hdr __user *p_vp9_compressed_hdr_probs;
struct v4l2_ctrl_vp9_frame __user *p_vp9_frame;
+ struct v4l2_ctrl_hevc_sps __user *p_hevc_sps;
+ struct v4l2_ctrl_hevc_pps __user *p_hevc_pps;
+ struct v4l2_ctrl_hevc_slice_params __user *p_hevc_slice_params;
+ struct v4l2_ctrl_hevc_scaling_matrix __user *p_hevc_scaling_matrix;
+ struct v4l2_ctrl_hevc_decode_params __user *p_hevc_decode_params;
void __user *ptr;
};
} __attribute__ ((packed));
--
2.25.1

2022-04-14 14:56:56

by Benjamin Gaignard

[permalink] [raw]
Subject: Re: [PATCH v5 09/17] media: uapi: HEVC: Define V4L2_CID_STATELESS_HEVC_SLICE_PARAMS as a dynamic array


Le 08/04/2022 à 20:53, Nicolas Dufresne a écrit :
> Le jeudi 07 avril 2022 à 17:29 +0200, Benjamin Gaignard a écrit :
>> Make explicit that V4L2_CID_STATELESS_HEVC_SLICE_PARAMS control is
>> a dynamic array control type.
>> Some drivers may be able to receive multiple slices in one control
>> to improve decoding performance.
>>
>> Signed-off-by: Benjamin Gaignard <[email protected]>
>> ---
>> Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst | 2 ++
>> include/media/hevc-ctrls.h | 3 +++
>> 2 files changed, 5 insertions(+)
>>
>> diff --git a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
>> index 7fcc6c2bac4c..1aaf3b84b584 100644
>> --- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
>> +++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
>> @@ -2964,6 +2964,8 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
>> These bitstream parameters are defined according to :ref:`hevc`.
>> They are described in section 7.4.7 "General slice segment header
>> semantics" of the specification.
>> + This control is a dynamically sized 1-dimensional array,
>> + V4L2_CTRL_FLAG_DYNAMIC_ARRAY flag must be set when using it.
>>
>> .. c:type:: v4l2_ctrl_hevc_slice_params
>>
>> diff --git a/include/media/hevc-ctrls.h b/include/media/hevc-ctrls.h
>> index 96a9b71d1def..28049e1a8a07 100644
>> --- a/include/media/hevc-ctrls.h
>> +++ b/include/media/hevc-ctrls.h
>> @@ -314,6 +314,9 @@ struct v4l2_hevc_pred_weight_table {
>> /**
>> * v4l2_ctrl_hevc_slice_params - HEVC slice parameters
>> *
>> + * This control is a dynamically sized 1-dimensional array,
>> + * V4L2_CTRL_FLAG_DYNAMIC_ARRAY flag must be set when using it.
>> + *
> I'm not sure about this comment, but I'm sure you forgot:
>
>
> --- a/drivers/media/v4l2-core/v4l2-ctrls-defs.c
> +++ b/drivers/media/v4l2-core/v4l2-ctrls-defs.c
> @@ -1505,6 +1505,7 @@ void v4l2_ctrl_fill(u32 id, const char **name, enum
> v4l2_ctrl_type *type,
> break;
> case V4L2_CID_STATELESS_HEVC_SLICE_PARAMS:
> *type = V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS;
> + *flags |= V4L2_CTRL_FLAG_DYNAMIC_ARRAY;
> break;
> case V4L2_CID_STATELESS_HEVC_SCALING_MATRIX:
> *type = V4L2_CTRL_TYPE_HEVC_SCALING_MATRIX;
>
> Also, in AV1 we have V4L2_AV1_MAX_TILE_COUNT, which can be used in cfg.dims,
> something the driver will actually set. We could have
>
> #define V4L2_HEVC_MAX_TILE_COUNT 600
>
> And drives can set:
>
> .dims = { V4L2_HEVC_MAX_TILE_COUNT },
>
> In the control config.

Ok that will be in v6

>
>> * @bit_size: size (in bits) of the current slice data
>> * @data_bit_offset: offset (in bits) to the video data in the current slice data
>> * @nal_unit_type: specifies the coding type of the slice (B, P or I)

2022-04-15 17:02:45

by Benjamin Gaignard

[permalink] [raw]
Subject: Re: [PATCH v5 17/17] media: uapi: move HEVC stateless controls out (FIXUP) of staging


Le 08/04/2022 à 15:48, Sebastian Fricke a écrit :
> ---
> FIXUP of the original patch to properly apply to the tree for testing.
> ---

Hello Sebastian,

I have done this patch on top of v5.18-rc1 tag and I don't notice any issue.
Anyway I will (re)check it before sending the next version (v6) of this series.

Regards,
Benjamin

> HEVC uAPI is used by 2 mainline drivers (Hantro, Cedrus)
> and at least 2 out-of-tree drivers (rkvdec, RPi).
> The uAPI has reviewed so it is time to make it 'public' by
> un-staging it.
>
> Signed-off-by: Benjamin Gaignard <[email protected]>
> ---
>  .../media/v4l/ext-ctrls-codec-stateless.rst   | 882 +++++++++++++++++
>  .../media/v4l/ext-ctrls-codec.rst             | 888 ------------------
>  .../media/v4l/pixfmt-compressed.rst           |   2 +-
>  .../media/v4l/vidioc-g-ext-ctrls.rst          |  20 +
>  include/media/hevc-ctrls.h                    | 465 ---------
>  include/media/v4l2-ctrls.h                    |   6 -
>  include/uapi/linux/v4l2-controls.h            | 448 +++++++++
>  include/uapi/linux/videodev2.h                |   5 +
>  8 files changed, 1356 insertions(+), 1360 deletions(-)
>  delete mode 100644 include/media/hevc-ctrls.h
>
> diff --git
> a/Documentation/userspace-api/media/v4l/ext-ctrls-codec-stateless.rst
> b/Documentation/userspace-api/media/v4l/ext-ctrls-codec-stateless.rst
> index 6541e4c32b26..31560af6a797 100644
> --- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec-stateless.rst
> +++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec-stateless.rst
> @@ -2042,3 +2042,885 @@ This structure contains all loop filter
> related parameters. See sections
>        - 0x2
>        - When set, the bitstream contains additional syntax elements that
>          specify which mode and reference frame deltas are to be updated.
> +
> +.. _v4l2-codec-stateless-hevc:
> +
> +``V4L2_CID_STATELESS_HEVC_SPS (struct)``
> +    Specifies the Sequence Parameter Set fields (as extracted from the
> +    bitstream) for the associated HEVC slice data.
> +    These bitstream parameters are defined according to :ref:`hevc`.
> +    They are described in section 7.4.3.2 "Sequence parameter set RBSP
> +    semantics" of the specification.
> +
> +.. c:type:: v4l2_ctrl_hevc_sps
> +
> +.. raw:: latex
> +
> +    \small
> +
> +.. tabularcolumns:: |p{1.2cm}|p{9.2cm}|p{6.9cm}|
> +
> +.. cssclass:: longtable
> +
> +.. flat-table:: struct v4l2_ctrl_hevc_sps
> +    :header-rows:  0
> +    :stub-columns: 0
> +    :widths:       1 1 2
> +
> +    * - __u8
> +      - ``video_parameter_set_id``
> +      - Specifies the value of the vps_video_parameter_set_id of the
> active VPS
> +        as descibed in section "7.4.3.2.1 General sequence parameter
> set RBSP semantics"
> +        of H.265 specifications.
> +    * - __u8
> +      - ``seq_parameter_set_id``
> +      - Provides an identifier for the SPS for reference by other
> syntax elements
> +        as descibed in section "7.4.3.2.1 General sequence parameter
> set RBSP semantics"
> +        of H.265 specifications.
> +    * - __u16
> +      - ``pic_width_in_luma_samples``
> +      - Specifies the width of each decoded picture in units of luma
> samples.
> +    * - __u16
> +      - ``pic_height_in_luma_samples``
> +      - Specifies the height of each decoded picture in units of luma
> samples.
> +    * - __u8
> +      - ``bit_depth_luma_minus8``
> +      - Specifies the bit depth of the samples of the luma array.
> +    * - __u8
> +      - ``bit_depth_chroma_minus8``
> +      - Specifies the bit depth of the samples of the chroma arrays.
> +    * - __u8
> +      - ``log2_max_pic_order_cnt_lsb_minus4``
> +      - Specifies the value of the variable MaxPicOrderCntLsb.
> +    * - __u8
> +      - ``sps_max_dec_pic_buffering_minus1``
> +      - Plus 1 specifies the maximum required size of the decoded
> picture buffer for
> +        the CVS
> +    * - __u8
> +      - ``sps_max_num_reorder_pics``
> +      - Indicates the maximum allowed number of pictures.
> +    * - __u8
> +      - ``sps_max_latency_increase_plus1``
> +      - Not equal to 0 is used to compute the value of
> SpsMaxLatencyPictures[i].
> +    * - __u8
> +      - ``log2_min_luma_coding_block_size_minus3``
> +      - Plus 3 specifies the minimum luma coding block size.
> +    * - __u8
> +      - ``log2_diff_max_min_luma_coding_block_size``
> +      - Specifies the difference between the maximum and minimum luma
> coding block size.
> +    * - __u8
> +      - ``log2_min_luma_transform_block_size_minus2``
> +      - Plus 2 specifies the minimum luma transform block size.
> +    * - __u8
> +      - ``log2_diff_max_min_luma_transform_block_size``
> +      - Specifies the difference between the maximum and minimum luma
> transform block size.
> +    * - __u8
> +      - ``max_transform_hierarchy_depth_inter``
> +      - Specifies the maximum hierarchy depth for transform units of
> coding units coded
> +        in inter prediction mode.
> +    * - __u8
> +      - ``max_transform_hierarchy_depth_intra``
> +      - Specifies the maximum hierarchy depth for transform units of
> coding units coded in
> +        intra prediction mode.
> +    * - __u8
> +      - ``pcm_sample_bit_depth_luma_minus1``
> +      - Specifies the number of bits used to represent each of PCM
> sample values of the
> +        luma component.
> +    * - __u8
> +      - ``pcm_sample_bit_depth_chroma_minus1``
> +      - Specifies the number of bits used to represent each of PCM
> sample values of
> +        the chroma components.
> +    * - __u8
> +      - ``log2_min_pcm_luma_coding_block_size_minus3``
> +      - Plus 3 specifies the minimum size of coding blocks.
> +    * - __u8
> +      - ``log2_diff_max_min_pcm_luma_coding_block_size``
> +      - Specifies the difference between the maximum and minimum size
> of coding blocks.
> +    * - __u8
> +      - ``num_short_term_ref_pic_sets``
> +      - Specifies the number of st_ref_pic_set() syntax structures
> included in the SPS.
> +    * - __u8
> +      - ``num_long_term_ref_pics_sps``
> +      - Specifies the number of candidate long-term reference
> pictures that are
> +        specified in the SPS.
> +    * - __u8
> +      - ``chroma_format_idc``
> +      - Specifies the chroma sampling.
> +    * - __u8
> +      - ``sps_max_sub_layers_minus1``
> +      - plus 1 specifies the maximum number of temporal sub-layers.
> +    * - __u64
> +      - ``flags``
> +      - See :ref:`Sequence Parameter Set Flags <hevc_sps_flags>`
> +
> +.. raw:: latex
> +
> +    \normalsize
> +
> +.. _hevc_sps_flags:
> +
> +``Sequence Parameter Set Flags``
> +
> +.. raw:: latex
> +
> +    \small
> +
> +.. cssclass:: longtable
> +
> +.. flat-table::
> +    :header-rows:  0
> +    :stub-columns: 0
> +    :widths:       1 1 2
> +
> +    * - ``V4L2_HEVC_SPS_FLAG_SEPARATE_COLOUR_PLANE``
> +      - 0x00000001
> +      -
> +    * - ``V4L2_HEVC_SPS_FLAG_SCALING_LIST_ENABLED``
> +      - 0x00000002
> +      -
> +    * - ``V4L2_HEVC_SPS_FLAG_AMP_ENABLED``
> +      - 0x00000004
> +      -
> +    * - ``V4L2_HEVC_SPS_FLAG_SAMPLE_ADAPTIVE_OFFSET``
> +      - 0x00000008
> +      -
> +    * - ``V4L2_HEVC_SPS_FLAG_PCM_ENABLED``
> +      - 0x00000010
> +      -
> +    * - ``V4L2_HEVC_SPS_FLAG_PCM_LOOP_FILTER_DISABLED``
> +      - 0x00000020
> +      -
> +    * - ``V4L2_HEVC_SPS_FLAG_LONG_TERM_REF_PICS_PRESENT``
> +      - 0x00000040
> +      -
> +    * - ``V4L2_HEVC_SPS_FLAG_SPS_TEMPORAL_MVP_ENABLED``
> +      - 0x00000080
> +      -
> +    * - ``V4L2_HEVC_SPS_FLAG_STRONG_INTRA_SMOOTHING_ENABLED``
> +      - 0x00000100
> +      -
> +
> +.. raw:: latex
> +
> +    \normalsize
> +
> +``V4L2_CID_STATELESS_HEVC_PPS (struct)``
> +    Specifies the Picture Parameter Set fields (as extracted from the
> +    bitstream) for the associated HEVC slice data.
> +    These bitstream parameters are defined according to :ref:`hevc`.
> +    They are described in section 7.4.3.3 "Picture parameter set RBSP
> +    semantics" of the specification.
> +
> +.. c:type:: v4l2_ctrl_hevc_pps
> +
> +.. tabularcolumns:: |p{1.2cm}|p{8.6cm}|p{7.5cm}|
> +
> +.. cssclass:: longtable
> +
> +.. flat-table:: struct v4l2_ctrl_hevc_pps
> +    :header-rows:  0
> +    :stub-columns: 0
> +    :widths:       1 1 2
> +
> +    * - __u8
> +      - ``pic_parameter_set_id``
> +      - Identifies the PPS for reference by other syntax elements.
> +    * - __u8
> +      - ``num_extra_slice_header_bits``
> +      - Specifies the number of extra slice header bits that are present
> +        in the slice header RBSP for coded pictures referring to the
> PPS.
> +    * - __u8
> +      - ``num_ref_idx_l0_default_active_minus1``
> +      - Specifies the inferred value of num_ref_idx_l0_active_minus1
> +    * - __u8
> +      - ``num_ref_idx_l1_default_active_minus1``
> +      - Specifies the inferred value of num_ref_idx_l1_active_minus1
> +    * - __s8
> +      - ``init_qp_minus26``
> +      - Plus 26 specifies the initial value of SliceQp Y for each slice
> +        referring to the PPS.
> +    * - __u8
> +      - ``diff_cu_qp_delta_depth``
> +      - Specifies the difference between the luma coding tree block size
> +        and the minimum luma coding block size of coding units that
> +        convey cu_qp_delta_abs and cu_qp_delta_sign_flag.
> +    * - __s8
> +      - ``pps_cb_qp_offset``
> +      - Specify the offsets to the luma quantization parameter Cb.
> +    * - __s8
> +      - ``pps_cr_qp_offset``
> +      - Specify the offsets to the luma quantization parameter Cr.
> +    * - __u8
> +      - ``num_tile_columns_minus1``
> +      - Plus 1 specifies the number of tile columns partitioning the
> picture.
> +    * - __u8
> +      - ``num_tile_rows_minus1``
> +      - Plus 1 specifies the number of tile rows partitioning the
> picture.
> +    * - __u8
> +      - ``column_width_minus1[20]``
> +      - Plus 1 specifies the width of the i-th tile column in units of
> +        coding tree blocks.
> +    * - __u8
> +      - ``row_height_minus1[22]``
> +      - Plus 1 specifies the height of the i-th tile row in units of
> coding
> +        tree blocks.
> +    * - __s8
> +      - ``pps_beta_offset_div2``
> +      - Specify the default deblocking parameter offsets for beta
> divided by 2.
> +    * - __s8
> +      - ``pps_tc_offset_div2``
> +      - Specify the default deblocking parameter offsets for tC
> divided by 2.
> +    * - __u8
> +      - ``log2_parallel_merge_level_minus2``
> +      - Plus 2 specifies the value of the variable Log2ParMrgLevel.
> +    * - __u8
> +      - ``padding[4]``
> +      - Applications and drivers must set this to zero.
> +    * - __u64
> +      - ``flags``
> +      - See :ref:`Picture Parameter Set Flags <hevc_pps_flags>`
> +
> +.. _hevc_pps_flags:
> +
> +``Picture Parameter Set Flags``
> +
> +.. raw:: latex
> +
> +    \small
> +
> +.. flat-table::
> +    :header-rows:  0
> +    :stub-columns: 0
> +    :widths:       1 1 2
> +
> +    * - ``V4L2_HEVC_PPS_FLAG_DEPENDENT_SLICE_SEGMENT_ENABLED``
> +      - 0x00000001
> +      -
> +    * - ``V4L2_HEVC_PPS_FLAG_OUTPUT_FLAG_PRESENT``
> +      - 0x00000002
> +      -
> +    * - ``V4L2_HEVC_PPS_FLAG_SIGN_DATA_HIDING_ENABLED``
> +      - 0x00000004
> +      -
> +    * - ``V4L2_HEVC_PPS_FLAG_CABAC_INIT_PRESENT``
> +      - 0x00000008
> +      -
> +    * - ``V4L2_HEVC_PPS_FLAG_CONSTRAINED_INTRA_PRED``
> +      - 0x00000010
> +      -
> +    * - ``V4L2_HEVC_PPS_FLAG_TRANSFORM_SKIP_ENABLED``
> +      - 0x00000020
> +      -
> +    * - ``V4L2_HEVC_PPS_FLAG_CU_QP_DELTA_ENABLED``
> +      - 0x00000040
> +      -
> +    * - ``V4L2_HEVC_PPS_FLAG_PPS_SLICE_CHROMA_QP_OFFSETS_PRESENT``
> +      - 0x00000080
> +      -
> +    * - ``V4L2_HEVC_PPS_FLAG_WEIGHTED_PRED``
> +      - 0x00000100
> +      -
> +    * - ``V4L2_HEVC_PPS_FLAG_WEIGHTED_BIPRED``
> +      - 0x00000200
> +      -
> +    * - ``V4L2_HEVC_PPS_FLAG_TRANSQUANT_BYPASS_ENABLED``
> +      - 0x00000400
> +      -
> +    * - ``V4L2_HEVC_PPS_FLAG_TILES_ENABLED``
> +      - 0x00000800
> +      -
> +    * - ``V4L2_HEVC_PPS_FLAG_ENTROPY_CODING_SYNC_ENABLED``
> +      - 0x00001000
> +      -
> +    * - ``V4L2_HEVC_PPS_FLAG_LOOP_FILTER_ACROSS_TILES_ENABLED``
> +      - 0x00002000
> +      -
> +    * - ``V4L2_HEVC_PPS_FLAG_PPS_LOOP_FILTER_ACROSS_SLICES_ENABLED``
> +      - 0x00004000
> +      -
> +    * - ``V4L2_HEVC_PPS_FLAG_DEBLOCKING_FILTER_OVERRIDE_ENABLED``
> +      - 0x00008000
> +      -
> +    * - ``V4L2_HEVC_PPS_FLAG_PPS_DISABLE_DEBLOCKING_FILTER``
> +      - 0x00010000
> +      -
> +    * - ``V4L2_HEVC_PPS_FLAG_LISTS_MODIFICATION_PRESENT``
> +      - 0x00020000
> +      -
> +    * - ``V4L2_HEVC_PPS_FLAG_SLICE_SEGMENT_HEADER_EXTENSION_PRESENT``
> +      - 0x00040000
> +      -
> +    * - ``V4L2_HEVC_PPS_FLAG_DEBLOCKING_FILTER_CONTROL_PRESENT``
> +      - 0x00080000
> +      - Specifies the presence of deblocking filter control syntax
> elements in
> +        the PPS
> +    * - ``V4L2_HEVC_PPS_FLAG_UNIFORM_SPACING``
> +      - 0x00100000
> +      - Specifies that tile column boundaries and likewise tile row
> boundaries
> +        are distributed uniformly across the picture
> +
> +.. raw:: latex
> +
> +    \normalsize
> +
> +``V4L2_CID_STATELESS_HEVC_SLICE_PARAMS (struct)``
> +    Specifies various slice-specific parameters, especially from the
> NAL unit
> +    header, general slice segment header and weighted prediction
> parameter
> +    parts of the bitstream.
> +    These bitstream parameters are defined according to :ref:`hevc`.
> +    They are described in section 7.4.7 "General slice segment header
> +    semantics" of the specification.
> +    This control is a dynamically sized 1-dimensional array,
> +    V4L2_CTRL_FLAG_DYNAMIC_ARRAY flag must be set when using it.
> +
> +.. c:type:: v4l2_ctrl_hevc_slice_params
> +
> +.. raw:: latex
> +
> +    \scriptsize
> +
> +.. tabularcolumns:: |p{5.4cm}|p{6.8cm}|p{5.1cm}|
> +
> +.. cssclass:: longtable
> +
> +.. flat-table:: struct v4l2_ctrl_hevc_slice_params
> +    :header-rows:  0
> +    :stub-columns: 0
> +    :widths:       1 1 2
> +
> +    * - __u32
> +      - ``bit_size``
> +      - Size (in bits) of the current slice data.
> +    * - __u32
> +      - ``data_byte_offset``
> +      - Offset (in byte) to the video data in the current slice data.
> +    * - __u32
> +      - ``num_entry_point_offsets``
> +      - Specifies the number of entry point offset syntax elements in
> the slice header.
> +    * - __u8
> +      - ``nal_unit_type``
> +      - Specifies the coding type of the slice (B, P or I).
> +    * - __u8
> +      - ``nuh_temporal_id_plus1``
> +      - Minus 1 specifies a temporal identifier for the NAL unit.
> +    * - __u8
> +      - ``slice_type``
> +      -
> +    (V4L2_HEVC_SLICE_TYPE_I, V4L2_HEVC_SLICE_TYPE_P or
> +    V4L2_HEVC_SLICE_TYPE_B).
> +    * - __u8
> +      - ``colour_plane_id``
> +      - Specifies the colour plane associated with the current slice.
> +    * - __u16
> +      - ``slice_pic_order_cnt``
> +      - Specifies the picture order count.
> +    * - __u8
> +      - ``num_ref_idx_l0_active_minus1``
> +      - Specifies the maximum reference index for reference picture
> list 0
> +        that may be used to decode the slice.
> +    * - __u8
> +      - ``num_ref_idx_l1_active_minus1``
> +      - Specifies the maximum reference index for reference picture
> list 1
> +        that may be used to decode the slice.
> +    * - __u8
> +      - ``collocated_ref_idx``
> +      - Specifies the reference index of the collocated picture used for
> +        temporal motion vector prediction.
> +    * - __u8
> +      - ``five_minus_max_num_merge_cand``
> +      - Specifies the maximum number of merging motion vector prediction
> +        candidates supported in the slice subtracted from 5.
> +    * - __s8
> +      - ``slice_qp_delta``
> +      - Specifies the initial value of QpY to be used for the coding
> blocks in the slice.
> +    * - __s8
> +      - ``slice_cb_qp_offset``
> +      - Specifies a difference to be added to the value of
> pps_cb_qp_offset.
> +    * - __s8
> +      - ``slice_cr_qp_offset``
> +      - Specifies a difference to be added to the value of
> pps_cr_qp_offset.
> +    * - __s8
> +      - ``slice_act_y_qp_offset``
> +      - screen content extension parameters
> +    * - __s8
> +      - ``slice_act_cb_qp_offset``
> +      - screen content extension parameters
> +    * - __s8
> +      - ``slice_act_cr_qp_offset``
> +      - screen content extension parameters
> +    * - __s8
> +      - ``slice_beta_offset_div2``
> +      - Specify the deblocking parameter offsets for beta divided by 2.
> +    * - __s8
> +      - ``slice_tc_offset_div2``
> +      - Specify the deblocking parameter offsets for tC divided by 2.
> +    * - __u8
> +      - ``pic_struct``
> +      - Indicates whether a picture should be displayed as a frame or
> as one or more fields.
> +    * - __u32
> +      - ``slice_segment_addr``
> +      - Specifies the address of the first coding tree block in the
> slice segment.
> +    * - __u8
> +      - ``ref_idx_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
> +      - The list of L0 reference elements as indices in the DPB.
> +    * - __u8
> +      - ``ref_idx_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
> +      - The list of L1 reference elements as indices in the DPB.
> +    * - __u16
> +      - ``short_term_ref_pic_set_size``
> +      - Specifies the size of short-term reference pictures set
> included in the SPS.
> +    * - __u16
> +      - ``long_term_ref_pic_set_size``
> +      - Specifies the size of long-term reference pictures set
> include in the SPS.
> +    * - __u8
> +      - ``padding``
> +      - Applications and drivers must set this to zero.
> +    * - struct :c:type:`v4l2_hevc_pred_weight_table`
> +      - ``pred_weight_table``
> +      - The prediction weight coefficients for inter-picture prediction.
> +    * - __u64
> +      - ``flags``
> +      - See :ref:`Slice Parameters Flags <hevc_slice_params_flags>`
> +
> +.. raw:: latex
> +
> +    \normalsize
> +
> +.. _hevc_slice_params_flags:
> +
> +``Slice Parameters Flags``
> +
> +.. raw:: latex
> +
> +    \scriptsize
> +
> +.. flat-table::
> +    :header-rows:  0
> +    :stub-columns: 0
> +    :widths:       1 1 2
> +
> +    * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_SAO_LUMA``
> +      - 0x00000001
> +      -
> +    * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_SAO_CHROMA``
> +      - 0x00000002
> +      -
> +    * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_TEMPORAL_MVP_ENABLED``
> +      - 0x00000004
> +      -
> +    * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_MVD_L1_ZERO``
> +      - 0x00000008
> +      -
> +    * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_CABAC_INIT``
> +      - 0x00000010
> +      -
> +    * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_COLLOCATED_FROM_L0``
> +      - 0x00000020
> +      -
> +    * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_USE_INTEGER_MV``
> +      - 0x00000040
> +      -
> +    * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_DEBLOCKING_FILTER_DISABLED``
> +      - 0x00000080
> +      -
> +    * -
> ``V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_LOOP_FILTER_ACROSS_SLICES_ENABLED``
> +      - 0x00000100
> +      -
> +    * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_DEPENDENT_SLICE_SEGMENT``
> +      - 0x00000200
> +      -
> +
> +.. raw:: latex
> +
> +    \normalsize
> +
> +``V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS (integer)``
> +    Specifies entry point offsets in bytes.
> +    This control is a dynamically sized array. The number of entry point
> +    offsets is reported by the ``elems`` field.
> +    This bitstream parameter is defined according to :ref:`hevc`.
> +    They are described in section 7.4.7.1 "General slice segment header
> +    semantics" of the specification.
> +
> +``V4L2_CID_STATELESS_HEVC_SCALING_MATRIX (struct)``
> +    Specifies the HEVC scaling matrix parameters used for the scaling
> process
> +    for transform coefficients.
> +    These matrix and parameters are defined according to :ref:`hevc`.
> +    They are described in section 7.4.5 "Scaling list data semantics" of
> +    the specification.
> +
> +.. c:type:: v4l2_ctrl_hevc_scaling_matrix
> +
> +.. raw:: latex
> +
> +    \scriptsize
> +
> +.. tabularcolumns:: |p{5.4cm}|p{6.8cm}|p{5.1cm}|
> +
> +.. cssclass:: longtable
> +
> +.. flat-table:: struct v4l2_ctrl_hevc_scaling_matrix
> +    :header-rows:  0
> +    :stub-columns: 0
> +    :widths:       1 1 2
> +
> +    * - __u8
> +      - ``scaling_list_4x4[6][16]``
> +      - Scaling list is used for the scaling process for transform
> +        coefficients. The values on each scaling list are expected
> +        in raster scan order.
> +    * - __u8
> +      - ``scaling_list_8x8[6][64]``
> +      - Scaling list is used for the scaling process for transform
> +        coefficients. The values on each scaling list are expected
> +        in raster scan order.
> +    * - __u8
> +      - ``scaling_list_16x16[6][64]``
> +      - Scaling list is used for the scaling process for transform
> +        coefficients. The values on each scaling list are expected
> +        in raster scan order.
> +    * - __u8
> +      - ``scaling_list_32x32[2][64]``
> +      - Scaling list is used for the scaling process for transform
> +        coefficients. The values on each scaling list are expected
> +        in raster scan order.
> +    * - __u8
> +      - ``scaling_list_dc_coef_16x16[6]``
> +      - Scaling list is used for the scaling process for transform
> +        coefficients. The values on each scaling list are expected
> +        in raster scan order.
> +    * - __u8
> +      - ``scaling_list_dc_coef_32x32[2]``
> +      - Scaling list is used for the scaling process for transform
> +        coefficients. The values on each scaling list are expected
> +        in raster scan order.
> +
> +.. raw:: latex
> +
> +    \normalsize
> +
> +.. c:type:: v4l2_hevc_dpb_entry
> +
> +.. raw:: latex
> +
> +    \small
> +
> +.. tabularcolumns:: |p{1.0cm}|p{4.2cm}|p{12.1cm}|
> +
> +.. flat-table:: struct v4l2_hevc_dpb_entry
> +    :header-rows:  0
> +    :stub-columns: 0
> +    :widths:       1 1 2
> +
> +    * - __u64
> +      - ``timestamp``
> +      - Timestamp of the V4L2 capture buffer to use as reference, used
> +        with B-coded and P-coded frames. The timestamp refers to the
> +    ``timestamp`` field in struct :c:type:`v4l2_buffer`. Use the
> +    :c:func:`v4l2_timeval_to_ns()` function to convert the struct
> +    :c:type:`timeval` in struct :c:type:`v4l2_buffer` to a __u64.
> +    * - __u8
> +      - ``flags``
> +      - Long term flag for the reference frame
> +        (V4L2_HEVC_DPB_ENTRY_LONG_TERM_REFERENCE). The flag is set as
> +        described in the ITU HEVC specification chapter "8.3.2 Decoding
> +        process for reference picture set".
> +    * - __u8
> +      - ``field_pic``
> +      - Whether the reference is a field picture or a frame.
> +        See :ref:`HEVC dpb field pic Flags <hevc_dpb_field_pic_flags>`
> +    * - __s32
> +      - ``pic_order_cnt_val``
> +      - The picture order count of the current picture.
> +    * - __u8
> +      - ``padding[2]``
> +      - Applications and drivers must set this to zero.
> +
> +.. raw:: latex
> +
> +    \normalsize
> +
> +.. _hevc_dpb_field_pic_flags:
> +
> +``HEVC dpb field pic Flags``
> +
> +.. raw:: latex
> +
> +    \scriptsize
> +
> +.. flat-table::
> +    :header-rows:  0
> +    :stub-columns: 0
> +    :widths:       1 1 2
> +
> +    * - ``V4L2_HEVC_SEI_PIC_STRUCT_FRAME``
> +      - 0
> +      - (progressive) Frame
> +    * - ``V4L2_HEVC_SEI_PIC_STRUCT_TOP_FIELD``
> +      - 1
> +      - Top field
> +    * - ``V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_FIELD``
> +      - 2
> +      - Bottom field
> +    * - ``V4L2_HEVC_SEI_PIC_STRUCT_TOP_BOTTOM``
> +      - 3
> +      - Top field, bottom field, in that order
> +    * - ``V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_TOP``
> +      - 4
> +      - Bottom field, top field, in that order
> +    * - ``V4L2_HEVC_SEI_PIC_STRUCT_TOP_BOTTOM_TOP``
> +      - 5
> +      - Top field, bottom field, top field repeated, in that order
> +    * - ``V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_TOP_BOTTOM``
> +      - 6
> +      - Bottom field, top field, bottom field repeated, in that order
> +    * - ``V4L2_HEVC_SEI_PIC_STRUCT_FRAME_DOUBLING``
> +      - 7
> +      - Frame doubling
> +    * - ``V4L2_HEVC_SEI_PIC_STRUCT_FRAME_TRIPLING``
> +      - 8
> +      - Frame tripling
> +    * - ``V4L2_HEVC_SEI_PIC_STRUCT_TOP_PAIRED_PREVIOUS_BOTTOM``
> +      - 9
> +      - Top field paired with previous bottom field in output order
> +    * - ``V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_PAIRED_PREVIOUS_TOP``
> +      - 10
> +      - Bottom field paired with previous top field in output order
> +    * - ``V4L2_HEVC_SEI_PIC_STRUCT_TOP_PAIRED_NEXT_BOTTOM``
> +      - 11
> +      - Top field paired with next bottom field in output order
> +    * - ``V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_PAIRED_NEXT_TOP``
> +      - 12
> +      - Bottom field paired with next top field in output order
> +
> +.. c:type:: v4l2_hevc_pred_weight_table
> +
> +.. raw:: latex
> +
> +    \footnotesize
> +
> +.. tabularcolumns:: |p{0.8cm}|p{10.6cm}|p{5.9cm}|
> +
> +.. flat-table:: struct v4l2_hevc_pred_weight_table
> +    :header-rows:  0
> +    :stub-columns: 0
> +    :widths:       1 1 2
> +
> +    * - __s8
> +      - ``delta_luma_weight_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
> +      - The difference of the weighting factor applied to the luma
> +        prediction value for list 0.
> +    * - __s8
> +      - ``luma_offset_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
> +      - The additive offset applied to the luma prediction value for
> list 0.
> +    * - __s8
> +      - ``delta_chroma_weight_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]``
> +      - The difference of the weighting factor applied to the chroma
> +        prediction value for list 0.
> +    * - __s8
> +      - ``chroma_offset_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]``
> +      - The difference of the additive offset applied to the chroma
> +        prediction values for list 0.
> +    * - __s8
> +      - ``delta_luma_weight_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
> +      - The difference of the weighting factor applied to the luma
> +        prediction value for list 1.
> +    * - __s8
> +      - ``luma_offset_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
> +      - The additive offset applied to the luma prediction value for
> list 1.
> +    * - __s8
> +      - ``delta_chroma_weight_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]``
> +      - The difference of the weighting factor applied to the chroma
> +        prediction value for list 1.
> +    * - __s8
> +      - ``chroma_offset_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]``
> +      - The difference of the additive offset applied to the chroma
> +        prediction values for list 1.
> +    * - __u8
> +      - ``luma_log2_weight_denom``
> +      - The base 2 logarithm of the denominator for all luma weighting
> +        factors.
> +    * - __s8
> +      - ``delta_chroma_log2_weight_denom``
> +      - The difference of the base 2 logarithm of the denominator for
> +        all chroma weighting factors.
> +    * - __u8
> +      - ``padding[6]``
> +      - Applications and drivers must set this to zero.
> +
> +.. raw:: latex
> +
> +    \normalsize
> +
> +``V4L2_CID_STATELESS_HEVC_DECODE_MODE (enum)``
> +    Specifies the decoding mode to use. Currently exposes slice-based
> and
> +    frame-based decoding but new modes might be added later on.
> +    This control is used as a modifier for V4L2_PIX_FMT_HEVC_SLICE
> +    pixel format. Applications that support V4L2_PIX_FMT_HEVC_SLICE
> +    are required to set this control in order to specify the decoding
> mode
> +    that is expected for the buffer.
> +    Drivers may expose a single or multiple decoding modes, depending
> +    on what they can support.
> +
> +.. c:type:: v4l2_stateless_hevc_decode_mode
> +
> +.. raw:: latex
> +
> +    \small
> +
> +.. tabularcolumns:: |p{9.4cm}|p{0.6cm}|p{7.3cm}|
> +
> +.. flat-table::
> +    :header-rows:  0
> +    :stub-columns: 0
> +    :widths:       1 1 2
> +
> +    * - ``V4L2_STATELESS_HEVC_DECODE_MODE_SLICE_BASED``
> +      - 0
> +      - Decoding is done at the slice granularity.
> +        The OUTPUT buffer must contain a single slice.
> +    * - ``V4L2_STATELESS_HEVC_DECODE_MODE_FRAME_BASED``
> +      - 1
> +      - Decoding is done at the frame granularity.
> +        The OUTPUT buffer must contain all slices needed to decode the
> +        frame.
> +
> +.. raw:: latex
> +
> +    \normalsize
> +
> +``V4L2_CID_STATELESS_HEVC_START_CODE (enum)``
> +    Specifies the HEVC slice start code expected for each slice.
> +    This control is used as a modifier for V4L2_PIX_FMT_HEVC_SLICE
> +    pixel format. Applications that support V4L2_PIX_FMT_HEVC_SLICE
> +    are required to set this control in order to specify the start code
> +    that is expected for the buffer.
> +    Drivers may expose a single or multiple start codes, depending
> +    on what they can support.
> +
> +.. c:type:: v4l2_stateless_hevc_start_code
> +
> +.. tabularcolumns:: |p{9.2cm}|p{0.6cm}|p{7.5cm}|
> +
> +.. flat-table::
> +    :header-rows:  0
> +    :stub-columns: 0
> +    :widths:       1 1 2
> +
> +    * - ``V4L2_STATELESS_HEVC_START_CODE_NONE``
> +      - 0
> +      - Selecting this value specifies that HEVC slices are passed
> +        to the driver without any start code. The bitstream data
> should be
> +        according to :ref:`hevc` 7.3.1.1 General NAL unit syntax, hence
> +        contains emulation prevention bytes when required.
> +    * - ``V4L2_STATELESS_HEVC_START_CODE_ANNEX_B``
> +      - 1
> +      - Selecting this value specifies that HEVC slices are expected
> +        to be prefixed by Annex B start codes. According to :ref:`hevc`
> +        valid start codes can be 3-bytes 0x000001 or 4-bytes 0x00000001.
> +
> +.. raw:: latex
> +
> +    \normalsize
> +
> +``V4L2_CID_MPEG_VIDEO_BASELAYER_PRIORITY_ID (integer)``
> +    Specifies a priority identifier for the NAL unit, which will be
> applied to
> +    the base layer. By default this value is set to 0 for the base
> layer,
> +    and the next layer will have the priority ID assigned as 1, 2, 3
> and so on.
> +    The video encoder can't decide the priority id to be applied to a
> layer,
> +    so this has to come from client.
> +    This is applicable to H264 and valid Range is from 0 to 63.
> +    Source Rec. ITU-T H.264 (06/2019); G.7.4.1.1, G.8.8.1.
> +
> +``V4L2_CID_MPEG_VIDEO_LTR_COUNT (integer)``
> +    Specifies the maximum number of Long Term Reference (LTR) frames
> at any
> +    given time that the encoder can keep.
> +    This is applicable to the H264 and HEVC encoders.
> +
> +``V4L2_CID_MPEG_VIDEO_FRAME_LTR_INDEX (integer)``
> +    After setting this control the frame that will be queued next
> +    will be marked as a Long Term Reference (LTR) frame
> +    and given this LTR index which ranges from 0 to LTR_COUNT-1.
> +    This is applicable to the H264 and HEVC encoders.
> +    Source Rec. ITU-T H.264 (06/2019); Table 7.9
> +
> +``V4L2_CID_MPEG_VIDEO_USE_LTR_FRAMES (bitmask)``
> +    Specifies the Long Term Reference (LTR) frame(s) to be used for
> +    encoding the next frame queued after setting this control.
> +    This provides a bitmask which consists of bits [0, LTR_COUNT-1].
> +    This is applicable to the H264 and HEVC encoders.
> +
> +``V4L2_CID_STATELESS_HEVC_DECODE_PARAMS (struct)``
> +    Specifies various decode parameters, especially the references
> picture order
> +    count (POC) for all the lists (short, long, before, current,
> after) and the
> +    number of entries for each of them.
> +    These parameters are defined according to :ref:`hevc`.
> +    They are described in section 8.3 "Slice decoding process" of the
> +    specification.
> +
> +.. c:type:: v4l2_ctrl_hevc_decode_params
> +
> +.. cssclass:: longtable
> +
> +.. flat-table:: struct v4l2_ctrl_hevc_decode_params
> +    :header-rows:  0
> +    :stub-columns: 0
> +    :widths:       1 1 2
> +
> +    * - __s32
> +      - ``pic_order_cnt_val``
> +      - PicOrderCntVal as described in section 8.3.1 "Decoding process
> +        for picture order count" of the specification.
> +    * - __u8
> +      - ``num_active_dpb_entries``
> +      - The number of entries in ``dpb``.
> +    * - __u8
> +      - ``num_poc_st_curr_before``
> +      - The number of reference pictures in the short-term set that
> come before
> +        the current frame.
> +    * - __u8
> +      - ``num_poc_st_curr_after``
> +      - The number of reference pictures in the short-term set that
> come after
> +        the current frame.
> +    * - __u8
> +      - ``num_poc_lt_curr``
> +      - The number of reference pictures in the long-term set.
> +    * - __u8
> +      - ``poc_st_curr_before[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
> +      - PocStCurrBefore as described in section 8.3.2 "Decoding
> process for reference
> +        picture set": provides the index of the short term before
> references in DPB array.
> +    * - __u8
> +      - ``poc_st_curr_after[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
> +      - PocStCurrAfter as described in section 8.3.2 "Decoding
> process for reference
> +        picture set": provides the index of the short term after
> references in DPB array.
> +    * - __u8
> +      - ``poc_lt_curr[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
> +      - PocLtCurr as described in section 8.3.2 "Decoding process for
> reference
> +        picture set": provides the index of the long term references
> in DPB array.
> +    * - struct :c:type:`v4l2_hevc_dpb_entry`
> +      - ``dpb[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
> +      - The decoded picture buffer, for meta-data about reference
> frames.
> +    * - __u64
> +      - ``flags``
> +      - See :ref:`Decode Parameters Flags <hevc_decode_params_flags>`
> +
> +.. _hevc_decode_params_flags:
> +
> +``Decode Parameters Flags``
> +
> +.. cssclass:: longtable
> +
> +.. flat-table::
> +    :header-rows:  0
> +    :stub-columns: 0
> +    :widths:       1 1 2
> +
> +    * - ``V4L2_HEVC_DECODE_PARAM_FLAG_IRAP_PIC``
> +      - 0x00000001
> +      -
> +    * - ``V4L2_HEVC_DECODE_PARAM_FLAG_IDR_PIC``
> +      - 0x00000002
> +      -
> +    * - ``V4L2_HEVC_DECODE_PARAM_FLAG_NO_OUTPUT_OF_PRIOR``
> +      - 0x00000004
> +      -
> diff --git a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
> b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
> index 48b3f533bc17..25d6a79dd04b 100644
> --- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
> +++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
> @@ -2636,891 +2636,3 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
>      Indicates whether to generate SPS and PPS at every IDR. Setting
> it to 0
>      disables generating SPS and PPS at every IDR. Setting it to one
> enables
>      generating SPS and PPS at every IDR.
> -
> -.. _v4l2-mpeg-hevc:
> -
> -``V4L2_CID_STATELESS_HEVC_SPS (struct)``
> -    Specifies the Sequence Parameter Set fields (as extracted from the
> -    bitstream) for the associated HEVC slice data.
> -    These bitstream parameters are defined according to :ref:`hevc`.
> -    They are described in section 7.4.3.2 "Sequence parameter set RBSP
> -    semantics" of the specification.
> -
> -.. c:type:: v4l2_ctrl_hevc_sps
> -
> -.. raw:: latex
> -
> -    \small
> -
> -.. tabularcolumns:: |p{1.2cm}|p{9.2cm}|p{6.9cm}|
> -
> -.. cssclass:: longtable
> -
> -.. flat-table:: struct v4l2_ctrl_hevc_sps
> -    :header-rows:  0
> -    :stub-columns: 0
> -    :widths:       1 1 2
> -
> -    * - __u8
> -      - ``video_parameter_set_id``
> -      - Specifies the value of the vps_video_parameter_set_id of the
> active VPS
> -        as descibed in section "7.4.3.2.1 General sequence parameter
> set RBSP semantics"
> -        of H.265 specifications.
> -    * - __u8
> -      - ``seq_parameter_set_id``
> -      - Provides an identifier for the SPS for reference by other
> syntax elements
> -        as descibed in section "7.4.3.2.1 General sequence parameter
> set RBSP semantics"
> -        of H.265 specifications.
> -    * - __u16
> -      - ``pic_width_in_luma_samples``
> -      - Specifies the width of each decoded picture in units of luma
> samples.
> -    * - __u16
> -      - ``pic_height_in_luma_samples``
> -      - Specifies the height of each decoded picture in units of luma
> samples.
> -    * - __u8
> -      - ``bit_depth_luma_minus8``
> -      - Specifies the bit depth of the samples of the luma array.
> -    * - __u8
> -      - ``bit_depth_chroma_minus8``
> -      - Specifies the bit depth of the samples of the chroma arrays.
> -    * - __u8
> -      - ``log2_max_pic_order_cnt_lsb_minus4``
> -      - Specifies the value of the variable MaxPicOrderCntLsb.
> -    * - __u8
> -      - ``sps_max_dec_pic_buffering_minus1``
> -      - Plus 1 specifies the maximum required size of the decoded
> picture buffer for
> -        the CVS
> -    * - __u8
> -      - ``sps_max_num_reorder_pics``
> -      - Indicates the maximum allowed number of pictures.
> -    * - __u8
> -      - ``sps_max_latency_increase_plus1``
> -      - Not equal to 0 is used to compute the value of
> SpsMaxLatencyPictures[i].
> -    * - __u8
> -      - ``log2_min_luma_coding_block_size_minus3``
> -      - Plus 3 specifies the minimum luma coding block size.
> -    * - __u8
> -      - ``log2_diff_max_min_luma_coding_block_size``
> -      - Specifies the difference between the maximum and minimum luma
> coding block size.
> -    * - __u8
> -      - ``log2_min_luma_transform_block_size_minus2``
> -      - Plus 2 specifies the minimum luma transform block size.
> -    * - __u8
> -      - ``log2_diff_max_min_luma_transform_block_size``
> -      - Specifies the difference between the maximum and minimum luma
> transform block size.
> -    * - __u8
> -      - ``max_transform_hierarchy_depth_inter``
> -      - Specifies the maximum hierarchy depth for transform units of
> coding units coded
> -        in inter prediction mode.
> -    * - __u8
> -      - ``max_transform_hierarchy_depth_intra``
> -      - Specifies the maximum hierarchy depth for transform units of
> coding units coded in
> -        intra prediction mode.
> -    * - __u8
> -      - ``pcm_sample_bit_depth_luma_minus1``
> -      - Specifies the number of bits used to represent each of PCM
> sample values of the
> -        luma component.
> -    * - __u8
> -      - ``pcm_sample_bit_depth_chroma_minus1``
> -      - Specifies the number of bits used to represent each of PCM
> sample values of
> -        the chroma components.
> -    * - __u8
> -      - ``log2_min_pcm_luma_coding_block_size_minus3``
> -      - Plus 3 specifies the minimum size of coding blocks.
> -    * - __u8
> -      - ``log2_diff_max_min_pcm_luma_coding_block_size``
> -      - Specifies the difference between the maximum and minimum size
> of coding blocks.
> -    * - __u8
> -      - ``num_short_term_ref_pic_sets``
> -      - Specifies the number of st_ref_pic_set() syntax structures
> included in the SPS.
> -    * - __u8
> -      - ``num_long_term_ref_pics_sps``
> -      - Specifies the number of candidate long-term reference
> pictures that are
> -        specified in the SPS.
> -    * - __u8
> -      - ``chroma_format_idc``
> -      - Specifies the chroma sampling.
> -    * - __u8
> -      - ``sps_max_sub_layers_minus1``
> -      - plus 1 specifies the maximum number of temporal sub-layers.
> -    * - __u64
> -      - ``flags``
> -      - See :ref:`Sequence Parameter Set Flags <hevc_sps_flags>`
> -
> -.. raw:: latex
> -
> -    \normalsize
> -
> -.. _hevc_sps_flags:
> -
> -``Sequence Parameter Set Flags``
> -
> -.. raw:: latex
> -
> -    \small
> -
> -.. cssclass:: longtable
> -
> -.. flat-table::
> -    :header-rows:  0
> -    :stub-columns: 0
> -    :widths:       1 1 2
> -
> -    * - ``V4L2_HEVC_SPS_FLAG_SEPARATE_COLOUR_PLANE``
> -      - 0x00000001
> -      -
> -    * - ``V4L2_HEVC_SPS_FLAG_SCALING_LIST_ENABLED``
> -      - 0x00000002
> -      -
> -    * - ``V4L2_HEVC_SPS_FLAG_AMP_ENABLED``
> -      - 0x00000004
> -      -
> -    * - ``V4L2_HEVC_SPS_FLAG_SAMPLE_ADAPTIVE_OFFSET``
> -      - 0x00000008
> -      -
> -    * - ``V4L2_HEVC_SPS_FLAG_PCM_ENABLED``
> -      - 0x00000010
> -      -
> -    * - ``V4L2_HEVC_SPS_FLAG_PCM_LOOP_FILTER_DISABLED``
> -      - 0x00000020
> -      -
> -    * - ``V4L2_HEVC_SPS_FLAG_LONG_TERM_REF_PICS_PRESENT``
> -      - 0x00000040
> -      -
> -    * - ``V4L2_HEVC_SPS_FLAG_SPS_TEMPORAL_MVP_ENABLED``
> -      - 0x00000080
> -      -
> -    * - ``V4L2_HEVC_SPS_FLAG_STRONG_INTRA_SMOOTHING_ENABLED``
> -      - 0x00000100
> -      -
> -
> -.. raw:: latex
> -
> -    \normalsize
> -
> -``V4L2_CID_STATELESS_HEVC_PPS (struct)``
> -    Specifies the Picture Parameter Set fields (as extracted from the
> -    bitstream) for the associated HEVC slice data.
> -    These bitstream parameters are defined according to :ref:`hevc`.
> -    They are described in section 7.4.3.3 "Picture parameter set RBSP
> -    semantics" of the specification.
> -
> -.. c:type:: v4l2_ctrl_hevc_pps
> -
> -.. tabularcolumns:: |p{1.2cm}|p{8.6cm}|p{7.5cm}|
> -
> -.. cssclass:: longtable
> -
> -.. flat-table:: struct v4l2_ctrl_hevc_pps
> -    :header-rows:  0
> -    :stub-columns: 0
> -    :widths:       1 1 2
> -
> -    * - __u8
> -      - ``pic_parameter_set_id``
> -      - Identifies the PPS for reference by other syntax elements.
> -    * - __u8
> -      - ``num_extra_slice_header_bits``
> -      - Specifies the number of extra slice header bits that are present
> -        in the slice header RBSP for coded pictures referring to the
> PPS.
> -    * - __u8
> -      - ``num_ref_idx_l0_default_active_minus1``
> -      - Specifies the inferred value of num_ref_idx_l0_active_minus1
> -    * - __u8
> -      - ``num_ref_idx_l1_default_active_minus1``
> -      - Specifies the inferred value of num_ref_idx_l1_active_minus1
> -    * - __s8
> -      - ``init_qp_minus26``
> -      - Plus 26 specifies the initial value of SliceQp Y for each slice
> -        referring to the PPS.
> -    * - __u8
> -      - ``diff_cu_qp_delta_depth``
> -      - Specifies the difference between the luma coding tree block size
> -        and the minimum luma coding block size of coding units that
> -        convey cu_qp_delta_abs and cu_qp_delta_sign_flag.
> -    * - __s8
> -      - ``pps_cb_qp_offset``
> -      - Specify the offsets to the luma quantization parameter Cb.
> -    * - __s8
> -      - ``pps_cr_qp_offset``
> -      - Specify the offsets to the luma quantization parameter Cr.
> -    * - __u8
> -      - ``num_tile_columns_minus1``
> -      - Plus 1 specifies the number of tile columns partitioning the
> picture.
> -    * - __u8
> -      - ``num_tile_rows_minus1``
> -      - Plus 1 specifies the number of tile rows partitioning the
> picture.
> -    * - __u8
> -      - ``column_width_minus1[20]``
> -      - Plus 1 specifies the width of the i-th tile column in units of
> -        coding tree blocks.
> -    * - __u8
> -      - ``row_height_minus1[22]``
> -      - Plus 1 specifies the height of the i-th tile row in units of
> coding
> -        tree blocks.
> -    * - __s8
> -      - ``pps_beta_offset_div2``
> -      - Specify the default deblocking parameter offsets for beta
> divided by 2.
> -    * - __s8
> -      - ``pps_tc_offset_div2``
> -      - Specify the default deblocking parameter offsets for tC
> divided by 2.
> -    * - __u8
> -      - ``log2_parallel_merge_level_minus2``
> -      - Plus 2 specifies the value of the variable Log2ParMrgLevel.
> -    * - __u8
> -      - ``padding[4]``
> -      - Applications and drivers must set this to zero.
> -    * - __u64
> -      - ``flags``
> -      - See :ref:`Picture Parameter Set Flags <hevc_pps_flags>`
> -
> -.. _hevc_pps_flags:
> -
> -``Picture Parameter Set Flags``
> -
> -.. raw:: latex
> -
> -    \small
> -
> -.. flat-table::
> -    :header-rows:  0
> -    :stub-columns: 0
> -    :widths:       1 1 2
> -
> -    * - ``V4L2_HEVC_PPS_FLAG_DEPENDENT_SLICE_SEGMENT_ENABLED``
> -      - 0x00000001
> -      -
> -    * - ``V4L2_HEVC_PPS_FLAG_OUTPUT_FLAG_PRESENT``
> -      - 0x00000002
> -      -
> -    * - ``V4L2_HEVC_PPS_FLAG_SIGN_DATA_HIDING_ENABLED``
> -      - 0x00000004
> -      -
> -    * - ``V4L2_HEVC_PPS_FLAG_CABAC_INIT_PRESENT``
> -      - 0x00000008
> -      -
> -    * - ``V4L2_HEVC_PPS_FLAG_CONSTRAINED_INTRA_PRED``
> -      - 0x00000010
> -      -
> -    * - ``V4L2_HEVC_PPS_FLAG_TRANSFORM_SKIP_ENABLED``
> -      - 0x00000020
> -      -
> -    * - ``V4L2_HEVC_PPS_FLAG_CU_QP_DELTA_ENABLED``
> -      - 0x00000040
> -      -
> -    * - ``V4L2_HEVC_PPS_FLAG_PPS_SLICE_CHROMA_QP_OFFSETS_PRESENT``
> -      - 0x00000080
> -      -
> -    * - ``V4L2_HEVC_PPS_FLAG_WEIGHTED_PRED``
> -      - 0x00000100
> -      -
> -    * - ``V4L2_HEVC_PPS_FLAG_WEIGHTED_BIPRED``
> -      - 0x00000200
> -      -
> -    * - ``V4L2_HEVC_PPS_FLAG_TRANSQUANT_BYPASS_ENABLED``
> -      - 0x00000400
> -      -
> -    * - ``V4L2_HEVC_PPS_FLAG_TILES_ENABLED``
> -      - 0x00000800
> -      -
> -    * - ``V4L2_HEVC_PPS_FLAG_ENTROPY_CODING_SYNC_ENABLED``
> -      - 0x00001000
> -      -
> -    * - ``V4L2_HEVC_PPS_FLAG_LOOP_FILTER_ACROSS_TILES_ENABLED``
> -      - 0x00002000
> -      -
> -    * - ``V4L2_HEVC_PPS_FLAG_PPS_LOOP_FILTER_ACROSS_SLICES_ENABLED``
> -      - 0x00004000
> -      -
> -    * - ``V4L2_HEVC_PPS_FLAG_DEBLOCKING_FILTER_OVERRIDE_ENABLED``
> -      - 0x00008000
> -      -
> -    * - ``V4L2_HEVC_PPS_FLAG_PPS_DISABLE_DEBLOCKING_FILTER``
> -      - 0x00010000
> -      -
> -    * - ``V4L2_HEVC_PPS_FLAG_LISTS_MODIFICATION_PRESENT``
> -      - 0x00020000
> -      -
> -    * - ``V4L2_HEVC_PPS_FLAG_SLICE_SEGMENT_HEADER_EXTENSION_PRESENT``
> -      - 0x00040000
> -      -
> -    * - ``V4L2_HEVC_PPS_FLAG_DEBLOCKING_FILTER_CONTROL_PRESENT``
> -      - 0x00080000
> -      - Specifies the presence of deblocking filter control syntax
> elements in
> -        the PPS
> -    * - ``V4L2_HEVC_PPS_FLAG_UNIFORM_SPACING``
> -      - 0x00100000
> -      - Specifies that tile column boundaries and likewise tile row
> boundaries
> -        are distributed uniformly across the picture
> -
> -.. raw:: latex
> -
> -    \normalsize
> -
> -``V4L2_CID_STATELESS_HEVC_SLICE_PARAMS (struct)``
> -    Specifies various slice-specific parameters, especially from the
> NAL unit
> -    header, general slice segment header and weighted prediction
> parameter
> -    parts of the bitstream.
> -    These bitstream parameters are defined according to :ref:`hevc`.
> -    They are described in section 7.4.7 "General slice segment header
> -    semantics" of the specification.
> -    This control is a dynamically sized 1-dimensional array,
> -    V4L2_CTRL_FLAG_DYNAMIC_ARRAY flag must be set when using it.
> -
> -.. c:type:: v4l2_ctrl_hevc_slice_params
> -
> -.. raw:: latex
> -
> -    \scriptsize
> -
> -.. tabularcolumns:: |p{5.4cm}|p{6.8cm}|p{5.1cm}|
> -
> -.. cssclass:: longtable
> -
> -.. flat-table:: struct v4l2_ctrl_hevc_slice_params
> -    :header-rows:  0
> -    :stub-columns: 0
> -    :widths:       1 1 2
> -
> -    * - __u32
> -      - ``bit_size``
> -      - Size (in bits) of the current slice data.
> -    * - __u32
> -      - ``data_byte_offset``
> -      - Offset (in bytes) to the video data in the current slice data.
> -    * - __u32
> -      - ``num_entry_point_offsets``
> -      - Specifies the number of entry point offset syntax elements in
> the slice header.
> -    * - __u8
> -      - ``nal_unit_type``
> -      - Specifies the coding type of the slice (B, P or I).
> -    * - __u8
> -      - ``nuh_temporal_id_plus1``
> -      - Minus 1 specifies a temporal identifier for the NAL unit.
> -    * - __u8
> -      - ``slice_type``
> -      -
> -    (V4L2_HEVC_SLICE_TYPE_I, V4L2_HEVC_SLICE_TYPE_P or
> -    V4L2_HEVC_SLICE_TYPE_B).
> -    * - __u8
> -      - ``colour_plane_id``
> -      - Specifies the colour plane associated with the current slice.
> -    * - __u16
> -      - ``slice_pic_order_cnt``
> -      - Specifies the picture order count.
> -    * - __u8
> -      - ``num_ref_idx_l0_active_minus1``
> -      - Specifies the maximum reference index for reference picture
> list 0
> -        that may be used to decode the slice.
> -    * - __u8
> -      - ``num_ref_idx_l1_active_minus1``
> -      - Specifies the maximum reference index for reference picture
> list 1
> -        that may be used to decode the slice.
> -    * - __u8
> -      - ``collocated_ref_idx``
> -      - Specifies the reference index of the collocated picture used for
> -        temporal motion vector prediction.
> -    * - __u8
> -      - ``five_minus_max_num_merge_cand``
> -      - Specifies the maximum number of merging motion vector prediction
> -        candidates supported in the slice subtracted from 5.
> -    * - __s8
> -      - ``slice_qp_delta``
> -      - Specifies the initial value of QpY to be used for the coding
> blocks in the slice.
> -    * - __s8
> -      - ``slice_cb_qp_offset``
> -      - Specifies a difference to be added to the value of
> pps_cb_qp_offset.
> -    * - __s8
> -      - ``slice_cr_qp_offset``
> -      - Specifies a difference to be added to the value of
> pps_cr_qp_offset.
> -    * - __s8
> -      - ``slice_act_y_qp_offset``
> -      - screen content extension parameters
> -    * - __s8
> -      - ``slice_act_cb_qp_offset``
> -      - screen content extension parameters
> -    * - __s8
> -      - ``slice_act_cr_qp_offset``
> -      - screen content extension parameters
> -    * - __s8
> -      - ``slice_beta_offset_div2``
> -      - Specify the deblocking parameter offsets for beta divided by 2.
> -    * - __s8
> -      - ``slice_tc_offset_div2``
> -      - Specify the deblocking parameter offsets for tC divided by 2.
> -    * - __u8
> -      - ``pic_struct``
> -      - Indicates whether a picture should be displayed as a frame or
> as one or more fields.
> -    * - __u32
> -      - ``slice_segment_addr``
> -      - Specifies the address of the first coding tree block in the
> slice segment.
> -    * - __u8
> -      - ``ref_idx_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
> -      - The list of L0 reference elements as indices in the DPB.
> -    * - __u8
> -      - ``ref_idx_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
> -      - The list of L1 reference elements as indices in the DPB.
> -    * - __u16
> -      - ``short_term_ref_pic_set_size``
> -      - Specifies the size of short-term reference pictures set
> included in the SPS.
> -    * - __u16
> -      - ``long_term_ref_pic_set_size``
> -      - Specifies the size of long-term reference pictures set
> include in the SPS.
> -    * - __u8
> -      - ``padding``
> -      - Applications and drivers must set this to zero.
> -    * - struct :c:type:`v4l2_hevc_pred_weight_table`
> -      - ``pred_weight_table``
> -      - The prediction weight coefficients for inter-picture prediction.
> -    * - __u64
> -      - ``flags``
> -      - See :ref:`Slice Parameters Flags <hevc_slice_params_flags>`
> -
> -.. raw:: latex
> -
> -    \normalsize
> -
> -.. _hevc_slice_params_flags:
> -
> -``Slice Parameters Flags``
> -
> -.. raw:: latex
> -
> -    \scriptsize
> -
> -.. flat-table::
> -    :header-rows:  0
> -    :stub-columns: 0
> -    :widths:       1 1 2
> -
> -    * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_SAO_LUMA``
> -      - 0x00000001
> -      -
> -    * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_SAO_CHROMA``
> -      - 0x00000002
> -      -
> -    * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_TEMPORAL_MVP_ENABLED``
> -      - 0x00000004
> -      -
> -    * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_MVD_L1_ZERO``
> -      - 0x00000008
> -      -
> -    * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_CABAC_INIT``
> -      - 0x00000010
> -      -
> -    * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_COLLOCATED_FROM_L0``
> -      - 0x00000020
> -      -
> -    * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_USE_INTEGER_MV``
> -      - 0x00000040
> -      -
> -    * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_DEBLOCKING_FILTER_DISABLED``
> -      - 0x00000080
> -      -
> -    * -
> ``V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_LOOP_FILTER_ACROSS_SLICES_ENABLED``
> -      - 0x00000100
> -      -
> -    * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_DEPENDENT_SLICE_SEGMENT``
> -      - 0x00000200
> -      -
> -
> -.. raw:: latex
> -
> -    \normalsize
> -
> -``V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS (integer)``
> -    Specifies entry point offsets in bytes.
> -    This control is a dynamically sized array. The number of entry point
> -    offsets is reported by the ``elems`` field.
> -    This bitstream parameter is defined according to :ref:`hevc`.
> -    They are described in section 7.4.7.1 "General slice segment header
> -    semantics" of the specification.
> -
> -``V4L2_CID_STATELESS_HEVC_SCALING_MATRIX (struct)``
> -    Specifies the HEVC scaling matrix parameters used for the scaling
> process
> -    for transform coefficients.
> -    These matrix and parameters are defined according to :ref:`hevc`.
> -    They are described in section 7.4.5 "Scaling list data semantics" of
> -    the specification.
> -
> -.. c:type:: v4l2_ctrl_hevc_scaling_matrix
> -
> -.. raw:: latex
> -
> -    \scriptsize
> -
> -.. tabularcolumns:: |p{5.4cm}|p{6.8cm}|p{5.1cm}|
> -
> -.. cssclass:: longtable
> -
> -.. flat-table:: struct v4l2_ctrl_hevc_scaling_matrix
> -    :header-rows:  0
> -    :stub-columns: 0
> -    :widths:       1 1 2
> -
> -    * - __u8
> -      - ``scaling_list_4x4[6][16]``
> -      - Scaling list is used for the scaling process for transform
> -        coefficients. The values on each scaling list are expected
> -        in raster scan order.
> -    * - __u8
> -      - ``scaling_list_8x8[6][64]``
> -      - Scaling list is used for the scaling process for transform
> -        coefficients. The values on each scaling list are expected
> -        in raster scan order.
> -    * - __u8
> -      - ``scaling_list_16x16[6][64]``
> -      - Scaling list is used for the scaling process for transform
> -        coefficients. The values on each scaling list are expected
> -        in raster scan order.
> -    * - __u8
> -      - ``scaling_list_32x32[2][64]``
> -      - Scaling list is used for the scaling process for transform
> -        coefficients. The values on each scaling list are expected
> -        in raster scan order.
> -    * - __u8
> -      - ``scaling_list_dc_coef_16x16[6]``
> -      - Scaling list is used for the scaling process for transform
> -        coefficients. The values on each scaling list are expected
> -        in raster scan order.
> -    * - __u8
> -      - ``scaling_list_dc_coef_32x32[2]``
> -      - Scaling list is used for the scaling process for transform
> -        coefficients. The values on each scaling list are expected
> -        in raster scan order.
> -
> -.. raw:: latex
> -
> -    \normalsize
> -
> -.. c:type:: v4l2_hevc_dpb_entry
> -
> -.. raw:: latex
> -
> -    \small
> -
> -.. tabularcolumns:: |p{1.0cm}|p{4.2cm}|p{12.1cm}|
> -
> -.. flat-table:: struct v4l2_hevc_dpb_entry
> -    :header-rows:  0
> -    :stub-columns: 0
> -    :widths:       1 1 2
> -
> -    * - __u64
> -      - ``timestamp``
> -      - Timestamp of the V4L2 capture buffer to use as reference, used
> -        with B-coded and P-coded frames. The timestamp refers to the
> -    ``timestamp`` field in struct :c:type:`v4l2_buffer`. Use the
> -    :c:func:`v4l2_timeval_to_ns()` function to convert the struct
> -    :c:type:`timeval` in struct :c:type:`v4l2_buffer` to a __u64.
> -    * - __u8
> -      - ``flags``
> -      - Long term flag for the reference frame
> -        (V4L2_HEVC_DPB_ENTRY_LONG_TERM_REFERENCE). The flag is set as
> -        described in the ITU HEVC specification chapter "8.3.2 Decoding
> -        process for reference picture set".
> -    * - __u8
> -      - ``field_pic``
> -      - Whether the reference is a field picture or a frame.
> -        See :ref:`HEVC dpb field pic Flags <hevc_dpb_field_pic_flags>`
> -    * - __s32
> -      - ``pic_order_cnt_val``
> -      - The picture order count of the current picture.
> -    * - __u8
> -      - ``padding[2]``
> -      - Applications and drivers must set this to zero.
> -
> -.. raw:: latex
> -
> -    \normalsize
> -
> -.. _hevc_dpb_field_pic_flags:
> -
> -``HEVC dpb field pic Flags``
> -
> -.. raw:: latex
> -
> -    \scriptsize
> -
> -.. flat-table::
> -    :header-rows:  0
> -    :stub-columns: 0
> -    :widths:       1 1 2
> -
> -    * - ``V4L2_HEVC_SEI_PIC_STRUCT_FRAME``
> -      - 0
> -      - (progressive) Frame
> -    * - ``V4L2_HEVC_SEI_PIC_STRUCT_TOP_FIELD``
> -      - 1
> -      - Top field
> -    * - ``V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_FIELD``
> -      - 2
> -      - Bottom field
> -    * - ``V4L2_HEVC_SEI_PIC_STRUCT_TOP_BOTTOM``
> -      - 3
> -      - Top field, bottom field, in that order
> -    * - ``V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_TOP``
> -      - 4
> -      - Bottom field, top field, in that order
> -    * - ``V4L2_HEVC_SEI_PIC_STRUCT_TOP_BOTTOM_TOP``
> -      - 5
> -      - Top field, bottom field, top field repeated, in that order
> -    * - ``V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_TOP_BOTTOM``
> -      - 6
> -      - Bottom field, top field, bottom field repeated, in that order
> -    * - ``V4L2_HEVC_SEI_PIC_STRUCT_FRAME_DOUBLING``
> -      - 7
> -      - Frame doubling
> -    * - ``V4L2_HEVC_SEI_PIC_STRUCT_FRAME_TRIPLING``
> -      - 8
> -      - Frame tripling
> -    * - ``V4L2_HEVC_SEI_PIC_STRUCT_TOP_PAIRED_PREVIOUS_BOTTOM``
> -      - 9
> -      - Top field paired with previous bottom field in output order
> -    * - ``V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_PAIRED_PREVIOUS_TOP``
> -      - 10
> -      - Bottom field paired with previous top field in output order
> -    * - ``V4L2_HEVC_SEI_PIC_STRUCT_TOP_PAIRED_NEXT_BOTTOM``
> -      - 11
> -      - Top field paired with next bottom field in output order
> -    * - ``V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_PAIRED_NEXT_TOP``
> -      - 12
> -      - Bottom field paired with next top field in output order
> -
> -.. c:type:: v4l2_hevc_pred_weight_table
> -
> -.. raw:: latex
> -
> -    \footnotesize
> -
> -.. tabularcolumns:: |p{0.8cm}|p{10.6cm}|p{5.9cm}|
> -
> -.. flat-table:: struct v4l2_hevc_pred_weight_table
> -    :header-rows:  0
> -    :stub-columns: 0
> -    :widths:       1 1 2
> -
> -    * - __s8
> -      - ``delta_luma_weight_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
> -      - The difference of the weighting factor applied to the luma
> -        prediction value for list 0.
> -    * - __s8
> -      - ``luma_offset_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
> -      - The additive offset applied to the luma prediction value for
> list 0.
> -    * - __s8
> -      - ``delta_chroma_weight_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]``
> -      - The difference of the weighting factor applied to the chroma
> -        prediction value for list 0.
> -    * - __s8
> -      - ``chroma_offset_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]``
> -      - The difference of the additive offset applied to the chroma
> -        prediction values for list 0.
> -    * - __s8
> -      - ``delta_luma_weight_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
> -      - The difference of the weighting factor applied to the luma
> -        prediction value for list 1.
> -    * - __s8
> -      - ``luma_offset_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
> -      - The additive offset applied to the luma prediction value for
> list 1.
> -    * - __s8
> -      - ``delta_chroma_weight_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]``
> -      - The difference of the weighting factor applied to the chroma
> -        prediction value for list 1.
> -    * - __s8
> -      - ``chroma_offset_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]``
> -      - The difference of the additive offset applied to the chroma
> -        prediction values for list 1.
> -    * - __u8
> -      - ``luma_log2_weight_denom``
> -      - The base 2 logarithm of the denominator for all luma weighting
> -        factors.
> -    * - __s8
> -      - ``delta_chroma_log2_weight_denom``
> -      - The difference of the base 2 logarithm of the denominator for
> -        all chroma weighting factors.
> -    * - __u8
> -      - ``padding[6]``
> -      - Applications and drivers must set this to zero.
> -
> -.. raw:: latex
> -
> -    \normalsize
> -
> -``V4L2_CID_STATELESS_HEVC_DECODE_MODE (enum)``
> -    Specifies the decoding mode to use. Currently exposes slice-based
> and
> -    frame-based decoding but new modes might be added later on.
> -    This control is used as a modifier for V4L2_PIX_FMT_HEVC_SLICE
> -    pixel format. Applications that support V4L2_PIX_FMT_HEVC_SLICE
> -    are required to set this control in order to specify the decoding
> mode
> -    that is expected for the buffer.
> -    Drivers may expose a single or multiple decoding modes, depending
> -    on what they can support.
> -
> -    .. note::
> -
> -       This menu control is not yet part of the public kernel API and
> -       it is expected to change.
> -
> -.. c:type:: v4l2_stateless_hevc_decode_mode
> -
> -.. raw:: latex
> -
> -    \small
> -
> -.. tabularcolumns:: |p{9.4cm}|p{0.6cm}|p{7.3cm}|
> -
> -.. flat-table::
> -    :header-rows:  0
> -    :stub-columns: 0
> -    :widths:       1 1 2
> -
> -    * - ``V4L2_STATELESS_HEVC_DECODE_MODE_SLICE_BASED``
> -      - 0
> -      - Decoding is done at the slice granularity.
> -        The OUTPUT buffer must contain a single slice.
> -    * - ``V4L2_STATELESS_HEVC_DECODE_MODE_FRAME_BASED``
> -      - 1
> -      - Decoding is done at the frame granularity.
> -        The OUTPUT buffer must contain all slices needed to decode the
> -        frame. The OUTPUT buffer must also contain both fields.
> -
> -.. raw:: latex
> -
> -    \normalsize
> -
> -``V4L2_CID_STATELESS_HEVC_START_CODE (enum)``
> -    Specifies the HEVC slice start code expected for each slice.
> -    This control is used as a modifier for V4L2_PIX_FMT_HEVC_SLICE
> -    pixel format. Applications that support V4L2_PIX_FMT_HEVC_SLICE
> -    are required to set this control in order to specify the start code
> -    that is expected for the buffer.
> -    Drivers may expose a single or multiple start codes, depending
> -    on what they can support.
> -
> -    .. note::
> -
> -       This menu control is not yet part of the public kernel API and
> -       it is expected to change.
> -
> -.. c:type:: v4l2_stateless_hevc_start_code
> -
> -.. tabularcolumns:: |p{9.2cm}|p{0.6cm}|p{7.5cm}|
> -
> -.. flat-table::
> -    :header-rows:  0
> -    :stub-columns: 0
> -    :widths:       1 1 2
> -
> -    * - ``V4L2_STATELESS_HEVC_START_CODE_NONE``
> -      - 0
> -      - Selecting this value specifies that HEVC slices are passed
> -        to the driver without any start code. The bitstream data
> should be
> -        according to :ref:`hevc` 7.3.1.1 General NAL unit syntax, hence
> -        contains emulation prevention bytes when required.
> -    * - ``V4L2_STATELESS_HEVC_START_CODE_ANNEX_B``
> -      - 1
> -      - Selecting this value specifies that HEVC slices are expected
> -        to be prefixed by Annex B start codes. According to :ref:`hevc`
> -        valid start codes can be 3-bytes 0x000001 or 4-bytes 0x00000001.
> -
> -``V4L2_CID_MPEG_VIDEO_BASELAYER_PRIORITY_ID (integer)``
> -    Specifies a priority identifier for the NAL unit, which will be
> applied to
> -    the base layer. By default this value is set to 0 for the base
> layer,
> -    and the next layer will have the priority ID assigned as 1, 2, 3
> and so on.
> -    The video encoder can't decide the priority id to be applied to a
> layer,
> -    so this has to come from client.
> -    This is applicable to H264 and valid Range is from 0 to 63.
> -    Source Rec. ITU-T H.264 (06/2019); G.7.4.1.1, G.8.8.1.
> -
> -``V4L2_CID_MPEG_VIDEO_LTR_COUNT (integer)``
> -    Specifies the maximum number of Long Term Reference (LTR) frames
> at any
> -    given time that the encoder can keep.
> -    This is applicable to the H264 and HEVC encoders.
> -
> -``V4L2_CID_MPEG_VIDEO_FRAME_LTR_INDEX (integer)``
> -    After setting this control the frame that will be queued next
> -    will be marked as a Long Term Reference (LTR) frame
> -    and given this LTR index which ranges from 0 to LTR_COUNT-1.
> -    This is applicable to the H264 and HEVC encoders.
> -    Source Rec. ITU-T H.264 (06/2019); Table 7.9
> -
> -``V4L2_CID_MPEG_VIDEO_USE_LTR_FRAMES (bitmask)``
> -    Specifies the Long Term Reference (LTR) frame(s) to be used for
> -    encoding the next frame queued after setting this control.
> -    This provides a bitmask which consists of bits [0, LTR_COUNT-1].
> -    This is applicable to the H264 and HEVC encoders.
> -
> -``V4L2_CID_STATELESS_HEVC_DECODE_PARAMS (struct)``
> -    Specifies various decode parameters, especially the references
> picture order
> -    count (POC) for all the lists (short, long, before, current,
> after) and the
> -    number of entries for each of them.
> -    These parameters are defined according to :ref:`hevc`.
> -    They are described in section 8.3 "Slice decoding process" of the
> -    specification.
> -
> -.. c:type:: v4l2_ctrl_hevc_decode_params
> -
> -.. cssclass:: longtable
> -
> -.. flat-table:: struct v4l2_ctrl_hevc_decode_params
> -    :header-rows:  0
> -    :stub-columns: 0
> -    :widths:       1 1 2
> -
> -    * - __s32
> -      - ``pic_order_cnt_val``
> -      - PicOrderCntVal as described in section 8.3.1 "Decoding process
> -        for picture order count" of the specification.
> -    * - __u8
> -      - ``num_active_dpb_entries``
> -      - The number of entries in ``dpb``.
> -    * - __u8
> -      - ``num_poc_st_curr_before``
> -      - The number of reference pictures in the short-term set that
> come before
> -        the current frame.
> -    * - __u8
> -      - ``num_poc_st_curr_after``
> -      - The number of reference pictures in the short-term set that
> come after
> -        the current frame.
> -    * - __u8
> -      - ``num_poc_lt_curr``
> -      - The number of reference pictures in the long-term set.
> -    * - __u8
> -      - ``poc_st_curr_before[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
> -      - PocStCurrBefore as described in section 8.3.2 "Decoding
> process for reference
> -        picture set": provides the index of the short term before
> references in DPB array.
> -    * - __u8
> -      - ``poc_st_curr_after[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
> -      - PocStCurrAfter as described in section 8.3.2 "Decoding
> process for reference
> -        picture set": provides the index of the short term after
> references in DPB array.
> -    * - __u8
> -      - ``poc_lt_curr[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
> -      - PocLtCurr as described in section 8.3.2 "Decoding process for
> reference
> -        picture set": provides the index of the long term references
> in DPB array.
> -    * - struct :c:type:`v4l2_hevc_dpb_entry`
> -      - ``dpb[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
> -      - The decoded picture buffer, for meta-data about reference
> frames.
> -    * - __u64
> -      - ``flags``
> -      - See :ref:`Decode Parameters Flags <hevc_decode_params_flags>`
> -
> -.. _hevc_decode_params_flags:
> -
> -``Decode Parameters Flags``
> -
> -.. cssclass:: longtable
> -
> -.. flat-table::
> -    :header-rows:  0
> -    :stub-columns: 0
> -    :widths:       1 1 2
> -
> -    * - ``V4L2_HEVC_DECODE_PARAM_FLAG_IRAP_PIC``
> -      - 0x00000001
> -      -
> -    * - ``V4L2_HEVC_DECODE_PARAM_FLAG_IDR_PIC``
> -      - 0x00000002
> -      -
> -    * - ``V4L2_HEVC_DECODE_PARAM_FLAG_NO_OUTPUT_OF_PRIOR``
> -      - 0x00000004
> -      -
> diff --git
> a/Documentation/userspace-api/media/v4l/pixfmt-compressed.rst
> b/Documentation/userspace-api/media/v4l/pixfmt-compressed.rst
> index c352d91a73d8..506dd3c98884 100644
> --- a/Documentation/userspace-api/media/v4l/pixfmt-compressed.rst
> +++ b/Documentation/userspace-api/media/v4l/pixfmt-compressed.rst
> @@ -212,7 +212,7 @@ Compressed Formats
>          ``V4L2_CID_MPEG_VIDEO_HEVC_SPS``,
>          ``V4L2_CID_MPEG_VIDEO_HEVC_PPS``, and
>          ``V4L2_CID_MPEG_VIDEO_HEVC_SLICE_PARAMS``.
> -    See the :ref:`associated Codec Control IDs <v4l2-mpeg-hevc>`.
> +    See the :ref:`associated Codec Control IDs
> <v4l2-codec-stateless-hevc>`.
>      Buffers associated with this pixel format must contain the
> appropriate
>      number of macroblocks to decode a full corresponding frame.
>      * .. _V4L2-PIX-FMT-FWHT:
> diff --git
> a/Documentation/userspace-api/media/v4l/vidioc-g-ext-ctrls.rst
> b/Documentation/userspace-api/media/v4l/vidioc-g-ext-ctrls.rst
> index 29971a45a2d4..892cfeb8b988 100644
> --- a/Documentation/userspace-api/media/v4l/vidioc-g-ext-ctrls.rst
> +++ b/Documentation/userspace-api/media/v4l/vidioc-g-ext-ctrls.rst
> @@ -249,6 +249,26 @@ still cause this situation.
>        - ``p_hdr10_mastering``
>        - A pointer to a struct
> :c:type:`v4l2_ctrl_hdr10_mastering_display`. Valid if this control is
>          of type ``V4L2_CTRL_TYPE_HDR10_MASTERING_DISPLAY``.
> +    * - struct :c:type:`v4l2_ctrl_hevc_sps` *
> +      - ``p_hevc_sps``
> +      - A pointer to a struct :c:type:`v4l2_ctrl_hevc_sps`. Valid if
> this
> +        control is of type ``V4L2_CTRL_TYPE_HEVC_SPS``.
> +    * - struct :c:type:`v4l2_ctrl_hevc_pps` *
> +      - ``p_hevc_pps``
> +      - A pointer to a struct :c:type:`v4l2_ctrl_hevc_pps`. Valid if
> this
> +        control is of type ``V4L2_CTRL_TYPE_HEVC_PPS``.
> +    * - struct :c:type:`v4l2_ctrl_hevc_slice_params` *
> +      - ``p_hevc_slice_params``
> +      - A pointer to a struct :c:type:`v4l2_ctrl_hevc_slice_params`.
> Valid if this
> +        control is of type ``V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS``.
> +    * - struct :c:type:`v4l2_ctrl_hevc_scaling_matrix` *
> +      - ``p_hevc_scaling_matrix``
> +      - A pointer to a struct
> :c:type:`v4l2_ctrl_hevc_scaling_matrix`. Valid if this
> +        control is of type ``V4L2_CTRL_TYPE_HEVC_SCALING_MATRIX``.
> +    * - struct :c:type:`v4l2_ctrl_hevc_decode_params` *
> +      - ``p_hevc_decode_params``
> +      - A pointer to a struct :c:type:`v4l2_ctrl_hevc_decode_params`.
> Valid if this
> +        control is of type ``V4L2_CTRL_TYPE_HEVC_DECODE_PARAMS``.
>      * - void *
>        - ``ptr``
>        - A pointer to a compound type which can be an N-dimensional array
> diff --git a/include/media/hevc-ctrls.h b/include/media/hevc-ctrls.h
> deleted file mode 100644
> index d0a8032f744a..000000000000
> --- a/include/media/hevc-ctrls.h
> +++ /dev/null
> @@ -1,465 +0,0 @@
> -/* SPDX-License-Identifier: GPL-2.0 */
> -/*
> - * These are the HEVC state controls for use with stateless HEVC
> - * codec drivers.
> - *
> - * It turns out that these structs are not stable yet and will undergo
> - * more changes. So keep them private until they are stable and ready to
> - * become part of the official public API.
> - */
> -
> -#ifndef _HEVC_CTRLS_H_
> -#define _HEVC_CTRLS_H_
> -
> -#include <linux/videodev2.h>
> -
> -#define V4L2_CID_STATELESS_HEVC_SPS        (V4L2_CID_CODEC_BASE + 1008)
> -#define V4L2_CID_STATELESS_HEVC_PPS        (V4L2_CID_CODEC_BASE + 1009)
> -#define V4L2_CID_STATELESS_HEVC_SLICE_PARAMS (V4L2_CID_CODEC_BASE +
> 1010)
> -#define V4L2_CID_STATELESS_HEVC_SCALING_MATRIX (V4L2_CID_CODEC_BASE +
> 1011)
> -#define V4L2_CID_STATELESS_HEVC_DECODE_PARAMS (V4L2_CID_CODEC_BASE +
> 1012)
> -#define V4L2_CID_STATELESS_HEVC_DECODE_MODE (V4L2_CID_CODEC_BASE + 1015)
> -#define V4L2_CID_STATELESS_HEVC_START_CODE (V4L2_CID_CODEC_BASE + 1016)
> -#define V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS
> (V4L2_CID_CODEC_BASE + 1017)
> -
> -enum v4l2_stateless_hevc_decode_mode {
> -    V4L2_STATELESS_HEVC_DECODE_MODE_SLICE_BASED,
> -    V4L2_STATELESS_HEVC_DECODE_MODE_FRAME_BASED,
> -};
> -
> -enum v4l2_stateless_hevc_start_code {
> -    V4L2_STATELESS_HEVC_START_CODE_NONE,
> -    V4L2_STATELESS_HEVC_START_CODE_ANNEX_B,
> -};
> -
> -#define V4L2_HEVC_SLICE_TYPE_B    0
> -#define V4L2_HEVC_SLICE_TYPE_P    1
> -#define V4L2_HEVC_SLICE_TYPE_I    2
> -
> -#define V4L2_HEVC_SPS_FLAG_SEPARATE_COLOUR_PLANE        (1ULL << 0)
> -#define V4L2_HEVC_SPS_FLAG_SCALING_LIST_ENABLED            (1ULL << 1)
> -#define V4L2_HEVC_SPS_FLAG_AMP_ENABLED                (1ULL << 2)
> -#define V4L2_HEVC_SPS_FLAG_SAMPLE_ADAPTIVE_OFFSET        (1ULL << 3)
> -#define V4L2_HEVC_SPS_FLAG_PCM_ENABLED                (1ULL << 4)
> -#define V4L2_HEVC_SPS_FLAG_PCM_LOOP_FILTER_DISABLED        (1ULL << 5)
> -#define V4L2_HEVC_SPS_FLAG_LONG_TERM_REF_PICS_PRESENT (1ULL << 6)
> -#define V4L2_HEVC_SPS_FLAG_SPS_TEMPORAL_MVP_ENABLED        (1ULL << 7)
> -#define V4L2_HEVC_SPS_FLAG_STRONG_INTRA_SMOOTHING_ENABLED (1ULL << 8)
> -
> -/**
> - * struct v4l2_ctrl_hevc_sps - ITU-T Rec. H.265: Sequence parameter set
> - *
> - * @video_parameter_set_id: specifies the value of the
> - *                vps_video_parameter_set_id of the active VPS
> - * @seq_parameter_set_id: provides an identifier for the SPS for
> - *              reference by other syntax elements
> - * @pic_width_in_luma_samples: specifies the width of each decoded
> picture
> - *                   in units of luma samples
> - * @pic_height_in_luma_samples: specifies the height of each decoded
> picture
> - *                in units of luma samples
> - * @bit_depth_luma_minus8: specifies the bit depth of the samples of the
> - *               luma array
> - * @bit_depth_chroma_minus8: specifies the bit depth of the samples
> of the
> - *                 chroma arrays
> - * @log2_max_pic_order_cnt_lsb_minus4: specifies the value of the
> variable
> - *                       MaxPicOrderCntLsb
> - * @sps_max_dec_pic_buffering_minus1: plus 1 specifies the maximum
> required
> - *                      size of the decoded picture buffer for
> - *                      the CVS
> - * @sps_max_num_reorder_pics: indicates the maximum allowed number of
> pictures
> - * @sps_max_latency_increase_plus1: not equal to 0 is used to compute
> the
> - *                    value of SpsMaxLatencyPictures[i]
> - * @log2_min_luma_coding_block_size_minus3: plus 3 specifies the minimum
> - *                        luma coding block size
> - * @log2_diff_max_min_luma_coding_block_size: specifies the
> difference between
> - *                          the maximum and minimum luma
> - *                          coding block size
> - * @log2_min_luma_transform_block_size_minus2: plus 2 specifies the
> minimum luma
> - *                           transform block size
> - * @log2_diff_max_min_luma_transform_block_size: specifies the
> difference between
> - *                         the maximum and minimum luma
> - *                         transform block size
> - * @max_transform_hierarchy_depth_inter: specifies the maximum hierarchy
> - *                     depth for transform units of
> - *                     coding units coded in inter
> - *                     prediction mode
> - * @max_transform_hierarchy_depth_intra: specifies the maximum hierarchy
> - *                     depth for transform units of
> - *                     coding units coded in intra
> - *                     prediction mode
> - * @pcm_sample_bit_depth_luma_minus1: specifies the number of bits
> used to
> - *                      represent each of PCM sample values of the
> - *                      luma component
> - * @pcm_sample_bit_depth_chroma_minus1: specifies the number of bits
> used to
> - *                    represent each of PCM sample values of
> - *                    the chroma components
> - * @log2_min_pcm_luma_coding_block_size_minus3: plus 3 specifies the
> minimum size
> - *                        of coding blocks
> - * @log2_diff_max_min_pcm_luma_coding_block_size: specifies the
> difference between
> - *                          the maximum and minimum size of
> - *                          coding blocks
> - * @num_short_term_ref_pic_sets: specifies the number of
> st_ref_pic_set()
> - *                 syntax structures included in the SPS
> - * @num_long_term_ref_pics_sps:    specifies the number of candidate
> long-term
> - *                reference pictures that are specified in the SPS
> - * @chroma_format_idc: specifies the chroma sampling
> - * @sps_max_sub_layers_minus1: plus 1 specifies the maximum number of
> temporal
> - *                   sub-layers
> - * @flags: see V4L2_HEVC_SPS_FLAG_{}
> - */
> -struct v4l2_ctrl_hevc_sps {
> -    __u8    video_parameter_set_id;
> -    __u8    seq_parameter_set_id;
> -    __u16    pic_width_in_luma_samples;
> -    __u16    pic_height_in_luma_samples;
> -    __u8    bit_depth_luma_minus8;
> -    __u8    bit_depth_chroma_minus8;
> -    __u8    log2_max_pic_order_cnt_lsb_minus4;
> -    __u8    sps_max_dec_pic_buffering_minus1;
> -    __u8    sps_max_num_reorder_pics;
> -    __u8    sps_max_latency_increase_plus1;
> -    __u8    log2_min_luma_coding_block_size_minus3;
> -    __u8    log2_diff_max_min_luma_coding_block_size;
> -    __u8    log2_min_luma_transform_block_size_minus2;
> -    __u8    log2_diff_max_min_luma_transform_block_size;
> -    __u8    max_transform_hierarchy_depth_inter;
> -    __u8    max_transform_hierarchy_depth_intra;
> -    __u8    pcm_sample_bit_depth_luma_minus1;
> -    __u8    pcm_sample_bit_depth_chroma_minus1;
> -    __u8    log2_min_pcm_luma_coding_block_size_minus3;
> -    __u8    log2_diff_max_min_pcm_luma_coding_block_size;
> -    __u8    num_short_term_ref_pic_sets;
> -    __u8    num_long_term_ref_pics_sps;
> -    __u8    chroma_format_idc;
> -    __u8    sps_max_sub_layers_minus1;
> -
> -    __u8    padding[6];
> -    __u64    flags;
> -    __u8    reserved[24];
> -};
> -
> -#define V4L2_HEVC_PPS_FLAG_DEPENDENT_SLICE_SEGMENT_ENABLED (1ULL << 0)
> -#define V4L2_HEVC_PPS_FLAG_OUTPUT_FLAG_PRESENT            (1ULL << 1)
> -#define V4L2_HEVC_PPS_FLAG_SIGN_DATA_HIDING_ENABLED        (1ULL << 2)
> -#define V4L2_HEVC_PPS_FLAG_CABAC_INIT_PRESENT            (1ULL << 3)
> -#define V4L2_HEVC_PPS_FLAG_CONSTRAINED_INTRA_PRED        (1ULL << 4)
> -#define V4L2_HEVC_PPS_FLAG_TRANSFORM_SKIP_ENABLED        (1ULL << 5)
> -#define V4L2_HEVC_PPS_FLAG_CU_QP_DELTA_ENABLED            (1ULL << 6)
> -#define V4L2_HEVC_PPS_FLAG_PPS_SLICE_CHROMA_QP_OFFSETS_PRESENT (1ULL
> << 7)
> -#define V4L2_HEVC_PPS_FLAG_WEIGHTED_PRED            (1ULL << 8)
> -#define V4L2_HEVC_PPS_FLAG_WEIGHTED_BIPRED            (1ULL << 9)
> -#define V4L2_HEVC_PPS_FLAG_TRANSQUANT_BYPASS_ENABLED        (1ULL << 10)
> -#define V4L2_HEVC_PPS_FLAG_TILES_ENABLED            (1ULL << 11)
> -#define V4L2_HEVC_PPS_FLAG_ENTROPY_CODING_SYNC_ENABLED (1ULL << 12)
> -#define V4L2_HEVC_PPS_FLAG_LOOP_FILTER_ACROSS_TILES_ENABLED (1ULL << 13)
> -#define V4L2_HEVC_PPS_FLAG_PPS_LOOP_FILTER_ACROSS_SLICES_ENABLED
> (1ULL << 14)
> -#define V4L2_HEVC_PPS_FLAG_DEBLOCKING_FILTER_OVERRIDE_ENABLED (1ULL
> << 15)
> -#define V4L2_HEVC_PPS_FLAG_PPS_DISABLE_DEBLOCKING_FILTER    (1ULL << 16)
> -#define V4L2_HEVC_PPS_FLAG_LISTS_MODIFICATION_PRESENT (1ULL << 17)
> -#define V4L2_HEVC_PPS_FLAG_SLICE_SEGMENT_HEADER_EXTENSION_PRESENT
> (1ULL << 18)
> -#define V4L2_HEVC_PPS_FLAG_DEBLOCKING_FILTER_CONTROL_PRESENT (1ULL <<
> 19)
> -#define V4L2_HEVC_PPS_FLAG_UNIFORM_SPACING            (1ULL << 20)
> -
> -/**
> - * struct v4l2_ctrl_hevc_pps - ITU-T Rec. H.265: Picture parameter set
> - *
> - * @pic_parameter_set_id: identifies the PPS for reference by other
> - *              syntax elements
> - * @num_extra_slice_header_bits: specifies the number of extra slice
> header
> - *                 bits that are present in the slice header RBSP
> - *                 for coded pictures referring to the PPS.
> - * @num_ref_idx_l0_default_active_minus1: specifies the inferred
> value of
> - *                      num_ref_idx_l0_active_minus1
> - * @num_ref_idx_l1_default_active_minus1: specifies the inferred
> value of
> - *                      num_ref_idx_l1_active_minus1
> - * @init_qp_minus26: plus 26 specifies the initial value of SliceQp Y
> for
> - *             each slice referring to the PPS
> - * @diff_cu_qp_delta_depth: specifies the difference between the luma
> coding
> - *                tree block size and the minimum luma coding block
> - *                size of coding units that convey cu_qp_delta_abs
> - *                and cu_qp_delta_sign_flag
> - * @pps_cb_qp_offset: specify the offsets to the luma quantization
> parameter Cb
> - * @pps_cr_qp_offset: specify the offsets to the luma quantization
> parameter Cr
> - * @num_tile_columns_minus1: plus 1 specifies the number of tile columns
> - *                 partitioning the picture
> - * @num_tile_rows_minus1: plus 1 specifies the number of tile rows
> partitioning
> - *              the picture
> - * @column_width_minus1: plus 1 specifies the width of the i-th tile
> column in
> - *             units of coding tree blocks
> - * @row_height_minus1: plus 1 specifies the height of the i-th tile
> row in
> - *               units of coding tree blocks
> - * @pps_beta_offset_div2: specify the default deblocking parameter
> offsets for
> - *              beta divided by 2
> - * @pps_tc_offset_div2: specify the default deblocking parameter
> offsets for tC
> - *            divided by 2
> - * @log2_parallel_merge_level_minus2: plus 2 specifies the value of
> the variable
> - *                      Log2ParMrgLevel
> - * @flags: see V4L2_HEVC_PPS_FLAG_{}
> - */
> -struct v4l2_ctrl_hevc_pps {
> -    __u8    pic_parameter_set_id;
> -    __u8    num_extra_slice_header_bits;
> -    __u8    num_ref_idx_l0_default_active_minus1;
> -    __u8    num_ref_idx_l1_default_active_minus1;
> -    __s8    init_qp_minus26;
> -    __u8    diff_cu_qp_delta_depth;
> -    __s8    pps_cb_qp_offset;
> -    __s8    pps_cr_qp_offset;
> -    __u8    num_tile_columns_minus1;
> -    __u8    num_tile_rows_minus1;
> -    __u8    column_width_minus1[20];
> -    __u8    row_height_minus1[22];
> -    __s8    pps_beta_offset_div2;
> -    __s8    pps_tc_offset_div2;
> -    __u8    log2_parallel_merge_level_minus2;
> -    __u8    padding[9];
> -
> -    __u64    flags;
> -    __u8    reserved[56];
> -};
> -
> -#define V4L2_HEVC_DPB_ENTRY_LONG_TERM_REFERENCE    0x01
> -
> -#define V4L2_HEVC_SEI_PIC_STRUCT_FRAME                0
> -#define V4L2_HEVC_SEI_PIC_STRUCT_TOP_FIELD            1
> -#define V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_FIELD            2
> -#define V4L2_HEVC_SEI_PIC_STRUCT_TOP_BOTTOM            3
> -#define V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_TOP            4
> -#define V4L2_HEVC_SEI_PIC_STRUCT_TOP_BOTTOM_TOP            5
> -#define V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_TOP_BOTTOM        6
> -#define V4L2_HEVC_SEI_PIC_STRUCT_FRAME_DOUBLING            7
> -#define V4L2_HEVC_SEI_PIC_STRUCT_FRAME_TRIPLING            8
> -#define V4L2_HEVC_SEI_PIC_STRUCT_TOP_PAIRED_PREVIOUS_BOTTOM    9
> -#define V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_PAIRED_PREVIOUS_TOP    10
> -#define V4L2_HEVC_SEI_PIC_STRUCT_TOP_PAIRED_NEXT_BOTTOM        11
> -#define V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_PAIRED_NEXT_TOP        12
> -
> -#define V4L2_HEVC_DPB_ENTRIES_NUM_MAX        16
> -
> -/**
> - * struct v4l2_hevc_dpb_entry - HEVC decoded picture buffer entry
> - *
> - * @timestamp: timestamp of the V4L2 capture buffer to use as reference.
> - * @flags: long term flag for the reference frame
> - * @field_pic: whether the reference is a field picture or a frame.
> - * @pic_order_cnt_val: the picture order count of the reference.
> - */
> -struct v4l2_hevc_dpb_entry {
> -    __u64    timestamp;
> -    __u8    flags;
> -    __u8    field_pic;
> -    __s32    pic_order_cnt_val;
> -    __u8    padding[2];
> -};
> -
> -/**
> - * struct v4l2_hevc_pred_weight_table - HEVC weighted prediction
> parameters
> - *
> - * @delta_luma_weight_l0: the difference of the weighting factor applied
> - *              to the luma prediction value for list 0
> - * @luma_offset_l0: the additive offset applied to the luma
> prediction value
> - *            for list 0
> - * @delta_chroma_weight_l0: the difference of the weighting factor
> applied
> - *                to the chroma prediction values for list 0
> - * @chroma_offset_l0: the difference of the additive offset applied to
> - *              the chroma prediction values for list 0
> - * @delta_luma_weight_l1: the difference of the weighting factor applied
> - *              to the luma prediction value for list 1
> - * @luma_offset_l1: the additive offset applied to the luma
> prediction value
> - *            for list 1
> - * @delta_chroma_weight_l1: the difference of the weighting factor
> applied
> - *                to the chroma prediction values for list 1
> - * @chroma_offset_l1: the difference of the additive offset applied to
> - *              the chroma prediction values for list 1
> - * @luma_log2_weight_denom: the base 2 logarithm of the denominator for
> - *                all luma weighting factors
> - * @delta_chroma_log2_weight_denom: the difference of the base 2
> logarithm
> - *                    of the denominator for all chroma
> - *                    weighting factors
> - */
> -struct v4l2_hevc_pred_weight_table {
> -    __s8    delta_luma_weight_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
> -    __s8    luma_offset_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
> -    __s8 delta_chroma_weight_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2];
> -    __s8    chroma_offset_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2];
> -
> -    __s8    delta_luma_weight_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
> -    __s8    luma_offset_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
> -    __s8 delta_chroma_weight_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2];
> -    __s8    chroma_offset_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2];
> -
> -    __u8    luma_log2_weight_denom;
> -    __s8    delta_chroma_log2_weight_denom;
> -};
> -
> -#define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_SAO_LUMA        (1ULL << 0)
> -#define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_SAO_CHROMA        (1ULL << 1)
> -#define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_TEMPORAL_MVP_ENABLED (1ULL
> << 2)
> -#define V4L2_HEVC_SLICE_PARAMS_FLAG_MVD_L1_ZERO            (1ULL << 3)
> -#define V4L2_HEVC_SLICE_PARAMS_FLAG_CABAC_INIT            (1ULL << 4)
> -#define V4L2_HEVC_SLICE_PARAMS_FLAG_COLLOCATED_FROM_L0 (1ULL << 5)
> -#define V4L2_HEVC_SLICE_PARAMS_FLAG_USE_INTEGER_MV        (1ULL << 6)
> -#define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_DEBLOCKING_FILTER_DISABLED
> (1ULL << 7)
> -#define
> V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_LOOP_FILTER_ACROSS_SLICES_ENABLED
> (1ULL << 8)
> -#define V4L2_HEVC_SLICE_PARAMS_FLAG_DEPENDENT_SLICE_SEGMENT (1ULL << 9)
> -
> -/**
> - * v4l2_ctrl_hevc_slice_params - HEVC slice parameters
> - *
> - * This control is a dynamically sized 1-dimensional array,
> - * V4L2_CTRL_FLAG_DYNAMIC_ARRAY flag must be set when using it.
> - *
> - * @bit_size: size (in bits) of the current slice data
> - * @data_byte_offset: offset (in bytes) to the video data in the
> current slice data
> - * @num_entry_point_offsets: specifies the number of entry point
> offset syntax
> - *                 elements in the slice header.
> - * @nal_unit_type: specifies the coding type of the slice (B, P or I)
> - * @nuh_temporal_id_plus1: minus 1 specifies a temporal identifier
> for the NAL unit
> - * @slice_type: see V4L2_HEVC_SLICE_TYPE_{}
> - * @colour_plane_id: specifies the colour plane associated with the
> current slice
> - * @slice_pic_order_cnt: specifies the picture order count
> - * @num_ref_idx_l0_active_minus1: specifies the maximum reference
> index for
> - *                  reference picture list 0 that may be used to decode
> - *                  the slice
> - * @num_ref_idx_l1_active_minus1: specifies the maximum reference
> index for
> - *                  reference picture list 1 that may be used to decode
> - *                  the slice
> - * @collocated_ref_idx: specifies the reference index of the
> collocated picture used
> - *            for temporal motion vector prediction
> - * @five_minus_max_num_merge_cand: specifies the maximum number of
> merging
> - *                   motion vector prediction candidates supported in
> - *                   the slice subtracted from 5
> - * @slice_qp_delta: specifies the initial value of QpY to be used for
> the coding
> - *            blocks in the slice
> - * @slice_cb_qp_offset: specifies a difference to be added to the
> value of pps_cb_qp_offset
> - * @slice_cr_qp_offset: specifies a difference to be added to the
> value of pps_cr_qp_offset
> - * @slice_act_y_qp_offset: screen content extension parameters
> - * @slice_act_cb_qp_offset: screen content extension parameters
> - * @slice_act_cr_qp_offset: screen content extension parameters
> - * @slice_beta_offset_div2: specify the deblocking parameter offsets
> for beta divided by 2
> - * @slice_tc_offset_div2: specify the deblocking parameter offsets
> for tC divided by 2
> - * @pic_struct: indicates whether a picture should be displayed as a
> frame or as one or
> - *        more fields
> - * @slice_segment_addr: specifies the address of the first coding
> tree block in
> - *            the slice segment
> - * @ref_idx_l0: the list of L0 reference elements as indices in the DPB
> - * @ref_idx_l1: the list of L1 reference elements as indices in the DPB
> - * @short_term_ref_pic_set_size: specifies the size of short-term
> reference
> - *                 pictures included in the SPS
> - * @long_term_ref_pic_set_size: specifies the size of long-term
> reference
> - *                picture include in the SPS
> - * @pred_weight_table: the prediction weight coefficients for
> inter-picture
> - *               prediction
> - * @flags: see V4L2_HEVC_SLICE_PARAMS_FLAG_{}
> - */
> -struct v4l2_ctrl_hevc_slice_params {
> -    __u32    bit_size;
> -    __u32    data_byte_offset;
> -    __u32    num_entry_point_offsets;
> -    /* ISO/IEC 23008-2, ITU-T Rec. H.265: NAL unit header */
> -    __u8    nal_unit_type;
> -    __u8    nuh_temporal_id_plus1;
> -
> -    /* ISO/IEC 23008-2, ITU-T Rec. H.265: General slice segment
> header */
> -    __u8    slice_type;
> -    __u8    colour_plane_id;
> -    __u16    slice_pic_order_cnt;
> -    __u8    num_ref_idx_l0_active_minus1;
> -    __u8    num_ref_idx_l1_active_minus1;
> -    __u8    collocated_ref_idx;
> -    __u8    five_minus_max_num_merge_cand;
> -    __s8    slice_qp_delta;
> -    __s8    slice_cb_qp_offset;
> -    __s8    slice_cr_qp_offset;
> -    __s8    slice_act_y_qp_offset;
> -    __s8    slice_act_cb_qp_offset;
> -    __s8    slice_act_cr_qp_offset;
> -    __s8    slice_beta_offset_div2;
> -    __s8    slice_tc_offset_div2;
> -
> -    /* ISO/IEC 23008-2, ITU-T Rec. H.265: Picture timing SEI message */
> -    __u8    pic_struct;
> -
> -    __u8    reserved;
> -    /* ISO/IEC 23008-2, ITU-T Rec. H.265: General slice segment
> header */
> -    __u32    slice_segment_addr;
> -    __u8    ref_idx_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
> -    __u8    ref_idx_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
> -    __u16    short_term_ref_pic_set_size;
> -    __u16    long_term_ref_pic_set_size;
> -
> -    /* ISO/IEC 23008-2, ITU-T Rec. H.265: Weighted prediction
> parameter */
> -    struct v4l2_hevc_pred_weight_table pred_weight_table;
> -
> -    __u8    reserved1[6];
> -    __u64    flags;
> -    __u8    padding[40];
> -};
> -
> -#define V4L2_HEVC_DECODE_PARAM_FLAG_IRAP_PIC        0x1
> -#define V4L2_HEVC_DECODE_PARAM_FLAG_IDR_PIC        0x2
> -#define V4L2_HEVC_DECODE_PARAM_FLAG_NO_OUTPUT_OF_PRIOR  0x4
> -
> -/**
> - * struct v4l2_ctrl_hevc_decode_params - HEVC decode parameters
> - *
> - * @pic_order_cnt_val: picture order count
> - * @num_active_dpb_entries: the number of entries in dpb
> - * @num_poc_st_curr_before: the number of reference pictures in the
> short-term
> - *                set that come before the current frame
> - * @num_poc_st_curr_after: the number of reference pictures in the
> short-term
> - *               set that come after the current frame
> - * @num_poc_lt_curr: the number of reference pictures in the
> long-term set
> - * @poc_st_curr_before: provides the index of the short term before
> references
> - *            in DPB array
> - * @poc_st_curr_after: provides the index of the short term after
> references
> - *               in DPB array
> - * @poc_lt_curr: provides the index of the long term references in
> DPB array
> - * @dpb: the decoded picture buffer, for meta-data about reference
> frames
> - * @flags: see V4L2_HEVC_DECODE_PARAM_FLAG_{}
> - */
> -struct v4l2_ctrl_hevc_decode_params {
> -    __s32    pic_order_cnt_val;
> -    __u8    num_active_dpb_entries;
> -    __u8    num_poc_st_curr_before;
> -    __u8    num_poc_st_curr_after;
> -    __u8    num_poc_lt_curr;
> -    __u8    poc_st_curr_before[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
> -    __u8    poc_st_curr_after[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
> -    __u8    poc_lt_curr[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
> -    struct    v4l2_hevc_dpb_entry dpb[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
> -    __u64    flags;
> -};
> -
> -/**
> - * struct v4l2_ctrl_hevc_scaling_matrix - HEVC scaling lists parameters
> - *
> - * @scaling_list_4x4: scaling list is used for the scaling process for
> - *              transform coefficients. The values on each scaling
> - *              list are expected in raster scan order
> - * @scaling_list_8x8: scaling list is used for the scaling process for
> - *              transform coefficients. The values on each scaling
> - *              list are expected in raster scan order
> - * @scaling_list_16x16: scaling list is used for the scaling process for
> - *            transform coefficients. The values on each scaling
> - *            list are expected in raster scan order
> - * @scaling_list_32x32:    scaling list is used for the scaling
> process for
> - *            transform coefficients. The values on each scaling
> - *            list are expected in raster scan order
> - * @scaling_list_dc_coef_16x16: scaling list is used for the scaling
> process
> - *                for transform coefficients. The values on each
> - *                scaling list are expected in raster scan order.
> - * @scaling_list_dc_coef_32x32:    scaling list is used for the
> scaling process
> - *                for transform coefficients. The values on each
> - *                scaling list are expected in raster scan order.
> - */
> -struct v4l2_ctrl_hevc_scaling_matrix {
> -    __u8    scaling_list_4x4[6][16];
> -    __u8    scaling_list_8x8[6][64];
> -    __u8    scaling_list_16x16[6][64];
> -    __u8    scaling_list_32x32[2][64];
> -    __u8    scaling_list_dc_coef_16x16[6];
> -    __u8    scaling_list_dc_coef_32x32[2];
> -};
> -
> -#endif
> diff --git a/include/media/v4l2-ctrls.h b/include/media/v4l2-ctrls.h
> index f4105de8a8d2..00828a4f9404 100644
> --- a/include/media/v4l2-ctrls.h
> +++ b/include/media/v4l2-ctrls.h
> @@ -13,12 +13,6 @@
>  #include <linux/videodev2.h>
>  #include <media/media-request.h>
>
> -/*
> - * Include the stateless codec compound control definitions.
> - * This will move to the public headers once this API is fully stable.
> - */
> -#include <media/hevc-ctrls.h>
> -
>  /* forward references */
>  struct file;
>  struct poll_table_struct;
> diff --git a/include/uapi/linux/v4l2-controls.h
> b/include/uapi/linux/v4l2-controls.h
> index 17c6df3e9c0b..d3521ae2296b 100644
> --- a/include/uapi/linux/v4l2-controls.h
> +++ b/include/uapi/linux/v4l2-controls.h
> @@ -1997,6 +1997,454 @@ struct v4l2_ctrl_mpeg2_quantisation {
>      __u8    chroma_non_intra_quantiser_matrix[64];
>  };
>
> +#define V4L2_CID_STATELESS_HEVC_SPS (V4L2_CID_CODEC_STATELESS_BASE +
> 400)
> +#define V4L2_CID_STATELESS_HEVC_PPS (V4L2_CID_CODEC_STATELESS_BASE +
> 401)
> +#define V4L2_CID_STATELESS_HEVC_SLICE_PARAMS
> (V4L2_CID_CODEC_STATELESS_BASE + 402)
> +#define V4L2_CID_STATELESS_HEVC_SCALING_MATRIX
> (V4L2_CID_CODEC_STATELESS_BASE + 403)
> +#define V4L2_CID_STATELESS_HEVC_DECODE_PARAMS
> (V4L2_CID_CODEC_STATELESS_BASE + 404)
> +#define V4L2_CID_STATELESS_HEVC_DECODE_MODE
> (V4L2_CID_CODEC_STATELESS_BASE + 405)
> +#define V4L2_CID_STATELESS_HEVC_START_CODE
> (V4L2_CID_CODEC_STATELESS_BASE + 406)
> +#define V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS
> (V4L2_CID_CODEC_STATELESS_BASE + 407)
> +
> +enum v4l2_stateless_hevc_decode_mode {
> +    V4L2_STATELESS_HEVC_DECODE_MODE_SLICE_BASED,
> +    V4L2_STATELESS_HEVC_DECODE_MODE_FRAME_BASED,
> +};
> +
> +enum v4l2_stateless_hevc_start_code {
> +    V4L2_STATELESS_HEVC_START_CODE_NONE,
> +    V4L2_STATELESS_HEVC_START_CODE_ANNEX_B,
> +};
> +
> +#define V4L2_HEVC_SLICE_TYPE_B    0
> +#define V4L2_HEVC_SLICE_TYPE_P    1
> +#define V4L2_HEVC_SLICE_TYPE_I    2
> +
> +#define V4L2_HEVC_SPS_FLAG_SEPARATE_COLOUR_PLANE        (1ULL << 0)
> +#define V4L2_HEVC_SPS_FLAG_SCALING_LIST_ENABLED            (1ULL << 1)
> +#define V4L2_HEVC_SPS_FLAG_AMP_ENABLED                (1ULL << 2)
> +#define V4L2_HEVC_SPS_FLAG_SAMPLE_ADAPTIVE_OFFSET        (1ULL << 3)
> +#define V4L2_HEVC_SPS_FLAG_PCM_ENABLED                (1ULL << 4)
> +#define V4L2_HEVC_SPS_FLAG_PCM_LOOP_FILTER_DISABLED        (1ULL << 5)
> +#define V4L2_HEVC_SPS_FLAG_LONG_TERM_REF_PICS_PRESENT (1ULL << 6)
> +#define V4L2_HEVC_SPS_FLAG_SPS_TEMPORAL_MVP_ENABLED        (1ULL << 7)
> +#define V4L2_HEVC_SPS_FLAG_STRONG_INTRA_SMOOTHING_ENABLED (1ULL << 8)
> +
> +/**
> + * struct v4l2_ctrl_hevc_sps - ITU-T Rec. H.265: Sequence parameter set
> + *
> + * @video_parameter_set_id: specifies the value of the
> + *            vps_video_parameter_set_id of the active VPS
> + * @seq_parameter_set_id: provides an identifier for the SPS for
> + *              reference by other syntax elements
> + * @pic_width_in_luma_samples:    specifies the width of each decoded
> picture
> + *                in units of luma samples
> + * @pic_height_in_luma_samples: specifies the height of each decoded
> picture
> + *                in units of luma samples
> + * @bit_depth_luma_minus8: specifies the bit depth of the samples of the
> + *               luma array
> + * @bit_depth_chroma_minus8: specifies the bit depth of the samples
> of the
> + *                 chroma arrays
> + * @log2_max_pic_order_cnt_lsb_minus4: specifies the value of the
> variable
> + *                       MaxPicOrderCntLsb
> + * @sps_max_dec_pic_buffering_minus1: plus 1 specifies the maximum
> required
> + *                      size of the decoded picture buffer for
> + *                      the CVS
> + * @sps_max_num_reorder_pics: indicates the maximum allowed number of
> pictures
> + * @sps_max_latency_increase_plus1: not equal to 0 is used to compute
> the
> + *                    value of SpsMaxLatencyPictures[i]
> + * @log2_min_luma_coding_block_size_minus3: plus 3 specifies the minimum
> + *                        luma coding block size
> + * @log2_diff_max_min_luma_coding_block_size: specifies the
> difference between
> + *                          the maximum and minimum luma
> + *                          coding block size
> + * @log2_min_luma_transform_block_size_minus2: plus 2 specifies the
> minimum luma
> + *                           transform block size
> + * @log2_diff_max_min_luma_transform_block_size: specifies the
> difference between
> + *                         the maximum and minimum luma
> + *                         transform block size
> + * @max_transform_hierarchy_depth_inter: specifies the maximum hierarchy
> + *                     depth for transform units of
> + *                     coding units coded in inter
> + *                     prediction mode
> + * @max_transform_hierarchy_depth_intra: specifies the maximum hierarchy
> + *                     depth for transform units of
> + *                     coding units coded in intra
> + *                     prediction mode
> + * @pcm_sample_bit_depth_luma_minus1: specifies the number of bits
> used to
> + *                      represent each of PCM sample values of the
> + *                      luma component
> + * @pcm_sample_bit_depth_chroma_minus1: specifies the number of bits
> used to
> + *                    represent each of PCM sample values of
> + *                    the chroma components
> + * @log2_min_pcm_luma_coding_block_size_minus3: plus 3 specifies the
> minimum size
> + *                        of coding blocks
> + * @log2_diff_max_min_pcm_luma_coding_block_size: specifies the
> difference between
> + *                          the maximum and minimum size of
> + *                          coding blocks
> + * @num_short_term_ref_pic_sets: specifies the number of
> st_ref_pic_set()
> + *                 syntax structures included in the SPS
> + * @num_long_term_ref_pics_sps: specifies the number of candidate
> long-term
> + *                reference pictures that are specified in the SPS
> + * @chroma_format_idc: specifies the chroma sampling
> + * @sps_max_sub_layers_minus1: plus 1 specifies the maximum number of
> temporal
> + *                   sub-layers
> + * @flags: see V4L2_HEVC_SPS_FLAG_{}
> + */
> +struct v4l2_ctrl_hevc_sps {
> +    __u8    video_parameter_set_id;
> +    __u8    seq_parameter_set_id;
> +    __u16    pic_width_in_luma_samples;
> +    __u16    pic_height_in_luma_samples;
> +    __u8    bit_depth_luma_minus8;
> +    __u8    bit_depth_chroma_minus8;
> +    __u8    log2_max_pic_order_cnt_lsb_minus4;
> +    __u8    sps_max_dec_pic_buffering_minus1;
> +    __u8    sps_max_num_reorder_pics;
> +    __u8    sps_max_latency_increase_plus1;
> +    __u8    log2_min_luma_coding_block_size_minus3;
> +    __u8    log2_diff_max_min_luma_coding_block_size;
> +    __u8    log2_min_luma_transform_block_size_minus2;
> +    __u8    log2_diff_max_min_luma_transform_block_size;
> +    __u8    max_transform_hierarchy_depth_inter;
> +    __u8    max_transform_hierarchy_depth_intra;
> +    __u8    pcm_sample_bit_depth_luma_minus1;
> +    __u8    pcm_sample_bit_depth_chroma_minus1;
> +    __u8    log2_min_pcm_luma_coding_block_size_minus3;
> +    __u8    log2_diff_max_min_pcm_luma_coding_block_size;
> +    __u8    num_short_term_ref_pic_sets;
> +    __u8    num_long_term_ref_pics_sps;
> +    __u8    chroma_format_idc;
> +    __u8    sps_max_sub_layers_minus1;
> +
> +    __u8    padding[6];
> +    __u64    flags;
> +    __u8    reserved[24];
> +};
> +
> +#define V4L2_HEVC_PPS_FLAG_DEPENDENT_SLICE_SEGMENT_ENABLED (1ULL << 0)
> +#define V4L2_HEVC_PPS_FLAG_OUTPUT_FLAG_PRESENT            (1ULL << 1)
> +#define V4L2_HEVC_PPS_FLAG_SIGN_DATA_HIDING_ENABLED        (1ULL << 2)
> +#define V4L2_HEVC_PPS_FLAG_CABAC_INIT_PRESENT            (1ULL << 3)
> +#define V4L2_HEVC_PPS_FLAG_CONSTRAINED_INTRA_PRED        (1ULL << 4)
> +#define V4L2_HEVC_PPS_FLAG_TRANSFORM_SKIP_ENABLED        (1ULL << 5)
> +#define V4L2_HEVC_PPS_FLAG_CU_QP_DELTA_ENABLED            (1ULL << 6)
> +#define V4L2_HEVC_PPS_FLAG_PPS_SLICE_CHROMA_QP_OFFSETS_PRESENT (1ULL
> << 7)
> +#define V4L2_HEVC_PPS_FLAG_WEIGHTED_PRED            (1ULL << 8)
> +#define V4L2_HEVC_PPS_FLAG_WEIGHTED_BIPRED            (1ULL << 9)
> +#define V4L2_HEVC_PPS_FLAG_TRANSQUANT_BYPASS_ENABLED        (1ULL << 10)
> +#define V4L2_HEVC_PPS_FLAG_TILES_ENABLED            (1ULL << 11)
> +#define V4L2_HEVC_PPS_FLAG_ENTROPY_CODING_SYNC_ENABLED (1ULL << 12)
> +#define V4L2_HEVC_PPS_FLAG_LOOP_FILTER_ACROSS_TILES_ENABLED (1ULL << 13)
> +#define V4L2_HEVC_PPS_FLAG_PPS_LOOP_FILTER_ACROSS_SLICES_ENABLED
> (1ULL << 14)
> +#define V4L2_HEVC_PPS_FLAG_DEBLOCKING_FILTER_OVERRIDE_ENABLED (1ULL
> << 15)
> +#define V4L2_HEVC_PPS_FLAG_PPS_DISABLE_DEBLOCKING_FILTER    (1ULL << 16)
> +#define V4L2_HEVC_PPS_FLAG_LISTS_MODIFICATION_PRESENT (1ULL << 17)
> +#define V4L2_HEVC_PPS_FLAG_SLICE_SEGMENT_HEADER_EXTENSION_PRESENT
> (1ULL << 18)
> +#define V4L2_HEVC_PPS_FLAG_DEBLOCKING_FILTER_CONTROL_PRESENT (1ULL <<
> 19)
> +#define V4L2_HEVC_PPS_FLAG_UNIFORM_SPACING            (1ULL << 20)
> +
> +/**
> + * struct v4l2_ctrl_hevc_pps - ITU-T Rec. H.265: Picture parameter set
> + *
> + * @pic_parameter_set_id: identifies the PPS for reference by other
> + *              syntax elements
> + * @num_extra_slice_header_bits: specifies the number of extra slice
> header
> + *                 bits that are present in the slice header RBSP
> + *                 for coded pictures referring to the PPS.
> + * @num_ref_idx_l0_default_active_minus1: specifies the inferred
> value of
> + *                      num_ref_idx_l0_active_minus1
> + * @num_ref_idx_l1_default_active_minus1: specifies the inferred
> value of
> + *                      num_ref_idx_l1_active_minus1
> + * @init_qp_minus26: plus 26 specifies the initial value of SliceQp Y
> for
> + *             each slice referring to the PPS
> + * @diff_cu_qp_delta_depth: specifies the difference between the luma
> coding
> + *                tree block size and the minimum luma coding block
> + *                size of coding units that convey cu_qp_delta_abs
> + *                and cu_qp_delta_sign_flag
> + * @pps_cb_qp_offset: specify the offsets to the luma quantization
> parameter Cb
> + * @pps_cr_qp_offset: specify the offsets to the luma quantization
> parameter Cr
> + * @num_tile_columns_minus1: plus 1 specifies the number of tile columns
> + *                 partitioning the picture
> + * @num_tile_rows_minus1: plus 1 specifies the number of tile rows
> partitioning
> + *              the picture
> + * @column_width_minus1: plus 1 specifies the width of the i-th tile
> column in
> + *             units of coding tree blocks
> + * @row_height_minus1: plus 1 specifies the height of the i-th tile
> row in
> + *               units of coding tree blocks
> + * @pps_beta_offset_div2: specify the default deblocking parameter
> offsets for
> + *              beta divided by 2
> + * @pps_tc_offset_div2: specify the default deblocking parameter
> offsets for tC
> + *            divided by 2
> + * @log2_parallel_merge_level_minus2: plus 2 specifies the value of
> the variable
> + *                      Log2ParMrgLevel
> + * @flags: see V4L2_HEVC_PPS_FLAG_{}
> + */
> +struct v4l2_ctrl_hevc_pps {
> +    __u8    pic_parameter_set_id;
> +    __u8    num_extra_slice_header_bits;
> +    __u8    num_ref_idx_l0_default_active_minus1;
> +    __u8    num_ref_idx_l1_default_active_minus1;
> +    __s8    init_qp_minus26;
> +    __u8    diff_cu_qp_delta_depth;
> +    __s8    pps_cb_qp_offset;
> +    __s8    pps_cr_qp_offset;
> +    __u8    num_tile_columns_minus1;
> +    __u8    num_tile_rows_minus1;
> +    __u8    column_width_minus1[20];
> +    __u8    row_height_minus1[22];
> +    __s8    pps_beta_offset_div2;
> +    __s8    pps_tc_offset_div2;
> +    __u8    log2_parallel_merge_level_minus2;
> +    __u8    padding[9];
> +
> +    __u64    flags;
> +    __u8    reserved[56];
> +};
> +
> +#define V4L2_HEVC_DPB_ENTRY_LONG_TERM_REFERENCE    0x01
> +
> +#define V4L2_HEVC_SEI_PIC_STRUCT_FRAME                0
> +#define V4L2_HEVC_SEI_PIC_STRUCT_TOP_FIELD            1
> +#define V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_FIELD            2
> +#define V4L2_HEVC_SEI_PIC_STRUCT_TOP_BOTTOM            3
> +#define V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_TOP            4
> +#define V4L2_HEVC_SEI_PIC_STRUCT_TOP_BOTTOM_TOP            5
> +#define V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_TOP_BOTTOM        6
> +#define V4L2_HEVC_SEI_PIC_STRUCT_FRAME_DOUBLING            7
> +#define V4L2_HEVC_SEI_PIC_STRUCT_FRAME_TRIPLING            8
> +#define V4L2_HEVC_SEI_PIC_STRUCT_TOP_PAIRED_PREVIOUS_BOTTOM    9
> +#define V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_PAIRED_PREVIOUS_TOP    10
> +#define V4L2_HEVC_SEI_PIC_STRUCT_TOP_PAIRED_NEXT_BOTTOM        11
> +#define V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_PAIRED_NEXT_TOP        12
> +
> +#define V4L2_HEVC_DPB_ENTRIES_NUM_MAX        16
> +
> +/**
> + * struct v4l2_hevc_dpb_entry - HEVC decoded picture buffer entry
> + *
> + * @timestamp: timestamp of the V4L2 capture buffer to use as reference.
> + * @flags: long term flag for the reference frame
> + * @field_pic: whether the reference is a field picture or a frame.
> + * @pic_order_cnt_val: the picture order count of the current picture.
> + */
> +struct v4l2_hevc_dpb_entry {
> +    __u64    timestamp;
> +    __u8    flags;
> +    __u8    field_pic;
> +    __s32    pic_order_cnt_val;
> +    __u8    padding[2];
> +};
> +
> +/**
> + * struct v4l2_hevc_pred_weight_table - HEVC weighted prediction
> parameters
> + *
> + * @delta_luma_weight_l0: the difference of the weighting factor applied
> + *              to the luma prediction value for list 0
> + * @luma_offset_l0: the additive offset applied to the luma
> prediction value
> + *            for list 0
> + * @delta_chroma_weight_l0: the difference of the weighting factor
> applied
> + *                to the chroma prediction values for list 0
> + * @chroma_offset_l0: the difference of the additive offset applied to
> + *              the chroma prediction values for list 0
> + * @delta_luma_weight_l1: the difference of the weighting factor applied
> + *              to the luma prediction value for list 1
> + * @luma_offset_l1: the additive offset applied to the luma
> prediction value
> + *            for list 1
> + * @delta_chroma_weight_l1: the difference of the weighting factor
> applied
> + *                to the chroma prediction values for list 1
> + * @chroma_offset_l1: the difference of the additive offset applied to
> + *              the chroma prediction values for list 1
> + * @luma_log2_weight_denom: the base 2 logarithm of the denominator for
> + *                all luma weighting factors
> + * @delta_chroma_log2_weight_denom: the difference of the base 2
> logarithm
> + *                    of the denominator for all chroma
> + *                    weighting factors
> + */
> +struct v4l2_hevc_pred_weight_table {
> +    __s8    delta_luma_weight_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
> +    __s8    luma_offset_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
> +    __s8 delta_chroma_weight_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2];
> +    __s8    chroma_offset_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2];
> +
> +    __s8    delta_luma_weight_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
> +    __s8    luma_offset_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
> +    __s8 delta_chroma_weight_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2];
> +    __s8    chroma_offset_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2];
> +
> +    __u8    luma_log2_weight_denom;
> +    __s8    delta_chroma_log2_weight_denom;
> +};
> +
> +#define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_SAO_LUMA        (1ULL << 0)
> +#define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_SAO_CHROMA        (1ULL << 1)
> +#define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_TEMPORAL_MVP_ENABLED (1ULL
> << 2)
> +#define V4L2_HEVC_SLICE_PARAMS_FLAG_MVD_L1_ZERO            (1ULL << 3)
> +#define V4L2_HEVC_SLICE_PARAMS_FLAG_CABAC_INIT            (1ULL << 4)
> +#define V4L2_HEVC_SLICE_PARAMS_FLAG_COLLOCATED_FROM_L0 (1ULL << 5)
> +#define V4L2_HEVC_SLICE_PARAMS_FLAG_USE_INTEGER_MV        (1ULL << 6)
> +#define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_DEBLOCKING_FILTER_DISABLED
> (1ULL << 7)
> +#define
> V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_LOOP_FILTER_ACROSS_SLICES_ENABLED
> (1ULL << 8)
> +#define V4L2_HEVC_SLICE_PARAMS_FLAG_DEPENDENT_SLICE_SEGMENT (1ULL << 9)
> +
> +/**
> + * v4l2_ctrl_hevc_slice_params - HEVC slice parameters
> + *
> + * This control is a dynamically sized 1-dimensional array,
> + * V4L2_CTRL_FLAG_DYNAMIC_ARRAY flag must be set when using it.
> + *
> + * @bit_size: size (in bits) of the current slice data
> + * @data_byte_offset: offset (in bytes) to the video data in the
> current slice data
> + * @num_entry_point_offsets: specifies the number of entry point
> offset syntax
> + *                 elements in the slice header.
> + * @nal_unit_type: specifies the coding type of the slice (B, P or I)
> + * @nuh_temporal_id_plus1: minus 1 specifies a temporal identifier
> for the NAL unit
> + * @slice_type: see V4L2_HEVC_SLICE_TYPE_{}
> + * @colour_plane_id: specifies the colour plane associated with the
> current slice
> + * @slice_pic_order_cnt: specifies the picture order count
> + * @num_ref_idx_l0_active_minus1: specifies the maximum reference
> index for reference
> + *                  picture list 0 that may be used to decode the slice
> + * @num_ref_idx_l1_active_minus1: specifies the maximum reference
> index for reference
> + *                  picture list 1 that may be used to decode the slice
> + * @collocated_ref_idx: specifies the reference index of the
> collocated picture used
> + *            for temporal motion vector prediction
> + * @five_minus_max_num_merge_cand: specifies the maximum number of
> merging
> + *                   motion vector prediction candidates supported in
> + *                   the slice subtracted from 5
> + * @slice_qp_delta: specifies the initial value of QpY to be used for
> the coding
> + *            blocks in the slice
> + * @slice_cb_qp_offset: specifies a difference to be added to the
> value of pps_cb_qp_offset
> + * @slice_cr_qp_offset: specifies a difference to be added to the
> value of pps_cr_qp_offset
> + * @slice_act_y_qp_offset: screen content extension parameters
> + * @slice_act_cb_qp_offset: screen content extension parameters
> + * @slice_act_cr_qp_offset: screen content extension parameters
> + * @slice_beta_offset_div2: specify the deblocking parameter offsets
> for beta divided by 2
> + * @slice_tc_offset_div2: specify the deblocking parameter offsets
> for tC divided by 2
> + * @pic_struct: indicates whether a picture should be displayed as a
> frame or as one or
> + *        more fields
> + * @slice_segment_addr: specifies the address of the first coding
> tree block in
> + *            the slice segment
> + * @ref_idx_l0: the list of L0 reference elements as indices in the DPB
> + * @ref_idx_l1: the list of L1 reference elements as indices in the DPB
> + * @short_term_ref_pic_set_size: specifies the size of short-term
> reference
> + *                 pictures set included in the SPS
> + * @long_term_ref_pic_set_size: specifies the size of long-term
> reference
> + *                pictures set include in the SPS
> + * @pred_weight_table: the prediction weight coefficients for
> inter-picture
> + *               prediction
> + * @flags: see V4L2_HEVC_SLICE_PARAMS_FLAG_{}
> + */
> +struct v4l2_ctrl_hevc_slice_params {
> +    __u32    bit_size;
> +    __u32    data_byte_offset;
> +    __u32    num_entry_point_offsets;
> +
> +    /* ISO/IEC 23008-2, ITU-T Rec. H.265: NAL unit header */
> +    __u8    nal_unit_type;
> +    __u8    nuh_temporal_id_plus1;
> +
> +    /* ISO/IEC 23008-2, ITU-T Rec. H.265: General slice segment
> header */
> +    __u8    slice_type;
> +    __u8    colour_plane_id;
> +    __u16    slice_pic_order_cnt;
> +    __u8    num_ref_idx_l0_active_minus1;
> +    __u8    num_ref_idx_l1_active_minus1;
> +    __u8    collocated_ref_idx;
> +    __u8    five_minus_max_num_merge_cand;
> +    __s8    slice_qp_delta;
> +    __s8    slice_cb_qp_offset;
> +    __s8    slice_cr_qp_offset;
> +    __s8    slice_act_y_qp_offset;
> +    __s8    slice_act_cb_qp_offset;
> +    __s8    slice_act_cr_qp_offset;
> +    __s8    slice_beta_offset_div2;
> +    __s8    slice_tc_offset_div2;
> +
> +    /* ISO/IEC 23008-2, ITU-T Rec. H.265: Picture timing SEI message */
> +    __u8    pic_struct;
> +
> +    __u8    reserved;
> +    /* ISO/IEC 23008-2, ITU-T Rec. H.265: General slice segment
> header */
> +    __u32    slice_segment_addr;
> +    __u8    ref_idx_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
> +    __u8    ref_idx_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
> +    __u16    short_term_ref_pic_set_size;
> +    __u16    long_term_ref_pic_set_size;
> +
> +    /* ISO/IEC 23008-2, ITU-T Rec. H.265: Weighted prediction
> parameter */
> +    struct v4l2_hevc_pred_weight_table pred_weight_table;
> +
> +    __u8    reserved1[6];
> +    __u64    flags;
> +    __u8    padding[40];
> +};
> +
> +#define V4L2_HEVC_DECODE_PARAM_FLAG_IRAP_PIC        0x1
> +#define V4L2_HEVC_DECODE_PARAM_FLAG_IDR_PIC        0x2
> +#define V4L2_HEVC_DECODE_PARAM_FLAG_NO_OUTPUT_OF_PRIOR  0x4
> +
> +/**
> + * struct v4l2_ctrl_hevc_decode_params - HEVC decode parameters
> + *
> + * @pic_order_cnt_val: picture order count
> + * @num_active_dpb_entries: the number of entries in dpb
> + * @num_poc_st_curr_before: the number of reference pictures in the
> short-term
> + *                set that come before the current frame
> + * @num_poc_st_curr_after: the number of reference pictures in the
> short-term
> + *               set that come after the current frame
> + * @num_poc_lt_curr: the number of reference pictures in the
> long-term set
> + * @poc_st_curr_before: provides the index of the short term before
> references
> + *            in DPB array
> + * @poc_st_curr_after: provides the index of the short term after
> references
> + *               in DPB array
> + * @poc_lt_curr: provides the index of the long term references in
> DPB array
> + * @dpb: the decoded picture buffer, for meta-data about reference
> frames
> + * @flags: see V4L2_HEVC_DECODE_PARAM_FLAG_{}
> + */
> +struct v4l2_ctrl_hevc_decode_params {
> +    __s32    pic_order_cnt_val;
> +    __u8    num_active_dpb_entries;
> +    __u8    num_poc_st_curr_before;
> +    __u8    num_poc_st_curr_after;
> +    __u8    num_poc_lt_curr;
> +    __u8    poc_st_curr_before[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
> +    __u8    poc_st_curr_after[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
> +    __u8    poc_lt_curr[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
> +    struct    v4l2_hevc_dpb_entry dpb[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
> +    __u64    flags;
> +};
> +
> +/**
> + * struct v4l2_ctrl_hevc_scaling_matrix - HEVC scaling lists parameters
> + *
> + * @scaling_list_4x4: scaling list is used for the scaling process for
> + *              transform coefficients. The values on each scaling
> + *              list are expected in raster scan order
> + * @scaling_list_8x8: scaling list is used for the scaling process for
> + *              transform coefficients. The values on each scaling
> + *              list are expected in raster scan order
> + * @scaling_list_16x16:    scaling list is used for the scaling
> process for
> + *            transform coefficients. The values on each scaling
> + *            list are expected in raster scan order
> + * @scaling_list_32x32:    scaling list is used for the scaling
> process for
> + *            transform coefficients. The values on each scaling
> + *            list are expected in raster scan order
> + * @scaling_list_dc_coef_16x16:    scaling list is used for the
> scaling process
> + *                for transform coefficients. The values on each
> + *                scaling list are expected in raster scan order.
> + * @scaling_list_dc_coef_32x32:    scaling list is used for the
> scaling process
> + *                for transform coefficients. The values on each
> + *                scaling list are expected in raster scan order.
> + */
> +struct v4l2_ctrl_hevc_scaling_matrix {
> +    __u8    scaling_list_4x4[6][16];
> +    __u8    scaling_list_8x8[6][64];
> +    __u8    scaling_list_16x16[6][64];
> +    __u8    scaling_list_32x32[2][64];
> +    __u8    scaling_list_dc_coef_16x16[6];
> +    __u8    scaling_list_dc_coef_32x32[2];
> +};
> +
>  #define V4L2_CID_COLORIMETRY_CLASS_BASE (V4L2_CTRL_CLASS_COLORIMETRY
> | 0x900)
>  #define V4L2_CID_COLORIMETRY_CLASS (V4L2_CTRL_CLASS_COLORIMETRY | 1)
>
> diff --git a/include/uapi/linux/videodev2.h
> b/include/uapi/linux/videodev2.h
> index 939775b145af..4c09969e7112 100644
> --- a/include/uapi/linux/videodev2.h
> +++ b/include/uapi/linux/videodev2.h
> @@ -1765,6 +1765,11 @@ struct v4l2_ext_control {
>          struct v4l2_ctrl_mpeg2_quantisation __user
> *p_mpeg2_quantisation;
>          struct v4l2_ctrl_vp9_compressed_hdr __user
> *p_vp9_compressed_hdr_probs;
>          struct v4l2_ctrl_vp9_frame __user *p_vp9_frame;
> +        struct v4l2_ctrl_hevc_sps __user *p_hevc_sps;
> +        struct v4l2_ctrl_hevc_pps __user *p_hevc_pps;
> +        struct v4l2_ctrl_hevc_slice_params __user *p_hevc_slice_params;
> +        struct v4l2_ctrl_hevc_scaling_matrix __user
> *p_hevc_scaling_matrix;
> +        struct v4l2_ctrl_hevc_decode_params __user
> *p_hevc_decode_params;
>          void __user *ptr;
>      };
>  } __attribute__ ((packed));

2022-04-25 20:12:01

by [email protected]

[permalink] [raw]
Subject: Re: [PATCH v5 04/17] media: uapi: HEVC: Add missing fields in HEVC controls

On 07.04.2022 17:29, Benjamin Gaignard wrote:
>Complete the HEVC controls with missing fields from H.265 specifications.
>Even if these fields aren't used by the current mainlined drivers
>they will be need for (at least) rkvdec driver.

s/be need/be required/
or
s/be need/be needed/

s/rkvdec/the rkvdec/

>
>Signed-off-by: Benjamin Gaignard <[email protected]>
>---
> .../media/v4l/ext-ctrls-codec.rst | 19 +++++++++++++++++++
> include/media/hevc-ctrls.h | 6 +++++-
> 2 files changed, 24 insertions(+), 1 deletion(-)
>
>diff --git a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
>index 4cd7c541fc30..dbb08603217b 100644
>--- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
>+++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
>@@ -2661,6 +2661,16 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
> :stub-columns: 0
> :widths: 1 1 2
>
>+ * - __u8
>+ - ``video_parameter_set_id``
>+ - Specifies the value of the vps_video_parameter_set_id of the active VPS
>+ as descibed in section "7.4.3.2.1 General sequence parameter set RBSP semantics"
>+ of H.265 specifications.
>+ * - __u8
>+ - ``seq_parameter_set_id``
>+ - Provides an identifier for the SPS for reference by other syntax elements
>+ as descibed in section "7.4.3.2.1 General sequence parameter set RBSP semantics"
>+ of H.265 specifications.
> * - __u16
> - ``pic_width_in_luma_samples``
> -
>@@ -2800,6 +2810,9 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
> :stub-columns: 0
> :widths: 1 1 2
>
>+ * - __u8
>+ - ``pic_parameter_set_id``
>+ - Identifies the PPS for reference by other syntax elements.
> * - __u8
> - ``num_extra_slice_header_bits``
> -
>@@ -3026,6 +3039,12 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
> * - __u8
> - ``ref_idx_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
> - The list of L1 reference elements as indices in the DPB.
>+ * - __u16
>+ - ``short_term_ref_pic_set_size``
>+ - Specifies the size of short-term reference pictures set included in the SPS.

s/size of/size of the/

Section 7.4.8 depicts that the st_ref_pic_set syntax
structure can be part of the SPS or the slice header.

I think we should mention that we talk about the size of the st_ref_pic_set
syntax structure from section 7.4.8 of the specification.

>+ * - __u16
>+ - ``long_term_ref_pic_set_size``
>+ - Specifies the size of long-term reference pictures set include in the SPS.

s/size of/size of the/

Can we make this a bit more helpful? The specification doesn't contain
a similar structure to `st_ref_pic_set` for long term pictures. So, as a
programmer this leaves me guessing:
- Which syntax structure's size are we talking about?
- Does this correlate to any of the existing sections of the
specification?
Because in the end, I feel like this documentation should be able to
help a programmer to provide the correct data for the uABI.

Greetings,
Sebastian

> * - __u8
> - ``padding``
> - Applications and drivers must set this to zero.
>diff --git a/include/media/hevc-ctrls.h b/include/media/hevc-ctrls.h
>index 01ccda48d8c5..a329e086a89a 100644
>--- a/include/media/hevc-ctrls.h
>+++ b/include/media/hevc-ctrls.h
>@@ -58,6 +58,8 @@ enum v4l2_mpeg_video_hevc_start_code {
> /* The controls are not stable at the moment and will likely be reworked. */
> struct v4l2_ctrl_hevc_sps {
> /* ISO/IEC 23008-2, ITU-T Rec. H.265: Sequence parameter set */
>+ __u8 video_parameter_set_id;
>+ __u8 seq_parameter_set_id;
> __u16 pic_width_in_luma_samples;
> __u16 pic_height_in_luma_samples;
> __u8 bit_depth_luma_minus8;
>@@ -108,6 +110,7 @@ struct v4l2_ctrl_hevc_sps {
>
> struct v4l2_ctrl_hevc_pps {
> /* ISO/IEC 23008-2, ITU-T Rec. H.265: Picture parameter set */
>+ __u8 pic_parameter_set_id;
> __u8 num_extra_slice_header_bits;
> __u8 num_ref_idx_l0_default_active_minus1;
> __u8 num_ref_idx_l1_default_active_minus1;
>@@ -199,7 +202,8 @@ struct v4l2_ctrl_hevc_slice_params {
> __u32 slice_segment_addr;
> __u8 ref_idx_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
> __u8 ref_idx_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
>-
>+ __u16 short_term_ref_pic_set_size;
>+ __u16 long_term_ref_pic_set_size;
> __u8 padding;
>
> /* ISO/IEC 23008-2, ITU-T Rec. H.265: Weighted prediction parameter */
>--
>2.32.0
>

2022-04-26 02:09:07

by Benjamin Gaignard

[permalink] [raw]
Subject: Re: [PATCH v5 04/17] media: uapi: HEVC: Add missing fields in HEVC controls


Le 25/04/2022 à 15:54, Sebastian Fricke a écrit :
> On 07.04.2022 17:29, Benjamin Gaignard wrote:
>> Complete the HEVC controls with missing fields from H.265
>> specifications.
>> Even if these fields aren't used by the current mainlined drivers
>> they will be need for (at least) rkvdec driver.
>
> s/be need/be required/
> or
> s/be need/be needed/
>
> s/rkvdec/the rkvdec/
>
>>
>> Signed-off-by: Benjamin Gaignard <[email protected]>
>> ---
>> .../media/v4l/ext-ctrls-codec.rst             | 19 +++++++++++++++++++
>> include/media/hevc-ctrls.h                    |  6 +++++-
>> 2 files changed, 24 insertions(+), 1 deletion(-)
>>
>> diff --git
>> a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
>> b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
>> index 4cd7c541fc30..dbb08603217b 100644
>> --- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
>> +++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
>> @@ -2661,6 +2661,16 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
>>     :stub-columns: 0
>>     :widths:       1 1 2
>>
>> +    * - __u8
>> +      - ``video_parameter_set_id``
>> +      - Specifies the value of the vps_video_parameter_set_id of the
>> active VPS
>> +        as descibed in section "7.4.3.2.1 General sequence parameter
>> set RBSP semantics"
>> +        of H.265 specifications.
>> +    * - __u8
>> +      - ``seq_parameter_set_id``
>> +      - Provides an identifier for the SPS for reference by other
>> syntax elements
>> +        as descibed in section "7.4.3.2.1 General sequence parameter
>> set RBSP semantics"
>> +        of H.265 specifications.
>>     * - __u16
>>       - ``pic_width_in_luma_samples``
>>       -
>> @@ -2800,6 +2810,9 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
>>     :stub-columns: 0
>>     :widths:       1 1 2
>>
>> +    * - __u8
>> +      - ``pic_parameter_set_id``
>> +      - Identifies the PPS for reference by other syntax elements.
>>     * - __u8
>>       - ``num_extra_slice_header_bits``
>>       -
>> @@ -3026,6 +3039,12 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
>>     * - __u8
>>       - ``ref_idx_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
>>       - The list of L1 reference elements as indices in the DPB.
>> +    * - __u16
>> +      - ``short_term_ref_pic_set_size``
>> +      - Specifies the size of short-term reference pictures set
>> included in the SPS.
>
> s/size of/size of the/
>
> Section 7.4.8 depicts that the st_ref_pic_set syntax
> structure can be part of the SPS or the slice header.
>
> I think we should mention that we talk about the size of the
> st_ref_pic_set
> syntax structure from section 7.4.8 of the specification.
>> +    * - __u16
>> +      - ``long_term_ref_pic_set_size``
>> +      - Specifies the size of long-term reference pictures set
>> include in the SPS.
>
> s/size of/size of the/
>
> Can we make this a bit more helpful? The specification doesn't contain
> a similar structure to `st_ref_pic_set` for long term pictures. So, as a
> programmer this leaves me guessing:
> - Which syntax structure's size are we talking about?
> - Does this correlate to any of the existing sections of the
> specification?
> Because in the end, I feel like this documentation should be able to
> help a programmer to provide the correct data for the uABI.

I will reword it like that:

  * - __u16
    - ``short_term_ref_pic_set_size``
    - Specifies the size, in bits, of the short-term reference pictures set, described as st_ref_pic_set()
in the specification, included in the slice header (section 7.3.6.1).

* - __u16
   - ``long_term_ref_pic_set_size``
   - Specifies the size, in bits, of the long-term reference pictures set include in the slice header.
     It is the number of bits in the conditional block if( long_term_ref_pics_present_flag ) {...}
     in section 7.3.6.1 of the specification.

Benjamin


>
> Greetings,
> Sebastian
>
>>     * - __u8
>>       - ``padding``
>>       - Applications and drivers must set this to zero.
>> diff --git a/include/media/hevc-ctrls.h b/include/media/hevc-ctrls.h
>> index 01ccda48d8c5..a329e086a89a 100644
>> --- a/include/media/hevc-ctrls.h
>> +++ b/include/media/hevc-ctrls.h
>> @@ -58,6 +58,8 @@ enum v4l2_mpeg_video_hevc_start_code {
>> /* The controls are not stable at the moment and will likely be
>> reworked. */
>> struct v4l2_ctrl_hevc_sps {
>>     /* ISO/IEC 23008-2, ITU-T Rec. H.265: Sequence parameter set */
>> +    __u8    video_parameter_set_id;
>> +    __u8    seq_parameter_set_id;
>>     __u16    pic_width_in_luma_samples;
>>     __u16    pic_height_in_luma_samples;
>>     __u8    bit_depth_luma_minus8;
>> @@ -108,6 +110,7 @@ struct v4l2_ctrl_hevc_sps {
>>
>> struct v4l2_ctrl_hevc_pps {
>>     /* ISO/IEC 23008-2, ITU-T Rec. H.265: Picture parameter set */
>> +    __u8    pic_parameter_set_id;
>>     __u8    num_extra_slice_header_bits;
>>     __u8    num_ref_idx_l0_default_active_minus1;
>>     __u8    num_ref_idx_l1_default_active_minus1;
>> @@ -199,7 +202,8 @@ struct v4l2_ctrl_hevc_slice_params {
>>     __u32    slice_segment_addr;
>>     __u8    ref_idx_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
>>     __u8    ref_idx_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
>> -
>> +    __u16    short_term_ref_pic_set_size;
>> +    __u16    long_term_ref_pic_set_size;
>>     __u8    padding;
>>
>>     /* ISO/IEC 23008-2, ITU-T Rec. H.265: Weighted prediction
>> parameter */
>> --
>> 2.32.0
>>

2022-04-26 12:55:20

by [email protected]

[permalink] [raw]
Subject: Re: [PATCH v5 04/17] media: uapi: HEVC: Add missing fields in HEVC controls

Hey Benjamin,

On 25.04.2022 18:16, Benjamin Gaignard wrote:
>
>Le 25/04/2022 à 15:54, Sebastian Fricke a écrit :
>>On 07.04.2022 17:29, Benjamin Gaignard wrote:
>>>Complete the HEVC controls with missing fields from H.265
>>>specifications.
>>>Even if these fields aren't used by the current mainlined drivers
>>>they will be need for (at least) rkvdec driver.
>>
>>s/be need/be required/
>>or
>>s/be need/be needed/
>>
>>s/rkvdec/the rkvdec/
>>
>>>
>>>Signed-off-by: Benjamin Gaignard <[email protected]>
>>>---
>>>.../media/v4l/ext-ctrls-codec.rst             | 19 +++++++++++++++++++
>>>include/media/hevc-ctrls.h                    |  6 +++++-
>>>2 files changed, 24 insertions(+), 1 deletion(-)
>>>
>>>diff --git
>>>a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
>>>b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
>>>index 4cd7c541fc30..dbb08603217b 100644
>>>--- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
>>>+++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
>>>@@ -2661,6 +2661,16 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
>>>    :stub-columns: 0
>>>    :widths:       1 1 2
>>>
>>>+    * - __u8
>>>+      - ``video_parameter_set_id``
>>>+      - Specifies the value of the vps_video_parameter_set_id of
>>>the active VPS
>>>+        as descibed in section "7.4.3.2.1 General sequence
>>>parameter set RBSP semantics"
>>>+        of H.265 specifications.
>>>+    * - __u8
>>>+      - ``seq_parameter_set_id``
>>>+      - Provides an identifier for the SPS for reference by other
>>>syntax elements
>>>+        as descibed in section "7.4.3.2.1 General sequence
>>>parameter set RBSP semantics"
>>>+        of H.265 specifications.
>>>    * - __u16
>>>      - ``pic_width_in_luma_samples``
>>>      -
>>>@@ -2800,6 +2810,9 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
>>>    :stub-columns: 0
>>>    :widths:       1 1 2
>>>
>>>+    * - __u8
>>>+      - ``pic_parameter_set_id``
>>>+      - Identifies the PPS for reference by other syntax elements.
>>>    * - __u8
>>>      - ``num_extra_slice_header_bits``
>>>      -
>>>@@ -3026,6 +3039,12 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
>>>    * - __u8
>>>      - ``ref_idx_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
>>>      - The list of L1 reference elements as indices in the DPB.
>>>+    * - __u16
>>>+      - ``short_term_ref_pic_set_size``
>>>+      - Specifies the size of short-term reference pictures set
>>>included in the SPS.
>>
>>s/size of/size of the/
>>
>>Section 7.4.8 depicts that the st_ref_pic_set syntax
>>structure can be part of the SPS or the slice header.
>>
>>I think we should mention that we talk about the size of the
>>st_ref_pic_set
>>syntax structure from section 7.4.8 of the specification.
>>>+    * - __u16
>>>+      - ``long_term_ref_pic_set_size``
>>>+      - Specifies the size of long-term reference pictures set
>>>include in the SPS.
>>
>>s/size of/size of the/
>>
>>Can we make this a bit more helpful? The specification doesn't contain
>>a similar structure to `st_ref_pic_set` for long term pictures. So, as a
>>programmer this leaves me guessing:
>>- Which syntax structure's size are we talking about?
>>- Does this correlate to any of the existing sections of the
>>specification?
>>Because in the end, I feel like this documentation should be able to
>>help a programmer to provide the correct data for the uABI.
>
>I will reword it like that:
>
>  * - __u16
>    - ``short_term_ref_pic_set_size``
>    - Specifies the size, in bits, of the short-term reference pictures set, described as st_ref_pic_set()

Just ...

s/reference pictures set/reference picture set/

> in the specification, included in the slice header (section 7.3.6.1).

s/slice header/slice header or SPS/


>
> * - __u16
>   - ``long_term_ref_pic_set_size``
>   - Specifies the size, in bits, of the long-term reference pictures set include in the slice header.

s/reference pictures set/reference picture set/

Looking at the documentation it looks like: s/slice header/slice header or SPS/
(For example in section 7.3.6.1:
```
if( long_term_ref_pics_present_flag ) {
if( num_long_term_ref_pics_sps > 0 )
num_long_term_sps
num_long_term_pics
for( i = 0; i < num_long_term_sps + num_long_term_pics; i++ ) {
...
```
)

... and then it looks very good!

Greetings,
Sebastian

>     It is the number of bits in the conditional block if( long_term_ref_pics_present_flag ) {...}
>     in section 7.3.6.1 of the specification.
>
>Benjamin
>
>
>>
>>Greetings,
>>Sebastian
>>
>>>    * - __u8
>>>      - ``padding``
>>>      - Applications and drivers must set this to zero.
>>>diff --git a/include/media/hevc-ctrls.h b/include/media/hevc-ctrls.h
>>>index 01ccda48d8c5..a329e086a89a 100644
>>>--- a/include/media/hevc-ctrls.h
>>>+++ b/include/media/hevc-ctrls.h
>>>@@ -58,6 +58,8 @@ enum v4l2_mpeg_video_hevc_start_code {
>>>/* The controls are not stable at the moment and will likely be
>>>reworked. */
>>>struct v4l2_ctrl_hevc_sps {
>>>    /* ISO/IEC 23008-2, ITU-T Rec. H.265: Sequence parameter set */
>>>+    __u8    video_parameter_set_id;
>>>+    __u8    seq_parameter_set_id;
>>>    __u16    pic_width_in_luma_samples;
>>>    __u16    pic_height_in_luma_samples;
>>>    __u8    bit_depth_luma_minus8;
>>>@@ -108,6 +110,7 @@ struct v4l2_ctrl_hevc_sps {
>>>
>>>struct v4l2_ctrl_hevc_pps {
>>>    /* ISO/IEC 23008-2, ITU-T Rec. H.265: Picture parameter set */
>>>+    __u8    pic_parameter_set_id;
>>>    __u8    num_extra_slice_header_bits;
>>>    __u8    num_ref_idx_l0_default_active_minus1;
>>>    __u8    num_ref_idx_l1_default_active_minus1;
>>>@@ -199,7 +202,8 @@ struct v4l2_ctrl_hevc_slice_params {
>>>    __u32    slice_segment_addr;
>>>    __u8    ref_idx_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
>>>    __u8    ref_idx_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
>>>-
>>>+    __u16    short_term_ref_pic_set_size;
>>>+    __u16    long_term_ref_pic_set_size;
>>>    __u8    padding;
>>>
>>>    /* ISO/IEC 23008-2, ITU-T Rec. H.265: Weighted prediction
>>>parameter */
>>>--
>>>2.32.0
>>>

2022-04-26 13:22:34

by [email protected]

[permalink] [raw]
Subject: Re: [PATCH v5 11/17] media: uapi: Add V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS control

Hey Benjamin,

On 07.04.2022 17:29, Benjamin Gaignard wrote:
>The number of 'entry point offset' could be very variable.

s/could be/can be/

>Rather than use a large static array define a v4l2 dynamic array

s/Rather than use/Instead of using/

Greetings,
Sebastian

>of U32 (V4L2_CTRL_TYPE_U32).
>The number of entry point offsets is reported by the elems field
>and in struct v4l2_ctrl_hevc_slice_params.num_entry_point_offsets
>field.
>
>Signed-off-by: Benjamin Gaignard <[email protected]>
>---
> .../userspace-api/media/v4l/ext-ctrls-codec.rst | 11 +++++++++++
> drivers/media/v4l2-core/v4l2-ctrls-defs.c | 5 +++++
> include/media/hevc-ctrls.h | 5 ++++-
> 3 files changed, 20 insertions(+), 1 deletion(-)
>
>diff --git a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
>index 1aaf3b84b584..a604dedce17c 100644
>--- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
>+++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
>@@ -2988,6 +2988,9 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
> * - __u32
> - ``data_bit_offset``
> - Offset (in bits) to the video data in the current slice data.
>+ * - __u32
>+ - ``num_entry_point_offsets``
>+ - Specifies the number of entry point offset syntax elements in the slice header.
> * - __u8
> - ``nal_unit_type``
> - Specifies the coding type of the slice (B, P or I).
>@@ -3125,6 +3128,14 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
>
> \normalsize
>
>+``V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS (integer)``
>+ Specifies entry point offsets in bytes.
>+ This control is a dynamically sized array. The number of entry point
>+ offsets is reported by the ``elems`` field.
>+ This bitstream parameter is defined according to :ref:`hevc`.
>+ They are described in section 7.4.7.1 "General slice segment header
>+ semantics" of the specification.
>+
> ``V4L2_CID_STATELESS_HEVC_SCALING_MATRIX (struct)``
> Specifies the HEVC scaling matrix parameters used for the scaling process
> for transform coefficients.
>diff --git a/drivers/media/v4l2-core/v4l2-ctrls-defs.c b/drivers/media/v4l2-core/v4l2-ctrls-defs.c
>index 4b68cbe23309..48d385b776b1 100644
>--- a/drivers/media/v4l2-core/v4l2-ctrls-defs.c
>+++ b/drivers/media/v4l2-core/v4l2-ctrls-defs.c
>@@ -1180,6 +1180,7 @@ const char *v4l2_ctrl_get_name(u32 id)
> case V4L2_CID_STATELESS_HEVC_DECODE_PARAMS: return "HEVC Decode Parameters";
> case V4L2_CID_STATELESS_HEVC_DECODE_MODE: return "HEVC Decode Mode";
> case V4L2_CID_STATELESS_HEVC_START_CODE: return "HEVC Start Code";
>+ case V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS: return "HEVC Entry Point Offsets";
>
> /* Colorimetry controls */
> /* Keep the order of the 'case's the same as in v4l2-controls.h! */
>@@ -1508,6 +1509,10 @@ void v4l2_ctrl_fill(u32 id, const char **name, enum v4l2_ctrl_type *type,
> case V4L2_CID_STATELESS_HEVC_DECODE_PARAMS:
> *type = V4L2_CTRL_TYPE_HEVC_DECODE_PARAMS;
> break;
>+ case V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS:
>+ *type = V4L2_CTRL_TYPE_U32;
>+ *flags |= V4L2_CTRL_FLAG_DYNAMIC_ARRAY;
>+ break;
> case V4L2_CID_STATELESS_VP9_COMPRESSED_HDR:
> *type = V4L2_CTRL_TYPE_VP9_COMPRESSED_HDR;
> break;
>diff --git a/include/media/hevc-ctrls.h b/include/media/hevc-ctrls.h
>index 00abbf930235..97e049ccb966 100644
>--- a/include/media/hevc-ctrls.h
>+++ b/include/media/hevc-ctrls.h
>@@ -20,6 +20,7 @@
> #define V4L2_CID_STATELESS_HEVC_DECODE_PARAMS (V4L2_CID_CODEC_BASE + 1012)
> #define V4L2_CID_STATELESS_HEVC_DECODE_MODE (V4L2_CID_CODEC_BASE + 1015)
> #define V4L2_CID_STATELESS_HEVC_START_CODE (V4L2_CID_CODEC_BASE + 1016)
>+#define V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS (V4L2_CID_CODEC_BASE + 1017)
>
> /* enum v4l2_ctrl_type type values */
> #define V4L2_CTRL_TYPE_HEVC_SPS 0x0120
>@@ -316,6 +317,8 @@ struct v4l2_hevc_pred_weight_table {
> *
> * @bit_size: size (in bits) of the current slice data
> * @data_bit_offset: offset (in bits) to the video data in the current slice data
>+ * @num_entry_point_offsets: specifies the number of entry point offset syntax
>+ * elements in the slice header.
> * @nal_unit_type: specifies the coding type of the slice (B, P or I)
> * @nuh_temporal_id_plus1: minus 1 specifies a temporal identifier for the NAL unit
> * @slice_type: see V4L2_HEVC_SLICE_TYPE_{}
>@@ -358,7 +361,7 @@ struct v4l2_hevc_pred_weight_table {
> struct v4l2_ctrl_hevc_slice_params {
> __u32 bit_size;
> __u32 data_bit_offset;
>-
>+ __u32 num_entry_point_offsets;
> /* ISO/IEC 23008-2, ITU-T Rec. H.265: NAL unit header */
> __u8 nal_unit_type;
> __u8 nuh_temporal_id_plus1;
>--
>2.32.0
>

2022-04-27 00:58:06

by [email protected]

[permalink] [raw]
Subject: Re: [PATCH v5 04/17] media: uapi: HEVC: Add missing fields in HEVC controls

On 26.04.2022 10:50, Benjamin Gaignard wrote:
>
>Le 26/04/2022 à 09:52, Sebastian Fricke a écrit :
>>Hey Benjamin,
>>
>>On 25.04.2022 18:16, Benjamin Gaignard wrote:
>>>
>>>Le 25/04/2022 à 15:54, Sebastian Fricke a écrit :
>>>>On 07.04.2022 17:29, Benjamin Gaignard wrote:
>>>>>Complete the HEVC controls with missing fields from H.265
>>>>>specifications.
>>>>>Even if these fields aren't used by the current mainlined drivers
>>>>>they will be need for (at least) rkvdec driver.
>>>>
>>>>s/be need/be required/
>>>>or
>>>>s/be need/be needed/
>>>>
>>>>s/rkvdec/the rkvdec/
>>>>
>>>>>
>>>>>Signed-off-by: Benjamin Gaignard <[email protected]>
>>>>>---
>>>>>.../media/v4l/ext-ctrls-codec.rst             | 19 +++++++++++++++++++
>>>>>include/media/hevc-ctrls.h                    |  6 +++++-
>>>>>2 files changed, 24 insertions(+), 1 deletion(-)
>>>>>
>>>>>diff --git
>>>>>a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
>>>>>b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
>>>>>index 4cd7c541fc30..dbb08603217b 100644
>>>>>--- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
>>>>>+++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
>>>>>@@ -2661,6 +2661,16 @@ enum
>>>>>v4l2_mpeg_video_hevc_size_of_length_field -
>>>>>    :stub-columns: 0
>>>>>    :widths:       1 1 2
>>>>>
>>>>>+    * - __u8
>>>>>+      - ``video_parameter_set_id``
>>>>>+      - Specifies the value of the vps_video_parameter_set_id
>>>>>of the active VPS
>>>>>+        as descibed in section "7.4.3.2.1 General sequence
>>>>>parameter set RBSP semantics"
>>>>>+        of H.265 specifications.
>>>>>+    * - __u8
>>>>>+      - ``seq_parameter_set_id``
>>>>>+      - Provides an identifier for the SPS for reference by
>>>>>other syntax elements
>>>>>+        as descibed in section "7.4.3.2.1 General sequence
>>>>>parameter set RBSP semantics"
>>>>>+        of H.265 specifications.
>>>>>    * - __u16
>>>>>      - ``pic_width_in_luma_samples``
>>>>>      -
>>>>>@@ -2800,6 +2810,9 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
>>>>>    :stub-columns: 0
>>>>>    :widths:       1 1 2
>>>>>
>>>>>+    * - __u8
>>>>>+      - ``pic_parameter_set_id``
>>>>>+      - Identifies the PPS for reference by other syntax elements.
>>>>>    * - __u8
>>>>>      - ``num_extra_slice_header_bits``
>>>>>      -
>>>>>@@ -3026,6 +3039,12 @@ enum
>>>>>v4l2_mpeg_video_hevc_size_of_length_field -
>>>>>    * - __u8
>>>>>      - ``ref_idx_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
>>>>>      - The list of L1 reference elements as indices in the DPB.
>>>>>+    * - __u16
>>>>>+      - ``short_term_ref_pic_set_size``
>>>>>+      - Specifies the size of short-term reference pictures
>>>>>set included in the SPS.
>>>>
>>>>s/size of/size of the/
>>>>
>>>>Section 7.4.8 depicts that the st_ref_pic_set syntax
>>>>structure can be part of the SPS or the slice header.
>>>>
>>>>I think we should mention that we talk about the size of the
>>>>st_ref_pic_set
>>>>syntax structure from section 7.4.8 of the specification.
>>>>>+    * - __u16
>>>>>+      - ``long_term_ref_pic_set_size``
>>>>>+      - Specifies the size of long-term reference pictures
>>>>>set include in the SPS.
>>>>
>>>>s/size of/size of the/
>>>>
>>>>Can we make this a bit more helpful? The specification doesn't contain
>>>>a similar structure to `st_ref_pic_set` for long term pictures.
>>>>So, as a
>>>>programmer this leaves me guessing:
>>>>- Which syntax structure's size are we talking about?
>>>>- Does this correlate to any of the existing sections of the
>>>>specification?
>>>>Because in the end, I feel like this documentation should be able to
>>>>help a programmer to provide the correct data for the uABI.
>>>
>>>I will reword it like that:
>>>
>>>  * - __u16
>>>    - ``short_term_ref_pic_set_size``
>>>    - Specifies the size, in bits, of the short-term reference
>>>pictures set, described as st_ref_pic_set()
>>
>>Just ...
>>
>>s/reference pictures set/reference picture set/
>>
>>>     in the specification, included in the slice header (section
>>>7.3.6.1).
>>
>>s/slice header/slice header or SPS/
>>
>>
>>>
>>>* - __u16
>>>   - ``long_term_ref_pic_set_size``
>>>   - Specifies the size, in bits, of the long-term reference
>>>pictures set include in the slice header.
>>
>>s/reference pictures set/reference picture set/
>>
>>Looking at the documentation it looks like: s/slice header/slice
>>header or SPS/
>>(For example in section 7.3.6.1:
>>```
>>if( long_term_ref_pics_present_flag ) {
>>  if( num_long_term_ref_pics_sps > 0 )
>>    num_long_term_sps
>>  num_long_term_pics
>>  for( i = 0; i < num_long_term_sps + num_long_term_pics; i++ ) {
>>    ...
>>```
>>)
>>
>>... and then it looks very good!
>
>I don't know the syntax to insert this kind of comment inside an array in the documentation
>so it will remain as before :-)

Ah, no I didn't mean the pseudo code, I only gave that as an *example*
why just `slice header` seems incorrect to me.
The changes I suggest for that line are only:

s/reference pictures set/reference picture set/ (grammatical error)
s/slice header/slice header or SPS/ (correct statement)

>
>Benjamin

Greetings,
Sebastian

>
>>
>>Greetings,
>>Sebastian
>>
>>>     It is the number of bits in the conditional block if(
>>>long_term_ref_pics_present_flag ) {...}
>>>     in section 7.3.6.1 of the specification.
>>>
>>>Benjamin
>>>
>>>
>>>>
>>>>Greetings,
>>>>Sebastian
>>>>
>>>>>    * - __u8
>>>>>      - ``padding``
>>>>>      - Applications and drivers must set this to zero.
>>>>>diff --git a/include/media/hevc-ctrls.h b/include/media/hevc-ctrls.h
>>>>>index 01ccda48d8c5..a329e086a89a 100644
>>>>>--- a/include/media/hevc-ctrls.h
>>>>>+++ b/include/media/hevc-ctrls.h
>>>>>@@ -58,6 +58,8 @@ enum v4l2_mpeg_video_hevc_start_code {
>>>>>/* The controls are not stable at the moment and will likely
>>>>>be reworked. */
>>>>>struct v4l2_ctrl_hevc_sps {
>>>>>    /* ISO/IEC 23008-2, ITU-T Rec. H.265: Sequence parameter set */
>>>>>+    __u8    video_parameter_set_id;
>>>>>+    __u8    seq_parameter_set_id;
>>>>>    __u16    pic_width_in_luma_samples;
>>>>>    __u16    pic_height_in_luma_samples;
>>>>>    __u8    bit_depth_luma_minus8;
>>>>>@@ -108,6 +110,7 @@ struct v4l2_ctrl_hevc_sps {
>>>>>
>>>>>struct v4l2_ctrl_hevc_pps {
>>>>>    /* ISO/IEC 23008-2, ITU-T Rec. H.265: Picture parameter set */
>>>>>+    __u8    pic_parameter_set_id;
>>>>>    __u8    num_extra_slice_header_bits;
>>>>>    __u8    num_ref_idx_l0_default_active_minus1;
>>>>>    __u8    num_ref_idx_l1_default_active_minus1;
>>>>>@@ -199,7 +202,8 @@ struct v4l2_ctrl_hevc_slice_params {
>>>>>    __u32    slice_segment_addr;
>>>>>    __u8    ref_idx_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
>>>>>    __u8    ref_idx_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
>>>>>-
>>>>>+    __u16    short_term_ref_pic_set_size;
>>>>>+    __u16    long_term_ref_pic_set_size;
>>>>>    __u8    padding;
>>>>>
>>>>>    /* ISO/IEC 23008-2, ITU-T Rec. H.265: Weighted prediction
>>>>>parameter */
>>>>>--
>>>>>2.32.0
>>>>>

2022-04-27 10:24:36

by Benjamin Gaignard

[permalink] [raw]
Subject: Re: [PATCH v5 04/17] media: uapi: HEVC: Add missing fields in HEVC controls


Le 26/04/2022 à 09:52, Sebastian Fricke a écrit :
> Hey Benjamin,
>
> On 25.04.2022 18:16, Benjamin Gaignard wrote:
>>
>> Le 25/04/2022 à 15:54, Sebastian Fricke a écrit :
>>> On 07.04.2022 17:29, Benjamin Gaignard wrote:
>>>> Complete the HEVC controls with missing fields from H.265
>>>> specifications.
>>>> Even if these fields aren't used by the current mainlined drivers
>>>> they will be need for (at least) rkvdec driver.
>>>
>>> s/be need/be required/
>>> or
>>> s/be need/be needed/
>>>
>>> s/rkvdec/the rkvdec/
>>>
>>>>
>>>> Signed-off-by: Benjamin Gaignard <[email protected]>
>>>> ---
>>>> .../media/v4l/ext-ctrls-codec.rst             | 19 +++++++++++++++++++
>>>> include/media/hevc-ctrls.h                    |  6 +++++-
>>>> 2 files changed, 24 insertions(+), 1 deletion(-)
>>>>
>>>> diff --git
>>>> a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
>>>> b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
>>>> index 4cd7c541fc30..dbb08603217b 100644
>>>> --- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
>>>> +++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
>>>> @@ -2661,6 +2661,16 @@ enum
>>>> v4l2_mpeg_video_hevc_size_of_length_field -
>>>>     :stub-columns: 0
>>>>     :widths:       1 1 2
>>>>
>>>> +    * - __u8
>>>> +      - ``video_parameter_set_id``
>>>> +      - Specifies the value of the vps_video_parameter_set_id of
>>>> the active VPS
>>>> +        as descibed in section "7.4.3.2.1 General sequence
>>>> parameter set RBSP semantics"
>>>> +        of H.265 specifications.
>>>> +    * - __u8
>>>> +      - ``seq_parameter_set_id``
>>>> +      - Provides an identifier for the SPS for reference by other
>>>> syntax elements
>>>> +        as descibed in section "7.4.3.2.1 General sequence
>>>> parameter set RBSP semantics"
>>>> +        of H.265 specifications.
>>>>     * - __u16
>>>>       - ``pic_width_in_luma_samples``
>>>>       -
>>>> @@ -2800,6 +2810,9 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
>>>>     :stub-columns: 0
>>>>     :widths:       1 1 2
>>>>
>>>> +    * - __u8
>>>> +      - ``pic_parameter_set_id``
>>>> +      - Identifies the PPS for reference by other syntax elements.
>>>>     * - __u8
>>>>       - ``num_extra_slice_header_bits``
>>>>       -
>>>> @@ -3026,6 +3039,12 @@ enum
>>>> v4l2_mpeg_video_hevc_size_of_length_field -
>>>>     * - __u8
>>>>       - ``ref_idx_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
>>>>       - The list of L1 reference elements as indices in the DPB.
>>>> +    * - __u16
>>>> +      - ``short_term_ref_pic_set_size``
>>>> +      - Specifies the size of short-term reference pictures set
>>>> included in the SPS.
>>>
>>> s/size of/size of the/
>>>
>>> Section 7.4.8 depicts that the st_ref_pic_set syntax
>>> structure can be part of the SPS or the slice header.
>>>
>>> I think we should mention that we talk about the size of the
>>> st_ref_pic_set
>>> syntax structure from section 7.4.8 of the specification.
>>>> +    * - __u16
>>>> +      - ``long_term_ref_pic_set_size``
>>>> +      - Specifies the size of long-term reference pictures set
>>>> include in the SPS.
>>>
>>> s/size of/size of the/
>>>
>>> Can we make this a bit more helpful? The specification doesn't contain
>>> a similar structure to `st_ref_pic_set` for long term pictures. So,
>>> as a
>>> programmer this leaves me guessing:
>>> - Which syntax structure's size are we talking about?
>>> - Does this correlate to any of the existing sections of the
>>> specification?
>>> Because in the end, I feel like this documentation should be able to
>>> help a programmer to provide the correct data for the uABI.
>>
>> I will reword it like that:
>>
>>   * - __u16
>>     - ``short_term_ref_pic_set_size``
>>     - Specifies the size, in bits, of the short-term reference
>> pictures set, described as st_ref_pic_set()
>
> Just ...
>
> s/reference pictures set/reference picture set/
>
>>      in the specification, included in the slice header (section
>> 7.3.6.1).
>
> s/slice header/slice header or SPS/
>
>
>>
>> * - __u16
>>    - ``long_term_ref_pic_set_size``
>>    - Specifies the size, in bits, of the long-term reference pictures
>> set include in the slice header.
>
> s/reference pictures set/reference picture set/
>
> Looking at the documentation it looks like: s/slice header/slice
> header or SPS/
> (For example in section 7.3.6.1:
> ```
> if( long_term_ref_pics_present_flag ) {
>   if( num_long_term_ref_pics_sps > 0 )
>     num_long_term_sps
>   num_long_term_pics
>   for( i = 0; i < num_long_term_sps + num_long_term_pics; i++ ) {
>     ...
> ```
> )
>
> ... and then it looks very good!

I don't know the syntax to insert this kind of comment inside an array in the documentation
so it will remain as before :-)

Benjamin

>
> Greetings,
> Sebastian
>
>>      It is the number of bits in the conditional block if(
>> long_term_ref_pics_present_flag ) {...}
>>      in section 7.3.6.1 of the specification.
>>
>> Benjamin
>>
>>
>>>
>>> Greetings,
>>> Sebastian
>>>
>>>>     * - __u8
>>>>       - ``padding``
>>>>       - Applications and drivers must set this to zero.
>>>> diff --git a/include/media/hevc-ctrls.h b/include/media/hevc-ctrls.h
>>>> index 01ccda48d8c5..a329e086a89a 100644
>>>> --- a/include/media/hevc-ctrls.h
>>>> +++ b/include/media/hevc-ctrls.h
>>>> @@ -58,6 +58,8 @@ enum v4l2_mpeg_video_hevc_start_code {
>>>> /* The controls are not stable at the moment and will likely be
>>>> reworked. */
>>>> struct v4l2_ctrl_hevc_sps {
>>>>     /* ISO/IEC 23008-2, ITU-T Rec. H.265: Sequence parameter set */
>>>> +    __u8    video_parameter_set_id;
>>>> +    __u8    seq_parameter_set_id;
>>>>     __u16    pic_width_in_luma_samples;
>>>>     __u16    pic_height_in_luma_samples;
>>>>     __u8    bit_depth_luma_minus8;
>>>> @@ -108,6 +110,7 @@ struct v4l2_ctrl_hevc_sps {
>>>>
>>>> struct v4l2_ctrl_hevc_pps {
>>>>     /* ISO/IEC 23008-2, ITU-T Rec. H.265: Picture parameter set */
>>>> +    __u8    pic_parameter_set_id;
>>>>     __u8    num_extra_slice_header_bits;
>>>>     __u8    num_ref_idx_l0_default_active_minus1;
>>>>     __u8    num_ref_idx_l1_default_active_minus1;
>>>> @@ -199,7 +202,8 @@ struct v4l2_ctrl_hevc_slice_params {
>>>>     __u32    slice_segment_addr;
>>>>     __u8    ref_idx_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
>>>>     __u8    ref_idx_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
>>>> -
>>>> +    __u16    short_term_ref_pic_set_size;
>>>> +    __u16    long_term_ref_pic_set_size;
>>>>     __u8    padding;
>>>>
>>>>     /* ISO/IEC 23008-2, ITU-T Rec. H.265: Weighted prediction
>>>> parameter */
>>>> --
>>>> 2.32.0
>>>>