From e34db0661dc7945e5412a568f38dd170c78099d1 Mon Sep 17 00:00:00 2001 From: Philipp Zabel Date: Wed, 29 Aug 2012 08:22:00 -0300 Subject: [PATCH] [media] media: coda: set up buffers to be sized as negotiated with s_fmt This fixes a failure in vb2_qbuf in user pointer mode where __qbuf_userptr checks if the buffer queued by userspace is large enough. The failure would happen if coda_queue_setup was called with empty fmt (and thus set the expected buffer size to the maximum resolution), and userspace queues buffers of smaller size - corresponding to the negotiated dimensions - were queued. Explicitly setting sizeimage to the value negotiated via s_fmt fixes the issue. Signed-off-by: Philipp Zabel Acked-by: Javier Martin Signed-off-by: Mauro Carvalho Chehab --- drivers/media/platform/coda.c | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/drivers/media/platform/coda.c b/drivers/media/platform/coda.c index bf8cb0a..cd04ae2 100644 --- a/drivers/media/platform/coda.c +++ b/drivers/media/platform/coda.c @@ -818,18 +818,11 @@ static int coda_queue_setup(struct vb2_queue *vq, unsigned int sizes[], void *alloc_ctxs[]) { struct coda_ctx *ctx = vb2_get_drv_priv(vq); + struct coda_q_data *q_data; unsigned int size; - if (vq->type == V4L2_BUF_TYPE_VIDEO_OUTPUT) { - if (fmt) - size = fmt->fmt.pix.width * - fmt->fmt.pix.height * 3 / 2; - else - size = MAX_W * - MAX_H * 3 / 2; - } else { - size = CODA_MAX_FRAME_SIZE; - } + q_data = get_q_data(ctx, vq->type); + size = q_data->sizeimage; *nplanes = 1; sizes[0] = size; -- 2.7.4