Re: [PATCH 2/2] hantro: postproc: Fix motion vector space allocation

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

 



On Sun, 26 Jul 2020 at 04:42, Jonas Karlman <jonas@xxxxxxxxx> wrote:
>
> On 2020-07-25 17:52, Ezequiel Garcia wrote:
> > When the post-processor is enabled, the driver allocates
> > "shadow buffers" which are used for the decoder core,
> > and exposes the post-processed buffers to userspace.
> >
> > For this reason, extra motion vector space has to
> > be allocated on the shadow buffers, which the driver
> > wasn't doing. Fix this.
> >
> > This fix removes artifacts on high profile bitstreams,
> > found on certain platforms.
> >
> > While here, fix the MV layout comment, since the multicore
> > (MC) word is found before the MV buffer.
>
> If this is the case then the mv offset currently used is probably
> wrong for multicore hantro blocks.
>

Oh, yes, my bad.

> The imx-vpu-hantro reference code mentions the following for H.264,
>
>   allocate 32 bytes for multicore status fields
>   locate it after picture and direct MV
>
> and for VP8 it locate it directly after picture.
>
> The Rockchip hantro devices I have is not multicore (to my knowledge),
> is the iMX8M hantro a multicore block?
>

Newer cores (newer than G1 and G2) specify the MC status before the
MV buffer, and I was too quick to assume it was the case also for G1.

I'll get a v2.

Thanks for the catch,
Ezequiel

> Best regards,
> Jonas
>
> >
> > Fixes: 8c2d66b036c77 ("media: hantro: Support color conversion via post-processing")
> > Signed-off-by: Ezequiel Garcia <ezequiel@xxxxxxxxxxxxx>
> > ---
> >  drivers/staging/media/hantro/hantro_hw.h       | 4 ++--
> >  drivers/staging/media/hantro/hantro_postproc.c | 4 +++-
> >  2 files changed, 5 insertions(+), 3 deletions(-)
> >
> > diff --git a/drivers/staging/media/hantro/hantro_hw.h b/drivers/staging/media/hantro/hantro_hw.h
> > index f066de6b592d..989564485ca1 100644
> > --- a/drivers/staging/media/hantro/hantro_hw.h
> > +++ b/drivers/staging/media/hantro/hantro_hw.h
> > @@ -200,10 +200,10 @@ hantro_h264_mv_size(unsigned int width, unsigned int height)
> >        * +---------------------------+
> >        * | UV-plane  128 bytes x MBs |
> >        * +---------------------------+
> > -      * | MV buffer  64 bytes x MBs |
> > -      * +---------------------------+
> >        * | MC sync          32 bytes |
> >        * +---------------------------+
> > +      * | MV buffer  64 bytes x MBs |
> > +      * +---------------------------+
> >        */
> >       return 64 * MB_WIDTH(width) * MB_WIDTH(height) + 32;
> >  }
> > diff --git a/drivers/staging/media/hantro/hantro_postproc.c b/drivers/staging/media/hantro/hantro_postproc.c
> > index 44062ffceaea..6d2a8f2a8f0b 100644
> > --- a/drivers/staging/media/hantro/hantro_postproc.c
> > +++ b/drivers/staging/media/hantro/hantro_postproc.c
> > @@ -118,7 +118,9 @@ int hantro_postproc_alloc(struct hantro_ctx *ctx)
> >       unsigned int num_buffers = cap_queue->num_buffers;
> >       unsigned int i, buf_size;
> >
> > -     buf_size = ctx->dst_fmt.plane_fmt[0].sizeimage;
> > +     buf_size = ctx->dst_fmt.plane_fmt[0].sizeimage +
> > +                hantro_h264_mv_size(ctx->dst_fmt.width,
> > +                                    ctx->dst_fmt.height);
> >
> >       for (i = 0; i < num_buffers; ++i) {
> >               struct hantro_aux_buf *priv = &ctx->postproc.dec_q[i];
> >



[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