mbox series

[v2,0/8] V4L2 stateless VP8 de-staging

Message ID 20210303202714.212394-1-ezequiel@collabora.com
Headers show
Series V4L2 stateless VP8 de-staging | expand

Message

Ezequiel Garcia March 3, 2021, 8:27 p.m. UTC
After close scrutiny of the VP8 specification, it seems
the VP8 stateless API is ready.

This series contains a series of clean-ups and improvement:
renaming symbols for consistency, documenting things for clarity,
and then moves the control to proper V4L2 headers.

It must be noted that, unlike parsed H.264, V4L2_PIX_FMT_VP8_FRAME
buffers must contain the VP8 frame header. In others words
a VP8 parsed frame buffer is:

  +--------+-----------------------------------------------------+-----+------------+  
  | tag 3B | extra 7B | header | MB data | DCT size | DCT part 0 | ... | DCT part N |  
  +--------+-----------------------------------------------------+-----+------------+  

Hopefully the pixel format documentation is now clear about that.

Support in Cedrus and Hantro is available upstream, and Mediatek
support is available downstream [1] which uses the API as-is.

This was tested with GStreamer v4l2codec element and Fluster [2]
conformance test, on a Hantro G1 device.

Changelog:

v2: * Rename VP8_FRAME_IS_KEY_FRAME

[1] https://chromium-review.googlesource.com/c/chromiumos/third_party/kernel/+/2614338/21/
[2] https://github.com/fluendo/fluster

Ezequiel Garcia (8):
  media: uapi: vp8: Remove "header" from symbol names and macros
  media: uapi: vp8: Rename v4l2_vp8_loopfilter to v4l2_vp8_loop_filter
  media: uapi: vp8: Add proper kernel-doc documentation
  media: uapi: Move parsed VP8 pixel format out of staging
  media: uapi: Move the VP8 stateless control type out of staging
  media: controls: Log VP8 stateless control in .std_log
  media: uapi: Rename V4L2 VP8 specific macro to V4L2_VP8_
  media: uapi: move VP8 stateless controls out of staging

 .../media/v4l/ext-ctrls-codec-stateless.rst   | 318 +++++++++++++++++
 .../media/v4l/ext-ctrls-codec.rst             | 323 ------------------
 .../media/v4l/pixfmt-compressed.rst           |  15 +-
 .../media/v4l/vidioc-g-ext-ctrls.rst          |   4 +
 .../media/v4l/vidioc-queryctrl.rst            |   6 +
 .../media/videodev2.h.rst.exceptions          |   1 +
 drivers/media/v4l2-core/v4l2-ctrls.c          |  39 ++-
 drivers/staging/media/hantro/hantro_drv.c     |   2 +-
 .../staging/media/hantro/hantro_g1_vp8_dec.c  |  55 ++-
 drivers/staging/media/hantro/hantro_hw.h      |   2 +-
 drivers/staging/media/hantro/hantro_vp8.c     |  10 +-
 .../media/hantro/rk3399_vpu_hw_vp8_dec.c      |  55 ++-
 drivers/staging/media/sunxi/cedrus/cedrus.c   |   2 +-
 drivers/staging/media/sunxi/cedrus/cedrus.h   |   2 +-
 .../staging/media/sunxi/cedrus/cedrus_dec.c   |   2 +-
 .../staging/media/sunxi/cedrus/cedrus_vp8.c   | 113 +++---
 include/media/v4l2-ctrls.h                    |   5 +-
 include/media/vp8-ctrls.h                     | 114 -------
 include/uapi/linux/v4l2-controls.h            | 195 +++++++++++
 include/uapi/linux/videodev2.h                |   4 +
 20 files changed, 677 insertions(+), 590 deletions(-)
 delete mode 100644 include/media/vp8-ctrls.h

Comments

