lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <b3e31760-a40a-4995-e43f-c50f1d2625b1@xs4all.nl>
Date:   Thu, 29 Apr 2021 10:47:15 +0200
From:   Hans Verkuil <hverkuil@...all.nl>
To:     Ezequiel Garcia <ezequiel@...labora.com>,
        linux-media@...r.kernel.org, linux-kernel@...r.kernel.org
Cc:     kernel@...labora.com, Jonas Karlman <jonas@...boo.se>,
        Nicolas Dufresne <nicolas.dufresne@...labora.com>,
        Philipp Zabel <p.zabel@...gutronix.de>,
        Maxime Ripard <mripard@...nel.org>,
        Paul Kocialkowski <paul.kocialkowski@...tlin.com>,
        Jernej Skrabec <jernej.skrabec@...l.net>,
        Daniel Almeida <daniel.almeida@...labora.com>
Subject: Re: [PATCH v6 10/10] media: uapi: move MPEG-2 stateless controls out
 of staging

On 26/04/2021 05:35, Ezequiel Garcia wrote:
> Until now, the MPEG-2 V4L2 API was not exported as a public API,
> and only defined in a private media header (media/mpeg2-ctrls.h).
> 
> After reviewing the MPEG-2 specification in detail, and reworking
> the controls so they match the MPEG-2 semantics properly,
> we can consider it ready.
> 
> Signed-off-by: Ezequiel Garcia <ezequiel@...labora.com>
> ---
>  .../media/v4l/ext-ctrls-codec-stateless.rst   | 214 +++++++++++++++++
>  .../media/v4l/ext-ctrls-codec.rst             | 216 ------------------
>  .../media/v4l/pixfmt-compressed.rst           |  10 +-
>  .../media/v4l/vidioc-g-ext-ctrls.rst          |  12 +
>  drivers/media/v4l2-core/v4l2-ctrls.c          |  12 +-
>  drivers/staging/media/hantro/hantro_drv.c     |   6 +-
>  .../media/hantro/hantro_g1_mpeg2_dec.c        |   6 +-
>  .../media/hantro/rk3399_vpu_hw_mpeg2_dec.c    |   6 +-
>  drivers/staging/media/sunxi/cedrus/cedrus.c   |   6 +-
>  .../staging/media/sunxi/cedrus/cedrus_dec.c   |   6 +-
>  include/media/mpeg2-ctrls.h                   | 126 ----------
>  include/media/v4l2-ctrls.h                    |   1 -
>  include/uapi/linux/v4l2-controls.h            | 112 +++++++++
>  include/uapi/linux/videodev2.h                |   3 +
>  14 files changed, 367 insertions(+), 369 deletions(-)
>  delete mode 100644 include/media/mpeg2-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 3fc04daa9ffb..eaaf96f5dde6 100644
> --- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec-stateless.rst
> +++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec-stateless.rst
> @@ -1244,3 +1244,217 @@ FWHT Flags
>      * - __u8
>        - ``padding[3]``
>        - Applications and drivers must set this to zero.
> +
> +.. _v4l2-codec-stateless-mpeg2:
> +
> +``V4L2_CID_STATELESS_MPEG2_SEQUENCE (struct)``
> +    Specifies the sequence parameters (as extracted from the bitstream) for the
> +    associated MPEG-2 slice data. This includes fields matching the syntax
> +    elements from the sequence header and sequence extension parts of the
> +    bitstream as specified by :ref:`mpeg2part2`.
> +
> +.. c:type:: v4l2_ctrl_mpeg2_sequence
> +
> +.. raw:: latex
> +
> +    \small
> +
> +.. cssclass:: longtable
> +
> +.. tabularcolumns:: |p{1.4cm}|p{6.5cm}|p{9.4cm}|
> +
> +.. flat-table:: struct v4l2_ctrl_mpeg2_sequence
> +    :header-rows:  0
> +    :stub-columns: 0
> +    :widths:       1 1 2
> +
> +    * - __u16
> +      - ``horizontal_size``
> +      - The width of the displayable part of the frame's luminance component.
> +    * - __u16
> +      - ``vertical_size``
> +      - The height of the displayable part of the frame's luminance component.
> +    * - __u32
> +      - ``vbv_buffer_size``
> +      - Used to calculate the required size of the video buffering verifier,
> +	defined (in bits) as: 16 * 1024 * vbv_buffer_size.
> +    * - __u16
> +      - ``profile_and_level_indication``
> +      - The current profile and level indication as extracted from the
> +	bitstream.
> +    * - __u8
> +      - ``chroma_format``
> +      - The chrominance sub-sampling format (1: 4:2:0, 2: 4:2:2, 3: 4:4:4).
> +    * - __u8
> +      - ``flags``
> +      - See :ref:`MPEG-2 Sequence Flags <mpeg2_sequence_flags>`.
> +
> +.. _mpeg2_sequence_flags:
> +
> +``MPEG-2 Sequence Flags``
> +
> +.. cssclass:: longtable
> +
> +.. flat-table::
> +    :header-rows:  0
> +    :stub-columns: 0
> +    :widths:       1 1 2
> +
> +    * - ``V4L2_MPEG2_SEQ_FLAG_PROGRESSIVE``
> +      - 0x00000001
> +      - Indication that all the frames for the sequence are progressive instead
> +	of interlaced.
> +
> +.. raw:: latex
> +
> +    \normalsize
> +
> +``V4L2_CID_STATELESS_MPEG2_PICTURE (struct)``
> +    Specifies the picture parameters (as extracted from the bitstream) for the
> +    associated MPEG-2 slice data. This includes fields matching the syntax
> +    elements from the picture header and picture coding extension parts of the
> +    bitstream as specified by :ref:`mpeg2part2`.
> +
> +.. c:type:: v4l2_ctrl_mpeg2_picture
> +
> +.. raw:: latex
> +
> +    \small
> +
> +.. cssclass:: longtable
> +
> +.. tabularcolumns:: |p{1.0cm}|p{5.6cm}|p{10.7cm}|
> +
> +.. flat-table:: struct v4l2_ctrl_mpeg2_picture
> +    :header-rows:  0
> +    :stub-columns: 0
> +    :widths:       1 1 2
> +
> +    * - __u64
> +      - ``backward_ref_ts``
> +      - Timestamp of the V4L2 capture buffer to use as backward 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.
> +    * - __u64
> +      - ``forward_ref_ts``
> +      - Timestamp for the V4L2 capture buffer to use as forward reference, used
> +        with B-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.
> +    * - __u32
> +      - ``flags``
> +      - See :ref:`MPEG-2 Picture Flags <mpeg2_picture_flags>`.
> +    * - __u8
> +      - ``f_code[2][2]``
> +      - Motion vector codes.
> +    * - __u8
> +      - ``picture_coding_type``
> +      - Picture coding type for the frame covered by the current slice
> +	(V4L2_MPEG2_PICTURE_CODING_TYPE_I, V4L2_MPEG2_PICTURE_CODING_TYPE_P or
> +	V4L2_MPEG2_PICTURE_CODING_TYPE_B).
> +    * - __u8
> +      - ``picture_structure``
> +      - Picture structure (1: interlaced top field, 2: interlaced bottom field,
> +	3: progressive frame).
> +    * - __u8
> +      - ``intra_dc_precision``
> +      - Precision of Discrete Cosine transform (0: 8 bits precision,
> +	1: 9 bits precision, 2: 10 bits precision, 3: 11 bits precision).
> +    * - __u8
> +      - ``reserved``
> +      - Applications and drivers must set this to zero.
> +
> +.. _mpeg2_picture_flags:
> +
> +``MPEG-2 Picture Flags``
> +
> +.. cssclass:: longtable
> +
> +.. flat-table::
> +    :header-rows:  0
> +    :stub-columns: 0
> +    :widths:       1 1 2
> +
> +    * - ``V4L2_MPEG2_PIC_FLAG_TOP_FIELD_FIRST``
> +      - 0x00000001
> +      - If set and it's an interlaced stream, top field is output first.
> +    * - ``V4L2_MPEG2_PIC_FLAG_FRAME_PRED_DCT``
> +      - 0x00000002
> +      - If set only frame-DCT and frame prediction are used.
> +    * - ``V4L2_MPEG2_PIC_FLAG_CONCEALMENT_MV``
> +      - 0x00000004
> +      -  If set motion vectors are coded for intra macroblocks.
> +    * - ``V4L2_MPEG2_PIC_FLAG_Q_SCALE_TYPE``
> +      - 0x00000008
> +      - This flag affects the inverse quantization process.
> +    * - ``V4L2_MPEG2_PIC_FLAG_INTRA_VLC``
> +      - 0x00000010
> +      - This flag affects the decoding of transform coefficient data.
> +    * - ``V4L2_MPEG2_PIC_FLAG_ALT_SCAN``
> +      - 0x00000020
> +      - This flag affects the decoding of transform coefficient data.
> +    * - ``V4L2_MPEG2_PIC_FLAG_REPEAT_FIRST``
> +      - 0x00000040
> +      - This flag affects the decoding process of progressive frames.
> +    * - ``V4L2_MPEG2_PIC_FLAG_PROGRESSIVE``
> +      - 0x00000080
> +      - Indicates whether the current frame is progressive.
> +
> +.. raw:: latex
> +
> +    \normalsize
> +
> +``V4L2_CID_STATELESS_MPEG2_QUANTISATION (struct)``
> +    Specifies quantisation matrices, in zigzag scanning order, for the
> +    associated MPEG-2 slice data. This control is initialized by the kernel
> +    to the matrices default values. If a bitstream transmits a user-defined
> +    quantisation matrices load, applications are expected to use this control.
> +    Applications are also expected to set the control loading the default
> +    values, if the quantisation matrices need to be reset, for instance on a
> +    sequence header. This process is specified by section 6.3.7.
> +    "Quant matrix extension" of the specification.
> +
> +.. c:type:: v4l2_ctrl_mpeg2_quantisation
> +
> +.. tabularcolumns:: |p{0.8cm}|p{8.0cm}|p{8.5cm}|
> +
> +.. cssclass:: longtable
> +
> +.. raw:: latex
> +
> +    \small
> +
> +.. flat-table:: struct v4l2_ctrl_mpeg2_quantisation
> +    :header-rows:  0
> +    :stub-columns: 0
> +    :widths:       1 1 2
> +
> +    * - __u8
> +      - ``intra_quantiser_matrix[64]``
> +      - The quantisation matrix coefficients for intra-coded frames, in zigzag
> +	scanning order. It is relevant for both luma and chroma components,
> +	although it can be superseded by the chroma-specific matrix for
> +	non-4:2:0 YUV formats.
> +    * - __u8
> +      - ``non_intra_quantiser_matrix[64]``
> +      - The quantisation matrix coefficients for non-intra-coded frames, in
> +	zigzag scanning order. It is relevant for both luma and chroma
> +	components, although it can be superseded by the chroma-specific matrix
> +	for non-4:2:0 YUV formats.
> +    * - __u8
> +      - ``chroma_intra_quantiser_matrix[64]``
> +      - The quantisation matrix coefficients for the chominance component of
> +	intra-coded frames, in zigzag scanning order. Only relevant for
> +	non-4:2:0 YUV formats.
> +    * - __u8
> +      - ``chroma_non_intra_quantiser_matrix[64]``
> +      - The quantisation matrix coefficients for the chrominance component of
> +	non-intra-coded frames, in zigzag scanning order. Only relevant for
> +	non-4:2:0 YUV formats.
> +
> +.. raw:: latex
> +
> +    \normalsize
> diff --git a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
> index af12c869e304..a580ea953c4e 100644
> --- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
> +++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
> @@ -1606,222 +1606,6 @@ enum v4l2_mpeg_video_h264_hierarchical_coding_type -
>  ``V4L2_CID_MPEG_VIDEO_H264_HIER_CODING_L6_BR (integer)``
>      Indicates bit rate (bps) for hierarchical coding layer 6 for H264 encoder.
>  
> -.. _v4l2-mpeg-mpeg2:
> -
> -``V4L2_CID_MPEG_VIDEO_MPEG2_SEQUENCE (struct)``
> -    Specifies the sequence parameters (as extracted from the bitstream) for the
> -    associated MPEG-2 slice data. This includes fields matching the syntax
> -    elements from the sequence header and sequence extension parts of the
> -    bitstream as specified by :ref:`mpeg2part2`.
> -
> -    .. note::
> -
> -       This compound control is not yet part of the public kernel API and
> -       it is expected to change.
> -
> -.. c:type:: v4l2_ctrl_mpeg2_sequence
> -
> -.. cssclass:: longtable
> -
> -.. tabularcolumns:: |p{1.4cm}|p{6.5cm}|p{9.4cm}|
> -
> -.. flat-table:: struct v4l2_ctrl_mpeg2_sequence
> -    :header-rows:  0
> -    :stub-columns: 0
> -    :widths:       1 1 2
> -
> -    * - __u16
> -      - ``horizontal_size``
> -      - The width of the displayable part of the frame's luminance component.
> -    * - __u16
> -      - ``vertical_size``
> -      - The height of the displayable part of the frame's luminance component.
> -    * - __u32
> -      - ``vbv_buffer_size``
> -      - Used to calculate the required size of the video buffering verifier,
> -	defined (in bits) as: 16 * 1024 * vbv_buffer_size.
> -    * - __u16
> -      - ``profile_and_level_indication``
> -      - The current profile and level indication as extracted from the
> -	bitstream.
> -    * - __u8
> -      - ``chroma_format``
> -      - The chrominance sub-sampling format (1: 4:2:0, 2: 4:2:2, 3: 4:4:4).
> -    * - __u8
> -      - ``flags``
> -      - See :ref:`MPEG-2 Sequence Flags <mpeg2_sequence_flags>`.
> -
> -.. _mpeg2_sequence_flags:
> -
> -``MPEG-2 Sequence Flags``
> -
> -.. cssclass:: longtable
> -
> -.. flat-table::
> -    :header-rows:  0
> -    :stub-columns: 0
> -    :widths:       1 1 2
> -
> -    * - ``V4L2_MPEG2_SEQ_FLAG_PROGRESSIVE``
> -      - 0x00000001
> -      - Indication that all the frames for the sequence are progressive instead
> -	of interlaced.
> -
> -``V4L2_CID_MPEG_VIDEO_MPEG2_PICTURE (struct)``
> -    Specifies the picture parameters (as extracted from the bitstream) for the
> -    associated MPEG-2 slice data. This includes fields matching the syntax
> -    elements from the picture header and picture coding extension parts of the
> -    bitstream as specified by :ref:`mpeg2part2`.
> -
> -    .. note::
> -
> -       This compound control is not yet part of the public kernel API and
> -       it is expected to change.
> -
> -.. c:type:: v4l2_ctrl_mpeg2_picture
> -
> -.. raw:: latex
> -
> -    \small
> -
> -.. cssclass:: longtable
> -
> -.. tabularcolumns:: |p{1.0cm}|p{5.6cm}|p{10.7cm}|
> -
> -.. flat-table:: struct v4l2_ctrl_mpeg2_picture
> -    :header-rows:  0
> -    :stub-columns: 0
> -    :widths:       1 1 2
> -
> -    * - __u64
> -      - ``backward_ref_ts``
> -      - Timestamp of the V4L2 capture buffer to use as backward 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.
> -    * - __u64
> -      - ``forward_ref_ts``
> -      - Timestamp for the V4L2 capture buffer to use as forward reference, used
> -        with B-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.
> -    * - __u32
> -      - ``flags``
> -      - See :ref:`MPEG-2 Picture Flags <mpeg2_picture_flags>`.
> -    * - __u8
> -      - ``f_code[2][2]``
> -      - Motion vector codes.
> -    * - __u8
> -      - ``picture_coding_type``
> -      - Picture coding type for the frame covered by the current slice
> -	(V4L2_MPEG2_PICTURE_CODING_TYPE_I, V4L2_MPEG2_PICTURE_CODING_TYPE_P or
> -	V4L2_MPEG2_PICTURE_CODING_TYPE_B).
> -    * - __u8
> -      - ``picture_structure``
> -      - Picture structure (1: interlaced top field, 2: interlaced bottom field,
> -	3: progressive frame).
> -    * - __u8
> -      - ``intra_dc_precision``
> -      - Precision of Discrete Cosine transform (0: 8 bits precision,
> -	1: 9 bits precision, 2: 10 bits precision, 3: 11 bits precision).
> -    * - __u8
> -      - ``reserved``
> -      - Applications and drivers must set this to zero.
> -
> -
> -.. _mpeg2_picture_flags:
> -
> -``MPEG-2 Picture Flags``
> -
> -.. cssclass:: longtable
> -
> -.. flat-table::
> -    :header-rows:  0
> -    :stub-columns: 0
> -    :widths:       1 1 2
> -
> -    * - ``V4L2_MPEG2_PIC_FLAG_TOP_FIELD_FIRST``
> -      - 0x00000001
> -      - If set and it's an interlaced stream, top field is output first.
> -    * - ``V4L2_MPEG2_PIC_FLAG_FRAME_PRED_DCT``
> -      - 0x00000002
> -      - If set only frame-DCT and frame prediction are used.
> -    * - ``V4L2_MPEG2_PIC_FLAG_CONCEALMENT_MV``
> -      - 0x00000004
> -      -  If set motion vectors are coded for intra macroblocks.
> -    * - ``V4L2_MPEG2_PIC_FLAG_Q_SCALE_TYPE``
> -      - 0x00000008
> -      - This flag affects the inverse quantization process.
> -    * - ``V4L2_MPEG2_PIC_FLAG_INTRA_VLC``
> -      - 0x00000010
> -      - This flag affects the decoding of transform coefficient data.
> -    * - ``V4L2_MPEG2_PIC_FLAG_ALT_SCAN``
> -      - 0x00000020
> -      - This flag affects the decoding of transform coefficient data.
> -    * - ``V4L2_MPEG2_PIC_FLAG_REPEAT_FIRST``
> -      - 0x00000040
> -      - This flag affects the decoding process of progressive frames.
> -    * - ``V4L2_MPEG2_PIC_FLAG_PROGRESSIVE``
> -      - 0x00000080
> -      - Indicates whether the current frame is progressive.
> -
> -.. raw:: latex
> -
> -    \normalsize
> -
> -``V4L2_CID_MPEG_VIDEO_MPEG2_QUANTISATION (struct)``
> -    Specifies quantisation matrices (as extracted from the bitstream) for the
> -    associated MPEG-2 slice data.
> -
> -    .. note::
> -
> -       This compound control is not yet part of the public kernel API and
> -       it is expected to change.
> -
> -.. c:type:: v4l2_ctrl_mpeg2_quantisation
> -
> -.. tabularcolumns:: |p{0.8cm}|p{8.0cm}|p{8.5cm}|
> -
> -.. cssclass:: longtable
> -
> -.. raw:: latex
> -
> -    \small
> -
> -.. flat-table:: struct v4l2_ctrl_mpeg2_quantisation
> -    :header-rows:  0
> -    :stub-columns: 0
> -    :widths:       1 1 2
> -
> -    * - __u8
> -      - ``intra_quantiser_matrix[64]``
> -      - The quantisation matrix coefficients for intra-coded frames, in zigzag
> -	scanning order. It is relevant for both luma and chroma components,
> -	although it can be superseded by the chroma-specific matrix for
> -	non-4:2:0 YUV formats.
> -    * - __u8
> -      - ``non_intra_quantiser_matrix[64]``
> -      - The quantisation matrix coefficients for non-intra-coded frames, in
> -	zigzag scanning order. It is relevant for both luma and chroma
> -	components, although it can be superseded by the chroma-specific matrix
> -	for non-4:2:0 YUV formats.
> -    * - __u8
> -      - ``chroma_intra_quantiser_matrix[64]``
> -      - The quantisation matrix coefficients for the chominance component of
> -	intra-coded frames, in zigzag scanning order. Only relevant for
> -	non-4:2:0 YUV formats.
> -    * - __u8
> -      - ``chroma_non_intra_quantiser_matrix[64]``
> -      - The quantisation matrix coefficients for the chrominance component of
> -	non-intra-coded frames, in zigzag scanning order. Only relevant for
> -	non-4:2:0 YUV formats.
> -
> -.. raw:: latex
> -
> -    \normalsize
> -
>  ``V4L2_CID_FWHT_I_FRAME_QP (integer)``
>      Quantization parameter for an I frame for FWHT. Valid range: from 1
>      to 31.
> diff --git a/Documentation/userspace-api/media/v4l/pixfmt-compressed.rst b/Documentation/userspace-api/media/v4l/pixfmt-compressed.rst
> index 6c10a062adac..0ede39907ee2 100644
> --- a/Documentation/userspace-api/media/v4l/pixfmt-compressed.rst
> +++ b/Documentation/userspace-api/media/v4l/pixfmt-compressed.rst
> @@ -112,13 +112,13 @@ Compressed Formats
>        - 'MG2S'
>        - MPEG-2 parsed slice data, as extracted from the MPEG-2 bitstream.
>  	This format is adapted for stateless video decoders that implement a
> -	MPEG-2 pipeline (using the :ref:`mem2mem` and :ref:`media-request-api`).
> +	MPEG-2 pipeline with the :ref:`stateless_decoder`.
>  	Metadata associated with the frame to decode is required to be passed
> -	through the ``V4L2_CID_MPEG_VIDEO_MPEG2_SEQUENCE`` and
> -        ``V4L2_CID_MPEG_VIDEO_MPEG2_PICTURE`` controls.
> +	through the ``V4L2_CID_STATELESS_MPEG2_SEQUENCE`` and
> +        ``V4L2_CID_STATELESS_MPEG2_PICTURE`` controls.
>          Quantisation matrices can optionally be specified through the
> -	``V4L2_CID_MPEG_VIDEO_MPEG2_QUANTISATION`` control.
> -	See the :ref:`associated Codec Control IDs <v4l2-mpeg-mpeg2>`.
> +	``V4L2_CID_STATELESS_MPEG2_QUANTISATION`` control.
> +	See the :ref:`associated Codec Control IDs <v4l2-codec-stateless-mpeg2>`.
>  	Exactly one output and one capture buffer must be provided for use with
>  	this pixel format. The output buffer must contain the appropriate number
>  	of macroblocks to decode a full corresponding frame to the matching
> 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 3ba22983d21f..2d6bc8d94380 100644
> --- a/Documentation/userspace-api/media/v4l/vidioc-g-ext-ctrls.rst
> +++ b/Documentation/userspace-api/media/v4l/vidioc-g-ext-ctrls.rst
> @@ -221,6 +221,18 @@ still cause this situation.
>        - ``p_vp8_frame``
>        - A pointer to a struct :c:type:`v4l2_ctrl_vp8_frame`. Valid if this control is
>          of type ``V4L2_CTRL_TYPE_VP8_FRAME``.
> +    * - struct :c:type:`v4l2_ctrl_mpeg2_sequence` *
> +      - ``p_mpeg2_sequence``
> +      - A pointer to a struct :c:type:`v4l2_ctrl_mpeg2_sequence`. Valid if this control is
> +        of type ``V4L2_CTRL_TYPE_MPEG2_SEQUENCE``.
> +    * - struct :c:type:`v4l2_ctrl_mpeg2_picture` *
> +      - ``p_mpeg2_picture``
> +      - A pointer to a struct :c:type:`v4l2_ctrl_mpeg2_picture`. Valid if this control is
> +        of type ``V4L2_CTRL_TYPE_MPEG2_PICTURE``.
> +    * - struct :c:type:`v4l2_ctrl_mpeg2_quantisation` *
> +      - ``p_mpeg2_quantisation``
> +      - A pointer to a struct :c:type:`v4l2_ctrl_mpeg2_quantisation`. Valid if this control is
> +        of type ``V4L2_CTRL_TYPE_MPEG2_QUANTISATION``.
>      * - struct :c:type:`v4l2_ctrl_hdr10_cll_info` *
>        - ``p_hdr10_cll``
>        - A pointer to a struct :c:type:`v4l2_ctrl_hdr10_cll_info`. Valid if this control is
> diff --git a/drivers/media/v4l2-core/v4l2-ctrls.c b/drivers/media/v4l2-core/v4l2-ctrls.c
> index a693ff8dc3dc..d4e2c7318ee6 100644
> --- a/drivers/media/v4l2-core/v4l2-ctrls.c
> +++ b/drivers/media/v4l2-core/v4l2-ctrls.c
> @@ -977,9 +977,6 @@ const char *v4l2_ctrl_get_name(u32 id)
>  	case V4L2_CID_MPEG_VIDEO_LTR_COUNT:			return "LTR Count";
>  	case V4L2_CID_MPEG_VIDEO_FRAME_LTR_INDEX:		return "Frame LTR Index";
>  	case V4L2_CID_MPEG_VIDEO_USE_LTR_FRAMES:		return "Use LTR Frames";
> -	case V4L2_CID_MPEG_VIDEO_MPEG2_SEQUENCE:		return "MPEG-2 Sequence Header";
> -	case V4L2_CID_MPEG_VIDEO_MPEG2_PICTURE:			return "MPEG-2 Picture Header";
> -	case V4L2_CID_MPEG_VIDEO_MPEG2_QUANTISATION:		return "MPEG-2 Quantisation Matrices";
>  	case V4L2_CID_FWHT_I_FRAME_QP:				return "FWHT I-Frame QP Value";
>  	case V4L2_CID_FWHT_P_FRAME_QP:				return "FWHT P-Frame QP Value";
>  
> @@ -1228,6 +1225,9 @@ const char *v4l2_ctrl_get_name(u32 id)
>  	case V4L2_CID_STATELESS_H264_DECODE_PARAMS:		return "H264 Decode Parameters";
>  	case V4L2_CID_STATELESS_FWHT_PARAMS:			return "FWHT Stateless Parameters";
>  	case V4L2_CID_STATELESS_VP8_FRAME:			return "VP8 Frame Parameters";
> +	case V4L2_CID_STATELESS_MPEG2_SEQUENCE:			return "MPEG-2 Sequence Header";
> +	case V4L2_CID_STATELESS_MPEG2_PICTURE:			return "MPEG-2 Picture Header";
> +	case V4L2_CID_STATELESS_MPEG2_QUANTISATION:		return "MPEG-2 Quantisation Matrices";
>  
>  	/* Colorimetry controls */
>  	/* Keep the order of the 'case's the same as in v4l2-controls.h! */
> @@ -1500,13 +1500,13 @@ void v4l2_ctrl_fill(u32 id, const char **name, enum v4l2_ctrl_type *type,
>  	case V4L2_CID_RDS_TX_ALT_FREQS:
>  		*type = V4L2_CTRL_TYPE_U32;
>  		break;
> -	case V4L2_CID_MPEG_VIDEO_MPEG2_SEQUENCE:
> +	case V4L2_CID_STATELESS_MPEG2_SEQUENCE:
>  		*type = V4L2_CTRL_TYPE_MPEG2_SEQUENCE;
>  		break;
> -	case V4L2_CID_MPEG_VIDEO_MPEG2_PICTURE:
> +	case V4L2_CID_STATELESS_MPEG2_PICTURE:
>  		*type = V4L2_CTRL_TYPE_MPEG2_PICTURE;
>  		break;
> -	case V4L2_CID_MPEG_VIDEO_MPEG2_QUANTISATION:
> +	case V4L2_CID_STATELESS_MPEG2_QUANTISATION:
>  		*type = V4L2_CTRL_TYPE_MPEG2_QUANTISATION;
>  		break;
>  	case V4L2_CID_STATELESS_FWHT_PARAMS:
> diff --git a/drivers/staging/media/hantro/hantro_drv.c b/drivers/staging/media/hantro/hantro_drv.c
> index f5fa7e0940c4..b48552bddb3a 100644
> --- a/drivers/staging/media/hantro/hantro_drv.c
> +++ b/drivers/staging/media/hantro/hantro_drv.c
> @@ -289,17 +289,17 @@ static const struct hantro_ctrl controls[] = {
>  	}, {
>  		.codec = HANTRO_MPEG2_DECODER,
>  		.cfg = {
> -			.id = V4L2_CID_MPEG_VIDEO_MPEG2_SEQUENCE,
> +			.id = V4L2_CID_STATELESS_MPEG2_SEQUENCE,
>  		},
>  	}, {
>  		.codec = HANTRO_MPEG2_DECODER,
>  		.cfg = {
> -			.id = V4L2_CID_MPEG_VIDEO_MPEG2_PICTURE,
> +			.id = V4L2_CID_STATELESS_MPEG2_PICTURE,
>  		},
>  	}, {
>  		.codec = HANTRO_MPEG2_DECODER,
>  		.cfg = {
> -			.id = V4L2_CID_MPEG_VIDEO_MPEG2_QUANTISATION,
> +			.id = V4L2_CID_STATELESS_MPEG2_QUANTISATION,
>  		},
>  	}, {
>  		.codec = HANTRO_VP8_DECODER,
> diff --git a/drivers/staging/media/hantro/hantro_g1_mpeg2_dec.c b/drivers/staging/media/hantro/hantro_g1_mpeg2_dec.c
> index 6d89cae7df45..f565e37e397a 100644
> --- a/drivers/staging/media/hantro/hantro_g1_mpeg2_dec.c
> +++ b/drivers/staging/media/hantro/hantro_g1_mpeg2_dec.c
> @@ -83,7 +83,7 @@ hantro_g1_mpeg2_dec_set_quantisation(struct hantro_dev *vpu,
>  {
>  	struct v4l2_ctrl_mpeg2_quantisation *q;
>  
> -	q = hantro_get_ctrl(ctx, V4L2_CID_MPEG_VIDEO_MPEG2_QUANTISATION);
> +	q = hantro_get_ctrl(ctx, V4L2_CID_STATELESS_MPEG2_QUANTISATION);
>  	hantro_mpeg2_dec_copy_qtable(ctx->mpeg2_dec.qtable.cpu, q);
>  	vdpu_write_relaxed(vpu, ctx->mpeg2_dec.qtable.dma, G1_REG_QTABLE_BASE);
>  }
> @@ -160,9 +160,9 @@ void hantro_g1_mpeg2_dec_run(struct hantro_ctx *ctx)
>  	hantro_start_prepare_run(ctx);
>  
>  	seq = hantro_get_ctrl(ctx,
> -			      V4L2_CID_MPEG_VIDEO_MPEG2_SEQUENCE);
> +			      V4L2_CID_STATELESS_MPEG2_SEQUENCE);
>  	pic = hantro_get_ctrl(ctx,
> -			      V4L2_CID_MPEG_VIDEO_MPEG2_PICTURE);
> +			      V4L2_CID_STATELESS_MPEG2_PICTURE);
>  
>  	reg = G1_REG_DEC_AXI_RD_ID(0) |
>  	      G1_REG_DEC_TIMEOUT_E(1) |
> diff --git a/drivers/staging/media/hantro/rk3399_vpu_hw_mpeg2_dec.c b/drivers/staging/media/hantro/rk3399_vpu_hw_mpeg2_dec.c
> index d16d76760278..2527dce7eb18 100644
> --- a/drivers/staging/media/hantro/rk3399_vpu_hw_mpeg2_dec.c
> +++ b/drivers/staging/media/hantro/rk3399_vpu_hw_mpeg2_dec.c
> @@ -85,7 +85,7 @@ rk3399_vpu_mpeg2_dec_set_quantisation(struct hantro_dev *vpu,
>  {
>  	struct v4l2_ctrl_mpeg2_quantisation *q;
>  
> -	q = hantro_get_ctrl(ctx, V4L2_CID_MPEG_VIDEO_MPEG2_QUANTISATION);
> +	q = hantro_get_ctrl(ctx, V4L2_CID_STATELESS_MPEG2_QUANTISATION);
>  	hantro_mpeg2_dec_copy_qtable(ctx->mpeg2_dec.qtable.cpu, q);
>  	vdpu_write_relaxed(vpu, ctx->mpeg2_dec.qtable.dma, VDPU_REG_QTABLE_BASE);
>  }
> @@ -162,9 +162,9 @@ void rk3399_vpu_mpeg2_dec_run(struct hantro_ctx *ctx)
>  	hantro_start_prepare_run(ctx);
>  
>  	seq = hantro_get_ctrl(ctx,
> -			      V4L2_CID_MPEG_VIDEO_MPEG2_SEQUENCE);
> +			      V4L2_CID_STATELESS_MPEG2_SEQUENCE);
>  	pic = hantro_get_ctrl(ctx,
> -			      V4L2_CID_MPEG_VIDEO_MPEG2_PICTURE);
> +			      V4L2_CID_STATELESS_MPEG2_PICTURE);
>  
>  	reg = VDPU_REG_DEC_ADV_PRE_DIS(0) |
>  	      VDPU_REG_DEC_SCMD_DIS(0) |
> diff --git a/drivers/staging/media/sunxi/cedrus/cedrus.c b/drivers/staging/media/sunxi/cedrus/cedrus.c
> index 4430c8fa2cc7..fa348c09f844 100644
> --- a/drivers/staging/media/sunxi/cedrus/cedrus.c
> +++ b/drivers/staging/media/sunxi/cedrus/cedrus.c
> @@ -31,19 +31,19 @@
>  static const struct cedrus_control cedrus_controls[] = {
>  	{
>  		.cfg = {
> -			.id	= V4L2_CID_MPEG_VIDEO_MPEG2_SEQUENCE,
> +			.id	= V4L2_CID_STATELESS_MPEG2_SEQUENCE,
>  		},
>  		.codec		= CEDRUS_CODEC_MPEG2,
>  	},
>  	{
>  		.cfg = {
> -			.id	= V4L2_CID_MPEG_VIDEO_MPEG2_PICTURE,
> +			.id	= V4L2_CID_STATELESS_MPEG2_PICTURE,
>  		},
>  		.codec		= CEDRUS_CODEC_MPEG2,
>  	},
>  	{
>  		.cfg = {
> -			.id	= V4L2_CID_MPEG_VIDEO_MPEG2_QUANTISATION,
> +			.id	= V4L2_CID_STATELESS_MPEG2_QUANTISATION,
>  		},
>  		.codec		= CEDRUS_CODEC_MPEG2,
>  	},
> diff --git a/drivers/staging/media/sunxi/cedrus/cedrus_dec.c b/drivers/staging/media/sunxi/cedrus/cedrus_dec.c
> index e98185c1f5a7..97e410d92506 100644
> --- a/drivers/staging/media/sunxi/cedrus/cedrus_dec.c
> +++ b/drivers/staging/media/sunxi/cedrus/cedrus_dec.c
> @@ -41,11 +41,11 @@ void cedrus_device_run(void *priv)
>  	switch (ctx->src_fmt.pixelformat) {
>  	case V4L2_PIX_FMT_MPEG2_SLICE:
>  		run.mpeg2.sequence = cedrus_find_control_data(ctx,
> -			V4L2_CID_MPEG_VIDEO_MPEG2_SEQUENCE);
> +			V4L2_CID_STATELESS_MPEG2_SEQUENCE);
>  		run.mpeg2.picture = cedrus_find_control_data(ctx,
> -			V4L2_CID_MPEG_VIDEO_MPEG2_PICTURE);
> +			V4L2_CID_STATELESS_MPEG2_PICTURE);
>  		run.mpeg2.quantisation = cedrus_find_control_data(ctx,
> -			V4L2_CID_MPEG_VIDEO_MPEG2_QUANTISATION);
> +			V4L2_CID_STATELESS_MPEG2_QUANTISATION);
>  		break;
>  
>  	case V4L2_PIX_FMT_H264_SLICE:
> diff --git a/include/media/mpeg2-ctrls.h b/include/media/mpeg2-ctrls.h
> deleted file mode 100644
> index c4cf1af5b73b..000000000000
> --- a/include/media/mpeg2-ctrls.h
> +++ /dev/null
> @@ -1,126 +0,0 @@
> -/* SPDX-License-Identifier: GPL-2.0 */
> -/*
> - * These are the MPEG2 state controls for use with stateless MPEG-2
> - * 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 _MPEG2_CTRLS_H_
> -#define _MPEG2_CTRLS_H_
> -
> -#define V4L2_CID_MPEG_VIDEO_MPEG2_QUANTISATION		(V4L2_CID_CODEC_BASE+251)
> -#define V4L2_CID_MPEG_VIDEO_MPEG2_SEQUENCE		(V4L2_CID_CODEC_BASE+252)
> -#define V4L2_CID_MPEG_VIDEO_MPEG2_PICTURE		(V4L2_CID_CODEC_BASE+253)
> -
> -/* enum v4l2_ctrl_type type values */
> -#define V4L2_MPEG2_SEQ_FLAG_PROGRESSIVE		0x0001
> -
> -/**
> - * struct v4l2_ctrl_mpeg2_sequence - MPEG-2 sequence header
> - *
> - * All the members on this structure match the sequence header and sequence
> - * extension syntaxes as specified by the MPEG-2 specification.
> - *
> - * Fields horizontal_size, vertical_size and vbv_buffer_size are a
> - * combination of respective _value and extension syntax elements,
> - * as described in section 6.3.3 "Sequence header".
> - *
> - * @horizontal_size: combination of elements horizontal_size_value and
> - * horizontal_size_extension.
> - * @vertical_size: combination of elements vertical_size_value and
> - * vertical_size_extension.
> - * @vbv_buffer_size: combination of elements vbv_buffer_size_value and
> - * vbv_buffer_size_extension.
> - * @profile_and_level_indication: see MPEG-2 specification.
> - * @chroma_format: see MPEG-2 specification.
> - * @flags: see V4L2_MPEG2_SEQ_FLAG_{}.
> - */
> -struct v4l2_ctrl_mpeg2_sequence {
> -	__u16	horizontal_size;
> -	__u16	vertical_size;
> -	__u32	vbv_buffer_size;
> -	__u16	profile_and_level_indication;
> -	__u8	chroma_format;
> -	__u8	flags;
> -};
> -
> -#define V4L2_MPEG2_PIC_CODING_TYPE_I			1
> -#define V4L2_MPEG2_PIC_CODING_TYPE_P			2
> -#define V4L2_MPEG2_PIC_CODING_TYPE_B			3
> -#define V4L2_MPEG2_PIC_CODING_TYPE_D			4
> -
> -#define V4L2_MPEG2_PIC_TOP_FIELD			0x1
> -#define V4L2_MPEG2_PIC_BOTTOM_FIELD			0x2
> -#define V4L2_MPEG2_PIC_FRAME				0x3
> -
> -#define V4L2_MPEG2_PIC_FLAG_TOP_FIELD_FIRST		0x0001
> -#define V4L2_MPEG2_PIC_FLAG_FRAME_PRED_DCT		0x0002
> -#define V4L2_MPEG2_PIC_FLAG_CONCEALMENT_MV		0x0004
> -#define V4L2_MPEG2_PIC_FLAG_Q_SCALE_TYPE		0x0008
> -#define V4L2_MPEG2_PIC_FLAG_INTRA_VLC			0x0010
> -#define V4L2_MPEG2_PIC_FLAG_ALT_SCAN			0x0020
> -#define V4L2_MPEG2_PIC_FLAG_REPEAT_FIRST		0x0040
> -#define V4L2_MPEG2_PIC_FLAG_PROGRESSIVE			0x0080
> -
> -/**
> - * struct v4l2_ctrl_mpeg2_picture - MPEG-2 picture header
> - *
> - * All the members on this structure match the picture header and picture
> - * coding extension syntaxes as specified by the MPEG-2 specification.
> - *
> - * @backward_ref_ts: timestamp of the V4L2 capture buffer to use as
> - * reference for backward prediction.
> - * @forward_ref_ts: timestamp of the V4L2 capture buffer to use as
> - * reference for forward prediction. These timestamp refers to the
> - * timestamp field in struct v4l2_buffer. Use v4l2_timeval_to_ns()
> - * to convert the struct timeval to a __u64.
> - * @flags: see V4L2_MPEG2_PIC_FLAG_{}.
> - * @f_code[2][2]: see MPEG-2 specification.
> - * @picture_coding_type: see MPEG-2 specification.
> - * @picture_structure: see V4L2_MPEG2_PIC_{}_FIELD.
> - * @intra_dc_precision: see MPEG-2 specification.
> - * @reserved: padding field. Should be zeroed by applications.
> - */
> -struct v4l2_ctrl_mpeg2_picture {
> -	__u64	backward_ref_ts;
> -	__u64	forward_ref_ts;
> -	__u32	flags;
> -	__u8	f_code[2][2];
> -	__u8	picture_coding_type;
> -	__u8	picture_structure;
> -	__u8	intra_dc_precision;
> -	__u8	reserved;
> -};
> -
> -/**
> - * struct v4l2_ctrl_mpeg2_quantisation - MPEG-2 quantisation
> - *
> - * Quantization matrices as specified by section 6.3.7
> - * "Quant matrix extension".
> - *
> - * @intra_quantiser_matrix: The quantisation matrix coefficients
> - * for intra-coded frames, in zigzag scanning order. It is relevant
> - * for both luma and chroma components, although it can be superseded
> - * by the chroma-specific matrix for non-4:2:0 YUV formats.
> - * @non_intra_quantiser_matrix: The quantisation matrix coefficients
> - * for non-intra-coded frames, in zigzag scanning order. It is relevant
> - * for both luma and chroma components, although it can be superseded
> - * by the chroma-specific matrix for non-4:2:0 YUV formats.
> - * @chroma_intra_quantiser_matrix: The quantisation matrix coefficients
> - * for the chominance component of intra-coded frames, in zigzag scanning
> - * order. Only relevant for 4:2:2 and 4:4:4 YUV formats.
> - * @chroma_non_intra_quantiser_matrix: The quantisation matrix coefficients
> - * for the chrominance component of non-intra-coded frames, in zigzag scanning
> - * order. Only relevant for 4:2:2 and 4:4:4 YUV formats.
> - */
> -struct v4l2_ctrl_mpeg2_quantisation {
> -	__u8	intra_quantiser_matrix[64];
> -	__u8	non_intra_quantiser_matrix[64];
> -	__u8	chroma_intra_quantiser_matrix[64];
> -	__u8	chroma_non_intra_quantiser_matrix[64];
> -};
> -
> -#endif
> diff --git a/include/media/v4l2-ctrls.h b/include/media/v4l2-ctrls.h
> index 215e44172c66..575b59fbac77 100644
> --- a/include/media/v4l2-ctrls.h
> +++ b/include/media/v4l2-ctrls.h
> @@ -17,7 +17,6 @@
>   * Include the stateless codec compound control definitions.
>   * This will move to the public headers once this API is fully stable.
>   */
> -#include <media/mpeg2-ctrls.h>
>  #include <media/hevc-ctrls.h>
>  
>  /* forward references */
> diff --git a/include/uapi/linux/v4l2-controls.h b/include/uapi/linux/v4l2-controls.h
> index d43bec5f1afd..7c0cf9121669 100644
> --- a/include/uapi/linux/v4l2-controls.h
> +++ b/include/uapi/linux/v4l2-controls.h
> @@ -1862,6 +1862,118 @@ struct v4l2_ctrl_vp8_frame {
>  	__u64 flags;
>  };
>  
> +/* Stateless MPEG-2 controls */
> +
> +#define V4L2_MPEG2_SEQ_FLAG_PROGRESSIVE	0x0001

