]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
media: vim2m: add buf_out_validate callback
authorHans Verkuil <hverkuil-cisco@xs4all.nl>
Wed, 16 Jan 2019 12:01:14 +0000 (10:01 -0200)
committerMauro Carvalho Chehab <mchehab+samsung@kernel.org>
Thu, 31 Jan 2019 11:30:15 +0000 (09:30 -0200)
Validate the field for an output buffer. This ensures that the
field is validated when the buffer is queued to a request, and
not when the request itself is queued, which is too late.

Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
drivers/media/platform/vim2m.c

index a7a152fb30757bdeae71b1e6a4f67c00c38b1b70..924120d69da2d5e251c82e678b63442820c450ab 100644 (file)
@@ -743,25 +743,29 @@ static int vim2m_queue_setup(struct vb2_queue *vq,
        return 0;
 }
 
-static int vim2m_buf_prepare(struct vb2_buffer *vb)
+static int vim2m_buf_out_validate(struct vb2_buffer *vb)
 {
        struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
        struct vim2m_ctx *ctx = vb2_get_drv_priv(vb->vb2_queue);
+
+       if (vbuf->field == V4L2_FIELD_ANY)
+               vbuf->field = V4L2_FIELD_NONE;
+       if (vbuf->field != V4L2_FIELD_NONE) {
+               dprintk(ctx->dev, "%s field isn't supported\n", __func__);
+               return -EINVAL;
+       }
+
+       return 0;
+}
+
+static int vim2m_buf_prepare(struct vb2_buffer *vb)
+{
+       struct vim2m_ctx *ctx = vb2_get_drv_priv(vb->vb2_queue);
        struct vim2m_q_data *q_data;
 
        dprintk(ctx->dev, "type: %d\n", vb->vb2_queue->type);
 
        q_data = get_q_data(ctx, vb->vb2_queue->type);
-       if (V4L2_TYPE_IS_OUTPUT(vb->vb2_queue->type)) {
-               if (vbuf->field == V4L2_FIELD_ANY)
-                       vbuf->field = V4L2_FIELD_NONE;
-               if (vbuf->field != V4L2_FIELD_NONE) {
-                       dprintk(ctx->dev, "%s field isn't supported\n",
-                                       __func__);
-                       return -EINVAL;
-               }
-       }
-
        if (vb2_plane_size(vb, 0) < q_data->sizeimage) {
                dprintk(ctx->dev, "%s data will not fit into plane (%lu < %lu)\n",
                                __func__, vb2_plane_size(vb, 0), (long)q_data->sizeimage);
@@ -822,6 +826,7 @@ static void vim2m_buf_request_complete(struct vb2_buffer *vb)
 
 static const struct vb2_ops vim2m_qops = {
        .queue_setup     = vim2m_queue_setup,
+       .buf_out_validate        = vim2m_buf_out_validate,
        .buf_prepare     = vim2m_buf_prepare,
        .buf_queue       = vim2m_buf_queue,
        .start_streaming = vim2m_start_streaming,