linux-media.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Maxime Ripard <maxime@cerno.tech>
To: Ezequiel Garcia <ezequiel@collabora.com>
Cc: Alexandre Courbot <acourbot@chromium.org>,
	Linux Media Mailing List <linux-media@vger.kernel.org>,
	LKML <linux-kernel@vger.kernel.org>,
	Tomasz Figa <tfiga@chromium.org>,
	kernel@collabora.com, Jonas Karlman <jonas@kwiboo.se>,
	Hans Verkuil <hverkuil@xs4all.nl>,
	Jeffrey Kardatzke <jkardatzke@chromium.org>,
	Nicolas Dufresne <nicolas.dufresne@collabora.com>,
	Philipp Zabel <p.zabel@pengutronix.de>,
	Paul Kocialkowski <paul.kocialkowski@bootlin.com>
Subject: Re: [PATCH 08/10] media: uapi: h264: Clean slice invariants syntax elements
Date: Tue, 28 Jul 2020 14:44:05 +0200	[thread overview]
Message-ID: <20200728124405.ziuwaabp4fnv7lw2@gilmour.lan> (raw)
In-Reply-To: <636aab0a2be83e751a82a84ac3946afec2c87a17.camel@collabora.com>

Hi,

On Mon, Jul 27, 2020 at 11:39:12AM -0300, Ezequiel Garcia wrote:
> On Sat, 2020-07-25 at 23:34 +0900, Alexandre Courbot wrote:
> > On Thu, Jul 16, 2020 at 5:23 AM Ezequiel Garcia <ezequiel@collabora.com> wrote:
> > > The H.264 specification requires in its "Slice header semantics"
> > > section that the following values shall be the same in all slice headers:
> > > 
> > >   pic_parameter_set_id
> > >   frame_num
> > >   field_pic_flag
> > >   bottom_field_flag
> > >   idr_pic_id
> > >   pic_order_cnt_lsb
> > >   delta_pic_order_cnt_bottom
> > >   delta_pic_order_cnt[ 0 ]
> > >   delta_pic_order_cnt[ 1 ]
> > >   sp_for_switch_flag
> > >   slice_group_change_cycle
> > > 
> > > and can therefore be moved to the per-frame decode parameters control.
> > 
> > I am really not a H.264 expert, so this question may not be relevant,
> 
> All questions are welcome. I'm more than happy to discuss this patchset.
> 
> > but are these values specified for every slice header in the
> > bitstream, or are they specified only once per frame?
> > 
> > I am asking this because it would certainly make user-space code
> > simpler if we could remain as close to the bitstream as possible. If
> > these values are specified once per slice, then factorizing them would
> > leave user-space with the burden of deciding what to do if they change
> > across slices.
> > 
> > Note that this is a double-edged sword, because it is not necessarily
> > better to leave the firmware in charge of deciding what to do in such
> > a case. :) So hopefully these are only specified once per frame in the
> > bitstream, in which case your proposal makes complete sense.
> 
> Frame-based hardwares accelerators such as Hantro and Rockchip VDEC
> are doing the slice header parsing themselves. Therefore, the
> driver is not really parsing these fields on each slice header.
> 
> Currently, we are already using only the first slice in a frame,
> as you can see from:
> 
>         if (slices[0].flags & V4L2_H264_SLICE_FLAG_FIELD_PIC)
>                 reg |= G1_REG_DEC_CTRL0_PIC_FIELDMODE_E;
> 
> Even if these fields are transported in the slice header,
> I think it makes sense for us to split them into the decode params
> (per-frame) control.

I don't really get it though. The initial plan that was asked was to
mimic as much as possible the bitstream and that's what we did.

But that requirement seems to have changed now?

Even if it did change though, if this is defined as a slice parameter in
the spec, why would we want to move it to some other control entirely if
we are to keep the slice parameters control?

Especially if the reason is to make the life easier on a couple of
drivers, that's really not the point of a userspace API, and we can
always add an helper if it really shows up as a pattern.

> They are really specified to be the same across all slices,
> so even I'd say if a bitstream violates this, it's likely
> either a corrupted bitstream or an encoder bug.

That doesn't look like something we should worry about though. Or at
least, this is true for pretty much any other field in the bitstream and
we won't change those.

Maxime

  parent reply	other threads:[~2020-07-28 12:44 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
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 [this message]
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=20200728124405.ziuwaabp4fnv7lw2@gilmour.lan \
    --to=maxime@cerno.tech \
    --cc=acourbot@chromium.org \
    --cc=ezequiel@collabora.com \
    --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=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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).