lkml.org 
[lkml]   [2019]   [Apr]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    Date
    SubjectRe: [PATCH RESEND v7 1/2] media: uapi: Add H264 low-level decoder API compound controls.
    Hi,

    On Thu, Apr 4, 2019 at 9:26 PM Maxime Ripard <maxime.ripard@bootlin.com> wrote:
    >
    > From: Pawel Osciak <posciak@chromium.org>
    >
    > Stateless video codecs will require both the H264 metadata and slices in
    > order to be able to decode frames.
    >
    > This introduces the definitions for a new pixel format for H264 slices that
    > have been parsed, as well as the structures used to pass the metadata from
    > the userspace to the kernel.
    >
    > Reviewed-by: Tomasz Figa <tfiga@chromium.org>
    > Signed-off-by: Pawel Osciak <posciak@chromium.org>
    > Signed-off-by: Guenter Roeck <groeck@chromium.org>
    > Co-developed-by: Maxime Ripard <maxime.ripard@bootlin.com>
    > Signed-off-by: Maxime Ripard <maxime.ripard@bootlin.com>
    > ---
    > Documentation/media/uapi/v4l/biblio.rst | 9 +-
    > Documentation/media/uapi/v4l/ext-ctrls-codec.rst | 569 ++++++++++++++-
    > Documentation/media/uapi/v4l/pixfmt-compressed.rst | 19 +-
    > Documentation/media/uapi/v4l/vidioc-queryctrl.rst | 30 +-
    > Documentation/media/videodev2.h.rst.exceptions | 5 +-
    > drivers/media/v4l2-core/v4l2-ctrls.c | 42 +-
    > drivers/media/v4l2-core/v4l2-ioctl.c | 1 +-
    > include/media/h264-ctrls.h | 192 +++++-
    > include/media/v4l2-ctrls.h | 13 +-
    > include/uapi/linux/videodev2.h | 1 +-
    > 10 files changed, 880 insertions(+), 1 deletion(-)
    > create mode 100644 include/media/h264-ctrls.h
    >
    > diff --git a/Documentation/media/uapi/v4l/biblio.rst b/Documentation/media/uapi/v4l/biblio.rst
    > index ec33768c055e..8f4eb8823d82 100644
    > --- a/Documentation/media/uapi/v4l/biblio.rst
    > +++ b/Documentation/media/uapi/v4l/biblio.rst
    > @@ -122,6 +122,15 @@ ITU BT.1119
    >
    > :author: International Telecommunication Union (http://www.itu.ch)
    >
    > +.. _h264:
    > +
    > +ITU-T Rec. H.264 Specification (04/2017 Edition)
    > +================================================
    > +
    > +:title: ITU-T Recommendation H.264 "Advanced Video Coding for Generic Audiovisual Services"
    > +
    > +:author: International Telecommunication Union (http://www.itu.ch)
    > +
    > .. _jfif:
    >
    > JFIF
    > diff --git a/Documentation/media/uapi/v4l/ext-ctrls-codec.rst b/Documentation/media/uapi/v4l/ext-ctrls-codec.rst
    > index 67a122339c0e..1285bfec7d3d 100644
    > --- a/Documentation/media/uapi/v4l/ext-ctrls-codec.rst
    > +++ b/Documentation/media/uapi/v4l/ext-ctrls-codec.rst
    > @@ -1371,6 +1371,575 @@ enum v4l2_mpeg_video_h264_hierarchical_coding_type -
    > - Layer number
    >
    >
    > +.. _v4l2-mpeg-h264:
    > +
    > +``V4L2_CID_MPEG_VIDEO_H264_SPS (struct)``
    > + Specifies the sequence parameter set (as extracted from the
    > + bitstream) for the associated H264 slice data. This includes the
    > + necessary parameters for configuring a stateless hardware decoding
    > + pipeline for H264. The bitstream parameters are defined according
    > + to :ref:`h264`, section 7.4.2.1.1 "Sequence Parameter Set Data
    > + Semantics". For further documentation, refer to the above
    > + specification, unless there is an explicit comment stating
    > + otherwise.
    > +
    > + .. note::
    > +
    > + This compound control is not yet part of the public kernel API and
    > + it is expected to change.
    > +
    > +.. c:type:: v4l2_ctrl_h264_sps
    > +
    > +.. cssclass:: longtable
    > +
    > +.. flat-table:: struct v4l2_ctrl_h264_sps
    > + :header-rows: 0
    > + :stub-columns: 0
    > + :widths: 1 1 2
    > +
    > + * - __u8
    > + - ``profile_idc``
    > + -
    > + * - __u8
    > + - ``constraint_set_flags``
    > + - See :ref:`Sequence Parameter Set Constraints Set Flags <h264_sps_constraints_set_flags>`
    > + * - __u8
    > + - ``level_idc``
    > + -
    > + * - __u8
    > + - ``seq_parameter_set_id``
    > + -
    > + * - __u8
    > + - ``chroma_format_idc``
    > + -
    > + * - __u8
    > + - ``bit_depth_luma_minus8``
    > + -
    > + * - __u8
    > + - ``bit_depth_chroma_minus8``
    > + -
    > + * - __u8
    > + - ``log2_max_frame_num_minus4``
    > + -
    > + * - __u8
    > + - ``pic_order_cnt_type``
    > + -
    > + * - __u8
    > + - ``log2_max_pic_order_cnt_lsb_minus4``
    > + -
    > + * - __u8
    > + - ``max_num_ref_frames``
    > + -
    > + * - __u8
    > + - ``num_ref_frames_in_pic_order_cnt_cycle``
    > + -
    > + * - __s32
    > + - ``offset_for_ref_frame[255]``
    > + -
    > + * - __s32
    > + - ``offset_for_non_ref_pic``
    > + -
    > + * - __s32
    > + - ``offset_for_top_to_bottom_field``
    > + -
    > + * - __u16
    > + - ``pic_width_in_mbs_minus1``
    > + -
    > + * - __u16
    > + - ``pic_height_in_map_units_minus1``
    > + -

    We recently had some reflection with Alex that this is redundant with
    the width and height in the OUTPUT format. It may also apply to some
    other fields in these structs. I feel like they should be removed and
    passed via corresponding generic V4L2 properties - format, selection,
    etc.

    The same problem is also present in the MPEG2 controls. In fact, there
    was a patch already which used some fields from the controls to
    calculate the destination buffer strides, rather than bytesperline in
    the format.

    Since we're in staging, it could be done with a follow-up patch, though.

    Best regards,
    Tomasz

    \
     
     \ /
      Last update: 2019-04-04 15:01    [W:5.076 / U:0.092 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site