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]; > >