|
@@ -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 {
|