Hi Ming Qian, On 22/03/2022 09:28, Ming Qian wrote: > the output buffer count should >= min_buffer_out > the capture buffer count should >= min_buffer_cap > > Signed-off-by: Ming Qian <ming.qian@xxxxxxx> > --- > drivers/media/platform/amphion/vpu_v4l2.c | 4 ++++ > 1 file changed, 4 insertions(+) > > diff --git a/drivers/media/platform/amphion/vpu_v4l2.c b/drivers/media/platform/amphion/vpu_v4l2.c > index cbf3315605a9..72a0544f4da3 100644 > --- a/drivers/media/platform/amphion/vpu_v4l2.c > +++ b/drivers/media/platform/amphion/vpu_v4l2.c > @@ -355,6 +355,10 @@ static int vpu_vb2_queue_setup(struct vb2_queue *vq, > return 0; > } > > + if (V4L2_TYPE_IS_OUTPUT(vq->type)) > + *buf_count = max_t(unsigned int, *buf_count, inst->min_buffer_out); > + else > + *buf_count = max_t(unsigned int, *buf_count, inst->min_buffer_cap); I noticed that min_buffer_out/cap is set to 2, but min_buffers_needed is set to 1. Wouldn't it make more sense to set min_buffers_needed to 2 as well? If you do that, then the vb2 core will already take care of ensuring that the buf_count is adjusted. If you *do* have to do this manually, then you need to place the whole if-else under 'if (!*num_planes) {', otherwise it will mess up the VIDIOC_CREATE_BUFS ioctl. See the queue_setup in include/media/videobuf2-core.h documentation for the sordid details. Regards, Hans > *plane_count = cur_fmt->num_planes; > for (i = 0; i < cur_fmt->num_planes; i++) > psize[i] = cur_fmt->sizeimage[i];