From e112146f3b19e47193ca78c117b86ba0c760ebe4 Mon Sep 17 00:00:00 2001 From: Lucas Stach Date: Thu, 7 Dec 2017 06:09:46 -0500 Subject: media: coda: set min_buffers_needed The current driver implementation expects at least one buffer on all queues to start streaming. Properly signal this to the vb2 core, to avoid confusion when streamon is racing with qbuf. Signed-off-by: Lucas Stach Signed-off-by: Philipp Zabel Signed-off-by: Hans Verkuil Signed-off-by: Mauro Carvalho Chehab --- drivers/media/platform/coda/coda-common.c | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'drivers/media/platform/coda/coda-common.c') diff --git a/drivers/media/platform/coda/coda-common.c b/drivers/media/platform/coda/coda-common.c index 15eb5dc4dff9..46a628a548d9 100644 --- a/drivers/media/platform/coda/coda-common.c +++ b/drivers/media/platform/coda/coda-common.c @@ -1884,6 +1884,12 @@ static int coda_queue_init(struct coda_ctx *ctx, struct vb2_queue *vq) * that videobuf2 will keep the value of bytesused intact. */ vq->allow_zero_bytesused = 1; + /* + * We might be fine with no buffers on some of the queues, but that + * would need to be reflected in job_ready(). Currently we expect all + * queues to have at least one buffer queued. + */ + vq->min_buffers_needed = 1; vq->dev = &ctx->dev->plat_dev->dev; return vb2_queue_init(vq); -- cgit v1.2.3 From 1403bc4c0f00189812cee86f91d469f8dfbe0ac0 Mon Sep 17 00:00:00 2001 From: Philipp Zabel Date: Thu, 7 Dec 2017 06:11:11 -0500 Subject: media: coda: fix capture TRY_FMT for YUYV with non-MB-aligned widths Since bytesperline always fulfills VDOA width requirements, detile the whole buffer instead of limiting to visible width. This stops TRY_FMT from returning -EINVAL for YUYV capture buffers that are not a multiple of 16 wide. An alternative would be to always round up width to stride, as we report the valid image rectange via G_SELECTION (V4L2_SEL_TGT_COMPOSE_DEFAULT), but that would require all applications to handle the compose default rectangle properly. Signed-off-by: Philipp Zabel Signed-off-by: Hans Verkuil Signed-off-by: Mauro Carvalho Chehab --- drivers/media/platform/coda/coda-common.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'drivers/media/platform/coda/coda-common.c') diff --git a/drivers/media/platform/coda/coda-common.c b/drivers/media/platform/coda/coda-common.c index 46a628a548d9..e8a7554a61d2 100644 --- a/drivers/media/platform/coda/coda-common.c +++ b/drivers/media/platform/coda/coda-common.c @@ -486,8 +486,8 @@ static int coda_try_fmt_vdoa(struct coda_ctx *ctx, struct v4l2_format *f, return 0; } - err = vdoa_context_configure(NULL, f->fmt.pix.width, f->fmt.pix.height, - f->fmt.pix.pixelformat); + err = vdoa_context_configure(NULL, round_up(f->fmt.pix.width, 16), + f->fmt.pix.height, f->fmt.pix.pixelformat); if (err) { *use_vdoa = false; return 0; @@ -730,7 +730,8 @@ static int coda_s_fmt(struct coda_ctx *ctx, struct v4l2_format *f, if (ctx->tiled_map_type == GDI_TILED_FRAME_MB_RASTER_MAP && !coda_try_fmt_vdoa(ctx, f, &ctx->use_vdoa) && ctx->use_vdoa) - vdoa_context_configure(ctx->vdoa, f->fmt.pix.width, + vdoa_context_configure(ctx->vdoa, + round_up(f->fmt.pix.width, 16), f->fmt.pix.height, f->fmt.pix.pixelformat); else -- cgit v1.2.3