root/trunk/videodev2.d

Revision 336, 55.9 kB (checked in by mwarning, 2 years ago)

fix conversion bugs

Line 
1 /*
2 * D1 bindings for V4L2 api version 0.6.3 by Moritz Warning.
3 * Source http://www.ijg.org/files/jpegsr7.zip
4 */
5
6 /*
7  *  Video for Linux Two header file
8  *
9  *  Copyright (C) 1999-2007 the contributors
10  *
11  *  This program is free software; you can redistribute it and/or modify
12  *  it under the terms of the GNU General Public License as published by
13  *  the Free Software Foundation; either version 2 of the License, or
14  *  (at your option) any later version.
15  *
16  *  This program is distributed in the hope that it will be useful,
17  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
18  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19  *  GNU General Public License for more details.
20  *
21  *  Alternatively you can redistribute this file under the terms of the
22  *  BSD license as stated below:
23  *
24  *  Redistribution and use in source and binary forms, with or without
25  *  modification, are permitted provided that the following conditions
26  *  are met:
27  *  1. Redistributions of source code must retain the above copyright
28  *     notice, this list of conditions and the following disclaimer.
29  *  2. Redistributions in binary form must reproduce the above copyright
30  *     notice, this list of conditions and the following disclaimer in
31  *     the documentation and/or other materials provided with the
32  *     distribution.
33  *  3. The names of its contributors may not be used to endorse or promote
34  *     products derived from this software without specific prior written
35  *     permission.
36  *
37  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
38  *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
39  *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
40  *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
41  *  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
42  *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
43  *  TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
44  *  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
45  *  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
46  *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
47  *  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
48  *
49  * Header file for v4l or V4L2 drivers and applications
50  * with public API.
51  * All kernel-specific stuff were moved to media/v4l2-dev.h, so
52  * no #if __KERNEL tests are allowed here
53  *
54  * See http://linuxtv.org for more info
55  *
56  * Author: Bill Dirks <bill@thedirks.org>
57  *  Justin Schoeman
58  *              Hans Verkuil <hverkuil@xs4all.nl>
59  *  et al.
60  */
61  module videodev2;
62  
63  /*
64 #include <sys/time.h>
65
66 #include <linux/ioctl.h>
67 #include <linux/types.h>
68 */
69
70 import ioctl;
71 import tango.stdc.posix.sys.time;
72 //TODO: what about __attribute__ ((packed));
73
74 alias uint __u32;
75 alias int __s32;
76 alias char __u8;
77 alias long __s64;
78 alias ulong __u64;
79 alias ushort __u16;
80 alias uint __le32; //TODO!! defined in /usr/include/linux/types.h
81
82 /*
83  * Common stuff for both V4L1 and V4L2
84  * Moved from videodev.h
85  */
86 const VIDEO_MAX_FRAME = 32;
87
88
89 /* These defines are V4L1 specific and should not be used with the V4L2 API!
90    They will be removed from this header in the future. */
91
92 const VID_TYPE_CAPTURE = 1; /* Can capture */
93 const VID_TYPE_TUNER = 2; /* Can tune */
94 const VID_TYPE_TELETEXT = 4; /* Does teletext */
95 const VID_TYPE_OVERLAY = 8; /* Overlay onto frame buffer */
96 const VID_TYPE_CHROMAKEY = 16; /* Overlay by chromakey */
97 const VID_TYPE_CLIPPING = 32; /* Can clip */
98 const VID_TYPE_FRAMERAM = 64; /* Uses the frame buffer memory */
99 const VID_TYPE_SCALES  = 128; /* Scalable */
100 const VID_TYPE_MONOCHROME = 256; /* Monochrome only */
101 const VID_TYPE_SUBCAPTURE = 512; /* Can capture subareas of the image */
102 const VID_TYPE_MPEG_DECODER = 1024; /* Can decode MPEG streams */
103 const VID_TYPE_MPEG_ENCODER = 2048; /* Can encode MPEG streams */
104 const VID_TYPE_MJPEG_DECODER = 4096; /* Can decode MJPEG streams */
105 const VID_TYPE_MJPEG_ENCODER = 8192; /* Can encode MJPEG streams */
106
107 /*
108  * M I S C E L L A N E O U S
109  */
110
111 /*  Four-character-code (FOURCC) */
112 template v4l2_fourcc(char a, char b, char c, char d)
113 {
114     const v4l2_fourcc = ((cast(__u32) a) | ((cast(__u32) b) << 8) | ((cast(__u32) c) << 16) | ((cast(__u32) d) << 24));
115 }
116
117 /*
118  * E N U M S
119  */
120 enum v4l2_field {
121  V4L2_FIELD_ANY = 0, /* driver can choose from none,
122       top, bottom, interlaced
123       depending on whatever it thinks
124       is approximate ... */
125  V4L2_FIELD_NONE = 1, /* this device has no fields ... */
126  V4L2_FIELD_TOP = 2, /* top field only */
127  V4L2_FIELD_BOTTOM = 3, /* bottom field only */
128  V4L2_FIELD_INTERLACED = 4, /* both fields interlaced */
129  V4L2_FIELD_SEQ_TB = 5, /* both fields sequential into one
130       buffer, top-bottom order */
131  V4L2_FIELD_SEQ_BT = 6, /* same as above + bottom-top order */
132  V4L2_FIELD_ALTERNATE = 7, /* both fields alternating into
133       separate buffers */
134  V4L2_FIELD_INTERLACED_TB = 8, /* both fields interlaced, top field
135       first and the top field is
136       transmitted first */
137  V4L2_FIELD_INTERLACED_BT = 9, /* both fields interlaced, top field
138       first and the bottom field is
139       transmitted first */
140 }
141 template V4L2_FIELD_HAS_TOP(field)
142 {
143 const V4L2_FIELD_HAS_TOP =
144  ((field) == V4L2_FIELD_TOP  ||
145   (field) == V4L2_FIELD_INTERLACED ||
146   (field) == V4L2_FIELD_INTERLACED_TB ||
147   (field) == V4L2_FIELD_INTERLACED_BT ||
148   (field) == V4L2_FIELD_SEQ_TB ||
149   (field) == V4L2_FIELD_SEQ_BT);
150 }
151 template V4L2_FIELD_HAS_BOTTOM(field)
152 {
153 const V4L2_FIELD_HAS_BOTTOM =
154  ((field) == V4L2_FIELD_BOTTOM  ||
155   (field) == V4L2_FIELD_INTERLACED ||
156   (field) == V4L2_FIELD_INTERLACED_TB ||
157   (field) == V4L2_FIELD_INTERLACED_BT ||
158   (field) == V4L2_FIELD_SEQ_TB ||
159   (field) == V4L2_FIELD_SEQ_BT);
160 }
161 template V4L2_FIELD_HAS_BOTH(field)
162 {
163 const V4L2_FIELD_HAS_BOTH =
164   ((field) == V4L2_FIELD_INTERLACED ||
165   (field) == V4L2_FIELD_INTERLACED_TB ||
166   (field) == V4L2_FIELD_INTERLACED_BT ||
167   (field) == V4L2_FIELD_SEQ_TB ||
168   (field) == V4L2_FIELD_SEQ_BT);
169 }
170
171 enum v4l2_buf_type {
172  V4L2_BUF_TYPE_VIDEO_CAPTURE = 1,
173  V4L2_BUF_TYPE_VIDEO_OUTPUT = 2,
174  V4L2_BUF_TYPE_VIDEO_OVERLAY = 3,
175  V4L2_BUF_TYPE_VBI_CAPTURE = 4,
176  V4L2_BUF_TYPE_VBI_OUTPUT = 5,
177  V4L2_BUF_TYPE_SLICED_VBI_CAPTURE = 6,
178  V4L2_BUF_TYPE_SLICED_VBI_OUTPUT = 7,
179 //#if 1
180  /* Experimental */
181  V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY = 8,
182 //#endif
183  V4L2_BUF_TYPE_PRIVATE = 0x80,
184 }
185
186 enum v4l2_ctrl_type {
187  V4L2_CTRL_TYPE_INTEGER = 1,
188  V4L2_CTRL_TYPE_BOOLEAN = 2,
189  V4L2_CTRL_TYPE_MENU = 3,
190  V4L2_CTRL_TYPE_BUTTON = 4,
191  V4L2_CTRL_TYPE_INTEGER64 = 5,
192  V4L2_CTRL_TYPE_CTRL_CLASS = 6,
193 }
194
195 enum v4l2_tuner_type {
196  V4L2_TUNER_RADIO = 1,
197  V4L2_TUNER_ANALOG_TV = 2,
198  V4L2_TUNER_DIGITAL_TV = 3,
199 }
200
201 enum v4l2_memory {
202  V4L2_MEMORY_MMAP = 1,
203  V4L2_MEMORY_USERPTR = 2,
204  V4L2_MEMORY_OVERLAY = 3,
205 }
206
207 /* see also http://vektor.theorem.ca/graphics/ycbcr/ */
208 enum v4l2_colorspace {
209  /* ITU-R 601 -- broadcast NTSC/PAL */
210  V4L2_COLORSPACE_SMPTE170M = 1,
211
212  /* 1125-Line (US) HDTV */
213  V4L2_COLORSPACE_SMPTE240M = 2,
214
215  /* HD and modern captures. */
216  V4L2_COLORSPACE_REC709 = 3,
217
218  /* broken BT878 extents (601, luma range 16-253 instead of 16-235) */
219  V4L2_COLORSPACE_BT878 = 4,
220
221  /* These should be useful.  Assume 601 extents. */
222  V4L2_COLORSPACE_470_SYSTEM_M  = 5,
223  V4L2_COLORSPACE_470_SYSTEM_BG = 6,
224
225  /* I know there will be cameras that send this.  So, this is
226   * unspecified chromaticities and full 0-255 on each of the
227   * Y'CbCr components
228   */
229  V4L2_COLORSPACE_JPEG = 7,
230
231  /* For RGB colourspaces, this is probably a good start. */
232  V4L2_COLORSPACE_SRGB = 8,
233 }
234
235 enum v4l2_priority {
236  V4L2_PRIORITY_UNSET = 0,  /* not initialized */
237  V4L2_PRIORITY_BACKGROUND = 1,
238  V4L2_PRIORITY_INTERACTIVE = 2,
239  V4L2_PRIORITY_RECORD = 3,
240  V4L2_PRIORITY_DEFAULT = V4L2_PRIORITY_INTERACTIVE,
241 }
242
243 struct v4l2_rect {
244  __s32   left;
245  __s32   top;
246  __s32   width;
247  __s32   height;
248 }
249
250 struct v4l2_fract {
251  __u32   numerator;
252  __u32   denominator;
253 }
254
255 /*
256  * D R I V E R   C A P A B I L I T I E S
257  */
258 struct v4l2_capability {
259  __u8[16] driver; /* i.e. "bttv" */
260  __u8[32] card; /* i.e. "Hauppauge WinTV" */
261  __u8[32] bus_info; /* "PCI:" + pci_name(pci_dev) */
262  __u32   version_;        /* should use KERNEL_VERSION() */
263  __u32 capabilities; /* Device capabilities */
264  __u32[4] reserved;
265 }
266
267 /* Values for 'capabilities' field */
268 const V4L2_CAP_VIDEO_CAPTURE = 0x00000001; /* Is a video capture device */
269 const V4L2_CAP_VIDEO_OUTPUT = 0x00000002; /* Is a video output device */
270 const V4L2_CAP_VIDEO_OVERLAY = 0x00000004; /* Can do video overlay */
271 const V4L2_CAP_VBI_CAPTURE = 0x00000010; /* Is a raw VBI capture device */
272 const V4L2_CAP_VBI_OUTPUT = 0x00000020; /* Is a raw VBI output device */
273 const V4L2_CAP_SLICED_VBI_CAPTURE = 0x00000040; /* Is a sliced VBI capture device */
274 const V4L2_CAP_SLICED_VBI_OUTPUT = 0x00000080; /* Is a sliced VBI output device */
275 const V4L2_CAP_RDS_CAPTURE  = 0x00000100; /* RDS data capture */
276 const V4L2_CAP_VIDEO_OUTPUT_OVERLAY = 0x00000200; /* Can do video output overlay */
277 const V4L2_CAP_HW_FREQ_SEEK = 0x00000400; /* Can do hardware frequency seek  */
278
279 const V4L2_CAP_TUNER = 0x00010000; /* has a tuner */
280 const V4L2_CAP_AUDIO = 0x00020000; /* has audio support */
281 const V4L2_CAP_RADIO = 0x00040000; /* is a radio device */
282
283 const V4L2_CAP_READWRITE = 0x01000000; /* read/write systemcalls */
284 const V4L2_CAP_ASYNCIO = 0x02000000; /* async I/O */
285 const V4L2_CAP_STREAMING = 0x04000000; /* streaming I/O ioctls */
286
287 /*
288  * V I D E O   I M A G E   F O R M A T
289  */
290 struct v4l2_pix_format {
291  __u32           width;
292  __u32   height;
293  __u32   pixelformat;
294  /*enum*/ v4l2_field   field;
295  __u32             bytesperline; /* for padding, zero if unused */
296  __u32            sizeimage;
297  /*enum*/ v4l2_colorspace colorspace;
298  __u32   priv;  /* private data, depends on pixelformat */
299 }
300
301 /*      Pixel format         FOURCC                        depth  Description  */
302 const V4L2_PIX_FMT_RGB332 = v4l2_fourcc!('R', 'G', 'B', '1'); /*  8  RGB-3-3-2     */
303 const V4L2_PIX_FMT_RGB444 = v4l2_fourcc!('R', '4', '4', '4'); /* 16  xxxxrrrr ggggbbbb */
304 const V4L2_PIX_FMT_RGB555 = v4l2_fourcc!('R', 'G', 'B', 'O'); /* 16  RGB-5-5-5     */
305 const V4L2_PIX_FMT_RGB565 = v4l2_fourcc!('R', 'G', 'B', 'P'); /* 16  RGB-5-6-5     */
306 const V4L2_PIX_FMT_RGB555X = v4l2_fourcc!('R', 'G', 'B', 'Q'); /* 16  RGB-5-5-5 BE  */
307 const V4L2_PIX_FMT_RGB565X = v4l2_fourcc!('R', 'G', 'B', 'R'); /* 16  RGB-5-6-5 BE  */
308 const V4L2_PIX_FMT_BGR24 = v4l2_fourcc!('B', 'G', 'R', '3'); /* 24  BGR-8-8-8     */
309 const V4L2_PIX_FMT_RGB24 = v4l2_fourcc!('R', 'G', 'B', '3'); /* 24  RGB-8-8-8     */
310 const V4L2_PIX_FMT_BGR32 = v4l2_fourcc!('B', 'G', 'R', '4'); /* 32  BGR-8-8-8-8   */
311 const V4L2_PIX_FMT_RGB32 = v4l2_fourcc!('R', 'G', 'B', '4'); /* 32  RGB-8-8-8-8   */
312 const V4L2_PIX_FMT_GREY = v4l2_fourcc!('G', 'R', 'E', 'Y'); /*  8  Greyscale     */
313 const V4L2_PIX_FMT_Y16 = v4l2_fourcc!('Y', '1', '6', ' '); /* 16  Greyscale     */
314 const V4L2_PIX_FMT_PAL8 = v4l2_fourcc!('P', 'A', 'L', '8'); /*  8  8-bit palette */
315 const V4L2_PIX_FMT_YVU410  = v4l2_fourcc!('Y', 'V', 'U', '9'); /*  9  YVU 4:1:0     */
316 const V4L2_PIX_FMT_YVU420  = v4l2_fourcc!('Y', 'V', '1', '2'); /* 12  YVU 4:2:0     */
317 const V4L2_PIX_FMT_YUYV = v4l2_fourcc!('Y', 'U', 'Y', 'V'); /* 16  YUV 4:2:2     */
318 const V4L2_PIX_FMT_UYVY = v4l2_fourcc!('U', 'Y', 'V', 'Y'); /* 16  YUV 4:2:2     */
319 const V4L2_PIX_FMT_VYUY = v4l2_fourcc!('V', 'Y', 'U', 'Y'); /* 16  YUV 4:2:2     */
320 const V4L2_PIX_FMT_YUV422P = v4l2_fourcc!('4', '2', '2', 'P'); /* 16  YVU422 planar */
321 const V4L2_PIX_FMT_YUV411P = v4l2_fourcc!('4', '1', '1', 'P'); /* 16  YVU411 planar */
322 const V4L2_PIX_FMT_Y41P = v4l2_fourcc!('Y', '4', '1', 'P'); /* 12  YUV 4:1:1     */
323 const V4L2_PIX_FMT_YUV444 = v4l2_fourcc!('Y', '4', '4', '4'); /* 16  xxxxyyyy uuuuvvvv */
324 const V4L2_PIX_FMT_YUV555 = v4l2_fourcc!('Y', 'U', 'V', 'O'); /* 16  YUV-5-5-5     */
325 const V4L2_PIX_FMT_YUV565 = v4l2_fourcc!('Y', 'U', 'V', 'P'); /* 16  YUV-5-6-5     */
326 const V4L2_PIX_FMT_YUV32 = v4l2_fourcc!('Y', 'U', 'V', '4'); /* 32  YUV-8-8-8-8   */
327
328 /* two planes -- one Y, one Cr + Cb interleaved  */
329 const V4L2_PIX_FMT_NV12 = v4l2_fourcc!('N', 'V', '1', '2'); /* 12  Y/CbCr 4:2:0  */
330 const V4L2_PIX_FMT_NV21 = v4l2_fourcc!('N', 'V', '2', '1'); /* 12  Y/CrCb 4:2:0  */
331 const V4L2_PIX_FMT_NV16 = v4l2_fourcc!('N', 'V', '1', '6'); /* 16  Y/CbCr 4:2:2  */
332 const V4L2_PIX_FMT_NV61 = v4l2_fourcc!('N', 'V', '6', '1'); /* 16  Y/CrCb 4:2:2  */
333
334 /*  The following formats are not defined in the V4L2 specification */
335 const V4L2_PIX_FMT_YUV410  = v4l2_fourcc!('Y', 'U', 'V', '9'); /*  9  YUV 4:1:0     */
336 const V4L2_PIX_FMT_YUV420  = v4l2_fourcc!('Y', 'U', '1', '2'); /* 12  YUV 4:2:0     */
337 const V4L2_PIX_FMT_YYUV = v4l2_fourcc!('Y', 'Y', 'U', 'V'); /* 16  YUV 4:2:2     */
338 const V4L2_PIX_FMT_HI240 = v4l2_fourcc!('H', 'I', '2', '4'); /*  8  8-bit color   */
339 const V4L2_PIX_FMT_HM12 = v4l2_fourcc!('H', 'M', '1', '2'); /*  8  YUV 4:2:0 16x16 macroblocks */
340
341 /* see http://www.siliconimaging.com/RGB%20Bayer.htm */
342 const V4L2_PIX_FMT_SBGGR8  = v4l2_fourcc!('B', 'A', '8', '1'); /*  8  BGBG.. GRGR.. */
343 const V4L2_PIX_FMT_SGBRG8 = v4l2_fourcc!('G', 'B', 'R', 'G'); /*  8  GBGB.. RGRG.. */
344 /*
345  * 10bit raw bayer, expanded to 16 bits
346  * xxxxrrrrrrrrrrxxxxgggggggggg xxxxggggggggggxxxxbbbbbbbbbb...
347  */
348 const V4L2_PIX_FMT_SGRBG10 = v4l2_fourcc!('B', 'A', '1', '0');
349 /* 10bit raw bayer DPCM compressed to 8 bits */
350 const V4L2_PIX_FMT_SGRBG10DPCM8 = v4l2_fourcc!('B', 'D', '1', '0');
351 const V4L2_PIX_FMT_SBGGR16 = v4l2_fourcc!('B', 'Y', 'R', '2'); /* 16  BGBG.. GRGR.. */
352
353 /* compressed formats */
354 const V4L2_PIX_FMT_MJPEG = v4l2_fourcc!('M', 'J', 'P', 'G'); /* Motion-JPEG   */
355 const V4L2_PIX_FMT_JPEG = v4l2_fourcc!('J', 'P', 'E', 'G'); /* JFIF JPEG     */
356 const V4L2_PIX_FMT_DV = v4l2_fourcc!('d', 'v', 's', 'd'); /* 1394          */
357 const V4L2_PIX_FMT_MPEG = v4l2_fourcc!('M', 'P', 'E', 'G'); /* MPEG-1/2/4    */
358
359 /*  Vendor-specific formats   */
360 const V4L2_PIX_FMT_WNVA = v4l2_fourcc!('W', 'N', 'V', 'A'); /* Winnov hw compress */
361 const V4L2_PIX_FMT_SN9C10X  = v4l2_fourcc!('S', '9', '1', '0'); /* SN9C10x compression */
362 const V4L2_PIX_FMT_PWC1 = v4l2_fourcc!('P', 'W', 'C', '1'); /* pwc older webcam */
363 const V4L2_PIX_FMT_PWC2 = v4l2_fourcc!('P', 'W', 'C', '2'); /* pwc newer webcam */
364 const V4L2_PIX_FMT_ET61X251 = v4l2_fourcc!('E', '6', '2', '5'); /* ET61X251 compression */
365 const V4L2_PIX_FMT_SPCA501  = v4l2_fourcc!('S', '5', '0', '1'); /* YUYV per line */
366 const V4L2_PIX_FMT_SPCA505  = v4l2_fourcc!('S', '5', '0', '5'); /* YYUV per line */
367 const V4L2_PIX_FMT_SPCA508  = v4l2_fourcc!('S', '5', '0', '8'); /* YUVY per line */
368 const V4L2_PIX_FMT_SPCA561  = v4l2_fourcc!('S', '5', '6', '1'); /* compressed GBRG bayer */
369 const V4L2_PIX_FMT_PAC207 = v4l2_fourcc!('P', '2', '0', '7'); /* compressed BGGR bayer */
370 const V4L2_PIX_FMT_MR97310A = v4l2_fourcc!('M', '3', '1', '0'); /* compressed BGGR bayer */
371 const V4L2_PIX_FMT_SQ905C = v4l2_fourcc!('9', '0', '5', 'C'); /* compressed RGGB bayer */
372 const V4L2_PIX_FMT_PJPG = v4l2_fourcc!('P', 'J', 'P', 'G'); /* Pixart 73xx JPEG */
373 const V4L2_PIX_FMT_YVYU = v4l2_fourcc!('Y', 'V', 'Y', 'U'); /* 16  YVU 4:2:2     */
374
375 /*
376  * F O R M A T   E N U M E R A T I O N
377  */
378 struct v4l2_fmtdesc {
379  __u32      index;             /* Format number      */
380  /*enum*/ v4l2_buf_type  type;              /* buffer type        */
381  __u32               flags;
382  __u8[32]      description;   /* Description string */
383  __u32      pixelformat;       /* Format fourcc      */
384  __u32[4]      reserved;
385 }
386
387 const V4L2_FMT_FLAG_COMPRESSED = 0x0001;
388
389 //#if 1
390  /* Experimental Frame Size and frame rate enumeration */
391 /*
392  * F R A M E   S I Z E   E N U M E R A T I O N
393  */
394 enum v4l2_frmsizetypes {
395  V4L2_FRMSIZE_TYPE_DISCRETE = 1,
396  V4L2_FRMSIZE_TYPE_CONTINUOUS = 2,
397  V4L2_FRMSIZE_TYPE_STEPWISE = 3,
398 }
399
400 struct v4l2_frmsize_discrete {
401  __u32   width;  /* Frame width [pixel] */
402  __u32   height;  /* Frame height [pixel] */
403 }
404
405 struct v4l2_frmsize_stepwise {
406  __u32   min_width; /* Minimum frame width [pixel] */
407  __u32   max_width; /* Maximum frame width [pixel] */
408  __u32   step_width; /* Frame width step size [pixel] */
409  __u32   min_height; /* Minimum frame height [pixel] */
410  __u32   max_height; /* Maximum frame height [pixel] */
411  __u32   step_height; /* Frame height step size [pixel] */
412 }
413
414 struct v4l2_frmsizeenum {
415  __u32   index;  /* Frame size number */
416  __u32   pixel_format; /* Pixel format */
417  __u32   type;  /* Frame size type the device supports. */
418
419  union {     /* Frame size */
420   /*struct*/ v4l2_frmsize_discrete discrete;
421   /*struct*/ v4l2_frmsize_stepwise stepwise;
422  }
423
424  __u32[2]   reserved;   /* Reserved space for future use */
425 }
426
427 /*
428  * F R A M E   R A T E   E N U M E R A T I O N
429  */
430 enum v4l2_frmivaltypes {
431  V4L2_FRMIVAL_TYPE_DISCRETE = 1,
432  V4L2_FRMIVAL_TYPE_CONTINUOUS = 2,
433  V4L2_FRMIVAL_TYPE_STEPWISE = 3,
434 }
435
436 struct v4l2_frmival_stepwise {
437  /*struct*/ v4l2_fract min;  /* Minimum frame interval [s] */
438  /*struct*/ v4l2_fract max;  /* Maximum frame interval [s] */
439  /*struct*/ v4l2_fract step;  /* Frame interval step size [s] */
440 }
441
442 struct v4l2_frmivalenum {
443  __u32   index;  /* Frame format index */
444  __u32   pixel_format; /* Pixel format */
445  __u32   width;  /* Frame width */
446  __u32   height;  /* Frame height */
447  __u32   type;  /* Frame interval type the device supports. */
448
449  union {     /* Frame interval */
450   /*struct*/ v4l2_fract  discrete;
451   /*struct*/ v4l2_frmival_stepwise stepwise;
452  }
453
454  __u32[2] reserved;   /* Reserved space for future use */
455 }
456 //#endif
457
458 /*
459  * T I M E C O D E
460  */
461 struct v4l2_timecode {
462  __u32 type;
463  __u32 flags;
464  __u8 frames;
465  __u8 seconds;
466  __u8 minutes;
467  __u8 hours;
468  __u8[4] userbits;
469 }
470
471 /*  Type  */
472 const V4L2_TC_TYPE_24FPS = 1;
473 const V4L2_TC_TYPE_25FPS = 2;
474 const V4L2_TC_TYPE_30FPS = 3;
475 const V4L2_TC_TYPE_50FPS = 4;
476 const V4L2_TC_TYPE_60FPS = 5;
477
478 /*  Flags  */
479 const V4L2_TC_FLAG_DROPFRAME  = 0x0001; /* "drop-frame" mode */
480 const V4L2_TC_FLAG_COLORFRAME  = 0x0002;
481 const V4L2_TC_USERBITS_field  = 0x000C;
482 const V4L2_TC_USERBITS_USERDEFINED = 0x0000;
483 const V4L2_TC_USERBITS_8BITCHARS = 0x0008;
484 /* The above is based on SMPTE timecodes */
485
486 struct v4l2_jpegcompression {
487  int quality;
488
489  int  APPn;              /* Number of APP segment to be written,
490      * must be 0..15 */
491  int  APP_len;           /* Length of data in JPEG APPn segment */
492  char[60] APP_data;      /* Data in the JPEG APPn segment. */
493
494  int  COM_len;           /* Length of data in JPEG COM segment */
495  char[60] COM_data;      /* Data in JPEG COM segment */
496
497  __u32 jpeg_markers;     /* Which markers should go into the JPEG
498      * output. Unless you exactly know what
499      * you do, leave them untouched.
500      * Inluding less markers will make the
501      * resulting code smaller, but there will
502      * be fewer aplications which can read it.
503      * The presence of the APP and COM marker
504      * is influenced by APP_len and COM_len
505      * ONLY, not by this property! */
506
507 const V4L2_JPEG_MARKER_DHT = (1<<3) ; /* Define Huffman Tables */
508 const V4L2_JPEG_MARKER_DQT = (1<<4) ; /* Define Quantization Tables */
509 const V4L2_JPEG_MARKER_DRI = (1<<5); /* Define Restart Interval */
510 const V4L2_JPEG_MARKER_COM = (1<<6); /* Comment segment */
511 const V4L2_JPEG_MARKER_APP = (1<<7); /* App segment, driver will
512      * allways use APP0 */
513 }
514
515 /*
516  * M E M O R Y - M A P P I N G   B U F F E R S
517  */
518 struct v4l2_requestbuffers {
519  __u32   count;
520  /*enum*/ v4l2_buf_type      type;
521  /*enum*/ v4l2_memory        memory;
522  __u32[2]   reserved;
523 }
524
525  union M {
526   __u32           offset;
527  size_t   userptr;
528  }
529
530 struct v4l2_buffer {
531  __u32   index;
532  /*enum*/ v4l2_buf_type      type;
533  __u32   bytesused;
534  __u32   flags;
535  /*enum*/ v4l2_field  field;
536  /*struct*/ timeval  timestamp;
537  /*struct*/ v4l2_timecode timecode;
538  __u32   sequence;
539
540  /* memory location */
541  /*enum*/ v4l2_memory        memory;
542  /*union*/ M /*{
543   __u32           offset;
544  size_t   userptr;
545  }*/ m;
546  __u32   length;
547  __u32   input;
548  __u32   reserved;
549 }
550
551 /*  Flags for 'flags' field */
552 const V4L2_BUF_FLAG_MAPPED = 0x0001; /* Buffer is mapped (flag) */
553 const V4L2_BUF_FLAG_QUEUED = 0x0002; /* Buffer is queued for processing */
554 const V4L2_BUF_FLAG_DONE = 0x0004; /* Buffer is ready */
555 const V4L2_BUF_FLAG_KEYFRAME = 0x0008; /* Image is a keyframe (I-frame) */
556 const V4L2_BUF_FLAG_PFRAME = 0x0010; /* Image is a P-frame */
557 const V4L2_BUF_FLAG_BFRAME = 0x0020; /* Image is a B-frame */
558 const V4L2_BUF_FLAG_TIMECODE = 0x0100; /* timecode field is valid */
559 const V4L2_BUF_FLAG_INPUT = 0x0200; /* input field is valid */
560
561 /*
562  * O V E R L A Y   P R E V I E W
563  */
564 struct v4l2_framebuffer {
565  __u32   capability;
566  __u32   flags;
567 /* FIXME: in theory we should pass something like PCI device + memory
568  * region + offset instead of some physical address */
569  void *base;
570  /*struct*/ v4l2_pix_format fmt;
571 }
572 /*  Flags for the 'capability' field. Read only */
573 const V4L2_FBUF_CAP_EXTERNOVERLAY = 0x0001;
574 const V4L2_FBUF_CAP_CHROMAKEY = 0x0002;
575 const V4L2_FBUF_CAP_LIST_CLIPPING = 0x0004;
576 const V4L2_FBUF_CAP_BITMAP_CLIPPING = 0x0008;
577 const V4L2_FBUF_CAP_LOCAL_ALPHA = 0x0010;
578 const V4L2_FBUF_CAP_GLOBAL_ALPHA = 0x0020;
579 const V4L2_FBUF_CAP_LOCAL_INV_ALPHA = 0x0040;
580 /*  Flags for the 'flags' field. */
581 const V4L2_FBUF_FLAG_PRIMARY = 0x0001;
582 const V4L2_FBUF_FLAG_OVERLAY = 0x0002;
583 const V4L2_FBUF_FLAG_CHROMAKEY = 0x0004;
584 const V4L2_FBUF_FLAG_LOCAL_ALPHA = 0x0008;
585 const V4L2_FBUF_FLAG_GLOBAL_ALPHA = 0x0010;
586 const V4L2_FBUF_FLAG_LOCAL_INV_ALPHA = 0x0020;
587
588 struct v4l2_clip {
589  /*struct*/ v4l2_rect        c;
590  /*struct*/ v4l2_clip* next;
591 }
592
593 struct v4l2_window {
594  /*struct*/ v4l2_rect        w;
595  /*enum*/ v4l2_field   field;
596  __u32   chromakey;
597  /*struct*/ v4l2_clip* clips;
598  __u32   clipcount;
599  void*   bitmap;
600  __u8                    global_alpha;
601 }
602
603 /*
604  * C A P T U R E   P A R A M E T E R S
605  */
606 struct v4l2_captureparm {
607  __u32     capability;   /*  Supported modes */
608  __u32     capturemode;   /*  Current mode */
609  /*struct*/ v4l2_fract  timeperframe;  /*  Time per frame in .1us units */
610  __u32     extendedmode;  /*  Driver-specific extensions */
611  __u32              readbuffers;   /*  # of buffers for read */
612  __u32[4]     reserved;
613 }
614
615 /*  Flags for 'capability' and 'capturemode' fields */
616 const V4L2_MODE_HIGHQUALITY = 0x0001; /*  High quality imaging mode */
617 const V4L2_CAP_TIMEPERFRAME = 0x1000; /*  timeperframe field is supported */
618
619 struct v4l2_outputparm {
620  __u32     capability;  /*  Supported modes */
621  __u32     outputmode;  /*  Current mode */
622  /*struct*/ v4l2_fract  timeperframe; /*  Time per frame in seconds */
623  __u32     extendedmode; /*  Driver-specific extensions */
624  __u32              writebuffers; /*  # of buffers for write */
625  __u32[4]     reserved;
626 }
627
628 /*
629  * I N P U T   I M A G E   C R O P P I N G
630  */
631 struct v4l2_cropcap {
632  /*enum*/ v4l2_buf_type      type;
633  /*struct*/ v4l2_rect        bounds;
634  /*struct*/ v4l2_rect        defrect;
635  /*struct*/ v4l2_fract       pixelaspect;
636 }
637
638 struct v4l2_crop {
639  /*enum*/ v4l2_buf_type      type;
640  /*struct*/ v4l2_rect        c;
641 }
642
643 /*
644  *      A N A L O G   V I D E O   S T A N D A R D
645  */
646
647 typedef __u64 v4l2_std_id;
648
649 /* one bit for each */
650 const V4L2_STD_PAL_B = (cast(v4l2_std_id)0x00000001);
651 const V4L2_STD_PAL_B1 = (cast(v4l2_std_id)0x00000002);
652 const V4L2_STD_PAL_G = (cast(v4l2_std_id)0x00000004);
653 const V4L2_STD_PAL_H = (cast(v4l2_std_id)0x00000008);
654 const V4L2_STD_PAL_I = (cast(v4l2_std_id)0x00000010);
655 const V4L2_STD_PAL_D = (cast(v4l2_std_id)0x00000020);
656 const V4L2_STD_PAL_D1 = (cast(v4l2_std_id)0x00000040);
657 const V4L2_STD_PAL_K = (cast(v4l2_std_id)0x00000080);
658
659 const V4L2_STD_PAL_M = (cast(v4l2_std_id)0x00000100);
660 const V4L2_STD_PAL_N = (cast(v4l2_std_id)0x00000200);
661 const V4L2_STD_PAL_Nc = (cast(v4l2_std_id)0x00000400);
662 const V4L2_STD_PAL_60 = (cast(v4l2_std_id)0x00000800);
663
664 const V4L2_STD_NTSC_M = (cast(v4l2_std_id)0x00001000);
665 const V4L2_STD_NTSC_M_JP = (cast(v4l2_std_id)0x00002000);
666 const V4L2_STD_NTSC_443 =  (cast(v4l2_std_id)0x00004000);
667 const V4L2_STD_NTSC_M_KR = (cast(v4l2_std_id)0x00008000);
668
669 const V4L2_STD_SECAM_B =   (cast(v4l2_std_id)0x00010000);
670 const V4L2_STD_SECAM_D =   (cast(v4l2_std_id)0x00020000);
671 const V4L2_STD_SECAM_G =   (cast(v4l2_std_id)0x00040000);
672 const V4L2_STD_SECAM_H =   (cast(v4l2_std_id)0x00080000);
673 const V4L2_STD_SECAM_K =   (cast(v4l2_std_id)0x00100000);
674 const V4L2_STD_SECAM_K1 =  (cast(v4l2_std_id)0x00200000);
675 const V4L2_STD_SECAM_L =   (cast(v4l2_std_id)0x00400000);
676 const V4L2_STD_SECAM_LC =  (cast(v4l2_std_id)0x00800000);
677
678 /* ATSC/HDTV */
679 const V4L2_STD_ATSC_8_VSB = (cast(v4l2_std_id)0x01000000);
680 const V4L2_STD_ATSC_16_VSB = (cast(v4l2_std_id)0x02000000);
681
682 /* FIXME:
683    Although std_id is 64 bits, there is an issue on PPC32 architecture that
684    makes switch(__u64) to break. So, there's a hack on v4l2-common.c rounding
685    this value to 32 bits.
686    As, currently, the max value is for V4L2_STD_ATSC_16_VSB (30 bits wide),
687    it should work fine. However, if needed to add more than two standards,
688    v4l2-common.c should be fixed.
689  */
690
691 /* some common needed stuff */
692 const V4L2_STD_PAL_BG = (V4L2_STD_PAL_B  |
693      V4L2_STD_PAL_B1 |
694      V4L2_STD_PAL_G);
695 const V4L2_STD_PAL_DK = (V4L2_STD_PAL_D  |
696      V4L2_STD_PAL_D1 |
697      V4L2_STD_PAL_K);
698 const V4L2_STD_PAL = (V4L2_STD_PAL_BG |
699      V4L2_STD_PAL_DK |
700      V4L2_STD_PAL_H  |
701      V4L2_STD_PAL_I);
702 const V4L2_STD_NTSC = (V4L2_STD_NTSC_M |
703      V4L2_STD_NTSC_M_JP     |
704      V4L2_STD_NTSC_M_KR);
705 const V4L2_STD_SECAM_DK = (V4L2_STD_SECAM_D |
706      V4L2_STD_SECAM_K |
707      V4L2_STD_SECAM_K1);
708 const V4L2_STD_SECAM  = (V4L2_STD_SECAM_B |
709      V4L2_STD_SECAM_G |
710      V4L2_STD_SECAM_H |
711      V4L2_STD_SECAM_DK |
712      V4L2_STD_SECAM_L       |
713      V4L2_STD_SECAM_LC);
714
715 const V4L2_STD_525_60 = (V4L2_STD_PAL_M  |
716      V4L2_STD_PAL_60 |
717      V4L2_STD_NTSC  |
718      V4L2_STD_NTSC_443);
719 const V4L2_STD_625_50 = (V4L2_STD_PAL  |
720      V4L2_STD_PAL_N  |
721      V4L2_STD_PAL_Nc |
722      V4L2_STD_SECAM);
723 const V4L2_STD_ATSC = (V4L2_STD_ATSC_8_VSB | V4L2_STD_ATSC_16_VSB);
724
725 const V4L2_STD_UNKNOWN = 0;
726 const V4L2_STD_ALL = (V4L2_STD_525_60 | V4L2_STD_625_50);
727
728 /* some merged standards */
729 const V4L2_STD_MN = (V4L2_STD_PAL_M|V4L2_STD_PAL_N|V4L2_STD_PAL_Nc|V4L2_STD_NTSC);
730 const V4L2_STD_B = (V4L2_STD_PAL_B|V4L2_STD_PAL_B1|V4L2_STD_SECAM_B);
731 const V4L2_STD_GH = (V4L2_STD_PAL_G|V4L2_STD_PAL_H|V4L2_STD_SECAM_G|V4L2_STD_SECAM_H);
732 const V4L2_STD_DK = (V4L2_STD_PAL_DK|V4L2_STD_SECAM_DK);
733
734 struct v4l2_standard {
735  __u32       index;
736  v4l2_std_id          id;
737  __u8[24]       name;
738  /*struct*/ v4l2_fract    frameperiod; /* Frames, not fields */
739  __u32       framelines;
740  __u32[4]       reserved;
741 }
742
743 /*
744  * V I D E O   I N P U T S
745  */
746 struct v4l2_input {
747  __u32      index;  /*  Which input */
748  __u8[32]      name;  /*  Label */
749  __u32      type;  /*  Type of input */
750  __u32      audioset;  /*  Associated audios (bitfield) */
751  __u32        tuner;             /*  Associated tuner */
752  v4l2_std_id  std;
753  __u32      status;
754  __u32[4]      reserved;
755 }
756
757 /*  Values for the 'type' field */
758 const V4L2_INPUT_TYPE_TUNER = 1;
759 const V4L2_INPUT_TYPE_CAMERA = 2;
760
761 /* field 'status' - general */
762 const V4L2_IN_ST_NO_POWER = 0x00000001; /* Attached device is off */
763 const V4L2_IN_ST_NO_SIGNAL = 0x00000002;
764 const V4L2_IN_ST_NO_COLOR = 0x00000004;
765
766 /* field 'status' - sensor orientation */
767 /* If sensor is mounted upside down set both bits */
768 const V4L2_IN_ST_HFLIP = 0x00000010; /* Frames are flipped horizontally */
769 const V4L2_IN_ST_VFLIP = 0x00000020; /* Frames are flipped vertically */
770
771 /* field 'status' - analog */
772 const V4L2_IN_ST_NO_H_LOCK = 0x00000100; /* No horizontal sync lock */
773 const V4L2_IN_ST_COLOR_KILL = 0x00000200; /* Color killer is active */
774
775 /* field 'status' - digital */
776 const V4L2_IN_ST_NO_SYNC = 0x00010000; /* No synchronization lock */
777 const V4L2_IN_ST_NO_EQU = 0x00020000; /* No equalizer lock */
778 const V4L2_IN_ST_NO_CARRIER = 0x00040000; /* Carrier recovery failed */
779
780 /* field 'status' - VCR and set-top box */
781 const V4L2_IN_ST_MACROVISION = 0x01000000; /* Macrovision detected */
782 const V4L2_IN_ST_NO_ACCESS = 0x02000000; /* Conditional access denied */
783 const V4L2_IN_ST_VTR = 0x04000000; /* VTR time constant */
784
785 /*
786  * V I D E O   O U T P U T S
787  */
788 struct v4l2_output {
789  __u32      index;  /*  Which output */
790  __u8[32]      name;  /*  Label */
791  __u32      type;  /*  Type of output */
792  __u32      audioset;  /*  Associated audios (bitfield) */
793  __u32      modulator;         /*  Associated modulator */
794  v4l2_std_id  std;
795  __u32[4]      reserved;
796 }
797 /*  Values for the 'type' field */
798 const V4L2_OUTPUT_TYPE_MODULATOR = 1;
799 const V4L2_OUTPUT_TYPE_ANALOG = 2;
800 const V4L2_OUTPUT_TYPE_ANALOGVGAOVERLAY = 3;
801
802 /*
803  * C O N T R O L S
804  */
805 struct v4l2_control {
806  __u32       id;
807  __s32       value;
808 }
809
810 struct v4l2_ext_control {
811  __u32 id;
812  __u32[2] reserved2;
813  union {
814   __s32 value;
815   __s64 value64;
816   void* reserved;
817  }
818 } //__attribute__ ((packed));
819
820 struct v4l2_ext_controls {
821  __u32 ctrl_class;
822  __u32 count;
823  __u32 error_idx;
824  __u32[2] reserved;
825  /*struct*/ v4l2_ext_control* controls;
826 }
827
828 /*  Values for ctrl_class field */
829 const V4L2_CTRL_CLASS_USER = 0x00980000; /* Old-style 'user' controls */
830 const V4L2_CTRL_CLASS_MPEG = 0x00990000; /* MPEG-compression controls */
831 const V4L2_CTRL_CLASS_CAMERA = 0x009a0000; /* Camera class controls */
832
833 const V4L2_CTRL_ID_MASK = (0x0fffffff);
834 template V4L2_CTRL_ID2CLASS(id) {
835   const V4L2_CTRL_ID2CLASS = ((id) & 0x0fff0000UL);
836 }
837 template V4L2_CTRL_DRIVER_PRIV(id) {
838 const V4L2_CTRL_DRIVER_PRIV = (((id) & 0xffff) >= 0x1000);
839 }
840
841 /*  Used in the VIDIOC_QUERYCTRL ioctl for querying controls */
842 struct v4l2_queryctrl {
843  __u32       id;
844  /*enum*/ v4l2_ctrl_type  type;
845  __u8[32]       name; /* Whatever */
846  __s32       minimum; /* Note signedness */
847  __s32       maximum;
848  __s32       step;
849  __s32       default_value;
850  __u32                flags;
851  __u32[2]       reserved;
852 }
853
854 /*  Used in the VIDIOC_QUERYMENU ioctl for querying menu items */
855 struct v4l2_querymenu {
856  __u32  id;
857  __u32  index;
858  __u8[32]  name; /* Whatever */
859  __u32  reserved;
860 }
861
862 /*  Control flags  */
863 const V4L2_CTRL_FLAG_DISABLED  = 0x0001;
864 const V4L2_CTRL_FLAG_GRABBED  = 0x0002;
865 const V4L2_CTRL_FLAG_READ_ONLY  = 0x0004;
866 const V4L2_CTRL_FLAG_UPDATE   = 0x0008;
867 const V4L2_CTRL_FLAG_INACTIVE  = 0x0010;
868 const V4L2_CTRL_FLAG_SLIDER   = 0x0020;
869 const V4L2_CTRL_FLAG_WRITE_ONLY  = 0x0040;
870
871 /*  Query flag, to be ORed with the control ID */
872 const V4L2_CTRL_FLAG_NEXT_CTRL = 0x80000000;
873
874 /*  User-class control IDs defined by V4L2 */
875 const V4L2_CID_BASE = (V4L2_CTRL_CLASS_USER | 0x900);
876 const V4L2_CID_USER_BASE = V4L2_CID_BASE;
877 /*  IDs reserved for driver specific controls */
878 const V4L2_CID_PRIVATE_BASE = 0x08000000;
879
880 const V4L2_CID_USER_CLASS = (V4L2_CTRL_CLASS_USER | 1);
881 const V4L2_CID_BRIGHTNESS = (V4L2_CID_BASE+0);
882 const V4L2_CID_CONTRAST = (V4L2_CID_BASE+1);
883 const V4L2_CID_SATURATION  = (V4L2_CID_BASE+2);
884 const V4L2_CID_HUE = (V4L2_CID_BASE+3);
885 const V4L2_CID_AUDIO_VOLUME = (V4L2_CID_BASE+5);
886 const V4L2_CID_AUDIO_BALANCE = (V4L2_CID_BASE+6);
887 const V4L2_CID_AUDIO_BASS = (V4L2_CID_BASE+7);
888 const V4L2_CID_AUDIO_TREBLE = (V4L2_CID_BASE+8);
889 const V4L2_CID_AUDIO_MUTE = (V4L2_CID_BASE+9);
890 const V4L2_CID_AUDIO_LOUDNESS = (V4L2_CID_BASE+10);
891 const V4L2_CID_BLACK_LEVEL = (V4L2_CID_BASE+11); /* Deprecated */
892 const V4L2_CID_AUTO_WHITE_BALANCE = (V4L2_CID_BASE+12);
893 const V4L2_CID_DO_WHITE_BALANCE = (V4L2_CID_BASE+13);
894 const V4L2_CID_RED_BALANCE = (V4L2_CID_BASE+14);
895 const V4L2_CID_BLUE_BALANCE = (V4L2_CID_BASE+15);
896 const V4L2_CID_GAMMA = (V4L2_CID_BASE+16);
897 const V4L2_CID_WHITENESS = (V4L2_CID_GAMMA); /* Deprecated */
898 const V4L2_CID_EXPOSURE = (V4L2_CID_BASE+17);
899 const V4L2_CID_AUTOGAIN = (V4L2_CID_BASE+18);
900 const V4L2_CID_GAIN = (V4L2_CID_BASE+19);
901 const V4L2_CID_HFLIP = (V4L2_CID_BASE+20);
902 const V4L2_CID_VFLIP = (V4L2_CID_BASE+21);
903
904 /* Deprecated; use V4L2_CID_PAN_RESET and V4L2_CID_TILT_RESET */
905 const V4L2_CID_HCENTER = (V4L2_CID_BASE+22);
906 const V4L2_CID_VCENTER = (V4L2_CID_BASE+23);
907
908 const V4L2_CID_POWER_LINE_FREQUENCY = (V4L2_CID_BASE+24);
909 enum v4l2_power_line_frequency {
910  V4L2_CID_POWER_LINE_FREQUENCY_DISABLED = 0,
911  V4L2_CID_POWER_LINE_FREQUENCY_50HZ = 1,
912  V4L2_CID_POWER_LINE_FREQUENCY_60HZ = 2,
913 }
914 const V4L2_CID_HUE_AUTO = (V4L2_CID_BASE+25);
915 const V4L2_CID_WHITE_BALANCE_TEMPERATURE = (V4L2_CID_BASE+26);
916 const V4L2_CID_SHARPNESS = (V4L2_CID_BASE+27);
917 const V4L2_CID_BACKLIGHT_COMPENSATION = (V4L2_CID_BASE+28);
918 const V4L2_CID_CHROMA_AGC = (V4L2_CID_BASE+29);
919 const V4L2_CID_COLOR_KILLER = (V4L2_CID_BASE+30);
920 const V4L2_CID_COLORFX = (V4L2_CID_BASE+31);
921 enum v4l2_colorfx {
922  V4L2_COLORFX_NONE = 0,
923  V4L2_COLORFX_BW  = 1,
924  V4L2_COLORFX_SEPIA = 2,
925 }
926
927 /* last CID + 1 */
928 const V4L2_CID_LASTP1 = (V4L2_CID_BASE+32);
929
930 /*  MPEG-class control IDs defined by V4L2 */
931 const V4L2_CID_MPEG_BASE = (V4L2_CTRL_CLASS_MPEG | 0x900);
932 const V4L2_CID_MPEG_CLASS = (V4L2_CTRL_CLASS_MPEG | 1);
933
934 /*  MPEG streams */
935 const V4L2_CID_MPEG_STREAM_TYPE = (V4L2_CID_MPEG_BASE+0);
936 enum v4l2_mpeg_stream_type {
937  V4L2_MPEG_STREAM_TYPE_MPEG2_PS = 0, /* MPEG-2 program stream */
938  V4L2_MPEG_STREAM_TYPE_MPEG2_TS = 1, /* MPEG-2 transport stream */
939  V4L2_MPEG_STREAM_TYPE_MPEG1_SS = 2, /* MPEG-1 system stream */
940  V4L2_MPEG_STREAM_TYPE_MPEG2_DVD = 3, /* MPEG-2 DVD-compatible stream */
941  V4L2_MPEG_STREAM_TYPE_MPEG1_VCD = 4, /* MPEG-1 VCD-compatible stream */
942  V4L2_MPEG_STREAM_TYPE_MPEG2_SVCD = 5, /* MPEG-2 SVCD-compatible stream */
943 }
944 const V4L2_CID_MPEG_STREAM_PID_PMT = (V4L2_CID_MPEG_BASE+1);
945 const V4L2_CID_MPEG_STREAM_PID_AUDIO = (V4L2_CID_MPEG_BASE+2);
946 const V4L2_CID_MPEG_STREAM_PID_VIDEO = (V4L2_CID_MPEG_BASE+3);
947 const V4L2_CID_MPEG_STREAM_PID_PCR = (V4L2_CID_MPEG_BASE+4);
948 const V4L2_CID_MPEG_STREAM_PES_ID_AUDIO = (V4L2_CID_MPEG_BASE+5);
949 const V4L2_CID_MPEG_STREAM_PES_ID_VIDEO = (V4L2_CID_MPEG_BASE+6);
950 const V4L2_CID_MPEG_STREAM_VBI_FMT = (V4L2_CID_MPEG_BASE+7);
951 enum v4l2_mpeg_stream_vbi_fmt {
952  V4L2_MPEG_STREAM_VBI_FMT_NONE = 0,  /* No VBI in the MPEG stream */
953  V4L2_MPEG_STREAM_VBI_FMT_IVTV = 1,  /* VBI in private packets, IVTV format */
954 }
955
956 /*  MPEG audio */
957 const V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ = (V4L2_CID_MPEG_BASE+100);
958 enum v4l2_mpeg_audio_sampling_freq {
959  V4L2_MPEG_AUDIO_SAMPLING_FREQ_44100 = 0,
960  V4L2_MPEG_AUDIO_SAMPLING_FREQ_48000 = 1,
961  V4L2_MPEG_AUDIO_SAMPLING_FREQ_32000 = 2,
962 }
963 const V4L2_CID_MPEG_AUDIO_ENCODING = (V4L2_CID_MPEG_BASE+101);
964 enum v4l2_mpeg_audio_encoding {
965  V4L2_MPEG_AUDIO_ENCODING_LAYER_1 = 0,
966  V4L2_MPEG_AUDIO_ENCODING_LAYER_2 = 1,
967  V4L2_MPEG_AUDIO_ENCODING_LAYER_3 = 2,
968  V4L2_MPEG_AUDIO_ENCODING_AAC     = 3,
969  V4L2_MPEG_AUDIO_ENCODING_AC3     = 4,
970 }
971 const V4L2_CID_MPEG_AUDIO_L1_BITRATE = (V4L2_CID_MPEG_BASE+102);
972 enum v4l2_mpeg_audio_l1_bitrate {
973  V4L2_MPEG_AUDIO_L1_BITRATE_32K  = 0,
974  V4L2_MPEG_AUDIO_L1_BITRATE_64K  = 1,
975  V4L2_MPEG_AUDIO_L1_BITRATE_96K  = 2,
976  V4L2_MPEG_AUDIO_L1_BITRATE_128K = 3,
977  V4L2_MPEG_AUDIO_L1_BITRATE_160K = 4,
978  V4L2_MPEG_AUDIO_L1_BITRATE_192K = 5,
979  V4L2_MPEG_AUDIO_L1_BITRATE_224K = 6,
980  V4L2_MPEG_AUDIO_L1_BITRATE_256K = 7,
981  V4L2_MPEG_AUDIO_L1_BITRATE_288K = 8,
982  V4L2_MPEG_AUDIO_L1_BITRATE_320K = 9,
983  V4L2_MPEG_AUDIO_L1_BITRATE_352K = 10,
984  V4L2_MPEG_AUDIO_L1_BITRATE_384K = 11,
985  V4L2_MPEG_AUDIO_L1_BITRATE_416K = 12,
986  V4L2_MPEG_AUDIO_L1_BITRATE_448K = 13,
987 }
988 const V4L2_CID_MPEG_AUDIO_L2_BITRATE = (V4L2_CID_MPEG_BASE+103);
989 enum v4l2_mpeg_audio_l2_bitrate {
990  V4L2_MPEG_AUDIO_L2_BITRATE_32K  = 0,
991  V4L2_MPEG_AUDIO_L2_BITRATE_48K  = 1,
992  V4L2_MPEG_AUDIO_L2_BITRATE_56K  = 2,
993  V4L2_MPEG_AUDIO_L2_BITRATE_64K  = 3,
994  V4L2_MPEG_AUDIO_L2_BITRATE_80K  = 4,
995  V4L2_MPEG_AUDIO_L2_BITRATE_96K  = 5,
996  V4L2_MPEG_AUDIO_L2_BITRATE_112K = 6,
997  V4L2_MPEG_AUDIO_L2_BITRATE_128K = 7,
998  V4L2_MPEG_AUDIO_L2_BITRATE_160K = 8,
999  V4L2_MPEG_AUDIO_L2_BITRATE_192K = 9,
1000  V4L2_MPEG_AUDIO_L2_BITRATE_224K = 10,
1001  V4L2_MPEG_AUDIO_L2_BITRATE_256K = 11,
1002  V4L2_MPEG_AUDIO_L2_BITRATE_320K = 12,
1003  V4L2_MPEG_AUDIO_L2_BITRATE_384K = 13,
1004 }
1005 const V4L2_CID_MPEG_AUDIO_L3_BITRATE = (V4L2_CID_MPEG_BASE+104);
1006 enum v4l2_mpeg_audio_l3_bitrate {
1007  V4L2_MPEG_AUDIO_L3_BITRATE_32K  = 0,
1008  V4L2_MPEG_AUDIO_L3_BITRATE_40K  = 1,
1009  V4L2_MPEG_AUDIO_L3_BITRATE_48K  = 2,
1010  V4L2_MPEG_AUDIO_L3_BITRATE_56K  = 3,
1011  V4L2_MPEG_AUDIO_L3_BITRATE_64K  = 4,
1012  V4L2_MPEG_AUDIO_L3_BITRATE_80K  = 5,
1013  V4L2_MPEG_AUDIO_L3_BITRATE_96K  = 6,
1014  V4L2_MPEG_AUDIO_L3_BITRATE_112K = 7,
1015  V4L2_MPEG_AUDIO_L3_BITRATE_128K = 8,
1016  V4L2_MPEG_AUDIO_L3_BITRATE_160K = 9,
1017  V4L2_MPEG_AUDIO_L3_BITRATE_192K = 10,
1018  V4L2_MPEG_AUDIO_L3_BITRATE_224K = 11,
1019  V4L2_MPEG_AUDIO_L3_BITRATE_256K = 12,
1020  V4L2_MPEG_AUDIO_L3_BITRATE_320K = 13,
1021 }
1022 const V4L2_CID_MPEG_AUDIO_MODE = (V4L2_CID_MPEG_BASE+105);
1023 enum v4l2_mpeg_audio_mode {
1024  V4L2_MPEG_AUDIO_MODE_STEREO       = 0,
1025  V4L2_MPEG_AUDIO_MODE_JOINT_STEREO = 1,
1026  V4L2_MPEG_AUDIO_MODE_DUAL         = 2,
1027  V4L2_MPEG_AUDIO_MODE_MONO         = 3,
1028 }
1029 const V4L2_CID_MPEG_AUDIO_MODE_EXTENSION = (V4L2_CID_MPEG_BASE+106);
1030 enum v4l2_mpeg_audio_mode_extension {
1031  V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_4  = 0,
1032  V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_8  = 1,
1033  V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_12 = 2,
1034  V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_16 = 3,
1035 }
1036 const V4L2_CID_MPEG_AUDIO_EMPHASIS = (V4L2_CID_MPEG_BASE+107);
1037 enum v4l2_mpeg_audio_emphasis {
1038  V4L2_MPEG_AUDIO_EMPHASIS_NONE = 0,
1039  V4L2_MPEG_AUDIO_EMPHASIS_50_DIV_15_uS = 1,
1040  V4L2_MPEG_AUDIO_EMPHASIS_CCITT_J17    = 2,
1041 }
1042 const V4L2_CID_MPEG_AUDIO_CRC = (V4L2_CID_MPEG_BASE+108);
1043 enum v4l2_mpeg_audio_crc {
1044  V4L2_MPEG_AUDIO_CRC_NONE  = 0,
1045  V4L2_MPEG_AUDIO_CRC_CRC16 = 1,
1046 }
1047 const V4L2_CID_MPEG_AUDIO_MUTE = (V4L2_CID_MPEG_BASE+109);
1048 const V4L2_CID_MPEG_AUDIO_AAC_BITRATE = (V4L2_CID_MPEG_BASE+110);
1049 const V4L2_CID_MPEG_AUDIO_AC3_BITRATE = (V4L2_CID_MPEG_BASE+111);
1050 enum v4l2_mpeg_audio_ac3_bitrate {
1051  V4L2_MPEG_AUDIO_AC3_BITRATE_32K  = 0,
1052  V4L2_MPEG_AUDIO_AC3_BITRATE_40K  = 1,
1053  V4L2_MPEG_AUDIO_AC3_BITRATE_48K  = 2,
1054  V4L2_MPEG_AUDIO_AC3_BITRATE_56K  = 3,
1055  V4L2_MPEG_AUDIO_AC3_BITRATE_64K  = 4,
1056  V4L2_MPEG_AUDIO_AC3_BITRATE_80K  = 5,
1057  V4L2_MPEG_AUDIO_AC3_BITRATE_96K  = 6,
1058  V4L2_MPEG_AUDIO_AC3_BITRATE_112K = 7,
1059  V4L2_MPEG_AUDIO_AC3_BITRATE_128K = 8,
1060  V4L2_MPEG_AUDIO_AC3_BITRATE_160K = 9,
1061  V4L2_MPEG_AUDIO_AC3_BITRATE_192K = 10,
1062  V4L2_MPEG_AUDIO_AC3_BITRATE_224K = 11,
1063  V4L2_MPEG_AUDIO_AC3_BITRATE_256K = 12,
1064  V4L2_MPEG_AUDIO_AC3_BITRATE_320K = 13,
1065  V4L2_MPEG_AUDIO_AC3_BITRATE_384K = 14,
1066  V4L2_MPEG_AUDIO_AC3_BITRATE_448K = 15,
1067  V4L2_MPEG_AUDIO_AC3_BITRATE_512K = 16,
1068  V4L2_MPEG_AUDIO_AC3_BITRATE_576K = 17,
1069  V4L2_MPEG_AUDIO_AC3_BITRATE_640K = 18,
1070 }
1071
1072 /*  MPEG video */
1073 const V4L2_CID_MPEG_VIDEO_ENCODING = (V4L2_CID_MPEG_BASE+200);
1074 enum v4l2_mpeg_video_encoding {
1075  V4L2_MPEG_VIDEO_ENCODING_MPEG_1     = 0,
1076  V4L2_MPEG_VIDEO_ENCODING_MPEG_2     = 1,
1077  V4L2_MPEG_VIDEO_ENCODING_MPEG_4_AVC = 2,
1078 }
1079 const V4L2_CID_MPEG_VIDEO_ASPECT = (V4L2_CID_MPEG_BASE+201);
1080 enum v4l2_mpeg_video_aspect {
1081  V4L2_MPEG_VIDEO_ASPECT_1x1     = 0,
1082  V4L2_MPEG_VIDEO_ASPECT_4x3     = 1,
1083  V4L2_MPEG_VIDEO_ASPECT_16x9    = 2,
1084  V4L2_MPEG_VIDEO_ASPECT_221x100 = 3,
1085 }
1086 const V4L2_CID_MPEG_VIDEO_B_FRAMES = (V4L2_CID_MPEG_BASE+202);
1087 const V4L2_CID_MPEG_VIDEO_GOP_SIZE = (V4L2_CID_MPEG_BASE+203);
1088 const V4L2_CID_MPEG_VIDEO_GOP_CLOSURE = (V4L2_CID_MPEG_BASE+204);
1089 const V4L2_CID_MPEG_VIDEO_PULLDOWN = (V4L2_CID_MPEG_BASE+205);
1090 const V4L2_CID_MPEG_VIDEO_BITRATE_MODE = (V4L2_CID_MPEG_BASE+206);
1091 enum v4l2_mpeg_video_bitrate_mode {
1092  V4L2_MPEG_VIDEO_BITRATE_MODE_VBR = 0,
1093  V4L2_MPEG_VIDEO_BITRATE_MODE_CBR = 1,
1094 }
1095 const V4L2_CID_MPEG_VIDEO_BITRATE = (V4L2_CID_MPEG_BASE+207);
1096 const V4L2_CID_MPEG_VIDEO_BITRATE_PEAK = (V4L2_CID_MPEG_BASE+208);
1097 const V4L2_CID_MPEG_VIDEO_TEMPORAL_DECIMATION = (V4L2_CID_MPEG_BASE+209);
1098 const V4L2_CID_MPEG_VIDEO_MUTE = (V4L2_CID_MPEG_BASE+210);
1099 const V4L2_CID_MPEG_VIDEO_MUTE_YUV = (V4L2_CID_MPEG_BASE+211);
1100
1101 /*  MPEG-class control IDs specific to the CX2341x driver as defined by V4L2 */
1102 const V4L2_CID_MPEG_CX2341X_BASE = (V4L2_CTRL_CLASS_MPEG | 0x1000);
1103 const V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE = (V4L2_CID_MPEG_CX2341X_BASE+0);
1104 enum v4l2_mpeg_cx2341x_video_spatial_filter_mode {
1105  V4L2_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE_MANUAL = 0,
1106  V4L2_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE_AUTO = 1,
1107 }
1108 const V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER = (V4L2_CID_MPEG_CX2341X_BASE+1);
1109 const V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE = (V4L2_CID_MPEG_CX2341X_BASE+2);
1110 enum v4l2_mpeg_cx2341x_video_luma_spatial_filter_type {
1111  V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_OFF = 0,
1112  V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_1D_HOR = 1,
1113  V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_1D_VERT = 2,
1114  V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_2D_HV_SEPARABLE = 3,
1115  V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_2D_SYM_NON_SEPARABLE = 4,
1116 }
1117 const V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE = (V4L2_CID_MPEG_CX2341X_BASE+3);
1118 enum v4l2_mpeg_cx2341x_video_chroma_spatial_filter_type {
1119  V4L2_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE_OFF    = 0,
1120  V4L2_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE_1D_HOR = 1,
1121 }
1122 const V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE = (V4L2_CID_MPEG_CX2341X_BASE+4);
1123 enum v4l2_mpeg_cx2341x_video_temporal_filter_mode {
1124  V4L2_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE_MANUAL = 0,
1125  V4L2_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE_AUTO   = 1,
1126 }
1127 const V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER = (V4L2_CID_MPEG_CX2341X_BASE+5);
1128 const V4L2_CID_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE = (V4L2_CID_MPEG_CX2341X_BASE+6);
1129 enum v4l2_mpeg_cx2341x_video_median_filter_type {
1130  V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_OFF      = 0,
1131  V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_HOR      = 1,
1132  V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_VERT     = 2,
1133  V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_HOR_VERT = 3,
1134  V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_DIAG     = 4,
1135 }
1136 const V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_BOTTOM = (V4L2_CID_MPEG_CX2341X_BASE+7);
1137 const V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_TOP = (V4L2_CID_MPEG_CX2341X_BASE+8);
1138 const V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_BOTTOM = (V4L2_CID_MPEG_CX2341X_BASE+9);
1139 const V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_TOP = (V4L2_CID_MPEG_CX2341X_BASE+10);
1140 const V4L2_CID_MPEG_CX2341X_STREAM_INSERT_NAV_PACKETS = (V4L2_CID_MPEG_CX2341X_BASE+11);
1141
1142 /*  Camera class control IDs */
1143 const V4L2_CID_CAMERA_CLASS_BASE = (V4L2_CTRL_CLASS_CAMERA | 0x900);
1144 const V4L2_CID_CAMERA_CLASS = (V4L2_CTRL_CLASS_CAMERA | 1);
1145
1146 const V4L2_CID_EXPOSURE_AUTO = (V4L2_CID_CAMERA_CLASS_BASE+1);
1147 enum  v4l2_exposure_auto_type {
1148  V4L2_EXPOSURE_AUTO = 0,
1149  V4L2_EXPOSURE_MANUAL = 1,
1150  V4L2_EXPOSURE_SHUTTER_PRIORITY = 2,
1151  V4L2_EXPOSURE_APERTURE_PRIORITY = 3
1152 }
1153 const V4L2_CID_EXPOSURE_ABSOLUTE = (V4L2_CID_CAMERA_CLASS_BASE+2);
1154 const V4L2_CID_EXPOSURE_AUTO_PRIORITY = (V4L2_CID_CAMERA_CLASS_BASE+3);
1155
1156 const V4L2_CID_PAN_RELATIVE = (V4L2_CID_CAMERA_CLASS_BASE+4);
1157 const V4L2_CID_TILT_RELATIVE = (V4L2_CID_CAMERA_CLASS_BASE+5);
1158 const V4L2_CID_PAN_RESET = (V4L2_CID_CAMERA_CLASS_BASE+6);
1159 const V4L2_CID_TILT_RESET = (V4L2_CID_CAMERA_CLASS_BASE+7);
1160
1161 const V4L2_CID_PAN_ABSOLUTE = (V4L2_CID_CAMERA_CLASS_BASE+8);
1162 const V4L2_CID_TILT_ABSOLUTE = (V4L2_CID_CAMERA_CLASS_BASE+9);
1163
1164 const V4L2_CID_FOCUS_ABSOLUTE = (V4L2_CID_CAMERA_CLASS_BASE+10);
1165 const V4L2_CID_FOCUS_RELATIVE = (V4L2_CID_CAMERA_CLASS_BASE+11);
1166 const V4L2_CID_FOCUS_AUTO = (V4L2_CID_CAMERA_CLASS_BASE+12);
1167
1168 const V4L2_CID_ZOOM_ABSOLUTE = (V4L2_CID_CAMERA_CLASS_BASE+13);
1169 const V4L2_CID_ZOOM_RELATIVE = (V4L2_CID_CAMERA_CLASS_BASE+14);
1170 const V4L2_CID_ZOOM_CONTINUOUS = (V4L2_CID_CAMERA_CLASS_BASE+15);
1171
1172 const V4L2_CID_PRIVACY = (V4L2_CID_CAMERA_CLASS_BASE+16);
1173
1174 /*
1175  * T U N I N G
1176  */
1177 struct v4l2_tuner {
1178  __u32                   index;
1179  __u8[32]   name;
1180  /*enum*/ v4l2_tuner_type    type;
1181  __u32   capability;
1182  __u32   rangelow;
1183  __u32   rangehigh;
1184  __u32   rxsubchans;
1185  __u32   audmode;
1186  __s32   signal;
1187  __s32   afc;
1188  __u32[4]   reserved;
1189 }
1190
1191 struct v4l2_modulator {
1192  __u32   index;
1193  __u8[32]   name;
1194  __u32   capability;
1195  __u32   rangelow;
1196  __u32   rangehigh;
1197  __u32   txsubchans;
1198  __u32[4]   reserved;
1199 }
1200
1201 /*  Flags for the 'capability' field */
1202 const V4L2_TUNER_CAP_LOW  = 0x0001;
1203 const V4L2_TUNER_CAP_NORM  = 0x0002;
1204 const V4L2_TUNER_CAP_STEREO  = 0x0010;
1205 const V4L2_TUNER_CAP_LANG2  = 0x0020;
1206 const V4L2_TUNER_CAP_SAP  = 0x0020;
1207 const V4L2_TUNER_CAP_LANG1  = 0x0040;
1208
1209 /*  Flags for the 'rxsubchans' field */
1210 const V4L2_TUNER_SUB_MONO  = 0x0001;
1211 const V4L2_TUNER_SUB_STEREO  = 0x0002;
1212 const V4L2_TUNER_SUB_LANG2  = 0x0004;
1213 const V4L2_TUNER_SUB_SAP  = 0x0004;
1214 const V4L2_TUNER_SUB_LANG1  = 0x0008;
1215
1216 /*  Values for the 'audmode' field */
1217 const V4L2_TUNER_MODE_MONO  = 0x0000;
1218 const V4L2_TUNER_MODE_STEREO  = 0x0001;
1219 const V4L2_TUNER_MODE_LANG2  = 0x0002;
1220 const V4L2_TUNER_MODE_SAP  = 0x0002;
1221 const V4L2_TUNER_MODE_LANG1  = 0x0003;
1222 const V4L2_TUNER_MODE_LANG1_LANG2 = 0x0004;
1223
1224 struct v4l2_frequency {
1225  __u32        tuner;
1226  /*enum*/ v4l2_tuner_type  type;
1227  __u32        frequency;
1228  __u32[8]        reserved;
1229 }
1230
1231 struct v4l2_hw_freq_seek {
1232  __u32        tuner;
1233  /*enum*/ v4l2_tuner_type  type;
1234  __u32        seek_upward;
1235  __u32        wrap_around;
1236  __u32[8]        reserved;
1237 }
1238
1239 /*
1240  * A U D I O
1241  */
1242 struct v4l2_audio {
1243  __u32 index;
1244  __u8[32] name;
1245  __u32 capability;
1246  __u32 mode;
1247  __u32[2] reserved;
1248 }
1249
1250 /*  Flags for the 'capability' field */
1251 const V4L2_AUDCAP_STEREO = 0x00001;
1252 const V4L2_AUDCAP_AVL = 0x00002;
1253
1254 /*  Flags for the 'mode' field */
1255 const V4L2_AUDMODE_AVL  = 0x00001;
1256
1257 struct v4l2_audioout {
1258  __u32 index;
1259  __u8[32] name;
1260  __u32 capability;
1261  __u32 mode;
1262  __u32[2] reserved;
1263 }
1264
1265 /*
1266  * M P E G   S E R V I C E S
1267  *
1268  * NOTE: EXPERIMENTAL API
1269  */
1270 //#if 1
1271 const V4L2_ENC_IDX_FRAME_I = (0);
1272 const V4L2_ENC_IDX_FRAME_P = (1);
1273 const V4L2_ENC_IDX_FRAME_B = (2);
1274 const V4L2_ENC_IDX_FRAME_MASK = (0xf);
1275
1276 struct v4l2_enc_idx_entry {
1277  __u64 offset;
1278  __u64 pts;
1279  __u32 length;
1280  __u32 flags;
1281  __u32[2] reserved;
1282 }
1283
1284 const V4L2_ENC_IDX_ENTRIES = (64);
1285 struct v4l2_enc_idx {
1286  __u32 entries;
1287  __u32 entries_cap;
1288  __u32[4] reserved;
1289  /*struct*/ v4l2_enc_idx_entry[V4L2_ENC_IDX_ENTRIES] entry;
1290 }
1291
1292
1293 const V4L2_ENC_CMD_START =(0);
1294 const V4L2_ENC_CMD_STOP = (1);
1295 const V4L2_ENC_CMD_PAUSE = (2);
1296 const V4L2_ENC_CMD_RESUME = (3);
1297
1298 /* Flags for V4L2_ENC_CMD_STOP */
1299 const V4L2_ENC_CMD_STOP_AT_GOP_END = (1 << 0);
1300
1301  union Raw {
1302   struct {
1303    __u32[8] data;
1304   }
1305 }
1306
1307 struct v4l2_encoder_cmd {
1308  __u32 cmd;
1309  __u32 flags;
1310 /* union {
1311   struct {
1312    __u32[8] data;
1313   }*/ Raw raw;
1314  //}
1315 }
1316
1317 //#endif
1318
1319
1320 /*
1321  * D A T A   S E R V I C E S   ( V B I )
1322  *
1323  * Data services API by Michael Schimek
1324  */
1325
1326 /* Raw VBI */
1327 struct v4l2_vbi_format {
1328  __u32 sampling_rate;  /* in 1 Hz */
1329  __u32 offset;
1330  __u32 samples_per_line;
1331  __u32 sample_format;  /* V4L2_PIX_FMT_* */
1332  __s32[2] start;
1333  __u32[2] count;
1334  __u32 flags;   /* V4L2_VBI_* */
1335  __u32[2] reserved;  /* must be zero */
1336 }
1337
1338 /*  VBI flags  */
1339 const V4L2_VBI_UNSYNC = (1 << 0);
1340 const V4L2_VBI_INTERLACED = (1 << 1);
1341
1342 /* Sliced VBI
1343  *
1344  *    This implements is a proposal V4L2 API to allow SLICED VBI
1345  * required for some hardware encoders. It should change without
1346  * notice in the definitive implementation.
1347  */
1348
1349 struct v4l2_sliced_vbi_format {
1350  __u16   service_set;
1351  /* service_lines[0][...] specifies lines 0-23 (1-23 used) of the first field
1352     service_lines[1][...] specifies lines 0-23 (1-23 used) of the second field
1353      (equals frame lines 313-336 for 625 line video
1354       standards, 263-286 for 525 line standards) */
1355  __u16[24][2]   service_lines;
1356  __u32   io_size;
1357  __u32[2]   reserved;            /* must be zero */
1358 }
1359
1360 /* Teletext World System Teletext
1361    (WST), defined on ITU-R BT.653-2 */
1362 const V4L2_SLICED_TELETEXT_B = (0x0001);
1363 /* Video Program System, defined on ETS 300 231*/
1364 const V4L2_SLICED_VPS = (0x0400);
1365 /* Closed Caption, defined on EIA-608 */
1366 const V4L2_SLICED_CAPTION_525 = (0x1000);
1367 /* Wide Screen System, defined on ITU-R BT1119.1 */
1368 const V4L2_SLICED_WSS_625 = (0x4000);
1369
1370 const V4L2_SLICED_VBI_525 = (V4L2_SLICED_CAPTION_525);
1371 const V4L2_SLICED_VBI_625 = (V4L2_SLICED_TELETEXT_B | V4L2_SLICED_VPS | V4L2_SLICED_WSS_625);
1372
1373 struct v4l2_sliced_vbi_cap {
1374  __u16   service_set;
1375  /* service_lines[0][...] specifies lines 0-23 (1-23 used) of the first field
1376     service_lines[1][...] specifies lines 0-23 (1-23 used) of the second field
1377      (equals frame lines 313-336 for 625 line video
1378       standards, 263-286 for 525 line standards) */
1379  __u16[24][2]   service_lines;
1380  /*enum*/ v4l2_buf_type type;
1381  __u32[3]   reserved;    /* must be 0 */
1382 }
1383
1384 struct v4l2_sliced_vbi_data {
1385  __u32   id;
1386  __u32   field;          /* 0: first field, 1: second field */
1387  __u32   line;           /* 1-23 */
1388  __u32   reserved;       /* must be 0 */
1389  __u8[48]    data;
1390 }
1391
1392 /*
1393  * Sliced VBI data inserted into MPEG Streams
1394  */
1395
1396 /*
1397  * V4L2_MPEG_STREAM_VBI_FMT_IVTV:
1398  *
1399  * Structure of payload contained in an MPEG 2 Private Stream 1 PES Packet in an
1400  * MPEG-2 Program Pack that contains V4L2_MPEG_STREAM_VBI_FMT_IVTV Sliced VBI
1401  * data
1402  *
1403  * Note, the MPEG-2 Program Pack and Private Stream 1 PES packet header
1404  * definitions are not included here.  See the MPEG-2 specifications for details
1405  * on these headers.
1406  */
1407
1408 /* Line type IDs */
1409 const V4L2_MPEG_VBI_IVTV_TELETEXT_B = (1);
1410 const V4L2_MPEG_VBI_IVTV_CAPTION_525 = (4);
1411 const V4L2_MPEG_VBI_IVTV_WSS_625 = (5);
1412 const V4L2_MPEG_VBI_IVTV_VPS = (7);
1413
1414 struct v4l2_mpeg_vbi_itv0_line {
1415  __u8 id; /* One of V4L2_MPEG_VBI_IVTV_* above */
1416  __u8[42] data; /* Sliced VBI data for the line */
1417 } //__attribute__ ((packed));
1418
1419 struct v4l2_mpeg_vbi_itv0 {
1420  __le32[2] linemask; /* Bitmasks of VBI service lines present */
1421  /*struct*/ v4l2_mpeg_vbi_itv0_line[35] line;
1422 } //__attribute__ ((packed));
1423
1424 struct v4l2_mpeg_vbi_ITV0 {
1425  /*struct*/ v4l2_mpeg_vbi_itv0_line[36] line;
1426 } //__attribute__ ((packed));
1427
1428 const V4L2_MPEG_VBI_IVTV_MAGIC0 = "itv0";
1429 const V4L2_MPEG_VBI_IVTV_MAGIC1 = "ITV0";
1430
1431 struct v4l2_mpeg_vbi_fmt_ivtv {
1432  __u8 magic[4];
1433  union {
1434   /*struct*/ v4l2_mpeg_vbi_itv0 itv0;
1435   /*struct*/ v4l2_mpeg_vbi_ITV0 ITV0;
1436  }
1437 } //__attribute__ ((packed));
1438
1439 /*
1440  * A G G R E G A T E   S T R U C T U R E S
1441  */
1442
1443 union Fmt{
1444 /*struct*/ v4l2_pix_format  pix;     /* V4L2_BUF_TYPE_VIDEO_CAPTURE */
1445 /*struct*/ v4l2_window  win;     /* V4L2_BUF_TYPE_VIDEO_OVERLAY */
1446 /*struct*/ v4l2_vbi_format  vbi;     /* V4L2_BUF_TYPE_VBI_CAPTURE */
1447 /*struct*/ v4l2_sliced_vbi_format sliced;  /* V4L2_BUF_TYPE_SLICED_VBI_CAPTURE */
1448 __u8[200] raw_data;                   /* user-defined */
1449 }
1450
1451 /* Stream data format
1452  */
1453 struct v4l2_format {
1454  /*enum*/ v4l2_buf_type type;
1455  /+union {
1456   /*struct*/ v4l2_pix_format  pix;     /* V4L2_BUF_TYPE_VIDEO_CAPTURE */
1457   /*struct*/ v4l2_window  win;     /* V4L2_BUF_TYPE_VIDEO_OVERLAY */
1458   /*struct*/ v4l2_vbi_format  vbi;     /* V4L2_BUF_TYPE_VBI_CAPTURE */
1459   /*struct*/ v4l2_sliced_vbi_format sliced;  /* V4L2_BUF_TYPE_SLICED_VBI_CAPTURE */
1460   __u8[200] raw_data;                   /* user-defined */
1461  }+/Fmt fmt;
1462 }
1463
1464 union Parm {
1465 /*struct*/ v4l2_captureparm capture;
1466 /*struct*/ v4l2_outputparm output;
1467 __u8[200] raw_data;  /* user-defined */
1468 }
1469
1470 /* Stream type-dependent parameters
1471  */
1472 struct v4l2_streamparm {
1473  /*enum*/ v4l2_buf_type type;
1474  /+union {
1475   /*struct*/ v4l2_captureparm capture;
1476   /*struct*/ v4l2_outputparm output;
1477   __u8[200] raw_data;  /* user-defined */
1478  } +/ Parm parm;
1479 }
1480
1481 /*
1482  * A D V A N C E D   D E B U G G I N G
1483  *
1484  * NOTE: EXPERIMENTAL API, NEVER RELY ON THIS IN APPLICATIONS!
1485  * FOR DEBUGGING, TESTING AND INTERNAL USE ONLY!
1486  */
1487
1488 /* VIDIOC_DBG_G_REGISTER and VIDIOC_DBG_S_REGISTER */
1489
1490 const V4L2_CHIP_MATCH_HOST = 0; /* Match against chip ID on host (0 for the host) */
1491 const V4L2_CHIP_MATCH_I2C_DRIVER = 1; /* Match against I2C driver name */
1492 const V4L2_CHIP_MATCH_I2C_ADDR = 2; /* Match against I2C 7-bit address */
1493 const V4L2_CHIP_MATCH_AC97 = 3; /* Match against anciliary AC97 chip */
1494
1495 struct v4l2_dbg_match {
1496  __u32 type; /* Match type */
1497  union {     /* Match this chip, meaning determined by type */
1498   __u32 addr;
1499   char[32] name;
1500  }
1501 } //__attribute__ ((packed));
1502
1503 struct v4l2_dbg_register {
1504  /*struct*/ v4l2_dbg_match match;
1505  __u32 size; /* register size in bytes */
1506  __u64 reg;
1507  __u64 val;
1508 } //__attribute__ ((packed));
1509
1510 /* VIDIOC_DBG_G_CHIP_IDENT */
1511 struct v4l2_dbg_chip_ident {
1512  /*struct*/ v4l2_dbg_match match;
1513  __u32 ident;       /* chip identifier as specified in <media/v4l2-chip-ident.h> */
1514  __u32 revision;    /* chip revision, chip specific */
1515 } //__attribute__ ((packed));
1516
1517 /*
1518  * 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
1519  *
1520  */
1521 const VIDIOC_QUERYCAP = _IOR!('V',  0, /*struct*/ v4l2_capability);
1522 const VIDIOC_RESERVED = _IO!('V',  1);
1523 const VIDIOC_ENUM_FMT = _IOWR!('V',  2, /*struct*/ v4l2_fmtdesc);
1524 const VIDIOC_G_FMT = _IOWR!('V',  4, /*struct*/ v4l2_format);
1525 const VIDIOC_S_FMT = _IOWR!('V',  5, /*struct*/ v4l2_format);
1526 const VIDIOC_REQBUFS  = _IOWR!('V',  8, /*struct*/ v4l2_requestbuffers);
1527 const VIDIOC_QUERYBUF = _IOWR!('V',  9, /*struct*/ v4l2_buffer);
1528 const VIDIOC_G_FBUF = _IOR!('V', 10, /*struct*/ v4l2_framebuffer);
1529 const VIDIOC_S_FBUF = _IOW!('V', 11, /*struct*/ v4l2_framebuffer);
1530 const VIDIOC_OVERLAY = _IOW!('V', 14, int);
1531 const VIDIOC_QBUF = _IOWR!('V', 15, /*struct*/ v4l2_buffer);
1532 const VIDIOC_DQBUF = _IOWR!('V', 17, /*struct*/ v4l2_buffer);
1533 const VIDIOC_STREAMON = _IOW!('V', 18, int);
1534 const VIDIOC_STREAMOFF = _IOW!('V', 19, int);
1535 const VIDIOC_G_PARM  = _IOWR!('V', 21, /*struct*/ v4l2_streamparm);
1536 const VIDIOC_S_PARM  = _IOWR!('V', 22, /*struct*/ v4l2_streamparm);
1537 const VIDIOC_G_STD = _IOR!('V', 23, v4l2_std_id);
1538 const VIDIOC_S_STD = _IOW!('V', 24, v4l2_std_id);
1539 const VIDIOC_ENUMSTD =  _IOWR!('V', 25, /*struct*/ v4l2_standard);
1540 const VIDIOC_ENUMINPUT = _IOWR!('V', 26, /*struct*/ v4l2_input);
1541 const VIDIOC_G_CTRL = _IOWR!('V', 27, /*struct*/ v4l2_control);
1542 const VIDIOC_S_CTRL = _IOWR!('V', 28, /*struct*/ v4l2_control);
1543 const VIDIOC_G_TUNER = _IOWR!('V', 29, /*struct*/ v4l2_tuner);
1544 const VIDIOC_S_TUNER = _IOW!('V', 30, /*struct*/ v4l2_tuner);
1545 const VIDIOC_G_AUDIO = _IOR!('V', 33, /*struct*/ v4l2_audio);
1546 const VIDIOC_S_AUDIO = _IOW!('V', 34, /*struct*/ v4l2_audio);
1547 const VIDIOC_QUERYCTRL = _IOWR!('V', 36, /*struct*/ v4l2_queryctrl);
1548 const VIDIOC_QUERYMENU = _IOWR!('V', 37, /*struct*/ v4l2_querymenu);
1549 const VIDIOC_G_INPUT = _IOR!('V', 38, int);
1550 const VIDIOC_S_INPUT =  _IOWR!('V', 39, int);
1551 const VIDIOC_G_OUTPUT = _IOR!('V', 46, int);
1552 const VIDIOC_S_OUTPUT  = _IOWR!('V', 47, int);
1553 const VIDIOC_ENUMOUTPUT = _IOWR!('V', 48, /*struct*/ v4l2_output);
1554 const VIDIOC_G_AUDOUT = _IOR!('V', 49, /*struct*/ v4l2_audioout);
1555 const VIDIOC_S_AUDOUT = _IOW!('V', 50, /*struct*/ v4l2_audioout);
1556 const VIDIOC_G_MODULATOR = _IOWR!('V', 54, /*struct*/ v4l2_modulator);
1557 const VIDIOC_S_MODULATOR = _IOW!('V', 55, /*struct*/ v4l2_modulator);
1558 const VIDIOC_G_FREQUENCY = _IOWR!('V', 56, /*struct*/ v4l2_frequency);
1559 const VIDIOC_S_FREQUENCY = _IOW!('V', 57, /*struct*/ v4l2_frequency);
1560 const VIDIOC_CROPCAP = _IOWR!('V', 58, /*struct*/ v4l2_cropcap);
1561 const VIDIOC_G_CROP  = _IOWR!('V', 59, /*struct*/ v4l2_crop);
1562 const VIDIOC_S_CROP = _IOW!('V', 60, /*struct*/ v4l2_crop);
1563 const VIDIOC_G_JPEGCOMP = _IOR!('V', 61, /*struct*/ v4l2_jpegcompression);
1564 const VIDIOC_S_JPEGCOMP = _IOW!('V', 62, /*struct*/ v4l2_jpegcompression);
1565 const VIDIOC_QUERYSTD = _IOR!('V', 63, v4l2_std_id);
1566 const VIDIOC_TRY_FMT = _IOWR!('V', 64, /*struct*/ v4l2_format);
1567 const VIDIOC_ENUMAUDIO = _IOWR!('V', 65, /*struct*/ v4l2_audio);
1568 const VIDIOC_ENUMAUDOUT = _IOWR!('V', 66, /*struct*/ v4l2_audioout);
1569 const VIDIOC_G_PRIORITY = _IOR!('V', 67, /*enum*/ v4l2_priority);
1570 const VIDIOC_S_PRIORITY = _IOW!('V', 68, /*enum*/ v4l2_priority);
1571 const VIDIOC_G_SLICED_VBI_CAP = _IOWR!('V', 69, /*struct*/ v4l2_sliced_vbi_cap);
1572 const VIDIOC_LOG_STATUS = _IO!('V', 70);
1573 const VIDIOC_G_EXT_CTRLS = _IOWR!('V', 71, /*struct*/ v4l2_ext_controls);
1574 const VIDIOC_S_EXT_CTRLS = _IOWR!('V', 72, /*struct*/ v4l2_ext_controls);
1575 const VIDIOC_TRY_EXT_CTRLS = _IOWR!('V', 73, /*struct*/ v4l2_ext_controls);
1576 //#if 1
1577 const VIDIOC_ENUM_FRAMESIZES = _IOWR!('V', 74, /*struct*/ v4l2_frmsizeenum);
1578 const VIDIOC_ENUM_FRAMEINTERVALS = _IOWR!('V', 75, /*struct*/ v4l2_frmivalenum);
1579 const VIDIOC_G_ENC_INDEX = _IOR!('V', 76, /*struct*/ v4l2_enc_idx);
1580 const VIDIOC_ENCODER_CMD = _IOWR!('V', 77, /*struct*/ v4l2_encoder_cmd);
1581 const VIDIOC_TRY_ENCODER_CMD = _IOWR!('V', 78, /*struct*/ v4l2_encoder_cmd);
1582 //#endif
1583
1584 //#if 1
1585 /* Experimental, meant for debugging, testing and internal use.
1586    Only implemented if CONFIG_VIDEO_ADV_DEBUG is defined.
1587    You must be root to use these ioctls. Never use these in applications! */
1588 const VIDIOC_DBG_S_REGISTER = _IOW!('V', 79, /*struct*/ v4l2_dbg_register);
1589 const VIDIOC_DBG_G_REGISTER = _IOWR!('V', 80, /*struct*/ v4l2_dbg_register);
1590
1591 /* Experimental, meant for debugging, testing and internal use.
1592    Never use this ioctl in applications! */
1593 const VIDIOC_DBG_G_CHIP_IDENT = _IOWR!('V', 81, /*struct*/ v4l2_dbg_chip_ident);
1594 //#endif
1595
1596 const VIDIOC_S_HW_FREQ_SEEK = _IOW!('V', 82, /*struct*/ v4l2_hw_freq_seek);
1597 /* Reminder: when adding new ioctls please add support for them to
1598    drivers/media/video/v4l2-compat-ioctl32.c as well! */
1599
1600 //#ifdef __OLD_VIDIOC_
1601 /* for compatibility, will go away some day */
1602 const VIDIOC_OVERLAY_OLD = _IOWR!('V', 14, int);
1603 const VIDIOC_S_PARM_OLD = _IOW!('V', 22, /*struct*/ v4l2_streamparm);
1604 const VIDIOC_S_CTRL_OLD = _IOW!('V', 28, /*struct*/ v4l2_control);
1605 const VIDIOC_G_AUDIO_OLD = _IOWR!('V', 33, /*struct*/ v4l2_audio);
1606 const VIDIOC_G_AUDOUT_OLD = _IOWR!('V', 49, /*struct*/ v4l2_audioout);
1607 const VIDIOC_CROPCAP_OLD = _IOR!('V', 58, /*struct*/ v4l2_cropcap);
1608 //#endif
1609
1610 const BASE_VIDIOC_PRIVATE = 192;  /* 192-255 are private */
Note: See TracBrowser for help on using the browser.