All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tomasz Figa <tfiga@chromium.org>
To: Maxime Ripard <maxime.ripard@bootlin.com>
Cc: Ezequiel Garcia <ezequiel@collabora.com>,
	Pawel Osciak <posciak@chromium.org>,
	Paul Kocialkowski <paul.kocialkowski@bootlin.com>,
	Hans Verkuil <hans.verkuil@cisco.com>,
	Alexandre Courbot <acourbot@chromium.org>,
	Sakari Ailus <sakari.ailus@linux.intel.com>,
	Laurent Pinchart <laurent.pinchart@ideasonboard.com>,
	Chen-Yu Tsai <wens@csie.org>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	"list@263.net:IOMMU DRIVERS <iommu@lists.linux-foundation.org>,
	Joerg Roedel <joro@8bytes.org>,"
	<linux-arm-kernel@lists.infradead.org>,
	Linux Media Mailing List <linux-media@vger.kernel.org>,
	Nicolas Dufresne <nicolas.dufresne@collabora.com>,
	jenskuske@gmail.com, linux-sunxi@googlegroups.com,
	thomas.petazzoni@bootlin.com, groeck@chromium.org
Subject: Re: [PATCH 1/9] CHROMIUM: v4l: Add H264 low-level decoder API compound controls.
Date: Wed, 22 Aug 2018 18:54:23 +0900	[thread overview]
Message-ID: <CAAFQd5ANvKF2+GEXQTnRsdYVzJTtBOhv7nFahV=2W-9_QXwY4g@mail.gmail.com> (raw)
In-Reply-To: <20180822091557.gtnlgoebyv6yttzf@flea>

On Wed, Aug 22, 2018 at 6:16 PM Maxime Ripard <maxime.ripard@bootlin.com> wrote:
>
> Hi,
>
> On Tue, Aug 21, 2018 at 01:58:38PM -0300, Ezequiel Garcia wrote:
> > On Wed, 2018-06-13 at 16:07 +0200, Maxime Ripard wrote:
> > > From: Pawel Osciak <posciak@chromium.org>
> > >
> > > Signed-off-by: Pawel Osciak <posciak@chromium.org>
> > > Reviewed-by: Wu-cheng Li <wuchengli@chromium.org>
> > > Tested-by: Tomasz Figa <tfiga@chromium.org>
> > > [rebase44(groeck): include linux/types.h in v4l2-controls.h]
> > > Signed-off-by: Guenter Roeck <groeck@chromium.org>
> > > Signed-off-by: Maxime Ripard <maxime.ripard@bootlin.com>
> > > ---
> > >
> > [..]
> > > diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
> > > index 242a6bfa1440..4b4a1b25a0db 100644
> > > --- a/include/uapi/linux/videodev2.h
> > > +++ b/include/uapi/linux/videodev2.h
> > > @@ -626,6 +626,7 @@ struct v4l2_pix_format {
> > >  #define V4L2_PIX_FMT_H264     v4l2_fourcc('H', '2', '6', '4') /* H264 with start codes */
> > >  #define V4L2_PIX_FMT_H264_NO_SC v4l2_fourcc('A', 'V', 'C', '1') /* H264 without start codes */
> > >  #define V4L2_PIX_FMT_H264_MVC v4l2_fourcc('M', '2', '6', '4') /* H264 MVC */
> > > +#define V4L2_PIX_FMT_H264_SLICE v4l2_fourcc('S', '2', '6', '4') /* H264 parsed slices */
> >
> > As pointed out by Tomasz, the Rockchip VPU driver expects start codes [1], so the userspace
> > should be aware of it. Perhaps we could document this pixel format better as:
> >
> > #define V4L2_PIX_FMT_H264_SLICE v4l2_fourcc('S', '2', '6', '4') /* H264 parsed slices with start codes */
>
> I'm not sure this is something we want to do at that point. libva
> doesn't give the start code, so this is only going to make the life of
> the sane controllers more difficult. And if you need to have the start
> code and parse it, then you're not so stateless anymore.

I might not remember correctly, but Rockchip decoder does some slice
parsing on its own (despite not doing any higher level parsing).
Probably that's why it needs those start codes.

I wonder if libva is the best reference here. It's been designed
almost entirely by Intel for Intel video hardware. We want something
that could work with a wide range of devices and avoid something like
a need to create a semi-stateless API few months later. In fact,
hardware from another vendor, we're working with, also does parsing of
slice headers internally. Moreover, we have some weird
kind-of-stateful decoders, which cannot fully deal with bitstream on
its own, e.g. cannot parse formats, cannot handle resolution changes,
need H264 bitstream NALUs split into separate buffers, etc.

As I suggested some time ago, having the full bitstream in the buffer,
with offsets of particular units included in respective controls,
would be the most scalable thing. If really needed, we could add flags
telling the driver that particular units are present, so one's
implementation of libva could put only raw slice data in the buffers.
But perhaps it's libva which needs some amendment?

Best regards,
Tomasz

WARNING: multiple messages have this Message-ID (diff)
From: tfiga@chromium.org (Tomasz Figa)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 1/9] CHROMIUM: v4l: Add H264 low-level decoder API compound controls.
Date: Wed, 22 Aug 2018 18:54:23 +0900	[thread overview]
Message-ID: <CAAFQd5ANvKF2+GEXQTnRsdYVzJTtBOhv7nFahV=2W-9_QXwY4g@mail.gmail.com> (raw)
In-Reply-To: <20180822091557.gtnlgoebyv6yttzf@flea>

