[media] uvcvideo: Implement videobuf2 .wait_prepare and .wait_finish operations
Those optional operations are used to release and reacquire the queue lock when videobuf2 needs to perform operations that sleep for a long time, such as waiting for a buffer to be complete. Implement them to avoid blocking qbuf or streamoff calls when a dqbuf is in progress. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
Родитель
f23999eccb
Коммит
05c79d0d1d
|
@ -115,11 +115,27 @@ static int uvc_buffer_finish(struct vb2_buffer *vb)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static void uvc_wait_prepare(struct vb2_queue *vq)
|
||||
{
|
||||
struct uvc_video_queue *queue = vb2_get_drv_priv(vq);
|
||||
|
||||
mutex_unlock(&queue->mutex);
|
||||
}
|
||||
|
||||
static void uvc_wait_finish(struct vb2_queue *vq)
|
||||
{
|
||||
struct uvc_video_queue *queue = vb2_get_drv_priv(vq);
|
||||
|
||||
mutex_lock(&queue->mutex);
|
||||
}
|
||||
|
||||
static struct vb2_ops uvc_queue_qops = {
|
||||
.queue_setup = uvc_queue_setup,
|
||||
.buf_prepare = uvc_buffer_prepare,
|
||||
.buf_queue = uvc_buffer_queue,
|
||||
.buf_finish = uvc_buffer_finish,
|
||||
.wait_prepare = uvc_wait_prepare,
|
||||
.wait_finish = uvc_wait_finish,
|
||||
};
|
||||
|
||||
int uvc_queue_init(struct uvc_video_queue *queue, enum v4l2_buf_type type,
|
||||
|
|
Загрузка…
Ссылка в новой задаче