media: uapi: HEVC: Add v4l2_ctrl_hevc_ext_sps_[ls]t_rps controls

Some hardware (e.g.: Rockchip's rk3588 hevc decoder) need to fully parse
the slice header, which cannot be passed with the current controls.
There is also no skip method similar as to what can be found in
verisilicon HW.

The SPS is therefore extended through these 2 new controls, providing the
long and short term reference information from the slice header for HEVC
decoding.

These now controls are similar as what is passed in the Vulkan Video API
with the StdVideoH265ShortTermRefPicSet and StdVideoH265LongTermRefPicsSps
structures embedded in the SPS struct.

Reviewed-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>
Signed-off-by: Detlev Casanova <detlev.casanova@collabora.com>
Signed-off-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>
Signed-off-by: Hans Verkuil <hverkuil+cisco@kernel.org>
This commit is contained in:
Detlev Casanova
2026-01-09 11:15:17 -05:00
committed by Hans Verkuil
parent a505ca2db8
commit 8a5586d4ff
3 changed files with 134 additions and 0 deletions

View File

@@ -2959,6 +2959,126 @@ This structure contains all loop filter related parameters. See sections
- 0x00000004
-
``V4L2_CID_STATELESS_HEVC_EXT_SPS_LT_RPS (struct)``
Subset of the :c:type:`v4l2_ctrl_hevc_sps` control.
It extends it with the list of Long-term reference sets parameters.
These parameters are defined according to :ref:`hevc`.
They are described in section 7.4.3.2.1 "General sequence parameter set
RBSP semantics" of the specification.
This control is a dynamically sized 1-dimensional array.
The values in the array should be ignored when either
num_long_term_ref_pics_sps is 0 or the
V4L2_HEVC_SPS_FLAG_LONG_TERM_REF_PICS_PRESENT flag is not set in
:c:type:`v4l2_ctrl_hevc_sps`.
.. c:type:: v4l2_ctrl_hevc_ext_sps_lt_rps
.. cssclass:: longtable
.. flat-table:: struct v4l2_ctrl_hevc_ext_sps_lt_rps
:header-rows: 0
:stub-columns: 0
:widths: 1 1 2
* - __u16
- ``lt_ref_pic_poc_lsb_sps``
- Long term reference picture order count as described in section 7.4.3.2.1
"General sequence parameter set RBSP semantics" of the specification.
* - __u16
- ``flags``
- See :ref:`Extended Long-Term RPS Flags <hevc_ext_sps_lt_rps_flags>`
.. _hevc_ext_sps_lt_rps_flags:
``Extended SPS Long-Term RPS Flags``
.. cssclass:: longtable
.. flat-table::
:header-rows: 0
:stub-columns: 0
:widths: 1 1 2
* - ``V4L2_HEVC_EXT_SPS_LT_RPS_FLAG_USED_LT``
- 0x00000001
- Specifies if the long-term reference picture is used 7.4.3.2.1 "General sequence parameter
set RBSP semantics" of the specification.
``V4L2_CID_STATELESS_HEVC_EXT_SPS_ST_RPS (struct)``
Subset of the :c:type:`v4l2_ctrl_hevc_sps` control.
It extends it with the list of Short-term reference sets parameters.
These parameters are defined according to :ref:`hevc`.
They are described in section 7.4.8 "Short-term reference picture set
semantics" of the specification.
This control is a dynamically sized 1-dimensional array.
The values in the array should be ignored when
num_short_term_ref_pic_sets is 0.
.. c:type:: v4l2_ctrl_hevc_ext_sps_st_rps
.. cssclass:: longtable
.. flat-table:: struct v4l2_ctrl_hevc_ext_sps_st_rps
:header-rows: 0
:stub-columns: 0
:widths: 1 1 2
* - __u8
- ``delta_idx_minus1``
- Specifies the delta compare to the index. See details in section 7.4.8 "Short-term
reference picture set semantics" of the specification.
* - __u8
- ``delta_rps_sign``
- Sign of the delta as specified in section 7.4.8 "Short-term reference picture set
semantics" of the specification.
* - __u8
- ``num_negative_pics``
- Number of short-term RPS entries that have picture order count values less than the
picture order count value of the current picture.
* - __u8
- ``num_positive_pics``
- Number of short-term RPS entries that have picture order count values greater than the
picture order count value of the current picture.
* - __u32
- ``used_by_curr_pic``
- Bit i specifies if short-term RPS i is used by the current picture.
* - __u32
- ``use_delta_flag``
- Bit i specifies if short-term RPS i is included in the short-term RPS entries.
* - __u16
- ``abs_delta_rps_minus1``
- Absolute delta RPS as specified in section 7.4.8 "Short-term reference picture set
semantics" of the specification.
* - __u16
- ``delta_poc_s0_minus1[16]``
- Specifies the negative picture order count delta for the i-th entry in the short-term RPS.
See details in section 7.4.8 "Short-term reference picture set semantics" of the
specification.
* - __u16
- ``delta_poc_s1_minus1[16]``
- Specifies the positive picture order count delta for the i-th entry in the short-term RPS.
See details in section 7.4.8 "Short-term reference picture set semantics" of the
specification.
* - __u16
- ``flags``
- See :ref:`Extended Short-Term RPS Flags <hevc_ext_sps_st_rps_flags>`
.. _hevc_ext_sps_st_rps_flags:
``Extended SPS Short-Term RPS Flags``
.. cssclass:: longtable
.. flat-table::
:header-rows: 0
:stub-columns: 0
:widths: 1 1 2
* - ``V4L2_HEVC_EXT_SPS_ST_RPS_FLAG_INTER_REF_PIC_SET_PRED``
- 0x00000001
- Specifies if the short-term RPS is predicted from another short term RPS. See details in
section 7.4.8 "Short-term reference picture set semantics" of the specification.
.. _v4l2-codec-stateless-av1:
``V4L2_CID_STATELESS_AV1_SEQUENCE (struct)``

View File

@@ -150,6 +150,8 @@ replace symbol V4L2_CTRL_TYPE_H264_SCALING_MATRIX :c:type:`V4L.v4l2_ctrl_type`
replace symbol V4L2_CTRL_TYPE_H264_PRED_WEIGHTS :c:type:`V4L.v4l2_ctrl_type`
replace symbol V4L2_CTRL_TYPE_H264_SLICE_PARAMS :c:type:`V4L.v4l2_ctrl_type`
replace symbol V4L2_CTRL_TYPE_H264_DECODE_PARAMS :c:type:`V4L.v4l2_ctrl_type`
replace symbol V4L2_CTRL_TYPE_HEVC_EXT_SPS_ST_RPS :c:type:`V4L.v4l2_ctrl_type`
replace symbol V4L2_CTRL_TYPE_HEVC_EXT_SPS_LT_RPS :c:type:`V4L.v4l2_ctrl_type`
replace symbol V4L2_CTRL_TYPE_HEVC_SPS :c:type:`V4L.v4l2_ctrl_type`
replace symbol V4L2_CTRL_TYPE_HEVC_PPS :c:type:`V4L.v4l2_ctrl_type`
replace symbol V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS :c:type:`V4L.v4l2_ctrl_type`

View File

@@ -531,6 +531,18 @@ See also the examples in :ref:`control`.
- n/a
- A struct :c:type:`v4l2_ctrl_hevc_decode_params`, containing HEVC
decoding parameters for stateless video decoders.
* - ``V4L2_CTRL_TYPE_HEVC_EXT_SPS_LT_RPS``
- n/a
- n/a
- n/a
- A struct :c:type:`v4l2_ctrl_hevc_ext_sps_lt_rps`, containing HEVC
extended Long-Term RPS for stateless video decoders.
* - ``V4L2_CTRL_TYPE_HEVC_EXT_SPS_ST_RPS``
- n/a
- n/a
- n/a
- A struct :c:type:`v4l2_ctrl_hevc_ext_sps_st_rps`, containing HEVC
extended Short-Term RPS for stateless video decoders.
* - ``V4L2_CTRL_TYPE_VP9_COMPRESSED_HDR``
- n/a
- n/a