After a resolution change is detected, q_data->sizeimage is updated
to the new format, but buf_prepare is still draining buffers that
need to use the old pre-resolution-change value. So store the sizeimage
value in q_data->vb2_sizeimage in queue_setup and use that in
buf_prepare.

Signed-off-by: Hans Verkuil <hverkuil-ci...@xs4all.nl>
---
 drivers/media/platform/vicodec/vicodec-core.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/media/platform/vicodec/vicodec-core.c 
b/drivers/media/platform/vicodec/vicodec-core.c
index 4b0062ac880c..ce7f7bf1b998 100644
--- a/drivers/media/platform/vicodec/vicodec-core.c
+++ b/drivers/media/platform/vicodec/vicodec-core.c
@@ -84,6 +84,7 @@ struct vicodec_q_data {
        unsigned int            visible_width;
        unsigned int            visible_height;
        unsigned int            sizeimage;
+       unsigned int            vb2_sizeimage;
        unsigned int            sequence;
        const struct v4l2_fwht_pixfmt_info *info;
 };
@@ -1361,6 +1362,7 @@ static int vicodec_queue_setup(struct vb2_queue *vq, 
unsigned int *nbuffers,
 
        *nplanes = 1;
        sizes[0] = size;
+       q_data->vb2_sizeimage = size;
        return 0;
 }
 
@@ -1391,11 +1393,11 @@ static int vicodec_buf_prepare(struct vb2_buffer *vb)
                }
        }
 
-       if (vb2_plane_size(vb, 0) < q_data->sizeimage) {
+       if (vb2_plane_size(vb, 0) < q_data->vb2_sizeimage) {
                dprintk(ctx->dev,
                        "%s data will not fit into plane (%lu < %lu)\n",
                        __func__, vb2_plane_size(vb, 0),
-                       (long)q_data->sizeimage);
+                       (long)q_data->vb2_sizeimage);
                return -EINVAL;
        }
 
-- 
2.20.1

Reply via email to