xref: /linux/include/uapi/linux/videodev2.h (revision 35ec2a2fa5a362b07b590ae1568dc35e47a7b846)
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 /*
76607ca46eSDavid Howells  *	M I S C E L L A N E O U S
77607ca46eSDavid Howells  */
78607ca46eSDavid Howells 
79607ca46eSDavid Howells /*  Four-character-code (FOURCC) */
80607ca46eSDavid Howells #define v4l2_fourcc(a, b, c, d)\
81607ca46eSDavid Howells 	((__u32)(a) | ((__u32)(b) << 8) | ((__u32)(c) << 16) | ((__u32)(d) << 24))
82fcc0d3dbSLaurent Pinchart #define v4l2_fourcc_be(a, b, c, d)	(v4l2_fourcc(a, b, c, d) | (1 << 31))
83607ca46eSDavid Howells 
84607ca46eSDavid Howells /*
85607ca46eSDavid Howells  *	E N U M S
86607ca46eSDavid Howells  */
87607ca46eSDavid Howells enum v4l2_field {
88607ca46eSDavid Howells 	V4L2_FIELD_ANY           = 0, /* driver can choose from none,
89607ca46eSDavid Howells 					 top, bottom, interlaced
90607ca46eSDavid Howells 					 depending on whatever it thinks
91607ca46eSDavid Howells 					 is approximate ... */
92607ca46eSDavid Howells 	V4L2_FIELD_NONE          = 1, /* this device has no fields ... */
93607ca46eSDavid Howells 	V4L2_FIELD_TOP           = 2, /* top field only */
94607ca46eSDavid Howells 	V4L2_FIELD_BOTTOM        = 3, /* bottom field only */
95607ca46eSDavid Howells 	V4L2_FIELD_INTERLACED    = 4, /* both fields interlaced */
96607ca46eSDavid Howells 	V4L2_FIELD_SEQ_TB        = 5, /* both fields sequential into one
97607ca46eSDavid Howells 					 buffer, top-bottom order */
98607ca46eSDavid Howells 	V4L2_FIELD_SEQ_BT        = 6, /* same as above + bottom-top order */
99607ca46eSDavid Howells 	V4L2_FIELD_ALTERNATE     = 7, /* both fields alternating into
100607ca46eSDavid Howells 					 separate buffers */
101607ca46eSDavid Howells 	V4L2_FIELD_INTERLACED_TB = 8, /* both fields interlaced, top field
102607ca46eSDavid Howells 					 first and the top field is
103607ca46eSDavid Howells 					 transmitted first */
104607ca46eSDavid Howells 	V4L2_FIELD_INTERLACED_BT = 9, /* both fields interlaced, top field
105607ca46eSDavid Howells 					 first and the bottom field is
106607ca46eSDavid Howells 					 transmitted first */
107607ca46eSDavid Howells };
108607ca46eSDavid Howells #define V4L2_FIELD_HAS_TOP(field)	\
109607ca46eSDavid Howells 	((field) == V4L2_FIELD_TOP 	||\
110607ca46eSDavid Howells 	 (field) == V4L2_FIELD_INTERLACED ||\
111607ca46eSDavid Howells 	 (field) == V4L2_FIELD_INTERLACED_TB ||\
112607ca46eSDavid Howells 	 (field) == V4L2_FIELD_INTERLACED_BT ||\
113607ca46eSDavid Howells 	 (field) == V4L2_FIELD_SEQ_TB	||\
114607ca46eSDavid Howells 	 (field) == V4L2_FIELD_SEQ_BT)
115607ca46eSDavid Howells #define V4L2_FIELD_HAS_BOTTOM(field)	\
116607ca46eSDavid Howells 	((field) == V4L2_FIELD_BOTTOM 	||\
117607ca46eSDavid Howells 	 (field) == V4L2_FIELD_INTERLACED ||\
118607ca46eSDavid Howells 	 (field) == V4L2_FIELD_INTERLACED_TB ||\
119607ca46eSDavid Howells 	 (field) == V4L2_FIELD_INTERLACED_BT ||\
120607ca46eSDavid Howells 	 (field) == V4L2_FIELD_SEQ_TB	||\
121607ca46eSDavid Howells 	 (field) == V4L2_FIELD_SEQ_BT)
122607ca46eSDavid Howells #define V4L2_FIELD_HAS_BOTH(field)	\
123607ca46eSDavid Howells 	((field) == V4L2_FIELD_INTERLACED ||\
124607ca46eSDavid Howells 	 (field) == V4L2_FIELD_INTERLACED_TB ||\
125607ca46eSDavid Howells 	 (field) == V4L2_FIELD_INTERLACED_BT ||\
126607ca46eSDavid Howells 	 (field) == V4L2_FIELD_SEQ_TB ||\
127607ca46eSDavid Howells 	 (field) == V4L2_FIELD_SEQ_BT)
128e34c4db8SHans Verkuil #define V4L2_FIELD_HAS_T_OR_B(field)	\
129e34c4db8SHans Verkuil 	((field) == V4L2_FIELD_BOTTOM ||\
130e34c4db8SHans Verkuil 	 (field) == V4L2_FIELD_TOP ||\
131e34c4db8SHans Verkuil 	 (field) == V4L2_FIELD_ALTERNATE)
132607ca46eSDavid Howells 
133607ca46eSDavid Howells enum v4l2_buf_type {
134607ca46eSDavid Howells 	V4L2_BUF_TYPE_VIDEO_CAPTURE        = 1,
135607ca46eSDavid Howells 	V4L2_BUF_TYPE_VIDEO_OUTPUT         = 2,
136607ca46eSDavid Howells 	V4L2_BUF_TYPE_VIDEO_OVERLAY        = 3,
137607ca46eSDavid Howells 	V4L2_BUF_TYPE_VBI_CAPTURE          = 4,
138607ca46eSDavid Howells 	V4L2_BUF_TYPE_VBI_OUTPUT           = 5,
139607ca46eSDavid Howells 	V4L2_BUF_TYPE_SLICED_VBI_CAPTURE   = 6,
140607ca46eSDavid Howells 	V4L2_BUF_TYPE_SLICED_VBI_OUTPUT    = 7,
141607ca46eSDavid Howells #if 1
142607ca46eSDavid Howells 	/* Experimental */
143607ca46eSDavid Howells 	V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY = 8,
144607ca46eSDavid Howells #endif
145607ca46eSDavid Howells 	V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE = 9,
146607ca46eSDavid Howells 	V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE  = 10,
1476f3073b8SAntti Palosaari 	V4L2_BUF_TYPE_SDR_CAPTURE          = 11,
1489effc72fSAntti Palosaari 	V4L2_BUF_TYPE_SDR_OUTPUT           = 12,
149607ca46eSDavid Howells 	/* Deprecated, do not use */
150607ca46eSDavid Howells 	V4L2_BUF_TYPE_PRIVATE              = 0x80,
151607ca46eSDavid Howells };
152607ca46eSDavid Howells 
153607ca46eSDavid Howells #define V4L2_TYPE_IS_MULTIPLANAR(type)			\
154607ca46eSDavid Howells 	((type) == V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE	\
155607ca46eSDavid Howells 	 || (type) == V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE)
156607ca46eSDavid Howells 
157607ca46eSDavid Howells #define V4L2_TYPE_IS_OUTPUT(type)				\
158607ca46eSDavid Howells 	((type) == V4L2_BUF_TYPE_VIDEO_OUTPUT			\
159607ca46eSDavid Howells 	 || (type) == V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE		\
160607ca46eSDavid Howells 	 || (type) == V4L2_BUF_TYPE_VIDEO_OVERLAY		\
161607ca46eSDavid Howells 	 || (type) == V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY	\
162607ca46eSDavid Howells 	 || (type) == V4L2_BUF_TYPE_VBI_OUTPUT			\
1639effc72fSAntti Palosaari 	 || (type) == V4L2_BUF_TYPE_SLICED_VBI_OUTPUT		\
1649effc72fSAntti Palosaari 	 || (type) == V4L2_BUF_TYPE_SDR_OUTPUT)
165607ca46eSDavid Howells 
166607ca46eSDavid Howells enum v4l2_tuner_type {
167607ca46eSDavid Howells 	V4L2_TUNER_RADIO	     = 1,
168607ca46eSDavid Howells 	V4L2_TUNER_ANALOG_TV	     = 2,
169607ca46eSDavid Howells 	V4L2_TUNER_DIGITAL_TV	     = 3,
170f3c3ececSAntti Palosaari 	V4L2_TUNER_SDR               = 4,
17184099a28SAntti Palosaari 	V4L2_TUNER_RF                = 5,
172607ca46eSDavid Howells };
173607ca46eSDavid Howells 
174f3c3ececSAntti Palosaari /* Deprecated, do not use */
175f3c3ececSAntti Palosaari #define V4L2_TUNER_ADC  V4L2_TUNER_SDR
176f3c3ececSAntti Palosaari 
177607ca46eSDavid Howells enum v4l2_memory {
178607ca46eSDavid Howells 	V4L2_MEMORY_MMAP             = 1,
179607ca46eSDavid Howells 	V4L2_MEMORY_USERPTR          = 2,
180607ca46eSDavid Howells 	V4L2_MEMORY_OVERLAY          = 3,
181051c7788SSumit Semwal 	V4L2_MEMORY_DMABUF           = 4,
182607ca46eSDavid Howells };
183607ca46eSDavid Howells 
184607ca46eSDavid Howells /* see also http://vektor.theorem.ca/graphics/ycbcr/ */
185607ca46eSDavid Howells enum v4l2_colorspace {
186e01dfc01SHans Verkuil 	/*
187e01dfc01SHans Verkuil 	 * Default colorspace, i.e. let the driver figure it out.
188e01dfc01SHans Verkuil 	 * Can only be used with video capture.
189e01dfc01SHans Verkuil 	 */
190e01dfc01SHans Verkuil 	V4L2_COLORSPACE_DEFAULT       = 0,
191e01dfc01SHans Verkuil 
192d5735d64SHans Verkuil 	/* SMPTE 170M: used for broadcast NTSC/PAL SDTV */
193607ca46eSDavid Howells 	V4L2_COLORSPACE_SMPTE170M     = 1,
194607ca46eSDavid Howells 
195d5735d64SHans Verkuil 	/* Obsolete pre-1998 SMPTE 240M HDTV standard, superseded by Rec 709 */
196607ca46eSDavid Howells 	V4L2_COLORSPACE_SMPTE240M     = 2,
197607ca46eSDavid Howells 
198d5735d64SHans Verkuil 	/* Rec.709: used for HDTV */
199607ca46eSDavid Howells 	V4L2_COLORSPACE_REC709        = 3,
200607ca46eSDavid Howells 
201d5735d64SHans Verkuil 	/*
202d5735d64SHans Verkuil 	 * Deprecated, do not use. No driver will ever return this. This was
203d5735d64SHans Verkuil 	 * based on a misunderstanding of the bt878 datasheet.
204d5735d64SHans Verkuil 	 */
205607ca46eSDavid Howells 	V4L2_COLORSPACE_BT878         = 4,
206607ca46eSDavid Howells 
207d5735d64SHans Verkuil 	/*
208d5735d64SHans Verkuil 	 * NTSC 1953 colorspace. This only makes sense when dealing with
209d5735d64SHans Verkuil 	 * really, really old NTSC recordings. Superseded by SMPTE 170M.
210d5735d64SHans Verkuil 	 */
211607ca46eSDavid Howells 	V4L2_COLORSPACE_470_SYSTEM_M  = 5,
212d5735d64SHans Verkuil 
213d5735d64SHans Verkuil 	/*
214d5735d64SHans Verkuil 	 * EBU Tech 3213 PAL/SECAM colorspace. This only makes sense when
215d5735d64SHans Verkuil 	 * dealing with really old PAL/SECAM recordings. Superseded by
216d5735d64SHans Verkuil 	 * SMPTE 170M.
217d5735d64SHans Verkuil 	 */
218607ca46eSDavid Howells 	V4L2_COLORSPACE_470_SYSTEM_BG = 6,
219607ca46eSDavid Howells 
220d5735d64SHans Verkuil 	/*
221d5735d64SHans Verkuil 	 * Effectively shorthand for V4L2_COLORSPACE_SRGB, V4L2_YCBCR_ENC_601
222d5735d64SHans Verkuil 	 * and V4L2_QUANTIZATION_FULL_RANGE. To be used for (Motion-)JPEG.
223607ca46eSDavid Howells 	 */
224607ca46eSDavid Howells 	V4L2_COLORSPACE_JPEG          = 7,
225607ca46eSDavid Howells 
226d5735d64SHans Verkuil 	/* For RGB colorspaces such as produces by most webcams. */
227607ca46eSDavid Howells 	V4L2_COLORSPACE_SRGB          = 8,
228d5735d64SHans Verkuil 
229d5735d64SHans Verkuil 	/* AdobeRGB colorspace */
230d5735d64SHans Verkuil 	V4L2_COLORSPACE_ADOBERGB      = 9,
231d5735d64SHans Verkuil 
232d5735d64SHans Verkuil 	/* BT.2020 colorspace, used for UHDTV. */
233d5735d64SHans Verkuil 	V4L2_COLORSPACE_BT2020        = 10,
234addad105SHans Verkuil 
235addad105SHans Verkuil 	/* Raw colorspace: for RAW unprocessed images */
236addad105SHans Verkuil 	V4L2_COLORSPACE_RAW           = 11,
237529a7960SHans Verkuil 
238529a7960SHans Verkuil 	/* DCI-P3 colorspace, used by cinema projectors */
239529a7960SHans Verkuil 	V4L2_COLORSPACE_DCI_P3        = 12,
240d5735d64SHans Verkuil };
241d5735d64SHans Verkuil 
2423818c4daSHans Verkuil /*
2433818c4daSHans Verkuil  * Determine how COLORSPACE_DEFAULT should map to a proper colorspace.
2443818c4daSHans Verkuil  * This depends on whether this is a SDTV image (use SMPTE 170M), an
2453818c4daSHans Verkuil  * HDTV image (use Rec. 709), or something else (use sRGB).
2463818c4daSHans Verkuil  */
2473818c4daSHans Verkuil #define V4L2_MAP_COLORSPACE_DEFAULT(is_sdtv, is_hdtv) \
2483818c4daSHans Verkuil 	((is_sdtv) ? V4L2_COLORSPACE_SMPTE170M : \
2493818c4daSHans Verkuil 	 ((is_hdtv) ? V4L2_COLORSPACE_REC709 : V4L2_COLORSPACE_SRGB))
2503818c4daSHans Verkuil 
25174fdcb2eSHans Verkuil enum v4l2_xfer_func {
25274fdcb2eSHans Verkuil 	/*
25374fdcb2eSHans Verkuil 	 * Mapping of V4L2_XFER_FUNC_DEFAULT to actual transfer functions
25474fdcb2eSHans Verkuil 	 * for the various colorspaces:
25574fdcb2eSHans Verkuil 	 *
25674fdcb2eSHans Verkuil 	 * V4L2_COLORSPACE_SMPTE170M, V4L2_COLORSPACE_470_SYSTEM_M,
25774fdcb2eSHans Verkuil 	 * V4L2_COLORSPACE_470_SYSTEM_BG, V4L2_COLORSPACE_REC709 and
25874fdcb2eSHans Verkuil 	 * V4L2_COLORSPACE_BT2020: V4L2_XFER_FUNC_709
25974fdcb2eSHans Verkuil 	 *
26074fdcb2eSHans Verkuil 	 * V4L2_COLORSPACE_SRGB, V4L2_COLORSPACE_JPEG: V4L2_XFER_FUNC_SRGB
26174fdcb2eSHans Verkuil 	 *
26274fdcb2eSHans Verkuil 	 * V4L2_COLORSPACE_ADOBERGB: V4L2_XFER_FUNC_ADOBERGB
26374fdcb2eSHans Verkuil 	 *
26474fdcb2eSHans Verkuil 	 * V4L2_COLORSPACE_SMPTE240M: V4L2_XFER_FUNC_SMPTE240M
26574fdcb2eSHans Verkuil 	 *
26674fdcb2eSHans Verkuil 	 * V4L2_COLORSPACE_RAW: V4L2_XFER_FUNC_NONE
267529a7960SHans Verkuil 	 *
268529a7960SHans Verkuil 	 * V4L2_COLORSPACE_DCI_P3: V4L2_XFER_FUNC_DCI_P3
26974fdcb2eSHans Verkuil 	 */
27074fdcb2eSHans Verkuil 	V4L2_XFER_FUNC_DEFAULT     = 0,
27174fdcb2eSHans Verkuil 	V4L2_XFER_FUNC_709         = 1,
27274fdcb2eSHans Verkuil 	V4L2_XFER_FUNC_SRGB        = 2,
27374fdcb2eSHans Verkuil 	V4L2_XFER_FUNC_ADOBERGB    = 3,
27474fdcb2eSHans Verkuil 	V4L2_XFER_FUNC_SMPTE240M   = 4,
27574fdcb2eSHans Verkuil 	V4L2_XFER_FUNC_NONE        = 5,
276529a7960SHans Verkuil 	V4L2_XFER_FUNC_DCI_P3      = 6,
2772bdd2801SHans Verkuil 	V4L2_XFER_FUNC_SMPTE2084   = 7,
27874fdcb2eSHans Verkuil };
27974fdcb2eSHans Verkuil 
28074fdcb2eSHans Verkuil /*
28174fdcb2eSHans Verkuil  * Determine how XFER_FUNC_DEFAULT should map to a proper transfer function.
28274fdcb2eSHans Verkuil  * This depends on the colorspace.
28374fdcb2eSHans Verkuil  */
28474fdcb2eSHans Verkuil #define V4L2_MAP_XFER_FUNC_DEFAULT(colsp) \
285f8d5556fSHans Verkuil 	((colsp) == V4L2_COLORSPACE_ADOBERGB ? V4L2_XFER_FUNC_ADOBERGB : \
28674fdcb2eSHans Verkuil 	 ((colsp) == V4L2_COLORSPACE_SMPTE240M ? V4L2_XFER_FUNC_SMPTE240M : \
287529a7960SHans Verkuil 	  ((colsp) == V4L2_COLORSPACE_DCI_P3 ? V4L2_XFER_FUNC_DCI_P3 : \
28874fdcb2eSHans Verkuil 	   ((colsp) == V4L2_COLORSPACE_RAW ? V4L2_XFER_FUNC_NONE : \
28974fdcb2eSHans Verkuil 	    ((colsp) == V4L2_COLORSPACE_SRGB || (colsp) == V4L2_COLORSPACE_JPEG ? \
290529a7960SHans Verkuil 	     V4L2_XFER_FUNC_SRGB : V4L2_XFER_FUNC_709)))))
29174fdcb2eSHans Verkuil 
292d5735d64SHans Verkuil enum v4l2_ycbcr_encoding {
293d5735d64SHans Verkuil 	/*
294d5735d64SHans Verkuil 	 * Mapping of V4L2_YCBCR_ENC_DEFAULT to actual encodings for the
295d5735d64SHans Verkuil 	 * various colorspaces:
296d5735d64SHans Verkuil 	 *
297d5735d64SHans Verkuil 	 * V4L2_COLORSPACE_SMPTE170M, V4L2_COLORSPACE_470_SYSTEM_M,
298d5735d64SHans Verkuil 	 * V4L2_COLORSPACE_470_SYSTEM_BG, V4L2_COLORSPACE_ADOBERGB and
299d5735d64SHans Verkuil 	 * V4L2_COLORSPACE_JPEG: V4L2_YCBCR_ENC_601
300d5735d64SHans Verkuil 	 *
301529a7960SHans Verkuil 	 * V4L2_COLORSPACE_REC709 and V4L2_COLORSPACE_DCI_P3: V4L2_YCBCR_ENC_709
302d5735d64SHans Verkuil 	 *
303d5735d64SHans Verkuil 	 * V4L2_COLORSPACE_SRGB: V4L2_YCBCR_ENC_SYCC
304d5735d64SHans Verkuil 	 *
305d5735d64SHans Verkuil 	 * V4L2_COLORSPACE_BT2020: V4L2_YCBCR_ENC_BT2020
306d5735d64SHans Verkuil 	 *
307d5735d64SHans Verkuil 	 * V4L2_COLORSPACE_SMPTE240M: V4L2_YCBCR_ENC_SMPTE240M
308d5735d64SHans Verkuil 	 */
309d5735d64SHans Verkuil 	V4L2_YCBCR_ENC_DEFAULT        = 0,
310d5735d64SHans Verkuil 
311d5735d64SHans Verkuil 	/* ITU-R 601 -- SDTV */
312d5735d64SHans Verkuil 	V4L2_YCBCR_ENC_601            = 1,
313d5735d64SHans Verkuil 
314d5735d64SHans Verkuil 	/* Rec. 709 -- HDTV */
315d5735d64SHans Verkuil 	V4L2_YCBCR_ENC_709            = 2,
316d5735d64SHans Verkuil 
317d5735d64SHans Verkuil 	/* ITU-R 601/EN 61966-2-4 Extended Gamut -- SDTV */
318d5735d64SHans Verkuil 	V4L2_YCBCR_ENC_XV601          = 3,
319d5735d64SHans Verkuil 
320d5735d64SHans Verkuil 	/* Rec. 709/EN 61966-2-4 Extended Gamut -- HDTV */
321d5735d64SHans Verkuil 	V4L2_YCBCR_ENC_XV709          = 4,
322d5735d64SHans Verkuil 
323d5735d64SHans Verkuil 	/* sYCC (Y'CbCr encoding of sRGB) */
324d5735d64SHans Verkuil 	V4L2_YCBCR_ENC_SYCC           = 5,
325d5735d64SHans Verkuil 
326d5735d64SHans Verkuil 	/* BT.2020 Non-constant Luminance Y'CbCr */
327d5735d64SHans Verkuil 	V4L2_YCBCR_ENC_BT2020         = 6,
328d5735d64SHans Verkuil 
329d5735d64SHans Verkuil 	/* BT.2020 Constant Luminance Y'CbcCrc */
330d5735d64SHans Verkuil 	V4L2_YCBCR_ENC_BT2020_CONST_LUM = 7,
331d5735d64SHans Verkuil 
332d5735d64SHans Verkuil 	/* SMPTE 240M -- Obsolete HDTV */
333d5735d64SHans Verkuil 	V4L2_YCBCR_ENC_SMPTE240M      = 8,
334d5735d64SHans Verkuil };
335d5735d64SHans Verkuil 
3363818c4daSHans Verkuil /*
3373818c4daSHans Verkuil  * Determine how YCBCR_ENC_DEFAULT should map to a proper Y'CbCr encoding.
3383818c4daSHans Verkuil  * This depends on the colorspace.
3393818c4daSHans Verkuil  */
3403818c4daSHans Verkuil #define V4L2_MAP_YCBCR_ENC_DEFAULT(colsp) \
341529a7960SHans Verkuil 	(((colsp) == V4L2_COLORSPACE_REC709 || \
342529a7960SHans Verkuil 	  (colsp) == V4L2_COLORSPACE_DCI_P3) ? V4L2_YCBCR_ENC_709 : \
3433818c4daSHans Verkuil 	 ((colsp) == V4L2_COLORSPACE_BT2020 ? V4L2_YCBCR_ENC_BT2020 : \
3443818c4daSHans Verkuil 	  ((colsp) == V4L2_COLORSPACE_SMPTE240M ? V4L2_YCBCR_ENC_SMPTE240M : \
3453818c4daSHans Verkuil 	   V4L2_YCBCR_ENC_601)))
3463818c4daSHans Verkuil 
347d5735d64SHans Verkuil enum v4l2_quantization {
348d5735d64SHans Verkuil 	/*
349aa05b979SHans Verkuil 	 * The default for R'G'B' quantization is always full range, except
350aa05b979SHans Verkuil 	 * for the BT2020 colorspace. For Y'CbCr the quantization is always
351aa05b979SHans Verkuil 	 * limited range, except for COLORSPACE_JPEG, SYCC, XV601 or XV709:
352aa05b979SHans Verkuil 	 * those are full range.
353d5735d64SHans Verkuil 	 */
354d5735d64SHans Verkuil 	V4L2_QUANTIZATION_DEFAULT     = 0,
355d5735d64SHans Verkuil 	V4L2_QUANTIZATION_FULL_RANGE  = 1,
356d5735d64SHans Verkuil 	V4L2_QUANTIZATION_LIM_RANGE   = 2,
357607ca46eSDavid Howells };
358607ca46eSDavid Howells 
3593818c4daSHans Verkuil /*
3603818c4daSHans Verkuil  * Determine how QUANTIZATION_DEFAULT should map to a proper quantization.
3613818c4daSHans Verkuil  * This depends on whether the image is RGB or not, the colorspace and the
3623818c4daSHans Verkuil  * Y'CbCr encoding.
3633818c4daSHans Verkuil  */
3643818c4daSHans Verkuil #define V4L2_MAP_QUANTIZATION_DEFAULT(is_rgb, colsp, ycbcr_enc) \
3653818c4daSHans Verkuil 	(((is_rgb) && (colsp) == V4L2_COLORSPACE_BT2020) ? V4L2_QUANTIZATION_LIM_RANGE : \
3663818c4daSHans Verkuil 	 (((is_rgb) || (ycbcr_enc) == V4L2_YCBCR_ENC_XV601 || \
3673818c4daSHans Verkuil 	  (ycbcr_enc) == V4L2_YCBCR_ENC_XV709 || (colsp) == V4L2_COLORSPACE_JPEG) ? \
3683818c4daSHans Verkuil 	 V4L2_QUANTIZATION_FULL_RANGE : V4L2_QUANTIZATION_LIM_RANGE))
3693818c4daSHans Verkuil 
370607ca46eSDavid Howells enum v4l2_priority {
371607ca46eSDavid Howells 	V4L2_PRIORITY_UNSET       = 0,  /* not initialized */
372607ca46eSDavid Howells 	V4L2_PRIORITY_BACKGROUND  = 1,
373607ca46eSDavid Howells 	V4L2_PRIORITY_INTERACTIVE = 2,
374607ca46eSDavid Howells 	V4L2_PRIORITY_RECORD      = 3,
375607ca46eSDavid Howells 	V4L2_PRIORITY_DEFAULT     = V4L2_PRIORITY_INTERACTIVE,
376607ca46eSDavid Howells };
377607ca46eSDavid Howells 
378607ca46eSDavid Howells struct v4l2_rect {
379607ca46eSDavid Howells 	__s32   left;
380607ca46eSDavid Howells 	__s32   top;
381f90580caSRicardo Ribalda 	__u32   width;
382f90580caSRicardo Ribalda 	__u32   height;
383607ca46eSDavid Howells };
384607ca46eSDavid Howells 
385607ca46eSDavid Howells struct v4l2_fract {
386607ca46eSDavid Howells 	__u32   numerator;
387607ca46eSDavid Howells 	__u32   denominator;
388607ca46eSDavid Howells };
389607ca46eSDavid Howells 
390607ca46eSDavid Howells /**
391607ca46eSDavid Howells   * struct v4l2_capability - Describes V4L2 device caps returned by VIDIOC_QUERYCAP
392607ca46eSDavid Howells   *
393607ca46eSDavid Howells   * @driver:	   name of the driver module (e.g. "bttv")
394607ca46eSDavid Howells   * @card:	   name of the card (e.g. "Hauppauge WinTV")
395607ca46eSDavid Howells   * @bus_info:	   name of the bus (e.g. "PCI:" + pci_name(pci_dev) )
396607ca46eSDavid Howells   * @version:	   KERNEL_VERSION
397607ca46eSDavid Howells   * @capabilities: capabilities of the physical device as a whole
398607ca46eSDavid Howells   * @device_caps:  capabilities accessed via this particular device (node)
399607ca46eSDavid Howells   * @reserved:	   reserved fields for future extensions
400607ca46eSDavid Howells   */
401607ca46eSDavid Howells struct v4l2_capability {
402607ca46eSDavid Howells 	__u8	driver[16];
403607ca46eSDavid Howells 	__u8	card[32];
404607ca46eSDavid Howells 	__u8	bus_info[32];
405607ca46eSDavid Howells 	__u32   version;
406607ca46eSDavid Howells 	__u32	capabilities;
407607ca46eSDavid Howells 	__u32	device_caps;
408607ca46eSDavid Howells 	__u32	reserved[3];
409607ca46eSDavid Howells };
410607ca46eSDavid Howells 
411607ca46eSDavid Howells /* Values for 'capabilities' field */
412607ca46eSDavid Howells #define V4L2_CAP_VIDEO_CAPTURE		0x00000001  /* Is a video capture device */
413607ca46eSDavid Howells #define V4L2_CAP_VIDEO_OUTPUT		0x00000002  /* Is a video output device */
414607ca46eSDavid Howells #define V4L2_CAP_VIDEO_OVERLAY		0x00000004  /* Can do video overlay */
415607ca46eSDavid Howells #define V4L2_CAP_VBI_CAPTURE		0x00000010  /* Is a raw VBI capture device */
416607ca46eSDavid Howells #define V4L2_CAP_VBI_OUTPUT		0x00000020  /* Is a raw VBI output device */
417607ca46eSDavid Howells #define V4L2_CAP_SLICED_VBI_CAPTURE	0x00000040  /* Is a sliced VBI capture device */
418607ca46eSDavid Howells #define V4L2_CAP_SLICED_VBI_OUTPUT	0x00000080  /* Is a sliced VBI output device */
419607ca46eSDavid Howells #define V4L2_CAP_RDS_CAPTURE		0x00000100  /* RDS data capture */
420607ca46eSDavid Howells #define V4L2_CAP_VIDEO_OUTPUT_OVERLAY	0x00000200  /* Can do video output overlay */
421607ca46eSDavid Howells #define V4L2_CAP_HW_FREQ_SEEK		0x00000400  /* Can do hardware frequency seek  */
422607ca46eSDavid Howells #define V4L2_CAP_RDS_OUTPUT		0x00000800  /* Is an RDS encoder */
423607ca46eSDavid Howells 
424607ca46eSDavid Howells /* Is a video capture device that supports multiplanar formats */
425607ca46eSDavid Howells #define V4L2_CAP_VIDEO_CAPTURE_MPLANE	0x00001000
426607ca46eSDavid Howells /* Is a video output device that supports multiplanar formats */
427607ca46eSDavid Howells #define V4L2_CAP_VIDEO_OUTPUT_MPLANE	0x00002000
428607ca46eSDavid Howells /* Is a video mem-to-mem device that supports multiplanar formats */
429607ca46eSDavid Howells #define V4L2_CAP_VIDEO_M2M_MPLANE	0x00004000
430607ca46eSDavid Howells /* Is a video mem-to-mem device */
431607ca46eSDavid Howells #define V4L2_CAP_VIDEO_M2M		0x00008000
432607ca46eSDavid Howells 
433607ca46eSDavid Howells #define V4L2_CAP_TUNER			0x00010000  /* has a tuner */
434607ca46eSDavid Howells #define V4L2_CAP_AUDIO			0x00020000  /* has audio support */
435607ca46eSDavid Howells #define V4L2_CAP_RADIO			0x00040000  /* is a radio device */
436607ca46eSDavid Howells #define V4L2_CAP_MODULATOR		0x00080000  /* has a modulator */
437607ca46eSDavid Howells 
438c9c54f72SAntti Palosaari #define V4L2_CAP_SDR_CAPTURE		0x00100000  /* Is a SDR capture device */
439d52e2381SLaurent Pinchart #define V4L2_CAP_EXT_PIX_FORMAT		0x00200000  /* Supports the extended pixel format */
4409effc72fSAntti Palosaari #define V4L2_CAP_SDR_OUTPUT		0x00400000  /* Is a SDR output device */
441c9c54f72SAntti Palosaari 
442607ca46eSDavid Howells #define V4L2_CAP_READWRITE              0x01000000  /* read/write systemcalls */
443607ca46eSDavid Howells #define V4L2_CAP_ASYNCIO                0x02000000  /* async I/O */
444607ca46eSDavid Howells #define V4L2_CAP_STREAMING              0x04000000  /* streaming I/O ioctls */
445607ca46eSDavid Howells 
446607ca46eSDavid Howells #define V4L2_CAP_DEVICE_CAPS            0x80000000  /* sets device capabilities field */
447607ca46eSDavid Howells 
448607ca46eSDavid Howells /*
449607ca46eSDavid Howells  *	V I D E O   I M A G E   F O R M A T
450607ca46eSDavid Howells  */
451607ca46eSDavid Howells struct v4l2_pix_format {
452607ca46eSDavid Howells 	__u32         		width;
453607ca46eSDavid Howells 	__u32			height;
454607ca46eSDavid Howells 	__u32			pixelformat;
455607ca46eSDavid Howells 	__u32			field;		/* enum v4l2_field */
456607ca46eSDavid Howells 	__u32            	bytesperline;	/* for padding, zero if unused */
457607ca46eSDavid Howells 	__u32          		sizeimage;
458607ca46eSDavid Howells 	__u32			colorspace;	/* enum v4l2_colorspace */
459607ca46eSDavid Howells 	__u32			priv;		/* private data, depends on pixelformat */
460c96fd46aSLaurent Pinchart 	__u32			flags;		/* format flags (V4L2_PIX_FMT_FLAG_*) */
461d5735d64SHans Verkuil 	__u32			ycbcr_enc;	/* enum v4l2_ycbcr_encoding */
462d5735d64SHans Verkuil 	__u32			quantization;	/* enum v4l2_quantization */
46374fdcb2eSHans Verkuil 	__u32			xfer_func;	/* enum v4l2_xfer_func */
464607ca46eSDavid Howells };
465607ca46eSDavid Howells 
466607ca46eSDavid Howells /*      Pixel format         FOURCC                          depth  Description  */
467607ca46eSDavid Howells 
468607ca46eSDavid Howells /* RGB formats */
469607ca46eSDavid Howells #define V4L2_PIX_FMT_RGB332  v4l2_fourcc('R', 'G', 'B', '1') /*  8  RGB-3-3-2     */
470607ca46eSDavid Howells #define V4L2_PIX_FMT_RGB444  v4l2_fourcc('R', '4', '4', '4') /* 16  xxxxrrrr ggggbbbb */
471977ff0e4SLaurent Pinchart #define V4L2_PIX_FMT_ARGB444 v4l2_fourcc('A', 'R', '1', '2') /* 16  aaaarrrr ggggbbbb */
472977ff0e4SLaurent Pinchart #define V4L2_PIX_FMT_XRGB444 v4l2_fourcc('X', 'R', '1', '2') /* 16  xxxxrrrr ggggbbbb */
473607ca46eSDavid Howells #define V4L2_PIX_FMT_RGB555  v4l2_fourcc('R', 'G', 'B', 'O') /* 16  RGB-5-5-5     */
474977ff0e4SLaurent Pinchart #define V4L2_PIX_FMT_ARGB555 v4l2_fourcc('A', 'R', '1', '5') /* 16  ARGB-1-5-5-5  */
475977ff0e4SLaurent Pinchart #define V4L2_PIX_FMT_XRGB555 v4l2_fourcc('X', 'R', '1', '5') /* 16  XRGB-1-5-5-5  */
476607ca46eSDavid Howells #define V4L2_PIX_FMT_RGB565  v4l2_fourcc('R', 'G', 'B', 'P') /* 16  RGB-5-6-5     */
477607ca46eSDavid Howells #define V4L2_PIX_FMT_RGB555X v4l2_fourcc('R', 'G', 'B', 'Q') /* 16  RGB-5-5-5 BE  */
478fcc0d3dbSLaurent Pinchart #define V4L2_PIX_FMT_ARGB555X v4l2_fourcc_be('A', 'R', '1', '5') /* 16  ARGB-5-5-5 BE */
479fcc0d3dbSLaurent Pinchart #define V4L2_PIX_FMT_XRGB555X v4l2_fourcc_be('X', 'R', '1', '5') /* 16  XRGB-5-5-5 BE */
480607ca46eSDavid Howells #define V4L2_PIX_FMT_RGB565X v4l2_fourcc('R', 'G', 'B', 'R') /* 16  RGB-5-6-5 BE  */
481607ca46eSDavid Howells #define V4L2_PIX_FMT_BGR666  v4l2_fourcc('B', 'G', 'R', 'H') /* 18  BGR-6-6-6	  */
482607ca46eSDavid Howells #define V4L2_PIX_FMT_BGR24   v4l2_fourcc('B', 'G', 'R', '3') /* 24  BGR-8-8-8     */
483607ca46eSDavid Howells #define V4L2_PIX_FMT_RGB24   v4l2_fourcc('R', 'G', 'B', '3') /* 24  RGB-8-8-8     */
484607ca46eSDavid Howells #define V4L2_PIX_FMT_BGR32   v4l2_fourcc('B', 'G', 'R', '4') /* 32  BGR-8-8-8-8   */
485977ff0e4SLaurent Pinchart #define V4L2_PIX_FMT_ABGR32  v4l2_fourcc('A', 'R', '2', '4') /* 32  BGRA-8-8-8-8  */
486977ff0e4SLaurent Pinchart #define V4L2_PIX_FMT_XBGR32  v4l2_fourcc('X', 'R', '2', '4') /* 32  BGRX-8-8-8-8  */
487607ca46eSDavid Howells #define V4L2_PIX_FMT_RGB32   v4l2_fourcc('R', 'G', 'B', '4') /* 32  RGB-8-8-8-8   */
488977ff0e4SLaurent Pinchart #define V4L2_PIX_FMT_ARGB32  v4l2_fourcc('B', 'A', '2', '4') /* 32  ARGB-8-8-8-8  */
489977ff0e4SLaurent Pinchart #define V4L2_PIX_FMT_XRGB32  v4l2_fourcc('B', 'X', '2', '4') /* 32  XRGB-8-8-8-8  */
490607ca46eSDavid Howells 
491607ca46eSDavid Howells /* Grey formats */
492607ca46eSDavid Howells #define V4L2_PIX_FMT_GREY    v4l2_fourcc('G', 'R', 'E', 'Y') /*  8  Greyscale     */
493607ca46eSDavid Howells #define V4L2_PIX_FMT_Y4      v4l2_fourcc('Y', '0', '4', ' ') /*  4  Greyscale     */
494607ca46eSDavid Howells #define V4L2_PIX_FMT_Y6      v4l2_fourcc('Y', '0', '6', ' ') /*  6  Greyscale     */
495607ca46eSDavid Howells #define V4L2_PIX_FMT_Y10     v4l2_fourcc('Y', '1', '0', ' ') /* 10  Greyscale     */
496607ca46eSDavid Howells #define V4L2_PIX_FMT_Y12     v4l2_fourcc('Y', '1', '2', ' ') /* 12  Greyscale     */
497607ca46eSDavid Howells #define V4L2_PIX_FMT_Y16     v4l2_fourcc('Y', '1', '6', ' ') /* 16  Greyscale     */
4982e5e435fSRicardo Ribalda #define V4L2_PIX_FMT_Y16_BE  v4l2_fourcc_be('Y', '1', '6', ' ') /* 16  Greyscale BE  */
499607ca46eSDavid Howells 
500607ca46eSDavid Howells /* Grey bit-packed formats */
501607ca46eSDavid Howells #define V4L2_PIX_FMT_Y10BPACK    v4l2_fourcc('Y', '1', '0', 'B') /* 10  Greyscale bit-packed */
502607ca46eSDavid Howells 
503607ca46eSDavid Howells /* Palette formats */
504607ca46eSDavid Howells #define V4L2_PIX_FMT_PAL8    v4l2_fourcc('P', 'A', 'L', '8') /*  8  8-bit palette */
505607ca46eSDavid Howells 
50605ad6fc1SManjunath Hadli /* Chrominance formats */
50705ad6fc1SManjunath Hadli #define V4L2_PIX_FMT_UV8     v4l2_fourcc('U', 'V', '8', ' ') /*  8  UV 4:4 */
50805ad6fc1SManjunath Hadli 
509607ca46eSDavid Howells /* Luminance+Chrominance formats */
510607ca46eSDavid Howells #define V4L2_PIX_FMT_YVU410  v4l2_fourcc('Y', 'V', 'U', '9') /*  9  YVU 4:1:0     */
511607ca46eSDavid Howells #define V4L2_PIX_FMT_YVU420  v4l2_fourcc('Y', 'V', '1', '2') /* 12  YVU 4:2:0     */
512607ca46eSDavid Howells #define V4L2_PIX_FMT_YUYV    v4l2_fourcc('Y', 'U', 'Y', 'V') /* 16  YUV 4:2:2     */
513607ca46eSDavid Howells #define V4L2_PIX_FMT_YYUV    v4l2_fourcc('Y', 'Y', 'U', 'V') /* 16  YUV 4:2:2     */
514607ca46eSDavid Howells #define V4L2_PIX_FMT_YVYU    v4l2_fourcc('Y', 'V', 'Y', 'U') /* 16 YVU 4:2:2 */
515607ca46eSDavid Howells #define V4L2_PIX_FMT_UYVY    v4l2_fourcc('U', 'Y', 'V', 'Y') /* 16  YUV 4:2:2     */
516607ca46eSDavid Howells #define V4L2_PIX_FMT_VYUY    v4l2_fourcc('V', 'Y', 'U', 'Y') /* 16  YUV 4:2:2     */
517607ca46eSDavid Howells #define V4L2_PIX_FMT_YUV422P v4l2_fourcc('4', '2', '2', 'P') /* 16  YVU422 planar */
518607ca46eSDavid Howells #define V4L2_PIX_FMT_YUV411P v4l2_fourcc('4', '1', '1', 'P') /* 16  YVU411 planar */
519607ca46eSDavid Howells #define V4L2_PIX_FMT_Y41P    v4l2_fourcc('Y', '4', '1', 'P') /* 12  YUV 4:1:1     */
520607ca46eSDavid Howells #define V4L2_PIX_FMT_YUV444  v4l2_fourcc('Y', '4', '4', '4') /* 16  xxxxyyyy uuuuvvvv */
521607ca46eSDavid Howells #define V4L2_PIX_FMT_YUV555  v4l2_fourcc('Y', 'U', 'V', 'O') /* 16  YUV-5-5-5     */
522607ca46eSDavid Howells #define V4L2_PIX_FMT_YUV565  v4l2_fourcc('Y', 'U', 'V', 'P') /* 16  YUV-5-6-5     */
523607ca46eSDavid Howells #define V4L2_PIX_FMT_YUV32   v4l2_fourcc('Y', 'U', 'V', '4') /* 32  YUV-8-8-8-8   */
524607ca46eSDavid Howells #define V4L2_PIX_FMT_YUV410  v4l2_fourcc('Y', 'U', 'V', '9') /*  9  YUV 4:1:0     */
525607ca46eSDavid Howells #define V4L2_PIX_FMT_YUV420  v4l2_fourcc('Y', 'U', '1', '2') /* 12  YUV 4:2:0     */
526607ca46eSDavid Howells #define V4L2_PIX_FMT_HI240   v4l2_fourcc('H', 'I', '2', '4') /*  8  8-bit color   */
527607ca46eSDavid Howells #define V4L2_PIX_FMT_HM12    v4l2_fourcc('H', 'M', '1', '2') /*  8  YUV 4:2:0 16x16 macroblocks */
528607ca46eSDavid Howells #define V4L2_PIX_FMT_M420    v4l2_fourcc('M', '4', '2', '0') /* 12  YUV 4:2:0 2 lines y, 1 line uv interleaved */
529607ca46eSDavid Howells 
530607ca46eSDavid Howells /* two planes -- one Y, one Cr + Cb interleaved  */
531607ca46eSDavid Howells #define V4L2_PIX_FMT_NV12    v4l2_fourcc('N', 'V', '1', '2') /* 12  Y/CbCr 4:2:0  */
532607ca46eSDavid Howells #define V4L2_PIX_FMT_NV21    v4l2_fourcc('N', 'V', '2', '1') /* 12  Y/CrCb 4:2:0  */
533607ca46eSDavid Howells #define V4L2_PIX_FMT_NV16    v4l2_fourcc('N', 'V', '1', '6') /* 16  Y/CbCr 4:2:2  */
534607ca46eSDavid Howells #define V4L2_PIX_FMT_NV61    v4l2_fourcc('N', 'V', '6', '1') /* 16  Y/CrCb 4:2:2  */
535607ca46eSDavid Howells #define V4L2_PIX_FMT_NV24    v4l2_fourcc('N', 'V', '2', '4') /* 24  Y/CbCr 4:4:4  */
536607ca46eSDavid Howells #define V4L2_PIX_FMT_NV42    v4l2_fourcc('N', 'V', '4', '2') /* 24  Y/CrCb 4:4:4  */
537607ca46eSDavid Howells 
538607ca46eSDavid Howells /* two non contiguous planes - one Y, one Cr + Cb interleaved  */
539607ca46eSDavid Howells #define V4L2_PIX_FMT_NV12M   v4l2_fourcc('N', 'M', '1', '2') /* 12  Y/CbCr 4:2:0  */
540607ca46eSDavid Howells #define V4L2_PIX_FMT_NV21M   v4l2_fourcc('N', 'M', '2', '1') /* 21  Y/CrCb 4:2:0  */
54184930548SLaurent Pinchart #define V4L2_PIX_FMT_NV16M   v4l2_fourcc('N', 'M', '1', '6') /* 16  Y/CbCr 4:2:2  */
54284930548SLaurent Pinchart #define V4L2_PIX_FMT_NV61M   v4l2_fourcc('N', 'M', '6', '1') /* 16  Y/CrCb 4:2:2  */
543607ca46eSDavid Howells #define V4L2_PIX_FMT_NV12MT  v4l2_fourcc('T', 'M', '1', '2') /* 12  Y/CbCr 4:2:0 64x32 macroblocks */
544607ca46eSDavid Howells #define V4L2_PIX_FMT_NV12MT_16X16 v4l2_fourcc('V', 'M', '1', '2') /* 12  Y/CbCr 4:2:0 16x16 macroblocks */
545607ca46eSDavid Howells 
546607ca46eSDavid Howells /* three non contiguous planes - Y, Cb, Cr */
547607ca46eSDavid Howells #define V4L2_PIX_FMT_YUV420M v4l2_fourcc('Y', 'M', '1', '2') /* 12  YUV420 planar */
548607ca46eSDavid Howells #define V4L2_PIX_FMT_YVU420M v4l2_fourcc('Y', 'M', '2', '1') /* 12  YVU420 planar */
549607ca46eSDavid Howells 
550607ca46eSDavid Howells /* Bayer formats - see http://www.siliconimaging.com/RGB%20Bayer.htm */
551607ca46eSDavid Howells #define V4L2_PIX_FMT_SBGGR8  v4l2_fourcc('B', 'A', '8', '1') /*  8  BGBG.. GRGR.. */
552607ca46eSDavid Howells #define V4L2_PIX_FMT_SGBRG8  v4l2_fourcc('G', 'B', 'R', 'G') /*  8  GBGB.. RGRG.. */
553607ca46eSDavid Howells #define V4L2_PIX_FMT_SGRBG8  v4l2_fourcc('G', 'R', 'B', 'G') /*  8  GRGR.. BGBG.. */
554607ca46eSDavid Howells #define V4L2_PIX_FMT_SRGGB8  v4l2_fourcc('R', 'G', 'G', 'B') /*  8  RGRG.. GBGB.. */
555607ca46eSDavid Howells #define V4L2_PIX_FMT_SBGGR10 v4l2_fourcc('B', 'G', '1', '0') /* 10  BGBG.. GRGR.. */
556607ca46eSDavid Howells #define V4L2_PIX_FMT_SGBRG10 v4l2_fourcc('G', 'B', '1', '0') /* 10  GBGB.. RGRG.. */
557607ca46eSDavid Howells #define V4L2_PIX_FMT_SGRBG10 v4l2_fourcc('B', 'A', '1', '0') /* 10  GRGR.. BGBG.. */
558607ca46eSDavid Howells #define V4L2_PIX_FMT_SRGGB10 v4l2_fourcc('R', 'G', '1', '0') /* 10  RGRG.. GBGB.. */
5594353e36eSAviv Greenberg 	/* 10bit raw bayer packed, 5 bytes for every 4 pixels */
5604353e36eSAviv Greenberg #define V4L2_PIX_FMT_SBGGR10P v4l2_fourcc('p', 'B', 'A', 'A')
5614353e36eSAviv Greenberg #define V4L2_PIX_FMT_SGBRG10P v4l2_fourcc('p', 'G', 'A', 'A')
5624353e36eSAviv Greenberg #define V4L2_PIX_FMT_SGRBG10P v4l2_fourcc('p', 'g', 'A', 'A')
5634353e36eSAviv Greenberg #define V4L2_PIX_FMT_SRGGB10P v4l2_fourcc('p', 'R', 'A', 'A')
56405ad6fc1SManjunath Hadli 	/* 10bit raw bayer a-law compressed to 8 bits */
56505ad6fc1SManjunath Hadli #define V4L2_PIX_FMT_SBGGR10ALAW8 v4l2_fourcc('a', 'B', 'A', '8')
56605ad6fc1SManjunath Hadli #define V4L2_PIX_FMT_SGBRG10ALAW8 v4l2_fourcc('a', 'G', 'A', '8')
56705ad6fc1SManjunath Hadli #define V4L2_PIX_FMT_SGRBG10ALAW8 v4l2_fourcc('a', 'g', 'A', '8')
56805ad6fc1SManjunath Hadli #define V4L2_PIX_FMT_SRGGB10ALAW8 v4l2_fourcc('a', 'R', 'A', '8')
569607ca46eSDavid Howells 	/* 10bit raw bayer DPCM compressed to 8 bits */
570607ca46eSDavid Howells #define V4L2_PIX_FMT_SBGGR10DPCM8 v4l2_fourcc('b', 'B', 'A', '8')
571607ca46eSDavid Howells #define V4L2_PIX_FMT_SGBRG10DPCM8 v4l2_fourcc('b', 'G', 'A', '8')
572607ca46eSDavid Howells #define V4L2_PIX_FMT_SGRBG10DPCM8 v4l2_fourcc('B', 'D', '1', '0')
573607ca46eSDavid Howells #define V4L2_PIX_FMT_SRGGB10DPCM8 v4l2_fourcc('b', 'R', 'A', '8')
574cbb77bc2SSakari Ailus #define V4L2_PIX_FMT_SBGGR12 v4l2_fourcc('B', 'G', '1', '2') /* 12  BGBG.. GRGR.. */
575cbb77bc2SSakari Ailus #define V4L2_PIX_FMT_SGBRG12 v4l2_fourcc('G', 'B', '1', '2') /* 12  GBGB.. RGRG.. */
576cbb77bc2SSakari Ailus #define V4L2_PIX_FMT_SGRBG12 v4l2_fourcc('B', 'A', '1', '2') /* 12  GRGR.. BGBG.. */
577cbb77bc2SSakari Ailus #define V4L2_PIX_FMT_SRGGB12 v4l2_fourcc('R', 'G', '1', '2') /* 12  RGRG.. GBGB.. */
578607ca46eSDavid Howells #define V4L2_PIX_FMT_SBGGR16 v4l2_fourcc('B', 'Y', 'R', '2') /* 16  BGBG.. GRGR.. */
579607ca46eSDavid Howells 
580607ca46eSDavid Howells /* compressed formats */
581607ca46eSDavid Howells #define V4L2_PIX_FMT_MJPEG    v4l2_fourcc('M', 'J', 'P', 'G') /* Motion-JPEG   */
582607ca46eSDavid Howells #define V4L2_PIX_FMT_JPEG     v4l2_fourcc('J', 'P', 'E', 'G') /* JFIF JPEG     */
583607ca46eSDavid Howells #define V4L2_PIX_FMT_DV       v4l2_fourcc('d', 'v', 's', 'd') /* 1394          */
584607ca46eSDavid Howells #define V4L2_PIX_FMT_MPEG     v4l2_fourcc('M', 'P', 'E', 'G') /* MPEG-1/2/4 Multiplexed */
585607ca46eSDavid Howells #define V4L2_PIX_FMT_H264     v4l2_fourcc('H', '2', '6', '4') /* H264 with start codes */
586607ca46eSDavid Howells #define V4L2_PIX_FMT_H264_NO_SC v4l2_fourcc('A', 'V', 'C', '1') /* H264 without start codes */
587607ca46eSDavid Howells #define V4L2_PIX_FMT_H264_MVC v4l2_fourcc('M', '2', '6', '4') /* H264 MVC */
588607ca46eSDavid Howells #define V4L2_PIX_FMT_H263     v4l2_fourcc('H', '2', '6', '3') /* H263          */
589607ca46eSDavid Howells #define V4L2_PIX_FMT_MPEG1    v4l2_fourcc('M', 'P', 'G', '1') /* MPEG-1 ES     */
590607ca46eSDavid Howells #define V4L2_PIX_FMT_MPEG2    v4l2_fourcc('M', 'P', 'G', '2') /* MPEG-2 ES     */
591adf62712SIsmael Luceno #define V4L2_PIX_FMT_MPEG4    v4l2_fourcc('M', 'P', 'G', '4') /* MPEG-4 part 2 ES */
592607ca46eSDavid Howells #define V4L2_PIX_FMT_XVID     v4l2_fourcc('X', 'V', 'I', 'D') /* Xvid           */
593607ca46eSDavid Howells #define V4L2_PIX_FMT_VC1_ANNEX_G v4l2_fourcc('V', 'C', '1', 'G') /* SMPTE 421M Annex G compliant stream */
594607ca46eSDavid Howells #define V4L2_PIX_FMT_VC1_ANNEX_L v4l2_fourcc('V', 'C', '1', 'L') /* SMPTE 421M Annex L compliant stream */
595607ca46eSDavid Howells #define V4L2_PIX_FMT_VP8      v4l2_fourcc('V', 'P', '8', '0') /* VP8 */
596607ca46eSDavid Howells 
597607ca46eSDavid Howells /*  Vendor-specific formats   */
598607ca46eSDavid Howells #define V4L2_PIX_FMT_CPIA1    v4l2_fourcc('C', 'P', 'I', 'A') /* cpia1 YUV */
599607ca46eSDavid Howells #define V4L2_PIX_FMT_WNVA     v4l2_fourcc('W', 'N', 'V', 'A') /* Winnov hw compress */
600607ca46eSDavid Howells #define V4L2_PIX_FMT_SN9C10X  v4l2_fourcc('S', '9', '1', '0') /* SN9C10x compression */
601607ca46eSDavid Howells #define V4L2_PIX_FMT_SN9C20X_I420 v4l2_fourcc('S', '9', '2', '0') /* SN9C20x YUV 4:2:0 */
602607ca46eSDavid Howells #define V4L2_PIX_FMT_PWC1     v4l2_fourcc('P', 'W', 'C', '1') /* pwc older webcam */
603607ca46eSDavid Howells #define V4L2_PIX_FMT_PWC2     v4l2_fourcc('P', 'W', 'C', '2') /* pwc newer webcam */
604607ca46eSDavid Howells #define V4L2_PIX_FMT_ET61X251 v4l2_fourcc('E', '6', '2', '5') /* ET61X251 compression */
605607ca46eSDavid Howells #define V4L2_PIX_FMT_SPCA501  v4l2_fourcc('S', '5', '0', '1') /* YUYV per line */
606607ca46eSDavid Howells #define V4L2_PIX_FMT_SPCA505  v4l2_fourcc('S', '5', '0', '5') /* YYUV per line */
607607ca46eSDavid Howells #define V4L2_PIX_FMT_SPCA508  v4l2_fourcc('S', '5', '0', '8') /* YUVY per line */
608607ca46eSDavid Howells #define V4L2_PIX_FMT_SPCA561  v4l2_fourcc('S', '5', '6', '1') /* compressed GBRG bayer */
609607ca46eSDavid Howells #define V4L2_PIX_FMT_PAC207   v4l2_fourcc('P', '2', '0', '7') /* compressed BGGR bayer */
610607ca46eSDavid Howells #define V4L2_PIX_FMT_MR97310A v4l2_fourcc('M', '3', '1', '0') /* compressed BGGR bayer */
611607ca46eSDavid Howells #define V4L2_PIX_FMT_JL2005BCD v4l2_fourcc('J', 'L', '2', '0') /* compressed RGGB bayer */
612607ca46eSDavid Howells #define V4L2_PIX_FMT_SN9C2028 v4l2_fourcc('S', 'O', 'N', 'X') /* compressed GBRG bayer */
613607ca46eSDavid Howells #define V4L2_PIX_FMT_SQ905C   v4l2_fourcc('9', '0', '5', 'C') /* compressed RGGB bayer */
614607ca46eSDavid Howells #define V4L2_PIX_FMT_PJPG     v4l2_fourcc('P', 'J', 'P', 'G') /* Pixart 73xx JPEG */
615607ca46eSDavid Howells #define V4L2_PIX_FMT_OV511    v4l2_fourcc('O', '5', '1', '1') /* ov511 JPEG */
616607ca46eSDavid Howells #define V4L2_PIX_FMT_OV518    v4l2_fourcc('O', '5', '1', '8') /* ov518 JPEG */
617607ca46eSDavid Howells #define V4L2_PIX_FMT_STV0680  v4l2_fourcc('S', '6', '8', '0') /* stv0680 bayer */
618607ca46eSDavid Howells #define V4L2_PIX_FMT_TM6000   v4l2_fourcc('T', 'M', '6', '0') /* tm5600/tm60x0 */
619607ca46eSDavid Howells #define V4L2_PIX_FMT_CIT_YYVYUY v4l2_fourcc('C', 'I', 'T', 'V') /* one line of Y then 1 line of VYUY */
620607ca46eSDavid Howells #define V4L2_PIX_FMT_KONICA420  v4l2_fourcc('K', 'O', 'N', 'I') /* YUV420 planar in blocks of 256 pixels */
621607ca46eSDavid Howells #define V4L2_PIX_FMT_JPGL	v4l2_fourcc('J', 'P', 'G', 'L') /* JPEG-Lite */
622607ca46eSDavid Howells #define V4L2_PIX_FMT_SE401      v4l2_fourcc('S', '4', '0', '1') /* se401 janggu compressed rgb */
623607ca46eSDavid Howells #define V4L2_PIX_FMT_S5C_UYVY_JPG v4l2_fourcc('S', '5', 'C', 'I') /* S5C73M3 interleaved UYVY/JPEG */
624607ca46eSDavid Howells 
62500419a6aSAntti Palosaari /* SDR formats - used only for Software Defined Radio devices */
62600419a6aSAntti Palosaari #define V4L2_SDR_FMT_CU8          v4l2_fourcc('C', 'U', '0', '8') /* IQ u8 */
62700419a6aSAntti Palosaari #define V4L2_SDR_FMT_CU16LE       v4l2_fourcc('C', 'U', '1', '6') /* IQ u16le */
628c0c03886SAntti Palosaari #define V4L2_SDR_FMT_CS8          v4l2_fourcc('C', 'S', '0', '8') /* complex s8 */
6295c5be570SAntti Palosaari #define V4L2_SDR_FMT_CS14LE       v4l2_fourcc('C', 'S', '1', '4') /* complex s14le */
6309e9e3927SAntti Palosaari #define V4L2_SDR_FMT_RU12LE       v4l2_fourcc('R', 'U', '1', '2') /* real u12le */
63100419a6aSAntti Palosaari 
632d52e2381SLaurent Pinchart /* priv field value to indicates that subsequent fields are valid. */
633d52e2381SLaurent Pinchart #define V4L2_PIX_FMT_PRIV_MAGIC		0xfeedcafe
634d52e2381SLaurent Pinchart 
635c96fd46aSLaurent Pinchart /* Flags */
636c96fd46aSLaurent Pinchart #define V4L2_PIX_FMT_FLAG_PREMUL_ALPHA	0x00000001
637c96fd46aSLaurent Pinchart 
638607ca46eSDavid Howells /*
639607ca46eSDavid Howells  *	F O R M A T   E N U M E R A T I O N
640607ca46eSDavid Howells  */
641607ca46eSDavid Howells struct v4l2_fmtdesc {
642607ca46eSDavid Howells 	__u32		    index;             /* Format number      */
643607ca46eSDavid Howells 	__u32		    type;              /* enum v4l2_buf_type */
644607ca46eSDavid Howells 	__u32               flags;
645607ca46eSDavid Howells 	__u8		    description[32];   /* Description string */
646607ca46eSDavid Howells 	__u32		    pixelformat;       /* Format fourcc      */
647607ca46eSDavid Howells 	__u32		    reserved[4];
648607ca46eSDavid Howells };
649607ca46eSDavid Howells 
650607ca46eSDavid Howells #define V4L2_FMT_FLAG_COMPRESSED 0x0001
651607ca46eSDavid Howells #define V4L2_FMT_FLAG_EMULATED   0x0002
652607ca46eSDavid Howells 
653607ca46eSDavid Howells #if 1
654607ca46eSDavid Howells 	/* Experimental Frame Size and frame rate enumeration */
655607ca46eSDavid Howells /*
656607ca46eSDavid Howells  *	F R A M E   S I Z E   E N U M E R A T I O N
657607ca46eSDavid Howells  */
658607ca46eSDavid Howells enum v4l2_frmsizetypes {
659607ca46eSDavid Howells 	V4L2_FRMSIZE_TYPE_DISCRETE	= 1,
660607ca46eSDavid Howells 	V4L2_FRMSIZE_TYPE_CONTINUOUS	= 2,
661607ca46eSDavid Howells 	V4L2_FRMSIZE_TYPE_STEPWISE	= 3,
662607ca46eSDavid Howells };
663607ca46eSDavid Howells 
664607ca46eSDavid Howells struct v4l2_frmsize_discrete {
665607ca46eSDavid Howells 	__u32			width;		/* Frame width [pixel] */
666607ca46eSDavid Howells 	__u32			height;		/* Frame height [pixel] */
667607ca46eSDavid Howells };
668607ca46eSDavid Howells 
669607ca46eSDavid Howells struct v4l2_frmsize_stepwise {
670607ca46eSDavid Howells 	__u32			min_width;	/* Minimum frame width [pixel] */
671607ca46eSDavid Howells 	__u32			max_width;	/* Maximum frame width [pixel] */
672607ca46eSDavid Howells 	__u32			step_width;	/* Frame width step size [pixel] */
673607ca46eSDavid Howells 	__u32			min_height;	/* Minimum frame height [pixel] */
674607ca46eSDavid Howells 	__u32			max_height;	/* Maximum frame height [pixel] */
675607ca46eSDavid Howells 	__u32			step_height;	/* Frame height step size [pixel] */
676607ca46eSDavid Howells };
677607ca46eSDavid Howells 
678607ca46eSDavid Howells struct v4l2_frmsizeenum {
679607ca46eSDavid Howells 	__u32			index;		/* Frame size number */
680607ca46eSDavid Howells 	__u32			pixel_format;	/* Pixel format */
681607ca46eSDavid Howells 	__u32			type;		/* Frame size type the device supports. */
682607ca46eSDavid Howells 
683607ca46eSDavid Howells 	union {					/* Frame size */
684607ca46eSDavid Howells 		struct v4l2_frmsize_discrete	discrete;
685607ca46eSDavid Howells 		struct v4l2_frmsize_stepwise	stepwise;
686607ca46eSDavid Howells 	};
687607ca46eSDavid Howells 
688607ca46eSDavid Howells 	__u32   reserved[2];			/* Reserved space for future use */
689607ca46eSDavid Howells };
690607ca46eSDavid Howells 
691607ca46eSDavid Howells /*
692607ca46eSDavid Howells  *	F R A M E   R A T E   E N U M E R A T I O N
693607ca46eSDavid Howells  */
694607ca46eSDavid Howells enum v4l2_frmivaltypes {
695607ca46eSDavid Howells 	V4L2_FRMIVAL_TYPE_DISCRETE	= 1,
696607ca46eSDavid Howells 	V4L2_FRMIVAL_TYPE_CONTINUOUS	= 2,
697607ca46eSDavid Howells 	V4L2_FRMIVAL_TYPE_STEPWISE	= 3,
698607ca46eSDavid Howells };
699607ca46eSDavid Howells 
700607ca46eSDavid Howells struct v4l2_frmival_stepwise {
701607ca46eSDavid Howells 	struct v4l2_fract	min;		/* Minimum frame interval [s] */
702607ca46eSDavid Howells 	struct v4l2_fract	max;		/* Maximum frame interval [s] */
703607ca46eSDavid Howells 	struct v4l2_fract	step;		/* Frame interval step size [s] */
704607ca46eSDavid Howells };
705607ca46eSDavid Howells 
706607ca46eSDavid Howells struct v4l2_frmivalenum {
707607ca46eSDavid Howells 	__u32			index;		/* Frame format index */
708607ca46eSDavid Howells 	__u32			pixel_format;	/* Pixel format */
709607ca46eSDavid Howells 	__u32			width;		/* Frame width */
710607ca46eSDavid Howells 	__u32			height;		/* Frame height */
711607ca46eSDavid Howells 	__u32			type;		/* Frame interval type the device supports. */
712607ca46eSDavid Howells 
713607ca46eSDavid Howells 	union {					/* Frame interval */
714607ca46eSDavid Howells 		struct v4l2_fract		discrete;
715607ca46eSDavid Howells 		struct v4l2_frmival_stepwise	stepwise;
716607ca46eSDavid Howells 	};
717607ca46eSDavid Howells 
718607ca46eSDavid Howells 	__u32	reserved[2];			/* Reserved space for future use */
719607ca46eSDavid Howells };
720607ca46eSDavid Howells #endif
721607ca46eSDavid Howells 
722607ca46eSDavid Howells /*
723607ca46eSDavid Howells  *	T I M E C O D E
724607ca46eSDavid Howells  */
725607ca46eSDavid Howells struct v4l2_timecode {
726607ca46eSDavid Howells 	__u32	type;
727607ca46eSDavid Howells 	__u32	flags;
728607ca46eSDavid Howells 	__u8	frames;
729607ca46eSDavid Howells 	__u8	seconds;
730607ca46eSDavid Howells 	__u8	minutes;
731607ca46eSDavid Howells 	__u8	hours;
732607ca46eSDavid Howells 	__u8	userbits[4];
733607ca46eSDavid Howells };
734607ca46eSDavid Howells 
735607ca46eSDavid Howells /*  Type  */
736607ca46eSDavid Howells #define V4L2_TC_TYPE_24FPS		1
737607ca46eSDavid Howells #define V4L2_TC_TYPE_25FPS		2
738607ca46eSDavid Howells #define V4L2_TC_TYPE_30FPS		3
739607ca46eSDavid Howells #define V4L2_TC_TYPE_50FPS		4
740607ca46eSDavid Howells #define V4L2_TC_TYPE_60FPS		5
741607ca46eSDavid Howells 
742607ca46eSDavid Howells /*  Flags  */
743607ca46eSDavid Howells #define V4L2_TC_FLAG_DROPFRAME		0x0001 /* "drop-frame" mode */
744607ca46eSDavid Howells #define V4L2_TC_FLAG_COLORFRAME		0x0002
745607ca46eSDavid Howells #define V4L2_TC_USERBITS_field		0x000C
746607ca46eSDavid Howells #define V4L2_TC_USERBITS_USERDEFINED	0x0000
747607ca46eSDavid Howells #define V4L2_TC_USERBITS_8BITCHARS	0x0008
748607ca46eSDavid Howells /* The above is based on SMPTE timecodes */
749607ca46eSDavid Howells 
750607ca46eSDavid Howells struct v4l2_jpegcompression {
751607ca46eSDavid Howells 	int quality;
752607ca46eSDavid Howells 
753607ca46eSDavid Howells 	int  APPn;              /* Number of APP segment to be written,
754607ca46eSDavid Howells 				 * must be 0..15 */
755607ca46eSDavid Howells 	int  APP_len;           /* Length of data in JPEG APPn segment */
756607ca46eSDavid Howells 	char APP_data[60];      /* Data in the JPEG APPn segment. */
757607ca46eSDavid Howells 
758607ca46eSDavid Howells 	int  COM_len;           /* Length of data in JPEG COM segment */
759607ca46eSDavid Howells 	char COM_data[60];      /* Data in JPEG COM segment */
760607ca46eSDavid Howells 
761607ca46eSDavid Howells 	__u32 jpeg_markers;     /* Which markers should go into the JPEG
762607ca46eSDavid Howells 				 * output. Unless you exactly know what
763607ca46eSDavid Howells 				 * you do, leave them untouched.
764ff29feb9SLad, Prabhakar 				 * Including less markers will make the
765607ca46eSDavid Howells 				 * resulting code smaller, but there will
766607ca46eSDavid Howells 				 * be fewer applications which can read it.
767607ca46eSDavid Howells 				 * The presence of the APP and COM marker
768607ca46eSDavid Howells 				 * is influenced by APP_len and COM_len
769607ca46eSDavid Howells 				 * ONLY, not by this property! */
770607ca46eSDavid Howells 
771607ca46eSDavid Howells #define V4L2_JPEG_MARKER_DHT (1<<3)    /* Define Huffman Tables */
772607ca46eSDavid Howells #define V4L2_JPEG_MARKER_DQT (1<<4)    /* Define Quantization Tables */
773607ca46eSDavid Howells #define V4L2_JPEG_MARKER_DRI (1<<5)    /* Define Restart Interval */
774607ca46eSDavid Howells #define V4L2_JPEG_MARKER_COM (1<<6)    /* Comment segment */
775607ca46eSDavid Howells #define V4L2_JPEG_MARKER_APP (1<<7)    /* App segment, driver will
776ff29feb9SLad, Prabhakar 					* always use APP0 */
777607ca46eSDavid Howells };
778607ca46eSDavid Howells 
779607ca46eSDavid Howells /*
780607ca46eSDavid Howells  *	M E M O R Y - M A P P I N G   B U F F E R S
781607ca46eSDavid Howells  */
782607ca46eSDavid Howells struct v4l2_requestbuffers {
783607ca46eSDavid Howells 	__u32			count;
784607ca46eSDavid Howells 	__u32			type;		/* enum v4l2_buf_type */
785607ca46eSDavid Howells 	__u32			memory;		/* enum v4l2_memory */
786607ca46eSDavid Howells 	__u32			reserved[2];
787607ca46eSDavid Howells };
788607ca46eSDavid Howells 
789607ca46eSDavid Howells /**
790607ca46eSDavid Howells  * struct v4l2_plane - plane info for multi-planar buffers
791607ca46eSDavid Howells  * @bytesused:		number of bytes occupied by data in the plane (payload)
792607ca46eSDavid Howells  * @length:		size of this plane (NOT the payload) in bytes
793607ca46eSDavid Howells  * @mem_offset:		when memory in the associated struct v4l2_buffer is
794607ca46eSDavid Howells  *			V4L2_MEMORY_MMAP, equals the offset from the start of
795607ca46eSDavid Howells  *			the device memory for this plane (or is a "cookie" that
796607ca46eSDavid Howells  *			should be passed to mmap() called on the video node)
797607ca46eSDavid Howells  * @userptr:		when memory is V4L2_MEMORY_USERPTR, a userspace pointer
798607ca46eSDavid Howells  *			pointing to this plane
799051c7788SSumit Semwal  * @fd:			when memory is V4L2_MEMORY_DMABUF, a userspace file
800051c7788SSumit Semwal  *			descriptor associated with this plane
801607ca46eSDavid Howells  * @data_offset:	offset in the plane to the start of data; usually 0,
802607ca46eSDavid Howells  *			unless there is a header in front of the data
803607ca46eSDavid Howells  *
804607ca46eSDavid Howells  * Multi-planar buffers consist of one or more planes, e.g. an YCbCr buffer
805607ca46eSDavid Howells  * with two planes can have one plane for Y, and another for interleaved CbCr
806607ca46eSDavid Howells  * components. Each plane can reside in a separate memory buffer, or even in
807607ca46eSDavid Howells  * a completely separate memory node (e.g. in embedded devices).
808607ca46eSDavid Howells  */
809607ca46eSDavid Howells struct v4l2_plane {
810607ca46eSDavid Howells 	__u32			bytesused;
811607ca46eSDavid Howells 	__u32			length;
812607ca46eSDavid Howells 	union {
813607ca46eSDavid Howells 		__u32		mem_offset;
814607ca46eSDavid Howells 		unsigned long	userptr;
815051c7788SSumit Semwal 		__s32		fd;
816607ca46eSDavid Howells 	} m;
817607ca46eSDavid Howells 	__u32			data_offset;
818607ca46eSDavid Howells 	__u32			reserved[11];
819607ca46eSDavid Howells };
820607ca46eSDavid Howells 
821607ca46eSDavid Howells /**
822607ca46eSDavid Howells  * struct v4l2_buffer - video buffer info
823607ca46eSDavid Howells  * @index:	id number of the buffer
824607ca46eSDavid Howells  * @type:	enum v4l2_buf_type; buffer type (type == *_MPLANE for
825607ca46eSDavid Howells  *		multiplanar buffers);
826607ca46eSDavid Howells  * @bytesused:	number of bytes occupied by data in the buffer (payload);
827607ca46eSDavid Howells  *		unused (set to 0) for multiplanar buffers
828607ca46eSDavid Howells  * @flags:	buffer informational flags
829607ca46eSDavid Howells  * @field:	enum v4l2_field; field order of the image in the buffer
830607ca46eSDavid Howells  * @timestamp:	frame timestamp
831607ca46eSDavid Howells  * @timecode:	frame timecode
832607ca46eSDavid Howells  * @sequence:	sequence count of this frame
833607ca46eSDavid Howells  * @memory:	enum v4l2_memory; the method, in which the actual video data is
834607ca46eSDavid Howells  *		passed
835607ca46eSDavid Howells  * @offset:	for non-multiplanar buffers with memory == V4L2_MEMORY_MMAP;
836607ca46eSDavid Howells  *		offset from the start of the device memory for this plane,
837607ca46eSDavid Howells  *		(or a "cookie" that should be passed to mmap() as offset)
838607ca46eSDavid Howells  * @userptr:	for non-multiplanar buffers with memory == V4L2_MEMORY_USERPTR;
839607ca46eSDavid Howells  *		a userspace pointer pointing to this buffer
840051c7788SSumit Semwal  * @fd:		for non-multiplanar buffers with memory == V4L2_MEMORY_DMABUF;
841051c7788SSumit Semwal  *		a userspace file descriptor associated with this buffer
842607ca46eSDavid Howells  * @planes:	for multiplanar buffers; userspace pointer to the array of plane
843607ca46eSDavid Howells  *		info structs for this buffer
844607ca46eSDavid Howells  * @length:	size in bytes of the buffer (NOT its payload) for single-plane
845607ca46eSDavid Howells  *		buffers (when type != *_MPLANE); number of elements in the
846607ca46eSDavid Howells  *		planes array for multi-plane buffers
847607ca46eSDavid Howells  *
848607ca46eSDavid Howells  * Contains data exchanged by application and driver using one of the Streaming
849607ca46eSDavid Howells  * I/O methods.
850607ca46eSDavid Howells  */
851607ca46eSDavid Howells struct v4l2_buffer {
852607ca46eSDavid Howells 	__u32			index;
853607ca46eSDavid Howells 	__u32			type;
854607ca46eSDavid Howells 	__u32			bytesused;
855607ca46eSDavid Howells 	__u32			flags;
856607ca46eSDavid Howells 	__u32			field;
857607ca46eSDavid Howells 	struct timeval		timestamp;
858607ca46eSDavid Howells 	struct v4l2_timecode	timecode;
859607ca46eSDavid Howells 	__u32			sequence;
860607ca46eSDavid Howells 
861607ca46eSDavid Howells 	/* memory location */
862607ca46eSDavid Howells 	__u32			memory;
863607ca46eSDavid Howells 	union {
864607ca46eSDavid Howells 		__u32           offset;
865607ca46eSDavid Howells 		unsigned long   userptr;
866607ca46eSDavid Howells 		struct v4l2_plane *planes;
867051c7788SSumit Semwal 		__s32		fd;
868607ca46eSDavid Howells 	} m;
869607ca46eSDavid Howells 	__u32			length;
870607ca46eSDavid Howells 	__u32			reserved2;
871607ca46eSDavid Howells 	__u32			reserved;
872607ca46eSDavid Howells };
873607ca46eSDavid Howells 
874607ca46eSDavid Howells /*  Flags for 'flags' field */
875939f1377SSakari Ailus /* Buffer is mapped (flag) */
876939f1377SSakari Ailus #define V4L2_BUF_FLAG_MAPPED			0x00000001
877939f1377SSakari Ailus /* Buffer is queued for processing */
878939f1377SSakari Ailus #define V4L2_BUF_FLAG_QUEUED			0x00000002
879939f1377SSakari Ailus /* Buffer is ready */
880939f1377SSakari Ailus #define V4L2_BUF_FLAG_DONE			0x00000004
881939f1377SSakari Ailus /* Image is a keyframe (I-frame) */
882939f1377SSakari Ailus #define V4L2_BUF_FLAG_KEYFRAME			0x00000008
883939f1377SSakari Ailus /* Image is a P-frame */
884939f1377SSakari Ailus #define V4L2_BUF_FLAG_PFRAME			0x00000010
885939f1377SSakari Ailus /* Image is a B-frame */
886939f1377SSakari Ailus #define V4L2_BUF_FLAG_BFRAME			0x00000020
887607ca46eSDavid Howells /* Buffer is ready, but the data contained within is corrupted. */
888939f1377SSakari Ailus #define V4L2_BUF_FLAG_ERROR			0x00000040
889939f1377SSakari Ailus /* timecode field is valid */
890939f1377SSakari Ailus #define V4L2_BUF_FLAG_TIMECODE			0x00000100
891939f1377SSakari Ailus /* Buffer is prepared for queuing */
892939f1377SSakari Ailus #define V4L2_BUF_FLAG_PREPARED			0x00000400
893607ca46eSDavid Howells /* Cache handling flags */
894939f1377SSakari Ailus #define V4L2_BUF_FLAG_NO_CACHE_INVALIDATE	0x00000800
895939f1377SSakari Ailus #define V4L2_BUF_FLAG_NO_CACHE_CLEAN		0x00001000
8961202ecdcSSakari Ailus /* Timestamp type */
897939f1377SSakari Ailus #define V4L2_BUF_FLAG_TIMESTAMP_MASK		0x0000e000
898939f1377SSakari Ailus #define V4L2_BUF_FLAG_TIMESTAMP_UNKNOWN		0x00000000
899939f1377SSakari Ailus #define V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC	0x00002000
900939f1377SSakari Ailus #define V4L2_BUF_FLAG_TIMESTAMP_COPY		0x00004000
901872484ceSSakari Ailus /* Timestamp sources. */
902872484ceSSakari Ailus #define V4L2_BUF_FLAG_TSTAMP_SRC_MASK		0x00070000
903872484ceSSakari Ailus #define V4L2_BUF_FLAG_TSTAMP_SRC_EOF		0x00000000
904872484ceSSakari Ailus #define V4L2_BUF_FLAG_TSTAMP_SRC_SOE		0x00010000
905dc199241SPeter Seiderer /* mem2mem encoder/decoder */
906dc199241SPeter Seiderer #define V4L2_BUF_FLAG_LAST			0x00100000
907607ca46eSDavid Howells 
908b799d09aSTomasz Stanislawski /**
909b799d09aSTomasz Stanislawski  * struct v4l2_exportbuffer - export of video buffer as DMABUF file descriptor
910b799d09aSTomasz Stanislawski  *
911b799d09aSTomasz Stanislawski  * @index:	id number of the buffer
912b799d09aSTomasz Stanislawski  * @type:	enum v4l2_buf_type; buffer type (type == *_MPLANE for
913b799d09aSTomasz Stanislawski  *		multiplanar buffers);
914b799d09aSTomasz Stanislawski  * @plane:	index of the plane to be exported, 0 for single plane queues
915b799d09aSTomasz Stanislawski  * @flags:	flags for newly created file, currently only O_CLOEXEC is
916b799d09aSTomasz Stanislawski  *		supported, refer to manual of open syscall for more details
917b799d09aSTomasz Stanislawski  * @fd:		file descriptor associated with DMABUF (set by driver)
918b799d09aSTomasz Stanislawski  *
919b799d09aSTomasz Stanislawski  * Contains data used for exporting a video buffer as DMABUF file descriptor.
920b799d09aSTomasz Stanislawski  * The buffer is identified by a 'cookie' returned by VIDIOC_QUERYBUF
921b799d09aSTomasz Stanislawski  * (identical to the cookie used to mmap() the buffer to userspace). All
922b799d09aSTomasz Stanislawski  * reserved fields must be set to zero. The field reserved0 is expected to
923b799d09aSTomasz Stanislawski  * become a structure 'type' allowing an alternative layout of the structure
924b799d09aSTomasz Stanislawski  * content. Therefore this field should not be used for any other extensions.
925b799d09aSTomasz Stanislawski  */
926b799d09aSTomasz Stanislawski struct v4l2_exportbuffer {
927b799d09aSTomasz Stanislawski 	__u32		type; /* enum v4l2_buf_type */
928b799d09aSTomasz Stanislawski 	__u32		index;
929b799d09aSTomasz Stanislawski 	__u32		plane;
930b799d09aSTomasz Stanislawski 	__u32		flags;
931b799d09aSTomasz Stanislawski 	__s32		fd;
932b799d09aSTomasz Stanislawski 	__u32		reserved[11];
933b799d09aSTomasz Stanislawski };
934b799d09aSTomasz Stanislawski 
935607ca46eSDavid Howells /*
936607ca46eSDavid Howells  *	O V E R L A Y   P R E V I E W
937607ca46eSDavid Howells  */
938607ca46eSDavid Howells struct v4l2_framebuffer {
939607ca46eSDavid Howells 	__u32			capability;
940607ca46eSDavid Howells 	__u32			flags;
941607ca46eSDavid Howells /* FIXME: in theory we should pass something like PCI device + memory
942607ca46eSDavid Howells  * region + offset instead of some physical address */
943607ca46eSDavid Howells 	void                    *base;
944d52e2381SLaurent Pinchart 	struct {
945d52e2381SLaurent Pinchart 		__u32		width;
946d52e2381SLaurent Pinchart 		__u32		height;
947d52e2381SLaurent Pinchart 		__u32		pixelformat;
948d52e2381SLaurent Pinchart 		__u32		field;		/* enum v4l2_field */
949d52e2381SLaurent Pinchart 		__u32		bytesperline;	/* for padding, zero if unused */
950d52e2381SLaurent Pinchart 		__u32		sizeimage;
951d52e2381SLaurent Pinchart 		__u32		colorspace;	/* enum v4l2_colorspace */
952d52e2381SLaurent Pinchart 		__u32		priv;		/* reserved field, set to 0 */
953d52e2381SLaurent Pinchart 	} fmt;
954607ca46eSDavid Howells };
955607ca46eSDavid Howells /*  Flags for the 'capability' field. Read only */
956607ca46eSDavid Howells #define V4L2_FBUF_CAP_EXTERNOVERLAY	0x0001
957607ca46eSDavid Howells #define V4L2_FBUF_CAP_CHROMAKEY		0x0002
958607ca46eSDavid Howells #define V4L2_FBUF_CAP_LIST_CLIPPING     0x0004
959607ca46eSDavid Howells #define V4L2_FBUF_CAP_BITMAP_CLIPPING	0x0008
960607ca46eSDavid Howells #define V4L2_FBUF_CAP_LOCAL_ALPHA	0x0010
961607ca46eSDavid Howells #define V4L2_FBUF_CAP_GLOBAL_ALPHA	0x0020
962607ca46eSDavid Howells #define V4L2_FBUF_CAP_LOCAL_INV_ALPHA	0x0040
963607ca46eSDavid Howells #define V4L2_FBUF_CAP_SRC_CHROMAKEY	0x0080
964607ca46eSDavid Howells /*  Flags for the 'flags' field. */
965607ca46eSDavid Howells #define V4L2_FBUF_FLAG_PRIMARY		0x0001
966607ca46eSDavid Howells #define V4L2_FBUF_FLAG_OVERLAY		0x0002
967607ca46eSDavid Howells #define V4L2_FBUF_FLAG_CHROMAKEY	0x0004
968607ca46eSDavid Howells #define V4L2_FBUF_FLAG_LOCAL_ALPHA	0x0008
969607ca46eSDavid Howells #define V4L2_FBUF_FLAG_GLOBAL_ALPHA	0x0010
970607ca46eSDavid Howells #define V4L2_FBUF_FLAG_LOCAL_INV_ALPHA	0x0020
971607ca46eSDavid Howells #define V4L2_FBUF_FLAG_SRC_CHROMAKEY	0x0040
972607ca46eSDavid Howells 
973607ca46eSDavid Howells struct v4l2_clip {
974607ca46eSDavid Howells 	struct v4l2_rect        c;
975607ca46eSDavid Howells 	struct v4l2_clip	__user *next;
976607ca46eSDavid Howells };
977607ca46eSDavid Howells 
978607ca46eSDavid Howells struct v4l2_window {
979607ca46eSDavid Howells 	struct v4l2_rect        w;
980607ca46eSDavid Howells 	__u32			field;	 /* enum v4l2_field */
981607ca46eSDavid Howells 	__u32			chromakey;
982607ca46eSDavid Howells 	struct v4l2_clip	__user *clips;
983607ca46eSDavid Howells 	__u32			clipcount;
984607ca46eSDavid Howells 	void			__user *bitmap;
985607ca46eSDavid Howells 	__u8                    global_alpha;
986607ca46eSDavid Howells };
987607ca46eSDavid Howells 
988607ca46eSDavid Howells /*
989607ca46eSDavid Howells  *	C A P T U R E   P A R A M E T E R S
990607ca46eSDavid Howells  */
991607ca46eSDavid Howells struct v4l2_captureparm {
992607ca46eSDavid Howells 	__u32		   capability;	  /*  Supported modes */
993607ca46eSDavid Howells 	__u32		   capturemode;	  /*  Current mode */
9942e74598dSKirill Smelkov 	struct v4l2_fract  timeperframe;  /*  Time per frame in seconds */
995607ca46eSDavid Howells 	__u32		   extendedmode;  /*  Driver-specific extensions */
996607ca46eSDavid Howells 	__u32              readbuffers;   /*  # of buffers for read */
997607ca46eSDavid Howells 	__u32		   reserved[4];
998607ca46eSDavid Howells };
999607ca46eSDavid Howells 
1000607ca46eSDavid Howells /*  Flags for 'capability' and 'capturemode' fields */
1001607ca46eSDavid Howells #define V4L2_MODE_HIGHQUALITY	0x0001	/*  High quality imaging mode */
1002607ca46eSDavid Howells #define V4L2_CAP_TIMEPERFRAME	0x1000	/*  timeperframe field is supported */
1003607ca46eSDavid Howells 
1004607ca46eSDavid Howells struct v4l2_outputparm {
1005607ca46eSDavid Howells 	__u32		   capability;	 /*  Supported modes */
1006607ca46eSDavid Howells 	__u32		   outputmode;	 /*  Current mode */
1007607ca46eSDavid Howells 	struct v4l2_fract  timeperframe; /*  Time per frame in seconds */
1008607ca46eSDavid Howells 	__u32		   extendedmode; /*  Driver-specific extensions */
1009607ca46eSDavid Howells 	__u32              writebuffers; /*  # of buffers for write */
1010607ca46eSDavid Howells 	__u32		   reserved[4];
1011607ca46eSDavid Howells };
1012607ca46eSDavid Howells 
1013607ca46eSDavid Howells /*
1014607ca46eSDavid Howells  *	I N P U T   I M A G E   C R O P P I N G
1015607ca46eSDavid Howells  */
1016607ca46eSDavid Howells struct v4l2_cropcap {
1017607ca46eSDavid Howells 	__u32			type;	/* enum v4l2_buf_type */
1018607ca46eSDavid Howells 	struct v4l2_rect        bounds;
1019607ca46eSDavid Howells 	struct v4l2_rect        defrect;
1020607ca46eSDavid Howells 	struct v4l2_fract       pixelaspect;
1021607ca46eSDavid Howells };
1022607ca46eSDavid Howells 
1023607ca46eSDavid Howells struct v4l2_crop {
1024607ca46eSDavid Howells 	__u32			type;	/* enum v4l2_buf_type */
1025607ca46eSDavid Howells 	struct v4l2_rect        c;
1026607ca46eSDavid Howells };
1027607ca46eSDavid Howells 
1028607ca46eSDavid Howells /**
1029607ca46eSDavid Howells  * struct v4l2_selection - selection info
1030607ca46eSDavid Howells  * @type:	buffer type (do not use *_MPLANE types)
1031607ca46eSDavid Howells  * @target:	Selection target, used to choose one of possible rectangles;
1032607ca46eSDavid Howells  *		defined in v4l2-common.h; V4L2_SEL_TGT_* .
1033607ca46eSDavid Howells  * @flags:	constraints flags, defined in v4l2-common.h; V4L2_SEL_FLAG_*.
1034607ca46eSDavid Howells  * @r:		coordinates of selection window
1035607ca46eSDavid Howells  * @reserved:	for future use, rounds structure size to 64 bytes, set to zero
1036607ca46eSDavid Howells  *
1037607ca46eSDavid Howells  * Hardware may use multiple helper windows to process a video stream.
1038607ca46eSDavid Howells  * The structure is used to exchange this selection areas between
1039607ca46eSDavid Howells  * an application and a driver.
1040607ca46eSDavid Howells  */
1041607ca46eSDavid Howells struct v4l2_selection {
1042607ca46eSDavid Howells 	__u32			type;
1043607ca46eSDavid Howells 	__u32			target;
1044607ca46eSDavid Howells 	__u32                   flags;
1045607ca46eSDavid Howells 	struct v4l2_rect        r;
1046607ca46eSDavid Howells 	__u32                   reserved[9];
1047607ca46eSDavid Howells };
1048607ca46eSDavid Howells 
1049607ca46eSDavid Howells 
1050607ca46eSDavid Howells /*
1051607ca46eSDavid Howells  *      A N A L O G   V I D E O   S T A N D A R D
1052607ca46eSDavid Howells  */
1053607ca46eSDavid Howells 
1054607ca46eSDavid Howells typedef __u64 v4l2_std_id;
1055607ca46eSDavid Howells 
1056607ca46eSDavid Howells /* one bit for each */
1057607ca46eSDavid Howells #define V4L2_STD_PAL_B          ((v4l2_std_id)0x00000001)
1058607ca46eSDavid Howells #define V4L2_STD_PAL_B1         ((v4l2_std_id)0x00000002)
1059607ca46eSDavid Howells #define V4L2_STD_PAL_G          ((v4l2_std_id)0x00000004)
1060607ca46eSDavid Howells #define V4L2_STD_PAL_H          ((v4l2_std_id)0x00000008)
1061607ca46eSDavid Howells #define V4L2_STD_PAL_I          ((v4l2_std_id)0x00000010)
1062607ca46eSDavid Howells #define V4L2_STD_PAL_D          ((v4l2_std_id)0x00000020)
1063607ca46eSDavid Howells #define V4L2_STD_PAL_D1         ((v4l2_std_id)0x00000040)
1064607ca46eSDavid Howells #define V4L2_STD_PAL_K          ((v4l2_std_id)0x00000080)
1065607ca46eSDavid Howells 
1066607ca46eSDavid Howells #define V4L2_STD_PAL_M          ((v4l2_std_id)0x00000100)
1067607ca46eSDavid Howells #define V4L2_STD_PAL_N          ((v4l2_std_id)0x00000200)
1068607ca46eSDavid Howells #define V4L2_STD_PAL_Nc         ((v4l2_std_id)0x00000400)
1069607ca46eSDavid Howells #define V4L2_STD_PAL_60         ((v4l2_std_id)0x00000800)
1070607ca46eSDavid Howells 
1071607ca46eSDavid Howells #define V4L2_STD_NTSC_M         ((v4l2_std_id)0x00001000)	/* BTSC */
1072607ca46eSDavid Howells #define V4L2_STD_NTSC_M_JP      ((v4l2_std_id)0x00002000)	/* EIA-J */
1073607ca46eSDavid Howells #define V4L2_STD_NTSC_443       ((v4l2_std_id)0x00004000)
1074607ca46eSDavid Howells #define V4L2_STD_NTSC_M_KR      ((v4l2_std_id)0x00008000)	/* FM A2 */
1075607ca46eSDavid Howells 
1076607ca46eSDavid Howells #define V4L2_STD_SECAM_B        ((v4l2_std_id)0x00010000)
1077607ca46eSDavid Howells #define V4L2_STD_SECAM_D        ((v4l2_std_id)0x00020000)
1078607ca46eSDavid Howells #define V4L2_STD_SECAM_G        ((v4l2_std_id)0x00040000)
1079607ca46eSDavid Howells #define V4L2_STD_SECAM_H        ((v4l2_std_id)0x00080000)
1080607ca46eSDavid Howells #define V4L2_STD_SECAM_K        ((v4l2_std_id)0x00100000)
1081607ca46eSDavid Howells #define V4L2_STD_SECAM_K1       ((v4l2_std_id)0x00200000)
1082607ca46eSDavid Howells #define V4L2_STD_SECAM_L        ((v4l2_std_id)0x00400000)
1083607ca46eSDavid Howells #define V4L2_STD_SECAM_LC       ((v4l2_std_id)0x00800000)
1084607ca46eSDavid Howells 
1085607ca46eSDavid Howells /* ATSC/HDTV */
1086607ca46eSDavid Howells #define V4L2_STD_ATSC_8_VSB     ((v4l2_std_id)0x01000000)
1087607ca46eSDavid Howells #define V4L2_STD_ATSC_16_VSB    ((v4l2_std_id)0x02000000)
1088607ca46eSDavid Howells 
1089607ca46eSDavid Howells /* FIXME:
1090607ca46eSDavid Howells    Although std_id is 64 bits, there is an issue on PPC32 architecture that
1091607ca46eSDavid Howells    makes switch(__u64) to break. So, there's a hack on v4l2-common.c rounding
1092607ca46eSDavid Howells    this value to 32 bits.
1093607ca46eSDavid Howells    As, currently, the max value is for V4L2_STD_ATSC_16_VSB (30 bits wide),
1094607ca46eSDavid Howells    it should work fine. However, if needed to add more than two standards,
1095607ca46eSDavid Howells    v4l2-common.c should be fixed.
1096607ca46eSDavid Howells  */
1097607ca46eSDavid Howells 
1098607ca46eSDavid Howells /*
1099607ca46eSDavid Howells  * Some macros to merge video standards in order to make live easier for the
1100607ca46eSDavid Howells  * drivers and V4L2 applications
1101607ca46eSDavid Howells  */
1102607ca46eSDavid Howells 
1103607ca46eSDavid Howells /*
1104607ca46eSDavid Howells  * "Common" NTSC/M - It should be noticed that V4L2_STD_NTSC_443 is
1105607ca46eSDavid Howells  * Missing here.
1106607ca46eSDavid Howells  */
1107607ca46eSDavid Howells #define V4L2_STD_NTSC           (V4L2_STD_NTSC_M	|\
1108607ca46eSDavid Howells 				 V4L2_STD_NTSC_M_JP     |\
1109607ca46eSDavid Howells 				 V4L2_STD_NTSC_M_KR)
1110607ca46eSDavid Howells /* Secam macros */
1111607ca46eSDavid Howells #define V4L2_STD_SECAM_DK      	(V4L2_STD_SECAM_D	|\
1112607ca46eSDavid Howells 				 V4L2_STD_SECAM_K	|\
1113607ca46eSDavid Howells 				 V4L2_STD_SECAM_K1)
1114607ca46eSDavid Howells /* All Secam Standards */
1115607ca46eSDavid Howells #define V4L2_STD_SECAM		(V4L2_STD_SECAM_B	|\
1116607ca46eSDavid Howells 				 V4L2_STD_SECAM_G	|\
1117607ca46eSDavid Howells 				 V4L2_STD_SECAM_H	|\
1118607ca46eSDavid Howells 				 V4L2_STD_SECAM_DK	|\
1119607ca46eSDavid Howells 				 V4L2_STD_SECAM_L       |\
1120607ca46eSDavid Howells 				 V4L2_STD_SECAM_LC)
1121607ca46eSDavid Howells /* PAL macros */
1122607ca46eSDavid Howells #define V4L2_STD_PAL_BG		(V4L2_STD_PAL_B		|\
1123607ca46eSDavid Howells 				 V4L2_STD_PAL_B1	|\
1124607ca46eSDavid Howells 				 V4L2_STD_PAL_G)
1125607ca46eSDavid Howells #define V4L2_STD_PAL_DK		(V4L2_STD_PAL_D		|\
1126607ca46eSDavid Howells 				 V4L2_STD_PAL_D1	|\
1127607ca46eSDavid Howells 				 V4L2_STD_PAL_K)
1128607ca46eSDavid Howells /*
1129607ca46eSDavid Howells  * "Common" PAL - This macro is there to be compatible with the old
1130607ca46eSDavid Howells  * V4L1 concept of "PAL": /BGDKHI.
1131ff29feb9SLad, Prabhakar  * Several PAL standards are missing here: /M, /N and /Nc
1132607ca46eSDavid Howells  */
1133607ca46eSDavid Howells #define V4L2_STD_PAL		(V4L2_STD_PAL_BG	|\
1134607ca46eSDavid Howells 				 V4L2_STD_PAL_DK	|\
1135607ca46eSDavid Howells 				 V4L2_STD_PAL_H		|\
1136607ca46eSDavid Howells 				 V4L2_STD_PAL_I)
1137607ca46eSDavid Howells /* Chroma "agnostic" standards */
1138607ca46eSDavid Howells #define V4L2_STD_B		(V4L2_STD_PAL_B		|\
1139607ca46eSDavid Howells 				 V4L2_STD_PAL_B1	|\
1140607ca46eSDavid Howells 				 V4L2_STD_SECAM_B)
1141607ca46eSDavid Howells #define V4L2_STD_G		(V4L2_STD_PAL_G		|\
1142607ca46eSDavid Howells 				 V4L2_STD_SECAM_G)
1143607ca46eSDavid Howells #define V4L2_STD_H		(V4L2_STD_PAL_H		|\
1144607ca46eSDavid Howells 				 V4L2_STD_SECAM_H)
1145607ca46eSDavid Howells #define V4L2_STD_L		(V4L2_STD_SECAM_L	|\
1146607ca46eSDavid Howells 				 V4L2_STD_SECAM_LC)
1147607ca46eSDavid Howells #define V4L2_STD_GH		(V4L2_STD_G		|\
1148607ca46eSDavid Howells 				 V4L2_STD_H)
1149607ca46eSDavid Howells #define V4L2_STD_DK		(V4L2_STD_PAL_DK	|\
1150607ca46eSDavid Howells 				 V4L2_STD_SECAM_DK)
1151607ca46eSDavid Howells #define V4L2_STD_BG		(V4L2_STD_B		|\
1152607ca46eSDavid Howells 				 V4L2_STD_G)
1153607ca46eSDavid Howells #define V4L2_STD_MN		(V4L2_STD_PAL_M		|\
1154607ca46eSDavid Howells 				 V4L2_STD_PAL_N		|\
1155607ca46eSDavid Howells 				 V4L2_STD_PAL_Nc	|\
1156607ca46eSDavid Howells 				 V4L2_STD_NTSC)
1157607ca46eSDavid Howells 
1158607ca46eSDavid Howells /* Standards where MTS/BTSC stereo could be found */
1159607ca46eSDavid Howells #define V4L2_STD_MTS		(V4L2_STD_NTSC_M	|\
1160607ca46eSDavid Howells 				 V4L2_STD_PAL_M		|\
1161607ca46eSDavid Howells 				 V4L2_STD_PAL_N		|\
1162607ca46eSDavid Howells 				 V4L2_STD_PAL_Nc)
1163607ca46eSDavid Howells 
1164607ca46eSDavid Howells /* Standards for Countries with 60Hz Line frequency */
1165607ca46eSDavid Howells #define V4L2_STD_525_60		(V4L2_STD_PAL_M		|\
1166607ca46eSDavid Howells 				 V4L2_STD_PAL_60	|\
1167607ca46eSDavid Howells 				 V4L2_STD_NTSC		|\
1168607ca46eSDavid Howells 				 V4L2_STD_NTSC_443)
1169607ca46eSDavid Howells /* Standards for Countries with 50Hz Line frequency */
1170607ca46eSDavid Howells #define V4L2_STD_625_50		(V4L2_STD_PAL		|\
1171607ca46eSDavid Howells 				 V4L2_STD_PAL_N		|\
1172607ca46eSDavid Howells 				 V4L2_STD_PAL_Nc	|\
1173607ca46eSDavid Howells 				 V4L2_STD_SECAM)
1174607ca46eSDavid Howells 
1175607ca46eSDavid Howells #define V4L2_STD_ATSC           (V4L2_STD_ATSC_8_VSB    |\
1176607ca46eSDavid Howells 				 V4L2_STD_ATSC_16_VSB)
1177607ca46eSDavid Howells /* Macros with none and all analog standards */
1178607ca46eSDavid Howells #define V4L2_STD_UNKNOWN        0
1179607ca46eSDavid Howells #define V4L2_STD_ALL            (V4L2_STD_525_60	|\
1180607ca46eSDavid Howells 				 V4L2_STD_625_50)
1181607ca46eSDavid Howells 
1182607ca46eSDavid Howells struct v4l2_standard {
1183607ca46eSDavid Howells 	__u32		     index;
1184607ca46eSDavid Howells 	v4l2_std_id          id;
1185607ca46eSDavid Howells 	__u8		     name[24];
1186607ca46eSDavid Howells 	struct v4l2_fract    frameperiod; /* Frames, not fields */
1187607ca46eSDavid Howells 	__u32		     framelines;
1188607ca46eSDavid Howells 	__u32		     reserved[4];
1189607ca46eSDavid Howells };
1190607ca46eSDavid Howells 
1191607ca46eSDavid Howells /*
1192607ca46eSDavid Howells  *	D V 	B T	T I M I N G S
1193607ca46eSDavid Howells  */
1194607ca46eSDavid Howells 
1195607ca46eSDavid Howells /** struct v4l2_bt_timings - BT.656/BT.1120 timing data
1196607ca46eSDavid Howells  * @width:	total width of the active video in pixels
1197607ca46eSDavid Howells  * @height:	total height of the active video in lines
1198607ca46eSDavid Howells  * @interlaced:	Interlaced or progressive
1199607ca46eSDavid Howells  * @polarities:	Positive or negative polarities
1200607ca46eSDavid Howells  * @pixelclock:	Pixel clock in HZ. Ex. 74.25MHz->74250000
1201607ca46eSDavid Howells  * @hfrontporch:Horizontal front porch in pixels
1202607ca46eSDavid Howells  * @hsync:	Horizontal Sync length in pixels
1203607ca46eSDavid Howells  * @hbackporch:	Horizontal back porch in pixels
1204607ca46eSDavid Howells  * @vfrontporch:Vertical front porch in lines
1205607ca46eSDavid Howells  * @vsync:	Vertical Sync length in lines
1206607ca46eSDavid Howells  * @vbackporch:	Vertical back porch in lines
1207607ca46eSDavid Howells  * @il_vfrontporch:Vertical front porch for the even field
1208607ca46eSDavid Howells  *		(aka field 2) of interlaced field formats
1209607ca46eSDavid Howells  * @il_vsync:	Vertical Sync length for the even field
1210607ca46eSDavid Howells  *		(aka field 2) of interlaced field formats
1211607ca46eSDavid Howells  * @il_vbackporch:Vertical back porch for the even field
1212607ca46eSDavid Howells  *		(aka field 2) of interlaced field formats
1213607ca46eSDavid Howells  * @standards:	Standards the timing belongs to
1214607ca46eSDavid Howells  * @flags:	Flags
1215607ca46eSDavid Howells  * @reserved:	Reserved fields, must be zeroed.
1216607ca46eSDavid Howells  *
1217607ca46eSDavid Howells  * A note regarding vertical interlaced timings: height refers to the total
1218607ca46eSDavid Howells  * height of the active video frame (= two fields). The blanking timings refer
1219607ca46eSDavid Howells  * to the blanking of each field. So the height of the total frame is
1220607ca46eSDavid Howells  * calculated as follows:
1221607ca46eSDavid Howells  *
1222607ca46eSDavid Howells  * tot_height = height + vfrontporch + vsync + vbackporch +
1223607ca46eSDavid Howells  *                       il_vfrontporch + il_vsync + il_vbackporch
1224607ca46eSDavid Howells  *
1225607ca46eSDavid Howells  * The active height of each field is height / 2.
1226607ca46eSDavid Howells  */
1227607ca46eSDavid Howells struct v4l2_bt_timings {
1228607ca46eSDavid Howells 	__u32	width;
1229607ca46eSDavid Howells 	__u32	height;
1230607ca46eSDavid Howells 	__u32	interlaced;
1231607ca46eSDavid Howells 	__u32	polarities;
1232607ca46eSDavid Howells 	__u64	pixelclock;
1233607ca46eSDavid Howells 	__u32	hfrontporch;
1234607ca46eSDavid Howells 	__u32	hsync;
1235607ca46eSDavid Howells 	__u32	hbackporch;
1236607ca46eSDavid Howells 	__u32	vfrontporch;
1237607ca46eSDavid Howells 	__u32	vsync;
1238607ca46eSDavid Howells 	__u32	vbackporch;
1239607ca46eSDavid Howells 	__u32	il_vfrontporch;
1240607ca46eSDavid Howells 	__u32	il_vsync;
1241607ca46eSDavid Howells 	__u32	il_vbackporch;
1242607ca46eSDavid Howells 	__u32	standards;
1243607ca46eSDavid Howells 	__u32	flags;
1244607ca46eSDavid Howells 	__u32	reserved[14];
1245607ca46eSDavid Howells } __attribute__ ((packed));
1246607ca46eSDavid Howells 
1247607ca46eSDavid Howells /* Interlaced or progressive format */
1248607ca46eSDavid Howells #define	V4L2_DV_PROGRESSIVE	0
1249607ca46eSDavid Howells #define	V4L2_DV_INTERLACED	1
1250607ca46eSDavid Howells 
1251607ca46eSDavid Howells /* Polarities. If bit is not set, it is assumed to be negative polarity */
1252607ca46eSDavid Howells #define V4L2_DV_VSYNC_POS_POL	0x00000001
1253607ca46eSDavid Howells #define V4L2_DV_HSYNC_POS_POL	0x00000002
1254607ca46eSDavid Howells 
1255607ca46eSDavid Howells /* Timings standards */
1256607ca46eSDavid Howells #define V4L2_DV_BT_STD_CEA861	(1 << 0)  /* CEA-861 Digital TV Profile */
1257607ca46eSDavid Howells #define V4L2_DV_BT_STD_DMT	(1 << 1)  /* VESA Discrete Monitor Timings */
1258607ca46eSDavid Howells #define V4L2_DV_BT_STD_CVT	(1 << 2)  /* VESA Coordinated Video Timings */
1259607ca46eSDavid Howells #define V4L2_DV_BT_STD_GTF	(1 << 3)  /* VESA Generalized Timings Formula */
1260607ca46eSDavid Howells 
1261607ca46eSDavid Howells /* Flags */
1262607ca46eSDavid Howells 
1263607ca46eSDavid Howells /* CVT/GTF specific: timing uses reduced blanking (CVT) or the 'Secondary
1264607ca46eSDavid Howells    GTF' curve (GTF). In both cases the horizontal and/or vertical blanking
1265607ca46eSDavid Howells    intervals are reduced, allowing a higher resolution over the same
1266607ca46eSDavid Howells    bandwidth. This is a read-only flag. */
1267607ca46eSDavid Howells #define V4L2_DV_FL_REDUCED_BLANKING		(1 << 0)
1268607ca46eSDavid Howells /* CEA-861 specific: set for CEA-861 formats with a framerate of a multiple
1269607ca46eSDavid Howells    of six. These formats can be optionally played at 1 / 1.001 speed.
1270607ca46eSDavid Howells    This is a read-only flag. */
1271607ca46eSDavid Howells #define V4L2_DV_FL_CAN_REDUCE_FPS		(1 << 1)
1272607ca46eSDavid Howells /* CEA-861 specific: only valid for video transmitters, the flag is cleared
1273607ca46eSDavid Howells    by receivers.
1274607ca46eSDavid Howells    If the framerate of the format is a multiple of six, then the pixelclock
1275607ca46eSDavid Howells    used to set up the transmitter is divided by 1.001 to make it compatible
1276607ca46eSDavid Howells    with 60 Hz based standards such as NTSC and PAL-M that use a framerate of
1277607ca46eSDavid Howells    29.97 Hz. Otherwise this flag is cleared. If the transmitter can't generate
1278607ca46eSDavid Howells    such frequencies, then the flag will also be cleared. */
1279607ca46eSDavid Howells #define V4L2_DV_FL_REDUCED_FPS			(1 << 2)
1280607ca46eSDavid Howells /* Specific to interlaced formats: if set, then field 1 is really one half-line
1281607ca46eSDavid Howells    longer and field 2 is really one half-line shorter, so each field has
1282607ca46eSDavid Howells    exactly the same number of half-lines. Whether half-lines can be detected
1283607ca46eSDavid Howells    or used depends on the hardware. */
1284292a8787SHans Verkuil #define V4L2_DV_FL_HALF_LINE			(1 << 3)
12855ce65d1fSHans Verkuil /* If set, then this is a Consumer Electronics (CE) video format. Such formats
12865ce65d1fSHans Verkuil  * differ from other formats (commonly called IT formats) in that if RGB
12875ce65d1fSHans Verkuil  * encoding is used then by default the RGB values use limited range (i.e.
12885ce65d1fSHans Verkuil  * use the range 16-235) as opposed to 0-255. All formats defined in CEA-861
12895ce65d1fSHans Verkuil  * except for the 640x480 format are CE formats. */
12905ce65d1fSHans Verkuil #define V4L2_DV_FL_IS_CE_VIDEO			(1 << 4)
1291607ca46eSDavid Howells 
12927f68127fSHans Verkuil /* A few useful defines to calculate the total blanking and frame sizes */
12937f68127fSHans Verkuil #define V4L2_DV_BT_BLANKING_WIDTH(bt) \
1294aee786acSHans Verkuil 	((bt)->hfrontporch + (bt)->hsync + (bt)->hbackporch)
12957f68127fSHans Verkuil #define V4L2_DV_BT_FRAME_WIDTH(bt) \
1296aee786acSHans Verkuil 	((bt)->width + V4L2_DV_BT_BLANKING_WIDTH(bt))
12977f68127fSHans Verkuil #define V4L2_DV_BT_BLANKING_HEIGHT(bt) \
1298aee786acSHans Verkuil 	((bt)->vfrontporch + (bt)->vsync + (bt)->vbackporch + \
1299aee786acSHans Verkuil 	 (bt)->il_vfrontporch + (bt)->il_vsync + (bt)->il_vbackporch)
13007f68127fSHans Verkuil #define V4L2_DV_BT_FRAME_HEIGHT(bt) \
1301aee786acSHans Verkuil 	((bt)->height + V4L2_DV_BT_BLANKING_HEIGHT(bt))
1302607ca46eSDavid Howells 
1303607ca46eSDavid Howells /** struct v4l2_dv_timings - DV timings
1304607ca46eSDavid Howells  * @type:	the type of the timings
1305607ca46eSDavid Howells  * @bt:	BT656/1120 timings
1306607ca46eSDavid Howells  */
1307607ca46eSDavid Howells struct v4l2_dv_timings {
1308607ca46eSDavid Howells 	__u32 type;
1309607ca46eSDavid Howells 	union {
1310607ca46eSDavid Howells 		struct v4l2_bt_timings	bt;
1311607ca46eSDavid Howells 		__u32	reserved[32];
1312607ca46eSDavid Howells 	};
1313607ca46eSDavid Howells } __attribute__ ((packed));
1314607ca46eSDavid Howells 
1315607ca46eSDavid Howells /* Values for the type field */
1316607ca46eSDavid Howells #define V4L2_DV_BT_656_1120	0	/* BT.656/1120 timing type */
1317607ca46eSDavid Howells 
1318607ca46eSDavid Howells 
1319607ca46eSDavid Howells /** struct v4l2_enum_dv_timings - DV timings enumeration
1320607ca46eSDavid Howells  * @index:	enumeration index
13210349f6a5SLaurent Pinchart  * @pad:	the pad number for which to enumerate timings (used with
13220349f6a5SLaurent Pinchart  *		v4l-subdev nodes only)
1323607ca46eSDavid Howells  * @reserved:	must be zeroed
1324607ca46eSDavid Howells  * @timings:	the timings for the given index
1325607ca46eSDavid Howells  */
1326607ca46eSDavid Howells struct v4l2_enum_dv_timings {
1327607ca46eSDavid Howells 	__u32 index;
13280349f6a5SLaurent Pinchart 	__u32 pad;
13290349f6a5SLaurent Pinchart 	__u32 reserved[2];
1330607ca46eSDavid Howells 	struct v4l2_dv_timings timings;
1331607ca46eSDavid Howells };
1332607ca46eSDavid Howells 
1333607ca46eSDavid Howells /** struct v4l2_bt_timings_cap - BT.656/BT.1120 timing capabilities
1334607ca46eSDavid Howells  * @min_width:		width in pixels
1335607ca46eSDavid Howells  * @max_width:		width in pixels
1336607ca46eSDavid Howells  * @min_height:		height in lines
1337607ca46eSDavid Howells  * @max_height:		height in lines
1338607ca46eSDavid Howells  * @min_pixelclock:	Pixel clock in HZ. Ex. 74.25MHz->74250000
1339607ca46eSDavid Howells  * @max_pixelclock:	Pixel clock in HZ. Ex. 74.25MHz->74250000
1340607ca46eSDavid Howells  * @standards:		Supported standards
1341607ca46eSDavid Howells  * @capabilities:	Supported capabilities
1342607ca46eSDavid Howells  * @reserved:		Must be zeroed
1343607ca46eSDavid Howells  */
1344607ca46eSDavid Howells struct v4l2_bt_timings_cap {
1345607ca46eSDavid Howells 	__u32	min_width;
1346607ca46eSDavid Howells 	__u32	max_width;
1347607ca46eSDavid Howells 	__u32	min_height;
1348607ca46eSDavid Howells 	__u32	max_height;
1349607ca46eSDavid Howells 	__u64	min_pixelclock;
1350607ca46eSDavid Howells 	__u64	max_pixelclock;
1351607ca46eSDavid Howells 	__u32	standards;
1352607ca46eSDavid Howells 	__u32	capabilities;
1353607ca46eSDavid Howells 	__u32	reserved[16];
1354607ca46eSDavid Howells } __attribute__ ((packed));
1355607ca46eSDavid Howells 
1356607ca46eSDavid Howells /* Supports interlaced formats */
1357607ca46eSDavid Howells #define V4L2_DV_BT_CAP_INTERLACED	(1 << 0)
1358607ca46eSDavid Howells /* Supports progressive formats */
1359607ca46eSDavid Howells #define V4L2_DV_BT_CAP_PROGRESSIVE	(1 << 1)
1360607ca46eSDavid Howells /* Supports CVT/GTF reduced blanking */
1361607ca46eSDavid Howells #define V4L2_DV_BT_CAP_REDUCED_BLANKING	(1 << 2)
1362607ca46eSDavid Howells /* Supports custom formats */
1363607ca46eSDavid Howells #define V4L2_DV_BT_CAP_CUSTOM		(1 << 3)
1364607ca46eSDavid Howells 
1365607ca46eSDavid Howells /** struct v4l2_dv_timings_cap - DV timings capabilities
1366607ca46eSDavid Howells  * @type:	the type of the timings (same as in struct v4l2_dv_timings)
13670349f6a5SLaurent Pinchart  * @pad:	the pad number for which to query capabilities (used with
13680349f6a5SLaurent Pinchart  *		v4l-subdev nodes only)
1369607ca46eSDavid Howells  * @bt:		the BT656/1120 timings capabilities
1370607ca46eSDavid Howells  */
1371607ca46eSDavid Howells struct v4l2_dv_timings_cap {
1372607ca46eSDavid Howells 	__u32 type;
13730349f6a5SLaurent Pinchart 	__u32 pad;
13740349f6a5SLaurent Pinchart 	__u32 reserved[2];
1375607ca46eSDavid Howells 	union {
1376607ca46eSDavid Howells 		struct v4l2_bt_timings_cap bt;
1377607ca46eSDavid Howells 		__u32 raw_data[32];
1378607ca46eSDavid Howells 	};
1379607ca46eSDavid Howells };
1380607ca46eSDavid Howells 
1381607ca46eSDavid Howells 
1382607ca46eSDavid Howells /*
1383607ca46eSDavid Howells  *	V I D E O   I N P U T S
1384607ca46eSDavid Howells  */
1385607ca46eSDavid Howells struct v4l2_input {
1386607ca46eSDavid Howells 	__u32	     index;		/*  Which input */
1387607ca46eSDavid Howells 	__u8	     name[32];		/*  Label */
1388607ca46eSDavid Howells 	__u32	     type;		/*  Type of input */
1389607ca46eSDavid Howells 	__u32	     audioset;		/*  Associated audios (bitfield) */
1390607ca46eSDavid Howells 	__u32        tuner;             /*  enum v4l2_tuner_type */
1391607ca46eSDavid Howells 	v4l2_std_id  std;
1392607ca46eSDavid Howells 	__u32	     status;
1393607ca46eSDavid Howells 	__u32	     capabilities;
1394607ca46eSDavid Howells 	__u32	     reserved[3];
1395607ca46eSDavid Howells };
1396607ca46eSDavid Howells 
1397607ca46eSDavid Howells /*  Values for the 'type' field */
1398607ca46eSDavid Howells #define V4L2_INPUT_TYPE_TUNER		1
1399607ca46eSDavid Howells #define V4L2_INPUT_TYPE_CAMERA		2
1400607ca46eSDavid Howells 
1401607ca46eSDavid Howells /* field 'status' - general */
1402607ca46eSDavid Howells #define V4L2_IN_ST_NO_POWER    0x00000001  /* Attached device is off */
1403607ca46eSDavid Howells #define V4L2_IN_ST_NO_SIGNAL   0x00000002
1404607ca46eSDavid Howells #define V4L2_IN_ST_NO_COLOR    0x00000004
1405607ca46eSDavid Howells 
1406607ca46eSDavid Howells /* field 'status' - sensor orientation */
1407607ca46eSDavid Howells /* If sensor is mounted upside down set both bits */
1408607ca46eSDavid Howells #define V4L2_IN_ST_HFLIP       0x00000010 /* Frames are flipped horizontally */
1409607ca46eSDavid Howells #define V4L2_IN_ST_VFLIP       0x00000020 /* Frames are flipped vertically */
1410607ca46eSDavid Howells 
1411607ca46eSDavid Howells /* field 'status' - analog */
1412607ca46eSDavid Howells #define V4L2_IN_ST_NO_H_LOCK   0x00000100  /* No horizontal sync lock */
1413607ca46eSDavid Howells #define V4L2_IN_ST_COLOR_KILL  0x00000200  /* Color killer is active */
1414607ca46eSDavid Howells 
1415607ca46eSDavid Howells /* field 'status' - digital */
1416607ca46eSDavid Howells #define V4L2_IN_ST_NO_SYNC     0x00010000  /* No synchronization lock */
1417607ca46eSDavid Howells #define V4L2_IN_ST_NO_EQU      0x00020000  /* No equalizer lock */
1418607ca46eSDavid Howells #define V4L2_IN_ST_NO_CARRIER  0x00040000  /* Carrier recovery failed */
1419607ca46eSDavid Howells 
1420607ca46eSDavid Howells /* field 'status' - VCR and set-top box */
1421607ca46eSDavid Howells #define V4L2_IN_ST_MACROVISION 0x01000000  /* Macrovision detected */
1422607ca46eSDavid Howells #define V4L2_IN_ST_NO_ACCESS   0x02000000  /* Conditional access denied */
1423607ca46eSDavid Howells #define V4L2_IN_ST_VTR         0x04000000  /* VTR time constant */
1424607ca46eSDavid Howells 
1425607ca46eSDavid Howells /* capabilities flags */
1426607ca46eSDavid Howells #define V4L2_IN_CAP_DV_TIMINGS		0x00000002 /* Supports S_DV_TIMINGS */
1427607ca46eSDavid Howells #define V4L2_IN_CAP_CUSTOM_TIMINGS	V4L2_IN_CAP_DV_TIMINGS /* For compatibility */
1428607ca46eSDavid Howells #define V4L2_IN_CAP_STD			0x00000004 /* Supports S_STD */
14298af03459SSakari Ailus #define V4L2_IN_CAP_NATIVE_SIZE		0x00000008 /* Supports setting native size */
1430607ca46eSDavid Howells 
1431607ca46eSDavid Howells /*
1432607ca46eSDavid Howells  *	V I D E O   O U T P U T S
1433607ca46eSDavid Howells  */
1434607ca46eSDavid Howells struct v4l2_output {
1435607ca46eSDavid Howells 	__u32	     index;		/*  Which output */
1436607ca46eSDavid Howells 	__u8	     name[32];		/*  Label */
1437607ca46eSDavid Howells 	__u32	     type;		/*  Type of output */
1438607ca46eSDavid Howells 	__u32	     audioset;		/*  Associated audios (bitfield) */
1439607ca46eSDavid Howells 	__u32	     modulator;         /*  Associated modulator */
1440607ca46eSDavid Howells 	v4l2_std_id  std;
1441607ca46eSDavid Howells 	__u32	     capabilities;
1442607ca46eSDavid Howells 	__u32	     reserved[3];
1443607ca46eSDavid Howells };
1444607ca46eSDavid Howells /*  Values for the 'type' field */
1445607ca46eSDavid Howells #define V4L2_OUTPUT_TYPE_MODULATOR		1
1446607ca46eSDavid Howells #define V4L2_OUTPUT_TYPE_ANALOG			2
1447607ca46eSDavid Howells #define V4L2_OUTPUT_TYPE_ANALOGVGAOVERLAY	3
1448607ca46eSDavid Howells 
1449607ca46eSDavid Howells /* capabilities flags */
1450607ca46eSDavid Howells #define V4L2_OUT_CAP_DV_TIMINGS		0x00000002 /* Supports S_DV_TIMINGS */
1451607ca46eSDavid Howells #define V4L2_OUT_CAP_CUSTOM_TIMINGS	V4L2_OUT_CAP_DV_TIMINGS /* For compatibility */
1452607ca46eSDavid Howells #define V4L2_OUT_CAP_STD		0x00000004 /* Supports S_STD */
14538af03459SSakari Ailus #define V4L2_OUT_CAP_NATIVE_SIZE	0x00000008 /* Supports setting native size */
1454607ca46eSDavid Howells 
1455607ca46eSDavid Howells /*
1456607ca46eSDavid Howells  *	C O N T R O L S
1457607ca46eSDavid Howells  */
1458607ca46eSDavid Howells struct v4l2_control {
1459607ca46eSDavid Howells 	__u32		     id;
1460607ca46eSDavid Howells 	__s32		     value;
1461607ca46eSDavid Howells };
1462607ca46eSDavid Howells 
1463607ca46eSDavid Howells struct v4l2_ext_control {
1464607ca46eSDavid Howells 	__u32 id;
1465607ca46eSDavid Howells 	__u32 size;
1466607ca46eSDavid Howells 	__u32 reserved2[1];
1467607ca46eSDavid Howells 	union {
1468607ca46eSDavid Howells 		__s32 value;
1469607ca46eSDavid Howells 		__s64 value64;
1470eadf9e26SHans Verkuil 		char __user *string;
1471eadf9e26SHans Verkuil 		__u8 __user *p_u8;
1472eadf9e26SHans Verkuil 		__u16 __user *p_u16;
1473eadf9e26SHans Verkuil 		__u32 __user *p_u32;
1474eadf9e26SHans Verkuil 		void __user *ptr;
1475607ca46eSDavid Howells 	};
1476607ca46eSDavid Howells } __attribute__ ((packed));
1477607ca46eSDavid Howells 
1478607ca46eSDavid Howells struct v4l2_ext_controls {
1479*35ec2a2fSRicardo Ribalda 	union {
1480607ca46eSDavid Howells 		__u32 ctrl_class;
1481*35ec2a2fSRicardo Ribalda 		__u32 which;
1482*35ec2a2fSRicardo Ribalda 	};
1483607ca46eSDavid Howells 	__u32 count;
1484607ca46eSDavid Howells 	__u32 error_idx;
1485607ca46eSDavid Howells 	__u32 reserved[2];
1486607ca46eSDavid Howells 	struct v4l2_ext_control *controls;
1487607ca46eSDavid Howells };
1488607ca46eSDavid Howells 
1489607ca46eSDavid Howells #define V4L2_CTRL_ID_MASK      	  (0x0fffffff)
1490607ca46eSDavid Howells #define V4L2_CTRL_ID2CLASS(id)    ((id) & 0x0fff0000UL)
1491607ca46eSDavid Howells #define V4L2_CTRL_DRIVER_PRIV(id) (((id) & 0xffff) >= 0x1000)
14925082c241SHans Verkuil #define V4L2_CTRL_MAX_DIMS	  (4)
1493*35ec2a2fSRicardo Ribalda #define V4L2_CTRL_WHICH_CUR_VAL   0
1494*35ec2a2fSRicardo Ribalda #define V4L2_CTRL_WHICH_DEF_VAL   0x0f000000
1495607ca46eSDavid Howells 
1496607ca46eSDavid Howells enum v4l2_ctrl_type {
1497607ca46eSDavid Howells 	V4L2_CTRL_TYPE_INTEGER	     = 1,
1498607ca46eSDavid Howells 	V4L2_CTRL_TYPE_BOOLEAN	     = 2,
1499607ca46eSDavid Howells 	V4L2_CTRL_TYPE_MENU	     = 3,
1500607ca46eSDavid Howells 	V4L2_CTRL_TYPE_BUTTON	     = 4,
1501607ca46eSDavid Howells 	V4L2_CTRL_TYPE_INTEGER64     = 5,
1502607ca46eSDavid Howells 	V4L2_CTRL_TYPE_CTRL_CLASS    = 6,
1503607ca46eSDavid Howells 	V4L2_CTRL_TYPE_STRING        = 7,
1504607ca46eSDavid Howells 	V4L2_CTRL_TYPE_BITMASK       = 8,
1505607ca46eSDavid Howells 	V4L2_CTRL_TYPE_INTEGER_MENU  = 9,
15067e6a6821SHans Verkuil 
15077e6a6821SHans Verkuil 	/* Compound types are >= 0x0100 */
15087e6a6821SHans Verkuil 	V4L2_CTRL_COMPOUND_TYPES     = 0x0100,
1509dda4a4d5SHans Verkuil 	V4L2_CTRL_TYPE_U8	     = 0x0100,
1510dda4a4d5SHans Verkuil 	V4L2_CTRL_TYPE_U16	     = 0x0101,
1511811c5081SHans Verkuil 	V4L2_CTRL_TYPE_U32	     = 0x0102,
1512607ca46eSDavid Howells };
1513607ca46eSDavid Howells 
1514607ca46eSDavid Howells /*  Used in the VIDIOC_QUERYCTRL ioctl for querying controls */
1515607ca46eSDavid Howells struct v4l2_queryctrl {
1516607ca46eSDavid Howells 	__u32		     id;
1517607ca46eSDavid Howells 	__u32		     type;	/* enum v4l2_ctrl_type */
1518607ca46eSDavid Howells 	__u8		     name[32];	/* Whatever */
1519607ca46eSDavid Howells 	__s32		     minimum;	/* Note signedness */
1520607ca46eSDavid Howells 	__s32		     maximum;
1521607ca46eSDavid Howells 	__s32		     step;
1522607ca46eSDavid Howells 	__s32		     default_value;
1523607ca46eSDavid Howells 	__u32                flags;
1524607ca46eSDavid Howells 	__u32		     reserved[2];
1525607ca46eSDavid Howells };
1526607ca46eSDavid Howells 
15275082c241SHans Verkuil /*  Used in the VIDIOC_QUERY_EXT_CTRL ioctl for querying extended controls */
15285082c241SHans Verkuil struct v4l2_query_ext_ctrl {
15295082c241SHans Verkuil 	__u32		     id;
15305082c241SHans Verkuil 	__u32		     type;
15315082c241SHans Verkuil 	char		     name[32];
15325082c241SHans Verkuil 	__s64		     minimum;
15335082c241SHans Verkuil 	__s64		     maximum;
15345082c241SHans Verkuil 	__u64		     step;
15355082c241SHans Verkuil 	__s64		     default_value;
15365082c241SHans Verkuil 	__u32                flags;
15375082c241SHans Verkuil 	__u32                elem_size;
15385082c241SHans Verkuil 	__u32                elems;
15395082c241SHans Verkuil 	__u32                nr_of_dims;
15405082c241SHans Verkuil 	__u32                dims[V4L2_CTRL_MAX_DIMS];
15415082c241SHans Verkuil 	__u32		     reserved[32];
15425082c241SHans Verkuil };
15435082c241SHans Verkuil 
1544607ca46eSDavid Howells /*  Used in the VIDIOC_QUERYMENU ioctl for querying menu items */
1545607ca46eSDavid Howells struct v4l2_querymenu {
1546607ca46eSDavid Howells 	__u32		id;
1547607ca46eSDavid Howells 	__u32		index;
1548607ca46eSDavid Howells 	union {
1549607ca46eSDavid Howells 		__u8	name[32];	/* Whatever */
1550607ca46eSDavid Howells 		__s64	value;
1551607ca46eSDavid Howells 	};
1552607ca46eSDavid Howells 	__u32		reserved;
1553607ca46eSDavid Howells } __attribute__ ((packed));
1554607ca46eSDavid Howells 
1555607ca46eSDavid Howells /*  Control flags  */
1556607ca46eSDavid Howells #define V4L2_CTRL_FLAG_DISABLED		0x0001
1557607ca46eSDavid Howells #define V4L2_CTRL_FLAG_GRABBED		0x0002
1558607ca46eSDavid Howells #define V4L2_CTRL_FLAG_READ_ONLY 	0x0004
1559607ca46eSDavid Howells #define V4L2_CTRL_FLAG_UPDATE 		0x0008
1560607ca46eSDavid Howells #define V4L2_CTRL_FLAG_INACTIVE 	0x0010
1561607ca46eSDavid Howells #define V4L2_CTRL_FLAG_SLIDER 		0x0020
1562607ca46eSDavid Howells #define V4L2_CTRL_FLAG_WRITE_ONLY 	0x0040
1563607ca46eSDavid Howells #define V4L2_CTRL_FLAG_VOLATILE		0x0080
15647e6a6821SHans Verkuil #define V4L2_CTRL_FLAG_HAS_PAYLOAD	0x0100
1565b6e5b8f1SRicardo Ribalda #define V4L2_CTRL_FLAG_EXECUTE_ON_WRITE	0x0200
1566607ca46eSDavid Howells 
15677e6a6821SHans Verkuil /*  Query flags, to be ORed with the control ID */
1568607ca46eSDavid Howells #define V4L2_CTRL_FLAG_NEXT_CTRL	0x80000000
15697e6a6821SHans Verkuil #define V4L2_CTRL_FLAG_NEXT_COMPOUND	0x40000000
1570607ca46eSDavid Howells 
1571607ca46eSDavid Howells /*  User-class control IDs defined by V4L2 */
1572607ca46eSDavid Howells #define V4L2_CID_MAX_CTRLS		1024
1573607ca46eSDavid Howells /*  IDs reserved for driver specific controls */
1574607ca46eSDavid Howells #define V4L2_CID_PRIVATE_BASE		0x08000000
1575607ca46eSDavid Howells 
1576607ca46eSDavid Howells 
1577607ca46eSDavid Howells /*
1578607ca46eSDavid Howells  *	T U N I N G
1579607ca46eSDavid Howells  */
1580607ca46eSDavid Howells struct v4l2_tuner {
1581607ca46eSDavid Howells 	__u32                   index;
1582607ca46eSDavid Howells 	__u8			name[32];
1583607ca46eSDavid Howells 	__u32			type;	/* enum v4l2_tuner_type */
1584607ca46eSDavid Howells 	__u32			capability;
1585607ca46eSDavid Howells 	__u32			rangelow;
1586607ca46eSDavid Howells 	__u32			rangehigh;
1587607ca46eSDavid Howells 	__u32			rxsubchans;
1588607ca46eSDavid Howells 	__u32			audmode;
1589607ca46eSDavid Howells 	__s32			signal;
1590607ca46eSDavid Howells 	__s32			afc;
1591607ca46eSDavid Howells 	__u32			reserved[4];
1592607ca46eSDavid Howells };
1593607ca46eSDavid Howells 
1594607ca46eSDavid Howells struct v4l2_modulator {
1595607ca46eSDavid Howells 	__u32			index;
1596607ca46eSDavid Howells 	__u8			name[32];
1597607ca46eSDavid Howells 	__u32			capability;
1598607ca46eSDavid Howells 	__u32			rangelow;
1599607ca46eSDavid Howells 	__u32			rangehigh;
1600607ca46eSDavid Howells 	__u32			txsubchans;
16014124a3c4SAntti Palosaari 	__u32			type;	/* enum v4l2_tuner_type */
16024124a3c4SAntti Palosaari 	__u32			reserved[3];
1603607ca46eSDavid Howells };
1604607ca46eSDavid Howells 
1605607ca46eSDavid Howells /*  Flags for the 'capability' field */
1606607ca46eSDavid Howells #define V4L2_TUNER_CAP_LOW		0x0001
1607607ca46eSDavid Howells #define V4L2_TUNER_CAP_NORM		0x0002
1608607ca46eSDavid Howells #define V4L2_TUNER_CAP_HWSEEK_BOUNDED	0x0004
1609607ca46eSDavid Howells #define V4L2_TUNER_CAP_HWSEEK_WRAP	0x0008
1610607ca46eSDavid Howells #define V4L2_TUNER_CAP_STEREO		0x0010
1611607ca46eSDavid Howells #define V4L2_TUNER_CAP_LANG2		0x0020
1612607ca46eSDavid Howells #define V4L2_TUNER_CAP_SAP		0x0020
1613607ca46eSDavid Howells #define V4L2_TUNER_CAP_LANG1		0x0040
1614607ca46eSDavid Howells #define V4L2_TUNER_CAP_RDS		0x0080
1615607ca46eSDavid Howells #define V4L2_TUNER_CAP_RDS_BLOCK_IO	0x0100
1616607ca46eSDavid Howells #define V4L2_TUNER_CAP_RDS_CONTROLS	0x0200
1617607ca46eSDavid Howells #define V4L2_TUNER_CAP_FREQ_BANDS	0x0400
1618607ca46eSDavid Howells #define V4L2_TUNER_CAP_HWSEEK_PROG_LIM	0x0800
161967f9a117SAntti Palosaari #define V4L2_TUNER_CAP_1HZ		0x1000
1620607ca46eSDavid Howells 
1621607ca46eSDavid Howells /*  Flags for the 'rxsubchans' field */
1622607ca46eSDavid Howells #define V4L2_TUNER_SUB_MONO		0x0001
1623607ca46eSDavid Howells #define V4L2_TUNER_SUB_STEREO		0x0002
1624607ca46eSDavid Howells #define V4L2_TUNER_SUB_LANG2		0x0004
1625607ca46eSDavid Howells #define V4L2_TUNER_SUB_SAP		0x0004
1626607ca46eSDavid Howells #define V4L2_TUNER_SUB_LANG1		0x0008
1627607ca46eSDavid Howells #define V4L2_TUNER_SUB_RDS		0x0010
1628607ca46eSDavid Howells 
1629607ca46eSDavid Howells /*  Values for the 'audmode' field */
1630607ca46eSDavid Howells #define V4L2_TUNER_MODE_MONO		0x0000
1631607ca46eSDavid Howells #define V4L2_TUNER_MODE_STEREO		0x0001
1632607ca46eSDavid Howells #define V4L2_TUNER_MODE_LANG2		0x0002
1633607ca46eSDavid Howells #define V4L2_TUNER_MODE_SAP		0x0002
1634607ca46eSDavid Howells #define V4L2_TUNER_MODE_LANG1		0x0003
1635607ca46eSDavid Howells #define V4L2_TUNER_MODE_LANG1_LANG2	0x0004
1636607ca46eSDavid Howells 
1637607ca46eSDavid Howells struct v4l2_frequency {
1638607ca46eSDavid Howells 	__u32	tuner;
1639607ca46eSDavid Howells 	__u32	type;	/* enum v4l2_tuner_type */
1640607ca46eSDavid Howells 	__u32	frequency;
1641607ca46eSDavid Howells 	__u32	reserved[8];
1642607ca46eSDavid Howells };
1643607ca46eSDavid Howells 
1644607ca46eSDavid Howells #define V4L2_BAND_MODULATION_VSB	(1 << 1)
1645607ca46eSDavid Howells #define V4L2_BAND_MODULATION_FM		(1 << 2)
1646607ca46eSDavid Howells #define V4L2_BAND_MODULATION_AM		(1 << 3)
1647607ca46eSDavid Howells 
1648607ca46eSDavid Howells struct v4l2_frequency_band {
1649607ca46eSDavid Howells 	__u32	tuner;
1650607ca46eSDavid Howells 	__u32	type;	/* enum v4l2_tuner_type */
1651607ca46eSDavid Howells 	__u32	index;
1652607ca46eSDavid Howells 	__u32	capability;
1653607ca46eSDavid Howells 	__u32	rangelow;
1654607ca46eSDavid Howells 	__u32	rangehigh;
1655607ca46eSDavid Howells 	__u32	modulation;
1656607ca46eSDavid Howells 	__u32	reserved[9];
1657607ca46eSDavid Howells };
1658607ca46eSDavid Howells 
1659607ca46eSDavid Howells struct v4l2_hw_freq_seek {
1660607ca46eSDavid Howells 	__u32	tuner;
1661607ca46eSDavid Howells 	__u32	type;	/* enum v4l2_tuner_type */
1662607ca46eSDavid Howells 	__u32	seek_upward;
1663607ca46eSDavid Howells 	__u32	wrap_around;
1664607ca46eSDavid Howells 	__u32	spacing;
1665607ca46eSDavid Howells 	__u32	rangelow;
1666607ca46eSDavid Howells 	__u32	rangehigh;
1667607ca46eSDavid Howells 	__u32	reserved[5];
1668607ca46eSDavid Howells };
1669607ca46eSDavid Howells 
1670607ca46eSDavid Howells /*
1671607ca46eSDavid Howells  *	R D S
1672607ca46eSDavid Howells  */
1673607ca46eSDavid Howells 
1674607ca46eSDavid Howells struct v4l2_rds_data {
1675607ca46eSDavid Howells 	__u8 	lsb;
1676607ca46eSDavid Howells 	__u8 	msb;
1677607ca46eSDavid Howells 	__u8 	block;
1678607ca46eSDavid Howells } __attribute__ ((packed));
1679607ca46eSDavid Howells 
1680607ca46eSDavid Howells #define V4L2_RDS_BLOCK_MSK 	 0x7
1681607ca46eSDavid Howells #define V4L2_RDS_BLOCK_A 	 0
1682607ca46eSDavid Howells #define V4L2_RDS_BLOCK_B 	 1
1683607ca46eSDavid Howells #define V4L2_RDS_BLOCK_C 	 2
1684607ca46eSDavid Howells #define V4L2_RDS_BLOCK_D 	 3
1685607ca46eSDavid Howells #define V4L2_RDS_BLOCK_C_ALT 	 4
1686607ca46eSDavid Howells #define V4L2_RDS_BLOCK_INVALID 	 7
1687607ca46eSDavid Howells 
1688607ca46eSDavid Howells #define V4L2_RDS_BLOCK_CORRECTED 0x40
1689607ca46eSDavid Howells #define V4L2_RDS_BLOCK_ERROR 	 0x80
1690607ca46eSDavid Howells 
1691607ca46eSDavid Howells /*
1692607ca46eSDavid Howells  *	A U D I O
1693607ca46eSDavid Howells  */
1694607ca46eSDavid Howells struct v4l2_audio {
1695607ca46eSDavid Howells 	__u32	index;
1696607ca46eSDavid Howells 	__u8	name[32];
1697607ca46eSDavid Howells 	__u32	capability;
1698607ca46eSDavid Howells 	__u32	mode;
1699607ca46eSDavid Howells 	__u32	reserved[2];
1700607ca46eSDavid Howells };
1701607ca46eSDavid Howells 
1702607ca46eSDavid Howells /*  Flags for the 'capability' field */
1703607ca46eSDavid Howells #define V4L2_AUDCAP_STEREO		0x00001
1704607ca46eSDavid Howells #define V4L2_AUDCAP_AVL			0x00002
1705607ca46eSDavid Howells 
1706607ca46eSDavid Howells /*  Flags for the 'mode' field */
1707607ca46eSDavid Howells #define V4L2_AUDMODE_AVL		0x00001
1708607ca46eSDavid Howells 
1709607ca46eSDavid Howells struct v4l2_audioout {
1710607ca46eSDavid Howells 	__u32	index;
1711607ca46eSDavid Howells 	__u8	name[32];
1712607ca46eSDavid Howells 	__u32	capability;
1713607ca46eSDavid Howells 	__u32	mode;
1714607ca46eSDavid Howells 	__u32	reserved[2];
1715607ca46eSDavid Howells };
1716607ca46eSDavid Howells 
1717607ca46eSDavid Howells /*
1718607ca46eSDavid Howells  *	M P E G   S E R V I C E S
1719607ca46eSDavid Howells  *
1720607ca46eSDavid Howells  *	NOTE: EXPERIMENTAL API
1721607ca46eSDavid Howells  */
1722607ca46eSDavid Howells #if 1
1723607ca46eSDavid Howells #define V4L2_ENC_IDX_FRAME_I    (0)
1724607ca46eSDavid Howells #define V4L2_ENC_IDX_FRAME_P    (1)
1725607ca46eSDavid Howells #define V4L2_ENC_IDX_FRAME_B    (2)
1726607ca46eSDavid Howells #define V4L2_ENC_IDX_FRAME_MASK (0xf)
1727607ca46eSDavid Howells 
1728607ca46eSDavid Howells struct v4l2_enc_idx_entry {
1729607ca46eSDavid Howells 	__u64 offset;
1730607ca46eSDavid Howells 	__u64 pts;
1731607ca46eSDavid Howells 	__u32 length;
1732607ca46eSDavid Howells 	__u32 flags;
1733607ca46eSDavid Howells 	__u32 reserved[2];
1734607ca46eSDavid Howells };
1735607ca46eSDavid Howells 
1736607ca46eSDavid Howells #define V4L2_ENC_IDX_ENTRIES (64)
1737607ca46eSDavid Howells struct v4l2_enc_idx {
1738607ca46eSDavid Howells 	__u32 entries;
1739607ca46eSDavid Howells 	__u32 entries_cap;
1740607ca46eSDavid Howells 	__u32 reserved[4];
1741607ca46eSDavid Howells 	struct v4l2_enc_idx_entry entry[V4L2_ENC_IDX_ENTRIES];
1742607ca46eSDavid Howells };
1743607ca46eSDavid Howells 
1744607ca46eSDavid Howells 
1745607ca46eSDavid Howells #define V4L2_ENC_CMD_START      (0)
1746607ca46eSDavid Howells #define V4L2_ENC_CMD_STOP       (1)
1747607ca46eSDavid Howells #define V4L2_ENC_CMD_PAUSE      (2)
1748607ca46eSDavid Howells #define V4L2_ENC_CMD_RESUME     (3)
1749607ca46eSDavid Howells 
1750607ca46eSDavid Howells /* Flags for V4L2_ENC_CMD_STOP */
1751607ca46eSDavid Howells #define V4L2_ENC_CMD_STOP_AT_GOP_END    (1 << 0)
1752607ca46eSDavid Howells 
1753607ca46eSDavid Howells struct v4l2_encoder_cmd {
1754607ca46eSDavid Howells 	__u32 cmd;
1755607ca46eSDavid Howells 	__u32 flags;
1756607ca46eSDavid Howells 	union {
1757607ca46eSDavid Howells 		struct {
1758607ca46eSDavid Howells 			__u32 data[8];
1759607ca46eSDavid Howells 		} raw;
1760607ca46eSDavid Howells 	};
1761607ca46eSDavid Howells };
1762607ca46eSDavid Howells 
1763607ca46eSDavid Howells /* Decoder commands */
1764607ca46eSDavid Howells #define V4L2_DEC_CMD_START       (0)
1765607ca46eSDavid Howells #define V4L2_DEC_CMD_STOP        (1)
1766607ca46eSDavid Howells #define V4L2_DEC_CMD_PAUSE       (2)
1767607ca46eSDavid Howells #define V4L2_DEC_CMD_RESUME      (3)
1768607ca46eSDavid Howells 
1769607ca46eSDavid Howells /* Flags for V4L2_DEC_CMD_START */
1770607ca46eSDavid Howells #define V4L2_DEC_CMD_START_MUTE_AUDIO	(1 << 0)
1771607ca46eSDavid Howells 
1772607ca46eSDavid Howells /* Flags for V4L2_DEC_CMD_PAUSE */
1773607ca46eSDavid Howells #define V4L2_DEC_CMD_PAUSE_TO_BLACK	(1 << 0)
1774607ca46eSDavid Howells 
1775607ca46eSDavid Howells /* Flags for V4L2_DEC_CMD_STOP */
1776607ca46eSDavid Howells #define V4L2_DEC_CMD_STOP_TO_BLACK	(1 << 0)
1777607ca46eSDavid Howells #define V4L2_DEC_CMD_STOP_IMMEDIATELY	(1 << 1)
1778607ca46eSDavid Howells 
1779607ca46eSDavid Howells /* Play format requirements (returned by the driver): */
1780607ca46eSDavid Howells 
1781607ca46eSDavid Howells /* The decoder has no special format requirements */
1782607ca46eSDavid Howells #define V4L2_DEC_START_FMT_NONE		(0)
1783607ca46eSDavid Howells /* The decoder requires full GOPs */
1784607ca46eSDavid Howells #define V4L2_DEC_START_FMT_GOP		(1)
1785607ca46eSDavid Howells 
1786607ca46eSDavid Howells /* The structure must be zeroed before use by the application
1787607ca46eSDavid Howells    This ensures it can be extended safely in the future. */
1788607ca46eSDavid Howells struct v4l2_decoder_cmd {
1789607ca46eSDavid Howells 	__u32 cmd;
1790607ca46eSDavid Howells 	__u32 flags;
1791607ca46eSDavid Howells 	union {
1792607ca46eSDavid Howells 		struct {
1793607ca46eSDavid Howells 			__u64 pts;
1794607ca46eSDavid Howells 		} stop;
1795607ca46eSDavid Howells 
1796607ca46eSDavid Howells 		struct {
1797607ca46eSDavid Howells 			/* 0 or 1000 specifies normal speed,
1798607ca46eSDavid Howells 			   1 specifies forward single stepping,
1799607ca46eSDavid Howells 			   -1 specifies backward single stepping,
1800607ca46eSDavid Howells 			   >1: playback at speed/1000 of the normal speed,
1801607ca46eSDavid Howells 			   <-1: reverse playback at (-speed/1000) of the normal speed. */
1802607ca46eSDavid Howells 			__s32 speed;
1803607ca46eSDavid Howells 			__u32 format;
1804607ca46eSDavid Howells 		} start;
1805607ca46eSDavid Howells 
1806607ca46eSDavid Howells 		struct {
1807607ca46eSDavid Howells 			__u32 data[16];
1808607ca46eSDavid Howells 		} raw;
1809607ca46eSDavid Howells 	};
1810607ca46eSDavid Howells };
1811607ca46eSDavid Howells #endif
1812607ca46eSDavid Howells 
1813607ca46eSDavid Howells 
1814607ca46eSDavid Howells /*
1815607ca46eSDavid Howells  *	D A T A   S E R V I C E S   ( V B I )
1816607ca46eSDavid Howells  *
1817607ca46eSDavid Howells  *	Data services API by Michael Schimek
1818607ca46eSDavid Howells  */
1819607ca46eSDavid Howells 
1820607ca46eSDavid Howells /* Raw VBI */
1821607ca46eSDavid Howells struct v4l2_vbi_format {
1822607ca46eSDavid Howells 	__u32	sampling_rate;		/* in 1 Hz */
1823607ca46eSDavid Howells 	__u32	offset;
1824607ca46eSDavid Howells 	__u32	samples_per_line;
1825607ca46eSDavid Howells 	__u32	sample_format;		/* V4L2_PIX_FMT_* */
1826607ca46eSDavid Howells 	__s32	start[2];
1827607ca46eSDavid Howells 	__u32	count[2];
1828607ca46eSDavid Howells 	__u32	flags;			/* V4L2_VBI_* */
1829607ca46eSDavid Howells 	__u32	reserved[2];		/* must be zero */
1830607ca46eSDavid Howells };
1831607ca46eSDavid Howells 
1832607ca46eSDavid Howells /*  VBI flags  */
1833607ca46eSDavid Howells #define V4L2_VBI_UNSYNC		(1 << 0)
1834607ca46eSDavid Howells #define V4L2_VBI_INTERLACED	(1 << 1)
1835607ca46eSDavid Howells 
1836273886b4SHans Verkuil /* ITU-R start lines for each field */
1837273886b4SHans Verkuil #define V4L2_VBI_ITU_525_F1_START (1)
1838273886b4SHans Verkuil #define V4L2_VBI_ITU_525_F2_START (264)
1839273886b4SHans Verkuil #define V4L2_VBI_ITU_625_F1_START (1)
1840273886b4SHans Verkuil #define V4L2_VBI_ITU_625_F2_START (314)
1841273886b4SHans Verkuil 
1842607ca46eSDavid Howells /* Sliced VBI
1843607ca46eSDavid Howells  *
1844607ca46eSDavid Howells  *    This implements is a proposal V4L2 API to allow SLICED VBI
1845607ca46eSDavid Howells  * required for some hardware encoders. It should change without
1846607ca46eSDavid Howells  * notice in the definitive implementation.
1847607ca46eSDavid Howells  */
1848607ca46eSDavid Howells 
1849607ca46eSDavid Howells struct v4l2_sliced_vbi_format {
1850607ca46eSDavid Howells 	__u16   service_set;
1851607ca46eSDavid Howells 	/* service_lines[0][...] specifies lines 0-23 (1-23 used) of the first field
1852607ca46eSDavid Howells 	   service_lines[1][...] specifies lines 0-23 (1-23 used) of the second field
1853607ca46eSDavid Howells 				 (equals frame lines 313-336 for 625 line video
1854607ca46eSDavid Howells 				  standards, 263-286 for 525 line standards) */
1855607ca46eSDavid Howells 	__u16   service_lines[2][24];
1856607ca46eSDavid Howells 	__u32   io_size;
1857607ca46eSDavid Howells 	__u32   reserved[2];            /* must be zero */
1858607ca46eSDavid Howells };
1859607ca46eSDavid Howells 
1860607ca46eSDavid Howells /* Teletext World System Teletext
1861607ca46eSDavid Howells    (WST), defined on ITU-R BT.653-2 */
1862607ca46eSDavid Howells #define V4L2_SLICED_TELETEXT_B          (0x0001)
1863607ca46eSDavid Howells /* Video Program System, defined on ETS 300 231*/
1864607ca46eSDavid Howells #define V4L2_SLICED_VPS                 (0x0400)
1865607ca46eSDavid Howells /* Closed Caption, defined on EIA-608 */
1866607ca46eSDavid Howells #define V4L2_SLICED_CAPTION_525         (0x1000)
1867607ca46eSDavid Howells /* Wide Screen System, defined on ITU-R BT1119.1 */
1868607ca46eSDavid Howells #define V4L2_SLICED_WSS_625             (0x4000)
1869607ca46eSDavid Howells 
1870607ca46eSDavid Howells #define V4L2_SLICED_VBI_525             (V4L2_SLICED_CAPTION_525)
1871607ca46eSDavid Howells #define V4L2_SLICED_VBI_625             (V4L2_SLICED_TELETEXT_B | V4L2_SLICED_VPS | V4L2_SLICED_WSS_625)
1872607ca46eSDavid Howells 
1873607ca46eSDavid Howells struct v4l2_sliced_vbi_cap {
1874607ca46eSDavid Howells 	__u16   service_set;
1875607ca46eSDavid Howells 	/* service_lines[0][...] specifies lines 0-23 (1-23 used) of the first field
1876607ca46eSDavid Howells 	   service_lines[1][...] specifies lines 0-23 (1-23 used) of the second field
1877607ca46eSDavid Howells 				 (equals frame lines 313-336 for 625 line video
1878607ca46eSDavid Howells 				  standards, 263-286 for 525 line standards) */
1879607ca46eSDavid Howells 	__u16   service_lines[2][24];
1880607ca46eSDavid Howells 	__u32	type;		/* enum v4l2_buf_type */
1881607ca46eSDavid Howells 	__u32   reserved[3];    /* must be 0 */
1882607ca46eSDavid Howells };
1883607ca46eSDavid Howells 
1884607ca46eSDavid Howells struct v4l2_sliced_vbi_data {
1885607ca46eSDavid Howells 	__u32   id;
1886607ca46eSDavid Howells 	__u32   field;          /* 0: first field, 1: second field */
1887607ca46eSDavid Howells 	__u32   line;           /* 1-23 */
1888607ca46eSDavid Howells 	__u32   reserved;       /* must be 0 */
1889607ca46eSDavid Howells 	__u8    data[48];
1890607ca46eSDavid Howells };
1891607ca46eSDavid Howells 
1892607ca46eSDavid Howells /*
1893607ca46eSDavid Howells  * Sliced VBI data inserted into MPEG Streams
1894607ca46eSDavid Howells  */
1895607ca46eSDavid Howells 
1896607ca46eSDavid Howells /*
1897607ca46eSDavid Howells  * V4L2_MPEG_STREAM_VBI_FMT_IVTV:
1898607ca46eSDavid Howells  *
1899607ca46eSDavid Howells  * Structure of payload contained in an MPEG 2 Private Stream 1 PES Packet in an
1900607ca46eSDavid Howells  * MPEG-2 Program Pack that contains V4L2_MPEG_STREAM_VBI_FMT_IVTV Sliced VBI
1901607ca46eSDavid Howells  * data
1902607ca46eSDavid Howells  *
1903607ca46eSDavid Howells  * Note, the MPEG-2 Program Pack and Private Stream 1 PES packet header
1904607ca46eSDavid Howells  * definitions are not included here.  See the MPEG-2 specifications for details
1905607ca46eSDavid Howells  * on these headers.
1906607ca46eSDavid Howells  */
1907607ca46eSDavid Howells 
1908607ca46eSDavid Howells /* Line type IDs */
1909607ca46eSDavid Howells #define V4L2_MPEG_VBI_IVTV_TELETEXT_B     (1)
1910607ca46eSDavid Howells #define V4L2_MPEG_VBI_IVTV_CAPTION_525    (4)
1911607ca46eSDavid Howells #define V4L2_MPEG_VBI_IVTV_WSS_625        (5)
1912607ca46eSDavid Howells #define V4L2_MPEG_VBI_IVTV_VPS            (7)
1913607ca46eSDavid Howells 
1914607ca46eSDavid Howells struct v4l2_mpeg_vbi_itv0_line {
1915607ca46eSDavid Howells 	__u8 id;	/* One of V4L2_MPEG_VBI_IVTV_* above */
1916607ca46eSDavid Howells 	__u8 data[42];	/* Sliced VBI data for the line */
1917607ca46eSDavid Howells } __attribute__ ((packed));
1918607ca46eSDavid Howells 
1919607ca46eSDavid Howells struct v4l2_mpeg_vbi_itv0 {
1920607ca46eSDavid Howells 	__le32 linemask[2]; /* Bitmasks of VBI service lines present */
1921607ca46eSDavid Howells 	struct v4l2_mpeg_vbi_itv0_line line[35];
1922607ca46eSDavid Howells } __attribute__ ((packed));
1923607ca46eSDavid Howells 
1924607ca46eSDavid Howells struct v4l2_mpeg_vbi_ITV0 {
1925607ca46eSDavid Howells 	struct v4l2_mpeg_vbi_itv0_line line[36];
1926607ca46eSDavid Howells } __attribute__ ((packed));
1927607ca46eSDavid Howells 
1928607ca46eSDavid Howells #define V4L2_MPEG_VBI_IVTV_MAGIC0	"itv0"
1929607ca46eSDavid Howells #define V4L2_MPEG_VBI_IVTV_MAGIC1	"ITV0"
1930607ca46eSDavid Howells 
1931607ca46eSDavid Howells struct v4l2_mpeg_vbi_fmt_ivtv {
1932607ca46eSDavid Howells 	__u8 magic[4];
1933607ca46eSDavid Howells 	union {
1934607ca46eSDavid Howells 		struct v4l2_mpeg_vbi_itv0 itv0;
1935607ca46eSDavid Howells 		struct v4l2_mpeg_vbi_ITV0 ITV0;
1936607ca46eSDavid Howells 	};
1937607ca46eSDavid Howells } __attribute__ ((packed));
1938607ca46eSDavid Howells 
1939607ca46eSDavid Howells /*
1940607ca46eSDavid Howells  *	A G G R E G A T E   S T R U C T U R E S
1941607ca46eSDavid Howells  */
1942607ca46eSDavid Howells 
1943607ca46eSDavid Howells /**
1944607ca46eSDavid Howells  * struct v4l2_plane_pix_format - additional, per-plane format definition
1945607ca46eSDavid Howells  * @sizeimage:		maximum size in bytes required for data, for which
1946607ca46eSDavid Howells  *			this plane will be used
1947607ca46eSDavid Howells  * @bytesperline:	distance in bytes between the leftmost pixels in two
1948607ca46eSDavid Howells  *			adjacent lines
1949607ca46eSDavid Howells  */
1950607ca46eSDavid Howells struct v4l2_plane_pix_format {
1951607ca46eSDavid Howells 	__u32		sizeimage;
1952cc7d2dfbSHans Verkuil 	__u32		bytesperline;
1953cc7d2dfbSHans Verkuil 	__u16		reserved[6];
1954607ca46eSDavid Howells } __attribute__ ((packed));
1955607ca46eSDavid Howells 
1956607ca46eSDavid Howells /**
1957607ca46eSDavid Howells  * struct v4l2_pix_format_mplane - multiplanar format definition
1958607ca46eSDavid Howells  * @width:		image width in pixels
1959607ca46eSDavid Howells  * @height:		image height in pixels
1960607ca46eSDavid Howells  * @pixelformat:	little endian four character code (fourcc)
1961607ca46eSDavid Howells  * @field:		enum v4l2_field; field order (for interlaced video)
1962607ca46eSDavid Howells  * @colorspace:		enum v4l2_colorspace; supplemental to pixelformat
1963607ca46eSDavid Howells  * @plane_fmt:		per-plane information
1964607ca46eSDavid Howells  * @num_planes:		number of planes for this format
1965c96fd46aSLaurent Pinchart  * @flags:		format flags (V4L2_PIX_FMT_FLAG_*)
1966d5735d64SHans Verkuil  * @ycbcr_enc:		enum v4l2_ycbcr_encoding, Y'CbCr encoding
1967d5735d64SHans Verkuil  * @quantization:	enum v4l2_quantization, colorspace quantization
196874fdcb2eSHans Verkuil  * @xfer_func:		enum v4l2_xfer_func, colorspace transfer function
1969607ca46eSDavid Howells  */
1970607ca46eSDavid Howells struct v4l2_pix_format_mplane {
1971607ca46eSDavid Howells 	__u32				width;
1972607ca46eSDavid Howells 	__u32				height;
1973607ca46eSDavid Howells 	__u32				pixelformat;
1974607ca46eSDavid Howells 	__u32				field;
1975607ca46eSDavid Howells 	__u32				colorspace;
1976607ca46eSDavid Howells 
1977607ca46eSDavid Howells 	struct v4l2_plane_pix_format	plane_fmt[VIDEO_MAX_PLANES];
1978607ca46eSDavid Howells 	__u8				num_planes;
1979c96fd46aSLaurent Pinchart 	__u8				flags;
1980d5735d64SHans Verkuil 	__u8				ycbcr_enc;
1981d5735d64SHans Verkuil 	__u8				quantization;
198274fdcb2eSHans Verkuil 	__u8				xfer_func;
198374fdcb2eSHans Verkuil 	__u8				reserved[7];
1984607ca46eSDavid Howells } __attribute__ ((packed));
1985607ca46eSDavid Howells 
1986607ca46eSDavid Howells /**
198787185c95SAntti Palosaari  * struct v4l2_sdr_format - SDR format definition
19886f3073b8SAntti Palosaari  * @pixelformat:	little endian four character code (fourcc)
1989aaa968b6SAntti Palosaari  * @buffersize:		maximum size in bytes required for data
19906f3073b8SAntti Palosaari  */
199187185c95SAntti Palosaari struct v4l2_sdr_format {
19926f3073b8SAntti Palosaari 	__u32				pixelformat;
1993aaa968b6SAntti Palosaari 	__u32				buffersize;
1994aaa968b6SAntti Palosaari 	__u8				reserved[24];
19956f3073b8SAntti Palosaari } __attribute__ ((packed));
19966f3073b8SAntti Palosaari 
19976f3073b8SAntti Palosaari /**
1998607ca46eSDavid Howells  * struct v4l2_format - stream data format
1999607ca46eSDavid Howells  * @type:	enum v4l2_buf_type; type of the data stream
2000607ca46eSDavid Howells  * @pix:	definition of an image format
2001607ca46eSDavid Howells  * @pix_mp:	definition of a multiplanar image format
2002607ca46eSDavid Howells  * @win:	definition of an overlaid image
2003607ca46eSDavid Howells  * @vbi:	raw VBI capture or output parameters
2004607ca46eSDavid Howells  * @sliced:	sliced VBI capture or output parameters
2005607ca46eSDavid Howells  * @raw_data:	placeholder for future extensions and custom formats
2006607ca46eSDavid Howells  */
2007607ca46eSDavid Howells struct v4l2_format {
2008607ca46eSDavid Howells 	__u32	 type;
2009607ca46eSDavid Howells 	union {
2010607ca46eSDavid Howells 		struct v4l2_pix_format		pix;     /* V4L2_BUF_TYPE_VIDEO_CAPTURE */
2011607ca46eSDavid Howells 		struct v4l2_pix_format_mplane	pix_mp;  /* V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE */
2012607ca46eSDavid Howells 		struct v4l2_window		win;     /* V4L2_BUF_TYPE_VIDEO_OVERLAY */
2013607ca46eSDavid Howells 		struct v4l2_vbi_format		vbi;     /* V4L2_BUF_TYPE_VBI_CAPTURE */
2014607ca46eSDavid Howells 		struct v4l2_sliced_vbi_format	sliced;  /* V4L2_BUF_TYPE_SLICED_VBI_CAPTURE */
201587185c95SAntti Palosaari 		struct v4l2_sdr_format		sdr;     /* V4L2_BUF_TYPE_SDR_CAPTURE */
2016607ca46eSDavid Howells 		__u8	raw_data[200];                   /* user-defined */
2017607ca46eSDavid Howells 	} fmt;
2018607ca46eSDavid Howells };
2019607ca46eSDavid Howells 
2020607ca46eSDavid Howells /*	Stream type-dependent parameters
2021607ca46eSDavid Howells  */
2022607ca46eSDavid Howells struct v4l2_streamparm {
2023607ca46eSDavid Howells 	__u32	 type;			/* enum v4l2_buf_type */
2024607ca46eSDavid Howells 	union {
2025607ca46eSDavid Howells 		struct v4l2_captureparm	capture;
2026607ca46eSDavid Howells 		struct v4l2_outputparm	output;
2027607ca46eSDavid Howells 		__u8	raw_data[200];  /* user-defined */
2028607ca46eSDavid Howells 	} parm;
2029607ca46eSDavid Howells };
2030607ca46eSDavid Howells 
2031607ca46eSDavid Howells /*
2032607ca46eSDavid Howells  *	E V E N T S
2033607ca46eSDavid Howells  */
2034607ca46eSDavid Howells 
2035607ca46eSDavid Howells #define V4L2_EVENT_ALL				0
2036607ca46eSDavid Howells #define V4L2_EVENT_VSYNC			1
2037607ca46eSDavid Howells #define V4L2_EVENT_EOS				2
2038607ca46eSDavid Howells #define V4L2_EVENT_CTRL				3
2039607ca46eSDavid Howells #define V4L2_EVENT_FRAME_SYNC			4
20403cbe6e5bSArun Kumar K #define V4L2_EVENT_SOURCE_CHANGE		5
204178ea6113SHans Verkuil #define V4L2_EVENT_MOTION_DET			6
2042607ca46eSDavid Howells #define V4L2_EVENT_PRIVATE_START		0x08000000
2043607ca46eSDavid Howells 
2044607ca46eSDavid Howells /* Payload for V4L2_EVENT_VSYNC */
2045607ca46eSDavid Howells struct v4l2_event_vsync {
2046607ca46eSDavid Howells 	/* Can be V4L2_FIELD_ANY, _NONE, _TOP or _BOTTOM */
2047607ca46eSDavid Howells 	__u8 field;
2048607ca46eSDavid Howells } __attribute__ ((packed));
2049607ca46eSDavid Howells 
2050607ca46eSDavid Howells /* Payload for V4L2_EVENT_CTRL */
2051607ca46eSDavid Howells #define V4L2_EVENT_CTRL_CH_VALUE		(1 << 0)
2052607ca46eSDavid Howells #define V4L2_EVENT_CTRL_CH_FLAGS		(1 << 1)
20532ccbe779SSylwester Nawrocki #define V4L2_EVENT_CTRL_CH_RANGE		(1 << 2)
2054607ca46eSDavid Howells 
2055607ca46eSDavid Howells struct v4l2_event_ctrl {
2056607ca46eSDavid Howells 	__u32 changes;
2057607ca46eSDavid Howells 	__u32 type;
2058607ca46eSDavid Howells 	union {
2059607ca46eSDavid Howells 		__s32 value;
2060607ca46eSDavid Howells 		__s64 value64;
2061607ca46eSDavid Howells 	};
2062607ca46eSDavid Howells 	__u32 flags;
2063607ca46eSDavid Howells 	__s32 minimum;
2064607ca46eSDavid Howells 	__s32 maximum;
2065607ca46eSDavid Howells 	__s32 step;
2066607ca46eSDavid Howells 	__s32 default_value;
2067607ca46eSDavid Howells };
2068607ca46eSDavid Howells 
2069607ca46eSDavid Howells struct v4l2_event_frame_sync {
2070607ca46eSDavid Howells 	__u32 frame_sequence;
2071607ca46eSDavid Howells };
2072607ca46eSDavid Howells 
20733cbe6e5bSArun Kumar K #define V4L2_EVENT_SRC_CH_RESOLUTION		(1 << 0)
20743cbe6e5bSArun Kumar K 
20753cbe6e5bSArun Kumar K struct v4l2_event_src_change {
20763cbe6e5bSArun Kumar K 	__u32 changes;
20773cbe6e5bSArun Kumar K };
20783cbe6e5bSArun Kumar K 
207978ea6113SHans Verkuil #define V4L2_EVENT_MD_FL_HAVE_FRAME_SEQ	(1 << 0)
208078ea6113SHans Verkuil 
208178ea6113SHans Verkuil /**
208278ea6113SHans Verkuil  * struct v4l2_event_motion_det - motion detection event
208378ea6113SHans Verkuil  * @flags:             if V4L2_EVENT_MD_FL_HAVE_FRAME_SEQ is set, then the
208478ea6113SHans Verkuil  *                     frame_sequence field is valid.
208578ea6113SHans Verkuil  * @frame_sequence:    the frame sequence number associated with this event.
208678ea6113SHans Verkuil  * @region_mask:       which regions detected motion.
208778ea6113SHans Verkuil  */
208878ea6113SHans Verkuil struct v4l2_event_motion_det {
208978ea6113SHans Verkuil 	__u32 flags;
209078ea6113SHans Verkuil 	__u32 frame_sequence;
209178ea6113SHans Verkuil 	__u32 region_mask;
209278ea6113SHans Verkuil };
209378ea6113SHans Verkuil 
2094607ca46eSDavid Howells struct v4l2_event {
2095607ca46eSDavid Howells 	__u32				type;
2096607ca46eSDavid Howells 	union {
2097607ca46eSDavid Howells 		struct v4l2_event_vsync		vsync;
2098607ca46eSDavid Howells 		struct v4l2_event_ctrl		ctrl;
2099607ca46eSDavid Howells 		struct v4l2_event_frame_sync	frame_sync;
21003cbe6e5bSArun Kumar K 		struct v4l2_event_src_change	src_change;
210178ea6113SHans Verkuil 		struct v4l2_event_motion_det	motion_det;
2102607ca46eSDavid Howells 		__u8				data[64];
2103607ca46eSDavid Howells 	} u;
2104607ca46eSDavid Howells 	__u32				pending;
2105607ca46eSDavid Howells 	__u32				sequence;
2106607ca46eSDavid Howells 	struct timespec			timestamp;
2107607ca46eSDavid Howells 	__u32				id;
2108607ca46eSDavid Howells 	__u32				reserved[8];
2109607ca46eSDavid Howells };
2110607ca46eSDavid Howells 
2111607ca46eSDavid Howells #define V4L2_EVENT_SUB_FL_SEND_INITIAL		(1 << 0)
2112607ca46eSDavid Howells #define V4L2_EVENT_SUB_FL_ALLOW_FEEDBACK	(1 << 1)
2113607ca46eSDavid Howells 
2114607ca46eSDavid Howells struct v4l2_event_subscription {
2115607ca46eSDavid Howells 	__u32				type;
2116607ca46eSDavid Howells 	__u32				id;
2117607ca46eSDavid Howells 	__u32				flags;
2118607ca46eSDavid Howells 	__u32				reserved[5];
2119607ca46eSDavid Howells };
2120607ca46eSDavid Howells 
2121607ca46eSDavid Howells /*
2122607ca46eSDavid Howells  *	A D V A N C E D   D E B U G G I N G
2123607ca46eSDavid Howells  *
2124607ca46eSDavid Howells  *	NOTE: EXPERIMENTAL API, NEVER RELY ON THIS IN APPLICATIONS!
2125607ca46eSDavid Howells  *	FOR DEBUGGING, TESTING AND INTERNAL USE ONLY!
2126607ca46eSDavid Howells  */
2127607ca46eSDavid Howells 
2128607ca46eSDavid Howells /* VIDIOC_DBG_G_REGISTER and VIDIOC_DBG_S_REGISTER */
2129607ca46eSDavid Howells 
213079b0c640SHans Verkuil #define V4L2_CHIP_MATCH_BRIDGE      0  /* Match against chip ID on the bridge (0 for the bridge) */
2131b71c9980SHans Verkuil #define V4L2_CHIP_MATCH_SUBDEV      4  /* Match against subdev index */
2132b71c9980SHans Verkuil 
2133b71c9980SHans Verkuil /* The following four defines are no longer in use */
213479b0c640SHans Verkuil #define V4L2_CHIP_MATCH_HOST V4L2_CHIP_MATCH_BRIDGE
2135607ca46eSDavid Howells #define V4L2_CHIP_MATCH_I2C_DRIVER  1  /* Match against I2C driver name */
2136607ca46eSDavid Howells #define V4L2_CHIP_MATCH_I2C_ADDR    2  /* Match against I2C 7-bit address */
2137ff29feb9SLad, Prabhakar #define V4L2_CHIP_MATCH_AC97        3  /* Match against ancillary AC97 chip */
2138607ca46eSDavid Howells 
2139607ca46eSDavid Howells struct v4l2_dbg_match {
2140607ca46eSDavid Howells 	__u32 type; /* Match type */
2141607ca46eSDavid Howells 	union {     /* Match this chip, meaning determined by type */
2142607ca46eSDavid Howells 		__u32 addr;
2143607ca46eSDavid Howells 		char name[32];
2144607ca46eSDavid Howells 	};
2145607ca46eSDavid Howells } __attribute__ ((packed));
2146607ca46eSDavid Howells 
2147607ca46eSDavid Howells struct v4l2_dbg_register {
2148607ca46eSDavid Howells 	struct v4l2_dbg_match match;
2149607ca46eSDavid Howells 	__u32 size;	/* register size in bytes */
2150607ca46eSDavid Howells 	__u64 reg;
2151607ca46eSDavid Howells 	__u64 val;
2152607ca46eSDavid Howells } __attribute__ ((packed));
2153607ca46eSDavid Howells 
215479b0c640SHans Verkuil #define V4L2_CHIP_FL_READABLE (1 << 0)
215579b0c640SHans Verkuil #define V4L2_CHIP_FL_WRITABLE (1 << 1)
215679b0c640SHans Verkuil 
215796b03d2aSHans Verkuil /* VIDIOC_DBG_G_CHIP_INFO */
215896b03d2aSHans Verkuil struct v4l2_dbg_chip_info {
215979b0c640SHans Verkuil 	struct v4l2_dbg_match match;
216079b0c640SHans Verkuil 	char name[32];
216179b0c640SHans Verkuil 	__u32 flags;
2162b8399b83SHans Verkuil 	__u32 reserved[32];
216379b0c640SHans Verkuil } __attribute__ ((packed));
216479b0c640SHans Verkuil 
2165607ca46eSDavid Howells /**
2166607ca46eSDavid Howells  * struct v4l2_create_buffers - VIDIOC_CREATE_BUFS argument
2167607ca46eSDavid Howells  * @index:	on return, index of the first created buffer
2168607ca46eSDavid Howells  * @count:	entry: number of requested buffers,
2169607ca46eSDavid Howells  *		return: number of created buffers
2170607ca46eSDavid Howells  * @memory:	enum v4l2_memory; buffer memory type
2171607ca46eSDavid Howells  * @format:	frame format, for which buffers are requested
2172607ca46eSDavid Howells  * @reserved:	future extensions
2173607ca46eSDavid Howells  */
2174607ca46eSDavid Howells struct v4l2_create_buffers {
2175607ca46eSDavid Howells 	__u32			index;
2176607ca46eSDavid Howells 	__u32			count;
2177607ca46eSDavid Howells 	__u32			memory;
2178607ca46eSDavid Howells 	struct v4l2_format	format;
2179607ca46eSDavid Howells 	__u32			reserved[8];
2180607ca46eSDavid Howells };
2181607ca46eSDavid Howells 
2182607ca46eSDavid Howells /*
2183607ca46eSDavid 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
2184607ca46eSDavid Howells  *
2185607ca46eSDavid Howells  */
2186607ca46eSDavid Howells #define VIDIOC_QUERYCAP		 _IOR('V',  0, struct v4l2_capability)
2187607ca46eSDavid Howells #define VIDIOC_RESERVED		  _IO('V',  1)
2188607ca46eSDavid Howells #define VIDIOC_ENUM_FMT         _IOWR('V',  2, struct v4l2_fmtdesc)
2189607ca46eSDavid Howells #define VIDIOC_G_FMT		_IOWR('V',  4, struct v4l2_format)
2190607ca46eSDavid Howells #define VIDIOC_S_FMT		_IOWR('V',  5, struct v4l2_format)
2191607ca46eSDavid Howells #define VIDIOC_REQBUFS		_IOWR('V',  8, struct v4l2_requestbuffers)
2192607ca46eSDavid Howells #define VIDIOC_QUERYBUF		_IOWR('V',  9, struct v4l2_buffer)
2193607ca46eSDavid Howells #define VIDIOC_G_FBUF		 _IOR('V', 10, struct v4l2_framebuffer)
2194607ca46eSDavid Howells #define VIDIOC_S_FBUF		 _IOW('V', 11, struct v4l2_framebuffer)
2195607ca46eSDavid Howells #define VIDIOC_OVERLAY		 _IOW('V', 14, int)
2196607ca46eSDavid Howells #define VIDIOC_QBUF		_IOWR('V', 15, struct v4l2_buffer)
2197b799d09aSTomasz Stanislawski #define VIDIOC_EXPBUF		_IOWR('V', 16, struct v4l2_exportbuffer)
2198607ca46eSDavid Howells #define VIDIOC_DQBUF		_IOWR('V', 17, struct v4l2_buffer)
2199607ca46eSDavid Howells #define VIDIOC_STREAMON		 _IOW('V', 18, int)
2200607ca46eSDavid Howells #define VIDIOC_STREAMOFF	 _IOW('V', 19, int)
2201607ca46eSDavid Howells #define VIDIOC_G_PARM		_IOWR('V', 21, struct v4l2_streamparm)
2202607ca46eSDavid Howells #define VIDIOC_S_PARM		_IOWR('V', 22, struct v4l2_streamparm)
2203607ca46eSDavid Howells #define VIDIOC_G_STD		 _IOR('V', 23, v4l2_std_id)
2204607ca46eSDavid Howells #define VIDIOC_S_STD		 _IOW('V', 24, v4l2_std_id)
2205607ca46eSDavid Howells #define VIDIOC_ENUMSTD		_IOWR('V', 25, struct v4l2_standard)
2206607ca46eSDavid Howells #define VIDIOC_ENUMINPUT	_IOWR('V', 26, struct v4l2_input)
2207607ca46eSDavid Howells #define VIDIOC_G_CTRL		_IOWR('V', 27, struct v4l2_control)
2208607ca46eSDavid Howells #define VIDIOC_S_CTRL		_IOWR('V', 28, struct v4l2_control)
2209607ca46eSDavid Howells #define VIDIOC_G_TUNER		_IOWR('V', 29, struct v4l2_tuner)
2210607ca46eSDavid Howells #define VIDIOC_S_TUNER		 _IOW('V', 30, struct v4l2_tuner)
2211607ca46eSDavid Howells #define VIDIOC_G_AUDIO		 _IOR('V', 33, struct v4l2_audio)
2212607ca46eSDavid Howells #define VIDIOC_S_AUDIO		 _IOW('V', 34, struct v4l2_audio)
2213607ca46eSDavid Howells #define VIDIOC_QUERYCTRL	_IOWR('V', 36, struct v4l2_queryctrl)
2214607ca46eSDavid Howells #define VIDIOC_QUERYMENU	_IOWR('V', 37, struct v4l2_querymenu)
2215607ca46eSDavid Howells #define VIDIOC_G_INPUT		 _IOR('V', 38, int)
2216607ca46eSDavid Howells #define VIDIOC_S_INPUT		_IOWR('V', 39, int)
2217254a4777SHans Verkuil #define VIDIOC_G_EDID		_IOWR('V', 40, struct v4l2_edid)
2218254a4777SHans Verkuil #define VIDIOC_S_EDID		_IOWR('V', 41, struct v4l2_edid)
2219607ca46eSDavid Howells #define VIDIOC_G_OUTPUT		 _IOR('V', 46, int)
2220607ca46eSDavid Howells #define VIDIOC_S_OUTPUT		_IOWR('V', 47, int)
2221607ca46eSDavid Howells #define VIDIOC_ENUMOUTPUT	_IOWR('V', 48, struct v4l2_output)
2222607ca46eSDavid Howells #define VIDIOC_G_AUDOUT		 _IOR('V', 49, struct v4l2_audioout)
2223607ca46eSDavid Howells #define VIDIOC_S_AUDOUT		 _IOW('V', 50, struct v4l2_audioout)
2224607ca46eSDavid Howells #define VIDIOC_G_MODULATOR	_IOWR('V', 54, struct v4l2_modulator)
2225607ca46eSDavid Howells #define VIDIOC_S_MODULATOR	 _IOW('V', 55, struct v4l2_modulator)
2226607ca46eSDavid Howells #define VIDIOC_G_FREQUENCY	_IOWR('V', 56, struct v4l2_frequency)
2227607ca46eSDavid Howells #define VIDIOC_S_FREQUENCY	 _IOW('V', 57, struct v4l2_frequency)
2228607ca46eSDavid Howells #define VIDIOC_CROPCAP		_IOWR('V', 58, struct v4l2_cropcap)
2229607ca46eSDavid Howells #define VIDIOC_G_CROP		_IOWR('V', 59, struct v4l2_crop)
2230607ca46eSDavid Howells #define VIDIOC_S_CROP		 _IOW('V', 60, struct v4l2_crop)
2231607ca46eSDavid Howells #define VIDIOC_G_JPEGCOMP	 _IOR('V', 61, struct v4l2_jpegcompression)
2232607ca46eSDavid Howells #define VIDIOC_S_JPEGCOMP	 _IOW('V', 62, struct v4l2_jpegcompression)
2233607ca46eSDavid Howells #define VIDIOC_QUERYSTD      	 _IOR('V', 63, v4l2_std_id)
2234607ca46eSDavid Howells #define VIDIOC_TRY_FMT      	_IOWR('V', 64, struct v4l2_format)
2235607ca46eSDavid Howells #define VIDIOC_ENUMAUDIO	_IOWR('V', 65, struct v4l2_audio)
2236607ca46eSDavid Howells #define VIDIOC_ENUMAUDOUT	_IOWR('V', 66, struct v4l2_audioout)
2237607ca46eSDavid Howells #define VIDIOC_G_PRIORITY	 _IOR('V', 67, __u32) /* enum v4l2_priority */
2238607ca46eSDavid Howells #define VIDIOC_S_PRIORITY	 _IOW('V', 68, __u32) /* enum v4l2_priority */
2239607ca46eSDavid Howells #define VIDIOC_G_SLICED_VBI_CAP _IOWR('V', 69, struct v4l2_sliced_vbi_cap)
2240607ca46eSDavid Howells #define VIDIOC_LOG_STATUS         _IO('V', 70)
2241607ca46eSDavid Howells #define VIDIOC_G_EXT_CTRLS	_IOWR('V', 71, struct v4l2_ext_controls)
2242607ca46eSDavid Howells #define VIDIOC_S_EXT_CTRLS	_IOWR('V', 72, struct v4l2_ext_controls)
2243607ca46eSDavid Howells #define VIDIOC_TRY_EXT_CTRLS	_IOWR('V', 73, struct v4l2_ext_controls)
2244607ca46eSDavid Howells #define VIDIOC_ENUM_FRAMESIZES	_IOWR('V', 74, struct v4l2_frmsizeenum)
2245607ca46eSDavid Howells #define VIDIOC_ENUM_FRAMEINTERVALS _IOWR('V', 75, struct v4l2_frmivalenum)
2246607ca46eSDavid Howells #define VIDIOC_G_ENC_INDEX       _IOR('V', 76, struct v4l2_enc_idx)
2247607ca46eSDavid Howells #define VIDIOC_ENCODER_CMD      _IOWR('V', 77, struct v4l2_encoder_cmd)
2248607ca46eSDavid Howells #define VIDIOC_TRY_ENCODER_CMD  _IOWR('V', 78, struct v4l2_encoder_cmd)
2249607ca46eSDavid Howells 
2250607ca46eSDavid Howells /* Experimental, meant for debugging, testing and internal use.
2251607ca46eSDavid Howells    Only implemented if CONFIG_VIDEO_ADV_DEBUG is defined.
2252607ca46eSDavid Howells    You must be root to use these ioctls. Never use these in applications! */
2253607ca46eSDavid Howells #define	VIDIOC_DBG_S_REGISTER 	 _IOW('V', 79, struct v4l2_dbg_register)
2254607ca46eSDavid Howells #define	VIDIOC_DBG_G_REGISTER 	_IOWR('V', 80, struct v4l2_dbg_register)
2255607ca46eSDavid Howells 
2256607ca46eSDavid Howells #define VIDIOC_S_HW_FREQ_SEEK	 _IOW('V', 82, struct v4l2_hw_freq_seek)
2257607ca46eSDavid Howells 
2258607ca46eSDavid Howells #define	VIDIOC_S_DV_TIMINGS	_IOWR('V', 87, struct v4l2_dv_timings)
2259607ca46eSDavid Howells #define	VIDIOC_G_DV_TIMINGS	_IOWR('V', 88, struct v4l2_dv_timings)
2260607ca46eSDavid Howells #define	VIDIOC_DQEVENT		 _IOR('V', 89, struct v4l2_event)
2261607ca46eSDavid Howells #define	VIDIOC_SUBSCRIBE_EVENT	 _IOW('V', 90, struct v4l2_event_subscription)
2262607ca46eSDavid Howells #define	VIDIOC_UNSUBSCRIBE_EVENT _IOW('V', 91, struct v4l2_event_subscription)
2263607ca46eSDavid Howells 
2264607ca46eSDavid Howells /* Experimental, the below two ioctls may change over the next couple of kernel
2265607ca46eSDavid Howells    versions */
2266607ca46eSDavid Howells #define VIDIOC_CREATE_BUFS	_IOWR('V', 92, struct v4l2_create_buffers)
2267607ca46eSDavid Howells #define VIDIOC_PREPARE_BUF	_IOWR('V', 93, struct v4l2_buffer)
2268607ca46eSDavid Howells 
2269607ca46eSDavid Howells /* Experimental selection API */
2270607ca46eSDavid Howells #define VIDIOC_G_SELECTION	_IOWR('V', 94, struct v4l2_selection)
2271607ca46eSDavid Howells #define VIDIOC_S_SELECTION	_IOWR('V', 95, struct v4l2_selection)
2272607ca46eSDavid Howells 
2273607ca46eSDavid Howells /* Experimental, these two ioctls may change over the next couple of kernel
2274607ca46eSDavid Howells    versions. */
2275607ca46eSDavid Howells #define VIDIOC_DECODER_CMD	_IOWR('V', 96, struct v4l2_decoder_cmd)
2276607ca46eSDavid Howells #define VIDIOC_TRY_DECODER_CMD	_IOWR('V', 97, struct v4l2_decoder_cmd)
2277607ca46eSDavid Howells 
2278607ca46eSDavid Howells /* Experimental, these three ioctls may change over the next couple of kernel
2279607ca46eSDavid Howells    versions. */
2280607ca46eSDavid Howells #define VIDIOC_ENUM_DV_TIMINGS  _IOWR('V', 98, struct v4l2_enum_dv_timings)
2281607ca46eSDavid Howells #define VIDIOC_QUERY_DV_TIMINGS  _IOR('V', 99, struct v4l2_dv_timings)
2282607ca46eSDavid Howells #define VIDIOC_DV_TIMINGS_CAP   _IOWR('V', 100, struct v4l2_dv_timings_cap)
2283607ca46eSDavid Howells 
2284607ca46eSDavid Howells /* Experimental, this ioctl may change over the next couple of kernel
2285607ca46eSDavid Howells    versions. */
2286607ca46eSDavid Howells #define VIDIOC_ENUM_FREQ_BANDS	_IOWR('V', 101, struct v4l2_frequency_band)
2287607ca46eSDavid Howells 
228879b0c640SHans Verkuil /* Experimental, meant for debugging, testing and internal use.
228979b0c640SHans Verkuil    Never use these in applications! */
229096b03d2aSHans Verkuil #define VIDIOC_DBG_G_CHIP_INFO  _IOWR('V', 102, struct v4l2_dbg_chip_info)
229179b0c640SHans Verkuil 
22925082c241SHans Verkuil #define VIDIOC_QUERY_EXT_CTRL	_IOWR('V', 103, struct v4l2_query_ext_ctrl)
22935082c241SHans Verkuil 
2294607ca46eSDavid Howells /* Reminder: when adding new ioctls please add support for them to
2295d9e7d228SRicardo Ribalda    drivers/media/v4l2-core/v4l2-compat-ioctl32.c as well! */
2296607ca46eSDavid Howells 
2297607ca46eSDavid Howells #define BASE_VIDIOC_PRIVATE	192		/* 192-255 are private */
2298607ca46eSDavid Howells 
2299607ca46eSDavid Howells #endif /* _UAPI__LINUX_VIDEODEV2_H */
2300