Re: Single- vs Multi-planar APIs for mem2mem devices

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Jul 11, 2019 at 8:19 PM Paul Kocialkowski
<paul.kocialkowski@xxxxxxxxxxx> wrote:
>
> On Thu 11 Jul 19, 19:51, wens Tsai wrote:
> > On Thu, Jul 11, 2019 at 5:39 PM Paul Kocialkowski
> > <paul.kocialkowski@xxxxxxxxxxx> wrote:
> > >
> > > Hi,
> > >
> > > On Thu 11 Jul 19, 17:21, wens Tsai wrote:
> > > > I noticed that recent codec driver additions, such as hantro, meson/vdec,
> > > > mtk, used the multi-planar API (mplane) instead of the single-planar API.
> > > >
> > > > Is there a preference for moving towards mplane?
> > >
> > > Well, there is strict technical requirement for using the single-planar API
> > > instead of the multi-planar one in cedrus.
> > >
> > > Historically, we started with mplane because we can definitely pass
> > > different addresses for luma and chroma to our decoder. However, we found
> > > out that there are some internal limitations of the decoder block and the
> > > addresses cannot be "too far apart". This means that if we allocate luma
> > > at the begging of our pool and chroma at the end, the gap was too big
> > > and the resulting decoded frame was not stored at the right address.
> > >
> > > We found out about this purely by accident, where one particular sequence of
> > > events lead to such a gap and showed the issue. One possible explanation
> > > would be that the decoder uses an offset from the luma address for chroma
> > > internally, on a limited number of bits.
> > >
> > > So unfortunately, this means we're stuck with having our multi-planar
> > > (in the YUV sense) buffers allocated in a single chunk (the single-plane
> > > V4L2 API). I don't have any better answer than "userspace should cope with both
> > > APIs as it reflects a hardware constraint", which is indeed what ffmpeg is
> > > already doing.
> >
> > If I understand the API correctly, using the multi-planar API doesn't mean
> > you have to actually support multi-planar formats such as NVxyM and YUVxyzM.
> > AFAICT these are the only two families that have non contiguous planes.
>
> That is indeed quite right and maybe switching away from mplane was unnecessary.
> In practice, we can only use single-planar (non-M formats) but we could totally
> support the mplane semantics for these formats as well.
>
> What I was thinking probably boiled down to the idea that without mplane
> supported, userspace wouldn't be able to allocate multiple planes and then
> try to use them with a single-planar format. I think this is what I had
> implemented before and something that "worked" although being totally wrong
> regarding the API. It looks like the core doesn't check that single-planar
> formats are only given one plane by userspace and, as long as the driver goes
> with it, it can still operate like this. Could be nice to have this kind of
> checking around.
>
> So in the end, it looks like we can safely bring back mplane support :)

This brings me to another question: is there anything (policy or technical)
preventing us from supporting both APIs? I haven't seen any drivers do this,
and with the compatibility plugin in libv4l2, I suppose it isn't necessary.

ChenYu

> > So for all the other existing formats, the buffers will still be contiguous,
> > which means cedrus can actually support the multi-planar API, right?
>
> Thinking twice about it, I think you're right yes.
>
> Cheers,
>
> Paul
>
> > ChenYu
> >
> > > Cheers,
> > >
> > > Paul
> > >
> > > > Also I noticed that v4l-utils has a plugin that seamlessly adapts mplane
> > > > devices to work with single-planar API calls, but there isn't one the
> > > > other way around. Would that be something worthwhile working on? To me
> > > > it seems having one central adapter is better than having applications
> > > > try to use both APIs, though some such as FFmpeg already do so.
> > > >
> > > > My interest in this is trying to get Chromium's v4l2 video decode
> > > > accelerator to work on the Raspberry Pi 3 with their downstream kernel,
> > > > which has the bcm2835-v4l2 driver. It would also benefit other platforms
> > > > that have a stateful VPU, such as Amlogic (meson) or Mediatek SoCs.
> > > > Chromium's code uses MPLANE exclusively, and it's geared towards ChromeOS,
> > > > not standard Linux, but still it might be interesting to get it to work.
> > > >
> > > > There's also the v4l2 slice video decode accelerator which uses the
> > > > request API which has the same issue, but lets not get ahead of ourselves.
> > > >
> > > > Regards
> > > > ChenYu
> > >
> > > --
> > > Paul Kocialkowski, Bootlin
> > > Embedded Linux and kernel engineering
> > > https://bootlin.com
>
> --
> Paul Kocialkowski, Bootlin
> Embedded Linux and kernel engineering
> https://bootlin.com



[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux