2010-04-23 12:38:37 +04:00
/*
* Memory - to - memory device framework for Video for Linux 2.
*
* Helper functions for devices that use memory buffers for both source
* and destination .
*
* Copyright ( c ) 2009 Samsung Electronics Co . , Ltd .
2011-03-13 21:23:32 +03:00
* Pawel Osciak , < pawel @ osciak . com >
2010-04-23 12:38:37 +04:00
* Marek Szyprowski , < m . szyprowski @ samsung . 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 ; either version 2 of the
* License , or ( at your option ) any later version
*/
# ifndef _MEDIA_V4L2_MEM2MEM_H
# define _MEDIA_V4L2_MEM2MEM_H
2015-09-22 16:30:29 +03:00
# include <media/videobuf2-v4l2.h>
2010-04-23 12:38:37 +04:00
/**
* struct v4l2_m2m_ops - mem - to - mem device driver callbacks
* @ device_run : required . Begin the actual job ( transaction ) inside this
* callback .
* The job does NOT have to end before this callback returns
* ( and it will be the usual case ) . When the job finishes ,
* v4l2_m2m_job_finish ( ) has to be called .
* @ job_ready : optional . Should return 0 if the driver does not have a job
* fully prepared to run yet ( i . e . it will not be able to finish a
* transaction without sleeping ) . If not provided , it will be
* assumed that one source and one destination buffer are all
* that is required for the driver to perform one full transaction .
* This method may not sleep .
* @ job_abort : required . Informs the driver that it has to abort the currently
* running transaction as soon as possible ( i . e . as soon as it can
* stop the device safely ; e . g . in the next interrupt handler ) ,
* even if the transaction would not have been finished by then .
* After the driver performs the necessary steps , it has to call
* v4l2_m2m_job_finish ( ) ( as if the transaction ended normally ) .
* This function does not have to ( and will usually not ) wait
* until the device enters a state when it can be stopped .
2015-08-22 11:34:40 +03:00
* @ lock : optional . Define a driver ' s own lock callback , instead of using
* m2m_ctx - > q_lock .
* @ unlock : optional . Define a driver ' s own unlock callback , instead of
* using m2m_ctx - > q_lock .
2010-04-23 12:38:37 +04:00
*/
struct v4l2_m2m_ops {
void ( * device_run ) ( void * priv ) ;
int ( * job_ready ) ( void * priv ) ;
void ( * job_abort ) ( void * priv ) ;
2011-01-12 12:50:24 +03:00
void ( * lock ) ( void * priv ) ;
void ( * unlock ) ( void * priv ) ;
2010-04-23 12:38:37 +04:00
} ;
struct v4l2_m2m_dev ;
struct v4l2_m2m_queue_ctx {
/* private: internal use only */
2011-01-12 12:50:24 +03:00
struct vb2_queue q ;
2010-04-23 12:38:37 +04:00
/* Queue for buffers ready to be processed as soon as this
* instance receives access to the device */
struct list_head rdy_queue ;
2011-01-12 12:50:24 +03:00
spinlock_t rdy_spinlock ;
2010-04-23 12:38:37 +04:00
u8 num_rdy ;
2013-06-03 11:23:48 +04:00
bool buffered ;
2010-04-23 12:38:37 +04:00
} ;
struct v4l2_m2m_ctx {
2013-09-15 01:39:04 +04:00
/* optional cap/out vb2 queues lock */
struct mutex * q_lock ;
2010-04-23 12:38:37 +04:00
/* private: internal use only */
struct v4l2_m2m_dev * m2m_dev ;
/* Capture (output to memory) queue context */
struct v4l2_m2m_queue_ctx cap_q_ctx ;
/* Output (input from memory) queue context */
struct v4l2_m2m_queue_ctx out_q_ctx ;
/* For device job queue */
struct list_head queue ;
unsigned long job_flags ;
2011-01-12 12:50:24 +03:00
wait_queue_head_t finished ;
2010-04-23 12:38:37 +04:00
/* Instance private data */
void * priv ;
} ;
2011-01-12 12:50:24 +03:00
struct v4l2_m2m_buffer {
[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 vb ;
2011-01-12 12:50:24 +03:00
struct list_head list ;
} ;
2016-09-08 16:16:27 +03:00
/**
* v4l2_m2m_get_curr_priv ( ) - return driver private data for the currently
* running instance or NULL if no instance is running
*/
2010-04-23 12:38:37 +04:00
void * v4l2_m2m_get_curr_priv ( struct v4l2_m2m_dev * m2m_dev ) ;
2016-09-08 16:16:27 +03:00
/**
* v4l2_m2m_get_vq ( ) - return vb2_queue for the given type
*/
2011-01-12 12:50:24 +03:00
struct vb2_queue * v4l2_m2m_get_vq ( struct v4l2_m2m_ctx * m2m_ctx ,
2010-04-23 12:38:37 +04:00
enum v4l2_buf_type type ) ;
2016-09-08 16:16:27 +03:00
/**
* v4l2_m2m_try_schedule ( ) - check whether an instance is ready to be added to
* the pending job queue and add it if so .
* @ m2m_ctx : m2m context assigned to the instance to be checked
*
* There are three basic requirements an instance has to meet to be able to run :
* 1 ) at least one source buffer has to be queued ,
* 2 ) at least one destination buffer has to be queued ,
* 3 ) streaming has to be on .
*
* If a queue is buffered ( for example a decoder hardware ringbuffer that has
* to be drained before doing streamoff ) , allow scheduling without v4l2 buffers
* on that queue .
*
* There may also be additional , custom requirements . In such case the driver
* should supply a custom callback ( job_ready in v4l2_m2m_ops ) that should
* return 1 if the instance is ready .
* An example of the above could be an instance that requires more than one
* src / dst buffer per transaction .
*/
2014-07-22 16:36:04 +04:00
void v4l2_m2m_try_schedule ( struct v4l2_m2m_ctx * m2m_ctx ) ;
2016-09-08 16:16:27 +03:00
/**
* v4l2_m2m_job_finish ( ) - inform the framework that a job has been finished
* and have it clean up
*
* Called by a driver to yield back the device after it has finished with it .
* Should be called as soon as possible after reaching a state which allows
* other instances to take control of the device .
*
* This function has to be called only after device_run ( ) callback has been
* called on the driver . To prevent recursion , it should not be called directly
* from the device_run ( ) callback though .
*/
2010-04-23 12:38:37 +04:00
void v4l2_m2m_job_finish ( struct v4l2_m2m_dev * m2m_dev ,
struct v4l2_m2m_ctx * m2m_ctx ) ;
2011-01-12 12:50:24 +03:00
static inline void
[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
v4l2_m2m_buf_done ( struct vb2_v4l2_buffer * buf , enum vb2_buffer_state state )
2011-01-12 12:50:24 +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
vb2_buffer_done ( & buf - > vb2_buf , state ) ;
2011-01-12 12:50:24 +03:00
}
2016-09-08 16:16:27 +03:00
/**
* v4l2_m2m_reqbufs ( ) - multi - queue - aware REQBUFS multiplexer
*/
2010-04-23 12:38:37 +04:00
int v4l2_m2m_reqbufs ( struct file * file , struct v4l2_m2m_ctx * m2m_ctx ,
struct v4l2_requestbuffers * reqbufs ) ;
2016-09-08 16:16:27 +03:00
/**
* v4l2_m2m_querybuf ( ) - multi - queue - aware QUERYBUF multiplexer
*
* See v4l2_m2m_mmap ( ) documentation for details .
*/
2010-04-23 12:38:37 +04:00
int v4l2_m2m_querybuf ( struct file * file , struct v4l2_m2m_ctx * m2m_ctx ,
struct v4l2_buffer * buf ) ;
2016-09-08 16:16:27 +03:00
/**
* v4l2_m2m_qbuf ( ) - enqueue a source or destination buffer , depending on
* the type
*/
2010-04-23 12:38:37 +04:00
int v4l2_m2m_qbuf ( struct file * file , struct v4l2_m2m_ctx * m2m_ctx ,
struct v4l2_buffer * buf ) ;
2016-09-08 16:16:27 +03:00
/**
* v4l2_m2m_dqbuf ( ) - dequeue a source or destination buffer , depending on
* the type
*/
2010-04-23 12:38:37 +04:00
int v4l2_m2m_dqbuf ( struct file * file , struct v4l2_m2m_ctx * m2m_ctx ,
struct v4l2_buffer * buf ) ;
2016-09-08 16:16:27 +03:00
/**
* v4l2_m2m_prepare_buf ( ) - prepare a source or destination buffer , depending on
* the type
*/
2015-06-05 17:28:50 +03:00
int v4l2_m2m_prepare_buf ( struct file * file , struct v4l2_m2m_ctx * m2m_ctx ,
struct v4l2_buffer * buf ) ;
2016-09-08 16:16:27 +03:00
/**
* v4l2_m2m_create_bufs ( ) - create a source or destination buffer , depending
* on the type
*/
2013-05-21 11:16:28 +04:00
int v4l2_m2m_create_bufs ( struct file * file , struct v4l2_m2m_ctx * m2m_ctx ,
struct v4l2_create_buffers * create ) ;
2010-04-23 12:38:37 +04:00
2016-09-08 16:16:27 +03:00
/**
* v4l2_m2m_expbuf ( ) - export a source or destination buffer , depending on
* the type
*/
2012-06-14 18:32:24 +04:00
int v4l2_m2m_expbuf ( struct file * file , struct v4l2_m2m_ctx * m2m_ctx ,
struct v4l2_exportbuffer * eb ) ;
2016-09-08 16:16:27 +03:00
/**
* v4l2_m2m_streamon ( ) - turn on streaming for a video queue
*/
2010-04-23 12:38:37 +04:00
int v4l2_m2m_streamon ( struct file * file , struct v4l2_m2m_ctx * m2m_ctx ,
enum v4l2_buf_type type ) ;
2016-09-08 16:16:27 +03:00
/**
* v4l2_m2m_streamoff ( ) - turn off streaming for a video queue
*/
2010-04-23 12:38:37 +04:00
int v4l2_m2m_streamoff ( struct file * file , struct v4l2_m2m_ctx * m2m_ctx ,
enum v4l2_buf_type type ) ;
2016-09-08 16:16:27 +03:00
/**
* v4l2_m2m_poll ( ) - poll replacement , for destination buffers only
*
* Call from the driver ' s poll ( ) function . Will poll both queues . If a buffer
* is available to dequeue ( with dqbuf ) from the source queue , this will
* indicate that a non - blocking write can be performed , while read will be
* returned in case of the destination queue .
*/
2010-04-23 12:38:37 +04:00
unsigned int v4l2_m2m_poll ( struct file * file , struct v4l2_m2m_ctx * m2m_ctx ,
struct poll_table_struct * wait ) ;
2016-09-08 16:16:27 +03:00
/**
* v4l2_m2m_mmap ( ) - source and destination queues - aware mmap multiplexer
*
* Call from driver ' s mmap ( ) function . Will handle mmap ( ) for both queues
* seamlessly for videobuffer , which will receive normal per - queue offsets and
* proper videobuf queue pointers . The differentiation is made outside videobuf
* by adding a predefined offset to buffers from one of the queues and
* subtracting it before passing it back to videobuf . Only drivers ( and
* thus applications ) receive modified offsets .
*/
2010-04-23 12:38:37 +04:00
int v4l2_m2m_mmap ( struct file * file , struct v4l2_m2m_ctx * m2m_ctx ,
struct vm_area_struct * vma ) ;
2016-09-08 16:16:27 +03:00
/**
* v4l2_m2m_init ( ) - initialize per - driver m2m data
*
* Usually called from driver ' s probe ( ) function .
*/
2012-09-11 13:32:17 +04:00
struct v4l2_m2m_dev * v4l2_m2m_init ( const struct v4l2_m2m_ops * m2m_ops ) ;
2016-09-08 16:16:27 +03:00
/**
* v4l2_m2m_release ( ) - cleans up and frees a m2m_dev structure
*
* Usually called from driver ' s remove ( ) function .
*/
2010-04-23 12:38:37 +04:00
void v4l2_m2m_release ( struct v4l2_m2m_dev * m2m_dev ) ;
2016-09-08 16:16:27 +03:00
/**
* v4l2_m2m_ctx_init ( ) - allocate and initialize a m2m context
* @ priv - driver ' s instance private data
* @ m2m_dev - a previously initialized m2m_dev struct
* @ vq_init - a callback for queue type - specific initialization function to be
* used for initializing videobuf_queues
*
* Usually called from driver ' s open ( ) function .
*/
2011-01-12 12:50:24 +03:00
struct v4l2_m2m_ctx * v4l2_m2m_ctx_init ( struct v4l2_m2m_dev * m2m_dev ,
void * drv_priv ,
int ( * queue_init ) ( void * priv , struct vb2_queue * src_vq , struct vb2_queue * dst_vq ) ) ;
2013-06-03 11:23:48 +04:00
static inline void v4l2_m2m_set_src_buffered ( struct v4l2_m2m_ctx * m2m_ctx ,
bool buffered )
{
m2m_ctx - > out_q_ctx . buffered = buffered ;
}
static inline void v4l2_m2m_set_dst_buffered ( struct v4l2_m2m_ctx * m2m_ctx ,
bool buffered )
{
m2m_ctx - > cap_q_ctx . buffered = buffered ;
}
2016-09-08 16:16:27 +03:00
/**
* v4l2_m2m_ctx_release ( ) - release m2m context
*
* Usually called from driver ' s release ( ) function .
*/
2010-04-23 12:38:37 +04:00
void v4l2_m2m_ctx_release ( struct v4l2_m2m_ctx * m2m_ctx ) ;
2016-09-08 16:16:27 +03:00
/**
* v4l2_m2m_buf_queue ( ) - add a buffer to the proper ready buffers list .
*
* Call from buf_queue ( ) , videobuf_queue_ops callback .
*/
[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
void v4l2_m2m_buf_queue ( struct v4l2_m2m_ctx * m2m_ctx ,
struct vb2_v4l2_buffer * vbuf ) ;
2010-04-23 12:38:37 +04:00
/**
* v4l2_m2m_num_src_bufs_ready ( ) - return the number of source buffers ready for
* use
2015-08-22 11:34:40 +03:00
*
* @ m2m_ctx : pointer to struct v4l2_m2m_ctx
2010-04-23 12:38:37 +04:00
*/
static inline
unsigned int v4l2_m2m_num_src_bufs_ready ( struct v4l2_m2m_ctx * m2m_ctx )
{
2012-08-31 16:18:04 +04:00
return m2m_ctx - > out_q_ctx . num_rdy ;
2010-04-23 12:38:37 +04:00
}
/**
* v4l2_m2m_num_src_bufs_ready ( ) - return the number of destination buffers
* ready for use
2015-08-22 11:34:40 +03:00
*
* @ m2m_ctx : pointer to struct v4l2_m2m_ctx
2010-04-23 12:38:37 +04:00
*/
static inline
unsigned int v4l2_m2m_num_dst_bufs_ready ( struct v4l2_m2m_ctx * m2m_ctx )
{
2012-08-31 16:18:04 +04:00
return m2m_ctx - > cap_q_ctx . num_rdy ;
2010-04-23 12:38:37 +04:00
}
2016-09-08 16:16:27 +03:00
/**
* v4l2_m2m_next_buf ( ) - return next buffer from the list of ready buffers
*/
2011-01-12 12:50:24 +03:00
void * v4l2_m2m_next_buf ( struct v4l2_m2m_queue_ctx * q_ctx ) ;
2010-04-23 12:38:37 +04:00
/**
* v4l2_m2m_next_src_buf ( ) - return next source buffer from the list of ready
* buffers
2015-08-22 11:34:40 +03:00
*
* @ m2m_ctx : pointer to struct v4l2_m2m_ctx
2010-04-23 12:38:37 +04:00
*/
static inline void * v4l2_m2m_next_src_buf ( struct v4l2_m2m_ctx * m2m_ctx )
{
2011-01-12 12:50:24 +03:00
return v4l2_m2m_next_buf ( & m2m_ctx - > out_q_ctx ) ;
2010-04-23 12:38:37 +04:00
}
/**
* v4l2_m2m_next_dst_buf ( ) - return next destination buffer from the list of
* ready buffers
2015-08-22 11:34:40 +03:00
*
* @ m2m_ctx : pointer to struct v4l2_m2m_ctx
2010-04-23 12:38:37 +04:00
*/
static inline void * v4l2_m2m_next_dst_buf ( struct v4l2_m2m_ctx * m2m_ctx )
{
2011-01-12 12:50:24 +03:00
return v4l2_m2m_next_buf ( & m2m_ctx - > cap_q_ctx ) ;
2010-04-23 12:38:37 +04:00
}
/**
2011-01-12 12:50:24 +03:00
* v4l2_m2m_get_src_vq ( ) - return vb2_queue for source buffers
2015-08-22 11:34:40 +03:00
*
* @ m2m_ctx : pointer to struct v4l2_m2m_ctx
2010-04-23 12:38:37 +04:00
*/
static inline
2011-01-12 12:50:24 +03:00
struct vb2_queue * v4l2_m2m_get_src_vq ( struct v4l2_m2m_ctx * m2m_ctx )
2010-04-23 12:38:37 +04:00
{
2011-01-12 12:50:24 +03:00
return & m2m_ctx - > out_q_ctx . q ;
2010-04-23 12:38:37 +04:00
}
/**
2011-01-12 12:50:24 +03:00
* v4l2_m2m_get_dst_vq ( ) - return vb2_queue for destination buffers
2015-08-22 11:34:40 +03:00
*
* @ m2m_ctx : pointer to struct v4l2_m2m_ctx
2010-04-23 12:38:37 +04:00
*/
static inline
2011-01-12 12:50:24 +03:00
struct vb2_queue * v4l2_m2m_get_dst_vq ( struct v4l2_m2m_ctx * m2m_ctx )
2010-04-23 12:38:37 +04:00
{
2011-01-12 12:50:24 +03:00
return & m2m_ctx - > cap_q_ctx . q ;
2010-04-23 12:38:37 +04:00
}
2016-09-08 16:16:27 +03:00
/**
* v4l2_m2m_buf_remove ( ) - take off a buffer from the list of ready buffers and
* return it
*/
2011-01-12 12:50:24 +03:00
void * v4l2_m2m_buf_remove ( struct v4l2_m2m_queue_ctx * q_ctx ) ;
2010-04-23 12:38:37 +04:00
/**
* v4l2_m2m_src_buf_remove ( ) - take off a source buffer from the list of ready
* buffers and return it
2015-08-22 11:34:40 +03:00
*
* @ m2m_ctx : pointer to struct v4l2_m2m_ctx
2010-04-23 12:38:37 +04:00
*/
static inline void * v4l2_m2m_src_buf_remove ( struct v4l2_m2m_ctx * m2m_ctx )
{
2011-01-12 12:50:24 +03:00
return v4l2_m2m_buf_remove ( & m2m_ctx - > out_q_ctx ) ;
2010-04-23 12:38:37 +04:00
}
/**
* v4l2_m2m_dst_buf_remove ( ) - take off a destination buffer from the list of
* ready buffers and return it
2015-08-22 11:34:40 +03:00
*
* @ m2m_ctx : pointer to struct v4l2_m2m_ctx
2010-04-23 12:38:37 +04:00
*/
static inline void * v4l2_m2m_dst_buf_remove ( struct v4l2_m2m_ctx * m2m_ctx )
{
2011-01-12 12:50:24 +03:00
return v4l2_m2m_buf_remove ( & m2m_ctx - > cap_q_ctx ) ;
2010-04-23 12:38:37 +04:00
}
2013-09-15 01:39:04 +04:00
/* v4l2 ioctl helpers */
int v4l2_m2m_ioctl_reqbufs ( struct file * file , void * priv ,
struct v4l2_requestbuffers * rb ) ;
int v4l2_m2m_ioctl_create_bufs ( struct file * file , void * fh ,
struct v4l2_create_buffers * create ) ;
int v4l2_m2m_ioctl_querybuf ( struct file * file , void * fh ,
struct v4l2_buffer * buf ) ;
int v4l2_m2m_ioctl_expbuf ( struct file * file , void * fh ,
struct v4l2_exportbuffer * eb ) ;
int v4l2_m2m_ioctl_qbuf ( struct file * file , void * fh ,
struct v4l2_buffer * buf ) ;
int v4l2_m2m_ioctl_dqbuf ( struct file * file , void * fh ,
struct v4l2_buffer * buf ) ;
2015-06-05 17:28:50 +03:00
int v4l2_m2m_ioctl_prepare_buf ( struct file * file , void * fh ,
struct v4l2_buffer * buf ) ;
2013-09-15 01:39:04 +04:00
int v4l2_m2m_ioctl_streamon ( struct file * file , void * fh ,
enum v4l2_buf_type type ) ;
int v4l2_m2m_ioctl_streamoff ( struct file * file , void * fh ,
enum v4l2_buf_type type ) ;
int v4l2_m2m_fop_mmap ( struct file * file , struct vm_area_struct * vma ) ;
unsigned int v4l2_m2m_fop_poll ( struct file * file , poll_table * wait ) ;
2010-04-23 12:38:37 +04:00
# endif /* _MEDIA_V4L2_MEM2MEM_H */