Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 05c79d0d authored by Laurent Pinchart's avatar Laurent Pinchart Committed by Mauro Carvalho Chehab
Browse files

[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: default avatarLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent f23999ec
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -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,