All of lore.kernel.org
 help / color / mirror / Atom feed
From: Nicolas Dufresne <nicolas.dufresne@collabora.com>
To: Ezequiel Garcia <ezequiel@collabora.com>,
	Jonas Karlman <jonas@kwiboo.se>,
	Boris Brezillon <boris.brezillon@collabora.com>
Cc: Mauro Carvalho Chehab <mchehab@kernel.org>,
	Hans Verkuil <hverkuil@xs4all.nl>,
	Philipp Zabel <p.zabel@pengutronix.de>,
	Paul Kocialkowski <paul.kocialkowski@bootlin.com>,
	"linux-media@vger.kernel.org" <linux-media@vger.kernel.org>,
	"linux-rockchip@lists.infradead.org" 
	<linux-rockchip@lists.infradead.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: [RFC 07/12] media: uapi: h264: Add DPB entry field reference flags
Date: Tue, 14 Jul 2020 12:04:15 -0400	[thread overview]
Message-ID: <7cbd2b84a4a5778a3ad04a83fad775f7e244f6bc.camel@collabora.com> (raw)
In-Reply-To: <c10bb0992a8bfb751edf66bdb7752da842877281.camel@collabora.com>

[-- Attachment #1: Type: text/plain, Size: 9162 bytes --]

Le dimanche 12 juillet 2020 à 19:59 -0300, Ezequiel Garcia a écrit :
> On Sat, 2020-07-11 at 10:21 +0000, Jonas Karlman wrote:
> > On 2020-07-10 23:49, Nicolas Dufresne wrote:
> > > Le vendredi 10 juillet 2020 à 09:25 -0300, Ezequiel Garcia a écrit :
> > > > +Nicolas
> > > > 
> > > > On Fri, 2020-07-10 at 14:05 +0200, Boris Brezillon wrote:
> > > > > On Fri, 10 Jul 2020 08:50:28 -0300
> > > > > Ezequiel Garcia <ezequiel@collabora.com> wrote:
> > > > > 
> > > > > > On Fri, 2020-07-10 at 10:13 +0200, Boris Brezillon wrote:
> > > > > > > On Fri, 10 Jul 2020 01:21:07 -0300
> > > > > > > Ezequiel Garcia <ezequiel@collabora.com> wrote:
> > > > > > >   
> > > > > > > > Hello Jonas,
> > > > > > > > 
> > > > > > > > In the context of the uAPI cleanup,
> > > > > > > > I'm revisiting this patch.
> > > > > > > > 
> > > > > > > > On Sun, 2019-09-01 at 12:45 +0000, Jonas Karlman wrote:  
> > > > > > > > > Add DPB entry flags to help indicate when a reference frame is a
> > > > > > > > > field picture
> > > > > > > > > and how the DPB entry is referenced, top or bottom field or full
> > > > > > > > > frame.
> > > > > > > > > 
> > > > > > > > > Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
> > > > > > > > > ---
> > > > > > > > >  Documentation/media/uapi/v4l/ext-ctrls-codec.rst | 12 ++++++++++++
> > > > > > > > >  include/media/h264-ctrls.h                       |  4 ++++
> > > > > > > > >  2 files changed, 16 insertions(+)
> > > > > > > > > 
> > > > > > > > > diff --git a/Documentation/media/uapi/v4l/ext-ctrls-codec.rst
> > > > > > > > > b/Documentation/media/uapi/v4l/ext-ctrls-codec.rst
> > > > > > > > > index bc5dd8e76567..eb6c32668ad7 100644
> > > > > > > > > --- a/Documentation/media/uapi/v4l/ext-ctrls-codec.rst
> > > > > > > > > +++ b/Documentation/media/uapi/v4l/ext-ctrls-codec.rst
> > > > > > > > > @@ -2022,6 +2022,18 @@ enum
> > > > > > > > > v4l2_mpeg_video_h264_hierarchical_coding_type -
> > > > > > > > >      * - ``V4L2_H264_DPB_ENTRY_FLAG_LONG_TERM``
> > > > > > > > >        - 0x00000004
> > > > > > > > >        - The DPB entry is a long term reference frame
> > > > > > > > > +    * - ``V4L2_H264_DPB_ENTRY_FLAG_FIELD_PICTURE``
> > > > > > > > > +      - 0x00000008
> > > > > > > > > +      - The DPB entry is a field picture
> > > > > > > > > +    * - ``V4L2_H264_DPB_ENTRY_FLAG_REF_TOP``
> > > > > > > > > +      - 0x00000010
> > > > > > > > > +      - The DPB entry is a top field reference
> > > > > > > > > +    * - ``V4L2_H264_DPB_ENTRY_FLAG_REF_BOTTOM``
> > > > > > > > > +      - 0x00000020
> > > > > > > > > +      - The DPB entry is a bottom field reference
> > > > > > > > > +    * - ``V4L2_H264_DPB_ENTRY_FLAG_REF_FRAME``
> > > > > > > > > +      - 0x00000030
> > > > > > > > > +      - The DPB entry is a reference frame
> > > > > > > > >  
> > > > > > > > >  ``V4L2_CID_MPEG_VIDEO_H264_DECODE_MODE (enum)``
> > > > > > > > >      Specifies the decoding mode to use. Currently exposes slice-
> > > > > > > > > based and
> > > > > > > > > diff --git a/include/media/h264-ctrls.h b/include/media/h264-ctrls.h
> > > > > > > > > index e877bf1d537c..76020ebd1e6c 100644
> > > > > > > > > --- a/include/media/h264-ctrls.h
> > > > > > > > > +++ b/include/media/h264-ctrls.h
> > > > > > > > > @@ -185,6 +185,10 @@ struct v4l2_ctrl_h264_slice_params {
> > > > > > > > >  #define V4L2_H264_DPB_ENTRY_FLAG_VALID		0x01
> > > > > > > > >  #define V4L2_H264_DPB_ENTRY_FLAG_ACTIVE		0x02
> > > > > > > > >  #define V4L2_H264_DPB_ENTRY_FLAG_LONG_TERM	0x04
> > > > > > > > > +#define V4L2_H264_DPB_ENTRY_FLAG_FIELD_PICTURE	0x08
> > > > > > > > > +#define V4L2_H264_DPB_ENTRY_FLAG_REF_TOP	0x10
> > > > > > > > > +#define V4L2_H264_DPB_ENTRY_FLAG_REF_BOTTOM	0x20
> > > > > > > > > +#define V4L2_H264_DPB_ENTRY_FLAG_REF_FRAME	0x30
> > > > > > > > >      
> > > > > > > > 
> > > > > > > > I've been going thru the H264 spec and I'm unsure,
> > > > > > > > are all these flags semantically needed?
> > > > > > > > 
> > > > > > > > For instance, if one of REF_BOTTOM or REF_TOP (or both)
> > > > > > > > are set, doesn't that indicate it's a field picture?
> > > > > > > > 
> > > > > > > > Or conversely, if neither REF_BOTTOM or REF_TOP are set,
> > > > > > > > then it's a frame picture?  
> > > > > > > 
> > > > > > > I think that's what I was trying to do here [1]
> > > > > > > 
> > > > > > > [1]https://patchwork.kernel.org/patch/11392095/  
> > > > > > 
> > > > > > Right. Aren't we missing a DPB_ENTRY_FLAG_TOP_FIELD?
> > > > > > 
> > > > > > If I understand correctly, the DPB can contain:
> > > > > > 
> > > > > > * frames (FLAG_FIELD not set)
> > > > > > * a field pair, with a single field (FLAG_FIELD and either TOP or BOTTOM).
> > > > > > * a field pair, with boths fields (FLAG_FIELD and both TOP or BOTTOM).
> > > > > 
> > > > > Well, my understand is that, if the buffer contains both a TOP and
> > > > > BOTTOM field, it actually becomes a full frame, so you actually have
> > > > > those cases:
> > > > > 
> > > > > * FLAG_FIELD not set: this a frame (note that a TOP/BOTTOM field
> > > > >   decoded buffer can become of frame if it's complemented with the
> > > > >   missing field later during the decoding)
> > > > > * FLAG_FIELD set + BOTTOM_FIELD not set: this is a TOP field
> > > > > * FLAG_FIELD set + BOTTOM_FIELD set: this is a BOTTOM field
> > > > > * FLAG_FIELD not set + BOTTOM_FIELD set: invalid combination
> > > 
> > > Let's admit, while this work, it's odd. Can we just move to that instewad ?
> > > 
> > >   FLAG_TOP_FIELD
> > >   FLAG_BOTTOM_FIELD
> > >   FLAG_FRAME = (FLAG_TOP_FIELD | FLAG_BOTTOM_FIELD)
> > > 
> > > So it can be used as a flag, but also is a proper enum and there is no longer an
> > > invalid combination.
> > >   
> > > > > but I might be wrong.
> > 
> > There seems to be some misunderstanding here, the top/bottom flagging should
> > not be used to describe if the picture is a field, field pair or frame, it
> > should be used to flag if a frame or the top and/or bottom field (in case of
> > a field pair) is "used for short-term reference".
> > 
> 
> I'm not sure why "used for short-term reference" instead
> of "used for reference".
> 
> > FLAG_TOP_REF
> > FLAG_BOTTOM_REF
> > FLAG_FRAME_REF = (FLAG_TOP_REF | FLAG_BOTTOM_REF)
> > 
> > Would be a more appropriate naming.
> > 
> > The FIELD_PIC flag would then be used to describe if the picture is a
> > reference frame or a complementary reference field pair.
> > 
> > As described in hantro h264 driver [1] the MV buffer is split in two
> > for field encoded frames, and I guess the rkvdec block does something
> > similar and therefore the HW blocks probably needs to know if the reference
> > picture is a reference frame or a complementary reference field pair.
> > It should be possible to keep such state in driver but since such information
> > was easily available in ffmpeg and the driver being "stateless" using a flag
> > seamed like a good choice at the time.
> > 
> > Please note that I have not done any test without the "field pic" flagging
> > but both mpp and the imx/hantro reference code are configuring this bit.
> > 
> > [1] https://git.linuxtv.org/media_tree.git/tree/drivers/staging/media/hantro/hantro_g1_h264_dec.c#n265
> > 
> 
> How about this:
> 
> #define V4L2_H264_DPB_ENTRY_FLAG_VALID          0x01
> #define V4L2_H264_DPB_ENTRY_FLAG_ACTIVE         0x02
> #define V4L2_H264_DPB_ENTRY_FLAG_LONG_TERM      0x04
> #define V4L2_H264_DPB_ENTRY_FLAG_FIELD          0x08
> 
> enum v4l2_h264_dpb_reference {
>         V4L2_H264_DPB_TOP_REF = 0x1,
>         V4L2_H264_DPB_BOTTOM_REF = 0x2,
>         V4L2_H264_DPB_FRAME_REF = 0x3,
> };
> 
> With the following semantics (which should be
> specified in the documentation):
> 
> * VALID: non-empty DPB entry.
> * ACTIVE: picture is marked as "used for reference" (short-term or long-term).
> * LONG_TERM: picture is marked as "used for long-term".
> * FIELD: picture is a single field, or a complementary field pair. 
> 
> The v4l2_h264_dpb_reference enum would flag which
> of the fields as used for reference.
> 
> This enum seems less ambiguous and easier to use for both
> drivers and applications.
> 
> I am not exactly sure why a driver would ever need to
> configure an "unused for reference" decoded picture
> (i.e. VALID=1, ACTIVE=0), but I guess it's just clearer
> to include this in the interface.

Indeed, that might have leaked from what we do in userspace, were we
need to track this. I haven't seen anything that would do concealment
or anything anyway.

I don't have definitive opinion on the above, but I think it's getting
in the right direction.

> 
> Thanks,
> Ezequiel
> 
> > Regards,
> > Jonas
> > 
> > > > Yes, perhaps that's correct. I was trying to think strictly
> > > > in terms of the H264 semantics, to define a clean interface.
> > > > 
> > > > From the mpp code, looks like the above is enough for rkvdec
> > > > (although I haven't done any tests).
> > > > 
> > > > Ezequiel
> > > > 
> > > > 
> > > > 
> 
> 

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 195 bytes --]

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

Thread overview: 90+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-09-01 12:42 [PATCH RFC 00/12] media: hantro: H264 fixes and improvements Jonas Karlman
2019-09-01 12:42 ` Jonas Karlman
2019-09-01 12:45 ` [PATCH 01/12] media: hantro: Fix H264 max frmsize supported on RK3288 Jonas Karlman
2019-09-01 12:45   ` Jonas Karlman
2019-09-04 13:07   ` Ezequiel Garcia
2019-09-04 13:07     ` Ezequiel Garcia
2019-09-09 19:25     ` Jonas Karlman
2019-09-09 19:25       ` Jonas Karlman
     [not found] ` <20190901124531.23645-1-jonas@kwiboo.se>
2019-09-01 12:45   ` [PATCH 02/12] media: hantro: Do not reorder H264 scaling list Jonas Karlman
2019-09-01 12:45     ` Jonas Karlman
2019-09-02 14:00     ` Philipp Zabel
2019-09-02 14:00       ` Philipp Zabel
2019-09-02 16:18       ` Jonas Karlman
2019-09-02 16:18         ` Jonas Karlman
2019-09-03  7:54         ` Jonas Karlman
2019-09-03  7:54           ` Jonas Karlman
2019-09-03 12:53           ` Philipp Zabel
2019-09-03 12:53             ` Philipp Zabel
2019-09-03  9:56         ` Philipp Zabel
2019-09-03  9:56           ` Philipp Zabel
2019-09-10 10:14         ` Ezequiel Garcia
2019-09-10 10:14           ` Ezequiel Garcia
2019-09-01 12:45   ` [PATCH 03/12] media: hantro: Fix H264 motion vector buffer offset Jonas Karlman
2019-09-01 12:45     ` Jonas Karlman
2019-09-03 10:58     ` Philipp Zabel
2019-09-03 10:58       ` Philipp Zabel
2019-09-03 20:13       ` Jonas Karlman
2019-09-03 20:13         ` Jonas Karlman
2019-09-10 10:18     ` Ezequiel Garcia
2019-09-10 10:18       ` Ezequiel Garcia
2019-09-10 11:34     ` Ezequiel Garcia
2019-09-10 11:34       ` Ezequiel Garcia
2019-09-01 12:45   ` [PATCH 05/12] media: hantro: Remove now unused H264 pic_size Jonas Karlman
2019-09-01 12:45     ` Jonas Karlman
2019-09-01 12:45   ` [PATCH 04/12] media: hantro: Reduce H264 extra space for motion vectors Jonas Karlman
2019-09-01 12:45     ` Jonas Karlman
2019-09-01 12:45   ` [PATCH 06/12] media: hantro: Set H264 FIELDPIC_FLAG_E flag correctly Jonas Karlman
2019-09-01 12:45     ` Jonas Karlman
2019-09-01 12:45   ` [RFC 08/12] media: hantro: Fix H264 decoding of field encoded content Jonas Karlman
2019-09-01 12:45     ` Jonas Karlman
2019-09-03 13:21     ` Philipp Zabel
2019-09-03 13:21       ` Philipp Zabel
2019-09-03 14:02       ` Jonas Karlman
2019-09-03 14:02         ` Jonas Karlman
2019-09-03 15:01         ` Philipp Zabel
2019-09-03 15:01           ` Philipp Zabel
2019-09-03 19:47           ` Jonas Karlman
2019-09-03 19:47             ` Jonas Karlman
2019-09-01 12:45   ` [RFC 07/12] media: uapi: h264: Add DPB entry field reference flags Jonas Karlman
2019-09-01 12:45     ` Jonas Karlman
2020-07-10  4:21     ` Ezequiel Garcia
2020-07-10  4:21       ` Ezequiel Garcia
2020-07-10  8:13       ` Boris Brezillon
2020-07-10  8:13         ` Boris Brezillon
2020-07-10  8:48         ` Jonas Karlman
2020-07-10  8:48           ` Jonas Karlman
2020-07-10 12:18           ` Ezequiel Garcia
2020-07-10 12:18             ` Ezequiel Garcia
2020-07-10 11:50         ` Ezequiel Garcia
2020-07-10 11:50           ` Ezequiel Garcia
2020-07-10 12:05           ` Boris Brezillon
2020-07-10 12:05             ` Boris Brezillon
2020-07-10 12:25             ` Ezequiel Garcia
2020-07-10 12:25               ` Ezequiel Garcia
2020-07-10 21:49               ` Nicolas Dufresne
2020-07-10 21:49                 ` Nicolas Dufresne
2020-07-11 10:21                 ` Jonas Karlman
2020-07-11 10:21                   ` Jonas Karlman
2020-07-11 18:36                   ` Nicolas Dufresne
2020-07-11 18:36                     ` Nicolas Dufresne
2020-07-12 22:59                   ` Ezequiel Garcia
2020-07-12 22:59                     ` Ezequiel Garcia
2020-07-14 16:04                     ` Nicolas Dufresne [this message]
2020-07-14 16:04                       ` Nicolas Dufresne
2019-09-01 12:45   ` [RFC 09/12] media: hantro: Refactor G1 H264 code Jonas Karlman
2019-09-01 12:45     ` Jonas Karlman
2019-09-01 12:45   ` [RFC 10/12] media: hantro: Add support for H264 decoding on RK3399 Jonas Karlman
2019-09-01 12:45     ` Jonas Karlman
2019-09-02 11:46     ` Hans Verkuil
2019-09-02 11:46       ` Hans Verkuil
2019-09-02 15:25       ` Jonas Karlman
2019-09-02 15:25         ` Jonas Karlman
2019-09-01 12:45   ` [RFC 11/12] media: hantro: Enable " Jonas Karlman
2019-09-01 12:45     ` Jonas Karlman
2019-09-01 12:45   ` [RFC 12/12] media: hantro: Enable H264 decoding on RK3328 Jonas Karlman
2019-09-01 12:45     ` Jonas Karlman
2019-09-02 13:02 ` [PATCH RFC 00/12] media: hantro: H264 fixes and improvements Ezequiel Garcia
2019-09-02 13:02   ` Ezequiel Garcia
2019-09-02 16:28   ` Jonas Karlman
2019-09-02 16:28     ` 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=7cbd2b84a4a5778a3ad04a83fad775f7e244f6bc.camel@collabora.com \
    --to=nicolas.dufresne@collabora.com \
    --cc=boris.brezillon@collabora.com \
    --cc=ezequiel@collabora.com \
    --cc=hverkuil@xs4all.nl \
    --cc=jonas@kwiboo.se \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-media@vger.kernel.org \
    --cc=linux-rockchip@lists.infradead.org \
    --cc=mchehab@kernel.org \
    --cc=p.zabel@pengutronix.de \
    --cc=paul.kocialkowski@bootlin.com \
    /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.