From 57180ce6f2ad4a4f9838870c33252f4d0b170b78 Mon Sep 17 00:00:00 2001 From: Govindaraj Rajagopal Date: Fri, 7 May 2021 21:34:42 +0530 Subject: [PATCH] video: driver: update proper state in vb2_buffer_done V4l2 clears buffer state related flags. So for driver errors send state as error to avoid skipping V4L2_BUF_FLAG_ERROR flag at v4l2 side. Change-Id: Ifcb96d390746a71e8dbcf261f718439ef9ecfc91 Signed-off-by: Govindaraj Rajagopal --- driver/vidc/src/msm_vidc_driver.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/driver/vidc/src/msm_vidc_driver.c b/driver/vidc/src/msm_vidc_driver.c index 0f020209a3..eac402e375 100644 --- a/driver/vidc/src/msm_vidc_driver.c +++ b/driver/vidc/src/msm_vidc_driver.c @@ -3058,7 +3058,7 @@ int msm_vidc_release_internal_buffers(struct msm_vidc_inst *inst, int msm_vidc_vb2_buffer_done(struct msm_vidc_inst *inst, struct msm_vidc_buffer *buf) { - int type, port; + int type, port, state; struct vb2_queue *q; struct vb2_buffer *vb2; struct vb2_v4l2_buffer *vbuf; @@ -3095,11 +3095,21 @@ int msm_vidc_vb2_buffer_done(struct msm_vidc_inst *inst, print_vidc_buffer(VIDC_ERR, "err ", "vb2 not found for", inst, buf); return -EINVAL; } + /** + * v4l2 clears buffer state related flags. For driver errors + * send state as error to avoid skipping V4L2_BUF_FLAG_ERROR + * flag at v4l2 side. + */ + if (buf->flags & MSM_VIDC_BUF_FLAG_ERROR) + state = VB2_BUF_STATE_ERROR; + else + state = VB2_BUF_STATE_DONE; + vbuf = to_vb2_v4l2_buffer(vb2); vbuf->flags = buf->flags; vb2->timestamp = buf->timestamp; vb2->planes[0].bytesused = buf->data_size + vb2->planes[0].data_offset; - vb2_buffer_done(vb2, VB2_BUF_STATE_DONE); + vb2_buffer_done(vb2, state); return 0; }