[media] uvcvideo: Implement DMABUF exporter role
Now that videobuf2-vmalloc supports exporting buffers, add support for the DMABUF exporter role by plugging in the videobuf2 ioctl helper. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
This commit is contained in:
parent
baf06b5190
commit
7195f61b80
|
@ -270,6 +270,18 @@ int uvc_queue_buffer(struct uvc_video_queue *queue, struct v4l2_buffer *buf)
|
|||
return ret;
|
||||
}
|
||||
|
||||
int uvc_export_buffer(struct uvc_video_queue *queue,
|
||||
struct v4l2_exportbuffer *exp)
|
||||
{
|
||||
int ret;
|
||||
|
||||
mutex_lock(&queue->mutex);
|
||||
ret = vb2_expbuf(&queue->queue, exp);
|
||||
mutex_unlock(&queue->mutex);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int uvc_dequeue_buffer(struct uvc_video_queue *queue, struct v4l2_buffer *buf,
|
||||
int nonblocking)
|
||||
{
|
||||
|
|
|
@ -723,6 +723,18 @@ static int uvc_ioctl_qbuf(struct file *file, void *fh, struct v4l2_buffer *buf)
|
|||
return uvc_queue_buffer(&stream->queue, buf);
|
||||
}
|
||||
|
||||
static int uvc_ioctl_expbuf(struct file *file, void *fh,
|
||||
struct v4l2_exportbuffer *exp)
|
||||
{
|
||||
struct uvc_fh *handle = fh;
|
||||
struct uvc_streaming *stream = handle->stream;
|
||||
|
||||
if (!uvc_has_privileges(handle))
|
||||
return -EBUSY;
|
||||
|
||||
return uvc_export_buffer(&stream->queue, exp);
|
||||
}
|
||||
|
||||
static int uvc_ioctl_dqbuf(struct file *file, void *fh, struct v4l2_buffer *buf)
|
||||
{
|
||||
struct uvc_fh *handle = fh;
|
||||
|
@ -1478,6 +1490,7 @@ const struct v4l2_ioctl_ops uvc_ioctl_ops = {
|
|||
.vidioc_reqbufs = uvc_ioctl_reqbufs,
|
||||
.vidioc_querybuf = uvc_ioctl_querybuf,
|
||||
.vidioc_qbuf = uvc_ioctl_qbuf,
|
||||
.vidioc_expbuf = uvc_ioctl_expbuf,
|
||||
.vidioc_dqbuf = uvc_ioctl_dqbuf,
|
||||
.vidioc_create_bufs = uvc_ioctl_create_bufs,
|
||||
.vidioc_streamon = uvc_ioctl_streamon,
|
||||
|
|
|
@ -635,6 +635,8 @@ extern int uvc_create_buffers(struct uvc_video_queue *queue,
|
|||
struct v4l2_create_buffers *v4l2_cb);
|
||||
extern int uvc_queue_buffer(struct uvc_video_queue *queue,
|
||||
struct v4l2_buffer *v4l2_buf);
|
||||
extern int uvc_export_buffer(struct uvc_video_queue *queue,
|
||||
struct v4l2_exportbuffer *exp);
|
||||
extern int uvc_dequeue_buffer(struct uvc_video_queue *queue,
|
||||
struct v4l2_buffer *v4l2_buf, int nonblocking);
|
||||
extern int uvc_queue_streamon(struct uvc_video_queue *queue,
|
||||
|
|
Loading…
Reference in a new issue