All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ezequiel Garcia <ezequiel@collabora.com>
To: Hans Verkuil <hverkuil@xs4all.nl>,
	linux-media@vger.kernel.org, linux-kernel@vger.kernel.org
Cc: Tomasz Figa <tfiga@chromium.org>,
	kernel@collabora.com, Jonas Karlman <jonas@kwiboo.se>,
	Alexandre Courbot <acourbot@chromium.org>,
	Jeffrey Kardatzke <jkardatzke@chromium.org>,
	Nicolas Dufresne <nicolas.dufresne@collabora.com>,
	Philipp Zabel <p.zabel@pengutronix.de>,
	Maxime Ripard <mripard@kernel.org>,
	Paul Kocialkowski <paul.kocialkowski@bootlin.com>
Subject: Re: [PATCH 03/10] media: uapi: h264: Split prediction weight parameters
Date: Thu, 16 Jul 2020 08:14:17 -0300	[thread overview]
Message-ID: <c2087b2fc66661791a38bdf5028702767392b82e.camel@collabora.com> (raw)
In-Reply-To: <15cd77f2-30ac-8d23-1be1-e9a58d85c088@xs4all.nl>

On Thu, 2020-07-16 at 09:26 +0200, Hans Verkuil wrote:
> On 15/07/2020 22:22, Ezequiel Garcia wrote:
> > The prediction weight parameters are only required under
> > certain conditions, which depend on slice header parameters.
> > 
> > The slice header syntax specifies that the prediction
> > weight table is present if:
> > 
> > ((weighted_pred_flag && (slice_type == P || slice_type == SP)) || \
> > (weighted_bipred_idc == 1 && slice_type == B))
> > 
> > Given its size, it makes sense to move this table to its control,
> > so applications can avoid passing it if the slice doesn't specify it.
> > 
> > Before this change struct v4l2_ctrl_h264_slice_params was 960 bytes.
> > With this change, it's 188 bytes and struct v4l2_ctrl_h264_pred_weight
> > is 772 bytes.
> > 
> > Signed-off-by: Ezequiel Garcia <ezequiel@collabora.com>
> > ---
> >  .../userspace-api/media/v4l/ext-ctrls-codec.rst    | 14 +++++++++-----
> >  drivers/media/v4l2-core/v4l2-ctrls.c               |  6 ++++++
> >  drivers/staging/media/sunxi/cedrus/cedrus.h        |  1 +
> >  drivers/staging/media/sunxi/cedrus/cedrus_dec.c    |  2 ++
> >  drivers/staging/media/sunxi/cedrus/cedrus_h264.c   |  6 ++----
> >  include/media/h264-ctrls.h                         |  5 +++--
> >  6 files changed, 23 insertions(+), 11 deletions(-)
> > 
> > diff --git a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
> > index 16bfc98ab2f6..d1695ae96700 100644
> > --- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
> > +++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
> > @@ -1879,18 +1879,22 @@ enum v4l2_mpeg_video_h264_hierarchical_coding_type -
> >        - 0x00000008
> >        -
> >  
> > -``Prediction Weight Table``
> > -
> > -    The bitstream parameters are defined according to :ref:`h264`,
> > +``V4L2_CID_MPEG_VIDEO_H264_PRED_WEIGHT (struct)``
> > +    Prediction weight table defined according to :ref:`h264`,
> >      section 7.4.3.2 "Prediction Weight Table Semantics". For further
> >      documentation, refer to the above specification, unless there is
> >      an explicit comment stating otherwise.
> >  
> > -.. c:type:: v4l2_h264_pred_weight_table
> > +    .. note::
> > +
> > +       This compound control is not yet part of the public kernel API and
> > +       it is expected to change.
> > +
> > +.. c:type:: v4l2_ctrl_h264_pred_weight
> >  
> >  .. cssclass:: longtable
> >  
> > -.. flat-table:: struct v4l2_h264_pred_weight_table
> > +.. flat-table:: struct v4l2_ctrl_h264_pred_weight
> >      :header-rows:  0
> >      :stub-columns: 0
> >      :widths:       1 1 2
> > diff --git a/drivers/media/v4l2-core/v4l2-ctrls.c b/drivers/media/v4l2-core/v4l2-ctrls.c
> > index 3f3fbcd60cc6..3a8a23e34c70 100644
> > --- a/drivers/media/v4l2-core/v4l2-ctrls.c
> > +++ b/drivers/media/v4l2-core/v4l2-ctrls.c
> > @@ -1412,6 +1412,9 @@ void v4l2_ctrl_fill(u32 id, const char **name, enum v4l2_ctrl_type *type,
> >  	case V4L2_CID_MPEG_VIDEO_H264_DECODE_PARAMS:
> >  		*type = V4L2_CTRL_TYPE_H264_DECODE_PARAMS;
> >  		break;
> > +	case V4L2_CID_MPEG_VIDEO_H264_PRED_WEIGHT:
> > +		*type = V4L2_CTRL_TYPE_H264_PRED_WEIGHT;
> > +		break;
> >  	case V4L2_CID_MPEG_VIDEO_VP8_FRAME_HEADER:
> >  		*type = V4L2_CTRL_TYPE_VP8_FRAME_HEADER;
> >  		break;
> > @@ -2553,6 +2556,9 @@ static struct v4l2_ctrl *v4l2_ctrl_new(struct v4l2_ctrl_handler *hdl,
> >  	case V4L2_CTRL_TYPE_H264_DECODE_PARAMS:
> >  		elem_size = sizeof(struct v4l2_ctrl_h264_decode_params);
> >  		break;
> > +	case V4L2_CTRL_TYPE_H264_PRED_WEIGHT:
> > +		elem_size = sizeof(struct v4l2_ctrl_h264_pred_weight);
> > +		break;
> >  	case V4L2_CTRL_TYPE_VP8_FRAME_HEADER:
> >  		elem_size = sizeof(struct v4l2_ctrl_vp8_frame_header);
> >  		break;
> > diff --git a/drivers/staging/media/sunxi/cedrus/cedrus.h b/drivers/staging/media/sunxi/cedrus/cedrus.h
> > index 96765555ab8a..80a0ecffa384 100644
> > --- a/drivers/staging/media/sunxi/cedrus/cedrus.h
> > +++ b/drivers/staging/media/sunxi/cedrus/cedrus.h
> > @@ -62,6 +62,7 @@ struct cedrus_h264_run {
> >  	const struct v4l2_ctrl_h264_scaling_matrix	*scaling_matrix;
> >  	const struct v4l2_ctrl_h264_slice_params	*slice_params;
> >  	const struct v4l2_ctrl_h264_sps			*sps;
> > +	const struct v4l2_ctrl_h264_pred_weight		*pred_weight;
> >  };
> >  
> >  struct cedrus_mpeg2_run {
> > diff --git a/drivers/staging/media/sunxi/cedrus/cedrus_dec.c b/drivers/staging/media/sunxi/cedrus/cedrus_dec.c
> > index 58c48e4fdfe9..047f773f64f9 100644
> > --- a/drivers/staging/media/sunxi/cedrus/cedrus_dec.c
> > +++ b/drivers/staging/media/sunxi/cedrus/cedrus_dec.c
> > @@ -57,6 +57,8 @@ void cedrus_device_run(void *priv)
> >  			V4L2_CID_MPEG_VIDEO_H264_SLICE_PARAMS);
> >  		run.h264.sps = cedrus_find_control_data(ctx,
> >  			V4L2_CID_MPEG_VIDEO_H264_SPS);
> > +		run.h264.pred_weight = cedrus_find_control_data(ctx,
> > +			V4L2_CID_MPEG_VIDEO_H264_PRED_WEIGHT);
> >  		break;
> >  
> >  	case V4L2_PIX_FMT_HEVC_SLICE:
> > diff --git a/drivers/staging/media/sunxi/cedrus/cedrus_h264.c b/drivers/staging/media/sunxi/cedrus/cedrus_h264.c
> > index cce527bbdf86..614b1b496e40 100644
> > --- a/drivers/staging/media/sunxi/cedrus/cedrus_h264.c
> > +++ b/drivers/staging/media/sunxi/cedrus/cedrus_h264.c
> > @@ -256,10 +256,8 @@ static void cedrus_write_scaling_lists(struct cedrus_ctx *ctx,
> >  static void cedrus_write_pred_weight_table(struct cedrus_ctx *ctx,
> >  					   struct cedrus_run *run)
> >  {
> > -	const struct v4l2_ctrl_h264_slice_params *slice =
> > -		run->h264.slice_params;
> > -	const struct v4l2_h264_pred_weight_table *pred_weight =
> > -		&slice->pred_weight_table;
> > +	const struct v4l2_ctrl_h264_pred_weight *pred_weight =
> > +		run->h264.pred_weight;
> >  	struct cedrus_dev *dev = ctx->dev;
> >  	int i, j, k;
> >  
> > diff --git a/include/media/h264-ctrls.h b/include/media/h264-ctrls.h
> > index bca4a9887e7e..da2ffb77b491 100644
> > --- a/include/media/h264-ctrls.h
> > +++ b/include/media/h264-ctrls.h
> > @@ -36,6 +36,7 @@
> >  #define V4L2_CID_MPEG_VIDEO_H264_DECODE_PARAMS	(V4L2_CID_MPEG_BASE+1004)
> >  #define V4L2_CID_MPEG_VIDEO_H264_DECODE_MODE	(V4L2_CID_MPEG_BASE+1005)
> >  #define V4L2_CID_MPEG_VIDEO_H264_START_CODE	(V4L2_CID_MPEG_BASE+1006)
> > +#define V4L2_CID_MPEG_VIDEO_H264_PRED_WEIGHT	(V4L2_CID_MPEG_BASE+1007)
> >  
> >  /* enum v4l2_ctrl_type type values */
> >  #define V4L2_CTRL_TYPE_H264_SPS			0x0110
> > @@ -43,6 +44,7 @@
> >  #define V4L2_CTRL_TYPE_H264_SCALING_MATRIX	0x0112
> >  #define V4L2_CTRL_TYPE_H264_SLICE_PARAMS	0x0113
> >  #define V4L2_CTRL_TYPE_H264_DECODE_PARAMS	0x0114
> > +#define V4L2_CTRL_TYPE_H264_PRED_WEIGHT		0x0115
> >  
> >  enum v4l2_mpeg_video_h264_decode_mode {
> >  	V4L2_MPEG_VIDEO_H264_DECODE_MODE_SLICE_BASED,
> > @@ -125,7 +127,7 @@ struct v4l2_h264_weight_factors {
> >  	__s16 chroma_offset[32][2];
> >  };
> >  
> > -struct v4l2_h264_pred_weight_table {
> > +struct v4l2_ctrl_h264_pred_weight {
> >  	__u16 luma_log2_weight_denom;
> >  	__u16 chroma_log2_weight_denom;
> >  	struct v4l2_h264_weight_factors weight_factors[2];
> > @@ -174,7 +176,6 @@ struct v4l2_ctrl_h264_slice_params {
> >  	__s32 delta_pic_order_cnt0;
> >  	__s32 delta_pic_order_cnt1;
> >  
> > -	struct v4l2_h264_pred_weight_table pred_weight_table;
> >  	/* Size in bits of dec_ref_pic_marking() syntax element. */
> >  	__u32 dec_ref_pic_marking_bit_size;
> >  	/* Size in bits of pic order count syntax. */
> > 
> 
> Shouldn't this be added to union v4l2_ctrl_ptr as well?
> 

Yup, that's correct.

Thanks,
Ezequiel


  reply	other threads:[~2020-07-16 11:14 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-07-15 20:22 [PATCH 0/7] media: Clean H264 stateless uAPI Ezequiel Garcia
2020-07-15 20:22 ` [PATCH 01/10] media: uapi: h264: Update reference lists Ezequiel Garcia
2020-07-22 21:43   ` Jonas Karlman
2020-07-15 20:22 ` [PATCH 02/10] media: uapi: h264: Further clarify scaling lists order Ezequiel Garcia
2020-07-16  7:23   ` Hans Verkuil
2020-07-16 11:43     ` Ezequiel Garcia
2020-07-16 11:44       ` Hans Verkuil
2020-07-15 20:22 ` [PATCH 03/10] media: uapi: h264: Split prediction weight parameters Ezequiel Garcia
2020-07-16  7:26   ` Hans Verkuil
2020-07-16 11:14     ` Ezequiel Garcia [this message]
2020-07-22 16:03   ` Jernej Škrabec
2020-07-25 13:30   ` Alexandre Courbot
2020-07-30 13:48     ` Nicolas Dufresne
2020-07-15 20:22 ` [PATCH 04/10] media: uapi: h264: Clarify pic_order_cnt_bit_size field Ezequiel Garcia
2020-07-15 20:22 ` [PATCH 05/10] media: uapi: h264: Increase size of 'first_mb_in_slice' field Ezequiel Garcia
2020-07-15 20:22 ` [PATCH 06/10] media: uapi: h264: Cleanup DPB entry interface Ezequiel Garcia
2020-07-22 16:09   ` Jernej Škrabec
2020-07-22 17:11     ` Ezequiel Garcia
2020-07-22 21:52   ` Jonas Karlman
2020-07-24 19:08     ` Ezequiel Garcia
2020-07-27 23:39       ` Jonas Karlman
2020-07-31 12:49         ` Ezequiel Garcia
2020-07-15 20:22 ` [PATCH 07/10] media: uapi: h264: Increase size of DPB entry pic_num Ezequiel Garcia
2020-07-15 20:22 ` [PATCH 08/10] media: uapi: h264: Clean slice invariants syntax elements Ezequiel Garcia
2020-07-25 14:34   ` Alexandre Courbot
2020-07-27 14:39     ` Ezequiel Garcia
2020-07-27 14:52       ` Tomasz Figa
2020-07-27 16:18         ` Ezequiel Garcia
2020-07-27 18:10           ` Tomasz Figa
2020-07-27 19:43             ` Nicolas Dufresne
2020-08-04 13:35               ` Tomasz Figa
2020-08-05 16:41                 ` Ezequiel Garcia
2020-07-28 12:44       ` Maxime Ripard
2020-07-28 21:09         ` Nicolas Dufresne
2020-07-15 20:22 ` [PATCH 09/10] media: hantro: Don't require unneeded H264_SLICE_PARAMS Ezequiel Garcia
2020-07-25 14:45   ` Alexandre Courbot
2020-07-26 13:34     ` Alexandre Courbot
2020-07-27 14:44     ` Ezequiel Garcia
2020-07-15 20:22 ` [PATCH 10/10] media: rkvdec: " Ezequiel Garcia
2020-07-27 22:03   ` Jonas Karlman

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=c2087b2fc66661791a38bdf5028702767392b82e.camel@collabora.com \
    --to=ezequiel@collabora.com \
    --cc=acourbot@chromium.org \
    --cc=hverkuil@xs4all.nl \
    --cc=jkardatzke@chromium.org \
    --cc=jonas@kwiboo.se \
    --cc=kernel@collabora.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-media@vger.kernel.org \
    --cc=mripard@kernel.org \
    --cc=nicolas.dufresne@collabora.com \
    --cc=p.zabel@pengutronix.de \
    --cc=paul.kocialkowski@bootlin.com \
    --cc=tfiga@chromium.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.