Since the flags field is a single byte, I would recommend that you write this
as 0x01 instead of 0x0001 to reflect that there are just 8 bits available.

> +
> +#define V4L2_CID_STATELESS_MPEG2_SEQUENCE (V4L2_CID_CODEC_STATELESS_BASE+220)
> +/**
> + * struct v4l2_ctrl_mpeg2_sequence - MPEG-2 sequence header
> + *
> + * All the members on this structure match the sequence header and sequence
> + * extension syntaxes as specified by the MPEG-2 specification.
> + *
> + * Fields horizontal_size, vertical_size and vbv_buffer_size are a
> + * combination of respective _value and extension syntax elements,
> + * as described in section 6.3.3 "Sequence header".
> + *
> + * @horizontal_size: combination of elements horizontal_size_value and
> + * horizontal_size_extension.
> + * @vertical_size: combination of elements vertical_size_value and
> + * vertical_size_extension.
> + * @vbv_buffer_size: combination of elements vbv_buffer_size_value and
> + * vbv_buffer_size_extension.
> + * @profile_and_level_indication: see MPEG-2 specification.
> + * @chroma_format: see MPEG-2 specification.
> + * @flags: see V4L2_MPEG2_SEQ_FLAG_{}.
> + */
> +struct v4l2_ctrl_mpeg2_sequence {
> +	__u16	horizontal_size;
> +	__u16	vertical_size;
> +	__u32	vbv_buffer_size;
> +	__u16	profile_and_level_indication;
> +	__u8	chroma_format;
> +	__u8	flags;
> +};
> +
> +#define V4L2_MPEG2_PIC_CODING_TYPE_I			1
> +#define V4L2_MPEG2_PIC_CODING_TYPE_P			2
> +#define V4L2_MPEG2_PIC_CODING_TYPE_B			3
> +#define V4L2_MPEG2_PIC_CODING_TYPE_D			4
> +
> +#define V4L2_MPEG2_PIC_TOP_FIELD			0x1
> +#define V4L2_MPEG2_PIC_BOTTOM_FIELD			0x2
> +#define V4L2_MPEG2_PIC_FRAME				0x3
> +
> +#define V4L2_MPEG2_PIC_FLAG_TOP_FIELD_FIRST		0x0001
> +#define V4L2_MPEG2_PIC_FLAG_FRAME_PRED_DCT		0x0002
> +#define V4L2_MPEG2_PIC_FLAG_CONCEALMENT_MV		0x0004
> +#define V4L2_MPEG2_PIC_FLAG_Q_SCALE_TYPE		0x0008
> +#define V4L2_MPEG2_PIC_FLAG_INTRA_VLC			0x0010
> +#define V4L2_MPEG2_PIC_FLAG_ALT_SCAN			0x0020
> +#define V4L2_MPEG2_PIC_FLAG_REPEAT_FIRST		0x0040
> +#define V4L2_MPEG2_PIC_FLAG_PROGRESSIVE			0x0080
> +
> +#define V4L2_CID_STATELESS_MPEG2_PICTURE (V4L2_CID_CODEC_STATELESS_BASE+221)
> +/**
> + * struct v4l2_ctrl_mpeg2_picture - MPEG-2 picture header
> + *
> + * All the members on this structure match the picture header and picture
> + * coding extension syntaxes as specified by the MPEG-2 specification.
> + *
> + * @backward_ref_ts: timestamp of the V4L2 capture buffer to use as
> + * reference for backward prediction.
> + * @forward_ref_ts: timestamp of the V4L2 capture buffer to use as
> + * reference for forward prediction. These timestamp refers to the
> + * timestamp field in struct v4l2_buffer. Use v4l2_timeval_to_ns()
> + * to convert the struct timeval to a __u64.
> + * @flags: see V4L2_MPEG2_PIC_FLAG_{}.
> + * @f_code: see MPEG-2 specification.
> + * @picture_coding_type: see MPEG-2 specification.
> + * @picture_structure: see V4L2_MPEG2_PIC_{}_FIELD.
> + * @intra_dc_precision: see MPEG-2 specification.
> + * @reserved: padding field. Should be zeroed by applications.
> + */
> +struct v4l2_ctrl_mpeg2_picture {
> +	__u64	backward_ref_ts;
> +	__u64	forward_ref_ts;
> +	__u32	flags;
> +	__u8	f_code[2][2];
> +	__u8	picture_coding_type;
> +	__u8	picture_structure;
> +	__u8	intra_dc_precision;
> +	__u8	reserved;

pahole reports that the struct size is different between 32 and 64 bit
x86 architectures. The initial u64 fields will force the total struct size
to be a multiple of 8 bytes on x86_64, so it has to be padded with reserved[5].

While the 32 and 64 arm architectures have the same size, there too
4 bytes padding is applied, which you don't want.

Regards,

	Hans

> +};
> +
> +#define V4L2_CID_STATELESS_MPEG2_QUANTISATION (V4L2_CID_CODEC_STATELESS_BASE+222)
> +/**
> + * struct v4l2_ctrl_mpeg2_quantisation - MPEG-2 quantisation
> + *
> + * Quantisation matrices as specified by section 6.3.7
> + * "Quant matrix extension".
> + *
> + * @intra_quantiser_matrix: The quantisation matrix coefficients
> + * for intra-coded frames, in zigzag scanning order. It is relevant
> + * for both luma and chroma components, although it can be superseded
> + * by the chroma-specific matrix for non-4:2:0 YUV formats.
> + * @non_intra_quantiser_matrix: The quantisation matrix coefficients
> + * for non-intra-coded frames, in zigzag scanning order. It is relevant
> + * for both luma and chroma components, although it can be superseded
> + * by the chroma-specific matrix for non-4:2:0 YUV formats.
> + * @chroma_intra_quantiser_matrix: The quantisation matrix coefficients
> + * for the chominance component of intra-coded frames, in zigzag scanning
> + * order. Only relevant for 4:2:2 and 4:4:4 YUV formats.
> + * @chroma_non_intra_quantiser_matrix: The quantisation matrix coefficients
> + * for the chrominance component of non-intra-coded frames, in zigzag scanning
> + * order. Only relevant for 4:2:2 and 4:4:4 YUV formats.
> + */
> +struct v4l2_ctrl_mpeg2_quantisation {
> +	__u8	intra_quantiser_matrix[64];
> +	__u8	non_intra_quantiser_matrix[64];
> +	__u8	chroma_intra_quantiser_matrix[64];
> +	__u8	chroma_non_intra_quantiser_matrix[64];
> +};
> +
>  #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 d3bb18a3a51b..9260791b8438 100644
> --- a/include/uapi/linux/videodev2.h
> +++ b/include/uapi/linux/videodev2.h
> @@ -1747,6 +1747,9 @@ struct v4l2_ext_control {
>  		struct v4l2_ctrl_h264_decode_params __user *p_h264_decode_params;
>  		struct v4l2_ctrl_fwht_params __user *p_fwht_params;
>  		struct v4l2_ctrl_vp8_frame __user *p_vp8_frame;
> +		struct v4l2_ctrl_mpeg2_sequence __user *p_mpeg2_sequence;
> +		struct v4l2_ctrl_mpeg2_picture __user *p_mpeg2_picture;
> +		struct v4l2_ctrl_mpeg2_quantisation __user *p_mpeg2_quantisation;
>  		void __user *ptr;
>  	};
>  } __attribute__ ((packed));
> 

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