linux-media.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Nicolas Dufresne <nicolas@ndufresne.ca>
To: Hans Verkuil <hverkuil@xs4all.nl>,
	Michael Tretter <m.tretter@pengutronix.de>,
	linux-media@vger.kernel.org, devicetree@vger.kernel.org
Cc: kernel@pengutronix.de, robh+dt@kernel.org, mchehab@kernel.org,
	tfiga@chromium.org
Subject: Re: [PATCH v2 2/3] [media] allegro: add Allegro DVT video IP core driver
Date: Wed, 30 Jan 2019 10:19:53 -0500	[thread overview]
Message-ID: <e89b69476c92d162a8a00a789163858309d8defe.camel@ndufresne.ca> (raw)
In-Reply-To: <f983efdb-4ac1-d2e2-4be3-421d337f94ef@xs4all.nl>

Le mercredi 30 janvier 2019 à 08:47 +0100, Hans Verkuil a écrit :
> On 1/30/19 4:41 AM, Nicolas Dufresne wrote:
> > Hi Hans,
> > 
> > Le mercredi 23 janvier 2019 à 11:44 +0100, Hans Verkuil a écrit :
> > > > +     if (*nplanes != 0) {
> > > > +             if (vq->type == V4L2_BUF_TYPE_VIDEO_CAPTURE) {
> > > > +                     if (*nplanes != 1 ||
> > > > +                         sizes[0] < channel->sizeimage_encoded)
> > > > +                             return -EINVAL;
> > > 
> > > Question relating to calculating sizeimage_encoded: is that guaranteed to be
> > > the largest buffer size that is needed to compress a frame? What if it is
> > > not large enough after all? Does the encoder protect against that?
> > > 
> > > I have a patch pending that allows an encoder to spread the compressed
> > > output over multiple buffers:
> > > 
> > > https://patchwork.linuxtv.org/patch/53536/
> > > 
> > > I wonder if this encoder would be able to use it.
> > 
> > Userspace around most existing codecs expect well framed capture buffer
> > from the encoder. Spreading out the buffer will just break this
> > expectation.
> > 
> > This is specially needed for VP8/VP9 as these format are not meant to
> > be streamed that way.
> 
> Good to know, thank you.
> 
> > I believe a proper solution to that would be to hang the decoding
> > process and send an event (similar to resolution changes) to tell user
> > space that capture buffers need to be re-allocated.
> 
> That's indeed an alternative. I wait for further feedback from Tomasz
> on this.
> 
> I do want to add that allowing it to be spread over multiple buffers
> also means more optimal use of memory. I.e. the buffers for the compressed
> data no longer need to be sized for the worst-case size.

My main concern is that it's no longer optimal for transcoding cases.
To illustrate, an H264 decoders still have the restriction that they
need compleat NALs for each memory pointer (if not an complete AU). The
reason is that writing a parser that can handle a bitstream across two
unaligned (in CPU term and in NAL term) is difficult and inefficient.
So most decoder would need to duplicate the allocation, in order to
copy these input buffer to properly sized buffer. Note that for
hardware like CODA, I believe this copy is always there, since the
hardware uses a ring buffer. With high bitrate stream, the overhead is
important. It also breaks the usage of hardware synchronization IP,
which is a key feature on the ZynqMP.

As Micheal said, the vendor driver here predict the allocation size
base on width/height/profile/level and chroma being used (that's
encoded in the pixel format). The chroma was added later for the case
we have a level that supports both 8 and 10bits, which when used in
8bits mode would lead to over-allocation of memory and VCU resources.
But the vendor kernel goes a little beyond the spec by introducing more
named profiles then define in the spec, so that they can further
control the allocation (specially the VCU core allocation, otherwise
you don't get to run as many instances in parallel).

> 
> Regards,
> 
> 	Hans


  reply	other threads:[~2019-01-30 15:19 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-01-18 13:37 [PATCH v2 0/3] Add ZynqMP VCU/Allegro DVT H.264 encoder driver Michael Tretter
2019-01-18 13:37 ` [PATCH v2 1/3] media: dt-bindings: media: document allegro-dvt bindings Michael Tretter
2019-01-21 10:59   ` Philipp Zabel
2019-01-21 16:17     ` Nicolas Dufresne
2019-01-21 16:30       ` Philipp Zabel
2019-01-21 17:42       ` Michael Tretter
2019-01-21 17:13   ` Rob Herring
2019-01-22 13:38     ` Michael Tretter
2019-01-18 13:37 ` [PATCH v2 2/3] [media] allegro: add Allegro DVT video IP core driver Michael Tretter
2019-01-23 10:44   ` Hans Verkuil
2019-01-23 14:17     ` Michael Tretter
2019-01-30  3:46       ` Nicolas Dufresne
2019-01-30  3:54         ` Tomasz Figa
2019-01-30  9:22         ` Michael Tretter
2019-01-30  3:41     ` Nicolas Dufresne
2019-01-30  7:47       ` Hans Verkuil
2019-01-30 15:19         ` Nicolas Dufresne [this message]
2019-01-30 16:14           ` Michael Tretter
2019-01-18 13:37 ` [PATCH v2 3/3] [media] allegro: add SPS/PPS nal unit writer Michael Tretter
2019-01-18 14:11 ` [PATCH v2 0/3] Add ZynqMP VCU/Allegro DVT H.264 encoder driver Hans Verkuil
2019-01-21 10:42   ` Michael Tretter
2019-01-23 10:48     ` Hans Verkuil

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=e89b69476c92d162a8a00a789163858309d8defe.camel@ndufresne.ca \
    --to=nicolas@ndufresne.ca \
    --cc=devicetree@vger.kernel.org \
    --cc=hverkuil@xs4all.nl \
    --cc=kernel@pengutronix.de \
    --cc=linux-media@vger.kernel.org \
    --cc=m.tretter@pengutronix.de \
    --cc=mchehab@kernel.org \
    --cc=robh+dt@kernel.org \
    --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).