Alexandre Courbot March 4, 2021, 8:48 a.m. UTC | #1
On Thu, Mar 4, 2021 at 5:27 AM Ezequiel Garcia <ezequiel@collabora.com> wrote:
>
> It doesn't seem to add any clarity to have a "header" suffix in controls,
> struct names and flags.
>
> Since this just makes names too long without any benefit, just drop it.
>
> Signed-off-by: Ezequiel Garcia <ezequiel@collabora.com>
> ---
>  .../media/v4l/ext-ctrls-codec.rst             | 80 +++++++--------
>  .../media/v4l/pixfmt-compressed.rst           |  2 +-
>  drivers/media/v4l2-core/v4l2-ctrls.c          | 36 +++----
>  drivers/staging/media/hantro/hantro_drv.c     |  2 +-
>  .../staging/media/hantro/hantro_g1_vp8_dec.c  | 48 ++++-----
>  drivers/staging/media/hantro/hantro_hw.h      |  2 +-
>  drivers/staging/media/hantro/hantro_vp8.c     | 10 +-
>  .../media/hantro/rk3399_vpu_hw_vp8_dec.c      | 48 ++++-----
>  drivers/staging/media/sunxi/cedrus/cedrus.c   |  2 +-
>  drivers/staging/media/sunxi/cedrus/cedrus.h   |  2 +-
>  .../staging/media/sunxi/cedrus/cedrus_dec.c   |  2 +-
>  .../staging/media/sunxi/cedrus/cedrus_vp8.c   | 98 +++++++++----------
>  include/media/v4l2-ctrls.h                    |  4 +-
>  include/media/vp8-ctrls.h                     | 48 ++++-----
>  14 files changed, 192 insertions(+), 192 deletions(-)
>
> diff --git a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
> index 00944e97d638..006301e88554 100644
> --- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
> +++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
> @@ -1749,7 +1749,7 @@ enum v4l2_mpeg_video_h264_hierarchical_coding_type -
>
>  .. _v4l2-mpeg-vp8:
>
> -``V4L2_CID_MPEG_VIDEO_VP8_FRAME_HEADER (struct)``
> +``V4L2_CID_MPEG_VIDEO_VP8_FRAME (struct)``
>      Specifies the frame parameters for the associated VP8 parsed frame data.
>      This includes the necessary parameters for
>      configuring a stateless hardware decoding pipeline for VP8.
> @@ -1760,28 +1760,28 @@ enum v4l2_mpeg_video_h264_hierarchical_coding_type -
>         This compound control is not yet part of the public kernel API and
>         it is expected to change.
>
> -.. c:type:: v4l2_ctrl_vp8_frame_header
> +.. c:type:: v4l2_ctrl_vp8_frame
>
>  .. cssclass:: longtable
>
>  .. tabularcolumns:: |p{5.8cm}|p{4.8cm}|p{6.6cm}|
>
> -.. flat-table:: struct v4l2_ctrl_vp8_frame_header
> +.. flat-table:: struct v4l2_ctrl_vp8_frame
>      :header-rows:  0
>      :stub-columns: 0
>      :widths:       1 1 2
>
> -    * - struct :c:type:`v4l2_vp8_segment_header`
> -      - ``segment_header``
> +    * - struct :c:type:`v4l2_vp8_segment`
> +      - ``seg``
>        - Structure with segment-based adjustments metadata.
> -    * - struct :c:type:`v4l2_vp8_loopfilter_header`
> -      - ``loopfilter_header``
> +    * - struct :c:type:`v4l2_vp8_loopfilter`
> +      - ``lf``
>        - Structure with loop filter level adjustments metadata.
> -    * - struct :c:type:`v4l2_vp8_quantization_header`
> -      - ``quant_header``
> +    * - struct :c:type:`v4l2_vp8_quantization`
> +      - ``quant``
>        - Structure with VP8 dequantization indices metadata.
> -    * - struct :c:type:`v4l2_vp8_entropy_header`
> -      - ``entropy_header``
> +    * - struct :c:type:`v4l2_vp8_entropy`
> +      - ``entropy``
>        - Structure with VP8 entropy coder probabilities metadata.
>      * - struct :c:type:`v4l2_vp8_entropy_coder_state`
>        - ``coder_state``
> @@ -1850,11 +1850,11 @@ enum v4l2_mpeg_video_h264_hierarchical_coding_type -
>         :c:type:`v4l2_buffer` to a __u64.
>      * - __u64
>        - ``flags``
> -      - See :ref:`Frame Header Flags <vp8_frame_header_flags>`
> +      - See :ref:`Frame Flags <vp8_frame_flags>`
>
> -.. _vp8_frame_header_flags:
> +.. _vp8_frame_flags:
>
> -``Frame Header Flags``
> +``Frame Flags``
>
>  .. cssclass:: longtable
>
> @@ -1863,22 +1863,22 @@ enum v4l2_mpeg_video_h264_hierarchical_coding_type -
>      :stub-columns: 0
>      :widths:       1 1 2
>
> -    * - ``V4L2_VP8_FRAME_HEADER_FLAG_KEY_FRAME``
> +    * - ``V4L2_VP8_FRAME_FLAG_KEY_FRAME``
>        - 0x01
>        - Indicates if the frame is a key frame.
> -    * - ``V4L2_VP8_FRAME_HEADER_FLAG_EXPERIMENTAL``
> +    * - ``V4L2_VP8_FRAME_FLAG_EXPERIMENTAL``
>        - 0x02
>        - Experimental bitstream.
> -    * - ``V4L2_VP8_FRAME_HEADER_FLAG_SHOW_FRAME``
> +    * - ``V4L2_VP8_FRAME_FLAG_SHOW_FRAME``
>        - 0x04
>        - Show frame flag, indicates if the frame is for display.
> -    * - ``V4L2_VP8_FRAME_HEADER_FLAG_MB_NO_SKIP_COEFF``
> +    * - ``V4L2_VP8_FRAME_FLAG_MB_NO_SKIP_COEFF``
>        - 0x08
>        - Enable/disable skipping of macroblocks with no non-zero coefficients.
> -    * - ``V4L2_VP8_FRAME_HEADER_FLAG_SIGN_BIAS_GOLDEN``
> +    * - ``V4L2_VP8_FRAME_FLAG_SIGN_BIAS_GOLDEN``
>        - 0x10
>        - Sign of motion vectors when the golden frame is referenced.
> -    * - ``V4L2_VP8_FRAME_HEADER_FLAG_SIGN_BIAS_ALT``
> +    * - ``V4L2_VP8_FRAME_FLAG_SIGN_BIAS_ALT``
>        - 0x20
>        - Sign of motion vectors when the alt frame is referenced.
>
> @@ -1906,13 +1906,13 @@ enum v4l2_mpeg_video_h264_hierarchical_coding_type -
>        - ``padding``
>        - Applications and drivers must set this to zero.
>
> -.. c:type:: v4l2_vp8_segment_header
> +.. c:type:: v4l2_vp8_segment
>
>  .. cssclass:: longtable
>
>  .. tabularcolumns:: |p{1.5cm}|p{6.3cm}|p{9.4cm}|
>
> -.. flat-table:: struct v4l2_vp8_segment_header
> +.. flat-table:: struct v4l2_vp8_segment
>      :header-rows:  0
>      :stub-columns: 0
>      :widths:       1 1 2
> @@ -1931,11 +1931,11 @@ enum v4l2_mpeg_video_h264_hierarchical_coding_type -
>        - Applications and drivers must set this to zero.
>      * - __u32
>        - ``flags``
> -      - See :ref:`Segment Header Flags <vp8_segment_header_flags>`
> +      - See :ref:`Segment Flags <vp8_segment_flags>`
>
> -.. _vp8_segment_header_flags:
> +.. _vp8_segment_flags:
>
> -``Segment Header Flags``
> +``Segment Flags``
>
>  .. cssclass:: longtable
>
> @@ -1944,27 +1944,27 @@ enum v4l2_mpeg_video_h264_hierarchical_coding_type -
>      :stub-columns: 0
>      :widths:       1 1 2
>
> -    * - ``V4L2_VP8_SEGMENT_HEADER_FLAG_ENABLED``
> +    * - ``V4L2_VP8_SEGMENT_FLAG_ENABLED``
>        - 0x01
>        - Enable/disable segment-based adjustments.
> -    * - ``V4L2_VP8_SEGMENT_HEADER_FLAG_UPDATE_MAP``
> +    * - ``V4L2_VP8_SEGMENT_FLAG_UPDATE_MAP``
>        - 0x02
>        - Indicates if the macroblock segmentation map is updated in this frame.
> -    * - ``V4L2_VP8_SEGMENT_HEADER_FLAG_UPDATE_FEATURE_DATA``
> +    * - ``V4L2_VP8_SEGMENT_FLAG_UPDATE_FEATURE_DATA``
>        - 0x04
>        - Indicates if the segment feature data is updated in this frame.
> -    * - ``V4L2_VP8_SEGMENT_HEADER_FLAG_DELTA_VALUE_MODE``
> +    * - ``V4L2_VP8_SEGMENT_FLAG_DELTA_VALUE_MODE``
>        - 0x08
>        - If is set, the segment feature data mode is delta-value.
>          If cleared, it's absolute-value.
>
> -.. c:type:: v4l2_vp8_loopfilter_header
> +.. c:type:: v4l2_vp8_loopfilter
>
>  .. cssclass:: longtable
>
>  .. tabularcolumns:: |p{1.5cm}|p{6.3cm}|p{9.4cm}|
>
> -.. flat-table:: struct v4l2_vp8_loopfilter_header
> +.. flat-table:: struct v4l2_vp8_loopfilter
>      :header-rows:  0
>      :stub-columns: 0
>      :widths:       1 1 2
> @@ -1986,11 +1986,11 @@ enum v4l2_mpeg_video_h264_hierarchical_coding_type -
>        - Applications and drivers must set this to zero.
>      * - __u32
>        - ``flags``
> -      - See :ref:`Loopfilter Header Flags <vp8_loopfilter_header_flags>`
> +      - See :ref:`Loopfilter Flags <vp8_loopfilter_flags>`
>
> -.. _vp8_loopfilter_header_flags:
> +.. _vp8_loopfilter_flags:
>
> -``Loopfilter Header Flags``
> +``Loopfilter Flags``
>
>  .. cssclass:: longtable
>
> @@ -1999,10 +1999,10 @@ enum v4l2_mpeg_video_h264_hierarchical_coding_type -
>      :stub-columns: 0
>      :widths:       1 1 2
>
> -    * - ``V4L2_VP8_LF_HEADER_ADJ_ENABLE``
> +    * - ``V4L2_VP8_LF_ADJ_ENABLE``
>        - 0x01
>        - Enable/disable macroblock-level loop filter adjustment.
> -    * - ``V4L2_VP8_LF_HEADER_DELTA_UPDATE``
> +    * - ``V4L2_VP8_LF_DELTA_UPDATE``
>        - 0x02
>        - Indicates if the delta values used in an adjustment are updated.
>      * - ``V4L2_VP8_LF_FILTER_TYPE_SIMPLE``
> @@ -2010,13 +2010,13 @@ enum v4l2_mpeg_video_h264_hierarchical_coding_type -
>        - If set, indicates the filter type is simple.
>          If cleared, the filter type is normal.
>
> -.. c:type:: v4l2_vp8_quantization_header
> +.. c:type:: v4l2_vp8_quantization
>
>  .. cssclass:: longtable
>
>  .. tabularcolumns:: |p{1.5cm}|p{6.3cm}|p{9.4cm}|
>
> -.. flat-table:: struct v4l2_vp8_quantization_header
> +.. flat-table:: struct v4l2_vp8_quantization
>      :header-rows:  0
>      :stub-columns: 0
>      :widths:       1 1 2
> @@ -2043,13 +2043,13 @@ enum v4l2_mpeg_video_h264_hierarchical_coding_type -
>        - ``padding``
>        - Applications and drivers must set this to zero.
>
> -.. c:type:: v4l2_vp8_entropy_header
> +.. c:type:: v4l2_vp8_entropy
>
>  .. cssclass:: longtable
>
>  .. tabularcolumns:: |p{1.5cm}|p{6.3cm}|p{9.4cm}|
>
> -.. flat-table:: struct v4l2_vp8_entropy_header
> +.. flat-table:: struct v4l2_vp8_entropy
>      :header-rows:  0
>      :stub-columns: 0
>      :widths:       1 1 2
> diff --git a/Documentation/userspace-api/media/v4l/pixfmt-compressed.rst b/Documentation/userspace-api/media/v4l/pixfmt-compressed.rst
> index acad5f3ca0c1..2e07e48053d6 100644
> --- a/Documentation/userspace-api/media/v4l/pixfmt-compressed.rst
> +++ b/Documentation/userspace-api/media/v4l/pixfmt-compressed.rst
> @@ -151,7 +151,7 @@ Compressed Formats
>         This format is adapted for stateless video decoders that implement a
>         VP8 pipeline (using the :ref:`mem2mem` and :ref:`media-request-api`).
>         Metadata associated with the frame to decode is required to be passed
> -       through the ``V4L2_CID_MPEG_VIDEO_VP8_FRAME_HEADER`` control.
> +       through the ``V4L2_CID_MPEG_VIDEO_VP8_FRAME`` control.
>         See the :ref:`associated Codec Control IDs <v4l2-mpeg-vp8>`.
>         Exactly one output and one capture buffer must be provided for use with
>         this pixel format. The output buffer must contain the appropriate number
> diff --git a/drivers/media/v4l2-core/v4l2-ctrls.c b/drivers/media/v4l2-core/v4l2-ctrls.c
> index 016cf6204cbb..1a683f4fa978 100644
> --- a/drivers/media/v4l2-core/v4l2-ctrls.c
> +++ b/drivers/media/v4l2-core/v4l2-ctrls.c
> @@ -971,7 +971,7 @@ const char *v4l2_ctrl_get_name(u32 id)
>         case V4L2_CID_MPEG_VIDEO_VP8_PROFILE:                   return "VP8 Profile";
>         case V4L2_CID_MPEG_VIDEO_VP9_PROFILE:                   return "VP9 Profile";
>         case V4L2_CID_MPEG_VIDEO_VP9_LEVEL:                     return "VP9 Level";
> -       case V4L2_CID_MPEG_VIDEO_VP8_FRAME_HEADER:              return "VP8 Frame Header";
> +       case V4L2_CID_MPEG_VIDEO_VP8_FRAME:                     return "VP8 Frame Parameters";
>
>         /* HEVC controls */
>         case V4L2_CID_MPEG_VIDEO_HEVC_I_FRAME_QP:               return "HEVC I-Frame QP Value";
> @@ -1470,8 +1470,8 @@ void v4l2_ctrl_fill(u32 id, const char **name, enum v4l2_ctrl_type *type,
>         case V4L2_CID_STATELESS_H264_PRED_WEIGHTS:
>                 *type = V4L2_CTRL_TYPE_H264_PRED_WEIGHTS;
>                 break;
> -       case V4L2_CID_MPEG_VIDEO_VP8_FRAME_HEADER:
> -               *type = V4L2_CTRL_TYPE_VP8_FRAME_HEADER;
> +       case V4L2_CID_MPEG_VIDEO_VP8_FRAME:
> +               *type = V4L2_CTRL_TYPE_VP8_FRAME;
>                 break;
>         case V4L2_CID_MPEG_VIDEO_HEVC_SPS:
>                 *type = V4L2_CTRL_TYPE_HEVC_SPS;
> @@ -1642,7 +1642,7 @@ static void std_init_compound(const struct v4l2_ctrl *ctrl, u32 idx,
>                               union v4l2_ctrl_ptr ptr)
>  {
>         struct v4l2_ctrl_mpeg2_slice_params *p_mpeg2_slice_params;
> -       struct v4l2_ctrl_vp8_frame_header *p_vp8_frame_header;
> +       struct v4l2_ctrl_vp8_frame *p_vp8_frame;
>         struct v4l2_ctrl_fwht_params *p_fwht_params;
>         void *p = ptr.p + idx * ctrl->elem_size;
>
> @@ -1666,9 +1666,9 @@ static void std_init_compound(const struct v4l2_ctrl *ctrl, u32 idx,
>                 p_mpeg2_slice_params->picture.picture_coding_type =
>                                         V4L2_MPEG2_PICTURE_CODING_TYPE_I;
>                 break;
> -       case V4L2_CTRL_TYPE_VP8_FRAME_HEADER:
> -               p_vp8_frame_header = p;
> -               p_vp8_frame_header->num_dct_parts = 1;
> +       case V4L2_CTRL_TYPE_VP8_FRAME:
> +               p_vp8_frame = p;
> +               p_vp8_frame->num_dct_parts = 1;
>                 break;
>         case V4L2_CTRL_TYPE_FWHT_PARAMS:
>                 p_fwht_params = p;
> @@ -1823,7 +1823,7 @@ static int std_validate_compound(const struct v4l2_ctrl *ctrl, u32 idx,
>                                  union v4l2_ctrl_ptr ptr)
>  {
>         struct v4l2_ctrl_mpeg2_slice_params *p_mpeg2_slice_params;
> -       struct v4l2_ctrl_vp8_frame_header *p_vp8_frame_header;
> +       struct v4l2_ctrl_vp8_frame *p_vp8_frame;
>         struct v4l2_ctrl_fwht_params *p_fwht_params;
>         struct v4l2_ctrl_h264_sps *p_h264_sps;
>         struct v4l2_ctrl_h264_pps *p_h264_pps;
> @@ -2046,10 +2046,10 @@ static int std_validate_compound(const struct v4l2_ctrl *ctrl, u32 idx,
>                 zero_reserved(*p_h264_dec_params);
>                 break;
>
> -       case V4L2_CTRL_TYPE_VP8_FRAME_HEADER:
> -               p_vp8_frame_header = p;
> +       case V4L2_CTRL_TYPE_VP8_FRAME:
> +               p_vp8_frame = p;
>
> -               switch (p_vp8_frame_header->num_dct_parts) {
> +               switch (p_vp8_frame->num_dct_parts) {
>                 case 1:
>                 case 2:
>                 case 4:
> @@ -2058,11 +2058,11 @@ static int std_validate_compound(const struct v4l2_ctrl *ctrl, u32 idx,
>                 default:
>                         return -EINVAL;
>                 }
> -               zero_padding(p_vp8_frame_header->segment_header);
> -               zero_padding(p_vp8_frame_header->lf_header);
> -               zero_padding(p_vp8_frame_header->quant_header);
> -               zero_padding(p_vp8_frame_header->entropy_header);
> -               zero_padding(p_vp8_frame_header->coder_state);
> +               zero_padding(p_vp8_frame->seg);
> +               zero_padding(p_vp8_frame->lf);
> +               zero_padding(p_vp8_frame->quant);
> +               zero_padding(p_vp8_frame->entropy);
> +               zero_padding(p_vp8_frame->coder_state);
>                 break;
>
>         case V4L2_CTRL_TYPE_HEVC_SPS:
> @@ -2809,8 +2809,8 @@ static struct v4l2_ctrl *v4l2_ctrl_new(struct v4l2_ctrl_handler *hdl,
>         case V4L2_CTRL_TYPE_H264_PRED_WEIGHTS:
>                 elem_size = sizeof(struct v4l2_ctrl_h264_pred_weights);
>                 break;
> -       case V4L2_CTRL_TYPE_VP8_FRAME_HEADER:
> -               elem_size = sizeof(struct v4l2_ctrl_vp8_frame_header);
> +       case V4L2_CTRL_TYPE_VP8_FRAME:
> +               elem_size = sizeof(struct v4l2_ctrl_vp8_frame);
>                 break;
>         case V4L2_CTRL_TYPE_HEVC_SPS:
>                 elem_size = sizeof(struct v4l2_ctrl_hevc_sps);
> diff --git a/drivers/staging/media/hantro/hantro_drv.c b/drivers/staging/media/hantro/hantro_drv.c
> index e5f200e64993..f1e7f0732e27 100644
> --- a/drivers/staging/media/hantro/hantro_drv.c
> +++ b/drivers/staging/media/hantro/hantro_drv.c
> @@ -299,7 +299,7 @@ static const struct hantro_ctrl controls[] = {
>         }, {
>                 .codec = HANTRO_VP8_DECODER,
>                 .cfg = {
> -                       .id = V4L2_CID_MPEG_VIDEO_VP8_FRAME_HEADER,
> +                       .id = V4L2_CID_MPEG_VIDEO_VP8_FRAME,
>                 },
>         }, {
>                 .codec = HANTRO_H264_DECODER,
> diff --git a/drivers/staging/media/hantro/hantro_g1_vp8_dec.c b/drivers/staging/media/hantro/hantro_g1_vp8_dec.c
> index a5cdf150cd16..3f4311c1dab8 100644
> --- a/drivers/staging/media/hantro/hantro_g1_vp8_dec.c
> +++ b/drivers/staging/media/hantro/hantro_g1_vp8_dec.c
> @@ -133,17 +133,17 @@ static const struct hantro_reg vp8_dec_pred_bc_tap[8][4] = {
>   * Set loop filters
>   */
>  static void cfg_lf(struct hantro_ctx *ctx,
> -                  const struct v4l2_ctrl_vp8_frame_header *hdr)
> +                  const struct v4l2_ctrl_vp8_frame *hdr)
>  {
> -       const struct v4l2_vp8_segment_header *seg = &hdr->segment_header;
> -       const struct v4l2_vp8_loopfilter_header *lf = &hdr->lf_header;
> +       const struct v4l2_vp8_segment *seg = &hdr->seg;
> +       const struct v4l2_vp8_loopfilter *lf = &hdr->lf;
>         struct hantro_dev *vpu = ctx->dev;
>         unsigned int i;
>         u32 reg;
>
> -       if (!(seg->flags & V4L2_VP8_SEGMENT_HEADER_FLAG_ENABLED)) {
> +       if (!(seg->flags & V4L2_VP8_SEGMENT_FLAG_ENABLED)) {
>                 hantro_reg_write(vpu, &vp8_dec_lf_level[0], lf->level);
> -       } else if (seg->flags & V4L2_VP8_SEGMENT_HEADER_FLAG_DELTA_VALUE_MODE) {
> +       } else if (seg->flags & V4L2_VP8_SEGMENT_FLAG_DELTA_VALUE_MODE) {
>                 for (i = 0; i < 4; i++) {
>                         u32 lf_level = clamp(lf->level + seg->lf_update[i],
>                                              0, 63);
> @@ -161,7 +161,7 @@ static void cfg_lf(struct hantro_ctx *ctx,
>                 reg |= G1_REG_REF_PIC_FILT_TYPE_E;
>         vdpu_write_relaxed(vpu, reg, G1_REG_REF_PIC(0));
>
> -       if (lf->flags & V4L2_VP8_LF_HEADER_ADJ_ENABLE) {
> +       if (lf->flags & V4L2_VP8_LF_ADJ_ENABLE) {
>                 for (i = 0; i < 4; i++) {
>                         hantro_reg_write(vpu, &vp8_dec_mb_adj[i],
>                                          lf->mb_mode_delta[i]);
> @@ -175,16 +175,16 @@ static void cfg_lf(struct hantro_ctx *ctx,
>   * Set quantization parameters
>   */
>  static void cfg_qp(struct hantro_ctx *ctx,
> -                  const struct v4l2_ctrl_vp8_frame_header *hdr)
> +                  const struct v4l2_ctrl_vp8_frame *hdr)
>  {
> -       const struct v4l2_vp8_quantization_header *q = &hdr->quant_header;
> -       const struct v4l2_vp8_segment_header *seg = &hdr->segment_header;
> +       const struct v4l2_vp8_quantization *q = &hdr->quant;
> +       const struct v4l2_vp8_segment *seg = &hdr->seg;
>         struct hantro_dev *vpu = ctx->dev;
>         unsigned int i;
>
> -       if (!(seg->flags & V4L2_VP8_SEGMENT_HEADER_FLAG_ENABLED)) {
> +       if (!(seg->flags & V4L2_VP8_SEGMENT_FLAG_ENABLED)) {
>                 hantro_reg_write(vpu, &vp8_dec_quant[0], q->y_ac_qi);
> -       } else if (seg->flags & V4L2_VP8_SEGMENT_HEADER_FLAG_DELTA_VALUE_MODE) {
> +       } else if (seg->flags & V4L2_VP8_SEGMENT_FLAG_DELTA_VALUE_MODE) {
>                 for (i = 0; i < 4; i++) {
>                         u32 quant = clamp(q->y_ac_qi + seg->quant_update[i],
>                                           0, 127);
> @@ -230,7 +230,7 @@ static void cfg_qp(struct hantro_ctx *ctx,
>   *   4. the addresses set to the VPU must be 64-bits aligned
>   */
>  static void cfg_parts(struct hantro_ctx *ctx,
> -                     const struct v4l2_ctrl_vp8_frame_header *hdr)
> +                     const struct v4l2_ctrl_vp8_frame *hdr)
>  {
>         struct hantro_dev *vpu = ctx->dev;
>         struct vb2_v4l2_buffer *vb2_src;
> @@ -328,7 +328,7 @@ static void cfg_parts(struct hantro_ctx *ctx,
>   * normal 6-tap filters
>   */
>  static void cfg_tap(struct hantro_ctx *ctx,
> -                   const struct v4l2_ctrl_vp8_frame_header *hdr)
> +                   const struct v4l2_ctrl_vp8_frame *hdr)
>  {
>         struct hantro_dev *vpu = ctx->dev;
>         struct hantro_reg reg;
> @@ -368,7 +368,7 @@ static void cfg_tap(struct hantro_ctx *ctx,
>  }
>
>  static void cfg_ref(struct hantro_ctx *ctx,
> -                   const struct v4l2_ctrl_vp8_frame_header *hdr)
> +                   const struct v4l2_ctrl_vp8_frame *hdr)
>  {
>         struct hantro_dev *vpu = ctx->dev;
>         struct vb2_v4l2_buffer *vb2_dst;
> @@ -385,7 +385,7 @@ static void cfg_ref(struct hantro_ctx *ctx,
>         WARN_ON(!ref && hdr->golden_frame_ts);
>         if (!ref)
>                 ref = vb2_dma_contig_plane_dma_addr(&vb2_dst->vb2_buf, 0);
> -       if (hdr->flags & V4L2_VP8_FRAME_HEADER_FLAG_SIGN_BIAS_GOLDEN)
> +       if (hdr->flags & V4L2_VP8_FRAME_FLAG_SIGN_BIAS_GOLDEN)
>                 ref |= G1_REG_ADDR_REF_TOPC_E;
>         vdpu_write_relaxed(vpu, ref, G1_REG_ADDR_REF(4));
>
> @@ -393,15 +393,15 @@ static void cfg_ref(struct hantro_ctx *ctx,
>         WARN_ON(!ref && hdr->alt_frame_ts);
>         if (!ref)
>                 ref = vb2_dma_contig_plane_dma_addr(&vb2_dst->vb2_buf, 0);
> -       if (hdr->flags & V4L2_VP8_FRAME_HEADER_FLAG_SIGN_BIAS_ALT)
> +       if (hdr->flags & V4L2_VP8_FRAME_FLAG_SIGN_BIAS_ALT)
>                 ref |= G1_REG_ADDR_REF_TOPC_E;
>         vdpu_write_relaxed(vpu, ref, G1_REG_ADDR_REF(5));
>  }
>
>  static void cfg_buffers(struct hantro_ctx *ctx,
> -                       const struct v4l2_ctrl_vp8_frame_header *hdr)
> +                       const struct v4l2_ctrl_vp8_frame *hdr)
>  {
> -       const struct v4l2_vp8_segment_header *seg = &hdr->segment_header;
> +       const struct v4l2_vp8_segment *seg = &hdr->seg;
>         struct hantro_dev *vpu = ctx->dev;
>         struct vb2_v4l2_buffer *vb2_dst;
>         dma_addr_t dst_dma;
> @@ -415,9 +415,9 @@ static void cfg_buffers(struct hantro_ctx *ctx,
>
>         /* Set segment map address */
>         reg = G1_REG_FWD_PIC1_SEGMENT_BASE(ctx->vp8_dec.segment_map.dma);
> -       if (seg->flags & V4L2_VP8_SEGMENT_HEADER_FLAG_ENABLED) {
> +       if (seg->flags & V4L2_VP8_SEGMENT_FLAG_ENABLED) {
>                 reg |= G1_REG_FWD_PIC1_SEGMENT_E;
> -               if (seg->flags & V4L2_VP8_SEGMENT_HEADER_FLAG_UPDATE_MAP)
> +               if (seg->flags & V4L2_VP8_SEGMENT_FLAG_UPDATE_MAP)
>                         reg |= G1_REG_FWD_PIC1_SEGMENT_UPD_E;
>         }
>         vdpu_write_relaxed(vpu, reg, G1_REG_FWD_PIC(0));
> @@ -428,7 +428,7 @@ static void cfg_buffers(struct hantro_ctx *ctx,
>
>  void hantro_g1_vp8_dec_run(struct hantro_ctx *ctx)
>  {
> -       const struct v4l2_ctrl_vp8_frame_header *hdr;
> +       const struct v4l2_ctrl_vp8_frame *hdr;
>         struct hantro_dev *vpu = ctx->dev;
>         size_t height = ctx->dst_fmt.height;
>         size_t width = ctx->dst_fmt.width;
> @@ -437,7 +437,7 @@ void hantro_g1_vp8_dec_run(struct hantro_ctx *ctx)
>
>         hantro_start_prepare_run(ctx);
>
> -       hdr = hantro_get_ctrl(ctx, V4L2_CID_MPEG_VIDEO_VP8_FRAME_HEADER);
> +       hdr = hantro_get_ctrl(ctx, V4L2_CID_MPEG_VIDEO_VP8_FRAME);
>         if (WARN_ON(!hdr))
>                 return;
>
> @@ -462,9 +462,9 @@ void hantro_g1_vp8_dec_run(struct hantro_ctx *ctx)
>         reg = G1_REG_DEC_CTRL0_DEC_MODE(10);
>         if (!VP8_FRAME_IS_KEY_FRAME(hdr))
>                 reg |= G1_REG_DEC_CTRL0_PIC_INTER_E;
> -       if (!(hdr->flags & V4L2_VP8_FRAME_HEADER_FLAG_MB_NO_SKIP_COEFF))
> +       if (!(hdr->flags & V4L2_VP8_FRAME_FLAG_MB_NO_SKIP_COEFF))
>                 reg |= G1_REG_DEC_CTRL0_SKIP_MODE;
> -       if (hdr->lf_header.level == 0)
> +       if (hdr->lf.level == 0)
>                 reg |= G1_REG_DEC_CTRL0_FILTERING_DIS;
>         vdpu_write_relaxed(vpu, reg, G1_REG_DEC_CTRL0);
>
> diff --git a/drivers/staging/media/hantro/hantro_hw.h b/drivers/staging/media/hantro/hantro_hw.h
> index 34c9e4649a25..ada482e514b8 100644
> --- a/drivers/staging/media/hantro/hantro_hw.h
> +++ b/drivers/staging/media/hantro/hantro_hw.h
> @@ -216,6 +216,6 @@ void rk3399_vpu_vp8_dec_run(struct hantro_ctx *ctx);
>  int hantro_vp8_dec_init(struct hantro_ctx *ctx);
>  void hantro_vp8_dec_exit(struct hantro_ctx *ctx);
>  void hantro_vp8_prob_update(struct hantro_ctx *ctx,
> -                           const struct v4l2_ctrl_vp8_frame_header *hdr);
> +                           const struct v4l2_ctrl_vp8_frame *hdr);
>
>  #endif /* HANTRO_HW_H_ */
> diff --git a/drivers/staging/media/hantro/hantro_vp8.c b/drivers/staging/media/hantro/hantro_vp8.c
> index 91ec9a05645b..f5bd32b6be95 100644
> --- a/drivers/staging/media/hantro/hantro_vp8.c
> +++ b/drivers/staging/media/hantro/hantro_vp8.c
> @@ -47,9 +47,9 @@ const u32 hantro_vp8_dec_mc_filter[8][6] = {
>  };
>
>  void hantro_vp8_prob_update(struct hantro_ctx *ctx,
> -                           const struct v4l2_ctrl_vp8_frame_header *hdr)
> +                           const struct v4l2_ctrl_vp8_frame *hdr)
>  {
> -       const struct v4l2_vp8_entropy_header *entropy = &hdr->entropy_header;
> +       const struct v4l2_vp8_entropy *entropy = &hdr->entropy;
>         u32 i, j, k;
>         u8 *dst;
>
> @@ -60,9 +60,9 @@ void hantro_vp8_prob_update(struct hantro_ctx *ctx,
>         dst[1] = hdr->prob_intra;
>         dst[2] = hdr->prob_last;
>         dst[3] = hdr->prob_gf;
> -       dst[4] = hdr->segment_header.segment_probs[0];
> -       dst[5] = hdr->segment_header.segment_probs[1];
> -       dst[6] = hdr->segment_header.segment_probs[2];
> +       dst[4] = hdr->seg.segment_probs[0];
> +       dst[5] = hdr->seg.segment_probs[1];
> +       dst[6] = hdr->seg.segment_probs[2];
>         dst[7] = 0;
>
>         dst += 8;
> diff --git a/drivers/staging/media/hantro/rk3399_vpu_hw_vp8_dec.c b/drivers/staging/media/hantro/rk3399_vpu_hw_vp8_dec.c
> index a4a792f00b11..5c43f59ad531 100644
> --- a/drivers/staging/media/hantro/rk3399_vpu_hw_vp8_dec.c
> +++ b/drivers/staging/media/hantro/rk3399_vpu_hw_vp8_dec.c
> @@ -274,17 +274,17 @@ static const struct hantro_reg vp8_dec_start_dec = {
>  };
>
>  static void cfg_lf(struct hantro_ctx *ctx,
> -                  const struct v4l2_ctrl_vp8_frame_header *hdr)
> +                  const struct v4l2_ctrl_vp8_frame *hdr)
>  {
> -       const struct v4l2_vp8_segment_header *seg = &hdr->segment_header;
> -       const struct v4l2_vp8_loopfilter_header *lf = &hdr->lf_header;
> +       const struct v4l2_vp8_segment *seg = &hdr->seg;
> +       const struct v4l2_vp8_loopfilter *lf = &hdr->lf;
>         struct hantro_dev *vpu = ctx->dev;
>         unsigned int i;
>         u32 reg;
>
> -       if (!(seg->flags & V4L2_VP8_SEGMENT_HEADER_FLAG_ENABLED)) {
> +       if (!(seg->flags & V4L2_VP8_SEGMENT_FLAG_ENABLED)) {
>                 hantro_reg_write(vpu, &vp8_dec_lf_level[0], lf->level);
> -       } else if (seg->flags & V4L2_VP8_SEGMENT_HEADER_FLAG_DELTA_VALUE_MODE) {
> +       } else if (seg->flags & V4L2_VP8_SEGMENT_FLAG_DELTA_VALUE_MODE) {
>                 for (i = 0; i < 4; i++) {
>                         u32 lf_level = clamp(lf->level + seg->lf_update[i],
>                                              0, 63);
> @@ -302,7 +302,7 @@ static void cfg_lf(struct hantro_ctx *ctx,
>                 reg |= VDPU_REG_REF_PIC_FILT_TYPE_E;
>         vdpu_write_relaxed(vpu, reg, VDPU_REG_FILTER_MB_ADJ);
>
> -       if (lf->flags & V4L2_VP8_LF_HEADER_ADJ_ENABLE) {
> +       if (lf->flags & V4L2_VP8_LF_ADJ_ENABLE) {
>                 for (i = 0; i < 4; i++) {
>                         hantro_reg_write(vpu, &vp8_dec_mb_adj[i],
>                                          lf->mb_mode_delta[i]);
> @@ -313,16 +313,16 @@ static void cfg_lf(struct hantro_ctx *ctx,
>  }
>
>  static void cfg_qp(struct hantro_ctx *ctx,
> -                  const struct v4l2_ctrl_vp8_frame_header *hdr)
> +                  const struct v4l2_ctrl_vp8_frame *hdr)
>  {
> -       const struct v4l2_vp8_quantization_header *q = &hdr->quant_header;
> -       const struct v4l2_vp8_segment_header *seg = &hdr->segment_header;
> +       const struct v4l2_vp8_quantization *q = &hdr->quant;
> +       const struct v4l2_vp8_segment *seg = &hdr->seg;
>         struct hantro_dev *vpu = ctx->dev;
>         unsigned int i;
>
> -       if (!(seg->flags & V4L2_VP8_SEGMENT_HEADER_FLAG_ENABLED)) {
> +       if (!(seg->flags & V4L2_VP8_SEGMENT_FLAG_ENABLED)) {
>                 hantro_reg_write(vpu, &vp8_dec_quant[0], q->y_ac_qi);
> -       } else if (seg->flags & V4L2_VP8_SEGMENT_HEADER_FLAG_DELTA_VALUE_MODE) {
> +       } else if (seg->flags & V4L2_VP8_SEGMENT_FLAG_DELTA_VALUE_MODE) {
>                 for (i = 0; i < 4; i++) {
>                         u32 quant = clamp(q->y_ac_qi + seg->quant_update[i],
>                                           0, 127);
> @@ -343,7 +343,7 @@ static void cfg_qp(struct hantro_ctx *ctx,
>  }
>
>  static void cfg_parts(struct hantro_ctx *ctx,
> -                     const struct v4l2_ctrl_vp8_frame_header *hdr)
> +                     const struct v4l2_ctrl_vp8_frame *hdr)
>  {
>         struct hantro_dev *vpu = ctx->dev;
>         struct vb2_v4l2_buffer *vb2_src;
> @@ -426,7 +426,7 @@ static void cfg_parts(struct hantro_ctx *ctx,
>   * normal 6-tap filters
>   */
>  static void cfg_tap(struct hantro_ctx *ctx,
> -                   const struct v4l2_ctrl_vp8_frame_header *hdr)
> +                   const struct v4l2_ctrl_vp8_frame *hdr)
>  {
>         struct hantro_dev *vpu = ctx->dev;
>         int i, j;
> @@ -445,7 +445,7 @@ static void cfg_tap(struct hantro_ctx *ctx,
>  }
>
>  static void cfg_ref(struct hantro_ctx *ctx,
> -                   const struct v4l2_ctrl_vp8_frame_header *hdr)
> +                   const struct v4l2_ctrl_vp8_frame *hdr)
>  {
>         struct hantro_dev *vpu = ctx->dev;
>         struct vb2_v4l2_buffer *vb2_dst;
> @@ -462,7 +462,7 @@ static void cfg_ref(struct hantro_ctx *ctx,
>         WARN_ON(!ref && hdr->golden_frame_ts);
>         if (!ref)
>                 ref = vb2_dma_contig_plane_dma_addr(&vb2_dst->vb2_buf, 0);
> -       if (hdr->flags & V4L2_VP8_FRAME_HEADER_FLAG_SIGN_BIAS_GOLDEN)
> +       if (hdr->flags & V4L2_VP8_FRAME_FLAG_SIGN_BIAS_GOLDEN)
>                 ref |= VDPU_REG_VP8_GREF_SIGN_BIAS;
>         vdpu_write_relaxed(vpu, ref, VDPU_REG_VP8_ADDR_REF2_5(2));
>
> @@ -470,15 +470,15 @@ static void cfg_ref(struct hantro_ctx *ctx,
>         WARN_ON(!ref && hdr->alt_frame_ts);
>         if (!ref)
>                 ref = vb2_dma_contig_plane_dma_addr(&vb2_dst->vb2_buf, 0);
> -       if (hdr->flags & V4L2_VP8_FRAME_HEADER_FLAG_SIGN_BIAS_ALT)
> +       if (hdr->flags & V4L2_VP8_FRAME_FLAG_SIGN_BIAS_ALT)
>                 ref |= VDPU_REG_VP8_AREF_SIGN_BIAS;
>         vdpu_write_relaxed(vpu, ref, VDPU_REG_VP8_ADDR_REF2_5(3));
>  }
>
>  static void cfg_buffers(struct hantro_ctx *ctx,
> -                       const struct v4l2_ctrl_vp8_frame_header *hdr)
> +                       const struct v4l2_ctrl_vp8_frame *hdr)
>  {
> -       const struct v4l2_vp8_segment_header *seg = &hdr->segment_header;
> +       const struct v4l2_vp8_segment *seg = &hdr->seg;
>         struct hantro_dev *vpu = ctx->dev;
>         struct vb2_v4l2_buffer *vb2_dst;
>         dma_addr_t dst_dma;
> @@ -492,9 +492,9 @@ static void cfg_buffers(struct hantro_ctx *ctx,
>
>         /* Set segment map address */
>         reg = VDPU_REG_FWD_PIC1_SEGMENT_BASE(ctx->vp8_dec.segment_map.dma);
> -       if (seg->flags & V4L2_VP8_SEGMENT_HEADER_FLAG_ENABLED) {
> +       if (seg->flags & V4L2_VP8_SEGMENT_FLAG_ENABLED) {
>                 reg |= VDPU_REG_FWD_PIC1_SEGMENT_E;
> -               if (seg->flags & V4L2_VP8_SEGMENT_HEADER_FLAG_UPDATE_MAP)
> +               if (seg->flags & V4L2_VP8_SEGMENT_FLAG_UPDATE_MAP)
>                         reg |= VDPU_REG_FWD_PIC1_SEGMENT_UPD_E;
>         }
>         vdpu_write_relaxed(vpu, reg, VDPU_REG_VP8_SEGMENT_VAL);
> @@ -506,7 +506,7 @@ static void cfg_buffers(struct hantro_ctx *ctx,
>
>  void rk3399_vpu_vp8_dec_run(struct hantro_ctx *ctx)
>  {
> -       const struct v4l2_ctrl_vp8_frame_header *hdr;
> +       const struct v4l2_ctrl_vp8_frame *hdr;
>         struct hantro_dev *vpu = ctx->dev;
>         size_t height = ctx->dst_fmt.height;
>         size_t width = ctx->dst_fmt.width;
> @@ -515,7 +515,7 @@ void rk3399_vpu_vp8_dec_run(struct hantro_ctx *ctx)
>
>         hantro_start_prepare_run(ctx);
>
> -       hdr = hantro_get_ctrl(ctx, V4L2_CID_MPEG_VIDEO_VP8_FRAME_HEADER);
> +       hdr = hantro_get_ctrl(ctx, V4L2_CID_MPEG_VIDEO_VP8_FRAME);
>         if (WARN_ON(!hdr))
>                 return;
>
> @@ -555,9 +555,9 @@ void rk3399_vpu_vp8_dec_run(struct hantro_ctx *ctx)
>         reg = VDPU_REG_DEC_CTRL0_DEC_MODE(10);
>         vdpu_write_relaxed(vpu, reg, VDPU_REG_DEC_FORMAT);
>
> -       if (!(hdr->flags & V4L2_VP8_FRAME_HEADER_FLAG_MB_NO_SKIP_COEFF))
> +       if (!(hdr->flags & V4L2_VP8_FRAME_FLAG_MB_NO_SKIP_COEFF))
>                 hantro_reg_write(vpu, &vp8_dec_skip_mode, 1);
> -       if (hdr->lf_header.level == 0)
> +       if (hdr->lf.level == 0)
>                 hantro_reg_write(vpu, &vp8_dec_filter_disable, 1);
>
>         /* Frame dimensions */
> diff --git a/drivers/staging/media/sunxi/cedrus/cedrus.c b/drivers/staging/media/sunxi/cedrus/cedrus.c
> index 7bd9291c8d5f..e233feb49c9c 100644
> --- a/drivers/staging/media/sunxi/cedrus/cedrus.c
> +++ b/drivers/staging/media/sunxi/cedrus/cedrus.c
> @@ -147,7 +147,7 @@ static const struct cedrus_control cedrus_controls[] = {
>         },
>         {
>                 .cfg = {
> -                       .id             = V4L2_CID_MPEG_VIDEO_VP8_FRAME_HEADER,
> +                       .id     = V4L2_CID_MPEG_VIDEO_VP8_FRAME,
>                 },
>                 .codec          = CEDRUS_CODEC_VP8,
>         },
> diff --git a/drivers/staging/media/sunxi/cedrus/cedrus.h b/drivers/staging/media/sunxi/cedrus/cedrus.h
> index 251a6a660351..15f147dad4cb 100644
> --- a/drivers/staging/media/sunxi/cedrus/cedrus.h
> +++ b/drivers/staging/media/sunxi/cedrus/cedrus.h
> @@ -79,7 +79,7 @@ struct cedrus_h265_run {
>  };
>
>  struct cedrus_vp8_run {
> -       const struct v4l2_ctrl_vp8_frame_header         *frame_params;
> +       const struct v4l2_ctrl_vp8_frame                *frame_params;
>  };
>
>  struct cedrus_run {
> diff --git a/drivers/staging/media/sunxi/cedrus/cedrus_dec.c b/drivers/staging/media/sunxi/cedrus/cedrus_dec.c
> index a9090daf626a..b0a0559cd0eb 100644
> --- a/drivers/staging/media/sunxi/cedrus/cedrus_dec.c
> +++ b/drivers/staging/media/sunxi/cedrus/cedrus_dec.c
> @@ -72,7 +72,7 @@ void cedrus_device_run(void *priv)
>
>         case V4L2_PIX_FMT_VP8_FRAME:
>                 run.vp8.frame_params = cedrus_find_control_data(ctx,
> -                       V4L2_CID_MPEG_VIDEO_VP8_FRAME_HEADER);
> +                       V4L2_CID_MPEG_VIDEO_VP8_FRAME);
>                 break;
>
>         default:
> diff --git a/drivers/staging/media/sunxi/cedrus/cedrus_vp8.c b/drivers/staging/media/sunxi/cedrus/cedrus_vp8.c
> index ff613ebd1180..cab0770515c5 100644
> --- a/drivers/staging/media/sunxi/cedrus/cedrus_vp8.c
> +++ b/drivers/staging/media/sunxi/cedrus/cedrus_vp8.c
> @@ -522,7 +522,7 @@ static void cedrus_irq_clear(struct cedrus_dev *dev)
>  }
>
>  static void cedrus_read_header(struct cedrus_dev *dev,
> -                              const struct v4l2_ctrl_vp8_frame_header *slice)
> +                              const struct v4l2_ctrl_vp8_frame *slice)
>  {
>         int i, j;
>
> @@ -590,34 +590,34 @@ static void cedrus_read_header(struct cedrus_dev *dev,
>         }
>  }
>
> -static void cedrus_vp8_update_probs(const struct v4l2_ctrl_vp8_frame_header *slice,
> +static void cedrus_vp8_update_probs(const struct v4l2_ctrl_vp8_frame *slice,
>                                     u8 *prob_table)
>  {
>         int i, j, k;
>
> -       memcpy(&prob_table[0x1008], slice->entropy_header.y_mode_probs,
> -              sizeof(slice->entropy_header.y_mode_probs));
> -       memcpy(&prob_table[0x1010], slice->entropy_header.uv_mode_probs,
> -              sizeof(slice->entropy_header.uv_mode_probs));
> +       memcpy(&prob_table[0x1008], slice->entropy.y_mode_probs,
> +              sizeof(slice->entropy.y_mode_probs));
> +       memcpy(&prob_table[0x1010], slice->entropy.uv_mode_probs,
> +              sizeof(slice->entropy.uv_mode_probs));
>
> -       memcpy(&prob_table[0x1018], slice->segment_header.segment_probs,
> -              sizeof(slice->segment_header.segment_probs));
> +       memcpy(&prob_table[0x1018], slice->seg.segment_probs,
> +              sizeof(slice->seg.segment_probs));
>
>         prob_table[0x101c] = slice->prob_skip_false;
>         prob_table[0x101d] = slice->prob_intra;
>         prob_table[0x101e] = slice->prob_last;
>         prob_table[0x101f] = slice->prob_gf;
>
> -       memcpy(&prob_table[0x1020], slice->entropy_header.mv_probs[0],
> +       memcpy(&prob_table[0x1020], slice->entropy.mv_probs[0],
>                V4L2_VP8_MV_PROB_CNT);
> -       memcpy(&prob_table[0x1040], slice->entropy_header.mv_probs[1],
> +       memcpy(&prob_table[0x1040], slice->entropy.mv_probs[1],
>                V4L2_VP8_MV_PROB_CNT);
>
>         for (i = 0; i < 4; ++i)
>                 for (j = 0; j < 8; ++j)
>                         for (k = 0; k < 3; ++k)
>                                 memcpy(&prob_table[i * 512 + j * 64 + k * 16],
> -                                      slice->entropy_header.coeff_probs[i][j][k], 11);
> +                                      slice->entropy.coeff_probs[i][j][k], 11);
>  }
>
>  static enum cedrus_irq_status
> @@ -653,7 +653,7 @@ static void cedrus_vp8_irq_disable(struct cedrus_ctx *ctx)
>  static void cedrus_vp8_setup(struct cedrus_ctx *ctx,
>                              struct cedrus_run *run)
>  {
> -       const struct v4l2_ctrl_vp8_frame_header *slice = run->vp8.frame_params;
> +       const struct v4l2_ctrl_vp8_frame *slice = run->vp8.frame_params;
>         struct vb2_queue *cap_q = &ctx->fh.m2m_ctx->cap_q_ctx.q;
>         struct vb2_buffer *src_buf = &run->src->vb2_buf;
>         struct cedrus_dev *dev = ctx->dev;
> @@ -719,34 +719,34 @@ static void cedrus_vp8_setup(struct cedrus_ctx *ctx,
>                 reg |= VE_VP8_PPS_FULL_PIXEL;
>                 break;
>         }
> -       if (slice->segment_header.flags & V4L2_VP8_SEGMENT_HEADER_FLAG_UPDATE_MAP)
> +       if (slice->seg.flags & V4L2_VP8_SEGMENT_FLAG_UPDATE_MAP)
>                 reg |= VE_VP8_PPS_UPDATE_MB_SEGMENTATION_MAP;
> -       if (!(slice->segment_header.flags & V4L2_VP8_SEGMENT_HEADER_FLAG_DELTA_VALUE_MODE))
> +       if (!(slice->seg.flags & V4L2_VP8_SEGMENT_FLAG_DELTA_VALUE_MODE))
>                 reg |= VE_VP8_PPS_MB_SEGMENT_ABS_DELTA;
> -       if (slice->segment_header.flags & V4L2_VP8_SEGMENT_HEADER_FLAG_ENABLED)
> +       if (slice->seg.flags & V4L2_VP8_SEGMENT_FLAG_ENABLED)
>                 reg |= VE_VP8_PPS_SEGMENTATION_ENABLE;
>         if (ctx->codec.vp8.last_filter_type)
>                 reg |= VE_VP8_PPS_LAST_LOOP_FILTER_SIMPLE;
> -       reg |= VE_VP8_PPS_SHARPNESS_LEVEL(slice->lf_header.sharpness_level);
> -       if (slice->lf_header.flags & V4L2_VP8_LF_FILTER_TYPE_SIMPLE)
> +       reg |= VE_VP8_PPS_SHARPNESS_LEVEL(slice->lf.sharpness_level);
> +       if (slice->lf.flags & V4L2_VP8_LF_FILTER_TYPE_SIMPLE)
>                 reg |= VE_VP8_PPS_LOOP_FILTER_SIMPLE;
> -       reg |= VE_VP8_PPS_LOOP_FILTER_LEVEL(slice->lf_header.level);
> -       if (slice->lf_header.flags & V4L2_VP8_LF_HEADER_ADJ_ENABLE)
> +       reg |= VE_VP8_PPS_LOOP_FILTER_LEVEL(slice->lf.level);
> +       if (slice->lf.flags & V4L2_VP8_LF_ADJ_ENABLE)
>                 reg |= VE_VP8_PPS_MODE_REF_LF_DELTA_ENABLE;
> -       if (slice->lf_header.flags & V4L2_VP8_LF_HEADER_DELTA_UPDATE)
> +       if (slice->lf.flags & V4L2_VP8_LF_DELTA_UPDATE)
>                 reg |= VE_VP8_PPS_MODE_REF_LF_DELTA_UPDATE;
>         reg |= VE_VP8_PPS_TOKEN_PARTITION(ilog2(slice->num_dct_parts));
> -       if (slice->flags & V4L2_VP8_FRAME_HEADER_FLAG_MB_NO_SKIP_COEFF)
> +       if (slice->flags & V4L2_VP8_FRAME_FLAG_MB_NO_SKIP_COEFF)
>                 reg |= VE_VP8_PPS_MB_NO_COEFF_SKIP;
>         reg |= VE_VP8_PPS_RELOAD_ENTROPY_PROBS;
> -       if (slice->flags & V4L2_VP8_FRAME_HEADER_FLAG_SIGN_BIAS_GOLDEN)
> +       if (slice->flags & V4L2_VP8_FRAME_FLAG_SIGN_BIAS_GOLDEN)
>                 reg |= VE_VP8_PPS_GOLDEN_SIGN_BIAS;
> -       if (slice->flags & V4L2_VP8_FRAME_HEADER_FLAG_SIGN_BIAS_ALT)
> +       if (slice->flags & V4L2_VP8_FRAME_FLAG_SIGN_BIAS_ALT)
>                 reg |= VE_VP8_PPS_ALTREF_SIGN_BIAS;
>         if (ctx->codec.vp8.last_frame_p_type)
>                 reg |= VE_VP8_PPS_LAST_PIC_TYPE_P_FRAME;
>         reg |= VE_VP8_PPS_LAST_SHARPNESS_LEVEL(ctx->codec.vp8.last_sharpness_level);
> -       if (!(slice->flags & V4L2_VP8_FRAME_HEADER_FLAG_KEY_FRAME))
> +       if (!(slice->flags & V4L2_VP8_FRAME_FLAG_KEY_FRAME))
>                 reg |= VE_VP8_PPS_PIC_TYPE_P_FRAME;
>         cedrus_write(dev, VE_VP8_PPS, reg);
>
> @@ -758,12 +758,12 @@ static void cedrus_vp8_setup(struct cedrus_ctx *ctx,
>         cedrus_write(dev, VE_H264_ERROR_CASE, 0);
>
>         reg = 0;
> -       reg |= VE_VP8_QP_INDEX_DELTA_UVAC(slice->quant_header.uv_ac_delta);
> -       reg |= VE_VP8_QP_INDEX_DELTA_UVDC(slice->quant_header.uv_dc_delta);
> -       reg |= VE_VP8_QP_INDEX_DELTA_Y2AC(slice->quant_header.y2_ac_delta);
> -       reg |= VE_VP8_QP_INDEX_DELTA_Y2DC(slice->quant_header.y2_dc_delta);
> -       reg |= VE_VP8_QP_INDEX_DELTA_Y1DC(slice->quant_header.y_dc_delta);
> -       reg |= VE_VP8_QP_INDEX_DELTA_BASE_QINDEX(slice->quant_header.y_ac_qi);
> +       reg |= VE_VP8_QP_INDEX_DELTA_UVAC(slice->quant.uv_ac_delta);
> +       reg |= VE_VP8_QP_INDEX_DELTA_UVDC(slice->quant.uv_dc_delta);
> +       reg |= VE_VP8_QP_INDEX_DELTA_Y2AC(slice->quant.y2_ac_delta);
> +       reg |= VE_VP8_QP_INDEX_DELTA_Y2DC(slice->quant.y2_dc_delta);
> +       reg |= VE_VP8_QP_INDEX_DELTA_Y1DC(slice->quant.y_dc_delta);
> +       reg |= VE_VP8_QP_INDEX_DELTA_BASE_QINDEX(slice->quant.y_ac_qi);
>         cedrus_write(dev, VE_VP8_QP_INDEX_DELTA, reg);
>
>         reg = 0;
> @@ -777,31 +777,31 @@ static void cedrus_vp8_setup(struct cedrus_ctx *ctx,
>         cedrus_write(dev, VE_VP8_PICSIZE, reg);
>
>         reg = 0;
> -       reg |= VE_VP8_SEGMENT3(slice->segment_header.quant_update[3]);
> -       reg |= VE_VP8_SEGMENT2(slice->segment_header.quant_update[2]);
> -       reg |= VE_VP8_SEGMENT1(slice->segment_header.quant_update[1]);
> -       reg |= VE_VP8_SEGMENT0(slice->segment_header.quant_update[0]);
> +       reg |= VE_VP8_SEGMENT3(slice->seg.quant_update[3]);
> +       reg |= VE_VP8_SEGMENT2(slice->seg.quant_update[2]);
> +       reg |= VE_VP8_SEGMENT1(slice->seg.quant_update[1]);
> +       reg |= VE_VP8_SEGMENT0(slice->seg.quant_update[0]);
>         cedrus_write(dev, VE_VP8_SEGMENT_FEAT_MB_LV0, reg);
>
>         reg = 0;
> -       reg |= VE_VP8_SEGMENT3(slice->segment_header.lf_update[3]);
> -       reg |= VE_VP8_SEGMENT2(slice->segment_header.lf_update[2]);
> -       reg |= VE_VP8_SEGMENT1(slice->segment_header.lf_update[1]);
> -       reg |= VE_VP8_SEGMENT0(slice->segment_header.lf_update[0]);
> +       reg |= VE_VP8_SEGMENT3(slice->seg.lf_update[3]);
> +       reg |= VE_VP8_SEGMENT2(slice->seg.lf_update[2]);
> +       reg |= VE_VP8_SEGMENT1(slice->seg.lf_update[1]);
> +       reg |= VE_VP8_SEGMENT0(slice->seg.lf_update[0]);
>         cedrus_write(dev, VE_VP8_SEGMENT_FEAT_MB_LV1, reg);
>
>         reg = 0;
> -       reg |= VE_VP8_LF_DELTA3(slice->lf_header.ref_frm_delta[3]);
> -       reg |= VE_VP8_LF_DELTA2(slice->lf_header.ref_frm_delta[2]);
> -       reg |= VE_VP8_LF_DELTA1(slice->lf_header.ref_frm_delta[1]);
> -       reg |= VE_VP8_LF_DELTA0(slice->lf_header.ref_frm_delta[0]);
> +       reg |= VE_VP8_LF_DELTA3(slice->lf.ref_frm_delta[3]);
> +       reg |= VE_VP8_LF_DELTA2(slice->lf.ref_frm_delta[2]);
> +       reg |= VE_VP8_LF_DELTA1(slice->lf.ref_frm_delta[1]);
> +       reg |= VE_VP8_LF_DELTA0(slice->lf.ref_frm_delta[0]);
>         cedrus_write(dev, VE_VP8_REF_LF_DELTA, reg);
>
>         reg = 0;
> -       reg |= VE_VP8_LF_DELTA3(slice->lf_header.mb_mode_delta[3]);
> -       reg |= VE_VP8_LF_DELTA2(slice->lf_header.mb_mode_delta[2]);
> -       reg |= VE_VP8_LF_DELTA1(slice->lf_header.mb_mode_delta[1]);
> -       reg |= VE_VP8_LF_DELTA0(slice->lf_header.mb_mode_delta[0]);
> +       reg |= VE_VP8_LF_DELTA3(slice->lf.mb_mode_delta[3]);
> +       reg |= VE_VP8_LF_DELTA2(slice->lf.mb_mode_delta[2]);
> +       reg |= VE_VP8_LF_DELTA1(slice->lf.mb_mode_delta[1]);
> +       reg |= VE_VP8_LF_DELTA0(slice->lf.mb_mode_delta[0]);
>         cedrus_write(dev, VE_VP8_MODE_LF_DELTA, reg);
>
>         luma_addr = cedrus_dst_buf_addr(ctx, run->dst->vb2_buf.index, 0);
> @@ -846,13 +846,13 @@ static void cedrus_vp8_setup(struct cedrus_ctx *ctx,
>                      VE_H264_CTRL_DECODE_ERR_INT |
>                      VE_H264_CTRL_SLICE_DECODE_INT);
>
> -       if (slice->lf_header.level) {
> +       if (slice->lf.level) {
>                 ctx->codec.vp8.last_filter_type =
> -                       !!(slice->lf_header.flags & V4L2_VP8_LF_FILTER_TYPE_SIMPLE);
> +                       !!(slice->lf.flags & V4L2_VP8_LF_FILTER_TYPE_SIMPLE);
>                 ctx->codec.vp8.last_frame_p_type =
>                         !VP8_FRAME_IS_KEY_FRAME(slice);
>                 ctx->codec.vp8.last_sharpness_level =
> -                       slice->lf_header.sharpness_level;
> +                       slice->lf.sharpness_level;
>         }
>  }
>
> diff --git a/include/media/v4l2-ctrls.h b/include/media/v4l2-ctrls.h
> index 167ca8c8424f..aa06ff1695fe 100644
> --- a/include/media/v4l2-ctrls.h
> +++ b/include/media/v4l2-ctrls.h
> @@ -50,7 +50,7 @@ struct video_device;
>   * @p_h264_slice_params:       Pointer to a struct v4l2_ctrl_h264_slice_params.
>   * @p_h264_decode_params:      Pointer to a struct v4l2_ctrl_h264_decode_params.
>   * @p_h264_pred_weights:       Pointer to a struct v4l2_ctrl_h264_pred_weights.
> - * @p_vp8_frame_header:                Pointer to a VP8 frame header structure.
> + * @p_vp8_frame:               Pointer to a VP8 frame params structure.
>   * @p_hevc_sps:                        Pointer to an HEVC sequence parameter set structure.
>   * @p_hevc_pps:                        Pointer to an HEVC picture parameter set structure.
>   * @p_hevc_slice_params:       Pointer to an HEVC slice parameters structure.
> @@ -74,7 +74,7 @@ union v4l2_ctrl_ptr {
>         struct v4l2_ctrl_h264_slice_params *p_h264_slice_params;
>         struct v4l2_ctrl_h264_decode_params *p_h264_decode_params;
>         struct v4l2_ctrl_h264_pred_weights *p_h264_pred_weights;
> -       struct v4l2_ctrl_vp8_frame_header *p_vp8_frame_header;
> +       struct v4l2_ctrl_vp8_frame *p_vp8_frame;
>         struct v4l2_ctrl_hevc_sps *p_hevc_sps;
>         struct v4l2_ctrl_hevc_pps *p_hevc_pps;
>         struct v4l2_ctrl_hevc_slice_params *p_hevc_slice_params;
> diff --git a/include/media/vp8-ctrls.h b/include/media/vp8-ctrls.h
> index 3969550df148..86bb6e774604 100644
> --- a/include/media/vp8-ctrls.h
> +++ b/include/media/vp8-ctrls.h
> @@ -15,15 +15,15 @@
>
>  #define V4L2_PIX_FMT_VP8_FRAME v4l2_fourcc('V', 'P', '8', 'F')
>
> -#define V4L2_CID_MPEG_VIDEO_VP8_FRAME_HEADER (V4L2_CID_CODEC_BASE + 2000)
> -#define V4L2_CTRL_TYPE_VP8_FRAME_HEADER 0x301
> +#define V4L2_CID_MPEG_VIDEO_VP8_FRAME (V4L2_CID_CODEC_BASE + 2000)
> +#define V4L2_CTRL_TYPE_VP8_FRAME 0x301
>
> -#define V4L2_VP8_SEGMENT_HEADER_FLAG_ENABLED              0x01
> -#define V4L2_VP8_SEGMENT_HEADER_FLAG_UPDATE_MAP           0x02
> -#define V4L2_VP8_SEGMENT_HEADER_FLAG_UPDATE_FEATURE_DATA  0x04
> -#define V4L2_VP8_SEGMENT_HEADER_FLAG_DELTA_VALUE_MODE     0x08
> +#define V4L2_VP8_SEGMENT_FLAG_ENABLED              0x01
> +#define V4L2_VP8_SEGMENT_FLAG_UPDATE_MAP           0x02
> +#define V4L2_VP8_SEGMENT_FLAG_UPDATE_FEATURE_DATA  0x04
> +#define V4L2_VP8_SEGMENT_FLAG_DELTA_VALUE_MODE     0x08
>
> -struct v4l2_vp8_segment_header {
> +struct v4l2_vp8_segment {
>         __s8 quant_update[4];
>         __s8 lf_update[4];
>         __u8 segment_probs[3];
> @@ -31,10 +31,10 @@ struct v4l2_vp8_segment_header {
>         __u32 flags;
>  };
>
> -#define V4L2_VP8_LF_HEADER_ADJ_ENABLE  0x01
> -#define V4L2_VP8_LF_HEADER_DELTA_UPDATE        0x02
> +#define V4L2_VP8_LF_ADJ_ENABLE 0x01
> +#define V4L2_VP8_LF_DELTA_UPDATE       0x02
>  #define V4L2_VP8_LF_FILTER_TYPE_SIMPLE 0x04
> -struct v4l2_vp8_loopfilter_header {
> +struct v4l2_vp8_loopfilter {
>         __s8 ref_frm_delta[4];
>         __s8 mb_mode_delta[4];
>         __u8 sharpness_level;
> @@ -43,7 +43,7 @@ struct v4l2_vp8_loopfilter_header {
>         __u32 flags;
>  };
>
> -struct v4l2_vp8_quantization_header {
> +struct v4l2_vp8_quantization {
>         __u8 y_ac_qi;
>         __s8 y_dc_delta;
>         __s8 y2_dc_delta;
> @@ -55,7 +55,7 @@ struct v4l2_vp8_quantization_header {
>
>  #define V4L2_VP8_COEFF_PROB_CNT 11
>  #define V4L2_VP8_MV_PROB_CNT 19
> -struct v4l2_vp8_entropy_header {
> +struct v4l2_vp8_entropy {
>         __u8 coeff_probs[4][8][3][V4L2_VP8_COEFF_PROB_CNT];
>         __u8 y_mode_probs[4];
>         __u8 uv_mode_probs[3];
> @@ -70,21 +70,21 @@ struct v4l2_vp8_entropy_coder_state {
>         __u8 padding;
>  };
>
> -#define V4L2_VP8_FRAME_HEADER_FLAG_KEY_FRAME           0x01
> -#define V4L2_VP8_FRAME_HEADER_FLAG_EXPERIMENTAL                0x02
> -#define V4L2_VP8_FRAME_HEADER_FLAG_SHOW_FRAME          0x04
> -#define V4L2_VP8_FRAME_HEADER_FLAG_MB_NO_SKIP_COEFF    0x08
> -#define V4L2_VP8_FRAME_HEADER_FLAG_SIGN_BIAS_GOLDEN    0x10
> -#define V4L2_VP8_FRAME_HEADER_FLAG_SIGN_BIAS_ALT       0x20
> +#define V4L2_VP8_FRAME_FLAG_KEY_FRAME          0x01
> +#define V4L2_VP8_FRAME_FLAG_EXPERIMENTAL               0x02
> +#define V4L2_VP8_FRAME_FLAG_SHOW_FRAME         0x04
> +#define V4L2_VP8_FRAME_FLAG_MB_NO_SKIP_COEFF   0x08
> +#define V4L2_VP8_FRAME_FLAG_SIGN_BIAS_GOLDEN   0x10
> +#define V4L2_VP8_FRAME_FLAG_SIGN_BIAS_ALT      0x20
>
>  #define VP8_FRAME_IS_KEY_FRAME(hdr) \
> -       (!!((hdr)->flags & V4L2_VP8_FRAME_HEADER_FLAG_KEY_FRAME))
> +       (!!((hdr)->flags & V4L2_VP8_FRAME_FLAG_KEY_FRAME))
>
> -struct v4l2_ctrl_vp8_frame_header {
> -       struct v4l2_vp8_segment_header segment_header;
> -       struct v4l2_vp8_loopfilter_header lf_header;
> -       struct v4l2_vp8_quantization_header quant_header;
> -       struct v4l2_vp8_entropy_header entropy_header;
> +struct v4l2_ctrl_vp8_frame {
> +       struct v4l2_vp8_segment seg;

Sorry, I see the PR for this has already been sent, but why rename it
to "seg" instead of "segment"?

> +       struct v4l2_vp8_loopfilter lf;
> +       struct v4l2_vp8_quantization quant;
> +       struct v4l2_vp8_entropy entropy;
>         struct v4l2_vp8_entropy_coder_state coder_state;
>
>         __u16 width;
> --
> 2.30.0
>