lkml.org 
[lkml]   [2022]   [Jul]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v11 11/17] media: uapi: Add V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS control
    Date
    The number of 'entry point offset' can be very variable.
    Instead of using 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 <benjamin.gaignard@collabora.com>
    Acked-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>
    Tested-by: Jernej Skrabec <jernej.skrabec@gmail.com>
    ---
    version 11:
    - Be more verbose about num_entry_point_offsets field usage.

    .../userspace-api/media/v4l/ext-ctrls-codec.rst | 15 +++++++++++++++
    drivers/media/v4l2-core/v4l2-ctrls-defs.c | 5 +++++
    include/media/hevc-ctrls.h | 5 ++++-
    3 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 c2e0adece613..59e751c38d06 100644
    --- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
    +++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
    @@ -3010,6 +3010,13 @@ 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.
    + This field must be set even if V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS
    + control isn't used. Additionally, if entry point offsets control is needed
    + and if submitting multiple slices at once, length of entry point offsets
    + array must be sum of num_entry_point_offsets of all slices in that job.
    * - __u8
    - ``nal_unit_type``
    - Specifies the coding type of the slice (B, P or I).
    @@ -3150,6 +3157,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 d594efbcbb93..e22921e7ea61 100644
    --- a/drivers/media/v4l2-core/v4l2-ctrls-defs.c
    +++ b/drivers/media/v4l2-core/v4l2-ctrls-defs.c
    @@ -1188,6 +1188,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! */
    @@ -1518,6 +1519,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 a372c184689e..3a6601a46ced 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
    \
     
     \ /
      Last update: 2022-07-06 11:40    [W:4.465 / U:0.512 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site