media: vb2: drop VB2_BUF_STATE_PREPARED, use bool prepared/synced instead
The PREPARED state becomes a problem with the request API: a buffer could be PREPARED but dequeued, or PREPARED and in state IN_REQUEST. PREPARED is really not a state as such, but more a property of the buffer. So make new 'prepared' and 'synced' bools instead to remember whether the buffer is prepared and/or synced or not. V4L2_BUF_FLAG_PREPARED is only set if the buffer is both synced and prepared and in the DEQUEUED state. Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com> Reviewed-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org> Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
这个提交包含在:
@@ -352,9 +352,13 @@ static int vb2_queue_or_prepare_buf(struct vb2_queue *q, struct v4l2_buffer *b,
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
/* Copy relevant information provided by the userspace */
|
||||
memset(vbuf->planes, 0, sizeof(vbuf->planes[0]) * vb->num_planes);
|
||||
return vb2_fill_vb2_v4l2_buffer(vb, b);
|
||||
if (!vb->prepared) {
|
||||
/* Copy relevant information provided by the userspace */
|
||||
memset(vbuf->planes, 0,
|
||||
sizeof(vbuf->planes[0]) * vb->num_planes);
|
||||
ret = vb2_fill_vb2_v4l2_buffer(vb, b);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -443,9 +447,6 @@ static void __fill_v4l2_buffer(struct vb2_buffer *vb, void *pb)
|
||||
case VB2_BUF_STATE_DONE:
|
||||
b->flags |= V4L2_BUF_FLAG_DONE;
|
||||
break;
|
||||
case VB2_BUF_STATE_PREPARED:
|
||||
b->flags |= V4L2_BUF_FLAG_PREPARED;
|
||||
break;
|
||||
case VB2_BUF_STATE_PREPARING:
|
||||
case VB2_BUF_STATE_DEQUEUED:
|
||||
case VB2_BUF_STATE_REQUEUEING:
|
||||
@@ -453,6 +454,9 @@ static void __fill_v4l2_buffer(struct vb2_buffer *vb, void *pb)
|
||||
break;
|
||||
}
|
||||
|
||||
if (vb->state == VB2_BUF_STATE_DEQUEUED && vb->synced && vb->prepared)
|
||||
b->flags |= V4L2_BUF_FLAG_PREPARED;
|
||||
|
||||
if (vb2_buffer_in_use(q, vb))
|
||||
b->flags |= V4L2_BUF_FLAG_MAPPED;
|
||||
|
||||
|
在新工单中引用
屏蔽一个用户