2015-09-22 16:30:29 +03:00
/*
* videobuf2 - v4l2 . h - V4L2 driver helper framework
*
* Copyright ( C ) 2010 Samsung Electronics
*
* Author : Pawel Osciak < pawel @ osciak . com >
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation .
*/
# ifndef _MEDIA_VIDEOBUF2_V4L2_H
# define _MEDIA_VIDEOBUF2_V4L2_H
[media] media: videobuf2: Restructure vb2_buffer
Remove v4l2 stuff - v4l2_buf, v4l2_plane - from struct vb2_buffer.
Add new member variables - bytesused, length, offset, userptr, fd,
data_offset - to struct vb2_plane in order to cover all information
of v4l2_plane.
struct vb2_plane {
<snip>
unsigned int bytesused;
unsigned int length;
union {
unsigned int offset;
unsigned long userptr;
int fd;
} m;
unsigned int data_offset;
}
Replace v4l2_buf with new member variables - index, type, memory - which
are common fields for buffer management.
struct vb2_buffer {
<snip>
unsigned int index;
unsigned int type;
unsigned int memory;
unsigned int num_planes;
struct vb2_plane planes[VIDEO_MAX_PLANES];
<snip>
};
v4l2 specific fields - flags, field, timestamp, timecode,
sequence - are moved to vb2_v4l2_buffer in videobuf2-v4l2.c
struct vb2_v4l2_buffer {
struct vb2_buffer vb2_buf;
__u32 flags;
__u32 field;
struct timeval timestamp;
struct v4l2_timecode timecode;
__u32 sequence;
};
Signed-off-by: Junghak Sung <jh1009.sung@samsung.com>
Signed-off-by: Geunyoung Kim <nenggun.kim@samsung.com>
Acked-by: Seung-Woo Kim <sw0312.kim@samsung.com>
Acked-by: Inki Dae <inki.dae@samsung.com>
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
2015-09-22 16:30:30 +03:00
# include <linux/videodev2.h>
2015-09-22 16:30:29 +03:00
# include <media/videobuf2-core.h>
2015-10-06 12:37:47 +03:00
# if VB2_MAX_FRAME != VIDEO_MAX_FRAME
# error VB2_MAX_FRAME != VIDEO_MAX_FRAME
# endif
# if VB2_MAX_PLANES != VIDEO_MAX_PLANES
# error VB2_MAX_PLANES != VIDEO_MAX_PLANES
# endif
[media] media: videobuf2: Restructure vb2_buffer
Remove v4l2 stuff - v4l2_buf, v4l2_plane - from struct vb2_buffer.
Add new member variables - bytesused, length, offset, userptr, fd,
data_offset - to struct vb2_plane in order to cover all information
of v4l2_plane.
struct vb2_plane {
<snip>
unsigned int bytesused;
unsigned int length;
union {
unsigned int offset;
unsigned long userptr;
int fd;
} m;
unsigned int data_offset;
}
Replace v4l2_buf with new member variables - index, type, memory - which
are common fields for buffer management.
struct vb2_buffer {
<snip>
unsigned int index;
unsigned int type;
unsigned int memory;
unsigned int num_planes;
struct vb2_plane planes[VIDEO_MAX_PLANES];
<snip>
};
v4l2 specific fields - flags, field, timestamp, timecode,
sequence - are moved to vb2_v4l2_buffer in videobuf2-v4l2.c
struct vb2_v4l2_buffer {
struct vb2_buffer vb2_buf;
__u32 flags;
__u32 field;
struct timeval timestamp;
struct v4l2_timecode timecode;
__u32 sequence;
};
Signed-off-by: Junghak Sung <jh1009.sung@samsung.com>
Signed-off-by: Geunyoung Kim <nenggun.kim@samsung.com>
Acked-by: Seung-Woo Kim <sw0312.kim@samsung.com>
Acked-by: Inki Dae <inki.dae@samsung.com>
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
2015-09-22 16:30:30 +03:00
/**
2017-10-09 12:36:52 +03:00
* struct vb2_v4l2_buffer - video buffer information for v4l2 .
2016-09-09 00:01:44 +03:00
*
2017-10-09 12:36:52 +03:00
* @ vb2_buf : embedded struct & vb2_buffer .
* @ flags : buffer informational flags .
* @ field : field order of the image in the buffer , as defined by
* & enum v4l2_field .
* @ timecode : frame timecode .
* @ sequence : sequence count of this frame .
2018-05-30 09:46:22 +03:00
* @ request_fd : the request_fd associated with this buffer
2018-05-21 11:54:45 +03:00
* @ planes : plane information ( userptr / fd , length , bytesused , data_offset ) .
2016-09-09 00:01:44 +03:00
*
[media] media: videobuf2: Restructure vb2_buffer
Remove v4l2 stuff - v4l2_buf, v4l2_plane - from struct vb2_buffer.
Add new member variables - bytesused, length, offset, userptr, fd,
data_offset - to struct vb2_plane in order to cover all information
of v4l2_plane.
struct vb2_plane {
<snip>
unsigned int bytesused;
unsigned int length;
union {
unsigned int offset;
unsigned long userptr;
int fd;
} m;
unsigned int data_offset;
}
Replace v4l2_buf with new member variables - index, type, memory - which
are common fields for buffer management.
struct vb2_buffer {
<snip>
unsigned int index;
unsigned int type;
unsigned int memory;
unsigned int num_planes;
struct vb2_plane planes[VIDEO_MAX_PLANES];
<snip>
};
v4l2 specific fields - flags, field, timestamp, timecode,
sequence - are moved to vb2_v4l2_buffer in videobuf2-v4l2.c
struct vb2_v4l2_buffer {
struct vb2_buffer vb2_buf;
__u32 flags;
__u32 field;
struct timeval timestamp;
struct v4l2_timecode timecode;
__u32 sequence;
};
Signed-off-by: Junghak Sung <jh1009.sung@samsung.com>
Signed-off-by: Geunyoung Kim <nenggun.kim@samsung.com>
Acked-by: Seung-Woo Kim <sw0312.kim@samsung.com>
Acked-by: Inki Dae <inki.dae@samsung.com>
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
2015-09-22 16:30:30 +03:00
* Should contain enough information to be able to cover all the fields
2017-10-09 12:36:52 +03:00
* of & struct v4l2_buffer at ` ` videodev2 . h ` ` .
[media] media: videobuf2: Restructure vb2_buffer
Remove v4l2 stuff - v4l2_buf, v4l2_plane - from struct vb2_buffer.
Add new member variables - bytesused, length, offset, userptr, fd,
data_offset - to struct vb2_plane in order to cover all information
of v4l2_plane.
struct vb2_plane {
<snip>
unsigned int bytesused;
unsigned int length;
union {
unsigned int offset;
unsigned long userptr;
int fd;
} m;
unsigned int data_offset;
}
Replace v4l2_buf with new member variables - index, type, memory - which
are common fields for buffer management.
struct vb2_buffer {
<snip>
unsigned int index;
unsigned int type;
unsigned int memory;
unsigned int num_planes;
struct vb2_plane planes[VIDEO_MAX_PLANES];
<snip>
};
v4l2 specific fields - flags, field, timestamp, timecode,
sequence - are moved to vb2_v4l2_buffer in videobuf2-v4l2.c
struct vb2_v4l2_buffer {
struct vb2_buffer vb2_buf;
__u32 flags;
__u32 field;
struct timeval timestamp;
struct v4l2_timecode timecode;
__u32 sequence;
};
Signed-off-by: Junghak Sung <jh1009.sung@samsung.com>
Signed-off-by: Geunyoung Kim <nenggun.kim@samsung.com>
Acked-by: Seung-Woo Kim <sw0312.kim@samsung.com>
Acked-by: Inki Dae <inki.dae@samsung.com>
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
2015-09-22 16:30:30 +03:00
*/
struct vb2_v4l2_buffer {
struct vb2_buffer vb2_buf ;
__u32 flags ;
__u32 field ;
struct v4l2_timecode timecode ;
__u32 sequence ;
2018-05-30 09:46:22 +03:00
__s32 request_fd ;
2018-05-21 11:54:45 +03:00
struct vb2_plane planes [ VB2_MAX_PLANES ] ;
[media] media: videobuf2: Restructure vb2_buffer
Remove v4l2 stuff - v4l2_buf, v4l2_plane - from struct vb2_buffer.
Add new member variables - bytesused, length, offset, userptr, fd,
data_offset - to struct vb2_plane in order to cover all information
of v4l2_plane.
struct vb2_plane {
<snip>
unsigned int bytesused;
unsigned int length;
union {
unsigned int offset;
unsigned long userptr;
int fd;
} m;
unsigned int data_offset;
}
Replace v4l2_buf with new member variables - index, type, memory - which
are common fields for buffer management.
struct vb2_buffer {
<snip>
unsigned int index;
unsigned int type;
unsigned int memory;
unsigned int num_planes;
struct vb2_plane planes[VIDEO_MAX_PLANES];
<snip>
};
v4l2 specific fields - flags, field, timestamp, timecode,
sequence - are moved to vb2_v4l2_buffer in videobuf2-v4l2.c
struct vb2_v4l2_buffer {
struct vb2_buffer vb2_buf;
__u32 flags;
__u32 field;
struct timeval timestamp;
struct v4l2_timecode timecode;
__u32 sequence;
};
Signed-off-by: Junghak Sung <jh1009.sung@samsung.com>
Signed-off-by: Geunyoung Kim <nenggun.kim@samsung.com>
Acked-by: Seung-Woo Kim <sw0312.kim@samsung.com>
Acked-by: Inki Dae <inki.dae@samsung.com>
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
2015-09-22 16:30:30 +03:00
} ;
2015-10-01 20:23:35 +03:00
/*
[media] media: videobuf2: Restructure vb2_buffer
Remove v4l2 stuff - v4l2_buf, v4l2_plane - from struct vb2_buffer.
Add new member variables - bytesused, length, offset, userptr, fd,
data_offset - to struct vb2_plane in order to cover all information
of v4l2_plane.
struct vb2_plane {
<snip>
unsigned int bytesused;
unsigned int length;
union {
unsigned int offset;
unsigned long userptr;
int fd;
} m;
unsigned int data_offset;
}
Replace v4l2_buf with new member variables - index, type, memory - which
are common fields for buffer management.
struct vb2_buffer {
<snip>
unsigned int index;
unsigned int type;
unsigned int memory;
unsigned int num_planes;
struct vb2_plane planes[VIDEO_MAX_PLANES];
<snip>
};
v4l2 specific fields - flags, field, timestamp, timecode,
sequence - are moved to vb2_v4l2_buffer in videobuf2-v4l2.c
struct vb2_v4l2_buffer {
struct vb2_buffer vb2_buf;
__u32 flags;
__u32 field;
struct timeval timestamp;
struct v4l2_timecode timecode;
__u32 sequence;
};
Signed-off-by: Junghak Sung <jh1009.sung@samsung.com>
Signed-off-by: Geunyoung Kim <nenggun.kim@samsung.com>
Acked-by: Seung-Woo Kim <sw0312.kim@samsung.com>
Acked-by: Inki Dae <inki.dae@samsung.com>
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
2015-09-22 16:30:30 +03:00
* to_vb2_v4l2_buffer ( ) - cast struct vb2_buffer * to struct vb2_v4l2_buffer *
*/
# define to_vb2_v4l2_buffer(vb) \
2015-10-01 20:23:35 +03:00
container_of ( vb , struct vb2_v4l2_buffer , vb2_buf )
[media] media: videobuf2: Restructure vb2_buffer
Remove v4l2 stuff - v4l2_buf, v4l2_plane - from struct vb2_buffer.
Add new member variables - bytesused, length, offset, userptr, fd,
data_offset - to struct vb2_plane in order to cover all information
of v4l2_plane.
struct vb2_plane {
<snip>
unsigned int bytesused;
unsigned int length;
union {
unsigned int offset;
unsigned long userptr;
int fd;
} m;
unsigned int data_offset;
}
Replace v4l2_buf with new member variables - index, type, memory - which
are common fields for buffer management.
struct vb2_buffer {
<snip>
unsigned int index;
unsigned int type;
unsigned int memory;
unsigned int num_planes;
struct vb2_plane planes[VIDEO_MAX_PLANES];
<snip>
};
v4l2 specific fields - flags, field, timestamp, timecode,
sequence - are moved to vb2_v4l2_buffer in videobuf2-v4l2.c
struct vb2_v4l2_buffer {
struct vb2_buffer vb2_buf;
__u32 flags;
__u32 field;
struct timeval timestamp;
struct v4l2_timecode timecode;
__u32 sequence;
};
Signed-off-by: Junghak Sung <jh1009.sung@samsung.com>
Signed-off-by: Geunyoung Kim <nenggun.kim@samsung.com>
Acked-by: Seung-Woo Kim <sw0312.kim@samsung.com>
Acked-by: Inki Dae <inki.dae@samsung.com>
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
2015-09-22 16:30:30 +03:00
2018-10-24 13:51:01 +03:00
/**
* vb2_find_timestamp ( ) - Find buffer with given timestamp in the queue
*
* @ q : pointer to & struct vb2_queue with videobuf2 queue .
2019-01-24 11:47:49 +03:00
* @ timestamp : the timestamp to find .
2018-10-24 13:51:01 +03:00
* @ start_idx : the start index ( usually 0 ) in the buffer array to start
* searching from . Note that there may be multiple buffers
* with the same timestamp value , so you can restart the search
* by setting @ start_idx to the previously found index + 1.
*
* Returns the buffer index of the buffer with the given @ timestamp , or
* - 1 if no buffer with @ timestamp was found .
*/
int vb2_find_timestamp ( const struct vb2_queue * q , u64 timestamp ,
unsigned int start_idx ) ;
2015-10-06 12:37:49 +03:00
int vb2_querybuf ( struct vb2_queue * q , struct v4l2_buffer * b ) ;
2016-09-08 20:22:00 +03:00
/**
* vb2_reqbufs ( ) - Wrapper for vb2_core_reqbufs ( ) that also verifies
* the memory and type values .
2016-09-09 00:01:44 +03:00
*
2017-10-09 12:36:52 +03:00
* @ q : pointer to & struct vb2_queue with videobuf2 queue .
* @ req : & struct v4l2_requestbuffers passed from userspace to
* & v4l2_ioctl_ops - > vidioc_reqbufs handler in driver .
2016-09-08 20:22:00 +03:00
*/
2015-10-06 12:37:49 +03:00
int vb2_reqbufs ( struct vb2_queue * q , struct v4l2_requestbuffers * req ) ;
2016-09-08 20:22:00 +03:00
/**
* vb2_create_bufs ( ) - Wrapper for vb2_core_create_bufs ( ) that also verifies
* the memory and type values .
2016-09-09 00:01:44 +03:00
*
2017-10-09 12:36:52 +03:00
* @ q : pointer to & struct vb2_queue with videobuf2 queue .
* @ create : creation parameters , passed from userspace to
* & v4l2_ioctl_ops - > vidioc_create_bufs handler in driver
2016-09-08 20:22:00 +03:00
*/
2015-10-06 12:37:49 +03:00
int vb2_create_bufs ( struct vb2_queue * q , struct v4l2_create_buffers * create ) ;
2016-09-08 20:22:00 +03:00
/**
* vb2_prepare_buf ( ) - Pass ownership of a buffer from userspace to the kernel
2016-09-09 00:01:44 +03:00
*
2017-10-09 12:36:52 +03:00
* @ q : pointer to & struct vb2_queue with videobuf2 queue .
2018-05-30 09:46:22 +03:00
* @ mdev : pointer to & struct media_device , may be NULL .
2017-10-09 12:36:52 +03:00
* @ b : buffer structure passed from userspace to
* & v4l2_ioctl_ops - > vidioc_prepare_buf handler in driver
*
* Should be called from & v4l2_ioctl_ops - > vidioc_prepare_buf ioctl handler
* of a driver .
2016-09-08 20:22:00 +03:00
*
* This function :
2016-09-09 00:01:44 +03:00
*
* # ) verifies the passed buffer ,
2017-10-09 12:36:52 +03:00
* # ) calls & vb2_ops - > buf_prepare callback in the driver ( if provided ) ,
* in which driver - specific buffer initialization can be performed .
2018-05-30 09:46:22 +03:00
* # ) if @ b - > request_fd is non - zero and @ mdev - > ops - > req_queue is set ,
* then bind the prepared buffer to the request .
2016-09-08 20:22:00 +03:00
*
* The return values from this function are intended to be directly returned
2017-10-09 12:36:52 +03:00
* from & v4l2_ioctl_ops - > vidioc_prepare_buf handler in driver .
2016-09-08 20:22:00 +03:00
*/
2018-05-30 09:46:22 +03:00
int vb2_prepare_buf ( struct vb2_queue * q , struct media_device * mdev ,
struct v4l2_buffer * b ) ;
2015-10-06 12:37:49 +03:00
2016-09-08 20:22:00 +03:00
/**
* vb2_qbuf ( ) - Queue a buffer from userspace
2017-10-09 12:36:52 +03:00
* @ q : pointer to & struct vb2_queue with videobuf2 queue .
2018-05-30 09:46:22 +03:00
* @ mdev : pointer to & struct media_device , may be NULL .
2017-10-09 12:36:52 +03:00
* @ b : buffer structure passed from userspace to
* & v4l2_ioctl_ops - > vidioc_qbuf handler in driver
2016-09-08 20:22:00 +03:00
*
2017-10-09 12:36:52 +03:00
* Should be called from & v4l2_ioctl_ops - > vidioc_qbuf handler of a driver .
2016-09-09 00:01:44 +03:00
*
2016-09-08 20:22:00 +03:00
* This function :
2016-09-09 00:01:44 +03:00
*
2017-10-09 12:36:52 +03:00
* # ) verifies the passed buffer ;
2018-05-30 09:46:22 +03:00
* # ) if @ b - > request_fd is non - zero and @ mdev - > ops - > req_queue is set ,
* then bind the buffer to the request .
2017-10-09 12:36:52 +03:00
* # ) if necessary , calls & vb2_ops - > buf_prepare callback in the driver
* ( if provided ) , in which driver - specific buffer initialization can
* be performed ;
* # ) if streaming is on , queues the buffer in driver by the means of
* & vb2_ops - > buf_queue callback for processing .
2016-09-08 20:22:00 +03:00
*
* The return values from this function are intended to be directly returned
2017-10-09 12:36:52 +03:00
* from & v4l2_ioctl_ops - > vidioc_qbuf handler in driver .
2016-09-08 20:22:00 +03:00
*/
2018-05-30 09:46:22 +03:00
int vb2_qbuf ( struct vb2_queue * q , struct media_device * mdev ,
struct v4l2_buffer * b ) ;
2016-09-08 20:22:00 +03:00
/**
* vb2_expbuf ( ) - Export a buffer as a file descriptor
2017-10-09 12:36:52 +03:00
* @ q : pointer to & struct vb2_queue with videobuf2 queue .
* @ eb : export buffer structure passed from userspace to
* & v4l2_ioctl_ops - > vidioc_expbuf handler in driver
2016-09-08 20:22:00 +03:00
*
* The return values from this function are intended to be directly returned
2017-10-09 12:36:52 +03:00
* from & v4l2_ioctl_ops - > vidioc_expbuf handler in driver .
2016-09-08 20:22:00 +03:00
*/
2015-10-06 12:37:49 +03:00
int vb2_expbuf ( struct vb2_queue * q , struct v4l2_exportbuffer * eb ) ;
2016-09-08 20:22:00 +03:00
/**
* vb2_dqbuf ( ) - Dequeue a buffer to the userspace
2017-10-09 12:36:52 +03:00
* @ q : pointer to & struct vb2_queue with videobuf2 queue .
* @ b : buffer structure passed from userspace to
* & v4l2_ioctl_ops - > vidioc_dqbuf handler in driver
2016-09-08 20:22:00 +03:00
* @ nonblocking : if true , this call will not sleep waiting for a buffer if no
* buffers ready for dequeuing are present . Normally the driver
2017-10-09 12:36:52 +03:00
* would be passing ( & file - > f_flags & % O_NONBLOCK ) here
2016-09-08 20:22:00 +03:00
*
2017-10-09 12:36:52 +03:00
* Should be called from & v4l2_ioctl_ops - > vidioc_dqbuf ioctl handler
* of a driver .
2016-09-09 00:01:44 +03:00
*
2016-09-08 20:22:00 +03:00
* This function :
2016-09-09 00:01:44 +03:00
*
2017-10-09 12:36:52 +03:00
* # ) verifies the passed buffer ;
* # ) calls & vb2_ops - > buf_finish callback in the driver ( if provided ) , in which
2016-09-08 20:22:00 +03:00
* driver can perform any additional operations that may be required before
2017-10-09 12:36:52 +03:00
* returning the buffer to userspace , such as cache sync ;
2016-09-09 00:01:44 +03:00
* # ) the buffer struct members are filled with relevant information for
2016-09-08 20:22:00 +03:00
* the userspace .
*
* The return values from this function are intended to be directly returned
2017-10-09 12:36:52 +03:00
* from & v4l2_ioctl_ops - > vidioc_dqbuf handler in driver .
2016-09-08 20:22:00 +03:00
*/
2015-10-06 12:37:49 +03:00
int vb2_dqbuf ( struct vb2_queue * q , struct v4l2_buffer * b , bool nonblocking ) ;
2016-09-08 20:22:00 +03:00
/**
* vb2_streamon - start streaming
2017-10-09 12:36:52 +03:00
* @ q : pointer to & struct vb2_queue with videobuf2 queue .
* @ type : type argument passed from userspace to vidioc_streamon handler ,
* as defined by & enum v4l2_buf_type .
2016-09-08 20:22:00 +03:00
*
2017-10-09 12:36:52 +03:00
* Should be called from & v4l2_ioctl_ops - > vidioc_streamon handler of a driver .
2016-09-09 00:01:44 +03:00
*
2016-09-08 20:22:00 +03:00
* This function :
2016-09-09 00:01:44 +03:00
*
2016-09-08 20:22:00 +03:00
* 1 ) verifies current state
* 2 ) passes any previously queued buffers to the driver and starts streaming
*
* The return values from this function are intended to be directly returned
2017-10-09 12:36:52 +03:00
* from & v4l2_ioctl_ops - > vidioc_streamon handler in the driver .
2016-09-08 20:22:00 +03:00
*/
2015-10-06 12:37:49 +03:00
int vb2_streamon ( struct vb2_queue * q , enum v4l2_buf_type type ) ;
2016-09-08 20:22:00 +03:00
/**
* vb2_streamoff - stop streaming
2017-10-09 12:36:52 +03:00
* @ q : pointer to & struct vb2_queue with videobuf2 queue .
2016-09-08 20:22:00 +03:00
* @ type : type argument passed from userspace to vidioc_streamoff handler
*
* Should be called from vidioc_streamoff handler of a driver .
2016-09-09 00:01:44 +03:00
*
2016-09-08 20:22:00 +03:00
* This function :
2016-09-09 00:01:44 +03:00
*
* # ) verifies current state ,
* # ) stop streaming and dequeues any queued buffers , including those previously
2016-09-08 20:22:00 +03:00
* passed to the driver ( after waiting for the driver to finish ) .
*
* This call can be used for pausing playback .
* The return values from this function are intended to be directly returned
* from vidioc_streamoff handler in the driver
*/
2015-10-06 12:37:49 +03:00
int vb2_streamoff ( struct vb2_queue * q , enum v4l2_buf_type type ) ;
2016-09-08 20:22:00 +03:00
/**
* vb2_queue_init ( ) - initialize a videobuf2 queue
2017-10-09 12:36:52 +03:00
* @ q : pointer to & struct vb2_queue with videobuf2 queue .
2016-09-08 20:22:00 +03:00
*
* The vb2_queue structure should be allocated by the driver . The driver is
* responsible of clearing it ' s content and setting initial values for some
* required entries before calling this function .
* q - > ops , q - > mem_ops , q - > type and q - > io_modes are mandatory . Please refer
* to the struct vb2_queue description in include / media / videobuf2 - core . h
* for more information .
*/
2015-10-06 12:37:49 +03:00
int __must_check vb2_queue_init ( struct vb2_queue * q ) ;
2016-09-08 20:22:00 +03:00
/**
* vb2_queue_release ( ) - stop streaming , release the queue and free memory
2017-10-09 12:36:52 +03:00
* @ q : pointer to & struct vb2_queue with videobuf2 queue .
2016-09-08 20:22:00 +03:00
*
* This function stops streaming and performs necessary clean ups , including
* freeing video buffer memory . The driver is responsible for freeing
* the vb2_queue structure itself .
*/
2015-10-06 12:37:49 +03:00
void vb2_queue_release ( struct vb2_queue * q ) ;
2016-09-08 20:22:00 +03:00
/**
* vb2_poll ( ) - implements poll userspace operation
2017-10-09 12:36:52 +03:00
* @ q : pointer to & struct vb2_queue with videobuf2 queue .
2016-09-08 20:22:00 +03:00
* @ file : file argument passed to the poll file operation handler
* @ wait : wait argument passed to the poll file operation handler
*
* This function implements poll file operation handler for a driver .
* For CAPTURE queues , if a buffer is ready to be dequeued , the userspace will
* be informed that the file descriptor of a video device is available for
* reading .
* For OUTPUT queues , if a buffer is ready to be dequeued , the file descriptor
* will be reported as available for writing .
*
* If the driver uses struct v4l2_fh , then vb2_poll ( ) will also check for any
* pending events .
*
* The return values from this function are intended to be directly returned
* from poll handler in driver .
*/
2017-07-03 10:02:56 +03:00
__poll_t vb2_poll ( struct vb2_queue * q , struct file * file , poll_table * wait ) ;
2015-10-06 12:37:49 +03:00
/*
* The following functions are not part of the vb2 core API , but are simple
* helper functions that you can use in your struct v4l2_file_operations ,
* struct v4l2_ioctl_ops and struct vb2_ops . They will serialize if vb2_queue - > lock
* or video_device - > lock is set , and they will set and test vb2_queue - > owner
* to check if the calling filehandle is permitted to do the queuing operation .
*/
/* struct v4l2_ioctl_ops helpers */
int vb2_ioctl_reqbufs ( struct file * file , void * priv ,
struct v4l2_requestbuffers * p ) ;
int vb2_ioctl_create_bufs ( struct file * file , void * priv ,
struct v4l2_create_buffers * p ) ;
int vb2_ioctl_prepare_buf ( struct file * file , void * priv ,
struct v4l2_buffer * p ) ;
int vb2_ioctl_querybuf ( struct file * file , void * priv , struct v4l2_buffer * p ) ;
int vb2_ioctl_qbuf ( struct file * file , void * priv , struct v4l2_buffer * p ) ;
int vb2_ioctl_dqbuf ( struct file * file , void * priv , struct v4l2_buffer * p ) ;
int vb2_ioctl_streamon ( struct file * file , void * priv , enum v4l2_buf_type i ) ;
int vb2_ioctl_streamoff ( struct file * file , void * priv , enum v4l2_buf_type i ) ;
int vb2_ioctl_expbuf ( struct file * file , void * priv ,
struct v4l2_exportbuffer * p ) ;
/* struct v4l2_file_operations helpers */
int vb2_fop_mmap ( struct file * file , struct vm_area_struct * vma ) ;
int vb2_fop_release ( struct file * file ) ;
int _vb2_fop_release ( struct file * file , struct mutex * lock ) ;
ssize_t vb2_fop_write ( struct file * file , const char __user * buf ,
size_t count , loff_t * ppos ) ;
ssize_t vb2_fop_read ( struct file * file , char __user * buf ,
size_t count , loff_t * ppos ) ;
2017-07-03 10:02:56 +03:00
__poll_t vb2_fop_poll ( struct file * file , poll_table * wait ) ;
2015-10-06 12:37:49 +03:00
# ifndef CONFIG_MMU
unsigned long vb2_fop_get_unmapped_area ( struct file * file , unsigned long addr ,
unsigned long len , unsigned long pgoff , unsigned long flags ) ;
# endif
2016-09-09 00:12:18 +03:00
/**
* vb2_ops_wait_prepare - helper function to lock a struct & vb2_queue
*
2017-10-09 12:36:52 +03:00
* @ vq : pointer to & struct vb2_queue
2016-09-09 00:12:18 +03:00
*
* . . note : : only use if vq - > lock is non - NULL .
*/
2015-10-06 12:37:49 +03:00
void vb2_ops_wait_prepare ( struct vb2_queue * vq ) ;
2016-09-09 00:12:18 +03:00
/**
* vb2_ops_wait_finish - helper function to unlock a struct & vb2_queue
*
2017-10-09 12:36:52 +03:00
* @ vq : pointer to & struct vb2_queue
2016-09-09 00:12:18 +03:00
*
* . . note : : only use if vq - > lock is non - NULL .
*/
2015-10-06 12:37:49 +03:00
void vb2_ops_wait_finish ( struct vb2_queue * vq ) ;
2018-05-21 11:54:52 +03:00
struct media_request ;
int vb2_request_validate ( struct media_request * req ) ;
void vb2_request_queue ( struct media_request * req ) ;
2015-09-22 16:30:29 +03:00
# endif /* _MEDIA_VIDEOBUF2_V4L2_H */