@ -70,6 +70,7 @@
* Moved from videodev . h
*/
# define VIDEO_MAX_FRAME 32
# define VIDEO_MAX_PLANES 8
# ifndef __KERNEL__
@ -157,9 +158,23 @@ enum v4l2_buf_type {
/* Experimental */
V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY = 8 ,
# endif
V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE = 9 ,
V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE = 10 ,
V4L2_BUF_TYPE_PRIVATE = 0x80 ,
} ;
# define V4L2_TYPE_IS_MULTIPLANAR(type) \
( ( type ) = = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE \
| | ( type ) = = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE )
# define V4L2_TYPE_IS_OUTPUT(type) \
( ( type ) = = V4L2_BUF_TYPE_VIDEO_OUTPUT \
| | ( type ) = = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE \
| | ( type ) = = V4L2_BUF_TYPE_VIDEO_OVERLAY \
| | ( type ) = = V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY \
| | ( type ) = = V4L2_BUF_TYPE_VBI_OUTPUT \
| | ( type ) = = V4L2_BUF_TYPE_SLICED_VBI_OUTPUT )
enum v4l2_tuner_type {
V4L2_TUNER_RADIO = 1 ,
V4L2_TUNER_ANALOG_TV = 2 ,
@ -245,6 +260,11 @@ struct v4l2_capability {
# define V4L2_CAP_HW_FREQ_SEEK 0x00000400 /* Can do hardware frequency seek */
# define V4L2_CAP_RDS_OUTPUT 0x00000800 /* Is an RDS encoder */
/* Is a video capture device that supports multiplanar formats */
# define V4L2_CAP_VIDEO_CAPTURE_MPLANE 0x00001000
/* Is a video output device that supports multiplanar formats */
# define V4L2_CAP_VIDEO_OUTPUT_MPLANE 0x00002000
# define V4L2_CAP_TUNER 0x00010000 /* has a tuner */
# define V4L2_CAP_AUDIO 0x00020000 /* has audio support */
# define V4L2_CAP_RADIO 0x00040000 /* is a radio device */
@ -517,6 +537,62 @@ struct v4l2_requestbuffers {
__u32 reserved [ 2 ] ;
} ;
/**
* struct v4l2_plane - plane info for multi - planar buffers
* @ bytesused : number of bytes occupied by data in the plane ( payload )
* @ length : size of this plane ( NOT the payload ) in bytes
* @ mem_offset : when memory in the associated struct v4l2_buffer is
* V4L2_MEMORY_MMAP , equals the offset from the start of
* the device memory for this plane ( or is a " cookie " that
* should be passed to mmap ( ) called on the video node )
* @ userptr : when memory is V4L2_MEMORY_USERPTR , a userspace pointer
* pointing to this plane
* @ data_offset : offset in the plane to the start of data ; usually 0 ,
* unless there is a header in front of the data
*
* Multi - planar buffers consist of one or more planes , e . g . an YCbCr buffer
* with two planes can have one plane for Y , and another for interleaved CbCr
* components . Each plane can reside in a separate memory buffer , or even in
* a completely separate memory node ( e . g . in embedded devices ) .
*/
struct v4l2_plane {
__u32 bytesused ;
__u32 length ;
union {
__u32 mem_offset ;
unsigned long userptr ;
} m ;
__u32 data_offset ;
__u32 reserved [ 11 ] ;
} ;
/**
* struct v4l2_buffer - video buffer info
* @ index : id number of the buffer
* @ type : buffer type ( type = = * _MPLANE for multiplanar buffers )
* @ bytesused : number of bytes occupied by data in the buffer ( payload ) ;
* unused ( set to 0 ) for multiplanar buffers
* @ flags : buffer informational flags
* @ field : field order of the image in the buffer
* @ timestamp : frame timestamp
* @ timecode : frame timecode
* @ sequence : sequence count of this frame
* @ memory : the method , in which the actual video data is passed
* @ offset : for non - multiplanar buffers with memory = = V4L2_MEMORY_MMAP ;
* offset from the start of the device memory for this plane ,
* ( or a " cookie " that should be passed to mmap ( ) as offset )
* @ userptr : for non - multiplanar buffers with memory = = V4L2_MEMORY_USERPTR ;
* a userspace pointer pointing to this buffer
* @ planes : for multiplanar buffers ; userspace pointer to the array of plane
* info structs for this buffer
* @ length : size in bytes of the buffer ( NOT its payload ) for single - plane
* buffers ( when type ! = * _MPLANE ) ; number of elements in the
* planes array for multi - plane buffers
* @ input : input number from which the video data has has been captured
*
* Contains data exchanged by application and driver using one of the Streaming
* I / O methods .
*/
struct v4l2_buffer {
__u32 index ;
enum v4l2_buf_type type ;
@ -532,6 +608,7 @@ struct v4l2_buffer {
union {
__u32 offset ;
unsigned long userptr ;
struct v4l2_plane * planes ;
} m ;
__u32 length ;
__u32 input ;
@ -1622,12 +1699,56 @@ struct v4l2_mpeg_vbi_fmt_ivtv {
* A G G R E G A T E S T R U C T U R E S
*/
/* Stream data format
/**
* struct v4l2_plane_pix_format - additional , per - plane format definition
* @ sizeimage : maximum size in bytes required for data , for which
* this plane will be used
* @ bytesperline : distance in bytes between the leftmost pixels in two
* adjacent lines
*/
struct v4l2_plane_pix_format {
__u32 sizeimage ;
__u16 bytesperline ;
__u16 reserved [ 7 ] ;
} __attribute__ ( ( packed ) ) ;
/**
* struct v4l2_pix_format_mplane - multiplanar format definition
* @ width : image width in pixels
* @ height : image height in pixels
* @ pixelformat : little endian four character code ( fourcc )
* @ field : field order ( for interlaced video )
* @ colorspace : supplemental to pixelformat
* @ plane_fmt : per - plane information
* @ num_planes : number of planes for this format
*/
struct v4l2_pix_format_mplane {
__u32 width ;
__u32 height ;
__u32 pixelformat ;
enum v4l2_field field ;
enum v4l2_colorspace colorspace ;
struct v4l2_plane_pix_format plane_fmt [ VIDEO_MAX_PLANES ] ;
__u8 num_planes ;
__u8 reserved [ 11 ] ;
} __attribute__ ( ( packed ) ) ;
/**
* struct v4l2_format - stream data format
* @ type : type of the data stream
* @ pix : definition of an image format
* @ pix_mp : definition of a multiplanar image format
* @ win : definition of an overlaid image
* @ vbi : raw VBI capture or output parameters
* @ sliced : sliced VBI capture or output parameters
* @ raw_data : placeholder for future extensions and custom formats
*/
struct v4l2_format {
enum v4l2_buf_type type ;
union {
struct v4l2_pix_format pix ; /* V4L2_BUF_TYPE_VIDEO_CAPTURE */
struct v4l2_pix_format_mplane pix_mp ; /* V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE */
struct v4l2_window win ; /* V4L2_BUF_TYPE_VIDEO_OVERLAY */
struct v4l2_vbi_format vbi ; /* V4L2_BUF_TYPE_VBI_CAPTURE */
struct v4l2_sliced_vbi_format sliced ; /* V4L2_BUF_TYPE_SLICED_VBI_CAPTURE */
@ -1635,7 +1756,6 @@ struct v4l2_format {
} fmt ;
} ;
/* Stream type-dependent parameters
*/
struct v4l2_streamparm {