xref: /linux/include/uapi/linux/videodev2.h (revision b799d09a157da71566e8013a62073435550cab6d)
1607ca46eSDavid Howells /*
2607ca46eSDavid Howells  *  Video for Linux Two header file
3607ca46eSDavid Howells  *
4607ca46eSDavid Howells  *  Copyright (C) 1999-2012 the contributors
5607ca46eSDavid Howells  *
6607ca46eSDavid Howells  *  This program is free software; you can redistribute it and/or modify
7607ca46eSDavid Howells  *  it under the terms of the GNU General Public License as published by
8607ca46eSDavid Howells  *  the Free Software Foundation; either version 2 of the License, or
9607ca46eSDavid Howells  *  (at your option) any later version.
10607ca46eSDavid Howells  *
11607ca46eSDavid Howells  *  This program is distributed in the hope that it will be useful,
12607ca46eSDavid Howells  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13607ca46eSDavid Howells  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14607ca46eSDavid Howells  *  GNU General Public License for more details.
15607ca46eSDavid Howells  *
16607ca46eSDavid Howells  *  Alternatively you can redistribute this file under the terms of the
17607ca46eSDavid Howells  *  BSD license as stated below:
18607ca46eSDavid Howells  *
19607ca46eSDavid Howells  *  Redistribution and use in source and binary forms, with or without
20607ca46eSDavid Howells  *  modification, are permitted provided that the following conditions
21607ca46eSDavid Howells  *  are met:
22607ca46eSDavid Howells  *  1. Redistributions of source code must retain the above copyright
23607ca46eSDavid Howells  *     notice, this list of conditions and the following disclaimer.
24607ca46eSDavid Howells  *  2. Redistributions in binary form must reproduce the above copyright
25607ca46eSDavid Howells  *     notice, this list of conditions and the following disclaimer in
26607ca46eSDavid Howells  *     the documentation and/or other materials provided with the
27607ca46eSDavid Howells  *     distribution.
28607ca46eSDavid Howells  *  3. The names of its contributors may not be used to endorse or promote
29607ca46eSDavid Howells  *     products derived from this software without specific prior written
30607ca46eSDavid Howells  *     permission.
31607ca46eSDavid Howells  *
32607ca46eSDavid Howells  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
33607ca46eSDavid Howells  *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
34607ca46eSDavid Howells  *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
35607ca46eSDavid Howells  *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
36607ca46eSDavid Howells  *  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
37607ca46eSDavid Howells  *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
38607ca46eSDavid Howells  *  TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
39607ca46eSDavid Howells  *  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
40607ca46eSDavid Howells  *  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
41607ca46eSDavid Howells  *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
42607ca46eSDavid Howells  *  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
43607ca46eSDavid Howells  *
44607ca46eSDavid Howells  *	Header file for v4l or V4L2 drivers and applications
45607ca46eSDavid Howells  * with public API.
46607ca46eSDavid Howells  * All kernel-specific stuff were moved to media/v4l2-dev.h, so
47607ca46eSDavid Howells  * no #if __KERNEL tests are allowed here
48607ca46eSDavid Howells  *
49607ca46eSDavid Howells  *	See http://linuxtv.org for more info
50607ca46eSDavid Howells  *
51607ca46eSDavid Howells  *	Author: Bill Dirks <bill@thedirks.org>
52607ca46eSDavid Howells  *		Justin Schoeman
53607ca46eSDavid Howells  *              Hans Verkuil <hverkuil@xs4all.nl>
54607ca46eSDavid Howells  *		et al.
55607ca46eSDavid Howells  */
56607ca46eSDavid Howells #ifndef _UAPI__LINUX_VIDEODEV2_H
57607ca46eSDavid Howells #define _UAPI__LINUX_VIDEODEV2_H
58607ca46eSDavid Howells 
59607ca46eSDavid Howells #ifndef __KERNEL__
60607ca46eSDavid Howells #include <sys/time.h>
61607ca46eSDavid Howells #endif
62607ca46eSDavid Howells #include <linux/compiler.h>
63607ca46eSDavid Howells #include <linux/ioctl.h>
64607ca46eSDavid Howells #include <linux/types.h>
65607ca46eSDavid Howells #include <linux/v4l2-common.h>
66607ca46eSDavid Howells #include <linux/v4l2-controls.h>
67607ca46eSDavid Howells 
68607ca46eSDavid Howells /*
69607ca46eSDavid Howells  * Common stuff for both V4L1 and V4L2
70607ca46eSDavid Howells  * Moved from videodev.h
71607ca46eSDavid Howells  */
72607ca46eSDavid Howells #define VIDEO_MAX_FRAME               32
73607ca46eSDavid Howells #define VIDEO_MAX_PLANES               8
74607ca46eSDavid Howells 
75607ca46eSDavid Howells #ifndef __KERNEL__
76607ca46eSDavid Howells 
77607ca46eSDavid Howells /* These defines are V4L1 specific and should not be used with the V4L2 API!
78607ca46eSDavid Howells    They will be removed from this header in the future. */
79607ca46eSDavid Howells 
80607ca46eSDavid Howells #define VID_TYPE_CAPTURE	1	/* Can capture */
81607ca46eSDavid Howells #define VID_TYPE_TUNER		2	/* Can tune */
82607ca46eSDavid Howells #define VID_TYPE_TELETEXT	4	/* Does teletext */
83607ca46eSDavid Howells #define VID_TYPE_OVERLAY	8	/* Overlay onto frame buffer */
84607ca46eSDavid Howells #define VID_TYPE_CHROMAKEY	16	/* Overlay by chromakey */
85607ca46eSDavid Howells #define VID_TYPE_CLIPPING	32	/* Can clip */
86607ca46eSDavid Howells #define VID_TYPE_FRAMERAM	64	/* Uses the frame buffer memory */
87607ca46eSDavid Howells #define VID_TYPE_SCALES		128	/* Scalable */
88607ca46eSDavid Howells #define VID_TYPE_MONOCHROME	256	/* Monochrome only */
89607ca46eSDavid Howells #define VID_TYPE_SUBCAPTURE	512	/* Can capture subareas of the image */
90607ca46eSDavid Howells #define VID_TYPE_MPEG_DECODER	1024	/* Can decode MPEG streams */
91607ca46eSDavid Howells #define VID_TYPE_MPEG_ENCODER	2048	/* Can encode MPEG streams */
92607ca46eSDavid Howells #define VID_TYPE_MJPEG_DECODER	4096	/* Can decode MJPEG streams */
93607ca46eSDavid Howells #define VID_TYPE_MJPEG_ENCODER	8192	/* Can encode MJPEG streams */
94607ca46eSDavid Howells #endif
95607ca46eSDavid Howells 
96607ca46eSDavid Howells /*
97607ca46eSDavid Howells  *	M I S C E L L A N E O U S
98607ca46eSDavid Howells  */
99607ca46eSDavid Howells 
100607ca46eSDavid Howells /*  Four-character-code (FOURCC) */
101607ca46eSDavid Howells #define v4l2_fourcc(a, b, c, d)\
102607ca46eSDavid Howells 	((__u32)(a) | ((__u32)(b) << 8) | ((__u32)(c) << 16) | ((__u32)(d) << 24))
103607ca46eSDavid Howells 
104607ca46eSDavid Howells /*
105607ca46eSDavid Howells  *	E N U M S
106607ca46eSDavid Howells  */
107607ca46eSDavid Howells enum v4l2_field {
108607ca46eSDavid Howells 	V4L2_FIELD_ANY           = 0, /* driver can choose from none,
109607ca46eSDavid Howells 					 top, bottom, interlaced
110607ca46eSDavid Howells 					 depending on whatever it thinks
111607ca46eSDavid Howells 					 is approximate ... */
112607ca46eSDavid Howells 	V4L2_FIELD_NONE          = 1, /* this device has no fields ... */
113607ca46eSDavid Howells 	V4L2_FIELD_TOP           = 2, /* top field only */
114607ca46eSDavid Howells 	V4L2_FIELD_BOTTOM        = 3, /* bottom field only */
115607ca46eSDavid Howells 	V4L2_FIELD_INTERLACED    = 4, /* both fields interlaced */
116607ca46eSDavid Howells 	V4L2_FIELD_SEQ_TB        = 5, /* both fields sequential into one
117607ca46eSDavid Howells 					 buffer, top-bottom order */
118607ca46eSDavid Howells 	V4L2_FIELD_SEQ_BT        = 6, /* same as above + bottom-top order */
119607ca46eSDavid Howells 	V4L2_FIELD_ALTERNATE     = 7, /* both fields alternating into
120607ca46eSDavid Howells 					 separate buffers */
121607ca46eSDavid Howells 	V4L2_FIELD_INTERLACED_TB = 8, /* both fields interlaced, top field
122607ca46eSDavid Howells 					 first and the top field is
123607ca46eSDavid Howells 					 transmitted first */
124607ca46eSDavid Howells 	V4L2_FIELD_INTERLACED_BT = 9, /* both fields interlaced, top field
125607ca46eSDavid Howells 					 first and the bottom field is
126607ca46eSDavid Howells 					 transmitted first */
127607ca46eSDavid Howells };
128607ca46eSDavid Howells #define V4L2_FIELD_HAS_TOP(field)	\
129607ca46eSDavid Howells 	((field) == V4L2_FIELD_TOP 	||\
130607ca46eSDavid Howells 	 (field) == V4L2_FIELD_INTERLACED ||\
131607ca46eSDavid Howells 	 (field) == V4L2_FIELD_INTERLACED_TB ||\
132607ca46eSDavid Howells 	 (field) == V4L2_FIELD_INTERLACED_BT ||\
133607ca46eSDavid Howells 	 (field) == V4L2_FIELD_SEQ_TB	||\
134607ca46eSDavid Howells 	 (field) == V4L2_FIELD_SEQ_BT)
135607ca46eSDavid Howells #define V4L2_FIELD_HAS_BOTTOM(field)	\
136607ca46eSDavid Howells 	((field) == V4L2_FIELD_BOTTOM 	||\
137607ca46eSDavid Howells 	 (field) == V4L2_FIELD_INTERLACED ||\
138607ca46eSDavid Howells 	 (field) == V4L2_FIELD_INTERLACED_TB ||\
139607ca46eSDavid Howells 	 (field) == V4L2_FIELD_INTERLACED_BT ||\
140607ca46eSDavid Howells 	 (field) == V4L2_FIELD_SEQ_TB	||\
141607ca46eSDavid Howells 	 (field) == V4L2_FIELD_SEQ_BT)
142607ca46eSDavid Howells #define V4L2_FIELD_HAS_BOTH(field)	\
143607ca46eSDavid Howells 	((field) == V4L2_FIELD_INTERLACED ||\
144607ca46eSDavid Howells 	 (field) == V4L2_FIELD_INTERLACED_TB ||\
145607ca46eSDavid Howells 	 (field) == V4L2_FIELD_INTERLACED_BT ||\
146607ca46eSDavid Howells 	 (field) == V4L2_FIELD_SEQ_TB ||\
147607ca46eSDavid Howells 	 (field) == V4L2_FIELD_SEQ_BT)
148607ca46eSDavid Howells 
149607ca46eSDavid Howells enum v4l2_buf_type {
150607ca46eSDavid Howells 	V4L2_BUF_TYPE_VIDEO_CAPTURE        = 1,
151607ca46eSDavid Howells 	V4L2_BUF_TYPE_VIDEO_OUTPUT         = 2,
152607ca46eSDavid Howells 	V4L2_BUF_TYPE_VIDEO_OVERLAY        = 3,
153607ca46eSDavid Howells 	V4L2_BUF_TYPE_VBI_CAPTURE          = 4,
154607ca46eSDavid Howells 	V4L2_BUF_TYPE_VBI_OUTPUT           = 5,
155607ca46eSDavid Howells 	V4L2_BUF_TYPE_SLICED_VBI_CAPTURE   = 6,
156607ca46eSDavid Howells 	V4L2_BUF_TYPE_SLICED_VBI_OUTPUT    = 7,
157607ca46eSDavid Howells #if 1
158607ca46eSDavid Howells 	/* Experimental */
159607ca46eSDavid Howells 	V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY = 8,
160607ca46eSDavid Howells #endif
161607ca46eSDavid Howells 	V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE = 9,
162607ca46eSDavid Howells 	V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE  = 10,
163607ca46eSDavid Howells 	/* Deprecated, do not use */
164607ca46eSDavid Howells 	V4L2_BUF_TYPE_PRIVATE              = 0x80,
165607ca46eSDavid Howells };
166607ca46eSDavid Howells 
167607ca46eSDavid Howells #define V4L2_TYPE_IS_MULTIPLANAR(type)			\
168607ca46eSDavid Howells 	((type) == V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE	\
169607ca46eSDavid Howells 	 || (type) == V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE)
170607ca46eSDavid Howells 
171607ca46eSDavid Howells #define V4L2_TYPE_IS_OUTPUT(type)				\
172607ca46eSDavid Howells 	((type) == V4L2_BUF_TYPE_VIDEO_OUTPUT			\
173607ca46eSDavid Howells 	 || (type) == V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE		\
174607ca46eSDavid Howells 	 || (type) == V4L2_BUF_TYPE_VIDEO_OVERLAY		\
175607ca46eSDavid Howells 	 || (type) == V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY	\
176607ca46eSDavid Howells 	 || (type) == V4L2_BUF_TYPE_VBI_OUTPUT			\
177607ca46eSDavid Howells 	 || (type) == V4L2_BUF_TYPE_SLICED_VBI_OUTPUT)
178607ca46eSDavid Howells 
179607ca46eSDavid Howells enum v4l2_tuner_type {
180607ca46eSDavid Howells 	V4L2_TUNER_RADIO	     = 1,
181607ca46eSDavid Howells 	V4L2_TUNER_ANALOG_TV	     = 2,
182607ca46eSDavid Howells 	V4L2_TUNER_DIGITAL_TV	     = 3,
183607ca46eSDavid Howells };
184607ca46eSDavid Howells 
185607ca46eSDavid Howells enum v4l2_memory {
186607ca46eSDavid Howells 	V4L2_MEMORY_MMAP             = 1,
187607ca46eSDavid Howells 	V4L2_MEMORY_USERPTR          = 2,
188607ca46eSDavid Howells 	V4L2_MEMORY_OVERLAY          = 3,
189051c7788SSumit Semwal 	V4L2_MEMORY_DMABUF           = 4,
190607ca46eSDavid Howells };
191607ca46eSDavid Howells 
192607ca46eSDavid Howells /* see also http://vektor.theorem.ca/graphics/ycbcr/ */
193607ca46eSDavid Howells enum v4l2_colorspace {
194607ca46eSDavid Howells 	/* ITU-R 601 -- broadcast NTSC/PAL */
195607ca46eSDavid Howells 	V4L2_COLORSPACE_SMPTE170M     = 1,
196607ca46eSDavid Howells 
197607ca46eSDavid Howells 	/* 1125-Line (US) HDTV */
198607ca46eSDavid Howells 	V4L2_COLORSPACE_SMPTE240M     = 2,
199607ca46eSDavid Howells 
200607ca46eSDavid Howells 	/* HD and modern captures. */
201607ca46eSDavid Howells 	V4L2_COLORSPACE_REC709        = 3,
202607ca46eSDavid Howells 
203607ca46eSDavid Howells 	/* broken BT878 extents (601, luma range 16-253 instead of 16-235) */
204607ca46eSDavid Howells 	V4L2_COLORSPACE_BT878         = 4,
205607ca46eSDavid Howells 
206607ca46eSDavid Howells 	/* These should be useful.  Assume 601 extents. */
207607ca46eSDavid Howells 	V4L2_COLORSPACE_470_SYSTEM_M  = 5,
208607ca46eSDavid Howells 	V4L2_COLORSPACE_470_SYSTEM_BG = 6,
209607ca46eSDavid Howells 
210607ca46eSDavid Howells 	/* I know there will be cameras that send this.  So, this is
211607ca46eSDavid Howells 	 * unspecified chromaticities and full 0-255 on each of the
212607ca46eSDavid Howells 	 * Y'CbCr components
213607ca46eSDavid Howells 	 */
214607ca46eSDavid Howells 	V4L2_COLORSPACE_JPEG          = 7,
215607ca46eSDavid Howells 
216607ca46eSDavid Howells 	/* For RGB colourspaces, this is probably a good start. */
217607ca46eSDavid Howells 	V4L2_COLORSPACE_SRGB          = 8,
218607ca46eSDavid Howells };
219607ca46eSDavid Howells 
220607ca46eSDavid Howells enum v4l2_priority {
221607ca46eSDavid Howells 	V4L2_PRIORITY_UNSET       = 0,  /* not initialized */
222607ca46eSDavid Howells 	V4L2_PRIORITY_BACKGROUND  = 1,
223607ca46eSDavid Howells 	V4L2_PRIORITY_INTERACTIVE = 2,
224607ca46eSDavid Howells 	V4L2_PRIORITY_RECORD      = 3,
225607ca46eSDavid Howells 	V4L2_PRIORITY_DEFAULT     = V4L2_PRIORITY_INTERACTIVE,
226607ca46eSDavid Howells };
227607ca46eSDavid Howells 
228607ca46eSDavid Howells struct v4l2_rect {
229607ca46eSDavid Howells 	__s32   left;
230607ca46eSDavid Howells 	__s32   top;
231607ca46eSDavid Howells 	__s32   width;
232607ca46eSDavid Howells 	__s32   height;
233607ca46eSDavid Howells };
234607ca46eSDavid Howells 
235607ca46eSDavid Howells struct v4l2_fract {
236607ca46eSDavid Howells 	__u32   numerator;
237607ca46eSDavid Howells 	__u32   denominator;
238607ca46eSDavid Howells };
239607ca46eSDavid Howells 
240607ca46eSDavid Howells /**
241607ca46eSDavid Howells   * struct v4l2_capability - Describes V4L2 device caps returned by VIDIOC_QUERYCAP
242607ca46eSDavid Howells   *
243607ca46eSDavid Howells   * @driver:	   name of the driver module (e.g. "bttv")
244607ca46eSDavid Howells   * @card:	   name of the card (e.g. "Hauppauge WinTV")
245607ca46eSDavid Howells   * @bus_info:	   name of the bus (e.g. "PCI:" + pci_name(pci_dev) )
246607ca46eSDavid Howells   * @version:	   KERNEL_VERSION
247607ca46eSDavid Howells   * @capabilities: capabilities of the physical device as a whole
248607ca46eSDavid Howells   * @device_caps:  capabilities accessed via this particular device (node)
249607ca46eSDavid Howells   * @reserved:	   reserved fields for future extensions
250607ca46eSDavid Howells   */
251607ca46eSDavid Howells struct v4l2_capability {
252607ca46eSDavid Howells 	__u8	driver[16];
253607ca46eSDavid Howells 	__u8	card[32];
254607ca46eSDavid Howells 	__u8	bus_info[32];
255607ca46eSDavid Howells 	__u32   version;
256607ca46eSDavid Howells 	__u32	capabilities;
257607ca46eSDavid Howells 	__u32	device_caps;
258607ca46eSDavid Howells 	__u32	reserved[3];
259607ca46eSDavid Howells };
260607ca46eSDavid Howells 
261607ca46eSDavid Howells /* Values for 'capabilities' field */
262607ca46eSDavid Howells #define V4L2_CAP_VIDEO_CAPTURE		0x00000001  /* Is a video capture device */
263607ca46eSDavid Howells #define V4L2_CAP_VIDEO_OUTPUT		0x00000002  /* Is a video output device */
264607ca46eSDavid Howells #define V4L2_CAP_VIDEO_OVERLAY		0x00000004  /* Can do video overlay */
265607ca46eSDavid Howells #define V4L2_CAP_VBI_CAPTURE		0x00000010  /* Is a raw VBI capture device */
266607ca46eSDavid Howells #define V4L2_CAP_VBI_OUTPUT		0x00000020  /* Is a raw VBI output device */
267607ca46eSDavid Howells #define V4L2_CAP_SLICED_VBI_CAPTURE	0x00000040  /* Is a sliced VBI capture device */
268607ca46eSDavid Howells #define V4L2_CAP_SLICED_VBI_OUTPUT	0x00000080  /* Is a sliced VBI output device */
269607ca46eSDavid Howells #define V4L2_CAP_RDS_CAPTURE		0x00000100  /* RDS data capture */
270607ca46eSDavid Howells #define V4L2_CAP_VIDEO_OUTPUT_OVERLAY	0x00000200  /* Can do video output overlay */
271607ca46eSDavid Howells #define V4L2_CAP_HW_FREQ_SEEK		0x00000400  /* Can do hardware frequency seek  */
272607ca46eSDavid Howells #define V4L2_CAP_RDS_OUTPUT		0x00000800  /* Is an RDS encoder */
273607ca46eSDavid Howells 
274607ca46eSDavid Howells /* Is a video capture device that supports multiplanar formats */
275607ca46eSDavid Howells #define V4L2_CAP_VIDEO_CAPTURE_MPLANE	0x00001000
276607ca46eSDavid Howells /* Is a video output device that supports multiplanar formats */
277607ca46eSDavid Howells #define V4L2_CAP_VIDEO_OUTPUT_MPLANE	0x00002000
278607ca46eSDavid Howells /* Is a video mem-to-mem device that supports multiplanar formats */
279607ca46eSDavid Howells #define V4L2_CAP_VIDEO_M2M_MPLANE	0x00004000
280607ca46eSDavid Howells /* Is a video mem-to-mem device */
281607ca46eSDavid Howells #define V4L2_CAP_VIDEO_M2M		0x00008000
282607ca46eSDavid Howells 
283607ca46eSDavid Howells #define V4L2_CAP_TUNER			0x00010000  /* has a tuner */
284607ca46eSDavid Howells #define V4L2_CAP_AUDIO			0x00020000  /* has audio support */
285607ca46eSDavid Howells #define V4L2_CAP_RADIO			0x00040000  /* is a radio device */
286607ca46eSDavid Howells #define V4L2_CAP_MODULATOR		0x00080000  /* has a modulator */
287607ca46eSDavid Howells 
288607ca46eSDavid Howells #define V4L2_CAP_READWRITE              0x01000000  /* read/write systemcalls */
289607ca46eSDavid Howells #define V4L2_CAP_ASYNCIO                0x02000000  /* async I/O */
290607ca46eSDavid Howells #define V4L2_CAP_STREAMING              0x04000000  /* streaming I/O ioctls */
291607ca46eSDavid Howells 
292607ca46eSDavid Howells #define V4L2_CAP_DEVICE_CAPS            0x80000000  /* sets device capabilities field */
293607ca46eSDavid Howells 
294607ca46eSDavid Howells /*
295607ca46eSDavid Howells  *	V I D E O   I M A G E   F O R M A T
296607ca46eSDavid Howells  */
297607ca46eSDavid Howells struct v4l2_pix_format {
298607ca46eSDavid Howells 	__u32         		width;
299607ca46eSDavid Howells 	__u32			height;
300607ca46eSDavid Howells 	__u32			pixelformat;
301607ca46eSDavid Howells 	__u32			field;		/* enum v4l2_field */
302607ca46eSDavid Howells 	__u32            	bytesperline;	/* for padding, zero if unused */
303607ca46eSDavid Howells 	__u32          		sizeimage;
304607ca46eSDavid Howells 	__u32			colorspace;	/* enum v4l2_colorspace */
305607ca46eSDavid Howells 	__u32			priv;		/* private data, depends on pixelformat */
306607ca46eSDavid Howells };
307607ca46eSDavid Howells 
308607ca46eSDavid Howells /*      Pixel format         FOURCC                          depth  Description  */
309607ca46eSDavid Howells 
310607ca46eSDavid Howells /* RGB formats */
311607ca46eSDavid Howells #define V4L2_PIX_FMT_RGB332  v4l2_fourcc('R', 'G', 'B', '1') /*  8  RGB-3-3-2     */
312607ca46eSDavid Howells #define V4L2_PIX_FMT_RGB444  v4l2_fourcc('R', '4', '4', '4') /* 16  xxxxrrrr ggggbbbb */
313607ca46eSDavid Howells #define V4L2_PIX_FMT_RGB555  v4l2_fourcc('R', 'G', 'B', 'O') /* 16  RGB-5-5-5     */
314607ca46eSDavid Howells #define V4L2_PIX_FMT_RGB565  v4l2_fourcc('R', 'G', 'B', 'P') /* 16  RGB-5-6-5     */
315607ca46eSDavid Howells #define V4L2_PIX_FMT_RGB555X v4l2_fourcc('R', 'G', 'B', 'Q') /* 16  RGB-5-5-5 BE  */
316607ca46eSDavid Howells #define V4L2_PIX_FMT_RGB565X v4l2_fourcc('R', 'G', 'B', 'R') /* 16  RGB-5-6-5 BE  */
317607ca46eSDavid Howells #define V4L2_PIX_FMT_BGR666  v4l2_fourcc('B', 'G', 'R', 'H') /* 18  BGR-6-6-6	  */
318607ca46eSDavid Howells #define V4L2_PIX_FMT_BGR24   v4l2_fourcc('B', 'G', 'R', '3') /* 24  BGR-8-8-8     */
319607ca46eSDavid Howells #define V4L2_PIX_FMT_RGB24   v4l2_fourcc('R', 'G', 'B', '3') /* 24  RGB-8-8-8     */
320607ca46eSDavid Howells #define V4L2_PIX_FMT_BGR32   v4l2_fourcc('B', 'G', 'R', '4') /* 32  BGR-8-8-8-8   */
321607ca46eSDavid Howells #define V4L2_PIX_FMT_RGB32   v4l2_fourcc('R', 'G', 'B', '4') /* 32  RGB-8-8-8-8   */
322607ca46eSDavid Howells 
323607ca46eSDavid Howells /* Grey formats */
324607ca46eSDavid Howells #define V4L2_PIX_FMT_GREY    v4l2_fourcc('G', 'R', 'E', 'Y') /*  8  Greyscale     */
325607ca46eSDavid Howells #define V4L2_PIX_FMT_Y4      v4l2_fourcc('Y', '0', '4', ' ') /*  4  Greyscale     */
326607ca46eSDavid Howells #define V4L2_PIX_FMT_Y6      v4l2_fourcc('Y', '0', '6', ' ') /*  6  Greyscale     */
327607ca46eSDavid Howells #define V4L2_PIX_FMT_Y10     v4l2_fourcc('Y', '1', '0', ' ') /* 10  Greyscale     */
328607ca46eSDavid Howells #define V4L2_PIX_FMT_Y12     v4l2_fourcc('Y', '1', '2', ' ') /* 12  Greyscale     */
329607ca46eSDavid Howells #define V4L2_PIX_FMT_Y16     v4l2_fourcc('Y', '1', '6', ' ') /* 16  Greyscale     */
330607ca46eSDavid Howells 
331607ca46eSDavid Howells /* Grey bit-packed formats */
332607ca46eSDavid Howells #define V4L2_PIX_FMT_Y10BPACK    v4l2_fourcc('Y', '1', '0', 'B') /* 10  Greyscale bit-packed */
333607ca46eSDavid Howells 
334607ca46eSDavid Howells /* Palette formats */
335607ca46eSDavid Howells #define V4L2_PIX_FMT_PAL8    v4l2_fourcc('P', 'A', 'L', '8') /*  8  8-bit palette */
336607ca46eSDavid Howells 
337607ca46eSDavid Howells /* Luminance+Chrominance formats */
338607ca46eSDavid Howells #define V4L2_PIX_FMT_YVU410  v4l2_fourcc('Y', 'V', 'U', '9') /*  9  YVU 4:1:0     */
339607ca46eSDavid Howells #define V4L2_PIX_FMT_YVU420  v4l2_fourcc('Y', 'V', '1', '2') /* 12  YVU 4:2:0     */
340607ca46eSDavid Howells #define V4L2_PIX_FMT_YUYV    v4l2_fourcc('Y', 'U', 'Y', 'V') /* 16  YUV 4:2:2     */
341607ca46eSDavid Howells #define V4L2_PIX_FMT_YYUV    v4l2_fourcc('Y', 'Y', 'U', 'V') /* 16  YUV 4:2:2     */
342607ca46eSDavid Howells #define V4L2_PIX_FMT_YVYU    v4l2_fourcc('Y', 'V', 'Y', 'U') /* 16 YVU 4:2:2 */
343607ca46eSDavid Howells #define V4L2_PIX_FMT_UYVY    v4l2_fourcc('U', 'Y', 'V', 'Y') /* 16  YUV 4:2:2     */
344607ca46eSDavid Howells #define V4L2_PIX_FMT_VYUY    v4l2_fourcc('V', 'Y', 'U', 'Y') /* 16  YUV 4:2:2     */
345607ca46eSDavid Howells #define V4L2_PIX_FMT_YUV422P v4l2_fourcc('4', '2', '2', 'P') /* 16  YVU422 planar */
346607ca46eSDavid Howells #define V4L2_PIX_FMT_YUV411P v4l2_fourcc('4', '1', '1', 'P') /* 16  YVU411 planar */
347607ca46eSDavid Howells #define V4L2_PIX_FMT_Y41P    v4l2_fourcc('Y', '4', '1', 'P') /* 12  YUV 4:1:1     */
348607ca46eSDavid Howells #define V4L2_PIX_FMT_YUV444  v4l2_fourcc('Y', '4', '4', '4') /* 16  xxxxyyyy uuuuvvvv */
349607ca46eSDavid Howells #define V4L2_PIX_FMT_YUV555  v4l2_fourcc('Y', 'U', 'V', 'O') /* 16  YUV-5-5-5     */
350607ca46eSDavid Howells #define V4L2_PIX_FMT_YUV565  v4l2_fourcc('Y', 'U', 'V', 'P') /* 16  YUV-5-6-5     */
351607ca46eSDavid Howells #define V4L2_PIX_FMT_YUV32   v4l2_fourcc('Y', 'U', 'V', '4') /* 32  YUV-8-8-8-8   */
352607ca46eSDavid Howells #define V4L2_PIX_FMT_YUV410  v4l2_fourcc('Y', 'U', 'V', '9') /*  9  YUV 4:1:0     */
353607ca46eSDavid Howells #define V4L2_PIX_FMT_YUV420  v4l2_fourcc('Y', 'U', '1', '2') /* 12  YUV 4:2:0     */
354607ca46eSDavid Howells #define V4L2_PIX_FMT_HI240   v4l2_fourcc('H', 'I', '2', '4') /*  8  8-bit color   */
355607ca46eSDavid Howells #define V4L2_PIX_FMT_HM12    v4l2_fourcc('H', 'M', '1', '2') /*  8  YUV 4:2:0 16x16 macroblocks */
356607ca46eSDavid Howells #define V4L2_PIX_FMT_M420    v4l2_fourcc('M', '4', '2', '0') /* 12  YUV 4:2:0 2 lines y, 1 line uv interleaved */
357607ca46eSDavid Howells 
358607ca46eSDavid Howells /* two planes -- one Y, one Cr + Cb interleaved  */
359607ca46eSDavid Howells #define V4L2_PIX_FMT_NV12    v4l2_fourcc('N', 'V', '1', '2') /* 12  Y/CbCr 4:2:0  */
360607ca46eSDavid Howells #define V4L2_PIX_FMT_NV21    v4l2_fourcc('N', 'V', '2', '1') /* 12  Y/CrCb 4:2:0  */
361607ca46eSDavid Howells #define V4L2_PIX_FMT_NV16    v4l2_fourcc('N', 'V', '1', '6') /* 16  Y/CbCr 4:2:2  */
362607ca46eSDavid Howells #define V4L2_PIX_FMT_NV61    v4l2_fourcc('N', 'V', '6', '1') /* 16  Y/CrCb 4:2:2  */
363607ca46eSDavid Howells #define V4L2_PIX_FMT_NV24    v4l2_fourcc('N', 'V', '2', '4') /* 24  Y/CbCr 4:4:4  */
364607ca46eSDavid Howells #define V4L2_PIX_FMT_NV42    v4l2_fourcc('N', 'V', '4', '2') /* 24  Y/CrCb 4:4:4  */
365607ca46eSDavid Howells 
366607ca46eSDavid Howells /* two non contiguous planes - one Y, one Cr + Cb interleaved  */
367607ca46eSDavid Howells #define V4L2_PIX_FMT_NV12M   v4l2_fourcc('N', 'M', '1', '2') /* 12  Y/CbCr 4:2:0  */
368607ca46eSDavid Howells #define V4L2_PIX_FMT_NV21M   v4l2_fourcc('N', 'M', '2', '1') /* 21  Y/CrCb 4:2:0  */
369607ca46eSDavid Howells #define V4L2_PIX_FMT_NV12MT  v4l2_fourcc('T', 'M', '1', '2') /* 12  Y/CbCr 4:2:0 64x32 macroblocks */
370607ca46eSDavid Howells #define V4L2_PIX_FMT_NV12MT_16X16 v4l2_fourcc('V', 'M', '1', '2') /* 12  Y/CbCr 4:2:0 16x16 macroblocks */
371607ca46eSDavid Howells 
372607ca46eSDavid Howells /* three non contiguous planes - Y, Cb, Cr */
373607ca46eSDavid Howells #define V4L2_PIX_FMT_YUV420M v4l2_fourcc('Y', 'M', '1', '2') /* 12  YUV420 planar */
374607ca46eSDavid Howells #define V4L2_PIX_FMT_YVU420M v4l2_fourcc('Y', 'M', '2', '1') /* 12  YVU420 planar */
375607ca46eSDavid Howells 
376607ca46eSDavid Howells /* Bayer formats - see http://www.siliconimaging.com/RGB%20Bayer.htm */
377607ca46eSDavid Howells #define V4L2_PIX_FMT_SBGGR8  v4l2_fourcc('B', 'A', '8', '1') /*  8  BGBG.. GRGR.. */
378607ca46eSDavid Howells #define V4L2_PIX_FMT_SGBRG8  v4l2_fourcc('G', 'B', 'R', 'G') /*  8  GBGB.. RGRG.. */
379607ca46eSDavid Howells #define V4L2_PIX_FMT_SGRBG8  v4l2_fourcc('G', 'R', 'B', 'G') /*  8  GRGR.. BGBG.. */
380607ca46eSDavid Howells #define V4L2_PIX_FMT_SRGGB8  v4l2_fourcc('R', 'G', 'G', 'B') /*  8  RGRG.. GBGB.. */
381607ca46eSDavid Howells #define V4L2_PIX_FMT_SBGGR10 v4l2_fourcc('B', 'G', '1', '0') /* 10  BGBG.. GRGR.. */
382607ca46eSDavid Howells #define V4L2_PIX_FMT_SGBRG10 v4l2_fourcc('G', 'B', '1', '0') /* 10  GBGB.. RGRG.. */
383607ca46eSDavid Howells #define V4L2_PIX_FMT_SGRBG10 v4l2_fourcc('B', 'A', '1', '0') /* 10  GRGR.. BGBG.. */
384607ca46eSDavid Howells #define V4L2_PIX_FMT_SRGGB10 v4l2_fourcc('R', 'G', '1', '0') /* 10  RGRG.. GBGB.. */
385607ca46eSDavid Howells #define V4L2_PIX_FMT_SBGGR12 v4l2_fourcc('B', 'G', '1', '2') /* 12  BGBG.. GRGR.. */
386607ca46eSDavid Howells #define V4L2_PIX_FMT_SGBRG12 v4l2_fourcc('G', 'B', '1', '2') /* 12  GBGB.. RGRG.. */
387607ca46eSDavid Howells #define V4L2_PIX_FMT_SGRBG12 v4l2_fourcc('B', 'A', '1', '2') /* 12  GRGR.. BGBG.. */
388607ca46eSDavid Howells #define V4L2_PIX_FMT_SRGGB12 v4l2_fourcc('R', 'G', '1', '2') /* 12  RGRG.. GBGB.. */
389607ca46eSDavid Howells 	/* 10bit raw bayer DPCM compressed to 8 bits */
390607ca46eSDavid Howells #define V4L2_PIX_FMT_SBGGR10DPCM8 v4l2_fourcc('b', 'B', 'A', '8')
391607ca46eSDavid Howells #define V4L2_PIX_FMT_SGBRG10DPCM8 v4l2_fourcc('b', 'G', 'A', '8')
392607ca46eSDavid Howells #define V4L2_PIX_FMT_SGRBG10DPCM8 v4l2_fourcc('B', 'D', '1', '0')
393607ca46eSDavid Howells #define V4L2_PIX_FMT_SRGGB10DPCM8 v4l2_fourcc('b', 'R', 'A', '8')
394607ca46eSDavid Howells 	/*
395607ca46eSDavid Howells 	 * 10bit raw bayer, expanded to 16 bits
396607ca46eSDavid Howells 	 * xxxxrrrrrrrrrrxxxxgggggggggg xxxxggggggggggxxxxbbbbbbbbbb...
397607ca46eSDavid Howells 	 */
398607ca46eSDavid Howells #define V4L2_PIX_FMT_SBGGR16 v4l2_fourcc('B', 'Y', 'R', '2') /* 16  BGBG.. GRGR.. */
399607ca46eSDavid Howells 
400607ca46eSDavid Howells /* compressed formats */
401607ca46eSDavid Howells #define V4L2_PIX_FMT_MJPEG    v4l2_fourcc('M', 'J', 'P', 'G') /* Motion-JPEG   */
402607ca46eSDavid Howells #define V4L2_PIX_FMT_JPEG     v4l2_fourcc('J', 'P', 'E', 'G') /* JFIF JPEG     */
403607ca46eSDavid Howells #define V4L2_PIX_FMT_DV       v4l2_fourcc('d', 'v', 's', 'd') /* 1394          */
404607ca46eSDavid Howells #define V4L2_PIX_FMT_MPEG     v4l2_fourcc('M', 'P', 'E', 'G') /* MPEG-1/2/4 Multiplexed */
405607ca46eSDavid Howells #define V4L2_PIX_FMT_H264     v4l2_fourcc('H', '2', '6', '4') /* H264 with start codes */
406607ca46eSDavid Howells #define V4L2_PIX_FMT_H264_NO_SC v4l2_fourcc('A', 'V', 'C', '1') /* H264 without start codes */
407607ca46eSDavid Howells #define V4L2_PIX_FMT_H264_MVC v4l2_fourcc('M', '2', '6', '4') /* H264 MVC */
408607ca46eSDavid Howells #define V4L2_PIX_FMT_H263     v4l2_fourcc('H', '2', '6', '3') /* H263          */
409607ca46eSDavid Howells #define V4L2_PIX_FMT_MPEG1    v4l2_fourcc('M', 'P', 'G', '1') /* MPEG-1 ES     */
410607ca46eSDavid Howells #define V4L2_PIX_FMT_MPEG2    v4l2_fourcc('M', 'P', 'G', '2') /* MPEG-2 ES     */
411607ca46eSDavid Howells #define V4L2_PIX_FMT_MPEG4    v4l2_fourcc('M', 'P', 'G', '4') /* MPEG-4 ES     */
412607ca46eSDavid Howells #define V4L2_PIX_FMT_XVID     v4l2_fourcc('X', 'V', 'I', 'D') /* Xvid           */
413607ca46eSDavid Howells #define V4L2_PIX_FMT_VC1_ANNEX_G v4l2_fourcc('V', 'C', '1', 'G') /* SMPTE 421M Annex G compliant stream */
414607ca46eSDavid Howells #define V4L2_PIX_FMT_VC1_ANNEX_L v4l2_fourcc('V', 'C', '1', 'L') /* SMPTE 421M Annex L compliant stream */
415607ca46eSDavid Howells #define V4L2_PIX_FMT_VP8      v4l2_fourcc('V', 'P', '8', '0') /* VP8 */
416607ca46eSDavid Howells 
417607ca46eSDavid Howells /*  Vendor-specific formats   */
418607ca46eSDavid Howells #define V4L2_PIX_FMT_CPIA1    v4l2_fourcc('C', 'P', 'I', 'A') /* cpia1 YUV */
419607ca46eSDavid Howells #define V4L2_PIX_FMT_WNVA     v4l2_fourcc('W', 'N', 'V', 'A') /* Winnov hw compress */
420607ca46eSDavid Howells #define V4L2_PIX_FMT_SN9C10X  v4l2_fourcc('S', '9', '1', '0') /* SN9C10x compression */
421607ca46eSDavid Howells #define V4L2_PIX_FMT_SN9C20X_I420 v4l2_fourcc('S', '9', '2', '0') /* SN9C20x YUV 4:2:0 */
422607ca46eSDavid Howells #define V4L2_PIX_FMT_PWC1     v4l2_fourcc('P', 'W', 'C', '1') /* pwc older webcam */
423607ca46eSDavid Howells #define V4L2_PIX_FMT_PWC2     v4l2_fourcc('P', 'W', 'C', '2') /* pwc newer webcam */
424607ca46eSDavid Howells #define V4L2_PIX_FMT_ET61X251 v4l2_fourcc('E', '6', '2', '5') /* ET61X251 compression */
425607ca46eSDavid Howells #define V4L2_PIX_FMT_SPCA501  v4l2_fourcc('S', '5', '0', '1') /* YUYV per line */
426607ca46eSDavid Howells #define V4L2_PIX_FMT_SPCA505  v4l2_fourcc('S', '5', '0', '5') /* YYUV per line */
427607ca46eSDavid Howells #define V4L2_PIX_FMT_SPCA508  v4l2_fourcc('S', '5', '0', '8') /* YUVY per line */
428607ca46eSDavid Howells #define V4L2_PIX_FMT_SPCA561  v4l2_fourcc('S', '5', '6', '1') /* compressed GBRG bayer */
429607ca46eSDavid Howells #define V4L2_PIX_FMT_PAC207   v4l2_fourcc('P', '2', '0', '7') /* compressed BGGR bayer */
430607ca46eSDavid Howells #define V4L2_PIX_FMT_MR97310A v4l2_fourcc('M', '3', '1', '0') /* compressed BGGR bayer */
431607ca46eSDavid Howells #define V4L2_PIX_FMT_JL2005BCD v4l2_fourcc('J', 'L', '2', '0') /* compressed RGGB bayer */
432607ca46eSDavid Howells #define V4L2_PIX_FMT_SN9C2028 v4l2_fourcc('S', 'O', 'N', 'X') /* compressed GBRG bayer */
433607ca46eSDavid Howells #define V4L2_PIX_FMT_SQ905C   v4l2_fourcc('9', '0', '5', 'C') /* compressed RGGB bayer */
434607ca46eSDavid Howells #define V4L2_PIX_FMT_PJPG     v4l2_fourcc('P', 'J', 'P', 'G') /* Pixart 73xx JPEG */
435607ca46eSDavid Howells #define V4L2_PIX_FMT_OV511    v4l2_fourcc('O', '5', '1', '1') /* ov511 JPEG */
436607ca46eSDavid Howells #define V4L2_PIX_FMT_OV518    v4l2_fourcc('O', '5', '1', '8') /* ov518 JPEG */
437607ca46eSDavid Howells #define V4L2_PIX_FMT_STV0680  v4l2_fourcc('S', '6', '8', '0') /* stv0680 bayer */
438607ca46eSDavid Howells #define V4L2_PIX_FMT_TM6000   v4l2_fourcc('T', 'M', '6', '0') /* tm5600/tm60x0 */
439607ca46eSDavid Howells #define V4L2_PIX_FMT_CIT_YYVYUY v4l2_fourcc('C', 'I', 'T', 'V') /* one line of Y then 1 line of VYUY */
440607ca46eSDavid Howells #define V4L2_PIX_FMT_KONICA420  v4l2_fourcc('K', 'O', 'N', 'I') /* YUV420 planar in blocks of 256 pixels */
441607ca46eSDavid Howells #define V4L2_PIX_FMT_JPGL	v4l2_fourcc('J', 'P', 'G', 'L') /* JPEG-Lite */
442607ca46eSDavid Howells #define V4L2_PIX_FMT_SE401      v4l2_fourcc('S', '4', '0', '1') /* se401 janggu compressed rgb */
443607ca46eSDavid Howells #define V4L2_PIX_FMT_S5C_UYVY_JPG v4l2_fourcc('S', '5', 'C', 'I') /* S5C73M3 interleaved UYVY/JPEG */
444607ca46eSDavid Howells 
445607ca46eSDavid Howells /*
446607ca46eSDavid Howells  *	F O R M A T   E N U M E R A T I O N
447607ca46eSDavid Howells  */
448607ca46eSDavid Howells struct v4l2_fmtdesc {
449607ca46eSDavid Howells 	__u32		    index;             /* Format number      */
450607ca46eSDavid Howells 	__u32		    type;              /* enum v4l2_buf_type */
451607ca46eSDavid Howells 	__u32               flags;
452607ca46eSDavid Howells 	__u8		    description[32];   /* Description string */
453607ca46eSDavid Howells 	__u32		    pixelformat;       /* Format fourcc      */
454607ca46eSDavid Howells 	__u32		    reserved[4];
455607ca46eSDavid Howells };
456607ca46eSDavid Howells 
457607ca46eSDavid Howells #define V4L2_FMT_FLAG_COMPRESSED 0x0001
458607ca46eSDavid Howells #define V4L2_FMT_FLAG_EMULATED   0x0002
459607ca46eSDavid Howells 
460607ca46eSDavid Howells #if 1
461607ca46eSDavid Howells 	/* Experimental Frame Size and frame rate enumeration */
462607ca46eSDavid Howells /*
463607ca46eSDavid Howells  *	F R A M E   S I Z E   E N U M E R A T I O N
464607ca46eSDavid Howells  */
465607ca46eSDavid Howells enum v4l2_frmsizetypes {
466607ca46eSDavid Howells 	V4L2_FRMSIZE_TYPE_DISCRETE	= 1,
467607ca46eSDavid Howells 	V4L2_FRMSIZE_TYPE_CONTINUOUS	= 2,
468607ca46eSDavid Howells 	V4L2_FRMSIZE_TYPE_STEPWISE	= 3,
469607ca46eSDavid Howells };
470607ca46eSDavid Howells 
471607ca46eSDavid Howells struct v4l2_frmsize_discrete {
472607ca46eSDavid Howells 	__u32			width;		/* Frame width [pixel] */
473607ca46eSDavid Howells 	__u32			height;		/* Frame height [pixel] */
474607ca46eSDavid Howells };
475607ca46eSDavid Howells 
476607ca46eSDavid Howells struct v4l2_frmsize_stepwise {
477607ca46eSDavid Howells 	__u32			min_width;	/* Minimum frame width [pixel] */
478607ca46eSDavid Howells 	__u32			max_width;	/* Maximum frame width [pixel] */
479607ca46eSDavid Howells 	__u32			step_width;	/* Frame width step size [pixel] */
480607ca46eSDavid Howells 	__u32			min_height;	/* Minimum frame height [pixel] */
481607ca46eSDavid Howells 	__u32			max_height;	/* Maximum frame height [pixel] */
482607ca46eSDavid Howells 	__u32			step_height;	/* Frame height step size [pixel] */
483607ca46eSDavid Howells };
484607ca46eSDavid Howells 
485607ca46eSDavid Howells struct v4l2_frmsizeenum {
486607ca46eSDavid Howells 	__u32			index;		/* Frame size number */
487607ca46eSDavid Howells 	__u32			pixel_format;	/* Pixel format */
488607ca46eSDavid Howells 	__u32			type;		/* Frame size type the device supports. */
489607ca46eSDavid Howells 
490607ca46eSDavid Howells 	union {					/* Frame size */
491607ca46eSDavid Howells 		struct v4l2_frmsize_discrete	discrete;
492607ca46eSDavid Howells 		struct v4l2_frmsize_stepwise	stepwise;
493607ca46eSDavid Howells 	};
494607ca46eSDavid Howells 
495607ca46eSDavid Howells 	__u32   reserved[2];			/* Reserved space for future use */
496607ca46eSDavid Howells };
497607ca46eSDavid Howells 
498607ca46eSDavid Howells /*
499607ca46eSDavid Howells  *	F R A M E   R A T E   E N U M E R A T I O N
500607ca46eSDavid Howells  */
501607ca46eSDavid Howells enum v4l2_frmivaltypes {
502607ca46eSDavid Howells 	V4L2_FRMIVAL_TYPE_DISCRETE	= 1,
503607ca46eSDavid Howells 	V4L2_FRMIVAL_TYPE_CONTINUOUS	= 2,
504607ca46eSDavid Howells 	V4L2_FRMIVAL_TYPE_STEPWISE	= 3,
505607ca46eSDavid Howells };
506607ca46eSDavid Howells 
507607ca46eSDavid Howells struct v4l2_frmival_stepwise {
508607ca46eSDavid Howells 	struct v4l2_fract	min;		/* Minimum frame interval [s] */
509607ca46eSDavid Howells 	struct v4l2_fract	max;		/* Maximum frame interval [s] */
510607ca46eSDavid Howells 	struct v4l2_fract	step;		/* Frame interval step size [s] */
511607ca46eSDavid Howells };
512607ca46eSDavid Howells 
513607ca46eSDavid Howells struct v4l2_frmivalenum {
514607ca46eSDavid Howells 	__u32			index;		/* Frame format index */
515607ca46eSDavid Howells 	__u32			pixel_format;	/* Pixel format */
516607ca46eSDavid Howells 	__u32			width;		/* Frame width */
517607ca46eSDavid Howells 	__u32			height;		/* Frame height */
518607ca46eSDavid Howells 	__u32			type;		/* Frame interval type the device supports. */
519607ca46eSDavid Howells 
520607ca46eSDavid Howells 	union {					/* Frame interval */
521607ca46eSDavid Howells 		struct v4l2_fract		discrete;
522607ca46eSDavid Howells 		struct v4l2_frmival_stepwise	stepwise;
523607ca46eSDavid Howells 	};
524607ca46eSDavid Howells 
525607ca46eSDavid Howells 	__u32	reserved[2];			/* Reserved space for future use */
526607ca46eSDavid Howells };
527607ca46eSDavid Howells #endif
528607ca46eSDavid Howells 
529607ca46eSDavid Howells /*
530607ca46eSDavid Howells  *	T I M E C O D E
531607ca46eSDavid Howells  */
532607ca46eSDavid Howells struct v4l2_timecode {
533607ca46eSDavid Howells 	__u32	type;
534607ca46eSDavid Howells 	__u32	flags;
535607ca46eSDavid Howells 	__u8	frames;
536607ca46eSDavid Howells 	__u8	seconds;
537607ca46eSDavid Howells 	__u8	minutes;
538607ca46eSDavid Howells 	__u8	hours;
539607ca46eSDavid Howells 	__u8	userbits[4];
540607ca46eSDavid Howells };
541607ca46eSDavid Howells 
542607ca46eSDavid Howells /*  Type  */
543607ca46eSDavid Howells #define V4L2_TC_TYPE_24FPS		1
544607ca46eSDavid Howells #define V4L2_TC_TYPE_25FPS		2
545607ca46eSDavid Howells #define V4L2_TC_TYPE_30FPS		3
546607ca46eSDavid Howells #define V4L2_TC_TYPE_50FPS		4
547607ca46eSDavid Howells #define V4L2_TC_TYPE_60FPS		5
548607ca46eSDavid Howells 
549607ca46eSDavid Howells /*  Flags  */
550607ca46eSDavid Howells #define V4L2_TC_FLAG_DROPFRAME		0x0001 /* "drop-frame" mode */
551607ca46eSDavid Howells #define V4L2_TC_FLAG_COLORFRAME		0x0002
552607ca46eSDavid Howells #define V4L2_TC_USERBITS_field		0x000C
553607ca46eSDavid Howells #define V4L2_TC_USERBITS_USERDEFINED	0x0000
554607ca46eSDavid Howells #define V4L2_TC_USERBITS_8BITCHARS	0x0008
555607ca46eSDavid Howells /* The above is based on SMPTE timecodes */
556607ca46eSDavid Howells 
557607ca46eSDavid Howells struct v4l2_jpegcompression {
558607ca46eSDavid Howells 	int quality;
559607ca46eSDavid Howells 
560607ca46eSDavid Howells 	int  APPn;              /* Number of APP segment to be written,
561607ca46eSDavid Howells 				 * must be 0..15 */
562607ca46eSDavid Howells 	int  APP_len;           /* Length of data in JPEG APPn segment */
563607ca46eSDavid Howells 	char APP_data[60];      /* Data in the JPEG APPn segment. */
564607ca46eSDavid Howells 
565607ca46eSDavid Howells 	int  COM_len;           /* Length of data in JPEG COM segment */
566607ca46eSDavid Howells 	char COM_data[60];      /* Data in JPEG COM segment */
567607ca46eSDavid Howells 
568607ca46eSDavid Howells 	__u32 jpeg_markers;     /* Which markers should go into the JPEG
569607ca46eSDavid Howells 				 * output. Unless you exactly know what
570607ca46eSDavid Howells 				 * you do, leave them untouched.
571607ca46eSDavid Howells 				 * Inluding less markers will make the
572607ca46eSDavid Howells 				 * resulting code smaller, but there will
573607ca46eSDavid Howells 				 * be fewer applications which can read it.
574607ca46eSDavid Howells 				 * The presence of the APP and COM marker
575607ca46eSDavid Howells 				 * is influenced by APP_len and COM_len
576607ca46eSDavid Howells 				 * ONLY, not by this property! */
577607ca46eSDavid Howells 
578607ca46eSDavid Howells #define V4L2_JPEG_MARKER_DHT (1<<3)    /* Define Huffman Tables */
579607ca46eSDavid Howells #define V4L2_JPEG_MARKER_DQT (1<<4)    /* Define Quantization Tables */
580607ca46eSDavid Howells #define V4L2_JPEG_MARKER_DRI (1<<5)    /* Define Restart Interval */
581607ca46eSDavid Howells #define V4L2_JPEG_MARKER_COM (1<<6)    /* Comment segment */
582607ca46eSDavid Howells #define V4L2_JPEG_MARKER_APP (1<<7)    /* App segment, driver will
583607ca46eSDavid Howells 					* allways use APP0 */
584607ca46eSDavid Howells };
585607ca46eSDavid Howells 
586607ca46eSDavid Howells /*
587607ca46eSDavid Howells  *	M E M O R Y - M A P P I N G   B U F F E R S
588607ca46eSDavid Howells  */
589607ca46eSDavid Howells struct v4l2_requestbuffers {
590607ca46eSDavid Howells 	__u32			count;
591607ca46eSDavid Howells 	__u32			type;		/* enum v4l2_buf_type */
592607ca46eSDavid Howells 	__u32			memory;		/* enum v4l2_memory */
593607ca46eSDavid Howells 	__u32			reserved[2];
594607ca46eSDavid Howells };
595607ca46eSDavid Howells 
596607ca46eSDavid Howells /**
597607ca46eSDavid Howells  * struct v4l2_plane - plane info for multi-planar buffers
598607ca46eSDavid Howells  * @bytesused:		number of bytes occupied by data in the plane (payload)
599607ca46eSDavid Howells  * @length:		size of this plane (NOT the payload) in bytes
600607ca46eSDavid Howells  * @mem_offset:		when memory in the associated struct v4l2_buffer is
601607ca46eSDavid Howells  *			V4L2_MEMORY_MMAP, equals the offset from the start of
602607ca46eSDavid Howells  *			the device memory for this plane (or is a "cookie" that
603607ca46eSDavid Howells  *			should be passed to mmap() called on the video node)
604607ca46eSDavid Howells  * @userptr:		when memory is V4L2_MEMORY_USERPTR, a userspace pointer
605607ca46eSDavid Howells  *			pointing to this plane
606051c7788SSumit Semwal  * @fd:			when memory is V4L2_MEMORY_DMABUF, a userspace file
607051c7788SSumit Semwal  *			descriptor associated with this plane
608607ca46eSDavid Howells  * @data_offset:	offset in the plane to the start of data; usually 0,
609607ca46eSDavid Howells  *			unless there is a header in front of the data
610607ca46eSDavid Howells  *
611607ca46eSDavid Howells  * Multi-planar buffers consist of one or more planes, e.g. an YCbCr buffer
612607ca46eSDavid Howells  * with two planes can have one plane for Y, and another for interleaved CbCr
613607ca46eSDavid Howells  * components. Each plane can reside in a separate memory buffer, or even in
614607ca46eSDavid Howells  * a completely separate memory node (e.g. in embedded devices).
615607ca46eSDavid Howells  */
616607ca46eSDavid Howells struct v4l2_plane {
617607ca46eSDavid Howells 	__u32			bytesused;
618607ca46eSDavid Howells 	__u32			length;
619607ca46eSDavid Howells 	union {
620607ca46eSDavid Howells 		__u32		mem_offset;
621607ca46eSDavid Howells 		unsigned long	userptr;
622051c7788SSumit Semwal 		__s32		fd;
623607ca46eSDavid Howells 	} m;
624607ca46eSDavid Howells 	__u32			data_offset;
625607ca46eSDavid Howells 	__u32			reserved[11];
626607ca46eSDavid Howells };
627607ca46eSDavid Howells 
628607ca46eSDavid Howells /**
629607ca46eSDavid Howells  * struct v4l2_buffer - video buffer info
630607ca46eSDavid Howells  * @index:	id number of the buffer
631607ca46eSDavid Howells  * @type:	enum v4l2_buf_type; buffer type (type == *_MPLANE for
632607ca46eSDavid Howells  *		multiplanar buffers);
633607ca46eSDavid Howells  * @bytesused:	number of bytes occupied by data in the buffer (payload);
634607ca46eSDavid Howells  *		unused (set to 0) for multiplanar buffers
635607ca46eSDavid Howells  * @flags:	buffer informational flags
636607ca46eSDavid Howells  * @field:	enum v4l2_field; field order of the image in the buffer
637607ca46eSDavid Howells  * @timestamp:	frame timestamp
638607ca46eSDavid Howells  * @timecode:	frame timecode
639607ca46eSDavid Howells  * @sequence:	sequence count of this frame
640607ca46eSDavid Howells  * @memory:	enum v4l2_memory; the method, in which the actual video data is
641607ca46eSDavid Howells  *		passed
642607ca46eSDavid Howells  * @offset:	for non-multiplanar buffers with memory == V4L2_MEMORY_MMAP;
643607ca46eSDavid Howells  *		offset from the start of the device memory for this plane,
644607ca46eSDavid Howells  *		(or a "cookie" that should be passed to mmap() as offset)
645607ca46eSDavid Howells  * @userptr:	for non-multiplanar buffers with memory == V4L2_MEMORY_USERPTR;
646607ca46eSDavid Howells  *		a userspace pointer pointing to this buffer
647051c7788SSumit Semwal  * @fd:		for non-multiplanar buffers with memory == V4L2_MEMORY_DMABUF;
648051c7788SSumit Semwal  *		a userspace file descriptor associated with this buffer
649607ca46eSDavid Howells  * @planes:	for multiplanar buffers; userspace pointer to the array of plane
650607ca46eSDavid Howells  *		info structs for this buffer
651607ca46eSDavid Howells  * @length:	size in bytes of the buffer (NOT its payload) for single-plane
652607ca46eSDavid Howells  *		buffers (when type != *_MPLANE); number of elements in the
653607ca46eSDavid Howells  *		planes array for multi-plane buffers
654607ca46eSDavid Howells  * @input:	input number from which the video data has has been captured
655607ca46eSDavid Howells  *
656607ca46eSDavid Howells  * Contains data exchanged by application and driver using one of the Streaming
657607ca46eSDavid Howells  * I/O methods.
658607ca46eSDavid Howells  */
659607ca46eSDavid Howells struct v4l2_buffer {
660607ca46eSDavid Howells 	__u32			index;
661607ca46eSDavid Howells 	__u32			type;
662607ca46eSDavid Howells 	__u32			bytesused;
663607ca46eSDavid Howells 	__u32			flags;
664607ca46eSDavid Howells 	__u32			field;
665607ca46eSDavid Howells 	struct timeval		timestamp;
666607ca46eSDavid Howells 	struct v4l2_timecode	timecode;
667607ca46eSDavid Howells 	__u32			sequence;
668607ca46eSDavid Howells 
669607ca46eSDavid Howells 	/* memory location */
670607ca46eSDavid Howells 	__u32			memory;
671607ca46eSDavid Howells 	union {
672607ca46eSDavid Howells 		__u32           offset;
673607ca46eSDavid Howells 		unsigned long   userptr;
674607ca46eSDavid Howells 		struct v4l2_plane *planes;
675051c7788SSumit Semwal 		__s32		fd;
676607ca46eSDavid Howells 	} m;
677607ca46eSDavid Howells 	__u32			length;
678607ca46eSDavid Howells 	__u32			reserved2;
679607ca46eSDavid Howells 	__u32			reserved;
680607ca46eSDavid Howells };
681607ca46eSDavid Howells 
682607ca46eSDavid Howells /*  Flags for 'flags' field */
683607ca46eSDavid Howells #define V4L2_BUF_FLAG_MAPPED	0x0001  /* Buffer is mapped (flag) */
684607ca46eSDavid Howells #define V4L2_BUF_FLAG_QUEUED	0x0002	/* Buffer is queued for processing */
685607ca46eSDavid Howells #define V4L2_BUF_FLAG_DONE	0x0004	/* Buffer is ready */
686607ca46eSDavid Howells #define V4L2_BUF_FLAG_KEYFRAME	0x0008	/* Image is a keyframe (I-frame) */
687607ca46eSDavid Howells #define V4L2_BUF_FLAG_PFRAME	0x0010	/* Image is a P-frame */
688607ca46eSDavid Howells #define V4L2_BUF_FLAG_BFRAME	0x0020	/* Image is a B-frame */
689607ca46eSDavid Howells /* Buffer is ready, but the data contained within is corrupted. */
690607ca46eSDavid Howells #define V4L2_BUF_FLAG_ERROR	0x0040
691607ca46eSDavid Howells #define V4L2_BUF_FLAG_TIMECODE	0x0100	/* timecode field is valid */
692607ca46eSDavid Howells #define V4L2_BUF_FLAG_PREPARED	0x0400	/* Buffer is prepared for queuing */
693607ca46eSDavid Howells /* Cache handling flags */
694607ca46eSDavid Howells #define V4L2_BUF_FLAG_NO_CACHE_INVALIDATE	0x0800
695607ca46eSDavid Howells #define V4L2_BUF_FLAG_NO_CACHE_CLEAN		0x1000
696607ca46eSDavid Howells 
697*b799d09aSTomasz Stanislawski /**
698*b799d09aSTomasz Stanislawski  * struct v4l2_exportbuffer - export of video buffer as DMABUF file descriptor
699*b799d09aSTomasz Stanislawski  *
700*b799d09aSTomasz Stanislawski  * @index:	id number of the buffer
701*b799d09aSTomasz Stanislawski  * @type:	enum v4l2_buf_type; buffer type (type == *_MPLANE for
702*b799d09aSTomasz Stanislawski  *		multiplanar buffers);
703*b799d09aSTomasz Stanislawski  * @plane:	index of the plane to be exported, 0 for single plane queues
704*b799d09aSTomasz Stanislawski  * @flags:	flags for newly created file, currently only O_CLOEXEC is
705*b799d09aSTomasz Stanislawski  *		supported, refer to manual of open syscall for more details
706*b799d09aSTomasz Stanislawski  * @fd:		file descriptor associated with DMABUF (set by driver)
707*b799d09aSTomasz Stanislawski  *
708*b799d09aSTomasz Stanislawski  * Contains data used for exporting a video buffer as DMABUF file descriptor.
709*b799d09aSTomasz Stanislawski  * The buffer is identified by a 'cookie' returned by VIDIOC_QUERYBUF
710*b799d09aSTomasz Stanislawski  * (identical to the cookie used to mmap() the buffer to userspace). All
711*b799d09aSTomasz Stanislawski  * reserved fields must be set to zero. The field reserved0 is expected to
712*b799d09aSTomasz Stanislawski  * become a structure 'type' allowing an alternative layout of the structure
713*b799d09aSTomasz Stanislawski  * content. Therefore this field should not be used for any other extensions.
714*b799d09aSTomasz Stanislawski  */
715*b799d09aSTomasz Stanislawski struct v4l2_exportbuffer {
716*b799d09aSTomasz Stanislawski 	__u32		type; /* enum v4l2_buf_type */
717*b799d09aSTomasz Stanislawski 	__u32		index;
718*b799d09aSTomasz Stanislawski 	__u32		plane;
719*b799d09aSTomasz Stanislawski 	__u32		flags;
720*b799d09aSTomasz Stanislawski 	__s32		fd;
721*b799d09aSTomasz Stanislawski 	__u32		reserved[11];
722*b799d09aSTomasz Stanislawski };
723*b799d09aSTomasz Stanislawski 
724607ca46eSDavid Howells /*
725607ca46eSDavid Howells  *	O V E R L A Y   P R E V I E W
726607ca46eSDavid Howells  */
727607ca46eSDavid Howells struct v4l2_framebuffer {
728607ca46eSDavid Howells 	__u32			capability;
729607ca46eSDavid Howells 	__u32			flags;
730607ca46eSDavid Howells /* FIXME: in theory we should pass something like PCI device + memory
731607ca46eSDavid Howells  * region + offset instead of some physical address */
732607ca46eSDavid Howells 	void                    *base;
733607ca46eSDavid Howells 	struct v4l2_pix_format	fmt;
734607ca46eSDavid Howells };
735607ca46eSDavid Howells /*  Flags for the 'capability' field. Read only */
736607ca46eSDavid Howells #define V4L2_FBUF_CAP_EXTERNOVERLAY	0x0001
737607ca46eSDavid Howells #define V4L2_FBUF_CAP_CHROMAKEY		0x0002
738607ca46eSDavid Howells #define V4L2_FBUF_CAP_LIST_CLIPPING     0x0004
739607ca46eSDavid Howells #define V4L2_FBUF_CAP_BITMAP_CLIPPING	0x0008
740607ca46eSDavid Howells #define V4L2_FBUF_CAP_LOCAL_ALPHA	0x0010
741607ca46eSDavid Howells #define V4L2_FBUF_CAP_GLOBAL_ALPHA	0x0020
742607ca46eSDavid Howells #define V4L2_FBUF_CAP_LOCAL_INV_ALPHA	0x0040
743607ca46eSDavid Howells #define V4L2_FBUF_CAP_SRC_CHROMAKEY	0x0080
744607ca46eSDavid Howells /*  Flags for the 'flags' field. */
745607ca46eSDavid Howells #define V4L2_FBUF_FLAG_PRIMARY		0x0001
746607ca46eSDavid Howells #define V4L2_FBUF_FLAG_OVERLAY		0x0002
747607ca46eSDavid Howells #define V4L2_FBUF_FLAG_CHROMAKEY	0x0004
748607ca46eSDavid Howells #define V4L2_FBUF_FLAG_LOCAL_ALPHA	0x0008
749607ca46eSDavid Howells #define V4L2_FBUF_FLAG_GLOBAL_ALPHA	0x0010
750607ca46eSDavid Howells #define V4L2_FBUF_FLAG_LOCAL_INV_ALPHA	0x0020
751607ca46eSDavid Howells #define V4L2_FBUF_FLAG_SRC_CHROMAKEY	0x0040
752607ca46eSDavid Howells 
753607ca46eSDavid Howells struct v4l2_clip {
754607ca46eSDavid Howells 	struct v4l2_rect        c;
755607ca46eSDavid Howells 	struct v4l2_clip	__user *next;
756607ca46eSDavid Howells };
757607ca46eSDavid Howells 
758607ca46eSDavid Howells struct v4l2_window {
759607ca46eSDavid Howells 	struct v4l2_rect        w;
760607ca46eSDavid Howells 	__u32			field;	 /* enum v4l2_field */
761607ca46eSDavid Howells 	__u32			chromakey;
762607ca46eSDavid Howells 	struct v4l2_clip	__user *clips;
763607ca46eSDavid Howells 	__u32			clipcount;
764607ca46eSDavid Howells 	void			__user *bitmap;
765607ca46eSDavid Howells 	__u8                    global_alpha;
766607ca46eSDavid Howells };
767607ca46eSDavid Howells 
768607ca46eSDavid Howells /*
769607ca46eSDavid Howells  *	C A P T U R E   P A R A M E T E R S
770607ca46eSDavid Howells  */
771607ca46eSDavid Howells struct v4l2_captureparm {
772607ca46eSDavid Howells 	__u32		   capability;	  /*  Supported modes */
773607ca46eSDavid Howells 	__u32		   capturemode;	  /*  Current mode */
7742e74598dSKirill Smelkov 	struct v4l2_fract  timeperframe;  /*  Time per frame in seconds */
775607ca46eSDavid Howells 	__u32		   extendedmode;  /*  Driver-specific extensions */
776607ca46eSDavid Howells 	__u32              readbuffers;   /*  # of buffers for read */
777607ca46eSDavid Howells 	__u32		   reserved[4];
778607ca46eSDavid Howells };
779607ca46eSDavid Howells 
780607ca46eSDavid Howells /*  Flags for 'capability' and 'capturemode' fields */
781607ca46eSDavid Howells #define V4L2_MODE_HIGHQUALITY	0x0001	/*  High quality imaging mode */
782607ca46eSDavid Howells #define V4L2_CAP_TIMEPERFRAME	0x1000	/*  timeperframe field is supported */
783607ca46eSDavid Howells 
784607ca46eSDavid Howells struct v4l2_outputparm {
785607ca46eSDavid Howells 	__u32		   capability;	 /*  Supported modes */
786607ca46eSDavid Howells 	__u32		   outputmode;	 /*  Current mode */
787607ca46eSDavid Howells 	struct v4l2_fract  timeperframe; /*  Time per frame in seconds */
788607ca46eSDavid Howells 	__u32		   extendedmode; /*  Driver-specific extensions */
789607ca46eSDavid Howells 	__u32              writebuffers; /*  # of buffers for write */
790607ca46eSDavid Howells 	__u32		   reserved[4];
791607ca46eSDavid Howells };
792607ca46eSDavid Howells 
793607ca46eSDavid Howells /*
794607ca46eSDavid Howells  *	I N P U T   I M A G E   C R O P P I N G
795607ca46eSDavid Howells  */
796607ca46eSDavid Howells struct v4l2_cropcap {
797607ca46eSDavid Howells 	__u32			type;	/* enum v4l2_buf_type */
798607ca46eSDavid Howells 	struct v4l2_rect        bounds;
799607ca46eSDavid Howells 	struct v4l2_rect        defrect;
800607ca46eSDavid Howells 	struct v4l2_fract       pixelaspect;
801607ca46eSDavid Howells };
802607ca46eSDavid Howells 
803607ca46eSDavid Howells struct v4l2_crop {
804607ca46eSDavid Howells 	__u32			type;	/* enum v4l2_buf_type */
805607ca46eSDavid Howells 	struct v4l2_rect        c;
806607ca46eSDavid Howells };
807607ca46eSDavid Howells 
808607ca46eSDavid Howells /**
809607ca46eSDavid Howells  * struct v4l2_selection - selection info
810607ca46eSDavid Howells  * @type:	buffer type (do not use *_MPLANE types)
811607ca46eSDavid Howells  * @target:	Selection target, used to choose one of possible rectangles;
812607ca46eSDavid Howells  *		defined in v4l2-common.h; V4L2_SEL_TGT_* .
813607ca46eSDavid Howells  * @flags:	constraints flags, defined in v4l2-common.h; V4L2_SEL_FLAG_*.
814607ca46eSDavid Howells  * @r:		coordinates of selection window
815607ca46eSDavid Howells  * @reserved:	for future use, rounds structure size to 64 bytes, set to zero
816607ca46eSDavid Howells  *
817607ca46eSDavid Howells  * Hardware may use multiple helper windows to process a video stream.
818607ca46eSDavid Howells  * The structure is used to exchange this selection areas between
819607ca46eSDavid Howells  * an application and a driver.
820607ca46eSDavid Howells  */
821607ca46eSDavid Howells struct v4l2_selection {
822607ca46eSDavid Howells 	__u32			type;
823607ca46eSDavid Howells 	__u32			target;
824607ca46eSDavid Howells 	__u32                   flags;
825607ca46eSDavid Howells 	struct v4l2_rect        r;
826607ca46eSDavid Howells 	__u32                   reserved[9];
827607ca46eSDavid Howells };
828607ca46eSDavid Howells 
829607ca46eSDavid Howells 
830607ca46eSDavid Howells /*
831607ca46eSDavid Howells  *      A N A L O G   V I D E O   S T A N D A R D
832607ca46eSDavid Howells  */
833607ca46eSDavid Howells 
834607ca46eSDavid Howells typedef __u64 v4l2_std_id;
835607ca46eSDavid Howells 
836607ca46eSDavid Howells /* one bit for each */
837607ca46eSDavid Howells #define V4L2_STD_PAL_B          ((v4l2_std_id)0x00000001)
838607ca46eSDavid Howells #define V4L2_STD_PAL_B1         ((v4l2_std_id)0x00000002)
839607ca46eSDavid Howells #define V4L2_STD_PAL_G          ((v4l2_std_id)0x00000004)
840607ca46eSDavid Howells #define V4L2_STD_PAL_H          ((v4l2_std_id)0x00000008)
841607ca46eSDavid Howells #define V4L2_STD_PAL_I          ((v4l2_std_id)0x00000010)
842607ca46eSDavid Howells #define V4L2_STD_PAL_D          ((v4l2_std_id)0x00000020)
843607ca46eSDavid Howells #define V4L2_STD_PAL_D1         ((v4l2_std_id)0x00000040)
844607ca46eSDavid Howells #define V4L2_STD_PAL_K          ((v4l2_std_id)0x00000080)
845607ca46eSDavid Howells 
846607ca46eSDavid Howells #define V4L2_STD_PAL_M          ((v4l2_std_id)0x00000100)
847607ca46eSDavid Howells #define V4L2_STD_PAL_N          ((v4l2_std_id)0x00000200)
848607ca46eSDavid Howells #define V4L2_STD_PAL_Nc         ((v4l2_std_id)0x00000400)
849607ca46eSDavid Howells #define V4L2_STD_PAL_60         ((v4l2_std_id)0x00000800)
850607ca46eSDavid Howells 
851607ca46eSDavid Howells #define V4L2_STD_NTSC_M         ((v4l2_std_id)0x00001000)	/* BTSC */
852607ca46eSDavid Howells #define V4L2_STD_NTSC_M_JP      ((v4l2_std_id)0x00002000)	/* EIA-J */
853607ca46eSDavid Howells #define V4L2_STD_NTSC_443       ((v4l2_std_id)0x00004000)
854607ca46eSDavid Howells #define V4L2_STD_NTSC_M_KR      ((v4l2_std_id)0x00008000)	/* FM A2 */
855607ca46eSDavid Howells 
856607ca46eSDavid Howells #define V4L2_STD_SECAM_B        ((v4l2_std_id)0x00010000)
857607ca46eSDavid Howells #define V4L2_STD_SECAM_D        ((v4l2_std_id)0x00020000)
858607ca46eSDavid Howells #define V4L2_STD_SECAM_G        ((v4l2_std_id)0x00040000)
859607ca46eSDavid Howells #define V4L2_STD_SECAM_H        ((v4l2_std_id)0x00080000)
860607ca46eSDavid Howells #define V4L2_STD_SECAM_K        ((v4l2_std_id)0x00100000)
861607ca46eSDavid Howells #define V4L2_STD_SECAM_K1       ((v4l2_std_id)0x00200000)
862607ca46eSDavid Howells #define V4L2_STD_SECAM_L        ((v4l2_std_id)0x00400000)
863607ca46eSDavid Howells #define V4L2_STD_SECAM_LC       ((v4l2_std_id)0x00800000)
864607ca46eSDavid Howells 
865607ca46eSDavid Howells /* ATSC/HDTV */
866607ca46eSDavid Howells #define V4L2_STD_ATSC_8_VSB     ((v4l2_std_id)0x01000000)
867607ca46eSDavid Howells #define V4L2_STD_ATSC_16_VSB    ((v4l2_std_id)0x02000000)
868607ca46eSDavid Howells 
869607ca46eSDavid Howells /* FIXME:
870607ca46eSDavid Howells    Although std_id is 64 bits, there is an issue on PPC32 architecture that
871607ca46eSDavid Howells    makes switch(__u64) to break. So, there's a hack on v4l2-common.c rounding
872607ca46eSDavid Howells    this value to 32 bits.
873607ca46eSDavid Howells    As, currently, the max value is for V4L2_STD_ATSC_16_VSB (30 bits wide),
874607ca46eSDavid Howells    it should work fine. However, if needed to add more than two standards,
875607ca46eSDavid Howells    v4l2-common.c should be fixed.
876607ca46eSDavid Howells  */
877607ca46eSDavid Howells 
878607ca46eSDavid Howells /*
879607ca46eSDavid Howells  * Some macros to merge video standards in order to make live easier for the
880607ca46eSDavid Howells  * drivers and V4L2 applications
881607ca46eSDavid Howells  */
882607ca46eSDavid Howells 
883607ca46eSDavid Howells /*
884607ca46eSDavid Howells  * "Common" NTSC/M - It should be noticed that V4L2_STD_NTSC_443 is
885607ca46eSDavid Howells  * Missing here.
886607ca46eSDavid Howells  */
887607ca46eSDavid Howells #define V4L2_STD_NTSC           (V4L2_STD_NTSC_M	|\
888607ca46eSDavid Howells 				 V4L2_STD_NTSC_M_JP     |\
889607ca46eSDavid Howells 				 V4L2_STD_NTSC_M_KR)
890607ca46eSDavid Howells /* Secam macros */
891607ca46eSDavid Howells #define V4L2_STD_SECAM_DK      	(V4L2_STD_SECAM_D	|\
892607ca46eSDavid Howells 				 V4L2_STD_SECAM_K	|\
893607ca46eSDavid Howells 				 V4L2_STD_SECAM_K1)
894607ca46eSDavid Howells /* All Secam Standards */
895607ca46eSDavid Howells #define V4L2_STD_SECAM		(V4L2_STD_SECAM_B	|\
896607ca46eSDavid Howells 				 V4L2_STD_SECAM_G	|\
897607ca46eSDavid Howells 				 V4L2_STD_SECAM_H	|\
898607ca46eSDavid Howells 				 V4L2_STD_SECAM_DK	|\
899607ca46eSDavid Howells 				 V4L2_STD_SECAM_L       |\
900607ca46eSDavid Howells 				 V4L2_STD_SECAM_LC)
901607ca46eSDavid Howells /* PAL macros */
902607ca46eSDavid Howells #define V4L2_STD_PAL_BG		(V4L2_STD_PAL_B		|\
903607ca46eSDavid Howells 				 V4L2_STD_PAL_B1	|\
904607ca46eSDavid Howells 				 V4L2_STD_PAL_G)
905607ca46eSDavid Howells #define V4L2_STD_PAL_DK		(V4L2_STD_PAL_D		|\
906607ca46eSDavid Howells 				 V4L2_STD_PAL_D1	|\
907607ca46eSDavid Howells 				 V4L2_STD_PAL_K)
908607ca46eSDavid Howells /*
909607ca46eSDavid Howells  * "Common" PAL - This macro is there to be compatible with the old
910607ca46eSDavid Howells  * V4L1 concept of "PAL": /BGDKHI.
911607ca46eSDavid Howells  * Several PAL standards are mising here: /M, /N and /Nc
912607ca46eSDavid Howells  */
913607ca46eSDavid Howells #define V4L2_STD_PAL		(V4L2_STD_PAL_BG	|\
914607ca46eSDavid Howells 				 V4L2_STD_PAL_DK	|\
915607ca46eSDavid Howells 				 V4L2_STD_PAL_H		|\
916607ca46eSDavid Howells 				 V4L2_STD_PAL_I)
917607ca46eSDavid Howells /* Chroma "agnostic" standards */
918607ca46eSDavid Howells #define V4L2_STD_B		(V4L2_STD_PAL_B		|\
919607ca46eSDavid Howells 				 V4L2_STD_PAL_B1	|\
920607ca46eSDavid Howells 				 V4L2_STD_SECAM_B)
921607ca46eSDavid Howells #define V4L2_STD_G		(V4L2_STD_PAL_G		|\
922607ca46eSDavid Howells 				 V4L2_STD_SECAM_G)
923607ca46eSDavid Howells #define V4L2_STD_H		(V4L2_STD_PAL_H		|\
924607ca46eSDavid Howells 				 V4L2_STD_SECAM_H)
925607ca46eSDavid Howells #define V4L2_STD_L		(V4L2_STD_SECAM_L	|\
926607ca46eSDavid Howells 				 V4L2_STD_SECAM_LC)
927607ca46eSDavid Howells #define V4L2_STD_GH		(V4L2_STD_G		|\
928607ca46eSDavid Howells 				 V4L2_STD_H)
929607ca46eSDavid Howells #define V4L2_STD_DK		(V4L2_STD_PAL_DK	|\
930607ca46eSDavid Howells 				 V4L2_STD_SECAM_DK)
931607ca46eSDavid Howells #define V4L2_STD_BG		(V4L2_STD_B		|\
932607ca46eSDavid Howells 				 V4L2_STD_G)
933607ca46eSDavid Howells #define V4L2_STD_MN		(V4L2_STD_PAL_M		|\
934607ca46eSDavid Howells 				 V4L2_STD_PAL_N		|\
935607ca46eSDavid Howells 				 V4L2_STD_PAL_Nc	|\
936607ca46eSDavid Howells 				 V4L2_STD_NTSC)
937607ca46eSDavid Howells 
938607ca46eSDavid Howells /* Standards where MTS/BTSC stereo could be found */
939607ca46eSDavid Howells #define V4L2_STD_MTS		(V4L2_STD_NTSC_M	|\
940607ca46eSDavid Howells 				 V4L2_STD_PAL_M		|\
941607ca46eSDavid Howells 				 V4L2_STD_PAL_N		|\
942607ca46eSDavid Howells 				 V4L2_STD_PAL_Nc)
943607ca46eSDavid Howells 
944607ca46eSDavid Howells /* Standards for Countries with 60Hz Line frequency */
945607ca46eSDavid Howells #define V4L2_STD_525_60		(V4L2_STD_PAL_M		|\
946607ca46eSDavid Howells 				 V4L2_STD_PAL_60	|\
947607ca46eSDavid Howells 				 V4L2_STD_NTSC		|\
948607ca46eSDavid Howells 				 V4L2_STD_NTSC_443)
949607ca46eSDavid Howells /* Standards for Countries with 50Hz Line frequency */
950607ca46eSDavid Howells #define V4L2_STD_625_50		(V4L2_STD_PAL		|\
951607ca46eSDavid Howells 				 V4L2_STD_PAL_N		|\
952607ca46eSDavid Howells 				 V4L2_STD_PAL_Nc	|\
953607ca46eSDavid Howells 				 V4L2_STD_SECAM)
954607ca46eSDavid Howells 
955607ca46eSDavid Howells #define V4L2_STD_ATSC           (V4L2_STD_ATSC_8_VSB    |\
956607ca46eSDavid Howells 				 V4L2_STD_ATSC_16_VSB)
957607ca46eSDavid Howells /* Macros with none and all analog standards */
958607ca46eSDavid Howells #define V4L2_STD_UNKNOWN        0
959607ca46eSDavid Howells #define V4L2_STD_ALL            (V4L2_STD_525_60	|\
960607ca46eSDavid Howells 				 V4L2_STD_625_50)
961607ca46eSDavid Howells 
962607ca46eSDavid Howells struct v4l2_standard {
963607ca46eSDavid Howells 	__u32		     index;
964607ca46eSDavid Howells 	v4l2_std_id          id;
965607ca46eSDavid Howells 	__u8		     name[24];
966607ca46eSDavid Howells 	struct v4l2_fract    frameperiod; /* Frames, not fields */
967607ca46eSDavid Howells 	__u32		     framelines;
968607ca46eSDavid Howells 	__u32		     reserved[4];
969607ca46eSDavid Howells };
970607ca46eSDavid Howells 
971607ca46eSDavid Howells /* The DV Preset API is deprecated in favor of the DV Timings API.
972607ca46eSDavid Howells    New drivers shouldn't use this anymore! */
973607ca46eSDavid Howells 
974607ca46eSDavid Howells /*
975607ca46eSDavid Howells  *	V I D E O	T I M I N G S	D V	P R E S E T
976607ca46eSDavid Howells  */
977607ca46eSDavid Howells struct v4l2_dv_preset {
978607ca46eSDavid Howells 	__u32	preset;
979607ca46eSDavid Howells 	__u32	reserved[4];
980607ca46eSDavid Howells };
981607ca46eSDavid Howells 
982607ca46eSDavid Howells /*
983607ca46eSDavid Howells  *	D V	P R E S E T S	E N U M E R A T I O N
984607ca46eSDavid Howells  */
985607ca46eSDavid Howells struct v4l2_dv_enum_preset {
986607ca46eSDavid Howells 	__u32	index;
987607ca46eSDavid Howells 	__u32	preset;
988607ca46eSDavid Howells 	__u8	name[32]; /* Name of the preset timing */
989607ca46eSDavid Howells 	__u32	width;
990607ca46eSDavid Howells 	__u32	height;
991607ca46eSDavid Howells 	__u32	reserved[4];
992607ca46eSDavid Howells };
993607ca46eSDavid Howells 
994607ca46eSDavid Howells /*
995607ca46eSDavid Howells  * 	D V	P R E S E T	V A L U E S
996607ca46eSDavid Howells  */
997607ca46eSDavid Howells #define		V4L2_DV_INVALID		0
998607ca46eSDavid Howells #define		V4L2_DV_480P59_94	1 /* BT.1362 */
999607ca46eSDavid Howells #define		V4L2_DV_576P50		2 /* BT.1362 */
1000607ca46eSDavid Howells #define		V4L2_DV_720P24		3 /* SMPTE 296M */
1001607ca46eSDavid Howells #define		V4L2_DV_720P25		4 /* SMPTE 296M */
1002607ca46eSDavid Howells #define		V4L2_DV_720P30		5 /* SMPTE 296M */
1003607ca46eSDavid Howells #define		V4L2_DV_720P50		6 /* SMPTE 296M */
1004607ca46eSDavid Howells #define		V4L2_DV_720P59_94	7 /* SMPTE 274M */
1005607ca46eSDavid Howells #define		V4L2_DV_720P60		8 /* SMPTE 274M/296M */
1006607ca46eSDavid Howells #define		V4L2_DV_1080I29_97	9 /* BT.1120/ SMPTE 274M */
1007607ca46eSDavid Howells #define		V4L2_DV_1080I30		10 /* BT.1120/ SMPTE 274M */
1008607ca46eSDavid Howells #define		V4L2_DV_1080I25		11 /* BT.1120 */
1009607ca46eSDavid Howells #define		V4L2_DV_1080I50		12 /* SMPTE 296M */
1010607ca46eSDavid Howells #define		V4L2_DV_1080I60		13 /* SMPTE 296M */
1011607ca46eSDavid Howells #define		V4L2_DV_1080P24		14 /* SMPTE 296M */
1012607ca46eSDavid Howells #define		V4L2_DV_1080P25		15 /* SMPTE 296M */
1013607ca46eSDavid Howells #define		V4L2_DV_1080P30		16 /* SMPTE 296M */
1014607ca46eSDavid Howells #define		V4L2_DV_1080P50		17 /* BT.1120 */
1015607ca46eSDavid Howells #define		V4L2_DV_1080P60		18 /* BT.1120 */
1016607ca46eSDavid Howells 
1017607ca46eSDavid Howells /*
1018607ca46eSDavid Howells  *	D V 	B T	T I M I N G S
1019607ca46eSDavid Howells  */
1020607ca46eSDavid Howells 
1021607ca46eSDavid Howells /** struct v4l2_bt_timings - BT.656/BT.1120 timing data
1022607ca46eSDavid Howells  * @width:	total width of the active video in pixels
1023607ca46eSDavid Howells  * @height:	total height of the active video in lines
1024607ca46eSDavid Howells  * @interlaced:	Interlaced or progressive
1025607ca46eSDavid Howells  * @polarities:	Positive or negative polarities
1026607ca46eSDavid Howells  * @pixelclock:	Pixel clock in HZ. Ex. 74.25MHz->74250000
1027607ca46eSDavid Howells  * @hfrontporch:Horizontal front porch in pixels
1028607ca46eSDavid Howells  * @hsync:	Horizontal Sync length in pixels
1029607ca46eSDavid Howells  * @hbackporch:	Horizontal back porch in pixels
1030607ca46eSDavid Howells  * @vfrontporch:Vertical front porch in lines
1031607ca46eSDavid Howells  * @vsync:	Vertical Sync length in lines
1032607ca46eSDavid Howells  * @vbackporch:	Vertical back porch in lines
1033607ca46eSDavid Howells  * @il_vfrontporch:Vertical front porch for the even field
1034607ca46eSDavid Howells  *		(aka field 2) of interlaced field formats
1035607ca46eSDavid Howells  * @il_vsync:	Vertical Sync length for the even field
1036607ca46eSDavid Howells  *		(aka field 2) of interlaced field formats
1037607ca46eSDavid Howells  * @il_vbackporch:Vertical back porch for the even field
1038607ca46eSDavid Howells  *		(aka field 2) of interlaced field formats
1039607ca46eSDavid Howells  * @standards:	Standards the timing belongs to
1040607ca46eSDavid Howells  * @flags:	Flags
1041607ca46eSDavid Howells  * @reserved:	Reserved fields, must be zeroed.
1042607ca46eSDavid Howells  *
1043607ca46eSDavid Howells  * A note regarding vertical interlaced timings: height refers to the total
1044607ca46eSDavid Howells  * height of the active video frame (= two fields). The blanking timings refer
1045607ca46eSDavid Howells  * to the blanking of each field. So the height of the total frame is
1046607ca46eSDavid Howells  * calculated as follows:
1047607ca46eSDavid Howells  *
1048607ca46eSDavid Howells  * tot_height = height + vfrontporch + vsync + vbackporch +
1049607ca46eSDavid Howells  *                       il_vfrontporch + il_vsync + il_vbackporch
1050607ca46eSDavid Howells  *
1051607ca46eSDavid Howells  * The active height of each field is height / 2.
1052607ca46eSDavid Howells  */
1053607ca46eSDavid Howells struct v4l2_bt_timings {
1054607ca46eSDavid Howells 	__u32	width;
1055607ca46eSDavid Howells 	__u32	height;
1056607ca46eSDavid Howells 	__u32	interlaced;
1057607ca46eSDavid Howells 	__u32	polarities;
1058607ca46eSDavid Howells 	__u64	pixelclock;
1059607ca46eSDavid Howells 	__u32	hfrontporch;
1060607ca46eSDavid Howells 	__u32	hsync;
1061607ca46eSDavid Howells 	__u32	hbackporch;
1062607ca46eSDavid Howells 	__u32	vfrontporch;
1063607ca46eSDavid Howells 	__u32	vsync;
1064607ca46eSDavid Howells 	__u32	vbackporch;
1065607ca46eSDavid Howells 	__u32	il_vfrontporch;
1066607ca46eSDavid Howells 	__u32	il_vsync;
1067607ca46eSDavid Howells 	__u32	il_vbackporch;
1068607ca46eSDavid Howells 	__u32	standards;
1069607ca46eSDavid Howells 	__u32	flags;
1070607ca46eSDavid Howells 	__u32	reserved[14];
1071607ca46eSDavid Howells } __attribute__ ((packed));
1072607ca46eSDavid Howells 
1073607ca46eSDavid Howells /* Interlaced or progressive format */
1074607ca46eSDavid Howells #define	V4L2_DV_PROGRESSIVE	0
1075607ca46eSDavid Howells #define	V4L2_DV_INTERLACED	1
1076607ca46eSDavid Howells 
1077607ca46eSDavid Howells /* Polarities. If bit is not set, it is assumed to be negative polarity */
1078607ca46eSDavid Howells #define V4L2_DV_VSYNC_POS_POL	0x00000001
1079607ca46eSDavid Howells #define V4L2_DV_HSYNC_POS_POL	0x00000002
1080607ca46eSDavid Howells 
1081607ca46eSDavid Howells /* Timings standards */
1082607ca46eSDavid Howells #define V4L2_DV_BT_STD_CEA861	(1 << 0)  /* CEA-861 Digital TV Profile */
1083607ca46eSDavid Howells #define V4L2_DV_BT_STD_DMT	(1 << 1)  /* VESA Discrete Monitor Timings */
1084607ca46eSDavid Howells #define V4L2_DV_BT_STD_CVT	(1 << 2)  /* VESA Coordinated Video Timings */
1085607ca46eSDavid Howells #define V4L2_DV_BT_STD_GTF	(1 << 3)  /* VESA Generalized Timings Formula */
1086607ca46eSDavid Howells 
1087607ca46eSDavid Howells /* Flags */
1088607ca46eSDavid Howells 
1089607ca46eSDavid Howells /* CVT/GTF specific: timing uses reduced blanking (CVT) or the 'Secondary
1090607ca46eSDavid Howells    GTF' curve (GTF). In both cases the horizontal and/or vertical blanking
1091607ca46eSDavid Howells    intervals are reduced, allowing a higher resolution over the same
1092607ca46eSDavid Howells    bandwidth. This is a read-only flag. */
1093607ca46eSDavid Howells #define V4L2_DV_FL_REDUCED_BLANKING		(1 << 0)
1094607ca46eSDavid Howells /* CEA-861 specific: set for CEA-861 formats with a framerate of a multiple
1095607ca46eSDavid Howells    of six. These formats can be optionally played at 1 / 1.001 speed.
1096607ca46eSDavid Howells    This is a read-only flag. */
1097607ca46eSDavid Howells #define V4L2_DV_FL_CAN_REDUCE_FPS		(1 << 1)
1098607ca46eSDavid Howells /* CEA-861 specific: only valid for video transmitters, the flag is cleared
1099607ca46eSDavid Howells    by receivers.
1100607ca46eSDavid Howells    If the framerate of the format is a multiple of six, then the pixelclock
1101607ca46eSDavid Howells    used to set up the transmitter is divided by 1.001 to make it compatible
1102607ca46eSDavid Howells    with 60 Hz based standards such as NTSC and PAL-M that use a framerate of
1103607ca46eSDavid Howells    29.97 Hz. Otherwise this flag is cleared. If the transmitter can't generate
1104607ca46eSDavid Howells    such frequencies, then the flag will also be cleared. */
1105607ca46eSDavid Howells #define V4L2_DV_FL_REDUCED_FPS			(1 << 2)
1106607ca46eSDavid Howells /* Specific to interlaced formats: if set, then field 1 is really one half-line
1107607ca46eSDavid Howells    longer and field 2 is really one half-line shorter, so each field has
1108607ca46eSDavid Howells    exactly the same number of half-lines. Whether half-lines can be detected
1109607ca46eSDavid Howells    or used depends on the hardware. */
1110607ca46eSDavid Howells #define V4L2_DV_FL_HALF_LINE			(1 << 0)
1111607ca46eSDavid Howells 
1112607ca46eSDavid Howells 
1113607ca46eSDavid Howells /** struct v4l2_dv_timings - DV timings
1114607ca46eSDavid Howells  * @type:	the type of the timings
1115607ca46eSDavid Howells  * @bt:	BT656/1120 timings
1116607ca46eSDavid Howells  */
1117607ca46eSDavid Howells struct v4l2_dv_timings {
1118607ca46eSDavid Howells 	__u32 type;
1119607ca46eSDavid Howells 	union {
1120607ca46eSDavid Howells 		struct v4l2_bt_timings	bt;
1121607ca46eSDavid Howells 		__u32	reserved[32];
1122607ca46eSDavid Howells 	};
1123607ca46eSDavid Howells } __attribute__ ((packed));
1124607ca46eSDavid Howells 
1125607ca46eSDavid Howells /* Values for the type field */
1126607ca46eSDavid Howells #define V4L2_DV_BT_656_1120	0	/* BT.656/1120 timing type */
1127607ca46eSDavid Howells 
1128607ca46eSDavid Howells 
1129607ca46eSDavid Howells /** struct v4l2_enum_dv_timings - DV timings enumeration
1130607ca46eSDavid Howells  * @index:	enumeration index
1131607ca46eSDavid Howells  * @reserved:	must be zeroed
1132607ca46eSDavid Howells  * @timings:	the timings for the given index
1133607ca46eSDavid Howells  */
1134607ca46eSDavid Howells struct v4l2_enum_dv_timings {
1135607ca46eSDavid Howells 	__u32 index;
1136607ca46eSDavid Howells 	__u32 reserved[3];
1137607ca46eSDavid Howells 	struct v4l2_dv_timings timings;
1138607ca46eSDavid Howells };
1139607ca46eSDavid Howells 
1140607ca46eSDavid Howells /** struct v4l2_bt_timings_cap - BT.656/BT.1120 timing capabilities
1141607ca46eSDavid Howells  * @min_width:		width in pixels
1142607ca46eSDavid Howells  * @max_width:		width in pixels
1143607ca46eSDavid Howells  * @min_height:		height in lines
1144607ca46eSDavid Howells  * @max_height:		height in lines
1145607ca46eSDavid Howells  * @min_pixelclock:	Pixel clock in HZ. Ex. 74.25MHz->74250000
1146607ca46eSDavid Howells  * @max_pixelclock:	Pixel clock in HZ. Ex. 74.25MHz->74250000
1147607ca46eSDavid Howells  * @standards:		Supported standards
1148607ca46eSDavid Howells  * @capabilities:	Supported capabilities
1149607ca46eSDavid Howells  * @reserved:		Must be zeroed
1150607ca46eSDavid Howells  */
1151607ca46eSDavid Howells struct v4l2_bt_timings_cap {
1152607ca46eSDavid Howells 	__u32	min_width;
1153607ca46eSDavid Howells 	__u32	max_width;
1154607ca46eSDavid Howells 	__u32	min_height;
1155607ca46eSDavid Howells 	__u32	max_height;
1156607ca46eSDavid Howells 	__u64	min_pixelclock;
1157607ca46eSDavid Howells 	__u64	max_pixelclock;
1158607ca46eSDavid Howells 	__u32	standards;
1159607ca46eSDavid Howells 	__u32	capabilities;
1160607ca46eSDavid Howells 	__u32	reserved[16];
1161607ca46eSDavid Howells } __attribute__ ((packed));
1162607ca46eSDavid Howells 
1163607ca46eSDavid Howells /* Supports interlaced formats */
1164607ca46eSDavid Howells #define V4L2_DV_BT_CAP_INTERLACED	(1 << 0)
1165607ca46eSDavid Howells /* Supports progressive formats */
1166607ca46eSDavid Howells #define V4L2_DV_BT_CAP_PROGRESSIVE	(1 << 1)
1167607ca46eSDavid Howells /* Supports CVT/GTF reduced blanking */
1168607ca46eSDavid Howells #define V4L2_DV_BT_CAP_REDUCED_BLANKING	(1 << 2)
1169607ca46eSDavid Howells /* Supports custom formats */
1170607ca46eSDavid Howells #define V4L2_DV_BT_CAP_CUSTOM		(1 << 3)
1171607ca46eSDavid Howells 
1172607ca46eSDavid Howells /** struct v4l2_dv_timings_cap - DV timings capabilities
1173607ca46eSDavid Howells  * @type:	the type of the timings (same as in struct v4l2_dv_timings)
1174607ca46eSDavid Howells  * @bt:		the BT656/1120 timings capabilities
1175607ca46eSDavid Howells  */
1176607ca46eSDavid Howells struct v4l2_dv_timings_cap {
1177607ca46eSDavid Howells 	__u32 type;
1178607ca46eSDavid Howells 	__u32 reserved[3];
1179607ca46eSDavid Howells 	union {
1180607ca46eSDavid Howells 		struct v4l2_bt_timings_cap bt;
1181607ca46eSDavid Howells 		__u32 raw_data[32];
1182607ca46eSDavid Howells 	};
1183607ca46eSDavid Howells };
1184607ca46eSDavid Howells 
1185607ca46eSDavid Howells 
1186607ca46eSDavid Howells /*
1187607ca46eSDavid Howells  *	V I D E O   I N P U T S
1188607ca46eSDavid Howells  */
1189607ca46eSDavid Howells struct v4l2_input {
1190607ca46eSDavid Howells 	__u32	     index;		/*  Which input */
1191607ca46eSDavid Howells 	__u8	     name[32];		/*  Label */
1192607ca46eSDavid Howells 	__u32	     type;		/*  Type of input */
1193607ca46eSDavid Howells 	__u32	     audioset;		/*  Associated audios (bitfield) */
1194607ca46eSDavid Howells 	__u32        tuner;             /*  enum v4l2_tuner_type */
1195607ca46eSDavid Howells 	v4l2_std_id  std;
1196607ca46eSDavid Howells 	__u32	     status;
1197607ca46eSDavid Howells 	__u32	     capabilities;
1198607ca46eSDavid Howells 	__u32	     reserved[3];
1199607ca46eSDavid Howells };
1200607ca46eSDavid Howells 
1201607ca46eSDavid Howells /*  Values for the 'type' field */
1202607ca46eSDavid Howells #define V4L2_INPUT_TYPE_TUNER		1
1203607ca46eSDavid Howells #define V4L2_INPUT_TYPE_CAMERA		2
1204607ca46eSDavid Howells 
1205607ca46eSDavid Howells /* field 'status' - general */
1206607ca46eSDavid Howells #define V4L2_IN_ST_NO_POWER    0x00000001  /* Attached device is off */
1207607ca46eSDavid Howells #define V4L2_IN_ST_NO_SIGNAL   0x00000002
1208607ca46eSDavid Howells #define V4L2_IN_ST_NO_COLOR    0x00000004
1209607ca46eSDavid Howells 
1210607ca46eSDavid Howells /* field 'status' - sensor orientation */
1211607ca46eSDavid Howells /* If sensor is mounted upside down set both bits */
1212607ca46eSDavid Howells #define V4L2_IN_ST_HFLIP       0x00000010 /* Frames are flipped horizontally */
1213607ca46eSDavid Howells #define V4L2_IN_ST_VFLIP       0x00000020 /* Frames are flipped vertically */
1214607ca46eSDavid Howells 
1215607ca46eSDavid Howells /* field 'status' - analog */
1216607ca46eSDavid Howells #define V4L2_IN_ST_NO_H_LOCK   0x00000100  /* No horizontal sync lock */
1217607ca46eSDavid Howells #define V4L2_IN_ST_COLOR_KILL  0x00000200  /* Color killer is active */
1218607ca46eSDavid Howells 
1219607ca46eSDavid Howells /* field 'status' - digital */
1220607ca46eSDavid Howells #define V4L2_IN_ST_NO_SYNC     0x00010000  /* No synchronization lock */
1221607ca46eSDavid Howells #define V4L2_IN_ST_NO_EQU      0x00020000  /* No equalizer lock */
1222607ca46eSDavid Howells #define V4L2_IN_ST_NO_CARRIER  0x00040000  /* Carrier recovery failed */
1223607ca46eSDavid Howells 
1224607ca46eSDavid Howells /* field 'status' - VCR and set-top box */
1225607ca46eSDavid Howells #define V4L2_IN_ST_MACROVISION 0x01000000  /* Macrovision detected */
1226607ca46eSDavid Howells #define V4L2_IN_ST_NO_ACCESS   0x02000000  /* Conditional access denied */
1227607ca46eSDavid Howells #define V4L2_IN_ST_VTR         0x04000000  /* VTR time constant */
1228607ca46eSDavid Howells 
1229607ca46eSDavid Howells /* capabilities flags */
1230607ca46eSDavid Howells #define V4L2_IN_CAP_PRESETS		0x00000001 /* Supports S_DV_PRESET */
1231607ca46eSDavid Howells #define V4L2_IN_CAP_DV_TIMINGS		0x00000002 /* Supports S_DV_TIMINGS */
1232607ca46eSDavid Howells #define V4L2_IN_CAP_CUSTOM_TIMINGS	V4L2_IN_CAP_DV_TIMINGS /* For compatibility */
1233607ca46eSDavid Howells #define V4L2_IN_CAP_STD			0x00000004 /* Supports S_STD */
1234607ca46eSDavid Howells 
1235607ca46eSDavid Howells /*
1236607ca46eSDavid Howells  *	V I D E O   O U T P U T S
1237607ca46eSDavid Howells  */
1238607ca46eSDavid Howells struct v4l2_output {
1239607ca46eSDavid Howells 	__u32	     index;		/*  Which output */
1240607ca46eSDavid Howells 	__u8	     name[32];		/*  Label */
1241607ca46eSDavid Howells 	__u32	     type;		/*  Type of output */
1242607ca46eSDavid Howells 	__u32	     audioset;		/*  Associated audios (bitfield) */
1243607ca46eSDavid Howells 	__u32	     modulator;         /*  Associated modulator */
1244607ca46eSDavid Howells 	v4l2_std_id  std;
1245607ca46eSDavid Howells 	__u32	     capabilities;
1246607ca46eSDavid Howells 	__u32	     reserved[3];
1247607ca46eSDavid Howells };
1248607ca46eSDavid Howells /*  Values for the 'type' field */
1249607ca46eSDavid Howells #define V4L2_OUTPUT_TYPE_MODULATOR		1
1250607ca46eSDavid Howells #define V4L2_OUTPUT_TYPE_ANALOG			2
1251607ca46eSDavid Howells #define V4L2_OUTPUT_TYPE_ANALOGVGAOVERLAY	3
1252607ca46eSDavid Howells 
1253607ca46eSDavid Howells /* capabilities flags */
1254607ca46eSDavid Howells #define V4L2_OUT_CAP_PRESETS		0x00000001 /* Supports S_DV_PRESET */
1255607ca46eSDavid Howells #define V4L2_OUT_CAP_DV_TIMINGS		0x00000002 /* Supports S_DV_TIMINGS */
1256607ca46eSDavid Howells #define V4L2_OUT_CAP_CUSTOM_TIMINGS	V4L2_OUT_CAP_DV_TIMINGS /* For compatibility */
1257607ca46eSDavid Howells #define V4L2_OUT_CAP_STD		0x00000004 /* Supports S_STD */
1258607ca46eSDavid Howells 
1259607ca46eSDavid Howells /*
1260607ca46eSDavid Howells  *	C O N T R O L S
1261607ca46eSDavid Howells  */
1262607ca46eSDavid Howells struct v4l2_control {
1263607ca46eSDavid Howells 	__u32		     id;
1264607ca46eSDavid Howells 	__s32		     value;
1265607ca46eSDavid Howells };
1266607ca46eSDavid Howells 
1267607ca46eSDavid Howells struct v4l2_ext_control {
1268607ca46eSDavid Howells 	__u32 id;
1269607ca46eSDavid Howells 	__u32 size;
1270607ca46eSDavid Howells 	__u32 reserved2[1];
1271607ca46eSDavid Howells 	union {
1272607ca46eSDavid Howells 		__s32 value;
1273607ca46eSDavid Howells 		__s64 value64;
1274607ca46eSDavid Howells 		char *string;
1275607ca46eSDavid Howells 	};
1276607ca46eSDavid Howells } __attribute__ ((packed));
1277607ca46eSDavid Howells 
1278607ca46eSDavid Howells struct v4l2_ext_controls {
1279607ca46eSDavid Howells 	__u32 ctrl_class;
1280607ca46eSDavid Howells 	__u32 count;
1281607ca46eSDavid Howells 	__u32 error_idx;
1282607ca46eSDavid Howells 	__u32 reserved[2];
1283607ca46eSDavid Howells 	struct v4l2_ext_control *controls;
1284607ca46eSDavid Howells };
1285607ca46eSDavid Howells 
1286607ca46eSDavid Howells #define V4L2_CTRL_ID_MASK      	  (0x0fffffff)
1287607ca46eSDavid Howells #define V4L2_CTRL_ID2CLASS(id)    ((id) & 0x0fff0000UL)
1288607ca46eSDavid Howells #define V4L2_CTRL_DRIVER_PRIV(id) (((id) & 0xffff) >= 0x1000)
1289607ca46eSDavid Howells 
1290607ca46eSDavid Howells enum v4l2_ctrl_type {
1291607ca46eSDavid Howells 	V4L2_CTRL_TYPE_INTEGER	     = 1,
1292607ca46eSDavid Howells 	V4L2_CTRL_TYPE_BOOLEAN	     = 2,
1293607ca46eSDavid Howells 	V4L2_CTRL_TYPE_MENU	     = 3,
1294607ca46eSDavid Howells 	V4L2_CTRL_TYPE_BUTTON	     = 4,
1295607ca46eSDavid Howells 	V4L2_CTRL_TYPE_INTEGER64     = 5,
1296607ca46eSDavid Howells 	V4L2_CTRL_TYPE_CTRL_CLASS    = 6,
1297607ca46eSDavid Howells 	V4L2_CTRL_TYPE_STRING        = 7,
1298607ca46eSDavid Howells 	V4L2_CTRL_TYPE_BITMASK       = 8,
1299607ca46eSDavid Howells 	V4L2_CTRL_TYPE_INTEGER_MENU = 9,
1300607ca46eSDavid Howells };
1301607ca46eSDavid Howells 
1302607ca46eSDavid Howells /*  Used in the VIDIOC_QUERYCTRL ioctl for querying controls */
1303607ca46eSDavid Howells struct v4l2_queryctrl {
1304607ca46eSDavid Howells 	__u32		     id;
1305607ca46eSDavid Howells 	__u32		     type;	/* enum v4l2_ctrl_type */
1306607ca46eSDavid Howells 	__u8		     name[32];	/* Whatever */
1307607ca46eSDavid Howells 	__s32		     minimum;	/* Note signedness */
1308607ca46eSDavid Howells 	__s32		     maximum;
1309607ca46eSDavid Howells 	__s32		     step;
1310607ca46eSDavid Howells 	__s32		     default_value;
1311607ca46eSDavid Howells 	__u32                flags;
1312607ca46eSDavid Howells 	__u32		     reserved[2];
1313607ca46eSDavid Howells };
1314607ca46eSDavid Howells 
1315607ca46eSDavid Howells /*  Used in the VIDIOC_QUERYMENU ioctl for querying menu items */
1316607ca46eSDavid Howells struct v4l2_querymenu {
1317607ca46eSDavid Howells 	__u32		id;
1318607ca46eSDavid Howells 	__u32		index;
1319607ca46eSDavid Howells 	union {
1320607ca46eSDavid Howells 		__u8	name[32];	/* Whatever */
1321607ca46eSDavid Howells 		__s64	value;
1322607ca46eSDavid Howells 	};
1323607ca46eSDavid Howells 	__u32		reserved;
1324607ca46eSDavid Howells } __attribute__ ((packed));
1325607ca46eSDavid Howells 
1326607ca46eSDavid Howells /*  Control flags  */
1327607ca46eSDavid Howells #define V4L2_CTRL_FLAG_DISABLED		0x0001
1328607ca46eSDavid Howells #define V4L2_CTRL_FLAG_GRABBED		0x0002
1329607ca46eSDavid Howells #define V4L2_CTRL_FLAG_READ_ONLY 	0x0004
1330607ca46eSDavid Howells #define V4L2_CTRL_FLAG_UPDATE 		0x0008
1331607ca46eSDavid Howells #define V4L2_CTRL_FLAG_INACTIVE 	0x0010
1332607ca46eSDavid Howells #define V4L2_CTRL_FLAG_SLIDER 		0x0020
1333607ca46eSDavid Howells #define V4L2_CTRL_FLAG_WRITE_ONLY 	0x0040
1334607ca46eSDavid Howells #define V4L2_CTRL_FLAG_VOLATILE		0x0080
1335607ca46eSDavid Howells 
1336607ca46eSDavid Howells /*  Query flag, to be ORed with the control ID */
1337607ca46eSDavid Howells #define V4L2_CTRL_FLAG_NEXT_CTRL	0x80000000
1338607ca46eSDavid Howells 
1339607ca46eSDavid Howells /*  User-class control IDs defined by V4L2 */
1340607ca46eSDavid Howells #define V4L2_CID_MAX_CTRLS		1024
1341607ca46eSDavid Howells /*  IDs reserved for driver specific controls */
1342607ca46eSDavid Howells #define V4L2_CID_PRIVATE_BASE		0x08000000
1343607ca46eSDavid Howells 
1344607ca46eSDavid Howells 
1345607ca46eSDavid Howells /*  DV-class control IDs defined by V4L2 */
1346607ca46eSDavid Howells #define V4L2_CID_DV_CLASS_BASE			(V4L2_CTRL_CLASS_DV | 0x900)
1347607ca46eSDavid Howells #define V4L2_CID_DV_CLASS			(V4L2_CTRL_CLASS_DV | 1)
1348607ca46eSDavid Howells 
1349607ca46eSDavid Howells #define	V4L2_CID_DV_TX_HOTPLUG			(V4L2_CID_DV_CLASS_BASE + 1)
1350607ca46eSDavid Howells #define	V4L2_CID_DV_TX_RXSENSE			(V4L2_CID_DV_CLASS_BASE + 2)
1351607ca46eSDavid Howells #define	V4L2_CID_DV_TX_EDID_PRESENT		(V4L2_CID_DV_CLASS_BASE + 3)
1352607ca46eSDavid Howells #define	V4L2_CID_DV_TX_MODE			(V4L2_CID_DV_CLASS_BASE + 4)
1353607ca46eSDavid Howells enum v4l2_dv_tx_mode {
1354607ca46eSDavid Howells 	V4L2_DV_TX_MODE_DVI_D	= 0,
1355607ca46eSDavid Howells 	V4L2_DV_TX_MODE_HDMI	= 1,
1356607ca46eSDavid Howells };
1357607ca46eSDavid Howells #define V4L2_CID_DV_TX_RGB_RANGE		(V4L2_CID_DV_CLASS_BASE + 5)
1358607ca46eSDavid Howells enum v4l2_dv_rgb_range {
1359607ca46eSDavid Howells 	V4L2_DV_RGB_RANGE_AUTO	  = 0,
1360607ca46eSDavid Howells 	V4L2_DV_RGB_RANGE_LIMITED = 1,
1361607ca46eSDavid Howells 	V4L2_DV_RGB_RANGE_FULL	  = 2,
1362607ca46eSDavid Howells };
1363607ca46eSDavid Howells 
1364607ca46eSDavid Howells #define	V4L2_CID_DV_RX_POWER_PRESENT		(V4L2_CID_DV_CLASS_BASE + 100)
1365607ca46eSDavid Howells #define V4L2_CID_DV_RX_RGB_RANGE		(V4L2_CID_DV_CLASS_BASE + 101)
1366607ca46eSDavid Howells 
1367607ca46eSDavid Howells /*
1368607ca46eSDavid Howells  *	T U N I N G
1369607ca46eSDavid Howells  */
1370607ca46eSDavid Howells struct v4l2_tuner {
1371607ca46eSDavid Howells 	__u32                   index;
1372607ca46eSDavid Howells 	__u8			name[32];
1373607ca46eSDavid Howells 	__u32			type;	/* enum v4l2_tuner_type */
1374607ca46eSDavid Howells 	__u32			capability;
1375607ca46eSDavid Howells 	__u32			rangelow;
1376607ca46eSDavid Howells 	__u32			rangehigh;
1377607ca46eSDavid Howells 	__u32			rxsubchans;
1378607ca46eSDavid Howells 	__u32			audmode;
1379607ca46eSDavid Howells 	__s32			signal;
1380607ca46eSDavid Howells 	__s32			afc;
1381607ca46eSDavid Howells 	__u32			reserved[4];
1382607ca46eSDavid Howells };
1383607ca46eSDavid Howells 
1384607ca46eSDavid Howells struct v4l2_modulator {
1385607ca46eSDavid Howells 	__u32			index;
1386607ca46eSDavid Howells 	__u8			name[32];
1387607ca46eSDavid Howells 	__u32			capability;
1388607ca46eSDavid Howells 	__u32			rangelow;
1389607ca46eSDavid Howells 	__u32			rangehigh;
1390607ca46eSDavid Howells 	__u32			txsubchans;
1391607ca46eSDavid Howells 	__u32			reserved[4];
1392607ca46eSDavid Howells };
1393607ca46eSDavid Howells 
1394607ca46eSDavid Howells /*  Flags for the 'capability' field */
1395607ca46eSDavid Howells #define V4L2_TUNER_CAP_LOW		0x0001
1396607ca46eSDavid Howells #define V4L2_TUNER_CAP_NORM		0x0002
1397607ca46eSDavid Howells #define V4L2_TUNER_CAP_HWSEEK_BOUNDED	0x0004
1398607ca46eSDavid Howells #define V4L2_TUNER_CAP_HWSEEK_WRAP	0x0008
1399607ca46eSDavid Howells #define V4L2_TUNER_CAP_STEREO		0x0010
1400607ca46eSDavid Howells #define V4L2_TUNER_CAP_LANG2		0x0020
1401607ca46eSDavid Howells #define V4L2_TUNER_CAP_SAP		0x0020
1402607ca46eSDavid Howells #define V4L2_TUNER_CAP_LANG1		0x0040
1403607ca46eSDavid Howells #define V4L2_TUNER_CAP_RDS		0x0080
1404607ca46eSDavid Howells #define V4L2_TUNER_CAP_RDS_BLOCK_IO	0x0100
1405607ca46eSDavid Howells #define V4L2_TUNER_CAP_RDS_CONTROLS	0x0200
1406607ca46eSDavid Howells #define V4L2_TUNER_CAP_FREQ_BANDS	0x0400
1407607ca46eSDavid Howells #define V4L2_TUNER_CAP_HWSEEK_PROG_LIM	0x0800
1408607ca46eSDavid Howells 
1409607ca46eSDavid Howells /*  Flags for the 'rxsubchans' field */
1410607ca46eSDavid Howells #define V4L2_TUNER_SUB_MONO		0x0001
1411607ca46eSDavid Howells #define V4L2_TUNER_SUB_STEREO		0x0002
1412607ca46eSDavid Howells #define V4L2_TUNER_SUB_LANG2		0x0004
1413607ca46eSDavid Howells #define V4L2_TUNER_SUB_SAP		0x0004
1414607ca46eSDavid Howells #define V4L2_TUNER_SUB_LANG1		0x0008
1415607ca46eSDavid Howells #define V4L2_TUNER_SUB_RDS		0x0010
1416607ca46eSDavid Howells 
1417607ca46eSDavid Howells /*  Values for the 'audmode' field */
1418607ca46eSDavid Howells #define V4L2_TUNER_MODE_MONO		0x0000
1419607ca46eSDavid Howells #define V4L2_TUNER_MODE_STEREO		0x0001
1420607ca46eSDavid Howells #define V4L2_TUNER_MODE_LANG2		0x0002
1421607ca46eSDavid Howells #define V4L2_TUNER_MODE_SAP		0x0002
1422607ca46eSDavid Howells #define V4L2_TUNER_MODE_LANG1		0x0003
1423607ca46eSDavid Howells #define V4L2_TUNER_MODE_LANG1_LANG2	0x0004
1424607ca46eSDavid Howells 
1425607ca46eSDavid Howells struct v4l2_frequency {
1426607ca46eSDavid Howells 	__u32	tuner;
1427607ca46eSDavid Howells 	__u32	type;	/* enum v4l2_tuner_type */
1428607ca46eSDavid Howells 	__u32	frequency;
1429607ca46eSDavid Howells 	__u32	reserved[8];
1430607ca46eSDavid Howells };
1431607ca46eSDavid Howells 
1432607ca46eSDavid Howells #define V4L2_BAND_MODULATION_VSB	(1 << 1)
1433607ca46eSDavid Howells #define V4L2_BAND_MODULATION_FM		(1 << 2)
1434607ca46eSDavid Howells #define V4L2_BAND_MODULATION_AM		(1 << 3)
1435607ca46eSDavid Howells 
1436607ca46eSDavid Howells struct v4l2_frequency_band {
1437607ca46eSDavid Howells 	__u32	tuner;
1438607ca46eSDavid Howells 	__u32	type;	/* enum v4l2_tuner_type */
1439607ca46eSDavid Howells 	__u32	index;
1440607ca46eSDavid Howells 	__u32	capability;
1441607ca46eSDavid Howells 	__u32	rangelow;
1442607ca46eSDavid Howells 	__u32	rangehigh;
1443607ca46eSDavid Howells 	__u32	modulation;
1444607ca46eSDavid Howells 	__u32	reserved[9];
1445607ca46eSDavid Howells };
1446607ca46eSDavid Howells 
1447607ca46eSDavid Howells struct v4l2_hw_freq_seek {
1448607ca46eSDavid Howells 	__u32	tuner;
1449607ca46eSDavid Howells 	__u32	type;	/* enum v4l2_tuner_type */
1450607ca46eSDavid Howells 	__u32	seek_upward;
1451607ca46eSDavid Howells 	__u32	wrap_around;
1452607ca46eSDavid Howells 	__u32	spacing;
1453607ca46eSDavid Howells 	__u32	rangelow;
1454607ca46eSDavid Howells 	__u32	rangehigh;
1455607ca46eSDavid Howells 	__u32	reserved[5];
1456607ca46eSDavid Howells };
1457607ca46eSDavid Howells 
1458607ca46eSDavid Howells /*
1459607ca46eSDavid Howells  *	R D S
1460607ca46eSDavid Howells  */
1461607ca46eSDavid Howells 
1462607ca46eSDavid Howells struct v4l2_rds_data {
1463607ca46eSDavid Howells 	__u8 	lsb;
1464607ca46eSDavid Howells 	__u8 	msb;
1465607ca46eSDavid Howells 	__u8 	block;
1466607ca46eSDavid Howells } __attribute__ ((packed));
1467607ca46eSDavid Howells 
1468607ca46eSDavid Howells #define V4L2_RDS_BLOCK_MSK 	 0x7
1469607ca46eSDavid Howells #define V4L2_RDS_BLOCK_A 	 0
1470607ca46eSDavid Howells #define V4L2_RDS_BLOCK_B 	 1
1471607ca46eSDavid Howells #define V4L2_RDS_BLOCK_C 	 2
1472607ca46eSDavid Howells #define V4L2_RDS_BLOCK_D 	 3
1473607ca46eSDavid Howells #define V4L2_RDS_BLOCK_C_ALT 	 4
1474607ca46eSDavid Howells #define V4L2_RDS_BLOCK_INVALID 	 7
1475607ca46eSDavid Howells 
1476607ca46eSDavid Howells #define V4L2_RDS_BLOCK_CORRECTED 0x40
1477607ca46eSDavid Howells #define V4L2_RDS_BLOCK_ERROR 	 0x80
1478607ca46eSDavid Howells 
1479607ca46eSDavid Howells /*
1480607ca46eSDavid Howells  *	A U D I O
1481607ca46eSDavid Howells  */
1482607ca46eSDavid Howells struct v4l2_audio {
1483607ca46eSDavid Howells 	__u32	index;
1484607ca46eSDavid Howells 	__u8	name[32];
1485607ca46eSDavid Howells 	__u32	capability;
1486607ca46eSDavid Howells 	__u32	mode;
1487607ca46eSDavid Howells 	__u32	reserved[2];
1488607ca46eSDavid Howells };
1489607ca46eSDavid Howells 
1490607ca46eSDavid Howells /*  Flags for the 'capability' field */
1491607ca46eSDavid Howells #define V4L2_AUDCAP_STEREO		0x00001
1492607ca46eSDavid Howells #define V4L2_AUDCAP_AVL			0x00002
1493607ca46eSDavid Howells 
1494607ca46eSDavid Howells /*  Flags for the 'mode' field */
1495607ca46eSDavid Howells #define V4L2_AUDMODE_AVL		0x00001
1496607ca46eSDavid Howells 
1497607ca46eSDavid Howells struct v4l2_audioout {
1498607ca46eSDavid Howells 	__u32	index;
1499607ca46eSDavid Howells 	__u8	name[32];
1500607ca46eSDavid Howells 	__u32	capability;
1501607ca46eSDavid Howells 	__u32	mode;
1502607ca46eSDavid Howells 	__u32	reserved[2];
1503607ca46eSDavid Howells };
1504607ca46eSDavid Howells 
1505607ca46eSDavid Howells /*
1506607ca46eSDavid Howells  *	M P E G   S E R V I C E S
1507607ca46eSDavid Howells  *
1508607ca46eSDavid Howells  *	NOTE: EXPERIMENTAL API
1509607ca46eSDavid Howells  */
1510607ca46eSDavid Howells #if 1
1511607ca46eSDavid Howells #define V4L2_ENC_IDX_FRAME_I    (0)
1512607ca46eSDavid Howells #define V4L2_ENC_IDX_FRAME_P    (1)
1513607ca46eSDavid Howells #define V4L2_ENC_IDX_FRAME_B    (2)
1514607ca46eSDavid Howells #define V4L2_ENC_IDX_FRAME_MASK (0xf)
1515607ca46eSDavid Howells 
1516607ca46eSDavid Howells struct v4l2_enc_idx_entry {
1517607ca46eSDavid Howells 	__u64 offset;
1518607ca46eSDavid Howells 	__u64 pts;
1519607ca46eSDavid Howells 	__u32 length;
1520607ca46eSDavid Howells 	__u32 flags;
1521607ca46eSDavid Howells 	__u32 reserved[2];
1522607ca46eSDavid Howells };
1523607ca46eSDavid Howells 
1524607ca46eSDavid Howells #define V4L2_ENC_IDX_ENTRIES (64)
1525607ca46eSDavid Howells struct v4l2_enc_idx {
1526607ca46eSDavid Howells 	__u32 entries;
1527607ca46eSDavid Howells 	__u32 entries_cap;
1528607ca46eSDavid Howells 	__u32 reserved[4];
1529607ca46eSDavid Howells 	struct v4l2_enc_idx_entry entry[V4L2_ENC_IDX_ENTRIES];
1530607ca46eSDavid Howells };
1531607ca46eSDavid Howells 
1532607ca46eSDavid Howells 
1533607ca46eSDavid Howells #define V4L2_ENC_CMD_START      (0)
1534607ca46eSDavid Howells #define V4L2_ENC_CMD_STOP       (1)
1535607ca46eSDavid Howells #define V4L2_ENC_CMD_PAUSE      (2)
1536607ca46eSDavid Howells #define V4L2_ENC_CMD_RESUME     (3)
1537607ca46eSDavid Howells 
1538607ca46eSDavid Howells /* Flags for V4L2_ENC_CMD_STOP */
1539607ca46eSDavid Howells #define V4L2_ENC_CMD_STOP_AT_GOP_END    (1 << 0)
1540607ca46eSDavid Howells 
1541607ca46eSDavid Howells struct v4l2_encoder_cmd {
1542607ca46eSDavid Howells 	__u32 cmd;
1543607ca46eSDavid Howells 	__u32 flags;
1544607ca46eSDavid Howells 	union {
1545607ca46eSDavid Howells 		struct {
1546607ca46eSDavid Howells 			__u32 data[8];
1547607ca46eSDavid Howells 		} raw;
1548607ca46eSDavid Howells 	};
1549607ca46eSDavid Howells };
1550607ca46eSDavid Howells 
1551607ca46eSDavid Howells /* Decoder commands */
1552607ca46eSDavid Howells #define V4L2_DEC_CMD_START       (0)
1553607ca46eSDavid Howells #define V4L2_DEC_CMD_STOP        (1)
1554607ca46eSDavid Howells #define V4L2_DEC_CMD_PAUSE       (2)
1555607ca46eSDavid Howells #define V4L2_DEC_CMD_RESUME      (3)
1556607ca46eSDavid Howells 
1557607ca46eSDavid Howells /* Flags for V4L2_DEC_CMD_START */
1558607ca46eSDavid Howells #define V4L2_DEC_CMD_START_MUTE_AUDIO	(1 << 0)
1559607ca46eSDavid Howells 
1560607ca46eSDavid Howells /* Flags for V4L2_DEC_CMD_PAUSE */
1561607ca46eSDavid Howells #define V4L2_DEC_CMD_PAUSE_TO_BLACK	(1 << 0)
1562607ca46eSDavid Howells 
1563607ca46eSDavid Howells /* Flags for V4L2_DEC_CMD_STOP */
1564607ca46eSDavid Howells #define V4L2_DEC_CMD_STOP_TO_BLACK	(1 << 0)
1565607ca46eSDavid Howells #define V4L2_DEC_CMD_STOP_IMMEDIATELY	(1 << 1)
1566607ca46eSDavid Howells 
1567607ca46eSDavid Howells /* Play format requirements (returned by the driver): */
1568607ca46eSDavid Howells 
1569607ca46eSDavid Howells /* The decoder has no special format requirements */
1570607ca46eSDavid Howells #define V4L2_DEC_START_FMT_NONE		(0)
1571607ca46eSDavid Howells /* The decoder requires full GOPs */
1572607ca46eSDavid Howells #define V4L2_DEC_START_FMT_GOP		(1)
1573607ca46eSDavid Howells 
1574607ca46eSDavid Howells /* The structure must be zeroed before use by the application
1575607ca46eSDavid Howells    This ensures it can be extended safely in the future. */
1576607ca46eSDavid Howells struct v4l2_decoder_cmd {
1577607ca46eSDavid Howells 	__u32 cmd;
1578607ca46eSDavid Howells 	__u32 flags;
1579607ca46eSDavid Howells 	union {
1580607ca46eSDavid Howells 		struct {
1581607ca46eSDavid Howells 			__u64 pts;
1582607ca46eSDavid Howells 		} stop;
1583607ca46eSDavid Howells 
1584607ca46eSDavid Howells 		struct {
1585607ca46eSDavid Howells 			/* 0 or 1000 specifies normal speed,
1586607ca46eSDavid Howells 			   1 specifies forward single stepping,
1587607ca46eSDavid Howells 			   -1 specifies backward single stepping,
1588607ca46eSDavid Howells 			   >1: playback at speed/1000 of the normal speed,
1589607ca46eSDavid Howells 			   <-1: reverse playback at (-speed/1000) of the normal speed. */
1590607ca46eSDavid Howells 			__s32 speed;
1591607ca46eSDavid Howells 			__u32 format;
1592607ca46eSDavid Howells 		} start;
1593607ca46eSDavid Howells 
1594607ca46eSDavid Howells 		struct {
1595607ca46eSDavid Howells 			__u32 data[16];
1596607ca46eSDavid Howells 		} raw;
1597607ca46eSDavid Howells 	};
1598607ca46eSDavid Howells };
1599607ca46eSDavid Howells #endif
1600607ca46eSDavid Howells 
1601607ca46eSDavid Howells 
1602607ca46eSDavid Howells /*
1603607ca46eSDavid Howells  *	D A T A   S E R V I C E S   ( V B I )
1604607ca46eSDavid Howells  *
1605607ca46eSDavid Howells  *	Data services API by Michael Schimek
1606607ca46eSDavid Howells  */
1607607ca46eSDavid Howells 
1608607ca46eSDavid Howells /* Raw VBI */
1609607ca46eSDavid Howells struct v4l2_vbi_format {
1610607ca46eSDavid Howells 	__u32	sampling_rate;		/* in 1 Hz */
1611607ca46eSDavid Howells 	__u32	offset;
1612607ca46eSDavid Howells 	__u32	samples_per_line;
1613607ca46eSDavid Howells 	__u32	sample_format;		/* V4L2_PIX_FMT_* */
1614607ca46eSDavid Howells 	__s32	start[2];
1615607ca46eSDavid Howells 	__u32	count[2];
1616607ca46eSDavid Howells 	__u32	flags;			/* V4L2_VBI_* */
1617607ca46eSDavid Howells 	__u32	reserved[2];		/* must be zero */
1618607ca46eSDavid Howells };
1619607ca46eSDavid Howells 
1620607ca46eSDavid Howells /*  VBI flags  */
1621607ca46eSDavid Howells #define V4L2_VBI_UNSYNC		(1 << 0)
1622607ca46eSDavid Howells #define V4L2_VBI_INTERLACED	(1 << 1)
1623607ca46eSDavid Howells 
1624607ca46eSDavid Howells /* Sliced VBI
1625607ca46eSDavid Howells  *
1626607ca46eSDavid Howells  *    This implements is a proposal V4L2 API to allow SLICED VBI
1627607ca46eSDavid Howells  * required for some hardware encoders. It should change without
1628607ca46eSDavid Howells  * notice in the definitive implementation.
1629607ca46eSDavid Howells  */
1630607ca46eSDavid Howells 
1631607ca46eSDavid Howells struct v4l2_sliced_vbi_format {
1632607ca46eSDavid Howells 	__u16   service_set;
1633607ca46eSDavid Howells 	/* service_lines[0][...] specifies lines 0-23 (1-23 used) of the first field
1634607ca46eSDavid Howells 	   service_lines[1][...] specifies lines 0-23 (1-23 used) of the second field
1635607ca46eSDavid Howells 				 (equals frame lines 313-336 for 625 line video
1636607ca46eSDavid Howells 				  standards, 263-286 for 525 line standards) */
1637607ca46eSDavid Howells 	__u16   service_lines[2][24];
1638607ca46eSDavid Howells 	__u32   io_size;
1639607ca46eSDavid Howells 	__u32   reserved[2];            /* must be zero */
1640607ca46eSDavid Howells };
1641607ca46eSDavid Howells 
1642607ca46eSDavid Howells /* Teletext World System Teletext
1643607ca46eSDavid Howells    (WST), defined on ITU-R BT.653-2 */
1644607ca46eSDavid Howells #define V4L2_SLICED_TELETEXT_B          (0x0001)
1645607ca46eSDavid Howells /* Video Program System, defined on ETS 300 231*/
1646607ca46eSDavid Howells #define V4L2_SLICED_VPS                 (0x0400)
1647607ca46eSDavid Howells /* Closed Caption, defined on EIA-608 */
1648607ca46eSDavid Howells #define V4L2_SLICED_CAPTION_525         (0x1000)
1649607ca46eSDavid Howells /* Wide Screen System, defined on ITU-R BT1119.1 */
1650607ca46eSDavid Howells #define V4L2_SLICED_WSS_625             (0x4000)
1651607ca46eSDavid Howells 
1652607ca46eSDavid Howells #define V4L2_SLICED_VBI_525             (V4L2_SLICED_CAPTION_525)
1653607ca46eSDavid Howells #define V4L2_SLICED_VBI_625             (V4L2_SLICED_TELETEXT_B | V4L2_SLICED_VPS | V4L2_SLICED_WSS_625)
1654607ca46eSDavid Howells 
1655607ca46eSDavid Howells struct v4l2_sliced_vbi_cap {
1656607ca46eSDavid Howells 	__u16   service_set;
1657607ca46eSDavid Howells 	/* service_lines[0][...] specifies lines 0-23 (1-23 used) of the first field
1658607ca46eSDavid Howells 	   service_lines[1][...] specifies lines 0-23 (1-23 used) of the second field
1659607ca46eSDavid Howells 				 (equals frame lines 313-336 for 625 line video
1660607ca46eSDavid Howells 				  standards, 263-286 for 525 line standards) */
1661607ca46eSDavid Howells 	__u16   service_lines[2][24];
1662607ca46eSDavid Howells 	__u32	type;		/* enum v4l2_buf_type */
1663607ca46eSDavid Howells 	__u32   reserved[3];    /* must be 0 */
1664607ca46eSDavid Howells };
1665607ca46eSDavid Howells 
1666607ca46eSDavid Howells struct v4l2_sliced_vbi_data {
1667607ca46eSDavid Howells 	__u32   id;
1668607ca46eSDavid Howells 	__u32   field;          /* 0: first field, 1: second field */
1669607ca46eSDavid Howells 	__u32   line;           /* 1-23 */
1670607ca46eSDavid Howells 	__u32   reserved;       /* must be 0 */
1671607ca46eSDavid Howells 	__u8    data[48];
1672607ca46eSDavid Howells };
1673607ca46eSDavid Howells 
1674607ca46eSDavid Howells /*
1675607ca46eSDavid Howells  * Sliced VBI data inserted into MPEG Streams
1676607ca46eSDavid Howells  */
1677607ca46eSDavid Howells 
1678607ca46eSDavid Howells /*
1679607ca46eSDavid Howells  * V4L2_MPEG_STREAM_VBI_FMT_IVTV:
1680607ca46eSDavid Howells  *
1681607ca46eSDavid Howells  * Structure of payload contained in an MPEG 2 Private Stream 1 PES Packet in an
1682607ca46eSDavid Howells  * MPEG-2 Program Pack that contains V4L2_MPEG_STREAM_VBI_FMT_IVTV Sliced VBI
1683607ca46eSDavid Howells  * data
1684607ca46eSDavid Howells  *
1685607ca46eSDavid Howells  * Note, the MPEG-2 Program Pack and Private Stream 1 PES packet header
1686607ca46eSDavid Howells  * definitions are not included here.  See the MPEG-2 specifications for details
1687607ca46eSDavid Howells  * on these headers.
1688607ca46eSDavid Howells  */
1689607ca46eSDavid Howells 
1690607ca46eSDavid Howells /* Line type IDs */
1691607ca46eSDavid Howells #define V4L2_MPEG_VBI_IVTV_TELETEXT_B     (1)
1692607ca46eSDavid Howells #define V4L2_MPEG_VBI_IVTV_CAPTION_525    (4)
1693607ca46eSDavid Howells #define V4L2_MPEG_VBI_IVTV_WSS_625        (5)
1694607ca46eSDavid Howells #define V4L2_MPEG_VBI_IVTV_VPS            (7)
1695607ca46eSDavid Howells 
1696607ca46eSDavid Howells struct v4l2_mpeg_vbi_itv0_line {
1697607ca46eSDavid Howells 	__u8 id;	/* One of V4L2_MPEG_VBI_IVTV_* above */
1698607ca46eSDavid Howells 	__u8 data[42];	/* Sliced VBI data for the line */
1699607ca46eSDavid Howells } __attribute__ ((packed));
1700607ca46eSDavid Howells 
1701607ca46eSDavid Howells struct v4l2_mpeg_vbi_itv0 {
1702607ca46eSDavid Howells 	__le32 linemask[2]; /* Bitmasks of VBI service lines present */
1703607ca46eSDavid Howells 	struct v4l2_mpeg_vbi_itv0_line line[35];
1704607ca46eSDavid Howells } __attribute__ ((packed));
1705607ca46eSDavid Howells 
1706607ca46eSDavid Howells struct v4l2_mpeg_vbi_ITV0 {
1707607ca46eSDavid Howells 	struct v4l2_mpeg_vbi_itv0_line line[36];
1708607ca46eSDavid Howells } __attribute__ ((packed));
1709607ca46eSDavid Howells 
1710607ca46eSDavid Howells #define V4L2_MPEG_VBI_IVTV_MAGIC0	"itv0"
1711607ca46eSDavid Howells #define V4L2_MPEG_VBI_IVTV_MAGIC1	"ITV0"
1712607ca46eSDavid Howells 
1713607ca46eSDavid Howells struct v4l2_mpeg_vbi_fmt_ivtv {
1714607ca46eSDavid Howells 	__u8 magic[4];
1715607ca46eSDavid Howells 	union {
1716607ca46eSDavid Howells 		struct v4l2_mpeg_vbi_itv0 itv0;
1717607ca46eSDavid Howells 		struct v4l2_mpeg_vbi_ITV0 ITV0;
1718607ca46eSDavid Howells 	};
1719607ca46eSDavid Howells } __attribute__ ((packed));
1720607ca46eSDavid Howells 
1721607ca46eSDavid Howells /*
1722607ca46eSDavid Howells  *	A G G R E G A T E   S T R U C T U R E S
1723607ca46eSDavid Howells  */
1724607ca46eSDavid Howells 
1725607ca46eSDavid Howells /**
1726607ca46eSDavid Howells  * struct v4l2_plane_pix_format - additional, per-plane format definition
1727607ca46eSDavid Howells  * @sizeimage:		maximum size in bytes required for data, for which
1728607ca46eSDavid Howells  *			this plane will be used
1729607ca46eSDavid Howells  * @bytesperline:	distance in bytes between the leftmost pixels in two
1730607ca46eSDavid Howells  *			adjacent lines
1731607ca46eSDavid Howells  */
1732607ca46eSDavid Howells struct v4l2_plane_pix_format {
1733607ca46eSDavid Howells 	__u32		sizeimage;
1734607ca46eSDavid Howells 	__u16		bytesperline;
1735607ca46eSDavid Howells 	__u16		reserved[7];
1736607ca46eSDavid Howells } __attribute__ ((packed));
1737607ca46eSDavid Howells 
1738607ca46eSDavid Howells /**
1739607ca46eSDavid Howells  * struct v4l2_pix_format_mplane - multiplanar format definition
1740607ca46eSDavid Howells  * @width:		image width in pixels
1741607ca46eSDavid Howells  * @height:		image height in pixels
1742607ca46eSDavid Howells  * @pixelformat:	little endian four character code (fourcc)
1743607ca46eSDavid Howells  * @field:		enum v4l2_field; field order (for interlaced video)
1744607ca46eSDavid Howells  * @colorspace:		enum v4l2_colorspace; supplemental to pixelformat
1745607ca46eSDavid Howells  * @plane_fmt:		per-plane information
1746607ca46eSDavid Howells  * @num_planes:		number of planes for this format
1747607ca46eSDavid Howells  */
1748607ca46eSDavid Howells struct v4l2_pix_format_mplane {
1749607ca46eSDavid Howells 	__u32				width;
1750607ca46eSDavid Howells 	__u32				height;
1751607ca46eSDavid Howells 	__u32				pixelformat;
1752607ca46eSDavid Howells 	__u32				field;
1753607ca46eSDavid Howells 	__u32				colorspace;
1754607ca46eSDavid Howells 
1755607ca46eSDavid Howells 	struct v4l2_plane_pix_format	plane_fmt[VIDEO_MAX_PLANES];
1756607ca46eSDavid Howells 	__u8				num_planes;
1757607ca46eSDavid Howells 	__u8				reserved[11];
1758607ca46eSDavid Howells } __attribute__ ((packed));
1759607ca46eSDavid Howells 
1760607ca46eSDavid Howells /**
1761607ca46eSDavid Howells  * struct v4l2_format - stream data format
1762607ca46eSDavid Howells  * @type:	enum v4l2_buf_type; type of the data stream
1763607ca46eSDavid Howells  * @pix:	definition of an image format
1764607ca46eSDavid Howells  * @pix_mp:	definition of a multiplanar image format
1765607ca46eSDavid Howells  * @win:	definition of an overlaid image
1766607ca46eSDavid Howells  * @vbi:	raw VBI capture or output parameters
1767607ca46eSDavid Howells  * @sliced:	sliced VBI capture or output parameters
1768607ca46eSDavid Howells  * @raw_data:	placeholder for future extensions and custom formats
1769607ca46eSDavid Howells  */
1770607ca46eSDavid Howells struct v4l2_format {
1771607ca46eSDavid Howells 	__u32	 type;
1772607ca46eSDavid Howells 	union {
1773607ca46eSDavid Howells 		struct v4l2_pix_format		pix;     /* V4L2_BUF_TYPE_VIDEO_CAPTURE */
1774607ca46eSDavid Howells 		struct v4l2_pix_format_mplane	pix_mp;  /* V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE */
1775607ca46eSDavid Howells 		struct v4l2_window		win;     /* V4L2_BUF_TYPE_VIDEO_OVERLAY */
1776607ca46eSDavid Howells 		struct v4l2_vbi_format		vbi;     /* V4L2_BUF_TYPE_VBI_CAPTURE */
1777607ca46eSDavid Howells 		struct v4l2_sliced_vbi_format	sliced;  /* V4L2_BUF_TYPE_SLICED_VBI_CAPTURE */
1778607ca46eSDavid Howells 		__u8	raw_data[200];                   /* user-defined */
1779607ca46eSDavid Howells 	} fmt;
1780607ca46eSDavid Howells };
1781607ca46eSDavid Howells 
1782607ca46eSDavid Howells /*	Stream type-dependent parameters
1783607ca46eSDavid Howells  */
1784607ca46eSDavid Howells struct v4l2_streamparm {
1785607ca46eSDavid Howells 	__u32	 type;			/* enum v4l2_buf_type */
1786607ca46eSDavid Howells 	union {
1787607ca46eSDavid Howells 		struct v4l2_captureparm	capture;
1788607ca46eSDavid Howells 		struct v4l2_outputparm	output;
1789607ca46eSDavid Howells 		__u8	raw_data[200];  /* user-defined */
1790607ca46eSDavid Howells 	} parm;
1791607ca46eSDavid Howells };
1792607ca46eSDavid Howells 
1793607ca46eSDavid Howells /*
1794607ca46eSDavid Howells  *	E V E N T S
1795607ca46eSDavid Howells  */
1796607ca46eSDavid Howells 
1797607ca46eSDavid Howells #define V4L2_EVENT_ALL				0
1798607ca46eSDavid Howells #define V4L2_EVENT_VSYNC			1
1799607ca46eSDavid Howells #define V4L2_EVENT_EOS				2
1800607ca46eSDavid Howells #define V4L2_EVENT_CTRL				3
1801607ca46eSDavid Howells #define V4L2_EVENT_FRAME_SYNC			4
1802607ca46eSDavid Howells #define V4L2_EVENT_PRIVATE_START		0x08000000
1803607ca46eSDavid Howells 
1804607ca46eSDavid Howells /* Payload for V4L2_EVENT_VSYNC */
1805607ca46eSDavid Howells struct v4l2_event_vsync {
1806607ca46eSDavid Howells 	/* Can be V4L2_FIELD_ANY, _NONE, _TOP or _BOTTOM */
1807607ca46eSDavid Howells 	__u8 field;
1808607ca46eSDavid Howells } __attribute__ ((packed));
1809607ca46eSDavid Howells 
1810607ca46eSDavid Howells /* Payload for V4L2_EVENT_CTRL */
1811607ca46eSDavid Howells #define V4L2_EVENT_CTRL_CH_VALUE		(1 << 0)
1812607ca46eSDavid Howells #define V4L2_EVENT_CTRL_CH_FLAGS		(1 << 1)
1813607ca46eSDavid Howells 
1814607ca46eSDavid Howells struct v4l2_event_ctrl {
1815607ca46eSDavid Howells 	__u32 changes;
1816607ca46eSDavid Howells 	__u32 type;
1817607ca46eSDavid Howells 	union {
1818607ca46eSDavid Howells 		__s32 value;
1819607ca46eSDavid Howells 		__s64 value64;
1820607ca46eSDavid Howells 	};
1821607ca46eSDavid Howells 	__u32 flags;
1822607ca46eSDavid Howells 	__s32 minimum;
1823607ca46eSDavid Howells 	__s32 maximum;
1824607ca46eSDavid Howells 	__s32 step;
1825607ca46eSDavid Howells 	__s32 default_value;
1826607ca46eSDavid Howells };
1827607ca46eSDavid Howells 
1828607ca46eSDavid Howells struct v4l2_event_frame_sync {
1829607ca46eSDavid Howells 	__u32 frame_sequence;
1830607ca46eSDavid Howells };
1831607ca46eSDavid Howells 
1832607ca46eSDavid Howells struct v4l2_event {
1833607ca46eSDavid Howells 	__u32				type;
1834607ca46eSDavid Howells 	union {
1835607ca46eSDavid Howells 		struct v4l2_event_vsync		vsync;
1836607ca46eSDavid Howells 		struct v4l2_event_ctrl		ctrl;
1837607ca46eSDavid Howells 		struct v4l2_event_frame_sync	frame_sync;
1838607ca46eSDavid Howells 		__u8				data[64];
1839607ca46eSDavid Howells 	} u;
1840607ca46eSDavid Howells 	__u32				pending;
1841607ca46eSDavid Howells 	__u32				sequence;
1842607ca46eSDavid Howells 	struct timespec			timestamp;
1843607ca46eSDavid Howells 	__u32				id;
1844607ca46eSDavid Howells 	__u32				reserved[8];
1845607ca46eSDavid Howells };
1846607ca46eSDavid Howells 
1847607ca46eSDavid Howells #define V4L2_EVENT_SUB_FL_SEND_INITIAL		(1 << 0)
1848607ca46eSDavid Howells #define V4L2_EVENT_SUB_FL_ALLOW_FEEDBACK	(1 << 1)
1849607ca46eSDavid Howells 
1850607ca46eSDavid Howells struct v4l2_event_subscription {
1851607ca46eSDavid Howells 	__u32				type;
1852607ca46eSDavid Howells 	__u32				id;
1853607ca46eSDavid Howells 	__u32				flags;
1854607ca46eSDavid Howells 	__u32				reserved[5];
1855607ca46eSDavid Howells };
1856607ca46eSDavid Howells 
1857607ca46eSDavid Howells /*
1858607ca46eSDavid Howells  *	A D V A N C E D   D E B U G G I N G
1859607ca46eSDavid Howells  *
1860607ca46eSDavid Howells  *	NOTE: EXPERIMENTAL API, NEVER RELY ON THIS IN APPLICATIONS!
1861607ca46eSDavid Howells  *	FOR DEBUGGING, TESTING AND INTERNAL USE ONLY!
1862607ca46eSDavid Howells  */
1863607ca46eSDavid Howells 
1864607ca46eSDavid Howells /* VIDIOC_DBG_G_REGISTER and VIDIOC_DBG_S_REGISTER */
1865607ca46eSDavid Howells 
1866607ca46eSDavid Howells #define V4L2_CHIP_MATCH_HOST       0  /* Match against chip ID on host (0 for the host) */
1867607ca46eSDavid Howells #define V4L2_CHIP_MATCH_I2C_DRIVER 1  /* Match against I2C driver name */
1868607ca46eSDavid Howells #define V4L2_CHIP_MATCH_I2C_ADDR   2  /* Match against I2C 7-bit address */
1869607ca46eSDavid Howells #define V4L2_CHIP_MATCH_AC97       3  /* Match against anciliary AC97 chip */
1870607ca46eSDavid Howells 
1871607ca46eSDavid Howells struct v4l2_dbg_match {
1872607ca46eSDavid Howells 	__u32 type; /* Match type */
1873607ca46eSDavid Howells 	union {     /* Match this chip, meaning determined by type */
1874607ca46eSDavid Howells 		__u32 addr;
1875607ca46eSDavid Howells 		char name[32];
1876607ca46eSDavid Howells 	};
1877607ca46eSDavid Howells } __attribute__ ((packed));
1878607ca46eSDavid Howells 
1879607ca46eSDavid Howells struct v4l2_dbg_register {
1880607ca46eSDavid Howells 	struct v4l2_dbg_match match;
1881607ca46eSDavid Howells 	__u32 size;	/* register size in bytes */
1882607ca46eSDavid Howells 	__u64 reg;
1883607ca46eSDavid Howells 	__u64 val;
1884607ca46eSDavid Howells } __attribute__ ((packed));
1885607ca46eSDavid Howells 
1886607ca46eSDavid Howells /* VIDIOC_DBG_G_CHIP_IDENT */
1887607ca46eSDavid Howells struct v4l2_dbg_chip_ident {
1888607ca46eSDavid Howells 	struct v4l2_dbg_match match;
1889607ca46eSDavid Howells 	__u32 ident;       /* chip identifier as specified in <media/v4l2-chip-ident.h> */
1890607ca46eSDavid Howells 	__u32 revision;    /* chip revision, chip specific */
1891607ca46eSDavid Howells } __attribute__ ((packed));
1892607ca46eSDavid Howells 
1893607ca46eSDavid Howells /**
1894607ca46eSDavid Howells  * struct v4l2_create_buffers - VIDIOC_CREATE_BUFS argument
1895607ca46eSDavid Howells  * @index:	on return, index of the first created buffer
1896607ca46eSDavid Howells  * @count:	entry: number of requested buffers,
1897607ca46eSDavid Howells  *		return: number of created buffers
1898607ca46eSDavid Howells  * @memory:	enum v4l2_memory; buffer memory type
1899607ca46eSDavid Howells  * @format:	frame format, for which buffers are requested
1900607ca46eSDavid Howells  * @reserved:	future extensions
1901607ca46eSDavid Howells  */
1902607ca46eSDavid Howells struct v4l2_create_buffers {
1903607ca46eSDavid Howells 	__u32			index;
1904607ca46eSDavid Howells 	__u32			count;
1905607ca46eSDavid Howells 	__u32			memory;
1906607ca46eSDavid Howells 	struct v4l2_format	format;
1907607ca46eSDavid Howells 	__u32			reserved[8];
1908607ca46eSDavid Howells };
1909607ca46eSDavid Howells 
1910607ca46eSDavid Howells /*
1911607ca46eSDavid Howells  *	I O C T L   C O D E S   F O R   V I D E O   D E V I C E S
1912607ca46eSDavid Howells  *
1913607ca46eSDavid Howells  */
1914607ca46eSDavid Howells #define VIDIOC_QUERYCAP		 _IOR('V',  0, struct v4l2_capability)
1915607ca46eSDavid Howells #define VIDIOC_RESERVED		  _IO('V',  1)
1916607ca46eSDavid Howells #define VIDIOC_ENUM_FMT         _IOWR('V',  2, struct v4l2_fmtdesc)
1917607ca46eSDavid Howells #define VIDIOC_G_FMT		_IOWR('V',  4, struct v4l2_format)
1918607ca46eSDavid Howells #define VIDIOC_S_FMT		_IOWR('V',  5, struct v4l2_format)
1919607ca46eSDavid Howells #define VIDIOC_REQBUFS		_IOWR('V',  8, struct v4l2_requestbuffers)
1920607ca46eSDavid Howells #define VIDIOC_QUERYBUF		_IOWR('V',  9, struct v4l2_buffer)
1921607ca46eSDavid Howells #define VIDIOC_G_FBUF		 _IOR('V', 10, struct v4l2_framebuffer)
1922607ca46eSDavid Howells #define VIDIOC_S_FBUF		 _IOW('V', 11, struct v4l2_framebuffer)
1923607ca46eSDavid Howells #define VIDIOC_OVERLAY		 _IOW('V', 14, int)
1924607ca46eSDavid Howells #define VIDIOC_QBUF		_IOWR('V', 15, struct v4l2_buffer)
1925*b799d09aSTomasz Stanislawski #define VIDIOC_EXPBUF		_IOWR('V', 16, struct v4l2_exportbuffer)
1926607ca46eSDavid Howells #define VIDIOC_DQBUF		_IOWR('V', 17, struct v4l2_buffer)
1927607ca46eSDavid Howells #define VIDIOC_STREAMON		 _IOW('V', 18, int)
1928607ca46eSDavid Howells #define VIDIOC_STREAMOFF	 _IOW('V', 19, int)
1929607ca46eSDavid Howells #define VIDIOC_G_PARM		_IOWR('V', 21, struct v4l2_streamparm)
1930607ca46eSDavid Howells #define VIDIOC_S_PARM		_IOWR('V', 22, struct v4l2_streamparm)
1931607ca46eSDavid Howells #define VIDIOC_G_STD		 _IOR('V', 23, v4l2_std_id)
1932607ca46eSDavid Howells #define VIDIOC_S_STD		 _IOW('V', 24, v4l2_std_id)
1933607ca46eSDavid Howells #define VIDIOC_ENUMSTD		_IOWR('V', 25, struct v4l2_standard)
1934607ca46eSDavid Howells #define VIDIOC_ENUMINPUT	_IOWR('V', 26, struct v4l2_input)
1935607ca46eSDavid Howells #define VIDIOC_G_CTRL		_IOWR('V', 27, struct v4l2_control)
1936607ca46eSDavid Howells #define VIDIOC_S_CTRL		_IOWR('V', 28, struct v4l2_control)
1937607ca46eSDavid Howells #define VIDIOC_G_TUNER		_IOWR('V', 29, struct v4l2_tuner)
1938607ca46eSDavid Howells #define VIDIOC_S_TUNER		 _IOW('V', 30, struct v4l2_tuner)
1939607ca46eSDavid Howells #define VIDIOC_G_AUDIO		 _IOR('V', 33, struct v4l2_audio)
1940607ca46eSDavid Howells #define VIDIOC_S_AUDIO		 _IOW('V', 34, struct v4l2_audio)
1941607ca46eSDavid Howells #define VIDIOC_QUERYCTRL	_IOWR('V', 36, struct v4l2_queryctrl)
1942607ca46eSDavid Howells #define VIDIOC_QUERYMENU	_IOWR('V', 37, struct v4l2_querymenu)
1943607ca46eSDavid Howells #define VIDIOC_G_INPUT		 _IOR('V', 38, int)
1944607ca46eSDavid Howells #define VIDIOC_S_INPUT		_IOWR('V', 39, int)
1945607ca46eSDavid Howells #define VIDIOC_G_OUTPUT		 _IOR('V', 46, int)
1946607ca46eSDavid Howells #define VIDIOC_S_OUTPUT		_IOWR('V', 47, int)
1947607ca46eSDavid Howells #define VIDIOC_ENUMOUTPUT	_IOWR('V', 48, struct v4l2_output)
1948607ca46eSDavid Howells #define VIDIOC_G_AUDOUT		 _IOR('V', 49, struct v4l2_audioout)
1949607ca46eSDavid Howells #define VIDIOC_S_AUDOUT		 _IOW('V', 50, struct v4l2_audioout)
1950607ca46eSDavid Howells #define VIDIOC_G_MODULATOR	_IOWR('V', 54, struct v4l2_modulator)
1951607ca46eSDavid Howells #define VIDIOC_S_MODULATOR	 _IOW('V', 55, struct v4l2_modulator)
1952607ca46eSDavid Howells #define VIDIOC_G_FREQUENCY	_IOWR('V', 56, struct v4l2_frequency)
1953607ca46eSDavid Howells #define VIDIOC_S_FREQUENCY	 _IOW('V', 57, struct v4l2_frequency)
1954607ca46eSDavid Howells #define VIDIOC_CROPCAP		_IOWR('V', 58, struct v4l2_cropcap)
1955607ca46eSDavid Howells #define VIDIOC_G_CROP		_IOWR('V', 59, struct v4l2_crop)
1956607ca46eSDavid Howells #define VIDIOC_S_CROP		 _IOW('V', 60, struct v4l2_crop)
1957607ca46eSDavid Howells #define VIDIOC_G_JPEGCOMP	 _IOR('V', 61, struct v4l2_jpegcompression)
1958607ca46eSDavid Howells #define VIDIOC_S_JPEGCOMP	 _IOW('V', 62, struct v4l2_jpegcompression)
1959607ca46eSDavid Howells #define VIDIOC_QUERYSTD      	 _IOR('V', 63, v4l2_std_id)
1960607ca46eSDavid Howells #define VIDIOC_TRY_FMT      	_IOWR('V', 64, struct v4l2_format)
1961607ca46eSDavid Howells #define VIDIOC_ENUMAUDIO	_IOWR('V', 65, struct v4l2_audio)
1962607ca46eSDavid Howells #define VIDIOC_ENUMAUDOUT	_IOWR('V', 66, struct v4l2_audioout)
1963607ca46eSDavid Howells #define VIDIOC_G_PRIORITY	 _IOR('V', 67, __u32) /* enum v4l2_priority */
1964607ca46eSDavid Howells #define VIDIOC_S_PRIORITY	 _IOW('V', 68, __u32) /* enum v4l2_priority */
1965607ca46eSDavid Howells #define VIDIOC_G_SLICED_VBI_CAP _IOWR('V', 69, struct v4l2_sliced_vbi_cap)
1966607ca46eSDavid Howells #define VIDIOC_LOG_STATUS         _IO('V', 70)
1967607ca46eSDavid Howells #define VIDIOC_G_EXT_CTRLS	_IOWR('V', 71, struct v4l2_ext_controls)
1968607ca46eSDavid Howells #define VIDIOC_S_EXT_CTRLS	_IOWR('V', 72, struct v4l2_ext_controls)
1969607ca46eSDavid Howells #define VIDIOC_TRY_EXT_CTRLS	_IOWR('V', 73, struct v4l2_ext_controls)
1970607ca46eSDavid Howells #if 1
1971607ca46eSDavid Howells #define VIDIOC_ENUM_FRAMESIZES	_IOWR('V', 74, struct v4l2_frmsizeenum)
1972607ca46eSDavid Howells #define VIDIOC_ENUM_FRAMEINTERVALS _IOWR('V', 75, struct v4l2_frmivalenum)
1973607ca46eSDavid Howells #define VIDIOC_G_ENC_INDEX       _IOR('V', 76, struct v4l2_enc_idx)
1974607ca46eSDavid Howells #define VIDIOC_ENCODER_CMD      _IOWR('V', 77, struct v4l2_encoder_cmd)
1975607ca46eSDavid Howells #define VIDIOC_TRY_ENCODER_CMD  _IOWR('V', 78, struct v4l2_encoder_cmd)
1976607ca46eSDavid Howells #endif
1977607ca46eSDavid Howells 
1978607ca46eSDavid Howells #if 1
1979607ca46eSDavid Howells /* Experimental, meant for debugging, testing and internal use.
1980607ca46eSDavid Howells    Only implemented if CONFIG_VIDEO_ADV_DEBUG is defined.
1981607ca46eSDavid Howells    You must be root to use these ioctls. Never use these in applications! */
1982607ca46eSDavid Howells #define	VIDIOC_DBG_S_REGISTER 	 _IOW('V', 79, struct v4l2_dbg_register)
1983607ca46eSDavid Howells #define	VIDIOC_DBG_G_REGISTER 	_IOWR('V', 80, struct v4l2_dbg_register)
1984607ca46eSDavid Howells 
1985607ca46eSDavid Howells /* Experimental, meant for debugging, testing and internal use.
1986607ca46eSDavid Howells    Never use this ioctl in applications! */
1987607ca46eSDavid Howells #define VIDIOC_DBG_G_CHIP_IDENT _IOWR('V', 81, struct v4l2_dbg_chip_ident)
1988607ca46eSDavid Howells #endif
1989607ca46eSDavid Howells 
1990607ca46eSDavid Howells #define VIDIOC_S_HW_FREQ_SEEK	 _IOW('V', 82, struct v4l2_hw_freq_seek)
1991607ca46eSDavid Howells 
1992607ca46eSDavid Howells /* These four DV Preset ioctls are deprecated in favor of the DV Timings
1993607ca46eSDavid Howells    ioctls. */
1994607ca46eSDavid Howells #define	VIDIOC_ENUM_DV_PRESETS	_IOWR('V', 83, struct v4l2_dv_enum_preset)
1995607ca46eSDavid Howells #define	VIDIOC_S_DV_PRESET	_IOWR('V', 84, struct v4l2_dv_preset)
1996607ca46eSDavid Howells #define	VIDIOC_G_DV_PRESET	_IOWR('V', 85, struct v4l2_dv_preset)
1997607ca46eSDavid Howells #define	VIDIOC_QUERY_DV_PRESET	_IOR('V',  86, struct v4l2_dv_preset)
1998607ca46eSDavid Howells #define	VIDIOC_S_DV_TIMINGS	_IOWR('V', 87, struct v4l2_dv_timings)
1999607ca46eSDavid Howells #define	VIDIOC_G_DV_TIMINGS	_IOWR('V', 88, struct v4l2_dv_timings)
2000607ca46eSDavid Howells #define	VIDIOC_DQEVENT		 _IOR('V', 89, struct v4l2_event)
2001607ca46eSDavid Howells #define	VIDIOC_SUBSCRIBE_EVENT	 _IOW('V', 90, struct v4l2_event_subscription)
2002607ca46eSDavid Howells #define	VIDIOC_UNSUBSCRIBE_EVENT _IOW('V', 91, struct v4l2_event_subscription)
2003607ca46eSDavid Howells 
2004607ca46eSDavid Howells /* Experimental, the below two ioctls may change over the next couple of kernel
2005607ca46eSDavid Howells    versions */
2006607ca46eSDavid Howells #define VIDIOC_CREATE_BUFS	_IOWR('V', 92, struct v4l2_create_buffers)
2007607ca46eSDavid Howells #define VIDIOC_PREPARE_BUF	_IOWR('V', 93, struct v4l2_buffer)
2008607ca46eSDavid Howells 
2009607ca46eSDavid Howells /* Experimental selection API */
2010607ca46eSDavid Howells #define VIDIOC_G_SELECTION	_IOWR('V', 94, struct v4l2_selection)
2011607ca46eSDavid Howells #define VIDIOC_S_SELECTION	_IOWR('V', 95, struct v4l2_selection)
2012607ca46eSDavid Howells 
2013607ca46eSDavid Howells /* Experimental, these two ioctls may change over the next couple of kernel
2014607ca46eSDavid Howells    versions. */
2015607ca46eSDavid Howells #define VIDIOC_DECODER_CMD	_IOWR('V', 96, struct v4l2_decoder_cmd)
2016607ca46eSDavid Howells #define VIDIOC_TRY_DECODER_CMD	_IOWR('V', 97, struct v4l2_decoder_cmd)
2017607ca46eSDavid Howells 
2018607ca46eSDavid Howells /* Experimental, these three ioctls may change over the next couple of kernel
2019607ca46eSDavid Howells    versions. */
2020607ca46eSDavid Howells #define VIDIOC_ENUM_DV_TIMINGS  _IOWR('V', 98, struct v4l2_enum_dv_timings)
2021607ca46eSDavid Howells #define VIDIOC_QUERY_DV_TIMINGS  _IOR('V', 99, struct v4l2_dv_timings)
2022607ca46eSDavid Howells #define VIDIOC_DV_TIMINGS_CAP   _IOWR('V', 100, struct v4l2_dv_timings_cap)
2023607ca46eSDavid Howells 
2024607ca46eSDavid Howells /* Experimental, this ioctl may change over the next couple of kernel
2025607ca46eSDavid Howells    versions. */
2026607ca46eSDavid Howells #define VIDIOC_ENUM_FREQ_BANDS	_IOWR('V', 101, struct v4l2_frequency_band)
2027607ca46eSDavid Howells 
2028607ca46eSDavid Howells /* Reminder: when adding new ioctls please add support for them to
2029607ca46eSDavid Howells    drivers/media/video/v4l2-compat-ioctl32.c as well! */
2030607ca46eSDavid Howells 
2031607ca46eSDavid Howells #define BASE_VIDIOC_PRIVATE	192		/* 192-255 are private */
2032607ca46eSDavid Howells 
2033607ca46eSDavid Howells #endif /* _UAPI__LINUX_VIDEODEV2_H */
2034