Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f2011e40 authored by Lucas Stach's avatar Lucas Stach Committed by Mauro Carvalho Chehab
Browse files

[media] coda: use correct offset for mvcol buffer



The mvcol buffer needs to be placed behind the chroma plane(s), so
use the real offset including any required rounding.

Signed-off-by: default avatarLucas Stach <l.stach@pengutronix.de>
Reviewed-by: default avatarPhilipp Zabel <p.zabel@pengutronix.de>
Signed-off-by: default avatarHans Verkuil <hansverk@cisco.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@s-opensource.com>
parent 50058a9a
Loading
Loading
Loading
Loading
+4 −4
Original line number Original line Diff line number Diff line
@@ -427,14 +427,16 @@ static int coda_alloc_framebuffers(struct coda_ctx *ctx,


	/* Register frame buffers in the parameter buffer */
	/* Register frame buffers in the parameter buffer */
	for (i = 0; i < ctx->num_internal_frames; i++) {
	for (i = 0; i < ctx->num_internal_frames; i++) {
		u32 y, cb, cr;
		u32 y, cb, cr, mvcol;


		/* Start addresses of Y, Cb, Cr planes */
		/* Start addresses of Y, Cb, Cr planes */
		y = ctx->internal_frames[i].paddr;
		y = ctx->internal_frames[i].paddr;
		cb = y + ysize;
		cb = y + ysize;
		cr = y + ysize + ysize/4;
		cr = y + ysize + ysize/4;
		mvcol = y + ysize + ysize/4 + ysize/4;
		if (ctx->tiled_map_type == GDI_TILED_FRAME_MB_RASTER_MAP) {
		if (ctx->tiled_map_type == GDI_TILED_FRAME_MB_RASTER_MAP) {
			cb = round_up(cb, 4096);
			cb = round_up(cb, 4096);
			mvcol = cb + ysize/2;
			cr = 0;
			cr = 0;
			/* Packed 20-bit MSB of base addresses */
			/* Packed 20-bit MSB of base addresses */
			/* YYYYYCCC, CCyyyyyc, cccc.... */
			/* YYYYYCCC, CCyyyyyc, cccc.... */
@@ -448,9 +450,7 @@ static int coda_alloc_framebuffers(struct coda_ctx *ctx,
		/* mvcol buffer for h.264 */
		/* mvcol buffer for h.264 */
		if (ctx->codec->src_fourcc == V4L2_PIX_FMT_H264 &&
		if (ctx->codec->src_fourcc == V4L2_PIX_FMT_H264 &&
		    dev->devtype->product != CODA_DX6)
		    dev->devtype->product != CODA_DX6)
			coda_parabuf_write(ctx, 96 + i,
			coda_parabuf_write(ctx, 96 + i, mvcol);
					   ctx->internal_frames[i].paddr +
					   ysize + ysize/4 + ysize/4);
	}
	}


	/* mvcol buffer for mpeg4 */
	/* mvcol buffer for mpeg4 */