Add a copy of V4L2 kernel headers
[media-ctl.git] / src / linux / videodev2.h
1 /*
2  *  Video for Linux Two header file
3  *
4  *  Copyright (C) 1999-2007 the contributors
5  *
6  *  This program is free software; you can redistribute it and/or modify
7  *  it under the terms of the GNU General Public License as published by
8  *  the Free Software Foundation; either version 2 of the License, or
9  *  (at your option) any later version.
10  *
11  *  This program is distributed in the hope that it will be useful,
12  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  *  GNU General Public License for more details.
15  *
16  *  Alternatively you can redistribute this file under the terms of the
17  *  BSD license as stated below:
18  *
19  *  Redistribution and use in source and binary forms, with or without
20  *  modification, are permitted provided that the following conditions
21  *  are met:
22  *  1. Redistributions of source code must retain the above copyright
23  *     notice, this list of conditions and the following disclaimer.
24  *  2. Redistributions in binary form must reproduce the above copyright
25  *     notice, this list of conditions and the following disclaimer in
26  *     the documentation and/or other materials provided with the
27  *     distribution.
28  *  3. The names of its contributors may not be used to endorse or promote
29  *     products derived from this software without specific prior written
30  *     permission.
31  *
32  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
33  *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
34  *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
35  *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
36  *  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
37  *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
38  *  TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
39  *  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
40  *  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
41  *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
42  *  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
43  *
44  *      Header file for v4l or V4L2 drivers and applications
45  * with public API.
46  * All kernel-specific stuff were moved to media/v4l2-dev.h, so
47  * no #if __KERNEL tests are allowed here
48  *
49  *      See http://linuxtv.org for more info
50  *
51  *      Author: Bill Dirks <bill@thedirks.org>
52  *              Justin Schoeman
53  *              Hans Verkuil <hverkuil@xs4all.nl>
54  *              et al.
55  */
56 #ifndef __LINUX_VIDEODEV2_H
57 #define __LINUX_VIDEODEV2_H
58
59 #include <sys/time.h>
60
61 #include <linux/ioctl.h>
62 #include <linux/types.h>
63 #include <linux/v4l2-common.h>
64
65 /*
66  * Common stuff for both V4L1 and V4L2
67  * Moved from videodev.h
68  */
69 #define VIDEO_MAX_FRAME               32
70 #define VIDEO_MAX_PLANES               8
71
72
73 /* These defines are V4L1 specific and should not be used with the V4L2 API!
74    They will be removed from this header in the future. */
75
76 #define VID_TYPE_CAPTURE        1       /* Can capture */
77 #define VID_TYPE_TUNER          2       /* Can tune */
78 #define VID_TYPE_TELETEXT       4       /* Does teletext */
79 #define VID_TYPE_OVERLAY        8       /* Overlay onto frame buffer */
80 #define VID_TYPE_CHROMAKEY      16      /* Overlay by chromakey */
81 #define VID_TYPE_CLIPPING       32      /* Can clip */
82 #define VID_TYPE_FRAMERAM       64      /* Uses the frame buffer memory */
83 #define VID_TYPE_SCALES         128     /* Scalable */
84 #define VID_TYPE_MONOCHROME     256     /* Monochrome only */
85 #define VID_TYPE_SUBCAPTURE     512     /* Can capture subareas of the image */
86 #define VID_TYPE_MPEG_DECODER   1024    /* Can decode MPEG streams */
87 #define VID_TYPE_MPEG_ENCODER   2048    /* Can encode MPEG streams */
88 #define VID_TYPE_MJPEG_DECODER  4096    /* Can decode MJPEG streams */
89 #define VID_TYPE_MJPEG_ENCODER  8192    /* Can encode MJPEG streams */
90
91 /*
92  *      M I S C E L L A N E O U S
93  */
94
95 /*  Four-character-code (FOURCC) */
96 #define v4l2_fourcc(a, b, c, d)\
97         ((__u32)(a) | ((__u32)(b) << 8) | ((__u32)(c) << 16) | ((__u32)(d) << 24))
98
99 /*
100  *      E N U M S
101  */
102 enum v4l2_field {
103         V4L2_FIELD_ANY           = 0, /* driver can choose from none,
104                                          top, bottom, interlaced
105                                          depending on whatever it thinks
106                                          is approximate ... */
107         V4L2_FIELD_NONE          = 1, /* this device has no fields ... */
108         V4L2_FIELD_TOP           = 2, /* top field only */
109         V4L2_FIELD_BOTTOM        = 3, /* bottom field only */
110         V4L2_FIELD_INTERLACED    = 4, /* both fields interlaced */
111         V4L2_FIELD_SEQ_TB        = 5, /* both fields sequential into one
112                                          buffer, top-bottom order */
113         V4L2_FIELD_SEQ_BT        = 6, /* same as above + bottom-top order */
114         V4L2_FIELD_ALTERNATE     = 7, /* both fields alternating into
115                                          separate buffers */
116         V4L2_FIELD_INTERLACED_TB = 8, /* both fields interlaced, top field
117                                          first and the top field is
118                                          transmitted first */
119         V4L2_FIELD_INTERLACED_BT = 9, /* both fields interlaced, top field
120                                          first and the bottom field is
121                                          transmitted first */
122 };
123 #define V4L2_FIELD_HAS_TOP(field)       \
124         ((field) == V4L2_FIELD_TOP      ||\
125          (field) == V4L2_FIELD_INTERLACED ||\
126          (field) == V4L2_FIELD_INTERLACED_TB ||\
127          (field) == V4L2_FIELD_INTERLACED_BT ||\
128          (field) == V4L2_FIELD_SEQ_TB   ||\
129          (field) == V4L2_FIELD_SEQ_BT)
130 #define V4L2_FIELD_HAS_BOTTOM(field)    \
131         ((field) == V4L2_FIELD_BOTTOM   ||\
132          (field) == V4L2_FIELD_INTERLACED ||\
133          (field) == V4L2_FIELD_INTERLACED_TB ||\
134          (field) == V4L2_FIELD_INTERLACED_BT ||\
135          (field) == V4L2_FIELD_SEQ_TB   ||\
136          (field) == V4L2_FIELD_SEQ_BT)
137 #define V4L2_FIELD_HAS_BOTH(field)      \
138         ((field) == V4L2_FIELD_INTERLACED ||\
139          (field) == V4L2_FIELD_INTERLACED_TB ||\
140          (field) == V4L2_FIELD_INTERLACED_BT ||\
141          (field) == V4L2_FIELD_SEQ_TB ||\
142          (field) == V4L2_FIELD_SEQ_BT)
143
144 enum v4l2_buf_type {
145         V4L2_BUF_TYPE_VIDEO_CAPTURE        = 1,
146         V4L2_BUF_TYPE_VIDEO_OUTPUT         = 2,
147         V4L2_BUF_TYPE_VIDEO_OVERLAY        = 3,
148         V4L2_BUF_TYPE_VBI_CAPTURE          = 4,
149         V4L2_BUF_TYPE_VBI_OUTPUT           = 5,
150         V4L2_BUF_TYPE_SLICED_VBI_CAPTURE   = 6,
151         V4L2_BUF_TYPE_SLICED_VBI_OUTPUT    = 7,
152 #if 1
153         /* Experimental */
154         V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY = 8,
155 #endif
156         V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE = 9,
157         V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE  = 10,
158         V4L2_BUF_TYPE_PRIVATE              = 0x80,
159 };
160
161 #define V4L2_TYPE_IS_MULTIPLANAR(type)                  \
162         ((type) == V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE   \
163          || (type) == V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE)
164
165 #define V4L2_TYPE_IS_OUTPUT(type)                               \
166         ((type) == V4L2_BUF_TYPE_VIDEO_OUTPUT                   \
167          || (type) == V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE         \
168          || (type) == V4L2_BUF_TYPE_VIDEO_OVERLAY               \
169          || (type) == V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY        \
170          || (type) == V4L2_BUF_TYPE_VBI_OUTPUT                  \
171          || (type) == V4L2_BUF_TYPE_SLICED_VBI_OUTPUT)
172
173 enum v4l2_tuner_type {
174         V4L2_TUNER_RADIO             = 1,
175         V4L2_TUNER_ANALOG_TV         = 2,
176         V4L2_TUNER_DIGITAL_TV        = 3,
177 };
178
179 enum v4l2_memory {
180         V4L2_MEMORY_MMAP             = 1,
181         V4L2_MEMORY_USERPTR          = 2,
182         V4L2_MEMORY_OVERLAY          = 3,
183 };
184
185 /* see also http://vektor.theorem.ca/graphics/ycbcr/ */
186 enum v4l2_colorspace {
187         /* ITU-R 601 -- broadcast NTSC/PAL */
188         V4L2_COLORSPACE_SMPTE170M     = 1,
189
190         /* 1125-Line (US) HDTV */
191         V4L2_COLORSPACE_SMPTE240M     = 2,
192
193         /* HD and modern captures. */
194         V4L2_COLORSPACE_REC709        = 3,
195
196         /* broken BT878 extents (601, luma range 16-253 instead of 16-235) */
197         V4L2_COLORSPACE_BT878         = 4,
198
199         /* These should be useful.  Assume 601 extents. */
200         V4L2_COLORSPACE_470_SYSTEM_M  = 5,
201         V4L2_COLORSPACE_470_SYSTEM_BG = 6,
202
203         /* I know there will be cameras that send this.  So, this is
204          * unspecified chromaticities and full 0-255 on each of the
205          * Y'CbCr components
206          */
207         V4L2_COLORSPACE_JPEG          = 7,
208
209         /* For RGB colourspaces, this is probably a good start. */
210         V4L2_COLORSPACE_SRGB          = 8,
211 };
212
213 enum v4l2_priority {
214         V4L2_PRIORITY_UNSET       = 0,  /* not initialized */
215         V4L2_PRIORITY_BACKGROUND  = 1,
216         V4L2_PRIORITY_INTERACTIVE = 2,
217         V4L2_PRIORITY_RECORD      = 3,
218         V4L2_PRIORITY_DEFAULT     = V4L2_PRIORITY_INTERACTIVE,
219 };
220
221 struct v4l2_rect {
222         __s32   left;
223         __s32   top;
224         __s32   width;
225         __s32   height;
226 };
227
228 struct v4l2_fract {
229         __u32   numerator;
230         __u32   denominator;
231 };
232
233 /**
234   * struct v4l2_capability - Describes V4L2 device caps returned by VIDIOC_QUERYCAP
235   *
236   * @driver:       name of the driver module (e.g. "bttv")
237   * @card:         name of the card (e.g. "Hauppauge WinTV")
238   * @bus_info:     name of the bus (e.g. "PCI:" + pci_name(pci_dev) )
239   * @version:      KERNEL_VERSION
240   * @capabilities: capabilities of the physical device as a whole
241   * @device_caps:  capabilities accessed via this particular device (node)
242   * @reserved:     reserved fields for future extensions
243   */
244 struct v4l2_capability {
245         __u8    driver[16];
246         __u8    card[32];
247         __u8    bus_info[32];
248         __u32   version;
249         __u32   capabilities;
250         __u32   device_caps;
251         __u32   reserved[3];
252 };
253
254 /* Values for 'capabilities' field */
255 #define V4L2_CAP_VIDEO_CAPTURE          0x00000001  /* Is a video capture device */
256 #define V4L2_CAP_VIDEO_OUTPUT           0x00000002  /* Is a video output device */
257 #define V4L2_CAP_VIDEO_OVERLAY          0x00000004  /* Can do video overlay */
258 #define V4L2_CAP_VBI_CAPTURE            0x00000010  /* Is a raw VBI capture device */
259 #define V4L2_CAP_VBI_OUTPUT             0x00000020  /* Is a raw VBI output device */
260 #define V4L2_CAP_SLICED_VBI_CAPTURE     0x00000040  /* Is a sliced VBI capture device */
261 #define V4L2_CAP_SLICED_VBI_OUTPUT      0x00000080  /* Is a sliced VBI output device */
262 #define V4L2_CAP_RDS_CAPTURE            0x00000100  /* RDS data capture */
263 #define V4L2_CAP_VIDEO_OUTPUT_OVERLAY   0x00000200  /* Can do video output overlay */
264 #define V4L2_CAP_HW_FREQ_SEEK           0x00000400  /* Can do hardware frequency seek  */
265 #define V4L2_CAP_RDS_OUTPUT             0x00000800  /* Is an RDS encoder */
266
267 /* Is a video capture device that supports multiplanar formats */
268 #define V4L2_CAP_VIDEO_CAPTURE_MPLANE   0x00001000
269 /* Is a video output device that supports multiplanar formats */
270 #define V4L2_CAP_VIDEO_OUTPUT_MPLANE    0x00002000
271
272 #define V4L2_CAP_TUNER                  0x00010000  /* has a tuner */
273 #define V4L2_CAP_AUDIO                  0x00020000  /* has audio support */
274 #define V4L2_CAP_RADIO                  0x00040000  /* is a radio device */
275 #define V4L2_CAP_MODULATOR              0x00080000  /* has a modulator */
276
277 #define V4L2_CAP_READWRITE              0x01000000  /* read/write systemcalls */
278 #define V4L2_CAP_ASYNCIO                0x02000000  /* async I/O */
279 #define V4L2_CAP_STREAMING              0x04000000  /* streaming I/O ioctls */
280
281 #define V4L2_CAP_DEVICE_CAPS            0x80000000  /* sets device capabilities field */
282
283 /*
284  *      V I D E O   I M A G E   F O R M A T
285  */
286 struct v4l2_pix_format {
287         __u32                   width;
288         __u32                   height;
289         __u32                   pixelformat;
290         __u32                   field;          /* enum v4l2_field */
291         __u32                   bytesperline;   /* for padding, zero if unused */
292         __u32                   sizeimage;
293         __u32                   colorspace;     /* enum v4l2_colorspace */
294         __u32                   priv;           /* private data, depends on pixelformat */
295 };
296
297 /*      Pixel format         FOURCC                          depth  Description  */
298
299 /* RGB formats */
300 #define V4L2_PIX_FMT_RGB332  v4l2_fourcc('R', 'G', 'B', '1') /*  8  RGB-3-3-2     */
301 #define V4L2_PIX_FMT_RGB444  v4l2_fourcc('R', '4', '4', '4') /* 16  xxxxrrrr ggggbbbb */
302 #define V4L2_PIX_FMT_RGB555  v4l2_fourcc('R', 'G', 'B', 'O') /* 16  RGB-5-5-5     */
303 #define V4L2_PIX_FMT_RGB565  v4l2_fourcc('R', 'G', 'B', 'P') /* 16  RGB-5-6-5     */
304 #define V4L2_PIX_FMT_RGB555X v4l2_fourcc('R', 'G', 'B', 'Q') /* 16  RGB-5-5-5 BE  */
305 #define V4L2_PIX_FMT_RGB565X v4l2_fourcc('R', 'G', 'B', 'R') /* 16  RGB-5-6-5 BE  */
306 #define V4L2_PIX_FMT_BGR666  v4l2_fourcc('B', 'G', 'R', 'H') /* 18  BGR-6-6-6     */
307 #define V4L2_PIX_FMT_BGR24   v4l2_fourcc('B', 'G', 'R', '3') /* 24  BGR-8-8-8     */
308 #define V4L2_PIX_FMT_RGB24   v4l2_fourcc('R', 'G', 'B', '3') /* 24  RGB-8-8-8     */
309 #define V4L2_PIX_FMT_BGR32   v4l2_fourcc('B', 'G', 'R', '4') /* 32  BGR-8-8-8-8   */
310 #define V4L2_PIX_FMT_RGB32   v4l2_fourcc('R', 'G', 'B', '4') /* 32  RGB-8-8-8-8   */
311
312 /* Grey formats */
313 #define V4L2_PIX_FMT_GREY    v4l2_fourcc('G', 'R', 'E', 'Y') /*  8  Greyscale     */
314 #define V4L2_PIX_FMT_Y4      v4l2_fourcc('Y', '0', '4', ' ') /*  4  Greyscale     */
315 #define V4L2_PIX_FMT_Y6      v4l2_fourcc('Y', '0', '6', ' ') /*  6  Greyscale     */
316 #define V4L2_PIX_FMT_Y10     v4l2_fourcc('Y', '1', '0', ' ') /* 10  Greyscale     */
317 #define V4L2_PIX_FMT_Y12     v4l2_fourcc('Y', '1', '2', ' ') /* 12  Greyscale     */
318 #define V4L2_PIX_FMT_Y16     v4l2_fourcc('Y', '1', '6', ' ') /* 16  Greyscale     */
319
320 /* Grey bit-packed formats */
321 #define V4L2_PIX_FMT_Y10BPACK    v4l2_fourcc('Y', '1', '0', 'B') /* 10  Greyscale bit-packed */
322
323 /* Palette formats */
324 #define V4L2_PIX_FMT_PAL8    v4l2_fourcc('P', 'A', 'L', '8') /*  8  8-bit palette */
325
326 /* Luminance+Chrominance formats */
327 #define V4L2_PIX_FMT_YVU410  v4l2_fourcc('Y', 'V', 'U', '9') /*  9  YVU 4:1:0     */
328 #define V4L2_PIX_FMT_YVU420  v4l2_fourcc('Y', 'V', '1', '2') /* 12  YVU 4:2:0     */
329 #define V4L2_PIX_FMT_YUYV    v4l2_fourcc('Y', 'U', 'Y', 'V') /* 16  YUV 4:2:2     */
330 #define V4L2_PIX_FMT_YYUV    v4l2_fourcc('Y', 'Y', 'U', 'V') /* 16  YUV 4:2:2     */
331 #define V4L2_PIX_FMT_YVYU    v4l2_fourcc('Y', 'V', 'Y', 'U') /* 16 YVU 4:2:2 */
332 #define V4L2_PIX_FMT_UYVY    v4l2_fourcc('U', 'Y', 'V', 'Y') /* 16  YUV 4:2:2     */
333 #define V4L2_PIX_FMT_VYUY    v4l2_fourcc('V', 'Y', 'U', 'Y') /* 16  YUV 4:2:2     */
334 #define V4L2_PIX_FMT_YUV422P v4l2_fourcc('4', '2', '2', 'P') /* 16  YVU422 planar */
335 #define V4L2_PIX_FMT_YUV411P v4l2_fourcc('4', '1', '1', 'P') /* 16  YVU411 planar */
336 #define V4L2_PIX_FMT_Y41P    v4l2_fourcc('Y', '4', '1', 'P') /* 12  YUV 4:1:1     */
337 #define V4L2_PIX_FMT_YUV444  v4l2_fourcc('Y', '4', '4', '4') /* 16  xxxxyyyy uuuuvvvv */
338 #define V4L2_PIX_FMT_YUV555  v4l2_fourcc('Y', 'U', 'V', 'O') /* 16  YUV-5-5-5     */
339 #define V4L2_PIX_FMT_YUV565  v4l2_fourcc('Y', 'U', 'V', 'P') /* 16  YUV-5-6-5     */
340 #define V4L2_PIX_FMT_YUV32   v4l2_fourcc('Y', 'U', 'V', '4') /* 32  YUV-8-8-8-8   */
341 #define V4L2_PIX_FMT_YUV410  v4l2_fourcc('Y', 'U', 'V', '9') /*  9  YUV 4:1:0     */
342 #define V4L2_PIX_FMT_YUV420  v4l2_fourcc('Y', 'U', '1', '2') /* 12  YUV 4:2:0     */
343 #define V4L2_PIX_FMT_HI240   v4l2_fourcc('H', 'I', '2', '4') /*  8  8-bit color   */
344 #define V4L2_PIX_FMT_HM12    v4l2_fourcc('H', 'M', '1', '2') /*  8  YUV 4:2:0 16x16 macroblocks */
345 #define V4L2_PIX_FMT_M420    v4l2_fourcc('M', '4', '2', '0') /* 12  YUV 4:2:0 2 lines y, 1 line uv interleaved */
346
347 /* two planes -- one Y, one Cr + Cb interleaved  */
348 #define V4L2_PIX_FMT_NV12    v4l2_fourcc('N', 'V', '1', '2') /* 12  Y/CbCr 4:2:0  */
349 #define V4L2_PIX_FMT_NV21    v4l2_fourcc('N', 'V', '2', '1') /* 12  Y/CrCb 4:2:0  */
350 #define V4L2_PIX_FMT_NV16    v4l2_fourcc('N', 'V', '1', '6') /* 16  Y/CbCr 4:2:2  */
351 #define V4L2_PIX_FMT_NV61    v4l2_fourcc('N', 'V', '6', '1') /* 16  Y/CrCb 4:2:2  */
352 #define V4L2_PIX_FMT_NV24    v4l2_fourcc('N', 'V', '2', '4') /* 24  Y/CbCr 4:4:4  */
353 #define V4L2_PIX_FMT_NV42    v4l2_fourcc('N', 'V', '4', '2') /* 24  Y/CrCb 4:4:4  */
354
355 /* two non contiguous planes - one Y, one Cr + Cb interleaved  */
356 #define V4L2_PIX_FMT_NV12M   v4l2_fourcc('N', 'M', '1', '2') /* 12  Y/CbCr 4:2:0  */
357 #define V4L2_PIX_FMT_NV12MT  v4l2_fourcc('T', 'M', '1', '2') /* 12  Y/CbCr 4:2:0 64x32 macroblocks */
358
359 /* three non contiguous planes - Y, Cb, Cr */
360 #define V4L2_PIX_FMT_YUV420M v4l2_fourcc('Y', 'M', '1', '2') /* 12  YUV420 planar */
361
362 /* Bayer formats - see http://www.siliconimaging.com/RGB%20Bayer.htm */
363 #define V4L2_PIX_FMT_SBGGR8  v4l2_fourcc('B', 'A', '8', '1') /*  8  BGBG.. GRGR.. */
364 #define V4L2_PIX_FMT_SGBRG8  v4l2_fourcc('G', 'B', 'R', 'G') /*  8  GBGB.. RGRG.. */
365 #define V4L2_PIX_FMT_SGRBG8  v4l2_fourcc('G', 'R', 'B', 'G') /*  8  GRGR.. BGBG.. */
366 #define V4L2_PIX_FMT_SRGGB8  v4l2_fourcc('R', 'G', 'G', 'B') /*  8  RGRG.. GBGB.. */
367 #define V4L2_PIX_FMT_SBGGR10 v4l2_fourcc('B', 'G', '1', '0') /* 10  BGBG.. GRGR.. */
368 #define V4L2_PIX_FMT_SGBRG10 v4l2_fourcc('G', 'B', '1', '0') /* 10  GBGB.. RGRG.. */
369 #define V4L2_PIX_FMT_SGRBG10 v4l2_fourcc('B', 'A', '1', '0') /* 10  GRGR.. BGBG.. */
370 #define V4L2_PIX_FMT_SRGGB10 v4l2_fourcc('R', 'G', '1', '0') /* 10  RGRG.. GBGB.. */
371 #define V4L2_PIX_FMT_SBGGR12 v4l2_fourcc('B', 'G', '1', '2') /* 12  BGBG.. GRGR.. */
372 #define V4L2_PIX_FMT_SGBRG12 v4l2_fourcc('G', 'B', '1', '2') /* 12  GBGB.. RGRG.. */
373 #define V4L2_PIX_FMT_SGRBG12 v4l2_fourcc('B', 'A', '1', '2') /* 12  GRGR.. BGBG.. */
374 #define V4L2_PIX_FMT_SRGGB12 v4l2_fourcc('R', 'G', '1', '2') /* 12  RGRG.. GBGB.. */
375         /* 10bit raw bayer DPCM compressed to 8 bits */
376 #define V4L2_PIX_FMT_SBGGR10DPCM8 v4l2_fourcc('b', 'B', 'A', '8')
377 #define V4L2_PIX_FMT_SGBRG10DPCM8 v4l2_fourcc('b', 'G', 'A', '8')
378 #define V4L2_PIX_FMT_SGRBG10DPCM8 v4l2_fourcc('B', 'D', '1', '0')
379 #define V4L2_PIX_FMT_SRGGB10DPCM8 v4l2_fourcc('b', 'R', 'A', '8')
380         /*
381          * 10bit raw bayer, expanded to 16 bits
382          * xxxxrrrrrrrrrrxxxxgggggggggg xxxxggggggggggxxxxbbbbbbbbbb...
383          */
384 #define V4L2_PIX_FMT_SBGGR16 v4l2_fourcc('B', 'Y', 'R', '2') /* 16  BGBG.. GRGR.. */
385
386 /* compressed formats */
387 #define V4L2_PIX_FMT_MJPEG    v4l2_fourcc('M', 'J', 'P', 'G') /* Motion-JPEG   */
388 #define V4L2_PIX_FMT_JPEG     v4l2_fourcc('J', 'P', 'E', 'G') /* JFIF JPEG     */
389 #define V4L2_PIX_FMT_DV       v4l2_fourcc('d', 'v', 's', 'd') /* 1394          */
390 #define V4L2_PIX_FMT_MPEG     v4l2_fourcc('M', 'P', 'E', 'G') /* MPEG-1/2/4 Multiplexed */
391 #define V4L2_PIX_FMT_H264     v4l2_fourcc('H', '2', '6', '4') /* H264 with start codes */
392 #define V4L2_PIX_FMT_H264_NO_SC v4l2_fourcc('A', 'V', 'C', '1') /* H264 without start codes */
393 #define V4L2_PIX_FMT_H263     v4l2_fourcc('H', '2', '6', '3') /* H263          */
394 #define V4L2_PIX_FMT_MPEG1    v4l2_fourcc('M', 'P', 'G', '1') /* MPEG-1 ES     */
395 #define V4L2_PIX_FMT_MPEG2    v4l2_fourcc('M', 'P', 'G', '2') /* MPEG-2 ES     */
396 #define V4L2_PIX_FMT_MPEG4    v4l2_fourcc('M', 'P', 'G', '4') /* MPEG-4 ES     */
397 #define V4L2_PIX_FMT_XVID     v4l2_fourcc('X', 'V', 'I', 'D') /* Xvid           */
398 #define V4L2_PIX_FMT_VC1_ANNEX_G v4l2_fourcc('V', 'C', '1', 'G') /* SMPTE 421M Annex G compliant stream */
399 #define V4L2_PIX_FMT_VC1_ANNEX_L v4l2_fourcc('V', 'C', '1', 'L') /* SMPTE 421M Annex L compliant stream */
400
401 /*  Vendor-specific formats   */
402 #define V4L2_PIX_FMT_CPIA1    v4l2_fourcc('C', 'P', 'I', 'A') /* cpia1 YUV */
403 #define V4L2_PIX_FMT_WNVA     v4l2_fourcc('W', 'N', 'V', 'A') /* Winnov hw compress */
404 #define V4L2_PIX_FMT_SN9C10X  v4l2_fourcc('S', '9', '1', '0') /* SN9C10x compression */
405 #define V4L2_PIX_FMT_SN9C20X_I420 v4l2_fourcc('S', '9', '2', '0') /* SN9C20x YUV 4:2:0 */
406 #define V4L2_PIX_FMT_PWC1     v4l2_fourcc('P', 'W', 'C', '1') /* pwc older webcam */
407 #define V4L2_PIX_FMT_PWC2     v4l2_fourcc('P', 'W', 'C', '2') /* pwc newer webcam */
408 #define V4L2_PIX_FMT_ET61X251 v4l2_fourcc('E', '6', '2', '5') /* ET61X251 compression */
409 #define V4L2_PIX_FMT_SPCA501  v4l2_fourcc('S', '5', '0', '1') /* YUYV per line */
410 #define V4L2_PIX_FMT_SPCA505  v4l2_fourcc('S', '5', '0', '5') /* YYUV per line */
411 #define V4L2_PIX_FMT_SPCA508  v4l2_fourcc('S', '5', '0', '8') /* YUVY per line */
412 #define V4L2_PIX_FMT_SPCA561  v4l2_fourcc('S', '5', '6', '1') /* compressed GBRG bayer */
413 #define V4L2_PIX_FMT_PAC207   v4l2_fourcc('P', '2', '0', '7') /* compressed BGGR bayer */
414 #define V4L2_PIX_FMT_MR97310A v4l2_fourcc('M', '3', '1', '0') /* compressed BGGR bayer */
415 #define V4L2_PIX_FMT_JL2005BCD v4l2_fourcc('J', 'L', '2', '0') /* compressed RGGB bayer */
416 #define V4L2_PIX_FMT_SN9C2028 v4l2_fourcc('S', 'O', 'N', 'X') /* compressed GBRG bayer */
417 #define V4L2_PIX_FMT_SQ905C   v4l2_fourcc('9', '0', '5', 'C') /* compressed RGGB bayer */
418 #define V4L2_PIX_FMT_PJPG     v4l2_fourcc('P', 'J', 'P', 'G') /* Pixart 73xx JPEG */
419 #define V4L2_PIX_FMT_OV511    v4l2_fourcc('O', '5', '1', '1') /* ov511 JPEG */
420 #define V4L2_PIX_FMT_OV518    v4l2_fourcc('O', '5', '1', '8') /* ov518 JPEG */
421 #define V4L2_PIX_FMT_STV0680  v4l2_fourcc('S', '6', '8', '0') /* stv0680 bayer */
422 #define V4L2_PIX_FMT_TM6000   v4l2_fourcc('T', 'M', '6', '0') /* tm5600/tm60x0 */
423 #define V4L2_PIX_FMT_CIT_YYVYUY v4l2_fourcc('C', 'I', 'T', 'V') /* one line of Y then 1 line of VYUY */
424 #define V4L2_PIX_FMT_KONICA420  v4l2_fourcc('K', 'O', 'N', 'I') /* YUV420 planar in blocks of 256 pixels */
425 #define V4L2_PIX_FMT_JPGL       v4l2_fourcc('J', 'P', 'G', 'L') /* JPEG-Lite */
426 #define V4L2_PIX_FMT_SE401      v4l2_fourcc('S', '4', '0', '1') /* se401 janggu compressed rgb */
427
428 /*
429  *      F O R M A T   E N U M E R A T I O N
430  */
431 struct v4l2_fmtdesc {
432         __u32               index;             /* Format number      */
433         __u32               type;              /* enum v4l2_buf_type */
434         __u32               flags;
435         __u8                description[32];   /* Description string */
436         __u32               pixelformat;       /* Format fourcc      */
437         __u32               reserved[4];
438 };
439
440 #define V4L2_FMT_FLAG_COMPRESSED 0x0001
441 #define V4L2_FMT_FLAG_EMULATED   0x0002
442
443 #if 1
444         /* Experimental Frame Size and frame rate enumeration */
445 /*
446  *      F R A M E   S I Z E   E N U M E R A T I O N
447  */
448 enum v4l2_frmsizetypes {
449         V4L2_FRMSIZE_TYPE_DISCRETE      = 1,
450         V4L2_FRMSIZE_TYPE_CONTINUOUS    = 2,
451         V4L2_FRMSIZE_TYPE_STEPWISE      = 3,
452 };
453
454 struct v4l2_frmsize_discrete {
455         __u32                   width;          /* Frame width [pixel] */
456         __u32                   height;         /* Frame height [pixel] */
457 };
458
459 struct v4l2_frmsize_stepwise {
460         __u32                   min_width;      /* Minimum frame width [pixel] */
461         __u32                   max_width;      /* Maximum frame width [pixel] */
462         __u32                   step_width;     /* Frame width step size [pixel] */
463         __u32                   min_height;     /* Minimum frame height [pixel] */
464         __u32                   max_height;     /* Maximum frame height [pixel] */
465         __u32                   step_height;    /* Frame height step size [pixel] */
466 };
467
468 struct v4l2_frmsizeenum {
469         __u32                   index;          /* Frame size number */
470         __u32                   pixel_format;   /* Pixel format */
471         __u32                   type;           /* Frame size type the device supports. */
472
473         union {                                 /* Frame size */
474                 struct v4l2_frmsize_discrete    discrete;
475                 struct v4l2_frmsize_stepwise    stepwise;
476         };
477
478         __u32   reserved[2];                    /* Reserved space for future use */
479 };
480
481 /*
482  *      F R A M E   R A T E   E N U M E R A T I O N
483  */
484 enum v4l2_frmivaltypes {
485         V4L2_FRMIVAL_TYPE_DISCRETE      = 1,
486         V4L2_FRMIVAL_TYPE_CONTINUOUS    = 2,
487         V4L2_FRMIVAL_TYPE_STEPWISE      = 3,
488 };
489
490 struct v4l2_frmival_stepwise {
491         struct v4l2_fract       min;            /* Minimum frame interval [s] */
492         struct v4l2_fract       max;            /* Maximum frame interval [s] */
493         struct v4l2_fract       step;           /* Frame interval step size [s] */
494 };
495
496 struct v4l2_frmivalenum {
497         __u32                   index;          /* Frame format index */
498         __u32                   pixel_format;   /* Pixel format */
499         __u32                   width;          /* Frame width */
500         __u32                   height;         /* Frame height */
501         __u32                   type;           /* Frame interval type the device supports. */
502
503         union {                                 /* Frame interval */
504                 struct v4l2_fract               discrete;
505                 struct v4l2_frmival_stepwise    stepwise;
506         };
507
508         __u32   reserved[2];                    /* Reserved space for future use */
509 };
510 #endif
511
512 /*
513  *      T I M E C O D E
514  */
515 struct v4l2_timecode {
516         __u32   type;
517         __u32   flags;
518         __u8    frames;
519         __u8    seconds;
520         __u8    minutes;
521         __u8    hours;
522         __u8    userbits[4];
523 };
524
525 /*  Type  */
526 #define V4L2_TC_TYPE_24FPS              1
527 #define V4L2_TC_TYPE_25FPS              2
528 #define V4L2_TC_TYPE_30FPS              3
529 #define V4L2_TC_TYPE_50FPS              4
530 #define V4L2_TC_TYPE_60FPS              5
531
532 /*  Flags  */
533 #define V4L2_TC_FLAG_DROPFRAME          0x0001 /* "drop-frame" mode */
534 #define V4L2_TC_FLAG_COLORFRAME         0x0002
535 #define V4L2_TC_USERBITS_field          0x000C
536 #define V4L2_TC_USERBITS_USERDEFINED    0x0000
537 #define V4L2_TC_USERBITS_8BITCHARS      0x0008
538 /* The above is based on SMPTE timecodes */
539
540 struct v4l2_jpegcompression {
541         int quality;
542
543         int  APPn;              /* Number of APP segment to be written,
544                                  * must be 0..15 */
545         int  APP_len;           /* Length of data in JPEG APPn segment */
546         char APP_data[60];      /* Data in the JPEG APPn segment. */
547
548         int  COM_len;           /* Length of data in JPEG COM segment */
549         char COM_data[60];      /* Data in JPEG COM segment */
550
551         __u32 jpeg_markers;     /* Which markers should go into the JPEG
552                                  * output. Unless you exactly know what
553                                  * you do, leave them untouched.
554                                  * Inluding less markers will make the
555                                  * resulting code smaller, but there will
556                                  * be fewer applications which can read it.
557                                  * The presence of the APP and COM marker
558                                  * is influenced by APP_len and COM_len
559                                  * ONLY, not by this property! */
560
561 #define V4L2_JPEG_MARKER_DHT (1<<3)    /* Define Huffman Tables */
562 #define V4L2_JPEG_MARKER_DQT (1<<4)    /* Define Quantization Tables */
563 #define V4L2_JPEG_MARKER_DRI (1<<5)    /* Define Restart Interval */
564 #define V4L2_JPEG_MARKER_COM (1<<6)    /* Comment segment */
565 #define V4L2_JPEG_MARKER_APP (1<<7)    /* App segment, driver will
566                                         * allways use APP0 */
567 };
568
569 /*
570  *      M E M O R Y - M A P P I N G   B U F F E R S
571  */
572 struct v4l2_requestbuffers {
573         __u32                   count;
574         __u32                   type;           /* enum v4l2_buf_type */
575         __u32                   memory;         /* enum v4l2_memory */
576         __u32                   reserved[2];
577 };
578
579 /**
580  * struct v4l2_plane - plane info for multi-planar buffers
581  * @bytesused:          number of bytes occupied by data in the plane (payload)
582  * @length:             size of this plane (NOT the payload) in bytes
583  * @mem_offset:         when memory in the associated struct v4l2_buffer is
584  *                      V4L2_MEMORY_MMAP, equals the offset from the start of
585  *                      the device memory for this plane (or is a "cookie" that
586  *                      should be passed to mmap() called on the video node)
587  * @userptr:            when memory is V4L2_MEMORY_USERPTR, a userspace pointer
588  *                      pointing to this plane
589  * @data_offset:        offset in the plane to the start of data; usually 0,
590  *                      unless there is a header in front of the data
591  *
592  * Multi-planar buffers consist of one or more planes, e.g. an YCbCr buffer
593  * with two planes can have one plane for Y, and another for interleaved CbCr
594  * components. Each plane can reside in a separate memory buffer, or even in
595  * a completely separate memory node (e.g. in embedded devices).
596  */
597 struct v4l2_plane {
598         __u32                   bytesused;
599         __u32                   length;
600         union {
601                 __u32           mem_offset;
602                 unsigned long   userptr;
603         } m;
604         __u32                   data_offset;
605         __u32                   reserved[11];
606 };
607
608 /**
609  * struct v4l2_buffer - video buffer info
610  * @index:      id number of the buffer
611  * @type:       enum v4l2_buf_type; buffer type (type == *_MPLANE for
612  *              multiplanar buffers);
613  * @bytesused:  number of bytes occupied by data in the buffer (payload);
614  *              unused (set to 0) for multiplanar buffers
615  * @flags:      buffer informational flags
616  * @field:      enum v4l2_field; field order of the image in the buffer
617  * @timestamp:  frame timestamp
618  * @timecode:   frame timecode
619  * @sequence:   sequence count of this frame
620  * @memory:     enum v4l2_memory; the method, in which the actual video data is
621  *              passed
622  * @offset:     for non-multiplanar buffers with memory == V4L2_MEMORY_MMAP;
623  *              offset from the start of the device memory for this plane,
624  *              (or a "cookie" that should be passed to mmap() as offset)
625  * @userptr:    for non-multiplanar buffers with memory == V4L2_MEMORY_USERPTR;
626  *              a userspace pointer pointing to this buffer
627  * @planes:     for multiplanar buffers; userspace pointer to the array of plane
628  *              info structs for this buffer
629  * @length:     size in bytes of the buffer (NOT its payload) for single-plane
630  *              buffers (when type != *_MPLANE); number of elements in the
631  *              planes array for multi-plane buffers
632  * @input:      input number from which the video data has has been captured
633  *
634  * Contains data exchanged by application and driver using one of the Streaming
635  * I/O methods.
636  */
637 struct v4l2_buffer {
638         __u32                   index;
639         __u32                   type;
640         __u32                   bytesused;
641         __u32                   flags;
642         __u32                   field;
643         struct timeval          timestamp;
644         struct v4l2_timecode    timecode;
645         __u32                   sequence;
646
647         /* memory location */
648         __u32                   memory;
649         union {
650                 __u32           offset;
651                 unsigned long   userptr;
652                 struct v4l2_plane *planes;
653         } m;
654         __u32                   length;
655         __u32                   reserved2;
656         __u32                   reserved;
657 };
658
659 /*  Flags for 'flags' field */
660 #define V4L2_BUF_FLAG_MAPPED    0x0001  /* Buffer is mapped (flag) */
661 #define V4L2_BUF_FLAG_QUEUED    0x0002  /* Buffer is queued for processing */
662 #define V4L2_BUF_FLAG_DONE      0x0004  /* Buffer is ready */
663 #define V4L2_BUF_FLAG_KEYFRAME  0x0008  /* Image is a keyframe (I-frame) */
664 #define V4L2_BUF_FLAG_PFRAME    0x0010  /* Image is a P-frame */
665 #define V4L2_BUF_FLAG_BFRAME    0x0020  /* Image is a B-frame */
666 /* Buffer is ready, but the data contained within is corrupted. */
667 #define V4L2_BUF_FLAG_ERROR     0x0040
668 #define V4L2_BUF_FLAG_TIMECODE  0x0100  /* timecode field is valid */
669 #define V4L2_BUF_FLAG_PREPARED  0x0400  /* Buffer is prepared for queuing */
670 /* Cache handling flags */
671 #define V4L2_BUF_FLAG_NO_CACHE_INVALIDATE       0x0800
672 #define V4L2_BUF_FLAG_NO_CACHE_CLEAN            0x1000
673
674 /*
675  *      O V E R L A Y   P R E V I E W
676  */
677 struct v4l2_framebuffer {
678         __u32                   capability;
679         __u32                   flags;
680 /* FIXME: in theory we should pass something like PCI device + memory
681  * region + offset instead of some physical address */
682         void                    *base;
683         struct v4l2_pix_format  fmt;
684 };
685 /*  Flags for the 'capability' field. Read only */
686 #define V4L2_FBUF_CAP_EXTERNOVERLAY     0x0001
687 #define V4L2_FBUF_CAP_CHROMAKEY         0x0002
688 #define V4L2_FBUF_CAP_LIST_CLIPPING     0x0004
689 #define V4L2_FBUF_CAP_BITMAP_CLIPPING   0x0008
690 #define V4L2_FBUF_CAP_LOCAL_ALPHA       0x0010
691 #define V4L2_FBUF_CAP_GLOBAL_ALPHA      0x0020
692 #define V4L2_FBUF_CAP_LOCAL_INV_ALPHA   0x0040
693 #define V4L2_FBUF_CAP_SRC_CHROMAKEY     0x0080
694 /*  Flags for the 'flags' field. */
695 #define V4L2_FBUF_FLAG_PRIMARY          0x0001
696 #define V4L2_FBUF_FLAG_OVERLAY          0x0002
697 #define V4L2_FBUF_FLAG_CHROMAKEY        0x0004
698 #define V4L2_FBUF_FLAG_LOCAL_ALPHA      0x0008
699 #define V4L2_FBUF_FLAG_GLOBAL_ALPHA     0x0010
700 #define V4L2_FBUF_FLAG_LOCAL_INV_ALPHA  0x0020
701 #define V4L2_FBUF_FLAG_SRC_CHROMAKEY    0x0040
702
703 struct v4l2_clip {
704         struct v4l2_rect        c;
705         struct v4l2_clip        *next;
706 };
707
708 struct v4l2_window {
709         struct v4l2_rect        w;
710         __u32                   field;   /* enum v4l2_field */
711         __u32                   chromakey;
712         struct v4l2_clip        *clips;
713         __u32                   clipcount;
714         void                    *bitmap;
715         __u8                    global_alpha;
716 };
717
718 /*
719  *      C A P T U R E   P A R A M E T E R S
720  */
721 struct v4l2_captureparm {
722         __u32              capability;    /*  Supported modes */
723         __u32              capturemode;   /*  Current mode */
724         struct v4l2_fract  timeperframe;  /*  Time per frame in .1us units */
725         __u32              extendedmode;  /*  Driver-specific extensions */
726         __u32              readbuffers;   /*  # of buffers for read */
727         __u32              reserved[4];
728 };
729
730 /*  Flags for 'capability' and 'capturemode' fields */
731 #define V4L2_MODE_HIGHQUALITY   0x0001  /*  High quality imaging mode */
732 #define V4L2_CAP_TIMEPERFRAME   0x1000  /*  timeperframe field is supported */
733
734 struct v4l2_outputparm {
735         __u32              capability;   /*  Supported modes */
736         __u32              outputmode;   /*  Current mode */
737         struct v4l2_fract  timeperframe; /*  Time per frame in seconds */
738         __u32              extendedmode; /*  Driver-specific extensions */
739         __u32              writebuffers; /*  # of buffers for write */
740         __u32              reserved[4];
741 };
742
743 /*
744  *      I N P U T   I M A G E   C R O P P I N G
745  */
746 struct v4l2_cropcap {
747         __u32                   type;   /* enum v4l2_buf_type */
748         struct v4l2_rect        bounds;
749         struct v4l2_rect        defrect;
750         struct v4l2_fract       pixelaspect;
751 };
752
753 struct v4l2_crop {
754         __u32                   type;   /* enum v4l2_buf_type */
755         struct v4l2_rect        c;
756 };
757
758 /**
759  * struct v4l2_selection - selection info
760  * @type:       buffer type (do not use *_MPLANE types)
761  * @target:     Selection target, used to choose one of possible rectangles;
762  *              defined in v4l2-common.h; V4L2_SEL_TGT_* .
763  * @flags:      constraints flags, defined in v4l2-common.h; V4L2_SEL_FLAG_*.
764  * @r:          coordinates of selection window
765  * @reserved:   for future use, rounds structure size to 64 bytes, set to zero
766  *
767  * Hardware may use multiple helper windows to process a video stream.
768  * The structure is used to exchange this selection areas between
769  * an application and a driver.
770  */
771 struct v4l2_selection {
772         __u32                   type;
773         __u32                   target;
774         __u32                   flags;
775         struct v4l2_rect        r;
776         __u32                   reserved[9];
777 };
778
779
780 /*
781  *      A N A L O G   V I D E O   S T A N D A R D
782  */
783
784 typedef __u64 v4l2_std_id;
785
786 /* one bit for each */
787 #define V4L2_STD_PAL_B          ((v4l2_std_id)0x00000001)
788 #define V4L2_STD_PAL_B1         ((v4l2_std_id)0x00000002)
789 #define V4L2_STD_PAL_G          ((v4l2_std_id)0x00000004)
790 #define V4L2_STD_PAL_H          ((v4l2_std_id)0x00000008)
791 #define V4L2_STD_PAL_I          ((v4l2_std_id)0x00000010)
792 #define V4L2_STD_PAL_D          ((v4l2_std_id)0x00000020)
793 #define V4L2_STD_PAL_D1         ((v4l2_std_id)0x00000040)
794 #define V4L2_STD_PAL_K          ((v4l2_std_id)0x00000080)
795
796 #define V4L2_STD_PAL_M          ((v4l2_std_id)0x00000100)
797 #define V4L2_STD_PAL_N          ((v4l2_std_id)0x00000200)
798 #define V4L2_STD_PAL_Nc         ((v4l2_std_id)0x00000400)
799 #define V4L2_STD_PAL_60         ((v4l2_std_id)0x00000800)
800
801 #define V4L2_STD_NTSC_M         ((v4l2_std_id)0x00001000)       /* BTSC */
802 #define V4L2_STD_NTSC_M_JP      ((v4l2_std_id)0x00002000)       /* EIA-J */
803 #define V4L2_STD_NTSC_443       ((v4l2_std_id)0x00004000)
804 #define V4L2_STD_NTSC_M_KR      ((v4l2_std_id)0x00008000)       /* FM A2 */
805
806 #define V4L2_STD_SECAM_B        ((v4l2_std_id)0x00010000)
807 #define V4L2_STD_SECAM_D        ((v4l2_std_id)0x00020000)
808 #define V4L2_STD_SECAM_G        ((v4l2_std_id)0x00040000)
809 #define V4L2_STD_SECAM_H        ((v4l2_std_id)0x00080000)
810 #define V4L2_STD_SECAM_K        ((v4l2_std_id)0x00100000)
811 #define V4L2_STD_SECAM_K1       ((v4l2_std_id)0x00200000)
812 #define V4L2_STD_SECAM_L        ((v4l2_std_id)0x00400000)
813 #define V4L2_STD_SECAM_LC       ((v4l2_std_id)0x00800000)
814
815 /* ATSC/HDTV */
816 #define V4L2_STD_ATSC_8_VSB     ((v4l2_std_id)0x01000000)
817 #define V4L2_STD_ATSC_16_VSB    ((v4l2_std_id)0x02000000)
818
819 /* FIXME:
820    Although std_id is 64 bits, there is an issue on PPC32 architecture that
821    makes switch(__u64) to break. So, there's a hack on v4l2-common.c rounding
822    this value to 32 bits.
823    As, currently, the max value is for V4L2_STD_ATSC_16_VSB (30 bits wide),
824    it should work fine. However, if needed to add more than two standards,
825    v4l2-common.c should be fixed.
826  */
827
828 /*
829  * Some macros to merge video standards in order to make live easier for the
830  * drivers and V4L2 applications
831  */
832
833 /*
834  * "Common" NTSC/M - It should be noticed that V4L2_STD_NTSC_443 is
835  * Missing here.
836  */
837 #define V4L2_STD_NTSC           (V4L2_STD_NTSC_M        |\
838                                  V4L2_STD_NTSC_M_JP     |\
839                                  V4L2_STD_NTSC_M_KR)
840 /* Secam macros */
841 #define V4L2_STD_SECAM_DK       (V4L2_STD_SECAM_D       |\
842                                  V4L2_STD_SECAM_K       |\
843                                  V4L2_STD_SECAM_K1)
844 /* All Secam Standards */
845 #define V4L2_STD_SECAM          (V4L2_STD_SECAM_B       |\
846                                  V4L2_STD_SECAM_G       |\
847                                  V4L2_STD_SECAM_H       |\
848                                  V4L2_STD_SECAM_DK      |\
849                                  V4L2_STD_SECAM_L       |\
850                                  V4L2_STD_SECAM_LC)
851 /* PAL macros */
852 #define V4L2_STD_PAL_BG         (V4L2_STD_PAL_B         |\
853                                  V4L2_STD_PAL_B1        |\
854                                  V4L2_STD_PAL_G)
855 #define V4L2_STD_PAL_DK         (V4L2_STD_PAL_D         |\
856                                  V4L2_STD_PAL_D1        |\
857                                  V4L2_STD_PAL_K)
858 /*
859  * "Common" PAL - This macro is there to be compatible with the old
860  * V4L1 concept of "PAL": /BGDKHI.
861  * Several PAL standards are mising here: /M, /N and /Nc
862  */
863 #define V4L2_STD_PAL            (V4L2_STD_PAL_BG        |\
864                                  V4L2_STD_PAL_DK        |\
865                                  V4L2_STD_PAL_H         |\
866                                  V4L2_STD_PAL_I)
867 /* Chroma "agnostic" standards */
868 #define V4L2_STD_B              (V4L2_STD_PAL_B         |\
869                                  V4L2_STD_PAL_B1        |\
870                                  V4L2_STD_SECAM_B)
871 #define V4L2_STD_G              (V4L2_STD_PAL_G         |\
872                                  V4L2_STD_SECAM_G)
873 #define V4L2_STD_H              (V4L2_STD_PAL_H         |\
874                                  V4L2_STD_SECAM_H)
875 #define V4L2_STD_L              (V4L2_STD_SECAM_L       |\
876                                  V4L2_STD_SECAM_LC)
877 #define V4L2_STD_GH             (V4L2_STD_G             |\
878                                  V4L2_STD_H)
879 #define V4L2_STD_DK             (V4L2_STD_PAL_DK        |\
880                                  V4L2_STD_SECAM_DK)
881 #define V4L2_STD_BG             (V4L2_STD_B             |\
882                                  V4L2_STD_G)
883 #define V4L2_STD_MN             (V4L2_STD_PAL_M         |\
884                                  V4L2_STD_PAL_N         |\
885                                  V4L2_STD_PAL_Nc        |\
886                                  V4L2_STD_NTSC)
887
888 /* Standards where MTS/BTSC stereo could be found */
889 #define V4L2_STD_MTS            (V4L2_STD_NTSC_M        |\
890                                  V4L2_STD_PAL_M         |\
891                                  V4L2_STD_PAL_N         |\
892                                  V4L2_STD_PAL_Nc)
893
894 /* Standards for Countries with 60Hz Line frequency */
895 #define V4L2_STD_525_60         (V4L2_STD_PAL_M         |\
896                                  V4L2_STD_PAL_60        |\
897                                  V4L2_STD_NTSC          |\
898                                  V4L2_STD_NTSC_443)
899 /* Standards for Countries with 50Hz Line frequency */
900 #define V4L2_STD_625_50         (V4L2_STD_PAL           |\
901                                  V4L2_STD_PAL_N         |\
902                                  V4L2_STD_PAL_Nc        |\
903                                  V4L2_STD_SECAM)
904
905 #define V4L2_STD_ATSC           (V4L2_STD_ATSC_8_VSB    |\
906                                  V4L2_STD_ATSC_16_VSB)
907 /* Macros with none and all analog standards */
908 #define V4L2_STD_UNKNOWN        0
909 #define V4L2_STD_ALL            (V4L2_STD_525_60        |\
910                                  V4L2_STD_625_50)
911
912 struct v4l2_standard {
913         __u32                index;
914         v4l2_std_id          id;
915         __u8                 name[24];
916         struct v4l2_fract    frameperiod; /* Frames, not fields */
917         __u32                framelines;
918         __u32                reserved[4];
919 };
920
921 /* The DV Preset API is deprecated in favor of the DV Timings API.
922    New drivers shouldn't use this anymore! */
923
924 /*
925  *      V I D E O       T I M I N G S   D V     P R E S E T
926  */
927 struct v4l2_dv_preset {
928         __u32   preset;
929         __u32   reserved[4];
930 };
931
932 /*
933  *      D V     P R E S E T S   E N U M E R A T I O N
934  */
935 struct v4l2_dv_enum_preset {
936         __u32   index;
937         __u32   preset;
938         __u8    name[32]; /* Name of the preset timing */
939         __u32   width;
940         __u32   height;
941         __u32   reserved[4];
942 };
943
944 /*
945  *      D V     P R E S E T     V A L U E S
946  */
947 #define         V4L2_DV_INVALID         0
948 #define         V4L2_DV_480P59_94       1 /* BT.1362 */
949 #define         V4L2_DV_576P50          2 /* BT.1362 */
950 #define         V4L2_DV_720P24          3 /* SMPTE 296M */
951 #define         V4L2_DV_720P25          4 /* SMPTE 296M */
952 #define         V4L2_DV_720P30          5 /* SMPTE 296M */
953 #define         V4L2_DV_720P50          6 /* SMPTE 296M */
954 #define         V4L2_DV_720P59_94       7 /* SMPTE 274M */
955 #define         V4L2_DV_720P60          8 /* SMPTE 274M/296M */
956 #define         V4L2_DV_1080I29_97      9 /* BT.1120/ SMPTE 274M */
957 #define         V4L2_DV_1080I30         10 /* BT.1120/ SMPTE 274M */
958 #define         V4L2_DV_1080I25         11 /* BT.1120 */
959 #define         V4L2_DV_1080I50         12 /* SMPTE 296M */
960 #define         V4L2_DV_1080I60         13 /* SMPTE 296M */
961 #define         V4L2_DV_1080P24         14 /* SMPTE 296M */
962 #define         V4L2_DV_1080P25         15 /* SMPTE 296M */
963 #define         V4L2_DV_1080P30         16 /* SMPTE 296M */
964 #define         V4L2_DV_1080P50         17 /* BT.1120 */
965 #define         V4L2_DV_1080P60         18 /* BT.1120 */
966
967 /*
968  *      D V     B T     T I M I N G S
969  */
970
971 /** struct v4l2_bt_timings - BT.656/BT.1120 timing data
972  * @width:      total width of the active video in pixels
973  * @height:     total height of the active video in lines
974  * @interlaced: Interlaced or progressive
975  * @polarities: Positive or negative polarities
976  * @pixelclock: Pixel clock in HZ. Ex. 74.25MHz->74250000
977  * @hfrontporch:Horizontal front porch in pixels
978  * @hsync:      Horizontal Sync length in pixels
979  * @hbackporch: Horizontal back porch in pixels
980  * @vfrontporch:Vertical front porch in lines
981  * @vsync:      Vertical Sync length in lines
982  * @vbackporch: Vertical back porch in lines
983  * @il_vfrontporch:Vertical front porch for the even field
984  *              (aka field 2) of interlaced field formats
985  * @il_vsync:   Vertical Sync length for the even field
986  *              (aka field 2) of interlaced field formats
987  * @il_vbackporch:Vertical back porch for the even field
988  *              (aka field 2) of interlaced field formats
989  * @standards:  Standards the timing belongs to
990  * @flags:      Flags
991  * @reserved:   Reserved fields, must be zeroed.
992  *
993  * A note regarding vertical interlaced timings: height refers to the total
994  * height of the active video frame (= two fields). The blanking timings refer
995  * to the blanking of each field. So the height of the total frame is
996  * calculated as follows:
997  *
998  * tot_height = height + vfrontporch + vsync + vbackporch +
999  *                       il_vfrontporch + il_vsync + il_vbackporch
1000  *
1001  * The active height of each field is height / 2.
1002  */
1003 struct v4l2_bt_timings {
1004         __u32   width;
1005         __u32   height;
1006         __u32   interlaced;
1007         __u32   polarities;
1008         __u64   pixelclock;
1009         __u32   hfrontporch;
1010         __u32   hsync;
1011         __u32   hbackporch;
1012         __u32   vfrontporch;
1013         __u32   vsync;
1014         __u32   vbackporch;
1015         __u32   il_vfrontporch;
1016         __u32   il_vsync;
1017         __u32   il_vbackporch;
1018         __u32   standards;
1019         __u32   flags;
1020         __u32   reserved[14];
1021 } __attribute__ ((packed));
1022
1023 /* Interlaced or progressive format */
1024 #define V4L2_DV_PROGRESSIVE     0
1025 #define V4L2_DV_INTERLACED      1
1026
1027 /* Polarities. If bit is not set, it is assumed to be negative polarity */
1028 #define V4L2_DV_VSYNC_POS_POL   0x00000001
1029 #define V4L2_DV_HSYNC_POS_POL   0x00000002
1030
1031 /* Timings standards */
1032 #define V4L2_DV_BT_STD_CEA861   (1 << 0)  /* CEA-861 Digital TV Profile */
1033 #define V4L2_DV_BT_STD_DMT      (1 << 1)  /* VESA Discrete Monitor Timings */
1034 #define V4L2_DV_BT_STD_CVT      (1 << 2)  /* VESA Coordinated Video Timings */
1035 #define V4L2_DV_BT_STD_GTF      (1 << 3)  /* VESA Generalized Timings Formula */
1036
1037 /* Flags */
1038
1039 /* CVT/GTF specific: timing uses reduced blanking (CVT) or the 'Secondary
1040    GTF' curve (GTF). In both cases the horizontal and/or vertical blanking
1041    intervals are reduced, allowing a higher resolution over the same
1042    bandwidth. This is a read-only flag. */
1043 #define V4L2_DV_FL_REDUCED_BLANKING             (1 << 0)
1044 /* CEA-861 specific: set for CEA-861 formats with a framerate of a multiple
1045    of six. These formats can be optionally played at 1 / 1.001 speed.
1046    This is a read-only flag. */
1047 #define V4L2_DV_FL_CAN_REDUCE_FPS               (1 << 1)
1048 /* CEA-861 specific: only valid for video transmitters, the flag is cleared
1049    by receivers.
1050    If the framerate of the format is a multiple of six, then the pixelclock
1051    used to set up the transmitter is divided by 1.001 to make it compatible
1052    with 60 Hz based standards such as NTSC and PAL-M that use a framerate of
1053    29.97 Hz. Otherwise this flag is cleared. If the transmitter can't generate
1054    such frequencies, then the flag will also be cleared. */
1055 #define V4L2_DV_FL_REDUCED_FPS                  (1 << 2)
1056 /* Specific to interlaced formats: if set, then field 1 is really one half-line
1057    longer and field 2 is really one half-line shorter, so each field has
1058    exactly the same number of half-lines. Whether half-lines can be detected
1059    or used depends on the hardware. */
1060 #define V4L2_DV_FL_HALF_LINE                    (1 << 0)
1061
1062
1063 /** struct v4l2_dv_timings - DV timings
1064  * @type:       the type of the timings
1065  * @bt: BT656/1120 timings
1066  */
1067 struct v4l2_dv_timings {
1068         __u32 type;
1069         union {
1070                 struct v4l2_bt_timings  bt;
1071                 __u32   reserved[32];
1072         };
1073 } __attribute__ ((packed));
1074
1075 /* Values for the type field */
1076 #define V4L2_DV_BT_656_1120     0       /* BT.656/1120 timing type */
1077
1078
1079 /** struct v4l2_enum_dv_timings - DV timings enumeration
1080  * @index:      enumeration index
1081  * @reserved:   must be zeroed
1082  * @timings:    the timings for the given index
1083  */
1084 struct v4l2_enum_dv_timings {
1085         __u32 index;
1086         __u32 reserved[3];
1087         struct v4l2_dv_timings timings;
1088 };
1089
1090 /** struct v4l2_bt_timings_cap - BT.656/BT.1120 timing capabilities
1091  * @min_width:          width in pixels
1092  * @max_width:          width in pixels
1093  * @min_height:         height in lines
1094  * @max_height:         height in lines
1095  * @min_pixelclock:     Pixel clock in HZ. Ex. 74.25MHz->74250000
1096  * @max_pixelclock:     Pixel clock in HZ. Ex. 74.25MHz->74250000
1097  * @standards:          Supported standards
1098  * @capabilities:       Supported capabilities
1099  * @reserved:           Must be zeroed
1100  */
1101 struct v4l2_bt_timings_cap {
1102         __u32   min_width;
1103         __u32   max_width;
1104         __u32   min_height;
1105         __u32   max_height;
1106         __u64   min_pixelclock;
1107         __u64   max_pixelclock;
1108         __u32   standards;
1109         __u32   capabilities;
1110         __u32   reserved[16];
1111 } __attribute__ ((packed));
1112
1113 /* Supports interlaced formats */
1114 #define V4L2_DV_BT_CAP_INTERLACED       (1 << 0)
1115 /* Supports progressive formats */
1116 #define V4L2_DV_BT_CAP_PROGRESSIVE      (1 << 1)
1117 /* Supports CVT/GTF reduced blanking */
1118 #define V4L2_DV_BT_CAP_REDUCED_BLANKING (1 << 2)
1119 /* Supports custom formats */
1120 #define V4L2_DV_BT_CAP_CUSTOM           (1 << 3)
1121
1122 /** struct v4l2_dv_timings_cap - DV timings capabilities
1123  * @type:       the type of the timings (same as in struct v4l2_dv_timings)
1124  * @bt:         the BT656/1120 timings capabilities
1125  */
1126 struct v4l2_dv_timings_cap {
1127         __u32 type;
1128         __u32 reserved[3];
1129         union {
1130                 struct v4l2_bt_timings_cap bt;
1131                 __u32 raw_data[32];
1132         };
1133 };
1134
1135
1136 /*
1137  *      V I D E O   I N P U T S
1138  */
1139 struct v4l2_input {
1140         __u32        index;             /*  Which input */
1141         __u8         name[32];          /*  Label */
1142         __u32        type;              /*  Type of input */
1143         __u32        audioset;          /*  Associated audios (bitfield) */
1144         __u32        tuner;             /*  enum v4l2_tuner_type */
1145         v4l2_std_id  std;
1146         __u32        status;
1147         __u32        capabilities;
1148         __u32        reserved[3];
1149 };
1150
1151 /*  Values for the 'type' field */
1152 #define V4L2_INPUT_TYPE_TUNER           1
1153 #define V4L2_INPUT_TYPE_CAMERA          2
1154
1155 /* field 'status' - general */
1156 #define V4L2_IN_ST_NO_POWER    0x00000001  /* Attached device is off */
1157 #define V4L2_IN_ST_NO_SIGNAL   0x00000002
1158 #define V4L2_IN_ST_NO_COLOR    0x00000004
1159
1160 /* field 'status' - sensor orientation */
1161 /* If sensor is mounted upside down set both bits */
1162 #define V4L2_IN_ST_HFLIP       0x00000010 /* Frames are flipped horizontally */
1163 #define V4L2_IN_ST_VFLIP       0x00000020 /* Frames are flipped vertically */
1164
1165 /* field 'status' - analog */
1166 #define V4L2_IN_ST_NO_H_LOCK   0x00000100  /* No horizontal sync lock */
1167 #define V4L2_IN_ST_COLOR_KILL  0x00000200  /* Color killer is active */
1168
1169 /* field 'status' - digital */
1170 #define V4L2_IN_ST_NO_SYNC     0x00010000  /* No synchronization lock */
1171 #define V4L2_IN_ST_NO_EQU      0x00020000  /* No equalizer lock */
1172 #define V4L2_IN_ST_NO_CARRIER  0x00040000  /* Carrier recovery failed */
1173
1174 /* field 'status' - VCR and set-top box */
1175 #define V4L2_IN_ST_MACROVISION 0x01000000  /* Macrovision detected */
1176 #define V4L2_IN_ST_NO_ACCESS   0x02000000  /* Conditional access denied */
1177 #define V4L2_IN_ST_VTR         0x04000000  /* VTR time constant */
1178
1179 /* capabilities flags */
1180 #define V4L2_IN_CAP_PRESETS             0x00000001 /* Supports S_DV_PRESET */
1181 #define V4L2_IN_CAP_CUSTOM_TIMINGS      0x00000002 /* Supports S_DV_TIMINGS */
1182 #define V4L2_IN_CAP_STD                 0x00000004 /* Supports S_STD */
1183
1184 /*
1185  *      V I D E O   O U T P U T S
1186  */
1187 struct v4l2_output {
1188         __u32        index;             /*  Which output */
1189         __u8         name[32];          /*  Label */
1190         __u32        type;              /*  Type of output */
1191         __u32        audioset;          /*  Associated audios (bitfield) */
1192         __u32        modulator;         /*  Associated modulator */
1193         v4l2_std_id  std;
1194         __u32        capabilities;
1195         __u32        reserved[3];
1196 };
1197 /*  Values for the 'type' field */
1198 #define V4L2_OUTPUT_TYPE_MODULATOR              1
1199 #define V4L2_OUTPUT_TYPE_ANALOG                 2
1200 #define V4L2_OUTPUT_TYPE_ANALOGVGAOVERLAY       3
1201
1202 /* capabilities flags */
1203 #define V4L2_OUT_CAP_PRESETS            0x00000001 /* Supports S_DV_PRESET */
1204 #define V4L2_OUT_CAP_CUSTOM_TIMINGS     0x00000002 /* Supports S_DV_TIMINGS */
1205 #define V4L2_OUT_CAP_STD                0x00000004 /* Supports S_STD */
1206
1207 /*
1208  *      C O N T R O L S
1209  */
1210 struct v4l2_control {
1211         __u32                id;
1212         __s32                value;
1213 };
1214
1215 struct v4l2_ext_control {
1216         __u32 id;
1217         __u32 size;
1218         __u32 reserved2[1];
1219         union {
1220                 __s32 value;
1221                 __s64 value64;
1222                 char *string;
1223         };
1224 } __attribute__ ((packed));
1225
1226 struct v4l2_ext_controls {
1227         __u32 ctrl_class;
1228         __u32 count;
1229         __u32 error_idx;
1230         __u32 reserved[2];
1231         struct v4l2_ext_control *controls;
1232 };
1233
1234 /*  Values for ctrl_class field */
1235 #define V4L2_CTRL_CLASS_USER 0x00980000 /* Old-style 'user' controls */
1236 #define V4L2_CTRL_CLASS_MPEG 0x00990000 /* MPEG-compression controls */
1237 #define V4L2_CTRL_CLASS_CAMERA 0x009a0000       /* Camera class controls */
1238 #define V4L2_CTRL_CLASS_FM_TX 0x009b0000        /* FM Modulator control class */
1239 #define V4L2_CTRL_CLASS_FLASH 0x009c0000        /* Camera flash controls */
1240 #define V4L2_CTRL_CLASS_JPEG 0x009d0000         /* JPEG-compression controls */
1241 #define V4L2_CTRL_CLASS_IMAGE_SOURCE 0x009e0000 /* Image source controls */
1242 #define V4L2_CTRL_CLASS_IMAGE_PROC 0x009f0000   /* Image processing controls */
1243
1244 #define V4L2_CTRL_ID_MASK         (0x0fffffff)
1245 #define V4L2_CTRL_ID2CLASS(id)    ((id) & 0x0fff0000UL)
1246 #define V4L2_CTRL_DRIVER_PRIV(id) (((id) & 0xffff) >= 0x1000)
1247
1248 enum v4l2_ctrl_type {
1249         V4L2_CTRL_TYPE_INTEGER       = 1,
1250         V4L2_CTRL_TYPE_BOOLEAN       = 2,
1251         V4L2_CTRL_TYPE_MENU          = 3,
1252         V4L2_CTRL_TYPE_BUTTON        = 4,
1253         V4L2_CTRL_TYPE_INTEGER64     = 5,
1254         V4L2_CTRL_TYPE_CTRL_CLASS    = 6,
1255         V4L2_CTRL_TYPE_STRING        = 7,
1256         V4L2_CTRL_TYPE_BITMASK       = 8,
1257         V4L2_CTRL_TYPE_INTEGER_MENU = 9,
1258 };
1259
1260 /*  Used in the VIDIOC_QUERYCTRL ioctl for querying controls */
1261 struct v4l2_queryctrl {
1262         __u32                id;
1263         __u32                type;      /* enum v4l2_ctrl_type */
1264         __u8                 name[32];  /* Whatever */
1265         __s32                minimum;   /* Note signedness */
1266         __s32                maximum;
1267         __s32                step;
1268         __s32                default_value;
1269         __u32                flags;
1270         __u32                reserved[2];
1271 };
1272
1273 /*  Used in the VIDIOC_QUERYMENU ioctl for querying menu items */
1274 struct v4l2_querymenu {
1275         __u32           id;
1276         __u32           index;
1277         union {
1278                 __u8    name[32];       /* Whatever */
1279                 __s64   value;
1280         };
1281         __u32           reserved;
1282 } __attribute__ ((packed));
1283
1284 /*  Control flags  */
1285 #define V4L2_CTRL_FLAG_DISABLED         0x0001
1286 #define V4L2_CTRL_FLAG_GRABBED          0x0002
1287 #define V4L2_CTRL_FLAG_READ_ONLY        0x0004
1288 #define V4L2_CTRL_FLAG_UPDATE           0x0008
1289 #define V4L2_CTRL_FLAG_INACTIVE         0x0010
1290 #define V4L2_CTRL_FLAG_SLIDER           0x0020
1291 #define V4L2_CTRL_FLAG_WRITE_ONLY       0x0040
1292 #define V4L2_CTRL_FLAG_VOLATILE         0x0080
1293
1294 /*  Query flag, to be ORed with the control ID */
1295 #define V4L2_CTRL_FLAG_NEXT_CTRL        0x80000000
1296
1297 /*  User-class control IDs defined by V4L2 */
1298 #define V4L2_CID_MAX_CTRLS              1024
1299 #define V4L2_CID_BASE                   (V4L2_CTRL_CLASS_USER | 0x900)
1300 #define V4L2_CID_USER_BASE              V4L2_CID_BASE
1301 /*  IDs reserved for driver specific controls */
1302 #define V4L2_CID_PRIVATE_BASE           0x08000000
1303
1304 #define V4L2_CID_USER_CLASS             (V4L2_CTRL_CLASS_USER | 1)
1305 #define V4L2_CID_BRIGHTNESS             (V4L2_CID_BASE+0)
1306 #define V4L2_CID_CONTRAST               (V4L2_CID_BASE+1)
1307 #define V4L2_CID_SATURATION             (V4L2_CID_BASE+2)
1308 #define V4L2_CID_HUE                    (V4L2_CID_BASE+3)
1309 #define V4L2_CID_AUDIO_VOLUME           (V4L2_CID_BASE+5)
1310 #define V4L2_CID_AUDIO_BALANCE          (V4L2_CID_BASE+6)
1311 #define V4L2_CID_AUDIO_BASS             (V4L2_CID_BASE+7)
1312 #define V4L2_CID_AUDIO_TREBLE           (V4L2_CID_BASE+8)
1313 #define V4L2_CID_AUDIO_MUTE             (V4L2_CID_BASE+9)
1314 #define V4L2_CID_AUDIO_LOUDNESS         (V4L2_CID_BASE+10)
1315 #define V4L2_CID_BLACK_LEVEL            (V4L2_CID_BASE+11) /* Deprecated */
1316 #define V4L2_CID_AUTO_WHITE_BALANCE     (V4L2_CID_BASE+12)
1317 #define V4L2_CID_DO_WHITE_BALANCE       (V4L2_CID_BASE+13)
1318 #define V4L2_CID_RED_BALANCE            (V4L2_CID_BASE+14)
1319 #define V4L2_CID_BLUE_BALANCE           (V4L2_CID_BASE+15)
1320 #define V4L2_CID_GAMMA                  (V4L2_CID_BASE+16)
1321 #define V4L2_CID_WHITENESS              (V4L2_CID_GAMMA) /* Deprecated */
1322 #define V4L2_CID_EXPOSURE               (V4L2_CID_BASE+17)
1323 #define V4L2_CID_AUTOGAIN               (V4L2_CID_BASE+18)
1324 #define V4L2_CID_GAIN                   (V4L2_CID_BASE+19)
1325 #define V4L2_CID_HFLIP                  (V4L2_CID_BASE+20)
1326 #define V4L2_CID_VFLIP                  (V4L2_CID_BASE+21)
1327
1328 /* Deprecated; use V4L2_CID_PAN_RESET and V4L2_CID_TILT_RESET */
1329 #define V4L2_CID_HCENTER                (V4L2_CID_BASE+22)
1330 #define V4L2_CID_VCENTER                (V4L2_CID_BASE+23)
1331
1332 #define V4L2_CID_POWER_LINE_FREQUENCY   (V4L2_CID_BASE+24)
1333 enum v4l2_power_line_frequency {
1334         V4L2_CID_POWER_LINE_FREQUENCY_DISABLED  = 0,
1335         V4L2_CID_POWER_LINE_FREQUENCY_50HZ      = 1,
1336         V4L2_CID_POWER_LINE_FREQUENCY_60HZ      = 2,
1337         V4L2_CID_POWER_LINE_FREQUENCY_AUTO      = 3,
1338 };
1339 #define V4L2_CID_HUE_AUTO                       (V4L2_CID_BASE+25)
1340 #define V4L2_CID_WHITE_BALANCE_TEMPERATURE      (V4L2_CID_BASE+26)
1341 #define V4L2_CID_SHARPNESS                      (V4L2_CID_BASE+27)
1342 #define V4L2_CID_BACKLIGHT_COMPENSATION         (V4L2_CID_BASE+28)
1343 #define V4L2_CID_CHROMA_AGC                     (V4L2_CID_BASE+29)
1344 #define V4L2_CID_COLOR_KILLER                   (V4L2_CID_BASE+30)
1345 #define V4L2_CID_COLORFX                        (V4L2_CID_BASE+31)
1346 enum v4l2_colorfx {
1347         V4L2_COLORFX_NONE                       = 0,
1348         V4L2_COLORFX_BW                         = 1,
1349         V4L2_COLORFX_SEPIA                      = 2,
1350         V4L2_COLORFX_NEGATIVE                   = 3,
1351         V4L2_COLORFX_EMBOSS                     = 4,
1352         V4L2_COLORFX_SKETCH                     = 5,
1353         V4L2_COLORFX_SKY_BLUE                   = 6,
1354         V4L2_COLORFX_GRASS_GREEN                = 7,
1355         V4L2_COLORFX_SKIN_WHITEN                = 8,
1356         V4L2_COLORFX_VIVID                      = 9,
1357         V4L2_COLORFX_AQUA                       = 10,
1358         V4L2_COLORFX_ART_FREEZE                 = 11,
1359         V4L2_COLORFX_SILHOUETTE                 = 12,
1360         V4L2_COLORFX_SOLARIZATION               = 13,
1361         V4L2_COLORFX_ANTIQUE                    = 14,
1362         V4L2_COLORFX_SET_CBCR                   = 15,
1363 };
1364 #define V4L2_CID_AUTOBRIGHTNESS                 (V4L2_CID_BASE+32)
1365 #define V4L2_CID_BAND_STOP_FILTER               (V4L2_CID_BASE+33)
1366
1367 #define V4L2_CID_ROTATE                         (V4L2_CID_BASE+34)
1368 #define V4L2_CID_BG_COLOR                       (V4L2_CID_BASE+35)
1369
1370 #define V4L2_CID_CHROMA_GAIN                    (V4L2_CID_BASE+36)
1371
1372 #define V4L2_CID_ILLUMINATORS_1                 (V4L2_CID_BASE+37)
1373 #define V4L2_CID_ILLUMINATORS_2                 (V4L2_CID_BASE+38)
1374
1375 #define V4L2_CID_MIN_BUFFERS_FOR_CAPTURE        (V4L2_CID_BASE+39)
1376 #define V4L2_CID_MIN_BUFFERS_FOR_OUTPUT         (V4L2_CID_BASE+40)
1377
1378 #define V4L2_CID_ALPHA_COMPONENT                (V4L2_CID_BASE+41)
1379 #define V4L2_CID_COLORFX_CBCR                   (V4L2_CID_BASE+42)
1380
1381 /* last CID + 1 */
1382 #define V4L2_CID_LASTP1                         (V4L2_CID_BASE+43)
1383
1384 /*  MPEG-class control IDs defined by V4L2 */
1385 #define V4L2_CID_MPEG_BASE                      (V4L2_CTRL_CLASS_MPEG | 0x900)
1386 #define V4L2_CID_MPEG_CLASS                     (V4L2_CTRL_CLASS_MPEG | 1)
1387
1388 /*  MPEG streams, specific to multiplexed streams */
1389 #define V4L2_CID_MPEG_STREAM_TYPE               (V4L2_CID_MPEG_BASE+0)
1390 enum v4l2_mpeg_stream_type {
1391         V4L2_MPEG_STREAM_TYPE_MPEG2_PS   = 0, /* MPEG-2 program stream */
1392         V4L2_MPEG_STREAM_TYPE_MPEG2_TS   = 1, /* MPEG-2 transport stream */
1393         V4L2_MPEG_STREAM_TYPE_MPEG1_SS   = 2, /* MPEG-1 system stream */
1394         V4L2_MPEG_STREAM_TYPE_MPEG2_DVD  = 3, /* MPEG-2 DVD-compatible stream */
1395         V4L2_MPEG_STREAM_TYPE_MPEG1_VCD  = 4, /* MPEG-1 VCD-compatible stream */
1396         V4L2_MPEG_STREAM_TYPE_MPEG2_SVCD = 5, /* MPEG-2 SVCD-compatible stream */
1397 };
1398 #define V4L2_CID_MPEG_STREAM_PID_PMT            (V4L2_CID_MPEG_BASE+1)
1399 #define V4L2_CID_MPEG_STREAM_PID_AUDIO          (V4L2_CID_MPEG_BASE+2)
1400 #define V4L2_CID_MPEG_STREAM_PID_VIDEO          (V4L2_CID_MPEG_BASE+3)
1401 #define V4L2_CID_MPEG_STREAM_PID_PCR            (V4L2_CID_MPEG_BASE+4)
1402 #define V4L2_CID_MPEG_STREAM_PES_ID_AUDIO       (V4L2_CID_MPEG_BASE+5)
1403 #define V4L2_CID_MPEG_STREAM_PES_ID_VIDEO       (V4L2_CID_MPEG_BASE+6)
1404 #define V4L2_CID_MPEG_STREAM_VBI_FMT            (V4L2_CID_MPEG_BASE+7)
1405 enum v4l2_mpeg_stream_vbi_fmt {
1406         V4L2_MPEG_STREAM_VBI_FMT_NONE = 0,  /* No VBI in the MPEG stream */
1407         V4L2_MPEG_STREAM_VBI_FMT_IVTV = 1,  /* VBI in private packets, IVTV format */
1408 };
1409
1410 /*  MPEG audio controls specific to multiplexed streams  */
1411 #define V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ       (V4L2_CID_MPEG_BASE+100)
1412 enum v4l2_mpeg_audio_sampling_freq {
1413         V4L2_MPEG_AUDIO_SAMPLING_FREQ_44100 = 0,
1414         V4L2_MPEG_AUDIO_SAMPLING_FREQ_48000 = 1,
1415         V4L2_MPEG_AUDIO_SAMPLING_FREQ_32000 = 2,
1416 };
1417 #define V4L2_CID_MPEG_AUDIO_ENCODING            (V4L2_CID_MPEG_BASE+101)
1418 enum v4l2_mpeg_audio_encoding {
1419         V4L2_MPEG_AUDIO_ENCODING_LAYER_1 = 0,
1420         V4L2_MPEG_AUDIO_ENCODING_LAYER_2 = 1,
1421         V4L2_MPEG_AUDIO_ENCODING_LAYER_3 = 2,
1422         V4L2_MPEG_AUDIO_ENCODING_AAC     = 3,
1423         V4L2_MPEG_AUDIO_ENCODING_AC3     = 4,
1424 };
1425 #define V4L2_CID_MPEG_AUDIO_L1_BITRATE          (V4L2_CID_MPEG_BASE+102)
1426 enum v4l2_mpeg_audio_l1_bitrate {
1427         V4L2_MPEG_AUDIO_L1_BITRATE_32K  = 0,
1428         V4L2_MPEG_AUDIO_L1_BITRATE_64K  = 1,
1429         V4L2_MPEG_AUDIO_L1_BITRATE_96K  = 2,
1430         V4L2_MPEG_AUDIO_L1_BITRATE_128K = 3,
1431         V4L2_MPEG_AUDIO_L1_BITRATE_160K = 4,
1432         V4L2_MPEG_AUDIO_L1_BITRATE_192K = 5,
1433         V4L2_MPEG_AUDIO_L1_BITRATE_224K = 6,
1434         V4L2_MPEG_AUDIO_L1_BITRATE_256K = 7,
1435         V4L2_MPEG_AUDIO_L1_BITRATE_288K = 8,
1436         V4L2_MPEG_AUDIO_L1_BITRATE_320K = 9,
1437         V4L2_MPEG_AUDIO_L1_BITRATE_352K = 10,
1438         V4L2_MPEG_AUDIO_L1_BITRATE_384K = 11,
1439         V4L2_MPEG_AUDIO_L1_BITRATE_416K = 12,
1440         V4L2_MPEG_AUDIO_L1_BITRATE_448K = 13,
1441 };
1442 #define V4L2_CID_MPEG_AUDIO_L2_BITRATE          (V4L2_CID_MPEG_BASE+103)
1443 enum v4l2_mpeg_audio_l2_bitrate {
1444         V4L2_MPEG_AUDIO_L2_BITRATE_32K  = 0,
1445         V4L2_MPEG_AUDIO_L2_BITRATE_48K  = 1,
1446         V4L2_MPEG_AUDIO_L2_BITRATE_56K  = 2,
1447         V4L2_MPEG_AUDIO_L2_BITRATE_64K  = 3,
1448         V4L2_MPEG_AUDIO_L2_BITRATE_80K  = 4,
1449         V4L2_MPEG_AUDIO_L2_BITRATE_96K  = 5,
1450         V4L2_MPEG_AUDIO_L2_BITRATE_112K = 6,
1451         V4L2_MPEG_AUDIO_L2_BITRATE_128K = 7,
1452         V4L2_MPEG_AUDIO_L2_BITRATE_160K = 8,
1453         V4L2_MPEG_AUDIO_L2_BITRATE_192K = 9,
1454         V4L2_MPEG_AUDIO_L2_BITRATE_224K = 10,
1455         V4L2_MPEG_AUDIO_L2_BITRATE_256K = 11,
1456         V4L2_MPEG_AUDIO_L2_BITRATE_320K = 12,
1457         V4L2_MPEG_AUDIO_L2_BITRATE_384K = 13,
1458 };
1459 #define V4L2_CID_MPEG_AUDIO_L3_BITRATE          (V4L2_CID_MPEG_BASE+104)
1460 enum v4l2_mpeg_audio_l3_bitrate {
1461         V4L2_MPEG_AUDIO_L3_BITRATE_32K  = 0,
1462         V4L2_MPEG_AUDIO_L3_BITRATE_40K  = 1,
1463         V4L2_MPEG_AUDIO_L3_BITRATE_48K  = 2,
1464         V4L2_MPEG_AUDIO_L3_BITRATE_56K  = 3,
1465         V4L2_MPEG_AUDIO_L3_BITRATE_64K  = 4,
1466         V4L2_MPEG_AUDIO_L3_BITRATE_80K  = 5,
1467         V4L2_MPEG_AUDIO_L3_BITRATE_96K  = 6,
1468         V4L2_MPEG_AUDIO_L3_BITRATE_112K = 7,
1469         V4L2_MPEG_AUDIO_L3_BITRATE_128K = 8,
1470         V4L2_MPEG_AUDIO_L3_BITRATE_160K = 9,
1471         V4L2_MPEG_AUDIO_L3_BITRATE_192K = 10,
1472         V4L2_MPEG_AUDIO_L3_BITRATE_224K = 11,
1473         V4L2_MPEG_AUDIO_L3_BITRATE_256K = 12,
1474         V4L2_MPEG_AUDIO_L3_BITRATE_320K = 13,
1475 };
1476 #define V4L2_CID_MPEG_AUDIO_MODE                (V4L2_CID_MPEG_BASE+105)
1477 enum v4l2_mpeg_audio_mode {
1478         V4L2_MPEG_AUDIO_MODE_STEREO       = 0,
1479         V4L2_MPEG_AUDIO_MODE_JOINT_STEREO = 1,
1480         V4L2_MPEG_AUDIO_MODE_DUAL         = 2,
1481         V4L2_MPEG_AUDIO_MODE_MONO         = 3,
1482 };
1483 #define V4L2_CID_MPEG_AUDIO_MODE_EXTENSION      (V4L2_CID_MPEG_BASE+106)
1484 enum v4l2_mpeg_audio_mode_extension {
1485         V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_4  = 0,
1486         V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_8  = 1,
1487         V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_12 = 2,
1488         V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_16 = 3,
1489 };
1490 #define V4L2_CID_MPEG_AUDIO_EMPHASIS            (V4L2_CID_MPEG_BASE+107)
1491 enum v4l2_mpeg_audio_emphasis {
1492         V4L2_MPEG_AUDIO_EMPHASIS_NONE         = 0,
1493         V4L2_MPEG_AUDIO_EMPHASIS_50_DIV_15_uS = 1,
1494         V4L2_MPEG_AUDIO_EMPHASIS_CCITT_J17    = 2,
1495 };
1496 #define V4L2_CID_MPEG_AUDIO_CRC                 (V4L2_CID_MPEG_BASE+108)
1497 enum v4l2_mpeg_audio_crc {
1498         V4L2_MPEG_AUDIO_CRC_NONE  = 0,
1499         V4L2_MPEG_AUDIO_CRC_CRC16 = 1,
1500 };
1501 #define V4L2_CID_MPEG_AUDIO_MUTE                (V4L2_CID_MPEG_BASE+109)
1502 #define V4L2_CID_MPEG_AUDIO_AAC_BITRATE         (V4L2_CID_MPEG_BASE+110)
1503 #define V4L2_CID_MPEG_AUDIO_AC3_BITRATE         (V4L2_CID_MPEG_BASE+111)
1504 enum v4l2_mpeg_audio_ac3_bitrate {
1505         V4L2_MPEG_AUDIO_AC3_BITRATE_32K  = 0,
1506         V4L2_MPEG_AUDIO_AC3_BITRATE_40K  = 1,
1507         V4L2_MPEG_AUDIO_AC3_BITRATE_48K  = 2,
1508         V4L2_MPEG_AUDIO_AC3_BITRATE_56K  = 3,
1509         V4L2_MPEG_AUDIO_AC3_BITRATE_64K  = 4,
1510         V4L2_MPEG_AUDIO_AC3_BITRATE_80K  = 5,
1511         V4L2_MPEG_AUDIO_AC3_BITRATE_96K  = 6,
1512         V4L2_MPEG_AUDIO_AC3_BITRATE_112K = 7,
1513         V4L2_MPEG_AUDIO_AC3_BITRATE_128K = 8,
1514         V4L2_MPEG_AUDIO_AC3_BITRATE_160K = 9,
1515         V4L2_MPEG_AUDIO_AC3_BITRATE_192K = 10,
1516         V4L2_MPEG_AUDIO_AC3_BITRATE_224K = 11,
1517         V4L2_MPEG_AUDIO_AC3_BITRATE_256K = 12,
1518         V4L2_MPEG_AUDIO_AC3_BITRATE_320K = 13,
1519         V4L2_MPEG_AUDIO_AC3_BITRATE_384K = 14,
1520         V4L2_MPEG_AUDIO_AC3_BITRATE_448K = 15,
1521         V4L2_MPEG_AUDIO_AC3_BITRATE_512K = 16,
1522         V4L2_MPEG_AUDIO_AC3_BITRATE_576K = 17,
1523         V4L2_MPEG_AUDIO_AC3_BITRATE_640K = 18,
1524 };
1525 #define V4L2_CID_MPEG_AUDIO_DEC_PLAYBACK        (V4L2_CID_MPEG_BASE+112)
1526 enum v4l2_mpeg_audio_dec_playback {
1527         V4L2_MPEG_AUDIO_DEC_PLAYBACK_AUTO           = 0,
1528         V4L2_MPEG_AUDIO_DEC_PLAYBACK_STEREO         = 1,
1529         V4L2_MPEG_AUDIO_DEC_PLAYBACK_LEFT           = 2,
1530         V4L2_MPEG_AUDIO_DEC_PLAYBACK_RIGHT          = 3,
1531         V4L2_MPEG_AUDIO_DEC_PLAYBACK_MONO           = 4,
1532         V4L2_MPEG_AUDIO_DEC_PLAYBACK_SWAPPED_STEREO = 5,
1533 };
1534 #define V4L2_CID_MPEG_AUDIO_DEC_MULTILINGUAL_PLAYBACK (V4L2_CID_MPEG_BASE+113)
1535
1536 /*  MPEG video controls specific to multiplexed streams */
1537 #define V4L2_CID_MPEG_VIDEO_ENCODING            (V4L2_CID_MPEG_BASE+200)
1538 enum v4l2_mpeg_video_encoding {
1539         V4L2_MPEG_VIDEO_ENCODING_MPEG_1     = 0,
1540         V4L2_MPEG_VIDEO_ENCODING_MPEG_2     = 1,
1541         V4L2_MPEG_VIDEO_ENCODING_MPEG_4_AVC = 2,
1542 };
1543 #define V4L2_CID_MPEG_VIDEO_ASPECT              (V4L2_CID_MPEG_BASE+201)
1544 enum v4l2_mpeg_video_aspect {
1545         V4L2_MPEG_VIDEO_ASPECT_1x1     = 0,
1546         V4L2_MPEG_VIDEO_ASPECT_4x3     = 1,
1547         V4L2_MPEG_VIDEO_ASPECT_16x9    = 2,
1548         V4L2_MPEG_VIDEO_ASPECT_221x100 = 3,
1549 };
1550 #define V4L2_CID_MPEG_VIDEO_B_FRAMES            (V4L2_CID_MPEG_BASE+202)
1551 #define V4L2_CID_MPEG_VIDEO_GOP_SIZE            (V4L2_CID_MPEG_BASE+203)
1552 #define V4L2_CID_MPEG_VIDEO_GOP_CLOSURE         (V4L2_CID_MPEG_BASE+204)
1553 #define V4L2_CID_MPEG_VIDEO_PULLDOWN            (V4L2_CID_MPEG_BASE+205)
1554 #define V4L2_CID_MPEG_VIDEO_BITRATE_MODE        (V4L2_CID_MPEG_BASE+206)
1555 enum v4l2_mpeg_video_bitrate_mode {
1556         V4L2_MPEG_VIDEO_BITRATE_MODE_VBR = 0,
1557         V4L2_MPEG_VIDEO_BITRATE_MODE_CBR = 1,
1558 };
1559 #define V4L2_CID_MPEG_VIDEO_BITRATE             (V4L2_CID_MPEG_BASE+207)
1560 #define V4L2_CID_MPEG_VIDEO_BITRATE_PEAK        (V4L2_CID_MPEG_BASE+208)
1561 #define V4L2_CID_MPEG_VIDEO_TEMPORAL_DECIMATION (V4L2_CID_MPEG_BASE+209)
1562 #define V4L2_CID_MPEG_VIDEO_MUTE                (V4L2_CID_MPEG_BASE+210)
1563 #define V4L2_CID_MPEG_VIDEO_MUTE_YUV            (V4L2_CID_MPEG_BASE+211)
1564 #define V4L2_CID_MPEG_VIDEO_DECODER_SLICE_INTERFACE             (V4L2_CID_MPEG_BASE+212)
1565 #define V4L2_CID_MPEG_VIDEO_DECODER_MPEG4_DEBLOCK_FILTER        (V4L2_CID_MPEG_BASE+213)
1566 #define V4L2_CID_MPEG_VIDEO_CYCLIC_INTRA_REFRESH_MB             (V4L2_CID_MPEG_BASE+214)
1567 #define V4L2_CID_MPEG_VIDEO_FRAME_RC_ENABLE                     (V4L2_CID_MPEG_BASE+215)
1568 #define V4L2_CID_MPEG_VIDEO_HEADER_MODE                         (V4L2_CID_MPEG_BASE+216)
1569 enum v4l2_mpeg_video_header_mode {
1570         V4L2_MPEG_VIDEO_HEADER_MODE_SEPARATE                    = 0,
1571         V4L2_MPEG_VIDEO_HEADER_MODE_JOINED_WITH_1ST_FRAME       = 1,
1572
1573 };
1574 #define V4L2_CID_MPEG_VIDEO_MAX_REF_PIC                 (V4L2_CID_MPEG_BASE+217)
1575 #define V4L2_CID_MPEG_VIDEO_MB_RC_ENABLE                (V4L2_CID_MPEG_BASE+218)
1576 #define V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_BYTES       (V4L2_CID_MPEG_BASE+219)
1577 #define V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_MB          (V4L2_CID_MPEG_BASE+220)
1578 #define V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE            (V4L2_CID_MPEG_BASE+221)
1579 enum v4l2_mpeg_video_multi_slice_mode {
1580         V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_SINGLE         = 0,
1581         V4L2_MPEG_VIDEO_MULTI_SICE_MODE_MAX_MB          = 1,
1582         V4L2_MPEG_VIDEO_MULTI_SICE_MODE_MAX_BYTES       = 2,
1583 };
1584 #define V4L2_CID_MPEG_VIDEO_VBV_SIZE                    (V4L2_CID_MPEG_BASE+222)
1585 #define V4L2_CID_MPEG_VIDEO_DEC_PTS                     (V4L2_CID_MPEG_BASE+223)
1586 #define V4L2_CID_MPEG_VIDEO_DEC_FRAME                   (V4L2_CID_MPEG_BASE+224)
1587
1588 #define V4L2_CID_MPEG_VIDEO_H263_I_FRAME_QP             (V4L2_CID_MPEG_BASE+300)
1589 #define V4L2_CID_MPEG_VIDEO_H263_P_FRAME_QP             (V4L2_CID_MPEG_BASE+301)
1590 #define V4L2_CID_MPEG_VIDEO_H263_B_FRAME_QP             (V4L2_CID_MPEG_BASE+302)
1591 #define V4L2_CID_MPEG_VIDEO_H263_MIN_QP                 (V4L2_CID_MPEG_BASE+303)
1592 #define V4L2_CID_MPEG_VIDEO_H263_MAX_QP                 (V4L2_CID_MPEG_BASE+304)
1593 #define V4L2_CID_MPEG_VIDEO_H264_I_FRAME_QP             (V4L2_CID_MPEG_BASE+350)
1594 #define V4L2_CID_MPEG_VIDEO_H264_P_FRAME_QP             (V4L2_CID_MPEG_BASE+351)
1595 #define V4L2_CID_MPEG_VIDEO_H264_B_FRAME_QP             (V4L2_CID_MPEG_BASE+352)
1596 #define V4L2_CID_MPEG_VIDEO_H264_MIN_QP                 (V4L2_CID_MPEG_BASE+353)
1597 #define V4L2_CID_MPEG_VIDEO_H264_MAX_QP                 (V4L2_CID_MPEG_BASE+354)
1598 #define V4L2_CID_MPEG_VIDEO_H264_8X8_TRANSFORM          (V4L2_CID_MPEG_BASE+355)
1599 #define V4L2_CID_MPEG_VIDEO_H264_CPB_SIZE               (V4L2_CID_MPEG_BASE+356)
1600 #define V4L2_CID_MPEG_VIDEO_H264_ENTROPY_MODE           (V4L2_CID_MPEG_BASE+357)
1601 enum v4l2_mpeg_video_h264_entropy_mode {
1602         V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CAVLC = 0,
1603         V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CABAC = 1,
1604 };
1605 #define V4L2_CID_MPEG_VIDEO_H264_I_PERIOD               (V4L2_CID_MPEG_BASE+358)
1606 #define V4L2_CID_MPEG_VIDEO_H264_LEVEL                  (V4L2_CID_MPEG_BASE+359)
1607 enum v4l2_mpeg_video_h264_level {
1608         V4L2_MPEG_VIDEO_H264_LEVEL_1_0  = 0,
1609         V4L2_MPEG_VIDEO_H264_LEVEL_1B   = 1,
1610         V4L2_MPEG_VIDEO_H264_LEVEL_1_1  = 2,
1611         V4L2_MPEG_VIDEO_H264_LEVEL_1_2  = 3,
1612         V4L2_MPEG_VIDEO_H264_LEVEL_1_3  = 4,
1613         V4L2_MPEG_VIDEO_H264_LEVEL_2_0  = 5,
1614         V4L2_MPEG_VIDEO_H264_LEVEL_2_1  = 6,
1615         V4L2_MPEG_VIDEO_H264_LEVEL_2_2  = 7,
1616         V4L2_MPEG_VIDEO_H264_LEVEL_3_0  = 8,
1617         V4L2_MPEG_VIDEO_H264_LEVEL_3_1  = 9,
1618         V4L2_MPEG_VIDEO_H264_LEVEL_3_2  = 10,
1619         V4L2_MPEG_VIDEO_H264_LEVEL_4_0  = 11,
1620         V4L2_MPEG_VIDEO_H264_LEVEL_4_1  = 12,
1621         V4L2_MPEG_VIDEO_H264_LEVEL_4_2  = 13,
1622         V4L2_MPEG_VIDEO_H264_LEVEL_5_0  = 14,
1623         V4L2_MPEG_VIDEO_H264_LEVEL_5_1  = 15,
1624 };
1625 #define V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_ALPHA      (V4L2_CID_MPEG_BASE+360)
1626 #define V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_BETA       (V4L2_CID_MPEG_BASE+361)
1627 #define V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_MODE       (V4L2_CID_MPEG_BASE+362)
1628 enum v4l2_mpeg_video_h264_loop_filter_mode {
1629         V4L2_MPEG_VIDEO_H264_LOOP_FILTER_MODE_ENABLED                           = 0,
1630         V4L2_MPEG_VIDEO_H264_LOOP_FILTER_MODE_DISABLED                          = 1,
1631         V4L2_MPEG_VIDEO_H264_LOOP_FILTER_MODE_DISABLED_AT_SLICE_BOUNDARY        = 2,
1632 };
1633 #define V4L2_CID_MPEG_VIDEO_H264_PROFILE                (V4L2_CID_MPEG_BASE+363)
1634 enum v4l2_mpeg_video_h264_profile {
1635         V4L2_MPEG_VIDEO_H264_PROFILE_BASELINE                   = 0,
1636         V4L2_MPEG_VIDEO_H264_PROFILE_CONSTRAINED_BASELINE       = 1,
1637         V4L2_MPEG_VIDEO_H264_PROFILE_MAIN                       = 2,
1638         V4L2_MPEG_VIDEO_H264_PROFILE_EXTENDED                   = 3,
1639         V4L2_MPEG_VIDEO_H264_PROFILE_HIGH                       = 4,
1640         V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_10                    = 5,
1641         V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_422                   = 6,
1642         V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_444_PREDICTIVE        = 7,
1643         V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_10_INTRA              = 8,
1644         V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_422_INTRA             = 9,
1645         V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_444_INTRA             = 10,
1646         V4L2_MPEG_VIDEO_H264_PROFILE_CAVLC_444_INTRA            = 11,
1647         V4L2_MPEG_VIDEO_H264_PROFILE_SCALABLE_BASELINE          = 12,
1648         V4L2_MPEG_VIDEO_H264_PROFILE_SCALABLE_HIGH              = 13,
1649         V4L2_MPEG_VIDEO_H264_PROFILE_SCALABLE_HIGH_INTRA        = 14,
1650         V4L2_MPEG_VIDEO_H264_PROFILE_STEREO_HIGH                = 15,
1651         V4L2_MPEG_VIDEO_H264_PROFILE_MULTIVIEW_HIGH             = 16,
1652 };
1653 #define V4L2_CID_MPEG_VIDEO_H264_VUI_EXT_SAR_HEIGHT     (V4L2_CID_MPEG_BASE+364)
1654 #define V4L2_CID_MPEG_VIDEO_H264_VUI_EXT_SAR_WIDTH      (V4L2_CID_MPEG_BASE+365)
1655 #define V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_ENABLE         (V4L2_CID_MPEG_BASE+366)
1656 #define V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_IDC            (V4L2_CID_MPEG_BASE+367)
1657 enum v4l2_mpeg_video_h264_vui_sar_idc {
1658         V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_UNSPECIFIED    = 0,
1659         V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_1x1            = 1,
1660         V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_12x11          = 2,
1661         V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_10x11          = 3,
1662         V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_16x11          = 4,
1663         V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_40x33          = 5,
1664         V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_24x11          = 6,
1665         V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_20x11          = 7,
1666         V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_32x11          = 8,
1667         V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_80x33          = 9,
1668         V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_18x11          = 10,
1669         V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_15x11          = 11,
1670         V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_64x33          = 12,
1671         V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_160x99         = 13,
1672         V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_4x3            = 14,
1673         V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_3x2            = 15,
1674         V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_2x1            = 16,
1675         V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_EXTENDED       = 17,
1676 };
1677 #define V4L2_CID_MPEG_VIDEO_MPEG4_I_FRAME_QP    (V4L2_CID_MPEG_BASE+400)
1678 #define V4L2_CID_MPEG_VIDEO_MPEG4_P_FRAME_QP    (V4L2_CID_MPEG_BASE+401)
1679 #define V4L2_CID_MPEG_VIDEO_MPEG4_B_FRAME_QP    (V4L2_CID_MPEG_BASE+402)
1680 #define V4L2_CID_MPEG_VIDEO_MPEG4_MIN_QP        (V4L2_CID_MPEG_BASE+403)
1681 #define V4L2_CID_MPEG_VIDEO_MPEG4_MAX_QP        (V4L2_CID_MPEG_BASE+404)
1682 #define V4L2_CID_MPEG_VIDEO_MPEG4_LEVEL         (V4L2_CID_MPEG_BASE+405)
1683 enum v4l2_mpeg_video_mpeg4_level {
1684         V4L2_MPEG_VIDEO_MPEG4_LEVEL_0   = 0,
1685         V4L2_MPEG_VIDEO_MPEG4_LEVEL_0B  = 1,
1686         V4L2_MPEG_VIDEO_MPEG4_LEVEL_1   = 2,
1687         V4L2_MPEG_VIDEO_MPEG4_LEVEL_2   = 3,
1688         V4L2_MPEG_VIDEO_MPEG4_LEVEL_3   = 4,
1689         V4L2_MPEG_VIDEO_MPEG4_LEVEL_3B  = 5,
1690         V4L2_MPEG_VIDEO_MPEG4_LEVEL_4   = 6,
1691         V4L2_MPEG_VIDEO_MPEG4_LEVEL_5   = 7,
1692 };
1693 #define V4L2_CID_MPEG_VIDEO_MPEG4_PROFILE       (V4L2_CID_MPEG_BASE+406)
1694 enum v4l2_mpeg_video_mpeg4_profile {
1695         V4L2_MPEG_VIDEO_MPEG4_PROFILE_SIMPLE                            = 0,
1696         V4L2_MPEG_VIDEO_MPEG4_PROFILE_ADVANCED_SIMPLE                   = 1,
1697         V4L2_MPEG_VIDEO_MPEG4_PROFILE_CORE                              = 2,
1698         V4L2_MPEG_VIDEO_MPEG4_PROFILE_SIMPLE_SCALABLE                   = 3,
1699         V4L2_MPEG_VIDEO_MPEG4_PROFILE_ADVANCED_CODING_EFFICIENCY        = 4,
1700 };
1701 #define V4L2_CID_MPEG_VIDEO_MPEG4_QPEL          (V4L2_CID_MPEG_BASE+407)
1702
1703 /*  MPEG-class control IDs specific to the CX2341x driver as defined by V4L2 */
1704 #define V4L2_CID_MPEG_CX2341X_BASE                              (V4L2_CTRL_CLASS_MPEG | 0x1000)
1705 #define V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE         (V4L2_CID_MPEG_CX2341X_BASE+0)
1706 enum v4l2_mpeg_cx2341x_video_spatial_filter_mode {
1707         V4L2_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE_MANUAL = 0,
1708         V4L2_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE_AUTO   = 1,
1709 };
1710 #define V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER              (V4L2_CID_MPEG_CX2341X_BASE+1)
1711 #define V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE    (V4L2_CID_MPEG_CX2341X_BASE+2)
1712 enum v4l2_mpeg_cx2341x_video_luma_spatial_filter_type {
1713         V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_OFF                  = 0,
1714         V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_1D_HOR               = 1,
1715         V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_1D_VERT              = 2,
1716         V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_2D_HV_SEPARABLE      = 3,
1717         V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_2D_SYM_NON_SEPARABLE = 4,
1718 };
1719 #define V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE  (V4L2_CID_MPEG_CX2341X_BASE+3)
1720 enum v4l2_mpeg_cx2341x_video_chroma_spatial_filter_type {
1721         V4L2_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE_OFF    = 0,
1722         V4L2_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE_1D_HOR = 1,
1723 };
1724 #define V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE        (V4L2_CID_MPEG_CX2341X_BASE+4)
1725 enum v4l2_mpeg_cx2341x_video_temporal_filter_mode {
1726         V4L2_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE_MANUAL = 0,
1727         V4L2_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE_AUTO   = 1,
1728 };
1729 #define V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER             (V4L2_CID_MPEG_CX2341X_BASE+5)
1730 #define V4L2_CID_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE          (V4L2_CID_MPEG_CX2341X_BASE+6)
1731 enum v4l2_mpeg_cx2341x_video_median_filter_type {
1732         V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_OFF      = 0,
1733         V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_HOR      = 1,
1734         V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_VERT     = 2,
1735         V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_HOR_VERT = 3,
1736         V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_DIAG     = 4,
1737 };
1738 #define V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_BOTTOM   (V4L2_CID_MPEG_CX2341X_BASE+7)
1739 #define V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_TOP      (V4L2_CID_MPEG_CX2341X_BASE+8)
1740 #define V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_BOTTOM (V4L2_CID_MPEG_CX2341X_BASE+9)
1741 #define V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_TOP    (V4L2_CID_MPEG_CX2341X_BASE+10)
1742 #define V4L2_CID_MPEG_CX2341X_STREAM_INSERT_NAV_PACKETS         (V4L2_CID_MPEG_CX2341X_BASE+11)
1743
1744 /*  MPEG-class control IDs specific to the Samsung MFC 5.1 driver as defined by V4L2 */
1745 #define V4L2_CID_MPEG_MFC51_BASE                                (V4L2_CTRL_CLASS_MPEG | 0x1100)
1746
1747 #define V4L2_CID_MPEG_MFC51_VIDEO_DECODER_H264_DISPLAY_DELAY            (V4L2_CID_MPEG_MFC51_BASE+0)
1748 #define V4L2_CID_MPEG_MFC51_VIDEO_DECODER_H264_DISPLAY_DELAY_ENABLE     (V4L2_CID_MPEG_MFC51_BASE+1)
1749 #define V4L2_CID_MPEG_MFC51_VIDEO_FRAME_SKIP_MODE                       (V4L2_CID_MPEG_MFC51_BASE+2)
1750 enum v4l2_mpeg_mfc51_video_frame_skip_mode {
1751         V4L2_MPEG_MFC51_VIDEO_FRAME_SKIP_MODE_DISABLED          = 0,
1752         V4L2_MPEG_MFC51_VIDEO_FRAME_SKIP_MODE_LEVEL_LIMIT       = 1,
1753         V4L2_MPEG_MFC51_VIDEO_FRAME_SKIP_MODE_BUF_LIMIT         = 2,
1754 };
1755 #define V4L2_CID_MPEG_MFC51_VIDEO_FORCE_FRAME_TYPE                      (V4L2_CID_MPEG_MFC51_BASE+3)
1756 enum v4l2_mpeg_mfc51_video_force_frame_type {
1757         V4L2_MPEG_MFC51_VIDEO_FORCE_FRAME_TYPE_DISABLED         = 0,
1758         V4L2_MPEG_MFC51_VIDEO_FORCE_FRAME_TYPE_I_FRAME          = 1,
1759         V4L2_MPEG_MFC51_VIDEO_FORCE_FRAME_TYPE_NOT_CODED        = 2,
1760 };
1761 #define V4L2_CID_MPEG_MFC51_VIDEO_PADDING                               (V4L2_CID_MPEG_MFC51_BASE+4)
1762 #define V4L2_CID_MPEG_MFC51_VIDEO_PADDING_YUV                           (V4L2_CID_MPEG_MFC51_BASE+5)
1763 #define V4L2_CID_MPEG_MFC51_VIDEO_RC_FIXED_TARGET_BIT                   (V4L2_CID_MPEG_MFC51_BASE+6)
1764 #define V4L2_CID_MPEG_MFC51_VIDEO_RC_REACTION_COEFF                     (V4L2_CID_MPEG_MFC51_BASE+7)
1765 #define V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_ACTIVITY             (V4L2_CID_MPEG_MFC51_BASE+50)
1766 #define V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_DARK                 (V4L2_CID_MPEG_MFC51_BASE+51)
1767 #define V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_SMOOTH               (V4L2_CID_MPEG_MFC51_BASE+52)
1768 #define V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_STATIC               (V4L2_CID_MPEG_MFC51_BASE+53)
1769 #define V4L2_CID_MPEG_MFC51_VIDEO_H264_NUM_REF_PIC_FOR_P                (V4L2_CID_MPEG_MFC51_BASE+54)
1770
1771 /*  Camera class control IDs */
1772 #define V4L2_CID_CAMERA_CLASS_BASE      (V4L2_CTRL_CLASS_CAMERA | 0x900)
1773 #define V4L2_CID_CAMERA_CLASS           (V4L2_CTRL_CLASS_CAMERA | 1)
1774
1775 #define V4L2_CID_EXPOSURE_AUTO                  (V4L2_CID_CAMERA_CLASS_BASE+1)
1776 enum  v4l2_exposure_auto_type {
1777         V4L2_EXPOSURE_AUTO = 0,
1778         V4L2_EXPOSURE_MANUAL = 1,
1779         V4L2_EXPOSURE_SHUTTER_PRIORITY = 2,
1780         V4L2_EXPOSURE_APERTURE_PRIORITY = 3
1781 };
1782 #define V4L2_CID_EXPOSURE_ABSOLUTE              (V4L2_CID_CAMERA_CLASS_BASE+2)
1783 #define V4L2_CID_EXPOSURE_AUTO_PRIORITY         (V4L2_CID_CAMERA_CLASS_BASE+3)
1784
1785 #define V4L2_CID_PAN_RELATIVE                   (V4L2_CID_CAMERA_CLASS_BASE+4)
1786 #define V4L2_CID_TILT_RELATIVE                  (V4L2_CID_CAMERA_CLASS_BASE+5)
1787 #define V4L2_CID_PAN_RESET                      (V4L2_CID_CAMERA_CLASS_BASE+6)
1788 #define V4L2_CID_TILT_RESET                     (V4L2_CID_CAMERA_CLASS_BASE+7)
1789
1790 #define V4L2_CID_PAN_ABSOLUTE                   (V4L2_CID_CAMERA_CLASS_BASE+8)
1791 #define V4L2_CID_TILT_ABSOLUTE                  (V4L2_CID_CAMERA_CLASS_BASE+9)
1792
1793 #define V4L2_CID_FOCUS_ABSOLUTE                 (V4L2_CID_CAMERA_CLASS_BASE+10)
1794 #define V4L2_CID_FOCUS_RELATIVE                 (V4L2_CID_CAMERA_CLASS_BASE+11)
1795 #define V4L2_CID_FOCUS_AUTO                     (V4L2_CID_CAMERA_CLASS_BASE+12)
1796
1797 #define V4L2_CID_ZOOM_ABSOLUTE                  (V4L2_CID_CAMERA_CLASS_BASE+13)
1798 #define V4L2_CID_ZOOM_RELATIVE                  (V4L2_CID_CAMERA_CLASS_BASE+14)
1799 #define V4L2_CID_ZOOM_CONTINUOUS                (V4L2_CID_CAMERA_CLASS_BASE+15)
1800
1801 #define V4L2_CID_PRIVACY                        (V4L2_CID_CAMERA_CLASS_BASE+16)
1802
1803 #define V4L2_CID_IRIS_ABSOLUTE                  (V4L2_CID_CAMERA_CLASS_BASE+17)
1804 #define V4L2_CID_IRIS_RELATIVE                  (V4L2_CID_CAMERA_CLASS_BASE+18)
1805
1806 #define V4L2_CID_AUTO_EXPOSURE_BIAS             (V4L2_CID_CAMERA_CLASS_BASE+19)
1807
1808 #define V4L2_CID_AUTO_N_PRESET_WHITE_BALANCE    (V4L2_CID_CAMERA_CLASS_BASE+20)
1809 enum v4l2_auto_n_preset_white_balance {
1810         V4L2_WHITE_BALANCE_MANUAL               = 0,
1811         V4L2_WHITE_BALANCE_AUTO                 = 1,
1812         V4L2_WHITE_BALANCE_INCANDESCENT         = 2,
1813         V4L2_WHITE_BALANCE_FLUORESCENT          = 3,
1814         V4L2_WHITE_BALANCE_FLUORESCENT_H        = 4,
1815         V4L2_WHITE_BALANCE_HORIZON              = 5,
1816         V4L2_WHITE_BALANCE_DAYLIGHT             = 6,
1817         V4L2_WHITE_BALANCE_FLASH                = 7,
1818         V4L2_WHITE_BALANCE_CLOUDY               = 8,
1819         V4L2_WHITE_BALANCE_SHADE                = 9,
1820 };
1821
1822 #define V4L2_CID_WIDE_DYNAMIC_RANGE             (V4L2_CID_CAMERA_CLASS_BASE+21)
1823 #define V4L2_CID_IMAGE_STABILIZATION            (V4L2_CID_CAMERA_CLASS_BASE+22)
1824
1825 #define V4L2_CID_ISO_SENSITIVITY                (V4L2_CID_CAMERA_CLASS_BASE+23)
1826 #define V4L2_CID_ISO_SENSITIVITY_AUTO           (V4L2_CID_CAMERA_CLASS_BASE+24)
1827 enum v4l2_iso_sensitivity_auto_type {
1828         V4L2_ISO_SENSITIVITY_MANUAL             = 0,
1829         V4L2_ISO_SENSITIVITY_AUTO               = 1,
1830 };
1831
1832 #define V4L2_CID_EXPOSURE_METERING              (V4L2_CID_CAMERA_CLASS_BASE+25)
1833 enum v4l2_exposure_metering {
1834         V4L2_EXPOSURE_METERING_AVERAGE          = 0,
1835         V4L2_EXPOSURE_METERING_CENTER_WEIGHTED  = 1,
1836         V4L2_EXPOSURE_METERING_SPOT             = 2,
1837 };
1838
1839 #define V4L2_CID_SCENE_MODE                     (V4L2_CID_CAMERA_CLASS_BASE+26)
1840 enum v4l2_scene_mode {
1841         V4L2_SCENE_MODE_NONE                    = 0,
1842         V4L2_SCENE_MODE_BACKLIGHT               = 1,
1843         V4L2_SCENE_MODE_BEACH_SNOW              = 2,
1844         V4L2_SCENE_MODE_CANDLE_LIGHT            = 3,
1845         V4L2_SCENE_MODE_DAWN_DUSK               = 4,
1846         V4L2_SCENE_MODE_FALL_COLORS             = 5,
1847         V4L2_SCENE_MODE_FIREWORKS               = 6,
1848         V4L2_SCENE_MODE_LANDSCAPE               = 7,
1849         V4L2_SCENE_MODE_NIGHT                   = 8,
1850         V4L2_SCENE_MODE_PARTY_INDOOR            = 9,
1851         V4L2_SCENE_MODE_PORTRAIT                = 10,
1852         V4L2_SCENE_MODE_SPORTS                  = 11,
1853         V4L2_SCENE_MODE_SUNSET                  = 12,
1854         V4L2_SCENE_MODE_TEXT                    = 13,
1855 };
1856
1857 #define V4L2_CID_3A_LOCK                        (V4L2_CID_CAMERA_CLASS_BASE+27)
1858 #define V4L2_LOCK_EXPOSURE                      (1 << 0)
1859 #define V4L2_LOCK_WHITE_BALANCE                 (1 << 1)
1860 #define V4L2_LOCK_FOCUS                         (1 << 2)
1861
1862 #define V4L2_CID_AUTO_FOCUS_START               (V4L2_CID_CAMERA_CLASS_BASE+28)
1863 #define V4L2_CID_AUTO_FOCUS_STOP                (V4L2_CID_CAMERA_CLASS_BASE+29)
1864 #define V4L2_CID_AUTO_FOCUS_STATUS              (V4L2_CID_CAMERA_CLASS_BASE+30)
1865 #define V4L2_AUTO_FOCUS_STATUS_IDLE             (0 << 0)
1866 #define V4L2_AUTO_FOCUS_STATUS_BUSY             (1 << 0)
1867 #define V4L2_AUTO_FOCUS_STATUS_REACHED          (1 << 1)
1868 #define V4L2_AUTO_FOCUS_STATUS_FAILED           (1 << 2)
1869
1870 #define V4L2_CID_AUTO_FOCUS_RANGE               (V4L2_CID_CAMERA_CLASS_BASE+31)
1871 enum v4l2_auto_focus_range {
1872         V4L2_AUTO_FOCUS_RANGE_AUTO              = 0,
1873         V4L2_AUTO_FOCUS_RANGE_NORMAL            = 1,
1874         V4L2_AUTO_FOCUS_RANGE_MACRO             = 2,
1875         V4L2_AUTO_FOCUS_RANGE_INFINITY          = 3,
1876 };
1877
1878 /* FM Modulator class control IDs */
1879 #define V4L2_CID_FM_TX_CLASS_BASE               (V4L2_CTRL_CLASS_FM_TX | 0x900)
1880 #define V4L2_CID_FM_TX_CLASS                    (V4L2_CTRL_CLASS_FM_TX | 1)
1881
1882 #define V4L2_CID_RDS_TX_DEVIATION               (V4L2_CID_FM_TX_CLASS_BASE + 1)
1883 #define V4L2_CID_RDS_TX_PI                      (V4L2_CID_FM_TX_CLASS_BASE + 2)
1884 #define V4L2_CID_RDS_TX_PTY                     (V4L2_CID_FM_TX_CLASS_BASE + 3)
1885 #define V4L2_CID_RDS_TX_PS_NAME                 (V4L2_CID_FM_TX_CLASS_BASE + 5)
1886 #define V4L2_CID_RDS_TX_RADIO_TEXT              (V4L2_CID_FM_TX_CLASS_BASE + 6)
1887
1888 #define V4L2_CID_AUDIO_LIMITER_ENABLED          (V4L2_CID_FM_TX_CLASS_BASE + 64)
1889 #define V4L2_CID_AUDIO_LIMITER_RELEASE_TIME     (V4L2_CID_FM_TX_CLASS_BASE + 65)
1890 #define V4L2_CID_AUDIO_LIMITER_DEVIATION        (V4L2_CID_FM_TX_CLASS_BASE + 66)
1891
1892 #define V4L2_CID_AUDIO_COMPRESSION_ENABLED      (V4L2_CID_FM_TX_CLASS_BASE + 80)
1893 #define V4L2_CID_AUDIO_COMPRESSION_GAIN         (V4L2_CID_FM_TX_CLASS_BASE + 81)
1894 #define V4L2_CID_AUDIO_COMPRESSION_THRESHOLD    (V4L2_CID_FM_TX_CLASS_BASE + 82)
1895 #define V4L2_CID_AUDIO_COMPRESSION_ATTACK_TIME  (V4L2_CID_FM_TX_CLASS_BASE + 83)
1896 #define V4L2_CID_AUDIO_COMPRESSION_RELEASE_TIME (V4L2_CID_FM_TX_CLASS_BASE + 84)
1897
1898 #define V4L2_CID_PILOT_TONE_ENABLED             (V4L2_CID_FM_TX_CLASS_BASE + 96)
1899 #define V4L2_CID_PILOT_TONE_DEVIATION           (V4L2_CID_FM_TX_CLASS_BASE + 97)
1900 #define V4L2_CID_PILOT_TONE_FREQUENCY           (V4L2_CID_FM_TX_CLASS_BASE + 98)
1901
1902 #define V4L2_CID_TUNE_PREEMPHASIS               (V4L2_CID_FM_TX_CLASS_BASE + 112)
1903 enum v4l2_preemphasis {
1904         V4L2_PREEMPHASIS_DISABLED       = 0,
1905         V4L2_PREEMPHASIS_50_uS          = 1,
1906         V4L2_PREEMPHASIS_75_uS          = 2,
1907 };
1908 #define V4L2_CID_TUNE_POWER_LEVEL               (V4L2_CID_FM_TX_CLASS_BASE + 113)
1909 #define V4L2_CID_TUNE_ANTENNA_CAPACITOR         (V4L2_CID_FM_TX_CLASS_BASE + 114)
1910
1911 /* Flash and privacy (indicator) light controls */
1912 #define V4L2_CID_FLASH_CLASS_BASE               (V4L2_CTRL_CLASS_FLASH | 0x900)
1913 #define V4L2_CID_FLASH_CLASS                    (V4L2_CTRL_CLASS_FLASH | 1)
1914
1915 #define V4L2_CID_FLASH_LED_MODE                 (V4L2_CID_FLASH_CLASS_BASE + 1)
1916 enum v4l2_flash_led_mode {
1917         V4L2_FLASH_LED_MODE_NONE,
1918         V4L2_FLASH_LED_MODE_FLASH,
1919         V4L2_FLASH_LED_MODE_TORCH,
1920 };
1921
1922 #define V4L2_CID_FLASH_STROBE_SOURCE            (V4L2_CID_FLASH_CLASS_BASE + 2)
1923 enum v4l2_flash_strobe_source {
1924         V4L2_FLASH_STROBE_SOURCE_SOFTWARE,
1925         V4L2_FLASH_STROBE_SOURCE_EXTERNAL,
1926 };
1927
1928 #define V4L2_CID_FLASH_STROBE                   (V4L2_CID_FLASH_CLASS_BASE + 3)
1929 #define V4L2_CID_FLASH_STROBE_STOP              (V4L2_CID_FLASH_CLASS_BASE + 4)
1930 #define V4L2_CID_FLASH_STROBE_STATUS            (V4L2_CID_FLASH_CLASS_BASE + 5)
1931
1932 #define V4L2_CID_FLASH_TIMEOUT                  (V4L2_CID_FLASH_CLASS_BASE + 6)
1933 #define V4L2_CID_FLASH_INTENSITY                (V4L2_CID_FLASH_CLASS_BASE + 7)
1934 #define V4L2_CID_FLASH_TORCH_INTENSITY          (V4L2_CID_FLASH_CLASS_BASE + 8)
1935 #define V4L2_CID_FLASH_INDICATOR_INTENSITY      (V4L2_CID_FLASH_CLASS_BASE + 9)
1936
1937 #define V4L2_CID_FLASH_FAULT                    (V4L2_CID_FLASH_CLASS_BASE + 10)
1938 #define V4L2_FLASH_FAULT_OVER_VOLTAGE           (1 << 0)
1939 #define V4L2_FLASH_FAULT_TIMEOUT                (1 << 1)
1940 #define V4L2_FLASH_FAULT_OVER_TEMPERATURE       (1 << 2)
1941 #define V4L2_FLASH_FAULT_SHORT_CIRCUIT          (1 << 3)
1942 #define V4L2_FLASH_FAULT_OVER_CURRENT           (1 << 4)
1943 #define V4L2_FLASH_FAULT_INDICATOR              (1 << 5)
1944
1945 #define V4L2_CID_FLASH_CHARGE                   (V4L2_CID_FLASH_CLASS_BASE + 11)
1946 #define V4L2_CID_FLASH_READY                    (V4L2_CID_FLASH_CLASS_BASE + 12)
1947
1948 /*  JPEG-class control IDs defined by V4L2 */
1949 #define V4L2_CID_JPEG_CLASS_BASE                (V4L2_CTRL_CLASS_JPEG | 0x900)
1950 #define V4L2_CID_JPEG_CLASS                     (V4L2_CTRL_CLASS_JPEG | 1)
1951
1952 #define V4L2_CID_JPEG_CHROMA_SUBSAMPLING        (V4L2_CID_JPEG_CLASS_BASE + 1)
1953 enum v4l2_jpeg_chroma_subsampling {
1954         V4L2_JPEG_CHROMA_SUBSAMPLING_444        = 0,
1955         V4L2_JPEG_CHROMA_SUBSAMPLING_422        = 1,
1956         V4L2_JPEG_CHROMA_SUBSAMPLING_420        = 2,
1957         V4L2_JPEG_CHROMA_SUBSAMPLING_411        = 3,
1958         V4L2_JPEG_CHROMA_SUBSAMPLING_410        = 4,
1959         V4L2_JPEG_CHROMA_SUBSAMPLING_GRAY       = 5,
1960 };
1961 #define V4L2_CID_JPEG_RESTART_INTERVAL          (V4L2_CID_JPEG_CLASS_BASE + 2)
1962 #define V4L2_CID_JPEG_COMPRESSION_QUALITY       (V4L2_CID_JPEG_CLASS_BASE + 3)
1963
1964 #define V4L2_CID_JPEG_ACTIVE_MARKER             (V4L2_CID_JPEG_CLASS_BASE + 4)
1965 #define V4L2_JPEG_ACTIVE_MARKER_APP0            (1 << 0)
1966 #define V4L2_JPEG_ACTIVE_MARKER_APP1            (1 << 1)
1967 #define V4L2_JPEG_ACTIVE_MARKER_COM             (1 << 16)
1968 #define V4L2_JPEG_ACTIVE_MARKER_DQT             (1 << 17)
1969 #define V4L2_JPEG_ACTIVE_MARKER_DHT             (1 << 18)
1970
1971 /* Image source controls */
1972 #define V4L2_CID_IMAGE_SOURCE_CLASS_BASE        (V4L2_CTRL_CLASS_IMAGE_SOURCE | 0x900)
1973 #define V4L2_CID_IMAGE_SOURCE_CLASS             (V4L2_CTRL_CLASS_IMAGE_SOURCE | 1)
1974
1975 #define V4L2_CID_VBLANK                         (V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 1)
1976 #define V4L2_CID_HBLANK                         (V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 2)
1977 #define V4L2_CID_ANALOGUE_GAIN                  (V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 3)
1978
1979 /* Image processing controls */
1980 #define V4L2_CID_IMAGE_PROC_CLASS_BASE          (V4L2_CTRL_CLASS_IMAGE_PROC | 0x900)
1981 #define V4L2_CID_IMAGE_PROC_CLASS               (V4L2_CTRL_CLASS_IMAGE_PROC | 1)
1982
1983 #define V4L2_CID_LINK_FREQ                      (V4L2_CID_IMAGE_PROC_CLASS_BASE + 1)
1984 #define V4L2_CID_PIXEL_RATE                     (V4L2_CID_IMAGE_PROC_CLASS_BASE + 2)
1985
1986 /*
1987  *      T U N I N G
1988  */
1989 struct v4l2_tuner {
1990         __u32                   index;
1991         __u8                    name[32];
1992         __u32                   type;   /* enum v4l2_tuner_type */
1993         __u32                   capability;
1994         __u32                   rangelow;
1995         __u32                   rangehigh;
1996         __u32                   rxsubchans;
1997         __u32                   audmode;
1998         __s32                   signal;
1999         __s32                   afc;
2000         __u32                   reserved[4];
2001 };
2002
2003 struct v4l2_modulator {
2004         __u32                   index;
2005         __u8                    name[32];
2006         __u32                   capability;
2007         __u32                   rangelow;
2008         __u32                   rangehigh;
2009         __u32                   txsubchans;
2010         __u32                   reserved[4];
2011 };
2012
2013 /*  Flags for the 'capability' field */
2014 #define V4L2_TUNER_CAP_LOW              0x0001
2015 #define V4L2_TUNER_CAP_NORM             0x0002
2016 #define V4L2_TUNER_CAP_HWSEEK_BOUNDED   0x0004
2017 #define V4L2_TUNER_CAP_HWSEEK_WRAP      0x0008
2018 #define V4L2_TUNER_CAP_STEREO           0x0010
2019 #define V4L2_TUNER_CAP_LANG2            0x0020
2020 #define V4L2_TUNER_CAP_SAP              0x0020
2021 #define V4L2_TUNER_CAP_LANG1            0x0040
2022 #define V4L2_TUNER_CAP_RDS              0x0080
2023 #define V4L2_TUNER_CAP_RDS_BLOCK_IO     0x0100
2024 #define V4L2_TUNER_CAP_RDS_CONTROLS     0x0200
2025
2026 /*  Flags for the 'rxsubchans' field */
2027 #define V4L2_TUNER_SUB_MONO             0x0001
2028 #define V4L2_TUNER_SUB_STEREO           0x0002
2029 #define V4L2_TUNER_SUB_LANG2            0x0004
2030 #define V4L2_TUNER_SUB_SAP              0x0004
2031 #define V4L2_TUNER_SUB_LANG1            0x0008
2032 #define V4L2_TUNER_SUB_RDS              0x0010
2033
2034 /*  Values for the 'audmode' field */
2035 #define V4L2_TUNER_MODE_MONO            0x0000
2036 #define V4L2_TUNER_MODE_STEREO          0x0001
2037 #define V4L2_TUNER_MODE_LANG2           0x0002
2038 #define V4L2_TUNER_MODE_SAP             0x0002
2039 #define V4L2_TUNER_MODE_LANG1           0x0003
2040 #define V4L2_TUNER_MODE_LANG1_LANG2     0x0004
2041
2042 struct v4l2_frequency {
2043         __u32                 tuner;
2044         __u32                 type;     /* enum v4l2_tuner_type */
2045         __u32                 frequency;
2046         __u32                 reserved[8];
2047 };
2048
2049 struct v4l2_hw_freq_seek {
2050         __u32                 tuner;
2051         __u32                 type;     /* enum v4l2_tuner_type */
2052         __u32                 seek_upward;
2053         __u32                 wrap_around;
2054         __u32                 spacing;
2055         __u32                 reserved[7];
2056 };
2057
2058 /*
2059  *      R D S
2060  */
2061
2062 struct v4l2_rds_data {
2063         __u8    lsb;
2064         __u8    msb;
2065         __u8    block;
2066 } __attribute__ ((packed));
2067
2068 #define V4L2_RDS_BLOCK_MSK       0x7
2069 #define V4L2_RDS_BLOCK_A         0
2070 #define V4L2_RDS_BLOCK_B         1
2071 #define V4L2_RDS_BLOCK_C         2
2072 #define V4L2_RDS_BLOCK_D         3
2073 #define V4L2_RDS_BLOCK_C_ALT     4
2074 #define V4L2_RDS_BLOCK_INVALID   7
2075
2076 #define V4L2_RDS_BLOCK_CORRECTED 0x40
2077 #define V4L2_RDS_BLOCK_ERROR     0x80
2078
2079 /*
2080  *      A U D I O
2081  */
2082 struct v4l2_audio {
2083         __u32   index;
2084         __u8    name[32];
2085         __u32   capability;
2086         __u32   mode;
2087         __u32   reserved[2];
2088 };
2089
2090 /*  Flags for the 'capability' field */
2091 #define V4L2_AUDCAP_STEREO              0x00001
2092 #define V4L2_AUDCAP_AVL                 0x00002
2093
2094 /*  Flags for the 'mode' field */
2095 #define V4L2_AUDMODE_AVL                0x00001
2096
2097 struct v4l2_audioout {
2098         __u32   index;
2099         __u8    name[32];
2100         __u32   capability;
2101         __u32   mode;
2102         __u32   reserved[2];
2103 };
2104
2105 /*
2106  *      M P E G   S E R V I C E S
2107  *
2108  *      NOTE: EXPERIMENTAL API
2109  */
2110 #if 1
2111 #define V4L2_ENC_IDX_FRAME_I    (0)
2112 #define V4L2_ENC_IDX_FRAME_P    (1)
2113 #define V4L2_ENC_IDX_FRAME_B    (2)
2114 #define V4L2_ENC_IDX_FRAME_MASK (0xf)
2115
2116 struct v4l2_enc_idx_entry {
2117         __u64 offset;
2118         __u64 pts;
2119         __u32 length;
2120         __u32 flags;
2121         __u32 reserved[2];
2122 };
2123
2124 #define V4L2_ENC_IDX_ENTRIES (64)
2125 struct v4l2_enc_idx {
2126         __u32 entries;
2127         __u32 entries_cap;
2128         __u32 reserved[4];
2129         struct v4l2_enc_idx_entry entry[V4L2_ENC_IDX_ENTRIES];
2130 };
2131
2132
2133 #define V4L2_ENC_CMD_START      (0)
2134 #define V4L2_ENC_CMD_STOP       (1)
2135 #define V4L2_ENC_CMD_PAUSE      (2)
2136 #define V4L2_ENC_CMD_RESUME     (3)
2137
2138 /* Flags for V4L2_ENC_CMD_STOP */
2139 #define V4L2_ENC_CMD_STOP_AT_GOP_END    (1 << 0)
2140
2141 struct v4l2_encoder_cmd {
2142         __u32 cmd;
2143         __u32 flags;
2144         union {
2145                 struct {
2146                         __u32 data[8];
2147                 } raw;
2148         };
2149 };
2150
2151 /* Decoder commands */
2152 #define V4L2_DEC_CMD_START       (0)
2153 #define V4L2_DEC_CMD_STOP        (1)
2154 #define V4L2_DEC_CMD_PAUSE       (2)
2155 #define V4L2_DEC_CMD_RESUME      (3)
2156
2157 /* Flags for V4L2_DEC_CMD_START */
2158 #define V4L2_DEC_CMD_START_MUTE_AUDIO   (1 << 0)
2159
2160 /* Flags for V4L2_DEC_CMD_PAUSE */
2161 #define V4L2_DEC_CMD_PAUSE_TO_BLACK     (1 << 0)
2162
2163 /* Flags for V4L2_DEC_CMD_STOP */
2164 #define V4L2_DEC_CMD_STOP_TO_BLACK      (1 << 0)
2165 #define V4L2_DEC_CMD_STOP_IMMEDIATELY   (1 << 1)
2166
2167 /* Play format requirements (returned by the driver): */
2168
2169 /* The decoder has no special format requirements */
2170 #define V4L2_DEC_START_FMT_NONE         (0)
2171 /* The decoder requires full GOPs */
2172 #define V4L2_DEC_START_FMT_GOP          (1)
2173
2174 /* The structure must be zeroed before use by the application
2175    This ensures it can be extended safely in the future. */
2176 struct v4l2_decoder_cmd {
2177         __u32 cmd;
2178         __u32 flags;
2179         union {
2180                 struct {
2181                         __u64 pts;
2182                 } stop;
2183
2184                 struct {
2185                         /* 0 or 1000 specifies normal speed,
2186                            1 specifies forward single stepping,
2187                            -1 specifies backward single stepping,
2188                            >1: playback at speed/1000 of the normal speed,
2189                            <-1: reverse playback at (-speed/1000) of the normal speed. */
2190                         __s32 speed;
2191                         __u32 format;
2192                 } start;
2193
2194                 struct {
2195                         __u32 data[16];
2196                 } raw;
2197         };
2198 };
2199 #endif
2200
2201
2202 /*
2203  *      D A T A   S E R V I C E S   ( V B I )
2204  *
2205  *      Data services API by Michael Schimek
2206  */
2207
2208 /* Raw VBI */
2209 struct v4l2_vbi_format {
2210         __u32   sampling_rate;          /* in 1 Hz */
2211         __u32   offset;
2212         __u32   samples_per_line;
2213         __u32   sample_format;          /* V4L2_PIX_FMT_* */
2214         __s32   start[2];
2215         __u32   count[2];
2216         __u32   flags;                  /* V4L2_VBI_* */
2217         __u32   reserved[2];            /* must be zero */
2218 };
2219
2220 /*  VBI flags  */
2221 #define V4L2_VBI_UNSYNC         (1 << 0)
2222 #define V4L2_VBI_INTERLACED     (1 << 1)
2223
2224 /* Sliced VBI
2225  *
2226  *    This implements is a proposal V4L2 API to allow SLICED VBI
2227  * required for some hardware encoders. It should change without
2228  * notice in the definitive implementation.
2229  */
2230
2231 struct v4l2_sliced_vbi_format {
2232         __u16   service_set;
2233         /* service_lines[0][...] specifies lines 0-23 (1-23 used) of the first field
2234            service_lines[1][...] specifies lines 0-23 (1-23 used) of the second field
2235                                  (equals frame lines 313-336 for 625 line video
2236                                   standards, 263-286 for 525 line standards) */
2237         __u16   service_lines[2][24];
2238         __u32   io_size;
2239         __u32   reserved[2];            /* must be zero */
2240 };
2241
2242 /* Teletext World System Teletext
2243    (WST), defined on ITU-R BT.653-2 */
2244 #define V4L2_SLICED_TELETEXT_B          (0x0001)
2245 /* Video Program System, defined on ETS 300 231*/
2246 #define V4L2_SLICED_VPS                 (0x0400)
2247 /* Closed Caption, defined on EIA-608 */
2248 #define V4L2_SLICED_CAPTION_525         (0x1000)
2249 /* Wide Screen System, defined on ITU-R BT1119.1 */
2250 #define V4L2_SLICED_WSS_625             (0x4000)
2251
2252 #define V4L2_SLICED_VBI_525             (V4L2_SLICED_CAPTION_525)
2253 #define V4L2_SLICED_VBI_625             (V4L2_SLICED_TELETEXT_B | V4L2_SLICED_VPS | V4L2_SLICED_WSS_625)
2254
2255 struct v4l2_sliced_vbi_cap {
2256         __u16   service_set;
2257         /* service_lines[0][...] specifies lines 0-23 (1-23 used) of the first field
2258            service_lines[1][...] specifies lines 0-23 (1-23 used) of the second field
2259                                  (equals frame lines 313-336 for 625 line video
2260                                   standards, 263-286 for 525 line standards) */
2261         __u16   service_lines[2][24];
2262         __u32   type;           /* enum v4l2_buf_type */
2263         __u32   reserved[3];    /* must be 0 */
2264 };
2265
2266 struct v4l2_sliced_vbi_data {
2267         __u32   id;
2268         __u32   field;          /* 0: first field, 1: second field */
2269         __u32   line;           /* 1-23 */
2270         __u32   reserved;       /* must be 0 */
2271         __u8    data[48];
2272 };
2273
2274 /*
2275  * Sliced VBI data inserted into MPEG Streams
2276  */
2277
2278 /*
2279  * V4L2_MPEG_STREAM_VBI_FMT_IVTV:
2280  *
2281  * Structure of payload contained in an MPEG 2 Private Stream 1 PES Packet in an
2282  * MPEG-2 Program Pack that contains V4L2_MPEG_STREAM_VBI_FMT_IVTV Sliced VBI
2283  * data
2284  *
2285  * Note, the MPEG-2 Program Pack and Private Stream 1 PES packet header
2286  * definitions are not included here.  See the MPEG-2 specifications for details
2287  * on these headers.
2288  */
2289
2290 /* Line type IDs */
2291 #define V4L2_MPEG_VBI_IVTV_TELETEXT_B     (1)
2292 #define V4L2_MPEG_VBI_IVTV_CAPTION_525    (4)
2293 #define V4L2_MPEG_VBI_IVTV_WSS_625        (5)
2294 #define V4L2_MPEG_VBI_IVTV_VPS            (7)
2295
2296 struct v4l2_mpeg_vbi_itv0_line {
2297         __u8 id;        /* One of V4L2_MPEG_VBI_IVTV_* above */
2298         __u8 data[42];  /* Sliced VBI data for the line */
2299 } __attribute__ ((packed));
2300
2301 struct v4l2_mpeg_vbi_itv0 {
2302         __le32 linemask[2]; /* Bitmasks of VBI service lines present */
2303         struct v4l2_mpeg_vbi_itv0_line line[35];
2304 } __attribute__ ((packed));
2305
2306 struct v4l2_mpeg_vbi_ITV0 {
2307         struct v4l2_mpeg_vbi_itv0_line line[36];
2308 } __attribute__ ((packed));
2309
2310 #define V4L2_MPEG_VBI_IVTV_MAGIC0       "itv0"
2311 #define V4L2_MPEG_VBI_IVTV_MAGIC1       "ITV0"
2312
2313 struct v4l2_mpeg_vbi_fmt_ivtv {
2314         __u8 magic[4];
2315         union {
2316                 struct v4l2_mpeg_vbi_itv0 itv0;
2317                 struct v4l2_mpeg_vbi_ITV0 ITV0;
2318         };
2319 } __attribute__ ((packed));
2320
2321 /*
2322  *      A G G R E G A T E   S T R U C T U R E S
2323  */
2324
2325 /**
2326  * struct v4l2_plane_pix_format - additional, per-plane format definition
2327  * @sizeimage:          maximum size in bytes required for data, for which
2328  *                      this plane will be used
2329  * @bytesperline:       distance in bytes between the leftmost pixels in two
2330  *                      adjacent lines
2331  */
2332 struct v4l2_plane_pix_format {
2333         __u32           sizeimage;
2334         __u16           bytesperline;
2335         __u16           reserved[7];
2336 } __attribute__ ((packed));
2337
2338 /**
2339  * struct v4l2_pix_format_mplane - multiplanar format definition
2340  * @width:              image width in pixels
2341  * @height:             image height in pixels
2342  * @pixelformat:        little endian four character code (fourcc)
2343  * @field:              enum v4l2_field; field order (for interlaced video)
2344  * @colorspace:         enum v4l2_colorspace; supplemental to pixelformat
2345  * @plane_fmt:          per-plane information
2346  * @num_planes:         number of planes for this format
2347  */
2348 struct v4l2_pix_format_mplane {
2349         __u32                           width;
2350         __u32                           height;
2351         __u32                           pixelformat;
2352         __u32                           field;
2353         __u32                           colorspace;
2354
2355         struct v4l2_plane_pix_format    plane_fmt[VIDEO_MAX_PLANES];
2356         __u8                            num_planes;
2357         __u8                            reserved[11];
2358 } __attribute__ ((packed));
2359
2360 /**
2361  * struct v4l2_format - stream data format
2362  * @type:       enum v4l2_buf_type; type of the data stream
2363  * @pix:        definition of an image format
2364  * @pix_mp:     definition of a multiplanar image format
2365  * @win:        definition of an overlaid image
2366  * @vbi:        raw VBI capture or output parameters
2367  * @sliced:     sliced VBI capture or output parameters
2368  * @raw_data:   placeholder for future extensions and custom formats
2369  */
2370 struct v4l2_format {
2371         __u32    type;
2372         union {
2373                 struct v4l2_pix_format          pix;     /* V4L2_BUF_TYPE_VIDEO_CAPTURE */
2374                 struct v4l2_pix_format_mplane   pix_mp;  /* V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE */
2375                 struct v4l2_window              win;     /* V4L2_BUF_TYPE_VIDEO_OVERLAY */
2376                 struct v4l2_vbi_format          vbi;     /* V4L2_BUF_TYPE_VBI_CAPTURE */
2377                 struct v4l2_sliced_vbi_format   sliced;  /* V4L2_BUF_TYPE_SLICED_VBI_CAPTURE */
2378                 __u8    raw_data[200];                   /* user-defined */
2379         } fmt;
2380 };
2381
2382 /*      Stream type-dependent parameters
2383  */
2384 struct v4l2_streamparm {
2385         __u32    type;                  /* enum v4l2_buf_type */
2386         union {
2387                 struct v4l2_captureparm capture;
2388                 struct v4l2_outputparm  output;
2389                 __u8    raw_data[200];  /* user-defined */
2390         } parm;
2391 };
2392
2393 /*
2394  *      E V E N T S
2395  */
2396
2397 #define V4L2_EVENT_ALL                          0
2398 #define V4L2_EVENT_VSYNC                        1
2399 #define V4L2_EVENT_EOS                          2
2400 #define V4L2_EVENT_CTRL                         3
2401 #define V4L2_EVENT_FRAME_SYNC                   4
2402 #define V4L2_EVENT_PRIVATE_START                0x08000000
2403
2404 /* Payload for V4L2_EVENT_VSYNC */
2405 struct v4l2_event_vsync {
2406         /* Can be V4L2_FIELD_ANY, _NONE, _TOP or _BOTTOM */
2407         __u8 field;
2408 } __attribute__ ((packed));
2409
2410 /* Payload for V4L2_EVENT_CTRL */
2411 #define V4L2_EVENT_CTRL_CH_VALUE                (1 << 0)
2412 #define V4L2_EVENT_CTRL_CH_FLAGS                (1 << 1)
2413
2414 struct v4l2_event_ctrl {
2415         __u32 changes;
2416         __u32 type;
2417         union {
2418                 __s32 value;
2419                 __s64 value64;
2420         };
2421         __u32 flags;
2422         __s32 minimum;
2423         __s32 maximum;
2424         __s32 step;
2425         __s32 default_value;
2426 };
2427
2428 struct v4l2_event_frame_sync {
2429         __u32 frame_sequence;
2430 };
2431
2432 struct v4l2_event {
2433         __u32                           type;
2434         union {
2435                 struct v4l2_event_vsync         vsync;
2436                 struct v4l2_event_ctrl          ctrl;
2437                 struct v4l2_event_frame_sync    frame_sync;
2438                 __u8                            data[64];
2439         } u;
2440         __u32                           pending;
2441         __u32                           sequence;
2442         struct timespec                 timestamp;
2443         __u32                           id;
2444         __u32                           reserved[8];
2445 };
2446
2447 #define V4L2_EVENT_SUB_FL_SEND_INITIAL          (1 << 0)
2448 #define V4L2_EVENT_SUB_FL_ALLOW_FEEDBACK        (1 << 1)
2449
2450 struct v4l2_event_subscription {
2451         __u32                           type;
2452         __u32                           id;
2453         __u32                           flags;
2454         __u32                           reserved[5];
2455 };
2456
2457 /*
2458  *      A D V A N C E D   D E B U G G I N G
2459  *
2460  *      NOTE: EXPERIMENTAL API, NEVER RELY ON THIS IN APPLICATIONS!
2461  *      FOR DEBUGGING, TESTING AND INTERNAL USE ONLY!
2462  */
2463
2464 /* VIDIOC_DBG_G_REGISTER and VIDIOC_DBG_S_REGISTER */
2465
2466 #define V4L2_CHIP_MATCH_HOST       0  /* Match against chip ID on host (0 for the host) */
2467 #define V4L2_CHIP_MATCH_I2C_DRIVER 1  /* Match against I2C driver name */
2468 #define V4L2_CHIP_MATCH_I2C_ADDR   2  /* Match against I2C 7-bit address */
2469 #define V4L2_CHIP_MATCH_AC97       3  /* Match against anciliary AC97 chip */
2470
2471 struct v4l2_dbg_match {
2472         __u32 type; /* Match type */
2473         union {     /* Match this chip, meaning determined by type */
2474                 __u32 addr;
2475                 char name[32];
2476         };
2477 } __attribute__ ((packed));
2478
2479 struct v4l2_dbg_register {
2480         struct v4l2_dbg_match match;
2481         __u32 size;     /* register size in bytes */
2482         __u64 reg;
2483         __u64 val;
2484 } __attribute__ ((packed));
2485
2486 /* VIDIOC_DBG_G_CHIP_IDENT */
2487 struct v4l2_dbg_chip_ident {
2488         struct v4l2_dbg_match match;
2489         __u32 ident;       /* chip identifier as specified in <media/v4l2-chip-ident.h> */
2490         __u32 revision;    /* chip revision, chip specific */
2491 } __attribute__ ((packed));
2492
2493 /**
2494  * struct v4l2_create_buffers - VIDIOC_CREATE_BUFS argument
2495  * @index:      on return, index of the first created buffer
2496  * @count:      entry: number of requested buffers,
2497  *              return: number of created buffers
2498  * @memory:     enum v4l2_memory; buffer memory type
2499  * @format:     frame format, for which buffers are requested
2500  * @reserved:   future extensions
2501  */
2502 struct v4l2_create_buffers {
2503         __u32                   index;
2504         __u32                   count;
2505         __u32                   memory;
2506         struct v4l2_format      format;
2507         __u32                   reserved[8];
2508 };
2509
2510 /*
2511  *      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
2512  *
2513  */
2514 #define VIDIOC_QUERYCAP          _IOR('V',  0, struct v4l2_capability)
2515 #define VIDIOC_RESERVED           _IO('V',  1)
2516 #define VIDIOC_ENUM_FMT         _IOWR('V',  2, struct v4l2_fmtdesc)
2517 #define VIDIOC_G_FMT            _IOWR('V',  4, struct v4l2_format)
2518 #define VIDIOC_S_FMT            _IOWR('V',  5, struct v4l2_format)
2519 #define VIDIOC_REQBUFS          _IOWR('V',  8, struct v4l2_requestbuffers)
2520 #define VIDIOC_QUERYBUF         _IOWR('V',  9, struct v4l2_buffer)
2521 #define VIDIOC_G_FBUF            _IOR('V', 10, struct v4l2_framebuffer)
2522 #define VIDIOC_S_FBUF            _IOW('V', 11, struct v4l2_framebuffer)
2523 #define VIDIOC_OVERLAY           _IOW('V', 14, int)
2524 #define VIDIOC_QBUF             _IOWR('V', 15, struct v4l2_buffer)
2525 #define VIDIOC_DQBUF            _IOWR('V', 17, struct v4l2_buffer)
2526 #define VIDIOC_STREAMON          _IOW('V', 18, int)
2527 #define VIDIOC_STREAMOFF         _IOW('V', 19, int)
2528 #define VIDIOC_G_PARM           _IOWR('V', 21, struct v4l2_streamparm)
2529 #define VIDIOC_S_PARM           _IOWR('V', 22, struct v4l2_streamparm)
2530 #define VIDIOC_G_STD             _IOR('V', 23, v4l2_std_id)
2531 #define VIDIOC_S_STD             _IOW('V', 24, v4l2_std_id)
2532 #define VIDIOC_ENUMSTD          _IOWR('V', 25, struct v4l2_standard)
2533 #define VIDIOC_ENUMINPUT        _IOWR('V', 26, struct v4l2_input)
2534 #define VIDIOC_G_CTRL           _IOWR('V', 27, struct v4l2_control)
2535 #define VIDIOC_S_CTRL           _IOWR('V', 28, struct v4l2_control)
2536 #define VIDIOC_G_TUNER          _IOWR('V', 29, struct v4l2_tuner)
2537 #define VIDIOC_S_TUNER           _IOW('V', 30, struct v4l2_tuner)
2538 #define VIDIOC_G_AUDIO           _IOR('V', 33, struct v4l2_audio)
2539 #define VIDIOC_S_AUDIO           _IOW('V', 34, struct v4l2_audio)
2540 #define VIDIOC_QUERYCTRL        _IOWR('V', 36, struct v4l2_queryctrl)
2541 #define VIDIOC_QUERYMENU        _IOWR('V', 37, struct v4l2_querymenu)
2542 #define VIDIOC_G_INPUT           _IOR('V', 38, int)
2543 #define VIDIOC_S_INPUT          _IOWR('V', 39, int)
2544 #define VIDIOC_G_OUTPUT          _IOR('V', 46, int)
2545 #define VIDIOC_S_OUTPUT         _IOWR('V', 47, int)
2546 #define VIDIOC_ENUMOUTPUT       _IOWR('V', 48, struct v4l2_output)
2547 #define VIDIOC_G_AUDOUT          _IOR('V', 49, struct v4l2_audioout)
2548 #define VIDIOC_S_AUDOUT          _IOW('V', 50, struct v4l2_audioout)
2549 #define VIDIOC_G_MODULATOR      _IOWR('V', 54, struct v4l2_modulator)
2550 #define VIDIOC_S_MODULATOR       _IOW('V', 55, struct v4l2_modulator)
2551 #define VIDIOC_G_FREQUENCY      _IOWR('V', 56, struct v4l2_frequency)
2552 #define VIDIOC_S_FREQUENCY       _IOW('V', 57, struct v4l2_frequency)
2553 #define VIDIOC_CROPCAP          _IOWR('V', 58, struct v4l2_cropcap)
2554 #define VIDIOC_G_CROP           _IOWR('V', 59, struct v4l2_crop)
2555 #define VIDIOC_S_CROP            _IOW('V', 60, struct v4l2_crop)
2556 #define VIDIOC_G_JPEGCOMP        _IOR('V', 61, struct v4l2_jpegcompression)
2557 #define VIDIOC_S_JPEGCOMP        _IOW('V', 62, struct v4l2_jpegcompression)
2558 #define VIDIOC_QUERYSTD          _IOR('V', 63, v4l2_std_id)
2559 #define VIDIOC_TRY_FMT          _IOWR('V', 64, struct v4l2_format)
2560 #define VIDIOC_ENUMAUDIO        _IOWR('V', 65, struct v4l2_audio)
2561 #define VIDIOC_ENUMAUDOUT       _IOWR('V', 66, struct v4l2_audioout)
2562 #define VIDIOC_G_PRIORITY        _IOR('V', 67, __u32) /* enum v4l2_priority */
2563 #define VIDIOC_S_PRIORITY        _IOW('V', 68, __u32) /* enum v4l2_priority */
2564 #define VIDIOC_G_SLICED_VBI_CAP _IOWR('V', 69, struct v4l2_sliced_vbi_cap)
2565 #define VIDIOC_LOG_STATUS         _IO('V', 70)
2566 #define VIDIOC_G_EXT_CTRLS      _IOWR('V', 71, struct v4l2_ext_controls)
2567 #define VIDIOC_S_EXT_CTRLS      _IOWR('V', 72, struct v4l2_ext_controls)
2568 #define VIDIOC_TRY_EXT_CTRLS    _IOWR('V', 73, struct v4l2_ext_controls)
2569 #if 1
2570 #define VIDIOC_ENUM_FRAMESIZES  _IOWR('V', 74, struct v4l2_frmsizeenum)
2571 #define VIDIOC_ENUM_FRAMEINTERVALS _IOWR('V', 75, struct v4l2_frmivalenum)
2572 #define VIDIOC_G_ENC_INDEX       _IOR('V', 76, struct v4l2_enc_idx)
2573 #define VIDIOC_ENCODER_CMD      _IOWR('V', 77, struct v4l2_encoder_cmd)
2574 #define VIDIOC_TRY_ENCODER_CMD  _IOWR('V', 78, struct v4l2_encoder_cmd)
2575 #endif
2576
2577 #if 1
2578 /* Experimental, meant for debugging, testing and internal use.
2579    Only implemented if CONFIG_VIDEO_ADV_DEBUG is defined.
2580    You must be root to use these ioctls. Never use these in applications! */
2581 #define VIDIOC_DBG_S_REGISTER    _IOW('V', 79, struct v4l2_dbg_register)
2582 #define VIDIOC_DBG_G_REGISTER   _IOWR('V', 80, struct v4l2_dbg_register)
2583
2584 /* Experimental, meant for debugging, testing and internal use.
2585    Never use this ioctl in applications! */
2586 #define VIDIOC_DBG_G_CHIP_IDENT _IOWR('V', 81, struct v4l2_dbg_chip_ident)
2587 #endif
2588
2589 #define VIDIOC_S_HW_FREQ_SEEK    _IOW('V', 82, struct v4l2_hw_freq_seek)
2590
2591 /* These four DV Preset ioctls are deprecated in favor of the DV Timings
2592    ioctls. */
2593 #define VIDIOC_ENUM_DV_PRESETS  _IOWR('V', 83, struct v4l2_dv_enum_preset)
2594 #define VIDIOC_S_DV_PRESET      _IOWR('V', 84, struct v4l2_dv_preset)
2595 #define VIDIOC_G_DV_PRESET      _IOWR('V', 85, struct v4l2_dv_preset)
2596 #define VIDIOC_QUERY_DV_PRESET  _IOR('V',  86, struct v4l2_dv_preset)
2597 #define VIDIOC_S_DV_TIMINGS     _IOWR('V', 87, struct v4l2_dv_timings)
2598 #define VIDIOC_G_DV_TIMINGS     _IOWR('V', 88, struct v4l2_dv_timings)
2599 #define VIDIOC_DQEVENT           _IOR('V', 89, struct v4l2_event)
2600 #define VIDIOC_SUBSCRIBE_EVENT   _IOW('V', 90, struct v4l2_event_subscription)
2601 #define VIDIOC_UNSUBSCRIBE_EVENT _IOW('V', 91, struct v4l2_event_subscription)
2602
2603 /* Experimental, the below two ioctls may change over the next couple of kernel
2604    versions */
2605 #define VIDIOC_CREATE_BUFS      _IOWR('V', 92, struct v4l2_create_buffers)
2606 #define VIDIOC_PREPARE_BUF      _IOWR('V', 93, struct v4l2_buffer)
2607
2608 /* Experimental selection API */
2609 #define VIDIOC_G_SELECTION      _IOWR('V', 94, struct v4l2_selection)
2610 #define VIDIOC_S_SELECTION      _IOWR('V', 95, struct v4l2_selection)
2611
2612 /* Experimental, these two ioctls may change over the next couple of kernel
2613    versions. */
2614 #define VIDIOC_DECODER_CMD      _IOWR('V', 96, struct v4l2_decoder_cmd)
2615 #define VIDIOC_TRY_DECODER_CMD  _IOWR('V', 97, struct v4l2_decoder_cmd)
2616
2617 /* Experimental, these three ioctls may change over the next couple of kernel
2618    versions. */
2619 #define VIDIOC_ENUM_DV_TIMINGS  _IOWR('V', 98, struct v4l2_enum_dv_timings)
2620 #define VIDIOC_QUERY_DV_TIMINGS  _IOR('V', 99, struct v4l2_dv_timings)
2621 #define VIDIOC_DV_TIMINGS_CAP   _IOWR('V', 100, struct v4l2_dv_timings_cap)
2622
2623 /* Reminder: when adding new ioctls please add support for them to
2624    drivers/media/video/v4l2-compat-ioctl32.c as well! */
2625
2626 #define BASE_VIDIOC_PRIVATE     192             /* 192-255 are private */
2627
2628 #endif /* __LINUX_VIDEODEV2_H */