On Wed, Aug 22, 2018 at 6:16 PM Maxime Ripard <maxime.ripard@bootlin.com> wrote:
>
> Hi,
>
> On Tue, Aug 21, 2018 at 01:58:38PM -0300, Ezequiel Garcia wrote:
> > On Wed, 2018-06-13 at 16:07 +0200, Maxime Ripard wrote:
> > > From: Pawel Osciak <posciak@chromium.org>
> > >
> > > Signed-off-by: Pawel Osciak <posciak@chromium.org>
> > > Reviewed-by: Wu-cheng Li <wuchengli@chromium.org>
> > > Tested-by: Tomasz Figa <tfiga@chromium.org>
> > > [rebase44(groeck): include linux/types.h in v4l2-controls.h]
> > > Signed-off-by: Guenter Roeck <groeck@chromium.org>
> > > Signed-off-by: Maxime Ripard <maxime.ripard@bootlin.com>
> > > ---
> > >
> > [..]
> > > diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
> > > index 242a6bfa1440..4b4a1b25a0db 100644
> > > --- a/include/uapi/linux/videodev2.h
> > > +++ b/include/uapi/linux/videodev2.h
> > > @@ -626,6 +626,7 @@ struct v4l2_pix_format {
> > >  #define V4L2_PIX_FMT_H264     v4l2_fourcc('H', '2', '6', '4') /* H264 with start codes */
> > >  #define V4L2_PIX_FMT_H264_NO_SC v4l2_fourcc('A', 'V', 'C', '1') /* H264 without start codes */
> > >  #define V4L2_PIX_FMT_H264_MVC v4l2_fourcc('M', '2', '6', '4') /* H264 MVC */
> > > +#define V4L2_PIX_FMT_H264_SLICE v4l2_fourcc('S', '2', '6', '4') /* H264 parsed slices */
> >
> > As pointed out by Tomasz, the Rockchip VPU driver expects start codes [1], so the userspace
> > should be aware of it. Perhaps we could document this pixel format better as:
> >
> > #define V4L2_PIX_FMT_H264_SLICE v4l2_fourcc('S', '2', '6', '4') /* H264 parsed slices with start codes */
>
> I'm not sure this is something we want to do at that point. libva
> doesn't give the start code, so this is only going to make the life of
> the sane controllers more difficult. And if you need to have the start
> code and parse it, then you're not so stateless anymore.

I might not remember correctly, but Rockchip decoder does some slice
parsing on its own (despite not doing any higher level parsing).
Probably that's why it needs those start codes.

I wonder if libva is the best reference here. It's been designed
almost entirely by Intel for Intel video hardware. We want something
that could work with a wide range of devices and avoid something like
a need to create a semi-stateless API few months later. In fact,
hardware from another vendor, we're working with, also does parsing of
slice headers internally. Moreover, we have some weird
kind-of-stateful decoders, which cannot fully deal with bitstream on
its own, e.g. cannot parse formats, cannot handle resolution changes,
need H264 bitstream NALUs split into separate buffers, etc.

As I suggested some time ago, having the full bitstream in the buffer,
with offsets of particular units included in respective controls,
would be the most scalable thing. If really needed, we could add flags
telling the driver that particular units are present, so one's
implementation of libva could put only raw slice data in the buffers.
But perhaps it's libva which needs some amendment?

Best regards,
Tomasz

  reply	other threads:[~2018-08-22  9:55 UTC|newest]

Thread overview: 102+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-06-13 14:07 [PATCH 0/9] media: cedrus: Add H264 decoding support Maxime Ripard
2018-06-13 14:07 ` Maxime Ripard
2018-06-13 14:07 ` [PATCH 1/9] CHROMIUM: v4l: Add H264 low-level decoder API compound controls Maxime Ripard
2018-06-13 14:07   ` Maxime Ripard
2018-06-15 11:59   ` Hans Verkuil
2018-06-15 11:59     ` Hans Verkuil
2018-06-15 13:01     ` Guenter Roeck
2018-06-15 13:01       ` Guenter Roeck
2018-07-12 16:38     ` Maxime Ripard
2018-07-12 16:38       ` Maxime Ripard
2018-07-12 16:47       ` Andrew Lunn
2018-07-12 16:47         ` Andrew Lunn
2018-06-21  8:58   ` Paul Kocialkowski
2018-06-21  8:58     ` Paul Kocialkowski
2018-08-21 16:58   ` Ezequiel Garcia
2018-08-21 16:58     ` Ezequiel Garcia
2018-08-21 17:07     ` Nicolas Dufresne
2018-08-21 17:07       ` Nicolas Dufresne
2018-08-22 13:07       ` Paul Kocialkowski
2018-08-22 13:07         ` Paul Kocialkowski
2018-08-22 13:38         ` Tomasz Figa
2018-08-22 13:38           ` Tomasz Figa
2018-08-22 13:52           ` Nicolas Dufresne
2018-08-22 13:52             ` Nicolas Dufresne
2018-08-22 14:45           ` Paul Kocialkowski
2018-08-22 14:45             ` Paul Kocialkowski
2018-08-28  8:11             ` Tomasz Figa
2018-08-28  8:11               ` Tomasz Figa
2018-09-07  7:54               ` Tomasz Figa
2018-09-07  7:54                 ` Tomasz Figa
2018-08-22  9:15     ` Maxime Ripard
2018-08-22  9:15       ` Maxime Ripard
2018-08-22  9:54       ` Tomasz Figa [this message]
2018-08-22  9:54         ` Tomasz Figa
2018-08-22 13:03         ` Paul Kocialkowski
2018-08-22 13:03           ` Paul Kocialkowski
2018-08-22 13:24           ` Tomasz Figa
2018-08-22 13:24             ` Tomasz Figa
2018-08-22 14:03             ` Nicolas Dufresne
2018-08-22 14:03               ` Nicolas Dufresne
2018-08-22 14:30             ` Paul Kocialkowski
2018-08-22 14:30               ` Paul Kocialkowski
2018-06-13 14:07 ` [PATCH 2/9] media: cedrus: Add wrappers around container_of for our buffers Maxime Ripard
2018-06-13 14:07   ` Maxime Ripard
2018-06-21  9:03   ` Paul Kocialkowski
2018-06-21  9:03     ` Paul Kocialkowski
2018-06-13 14:07 ` [PATCH 3/9] media: cedrus: Add a macro to check for the validity of a control Maxime Ripard
2018-06-13 14:07   ` Maxime Ripard
2018-06-21  9:13   ` Paul Kocialkowski
2018-06-21  9:13     ` Paul Kocialkowski
2018-06-13 14:07 ` [PATCH 4/9] media: cedrus: make engine type more generic Maxime Ripard
2018-06-13 14:07   ` Maxime Ripard
2018-06-21  9:33   ` Paul Kocialkowski
2018-06-21  9:33     ` Paul Kocialkowski
2018-06-13 14:07 ` [PATCH 5/9] media: cedrus: Remove MPEG1 support Maxime Ripard
2018-06-13 14:07   ` Maxime Ripard
2018-06-13 14:07 ` [PATCH 6/9] media: cedrus: Add ops structure Maxime Ripard
2018-06-13 14:07   ` Maxime Ripard
2018-06-21  9:49   ` Paul Kocialkowski
2018-06-21  9:49     ` Paul Kocialkowski
2018-06-25 13:29     ` Maxime Ripard
2018-06-25 13:29       ` Maxime Ripard
2018-06-25 13:48       ` Paul Kocialkowski
2018-06-25 13:48         ` Paul Kocialkowski
2018-06-13 14:07 ` [PATCH 7/9] media: cedrus: Move IRQ maintainance to cedrus_dec_ops Maxime Ripard
2018-06-13 14:07   ` Maxime Ripard
2018-06-21 15:35   ` Paul Kocialkowski
2018-06-21 15:35     ` Paul Kocialkowski
2018-06-25 14:18     ` Paul Kocialkowski
2018-06-25 14:18       ` Paul Kocialkowski
2018-06-25 16:15       ` Maxime Ripard
2018-06-25 16:15         ` Maxime Ripard
2018-06-25 15:38   ` Paul Kocialkowski
2018-06-25 15:38     ` Paul Kocialkowski
2018-06-25 15:49     ` Paul Kocialkowski
2018-06-25 15:49       ` Paul Kocialkowski
2018-06-25 19:01       ` Maxime Ripard
2018-06-25 19:01         ` Maxime Ripard
2018-06-27 17:58       ` Maxime Ripard
2018-06-27 17:58         ` Maxime Ripard
2018-06-13 14:07 ` [PATCH 8/9] media: cedrus: Add start and stop decoder operations Maxime Ripard
2018-06-13 14:07   ` Maxime Ripard
2018-06-21 15:38   ` Paul Kocialkowski
2018-06-21 15:38     ` Paul Kocialkowski
2018-06-25 13:32     ` Maxime Ripard
2018-06-25 13:32       ` Maxime Ripard
2018-06-25 13:42       ` Paul Kocialkowski
2018-06-25 13:42         ` Paul Kocialkowski
2018-06-13 14:07 ` [PATCH 9/9] media: cedrus: Add H264 decoding support Maxime Ripard
2018-06-13 14:07   ` Maxime Ripard
2018-07-27 13:56   ` Paul Kocialkowski
2018-07-27 13:56     ` Paul Kocialkowski
2018-07-27 14:01     ` Chen-Yu Tsai
2018-07-27 14:01       ` Chen-Yu Tsai
2018-07-27 14:03       ` Paul Kocialkowski
2018-07-27 14:03         ` Paul Kocialkowski
2018-07-30 12:54   ` Paul Kocialkowski
2018-07-30 12:54     ` Paul Kocialkowski
2018-06-14 13:00 ` [PATCH 0/9] " Tomasz Figa
2018-06-14 13:00   ` Tomasz Figa
2018-06-14 16:37   ` Maxime Ripard
2018-06-14 16:37     ` Maxime Ripard

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='CAAFQd5ANvKF2+GEXQTnRsdYVzJTtBOhv7nFahV=2W-9_QXwY4g@mail.gmail.com' \
    --to=tfiga@chromium.org \
    --cc=acourbot@chromium.org \
    --cc=ezequiel@collabora.com \
    --cc=groeck@chromium.org \
    --cc=hans.verkuil@cisco.com \
    --cc=jenskuske@gmail.com \
    --cc=laurent.pinchart@ideasonboard.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-media@vger.kernel.org \
    --cc=linux-sunxi@googlegroups.com \
    --cc=maxime.ripard@bootlin.com \
    --cc=nicolas.dufresne@collabora.com \
    --cc=paul.kocialkowski@bootlin.com \
    --cc=posciak@chromium.org \
    --cc=sakari.ailus@linux.intel.com \
    --cc=thomas.petazzoni@bootlin.com \
    --cc=wens@csie.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.