1 /*
2 ********************************************************************************
3 *                                USB UVC Driver
4 *
5 *                (c) Copyright 2006-2010, All winners Co,Ld.
6 *                        All Right Reserved
7 *
8 * FileName      :  uvc_v4l2.h
9 *
10 * Author        :  Kingvan
11 *
12 * Date          :  2013/03/26
13 *
14 * Description   :  USB VIDEO CONTROL Driver中对USB接口设备的处理
15 *
16 * Others        :  NULL
17 *
18 * History:
19 *       <time>          <author>     <version >     <desc>
20 *      2013.03.26       Kingvan         1.0         build this file
21 *
22 ********************************************************************************
23 */
24 
25 #ifndef __USB_UVC_V4L4_h__
26 #define __USB_UVC_V4L4_h__
27 
28 
29 /*
30  * Common stuff for both V4L1 and V4L2
31  * Moved from videodev.h
32  */
33 #define VIDEO_MAX_FRAME               32
34 #define VIDEO_MAX_PLANES               8
35 
36 /*
37  *  M I S C E L L A N E O U S
38  */
39 
40 /*  Four-character-code (FOURCC) */
41 #define v4l2_fourcc(a, b, c, d)\
42     ((__u32)(a) | ((__u32)(b) << 8) | ((__u32)(c) << 16) | ((__u32)(d) << 24))
43 
44 /*
45  *  E N U M S
46  */
47 enum v4l2_field {
48     V4L2_FIELD_ANY           = 0, /* driver can choose from none,
49                      top, bottom, interlaced
50                      depending on whatever it thinks
51                      is approximate ... */
52     V4L2_FIELD_NONE          = 1, /* this device has no fields ... */
53     V4L2_FIELD_TOP           = 2, /* top field only */
54     V4L2_FIELD_BOTTOM        = 3, /* bottom field only */
55     V4L2_FIELD_INTERLACED    = 4, /* both fields interlaced */
56     V4L2_FIELD_SEQ_TB        = 5, /* both fields sequential into one
57                      buffer, top-bottom order */
58     V4L2_FIELD_SEQ_BT        = 6, /* same as above + bottom-top order */
59     V4L2_FIELD_ALTERNATE     = 7, /* both fields alternating into
60                      separate buffers */
61     V4L2_FIELD_INTERLACED_TB = 8, /* both fields interlaced, top field
62                      first and the top field is
63                      transmitted first */
64     V4L2_FIELD_INTERLACED_BT = 9, /* both fields interlaced, top field
65                      first and the bottom field is
66                      transmitted first */
67 };
68 #define V4L2_FIELD_HAS_TOP(field)   \
69     ((field) == V4L2_FIELD_TOP  ||\
70      (field) == V4L2_FIELD_INTERLACED ||\
71      (field) == V4L2_FIELD_INTERLACED_TB ||\
72      (field) == V4L2_FIELD_INTERLACED_BT ||\
73      (field) == V4L2_FIELD_SEQ_TB   ||\
74      (field) == V4L2_FIELD_SEQ_BT)
75 #define V4L2_FIELD_HAS_BOTTOM(field)    \
76     ((field) == V4L2_FIELD_BOTTOM   ||\
77      (field) == V4L2_FIELD_INTERLACED ||\
78      (field) == V4L2_FIELD_INTERLACED_TB ||\
79      (field) == V4L2_FIELD_INTERLACED_BT ||\
80      (field) == V4L2_FIELD_SEQ_TB   ||\
81      (field) == V4L2_FIELD_SEQ_BT)
82 #define V4L2_FIELD_HAS_BOTH(field)  \
83     ((field) == V4L2_FIELD_INTERLACED ||\
84      (field) == V4L2_FIELD_INTERLACED_TB ||\
85      (field) == V4L2_FIELD_INTERLACED_BT ||\
86      (field) == V4L2_FIELD_SEQ_TB ||\
87      (field) == V4L2_FIELD_SEQ_BT)
88 
89 enum v4l2_buf_type {
90     V4L2_BUF_TYPE_VIDEO_CAPTURE        = 1,
91     V4L2_BUF_TYPE_VIDEO_OUTPUT         = 2,
92     V4L2_BUF_TYPE_VIDEO_OVERLAY        = 3,
93     V4L2_BUF_TYPE_VBI_CAPTURE          = 4,
94     V4L2_BUF_TYPE_VBI_OUTPUT           = 5,
95     V4L2_BUF_TYPE_SLICED_VBI_CAPTURE   = 6,
96     V4L2_BUF_TYPE_SLICED_VBI_OUTPUT    = 7,
97 #if 1
98     /* Experimental */
99     V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY = 8,
100 #endif
101     V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE = 9,
102     V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE  = 10,
103     V4L2_BUF_TYPE_PRIVATE              = 0x80,
104 };
105 
106 #define V4L2_TYPE_IS_MULTIPLANAR(type)          \
107     ((type) == V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE   \
108      || (type) == V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE)
109 
110 #define V4L2_TYPE_IS_OUTPUT(type)               \
111     ((type) == V4L2_BUF_TYPE_VIDEO_OUTPUT           \
112      || (type) == V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE     \
113      || (type) == V4L2_BUF_TYPE_VIDEO_OVERLAY       \
114      || (type) == V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY    \
115      || (type) == V4L2_BUF_TYPE_VBI_OUTPUT          \
116      || (type) == V4L2_BUF_TYPE_SLICED_VBI_OUTPUT)
117 
118 enum v4l2_tuner_type {
119     V4L2_TUNER_RADIO         = 1,
120     V4L2_TUNER_ANALOG_TV         = 2,
121     V4L2_TUNER_DIGITAL_TV        = 3,
122 };
123 
124 enum v4l2_memory {
125     V4L2_MEMORY_MMAP             = 1,
126     V4L2_MEMORY_USERPTR          = 2,
127     V4L2_MEMORY_OVERLAY          = 3,
128 };
129 
130 /* see also http://vektor.theorem.ca/graphics/ycbcr/ */
131 enum v4l2_colorspace {
132     /* ITU-R 601 -- broadcast NTSC/PAL */
133     V4L2_COLORSPACE_SMPTE170M     = 1,
134 
135     /* 1125-Line (US) HDTV */
136     V4L2_COLORSPACE_SMPTE240M     = 2,
137 
138     /* HD and modern captures. */
139     V4L2_COLORSPACE_REC709        = 3,
140 
141     /* broken BT878 extents (601, luma range 16-253 instead of 16-235) */
142     V4L2_COLORSPACE_BT878         = 4,
143 
144     /* These should be useful.  Assume 601 extents. */
145     V4L2_COLORSPACE_470_SYSTEM_M  = 5,
146     V4L2_COLORSPACE_470_SYSTEM_BG = 6,
147 
148     /* I know there will be cameras that send this.  So, this is
149      * unspecified chromaticities and full 0-255 on each of the
150      * Y'CbCr components
151      */
152     V4L2_COLORSPACE_JPEG          = 7,
153 
154     /* For RGB colourspaces, this is probably a good start. */
155     V4L2_COLORSPACE_SRGB          = 8,
156 };
157 
158 enum v4l2_priority {
159     V4L2_PRIORITY_UNSET       = 0,  /* not initialized */
160     V4L2_PRIORITY_BACKGROUND  = 1,
161     V4L2_PRIORITY_INTERACTIVE = 2,
162     V4L2_PRIORITY_RECORD      = 3,
163     V4L2_PRIORITY_DEFAULT     = V4L2_PRIORITY_INTERACTIVE,
164 };
165 
166 struct v4l2_rect {
167     __s32   left;
168     __s32   top;
169     __s32   width;
170     __s32   height;
171 };
172 
173 struct v4l2_fract {
174     __u32   numerator;
175     __u32   denominator;
176 };
177 
178 /*
179  *  D R I V E R   C A P A B I L I T I E S
180  */
181 struct v4l2_capability {
182     __u8    driver[16]; /* i.e. "bttv" */
183     __u8    card[32];   /* i.e. "Hauppauge WinTV" */
184     __u8    bus_info[32];   /* "PCI:" + pci_name(pci_dev) */
185     __u32   version;        /* should use KERNEL_VERSION() */
186     __u32   capabilities;   /* Device capabilities */
187     __u32   reserved[4];
188 };
189 
190 /* Values for 'capabilities' field */
191 #define V4L2_CAP_VIDEO_CAPTURE      0x00000001  /* Is a video capture device */
192 #define V4L2_CAP_VIDEO_OUTPUT       0x00000002  /* Is a video output device */
193 #define V4L2_CAP_VIDEO_OVERLAY      0x00000004  /* Can do video overlay */
194 #define V4L2_CAP_VBI_CAPTURE        0x00000010  /* Is a raw VBI capture device */
195 #define V4L2_CAP_VBI_OUTPUT     0x00000020  /* Is a raw VBI output device */
196 #define V4L2_CAP_SLICED_VBI_CAPTURE 0x00000040  /* Is a sliced VBI capture device */
197 #define V4L2_CAP_SLICED_VBI_OUTPUT  0x00000080  /* Is a sliced VBI output device */
198 #define V4L2_CAP_RDS_CAPTURE        0x00000100  /* RDS data capture */
199 #define V4L2_CAP_VIDEO_OUTPUT_OVERLAY   0x00000200  /* Can do video output overlay */
200 #define V4L2_CAP_HW_FREQ_SEEK       0x00000400  /* Can do hardware frequency seek  */
201 #define V4L2_CAP_RDS_OUTPUT     0x00000800  /* Is an RDS encoder */
202 
203 /* Is a video capture device that supports multiplanar formats */
204 #define V4L2_CAP_VIDEO_CAPTURE_MPLANE   0x00001000
205 /* Is a video output device that supports multiplanar formats */
206 #define V4L2_CAP_VIDEO_OUTPUT_MPLANE    0x00002000
207 
208 #define V4L2_CAP_TUNER          0x00010000  /* has a tuner */
209 #define V4L2_CAP_AUDIO          0x00020000  /* has audio support */
210 #define V4L2_CAP_RADIO          0x00040000  /* is a radio device */
211 #define V4L2_CAP_MODULATOR      0x00080000  /* has a modulator */
212 
213 #define V4L2_CAP_READWRITE              0x01000000  /* read/write systemcalls */
214 #define V4L2_CAP_ASYNCIO                0x02000000  /* async I/O */
215 #define V4L2_CAP_STREAMING              0x04000000  /* streaming I/O ioctls */
216 
217 /*
218  *  V I D E O   I M A G E   F O R M A T
219  */
220 
221 /* Add pixel size struct by raymonxiu */
222 struct v4l2_pix_size {
223     __u32           width;
224     __u32           height;
225 };
226 
227 struct v4l2_pix_format {
228     __u32               width;
229     __u32           height;
230     __u32           pixelformat;
231     enum v4l2_field     field;
232     __u32               bytesperline;   /* for padding, zero if unused */
233     __u32               sizeimage;
234     enum v4l2_colorspace    colorspace;
235     __u32           priv;       /* private data, depends on pixelformat */
236 };
237 
238 /*      Pixel format         FOURCC                          depth  Description  */
239 
240 /* RGB formats */
241 #define V4L2_PIX_FMT_RGB332  v4l2_fourcc('R', 'G', 'B', '1') /*  8  RGB-3-3-2     */
242 #define V4L2_PIX_FMT_RGB444  v4l2_fourcc('R', '4', '4', '4') /* 16  xxxxrrrr ggggbbbb */
243 #define V4L2_PIX_FMT_RGB555  v4l2_fourcc('R', 'G', 'B', 'O') /* 16  RGB-5-5-5     */
244 #define V4L2_PIX_FMT_RGB565  v4l2_fourcc('R', 'G', 'B', 'P') /* 16  RGB-5-6-5     */
245 #define V4L2_PIX_FMT_RGB555X v4l2_fourcc('R', 'G', 'B', 'Q') /* 16  RGB-5-5-5 BE  */
246 #define V4L2_PIX_FMT_RGB565X v4l2_fourcc('R', 'G', 'B', 'R') /* 16  RGB-5-6-5 BE  */
247 #define V4L2_PIX_FMT_BGR666  v4l2_fourcc('B', 'G', 'R', 'H') /* 18  BGR-6-6-6     */
248 #define V4L2_PIX_FMT_BGR24   v4l2_fourcc('B', 'G', 'R', '3') /* 24  BGR-8-8-8     */
249 #define V4L2_PIX_FMT_RGB24   v4l2_fourcc('R', 'G', 'B', '3') /* 24  RGB-8-8-8     */
250 #define V4L2_PIX_FMT_BGR32   v4l2_fourcc('B', 'G', 'R', '4') /* 32  BGR-8-8-8-8   */
251 #define V4L2_PIX_FMT_RGB32   v4l2_fourcc('R', 'G', 'B', '4') /* 32  RGB-8-8-8-8   */
252 
253 /* Grey formats */
254 #define V4L2_PIX_FMT_GREY    v4l2_fourcc('G', 'R', 'E', 'Y') /*  8  Greyscale     */
255 #define V4L2_PIX_FMT_Y4      v4l2_fourcc('Y', '0', '4', ' ') /*  4  Greyscale     */
256 #define V4L2_PIX_FMT_Y6      v4l2_fourcc('Y', '0', '6', ' ') /*  6  Greyscale     */
257 #define V4L2_PIX_FMT_Y10     v4l2_fourcc('Y', '1', '0', ' ') /* 10  Greyscale     */
258 #define V4L2_PIX_FMT_Y12     v4l2_fourcc('Y', '1', '2', ' ') /* 12  Greyscale     */
259 #define V4L2_PIX_FMT_Y16     v4l2_fourcc('Y', '1', '6', ' ') /* 16  Greyscale     */
260 
261 /* Grey bit-packed formats */
262 #define V4L2_PIX_FMT_Y10BPACK    v4l2_fourcc('Y', '1', '0', 'B') /* 10  Greyscale bit-packed */
263 
264 /* Palette formats */
265 #define V4L2_PIX_FMT_PAL8    v4l2_fourcc('P', 'A', 'L', '8') /*  8  8-bit palette */
266 
267 /* Luminance+Chrominance formats */
268 #define V4L2_PIX_FMT_YVU410  v4l2_fourcc('Y', 'V', 'U', '9') /*  9  YVU 4:1:0     */
269 #define V4L2_PIX_FMT_YVU420  v4l2_fourcc('Y', 'V', '1', '2') /* 12  YVU 4:2:0     */
270 #define V4L2_PIX_FMT_YUYV    v4l2_fourcc('Y', 'U', 'Y', 'V') /* 16  YUV 4:2:2     */
271 #define V4L2_PIX_FMT_YYUV    v4l2_fourcc('Y', 'Y', 'U', 'V') /* 16  YUV 4:2:2     */
272 #define V4L2_PIX_FMT_YVYU    v4l2_fourcc('Y', 'V', 'Y', 'U') /* 16 YVU 4:2:2 */
273 #define V4L2_PIX_FMT_UYVY    v4l2_fourcc('U', 'Y', 'V', 'Y') /* 16  YUV 4:2:2     */
274 #define V4L2_PIX_FMT_VYUY    v4l2_fourcc('V', 'Y', 'U', 'Y') /* 16  YUV 4:2:2     */
275 #define V4L2_PIX_FMT_YUV422P v4l2_fourcc('4', '2', '2', 'P') /* 16  YVU422 planar */
276 #define V4L2_PIX_FMT_YUV411P v4l2_fourcc('4', '1', '1', 'P') /* 16  YVU411 planar */
277 #define V4L2_PIX_FMT_Y41P    v4l2_fourcc('Y', '4', '1', 'P') /* 12  YUV 4:1:1     */
278 #define V4L2_PIX_FMT_YUV444  v4l2_fourcc('Y', '4', '4', '4') /* 16  xxxxyyyy uuuuvvvv */
279 #define V4L2_PIX_FMT_YUV555  v4l2_fourcc('Y', 'U', 'V', 'O') /* 16  YUV-5-5-5     */
280 #define V4L2_PIX_FMT_YUV565  v4l2_fourcc('Y', 'U', 'V', 'P') /* 16  YUV-5-6-5     */
281 #define V4L2_PIX_FMT_YUV32   v4l2_fourcc('Y', 'U', 'V', '4') /* 32  YUV-8-8-8-8   */
282 #define V4L2_PIX_FMT_YUV410  v4l2_fourcc('Y', 'U', 'V', '9') /*  9  YUV 4:1:0     */
283 #define V4L2_PIX_FMT_YUV420  v4l2_fourcc('Y', 'U', '1', '2') /* 12  YUV 4:2:0     */
284 #define V4L2_PIX_FMT_HI240   v4l2_fourcc('H', 'I', '2', '4') /*  8  8-bit color   */
285 #define V4L2_PIX_FMT_HM12    v4l2_fourcc('H', 'M', '1', '2') /*  8  YUV 4:2:0 16x16 macroblocks */
286 #define V4L2_PIX_FMT_M420    v4l2_fourcc('M', '4', '2', '0') /* 12  YUV 4:2:0 2 lines y, 1 line uv interleaved */
287 
288 /* two planes -- one Y, one Cr + Cb interleaved  */
289 #define V4L2_PIX_FMT_NV12    v4l2_fourcc('N', 'V', '1', '2') /* 12  Y/CbCr 4:2:0  */
290 #define V4L2_PIX_FMT_NV21    v4l2_fourcc('N', 'V', '2', '1') /* 12  Y/CrCb 4:2:0  */
291 #define V4L2_PIX_FMT_NV16    v4l2_fourcc('N', 'V', '1', '6') /* 16  Y/CbCr 4:2:2  */
292 #define V4L2_PIX_FMT_NV61    v4l2_fourcc('N', 'V', '6', '1') /* 16  Y/CrCb 4:2:2  */
293 
294 /* two non contiguous planes - one Y, one Cr + Cb interleaved  */
295 #define V4L2_PIX_FMT_NV12M   v4l2_fourcc('N', 'M', '1', '2') /* 12  Y/CbCr 4:2:0  */
296 #define V4L2_PIX_FMT_NV12MT  v4l2_fourcc('T', 'M', '1', '2') /* 12  Y/CbCr 4:2:0 64x32 macroblocks */
297 
298 /* three non contiguous planes - Y, Cb, Cr */
299 #define V4L2_PIX_FMT_YUV420M v4l2_fourcc('Y', 'M', '1', '2') /* 12  YUV420 planar */
300 
301 /* Bayer formats - see http://www.siliconimaging.com/RGB%20Bayer.htm */
302 #define V4L2_PIX_FMT_SBGGR8  v4l2_fourcc('B', 'A', '8', '1') /*  8  BGBG.. GRGR.. */
303 #define V4L2_PIX_FMT_SGBRG8  v4l2_fourcc('G', 'B', 'R', 'G') /*  8  GBGB.. RGRG.. */
304 #define V4L2_PIX_FMT_SGRBG8  v4l2_fourcc('G', 'R', 'B', 'G') /*  8  GRGR.. BGBG.. */
305 #define V4L2_PIX_FMT_SRGGB8  v4l2_fourcc('R', 'G', 'G', 'B') /*  8  RGRG.. GBGB.. */
306 #define V4L2_PIX_FMT_SBGGR10 v4l2_fourcc('B', 'G', '1', '0') /* 10  BGBG.. GRGR.. */
307 #define V4L2_PIX_FMT_SGBRG10 v4l2_fourcc('G', 'B', '1', '0') /* 10  GBGB.. RGRG.. */
308 #define V4L2_PIX_FMT_SGRBG10 v4l2_fourcc('B', 'A', '1', '0') /* 10  GRGR.. BGBG.. */
309 #define V4L2_PIX_FMT_SRGGB10 v4l2_fourcc('R', 'G', '1', '0') /* 10  RGRG.. GBGB.. */
310 #define V4L2_PIX_FMT_SBGGR12 v4l2_fourcc('B', 'G', '1', '2') /* 12  BGBG.. GRGR.. */
311 #define V4L2_PIX_FMT_SGBRG12 v4l2_fourcc('G', 'B', '1', '2') /* 12  GBGB.. RGRG.. */
312 #define V4L2_PIX_FMT_SGRBG12 v4l2_fourcc('B', 'A', '1', '2') /* 12  GRGR.. BGBG.. */
313 #define V4L2_PIX_FMT_SRGGB12 v4l2_fourcc('R', 'G', '1', '2') /* 12  RGRG.. GBGB.. */
314     /* 10bit raw bayer DPCM compressed to 8 bits */
315 #define V4L2_PIX_FMT_SGRBG10DPCM8 v4l2_fourcc('B', 'D', '1', '0')
316     /*
317      * 10bit raw bayer, expanded to 16 bits
318      * xxxxrrrrrrrrrrxxxxgggggggggg xxxxggggggggggxxxxbbbbbbbbbb...
319      */
320 #define V4L2_PIX_FMT_SBGGR16 v4l2_fourcc('B', 'Y', 'R', '2') /* 16  BGBG.. GRGR.. */
321 
322 /* compressed formats */
323 #define V4L2_PIX_FMT_MJPEG    v4l2_fourcc('M', 'J', 'P', 'G') /* Motion-JPEG   */
324 #define V4L2_PIX_FMT_JPEG     v4l2_fourcc('J', 'P', 'E', 'G') /* JFIF JPEG     */
325 #define V4L2_PIX_FMT_DV       v4l2_fourcc('d', 'v', 's', 'd') /* 1394          */
326 #define V4L2_PIX_FMT_MPEG     v4l2_fourcc('M', 'P', 'E', 'G') /* MPEG-1/2/4    */
327 
328 /*  Vendor-specific formats   */
329 #define V4L2_PIX_FMT_CPIA1    v4l2_fourcc('C', 'P', 'I', 'A') /* cpia1 YUV */
330 #define V4L2_PIX_FMT_WNVA     v4l2_fourcc('W', 'N', 'V', 'A') /* Winnov hw compress */
331 #define V4L2_PIX_FMT_SN9C10X  v4l2_fourcc('S', '9', '1', '0') /* SN9C10x compression */
332 #define V4L2_PIX_FMT_SN9C20X_I420 v4l2_fourcc('S', '9', '2', '0') /* SN9C20x YUV 4:2:0 */
333 #define V4L2_PIX_FMT_PWC1     v4l2_fourcc('P', 'W', 'C', '1') /* pwc older webcam */
334 #define V4L2_PIX_FMT_PWC2     v4l2_fourcc('P', 'W', 'C', '2') /* pwc newer webcam */
335 #define V4L2_PIX_FMT_ET61X251 v4l2_fourcc('E', '6', '2', '5') /* ET61X251 compression */
336 #define V4L2_PIX_FMT_SPCA501  v4l2_fourcc('S', '5', '0', '1') /* YUYV per line */
337 #define V4L2_PIX_FMT_SPCA505  v4l2_fourcc('S', '5', '0', '5') /* YYUV per line */
338 #define V4L2_PIX_FMT_SPCA508  v4l2_fourcc('S', '5', '0', '8') /* YUVY per line */
339 #define V4L2_PIX_FMT_SPCA561  v4l2_fourcc('S', '5', '6', '1') /* compressed GBRG bayer */
340 #define V4L2_PIX_FMT_PAC207   v4l2_fourcc('P', '2', '0', '7') /* compressed BGGR bayer */
341 #define V4L2_PIX_FMT_MR97310A v4l2_fourcc('M', '3', '1', '0') /* compressed BGGR bayer */
342 #define V4L2_PIX_FMT_SN9C2028 v4l2_fourcc('S', 'O', 'N', 'X') /* compressed GBRG bayer */
343 #define V4L2_PIX_FMT_SQ905C   v4l2_fourcc('9', '0', '5', 'C') /* compressed RGGB bayer */
344 #define V4L2_PIX_FMT_PJPG     v4l2_fourcc('P', 'J', 'P', 'G') /* Pixart 73xx JPEG */
345 #define V4L2_PIX_FMT_OV511    v4l2_fourcc('O', '5', '1', '1') /* ov511 JPEG */
346 #define V4L2_PIX_FMT_OV518    v4l2_fourcc('O', '5', '1', '8') /* ov518 JPEG */
347 #define V4L2_PIX_FMT_STV0680  v4l2_fourcc('S', '6', '8', '0') /* stv0680 bayer */
348 #define V4L2_PIX_FMT_TM6000   v4l2_fourcc('T', 'M', '6', '0') /* tm5600/tm60x0 */
349 #define V4L2_PIX_FMT_CIT_YYVYUY v4l2_fourcc('C', 'I', 'T', 'V') /* one line of Y then 1 line of VYUY */
350 #define V4L2_PIX_FMT_KONICA420  v4l2_fourcc('K', 'O', 'N', 'I') /* YUV420 planar in blocks of 256 pixels */
351 #define V4L2_PIX_FMT_JPGL   v4l2_fourcc('J', 'P', 'G', 'L') /* JPEG-Lite */
352 
353 /*
354  *  F O R M A T   E N U M E R A T I O N
355  */
356 struct v4l2_fmtdesc {
357     __u32           index;             /* Format number      */
358     enum v4l2_buf_type  type;              /* buffer type        */
359     __u32               flags;
360     __u8            description[32];   /* Description string */
361     __u32           pixelformat;       /* Format fourcc      */
362     __u32           reserved[4];
363 };
364 
365 #define V4L2_FMT_FLAG_COMPRESSED 0x0001
366 #define V4L2_FMT_FLAG_EMULATED   0x0002
367 
368 #if 1
369     /* Experimental Frame Size and frame rate enumeration */
370 /*
371  *  F R A M E   S I Z E   E N U M E R A T I O N
372  */
373 enum v4l2_frmsizetypes {
374     V4L2_FRMSIZE_TYPE_DISCRETE  = 1,
375     V4L2_FRMSIZE_TYPE_CONTINUOUS    = 2,
376     V4L2_FRMSIZE_TYPE_STEPWISE  = 3,
377 };
378 
379 struct v4l2_frmsize_discrete {
380     __u32           width;      /* Frame width [pixel] */
381     __u32           height;     /* Frame height [pixel] */
382 };
383 
384 struct v4l2_frmsize_stepwise {
385     __u32           min_width;  /* Minimum frame width [pixel] */
386     __u32           max_width;  /* Maximum frame width [pixel] */
387     __u32           step_width; /* Frame width step size [pixel] */
388     __u32           min_height; /* Minimum frame height [pixel] */
389     __u32           max_height; /* Maximum frame height [pixel] */
390     __u32           step_height;    /* Frame height step size [pixel] */
391 };
392 
393 struct v4l2_frmsizeenum {
394     __u32           index;      /* Frame size number */
395     __u32           pixel_format;   /* Pixel format */
396     __u32           type;       /* Frame size type the device supports. */
397 
398     union {                 /* Frame size */
399         struct v4l2_frmsize_discrete    discrete;
400         struct v4l2_frmsize_stepwise    stepwise;
401     }un;
402 
403     __u32   reserved[2];            /* Reserved space for future use */
404 };
405 
406 /*
407  *  F R A M E   R A T E   E N U M E R A T I O N
408  */
409 enum v4l2_frmivaltypes {
410     V4L2_FRMIVAL_TYPE_DISCRETE  = 1,
411     V4L2_FRMIVAL_TYPE_CONTINUOUS    = 2,
412     V4L2_FRMIVAL_TYPE_STEPWISE  = 3,
413 };
414 
415 struct v4l2_frmival_stepwise {
416     struct v4l2_fract   min;        /* Minimum frame interval [s] */
417     struct v4l2_fract   max;        /* Maximum frame interval [s] */
418     struct v4l2_fract   step;       /* Frame interval step size [s] */
419 };
420 
421 struct v4l2_frmivalenum {
422     __u32           index;      /* Frame format index */
423     __u32           pixel_format;   /* Pixel format */
424     __u32           width;      /* Frame width */
425     __u32           height;     /* Frame height */
426     __u32           type;       /* Frame interval type the device supports. */
427 
428     union {                 /* Frame interval */
429         struct v4l2_fract       discrete;
430         struct v4l2_frmival_stepwise    stepwise;
431     }un;
432 
433     __u32   reserved[2];            /* Reserved space for future use */
434 };
435 #endif
436 
437 /*
438  *  T I M E C O D E
439  */
440 struct v4l2_timecode {
441     __u32   type;
442     __u32   flags;
443     __u8    frames;
444     __u8    seconds;
445     __u8    minutes;
446     __u8    hours;
447     __u8    userbits[4];
448 };
449 
450 /*  Type  */
451 #define V4L2_TC_TYPE_24FPS      1
452 #define V4L2_TC_TYPE_25FPS      2
453 #define V4L2_TC_TYPE_30FPS      3
454 #define V4L2_TC_TYPE_50FPS      4
455 #define V4L2_TC_TYPE_60FPS      5
456 
457 /*  Flags  */
458 #define V4L2_TC_FLAG_DROPFRAME      0x0001 /* "drop-frame" mode */
459 #define V4L2_TC_FLAG_COLORFRAME     0x0002
460 #define V4L2_TC_USERBITS_field      0x000C
461 #define V4L2_TC_USERBITS_USERDEFINED    0x0000
462 #define V4L2_TC_USERBITS_8BITCHARS  0x0008
463 /* The above is based on SMPTE timecodes */
464 
465 struct v4l2_jpegcompression {
466     int quality;
467 
468     int  APPn;              /* Number of APP segment to be written,
469                  * must be 0..15 */
470     int  APP_len;           /* Length of data in JPEG APPn segment */
471     char APP_data[60];      /* Data in the JPEG APPn segment. */
472 
473     int  COM_len;           /* Length of data in JPEG COM segment */
474     char COM_data[60];      /* Data in JPEG COM segment */
475 
476     __u32 jpeg_markers;     /* Which markers should go into the JPEG
477                  * output. Unless you exactly know what
478                  * you do, leave them untouched.
479                  * Inluding less markers will make the
480                  * resulting code smaller, but there will
481                  * be fewer applications which can read it.
482                  * The presence of the APP and COM marker
483                  * is influenced by APP_len and COM_len
484                  * ONLY, not by this property! */
485 
486 #define V4L2_JPEG_MARKER_DHT (1<<3)    /* Define Huffman Tables */
487 #define V4L2_JPEG_MARKER_DQT (1<<4)    /* Define Quantization Tables */
488 #define V4L2_JPEG_MARKER_DRI (1<<5)    /* Define Restart Interval */
489 #define V4L2_JPEG_MARKER_COM (1<<6)    /* Comment segment */
490 #define V4L2_JPEG_MARKER_APP (1<<7)    /* App segment, driver will
491                     * allways use APP0 */
492 };
493 
494 /*
495  *  M E M O R Y - M A P P I N G   B U F F E R S
496  */
497 struct v4l2_requestbuffers {
498     __u32           count;
499     enum v4l2_buf_type      type;
500     enum v4l2_memory        memory;
501     __u32           reserved[2];
502 };
503 
504 /**
505  * struct v4l2_plane - plane info for multi-planar buffers
506  * @bytesused:      number of bytes occupied by data in the plane (payload)
507  * @length:     size of this plane (NOT the payload) in bytes
508  * @mem_offset:     when memory in the associated struct v4l2_buffer is
509  *          V4L2_MEMORY_MMAP, equals the offset from the start of
510  *          the device memory for this plane (or is a "cookie" that
511  *          should be passed to mmap() called on the video node)
512  * @userptr:        when memory is V4L2_MEMORY_USERPTR, a userspace pointer
513  *          pointing to this plane
514  * @data_offset:    offset in the plane to the start of data; usually 0,
515  *          unless there is a header in front of the data
516  *
517  * Multi-planar buffers consist of one or more planes, e.g. an YCbCr buffer
518  * with two planes can have one plane for Y, and another for interleaved CbCr
519  * components. Each plane can reside in a separate memory buffer, or even in
520  * a completely separate memory node (e.g. in embedded devices).
521  */
522 struct v4l2_plane {
523     __u32           bytesused;
524     __u32           length;
525     union {
526         __u32       mem_offset;
527         unsigned long   userptr;
528     } m;
529     __u32           data_offset;
530     __u32           reserved[11];
531 };
532 
533 /**
534  * struct v4l2_buffer - video buffer info
535  * @index:  id number of the buffer
536  * @type:   buffer type (type == *_MPLANE for multiplanar buffers)
537  * @bytesused:  number of bytes occupied by data in the buffer (payload);
538  *      unused (set to 0) for multiplanar buffers
539  * @flags:  buffer informational flags
540  * @field:  field order of the image in the buffer
541  * @timestamp:  frame timestamp
542  * @timecode:   frame timecode
543  * @sequence:   sequence count of this frame
544  * @memory: the method, in which the actual video data is passed
545  * @offset: for non-multiplanar buffers with memory == V4L2_MEMORY_MMAP;
546  *      offset from the start of the device memory for this plane,
547  *      (or a "cookie" that should be passed to mmap() as offset)
548  * @userptr:    for non-multiplanar buffers with memory == V4L2_MEMORY_USERPTR;
549  *      a userspace pointer pointing to this buffer
550  * @planes: for multiplanar buffers; userspace pointer to the array of plane
551  *      info structs for this buffer
552  * @length: size in bytes of the buffer (NOT its payload) for single-plane
553  *      buffers (when type != *_MPLANE); number of elements in the
554  *      planes array for multi-plane buffers
555  * @input:  input number from which the video data has has been captured
556  *
557  * Contains data exchanged by application and driver using one of the Streaming
558  * I/O methods.
559  */
560 //struct v4l2_buffer {
561 //  __u32           index;
562 //  enum v4l2_buf_type      type;
563 //  __u32           bytesused;
564 //  __u32           flags;
565 //  enum v4l2_field     field;
566 //  struct timeval      timestamp;
567 //  struct v4l2_timecode    timecode;
568 //  __u32           sequence;
569 //
570 //  /* memory location */
571 //  enum v4l2_memory        memory;
572 //  union {
573 //      __u32           offset;
574 //      unsigned long   userptr;
575 //      struct v4l2_plane *planes;
576 //  } m;
577 //  __u32           length;
578 //  __u32           input;
579 //  __u32           reserved;
580 //};
581 
582 /*  Flags for 'flags' field */
583 #define V4L2_BUF_FLAG_MAPPED    0x0001  /* Buffer is mapped (flag) */
584 #define V4L2_BUF_FLAG_QUEUED    0x0002  /* Buffer is queued for processing */
585 #define V4L2_BUF_FLAG_DONE  0x0004  /* Buffer is ready */
586 #define V4L2_BUF_FLAG_KEYFRAME  0x0008  /* Image is a keyframe (I-frame) */
587 #define V4L2_BUF_FLAG_PFRAME    0x0010  /* Image is a P-frame */
588 #define V4L2_BUF_FLAG_BFRAME    0x0020  /* Image is a B-frame */
589 /* Buffer is ready, but the data contained within is corrupted. */
590 #define V4L2_BUF_FLAG_ERROR 0x0040
591 #define V4L2_BUF_FLAG_TIMECODE  0x0100  /* timecode field is valid */
592 #define V4L2_BUF_FLAG_INPUT     0x0200  /* input field is valid */
593 
594 /*
595  *  O V E R L A Y   P R E V I E W
596  */
597 struct v4l2_framebuffer {
598     __u32           capability;
599     __u32           flags;
600 /* FIXME: in theory we should pass something like PCI device + memory
601  * region + offset instead of some physical address */
602     void                    *base;
603     struct v4l2_pix_format  fmt;
604 };
605 /*  Flags for the 'capability' field. Read only */
606 #define V4L2_FBUF_CAP_EXTERNOVERLAY 0x0001
607 #define V4L2_FBUF_CAP_CHROMAKEY     0x0002
608 #define V4L2_FBUF_CAP_LIST_CLIPPING     0x0004
609 #define V4L2_FBUF_CAP_BITMAP_CLIPPING   0x0008
610 #define V4L2_FBUF_CAP_LOCAL_ALPHA   0x0010
611 #define V4L2_FBUF_CAP_GLOBAL_ALPHA  0x0020
612 #define V4L2_FBUF_CAP_LOCAL_INV_ALPHA   0x0040
613 #define V4L2_FBUF_CAP_SRC_CHROMAKEY 0x0080
614 /*  Flags for the 'flags' field. */
615 #define V4L2_FBUF_FLAG_PRIMARY      0x0001
616 #define V4L2_FBUF_FLAG_OVERLAY      0x0002
617 #define V4L2_FBUF_FLAG_CHROMAKEY    0x0004
618 #define V4L2_FBUF_FLAG_LOCAL_ALPHA  0x0008
619 #define V4L2_FBUF_FLAG_GLOBAL_ALPHA 0x0010
620 #define V4L2_FBUF_FLAG_LOCAL_INV_ALPHA  0x0020
621 #define V4L2_FBUF_FLAG_SRC_CHROMAKEY    0x0040
622 
623 struct v4l2_clip {
624     struct v4l2_rect        c;
625     struct v4l2_clip     *next;
626 };
627 
628 struct v4l2_window {
629     struct v4l2_rect        w;
630     enum v4l2_field     field;
631     __u32           chromakey;
632     struct v4l2_clip     *clips;
633     __u32           clipcount;
634     void             *bitmap;
635     __u8                    global_alpha;
636 };
637 
638 /*
639  *  C A P T U R E   P A R A M E T E R S
640  */
641 struct v4l2_captureparm {
642     __u32          capability;    /*  Supported modes */
643     __u32          capturemode;   /*  Current mode */
644     struct v4l2_fract  timeperframe;  /*  Time per frame in .1us units */
645     __u32          extendedmode;  /*  Driver-specific extensions */
646     __u32              readbuffers;   /*  # of buffers for read */
647     __u32          reserved[4];
648 };
649 
650 /*  Flags for 'capability' and 'capturemode' fields */
651 #define V4L2_MODE_HIGHQUALITY   0x0001  /*  High quality imaging mode */
652 #define V4L2_MODE_VIDEO             0x0002  /*  For video capture */
653 #define V4L2_MODE_IMAGE             0x0003  /*  For image capture */
654 #define V4L2_CAP_TIMEPERFRAME   0x1000  /*  timeperframe field is supported */
655 
656 struct v4l2_outputparm {
657     __u32          capability;   /*  Supported modes */
658     __u32          outputmode;   /*  Current mode */
659     struct v4l2_fract  timeperframe; /*  Time per frame in seconds */
660     __u32          extendedmode; /*  Driver-specific extensions */
661     __u32              writebuffers; /*  # of buffers for write */
662     __u32          reserved[4];
663 };
664 
665 /*
666  *  I N P U T   I M A G E   C R O P P I N G
667  */
668 struct v4l2_cropcap {
669     enum v4l2_buf_type      type;
670     struct v4l2_rect        bounds;
671     struct v4l2_rect        defrect;
672     struct v4l2_fract       pixelaspect;
673 };
674 
675 struct v4l2_crop {
676     enum v4l2_buf_type      type;
677     struct v4l2_rect        c;
678 };
679 
680 /*
681  *      A N A L O G   V I D E O   S T A N D A R D
682  */
683 
684 typedef __u64 v4l2_std_id;
685 
686 /* one bit for each */
687 #define V4L2_STD_PAL_B          ((v4l2_std_id)0x00000001)
688 #define V4L2_STD_PAL_B1         ((v4l2_std_id)0x00000002)
689 #define V4L2_STD_PAL_G          ((v4l2_std_id)0x00000004)
690 #define V4L2_STD_PAL_H          ((v4l2_std_id)0x00000008)
691 #define V4L2_STD_PAL_I          ((v4l2_std_id)0x00000010)
692 #define V4L2_STD_PAL_D          ((v4l2_std_id)0x00000020)
693 #define V4L2_STD_PAL_D1         ((v4l2_std_id)0x00000040)
694 #define V4L2_STD_PAL_K          ((v4l2_std_id)0x00000080)
695 
696 #define V4L2_STD_PAL_M          ((v4l2_std_id)0x00000100)
697 #define V4L2_STD_PAL_N          ((v4l2_std_id)0x00000200)
698 #define V4L2_STD_PAL_Nc         ((v4l2_std_id)0x00000400)
699 #define V4L2_STD_PAL_60         ((v4l2_std_id)0x00000800)
700 
701 #define V4L2_STD_NTSC_M         ((v4l2_std_id)0x00001000)
702 #define V4L2_STD_NTSC_M_JP      ((v4l2_std_id)0x00002000)
703 #define V4L2_STD_NTSC_443       ((v4l2_std_id)0x00004000)
704 #define V4L2_STD_NTSC_M_KR      ((v4l2_std_id)0x00008000)
705 
706 #define V4L2_STD_SECAM_B        ((v4l2_std_id)0x00010000)
707 #define V4L2_STD_SECAM_D        ((v4l2_std_id)0x00020000)
708 #define V4L2_STD_SECAM_G        ((v4l2_std_id)0x00040000)
709 #define V4L2_STD_SECAM_H        ((v4l2_std_id)0x00080000)
710 #define V4L2_STD_SECAM_K        ((v4l2_std_id)0x00100000)
711 #define V4L2_STD_SECAM_K1       ((v4l2_std_id)0x00200000)
712 #define V4L2_STD_SECAM_L        ((v4l2_std_id)0x00400000)
713 #define V4L2_STD_SECAM_LC       ((v4l2_std_id)0x00800000)
714 
715 /* ATSC/HDTV */
716 #define V4L2_STD_ATSC_8_VSB     ((v4l2_std_id)0x01000000)
717 #define V4L2_STD_ATSC_16_VSB    ((v4l2_std_id)0x02000000)
718 
719 /* FIXME:
720    Although std_id is 64 bits, there is an issue on PPC32 architecture that
721    makes switch(__u64) to break. So, there's a hack on v4l2-common.c rounding
722    this value to 32 bits.
723    As, currently, the max value is for V4L2_STD_ATSC_16_VSB (30 bits wide),
724    it should work fine. However, if needed to add more than two standards,
725    v4l2-common.c should be fixed.
726  */
727 
728 /* some merged standards */
729 #define V4L2_STD_MN (V4L2_STD_PAL_M|V4L2_STD_PAL_N|V4L2_STD_PAL_Nc|V4L2_STD_NTSC)
730 #define V4L2_STD_B  (V4L2_STD_PAL_B|V4L2_STD_PAL_B1|V4L2_STD_SECAM_B)
731 #define V4L2_STD_GH (V4L2_STD_PAL_G|V4L2_STD_PAL_H|V4L2_STD_SECAM_G|V4L2_STD_SECAM_H)
732 #define V4L2_STD_DK (V4L2_STD_PAL_DK|V4L2_STD_SECAM_DK)
733 
734 /* some common needed stuff */
735 #define V4L2_STD_PAL_BG     (V4L2_STD_PAL_B     |\
736                  V4L2_STD_PAL_B1    |\
737                  V4L2_STD_PAL_G)
738 #define V4L2_STD_PAL_DK     (V4L2_STD_PAL_D     |\
739                  V4L2_STD_PAL_D1    |\
740                  V4L2_STD_PAL_K)
741 #define V4L2_STD_PAL        (V4L2_STD_PAL_BG    |\
742                  V4L2_STD_PAL_DK    |\
743                  V4L2_STD_PAL_H     |\
744                  V4L2_STD_PAL_I)
745 #define V4L2_STD_NTSC           (V4L2_STD_NTSC_M    |\
746                  V4L2_STD_NTSC_M_JP     |\
747                  V4L2_STD_NTSC_M_KR)
748 #define V4L2_STD_SECAM_DK       (V4L2_STD_SECAM_D   |\
749                  V4L2_STD_SECAM_K   |\
750                  V4L2_STD_SECAM_K1)
751 #define V4L2_STD_SECAM      (V4L2_STD_SECAM_B   |\
752                  V4L2_STD_SECAM_G   |\
753                  V4L2_STD_SECAM_H   |\
754                  V4L2_STD_SECAM_DK  |\
755                  V4L2_STD_SECAM_L       |\
756                  V4L2_STD_SECAM_LC)
757 
758 #define V4L2_STD_525_60     (V4L2_STD_PAL_M     |\
759                  V4L2_STD_PAL_60    |\
760                  V4L2_STD_NTSC      |\
761                  V4L2_STD_NTSC_443)
762 #define V4L2_STD_625_50     (V4L2_STD_PAL       |\
763                  V4L2_STD_PAL_N     |\
764                  V4L2_STD_PAL_Nc    |\
765                  V4L2_STD_SECAM)
766 #define V4L2_STD_ATSC           (V4L2_STD_ATSC_8_VSB    |\
767                  V4L2_STD_ATSC_16_VSB)
768 
769 #define V4L2_STD_UNKNOWN        0
770 #define V4L2_STD_ALL            (V4L2_STD_525_60    |\
771                  V4L2_STD_625_50)
772 
773 struct v4l2_standard {
774     __u32            index;
775     v4l2_std_id          id;
776     __u8             name[24];
777     struct v4l2_fract    frameperiod; /* Frames, not fields */
778     __u32            framelines;
779     __u32            reserved[4];
780 };
781 
782 /*
783  *  V I D E O   T I M I N G S   D V P R E S E T
784  */
785 struct v4l2_dv_preset {
786     __u32   preset;
787     __u32   reserved[4];
788 };
789 
790 /*
791  *  D V P R E S E T S   E N U M E R A T I O N
792  */
793 struct v4l2_dv_enum_preset {
794     __u32   index;
795     __u32   preset;
796     __u8    name[32]; /* Name of the preset timing */
797     __u32   width;
798     __u32   height;
799     __u32   reserved[4];
800 };
801 
802 /*
803  *  D V P R E S E T V A L U E S
804  */
805 #define     V4L2_DV_INVALID     0
806 #define     V4L2_DV_480P59_94   1 /* BT.1362 */
807 #define     V4L2_DV_576P50      2 /* BT.1362 */
808 #define     V4L2_DV_720P24      3 /* SMPTE 296M */
809 #define     V4L2_DV_720P25      4 /* SMPTE 296M */
810 #define     V4L2_DV_720P30      5 /* SMPTE 296M */
811 #define     V4L2_DV_720P50      6 /* SMPTE 296M */
812 #define     V4L2_DV_720P59_94   7 /* SMPTE 274M */
813 #define     V4L2_DV_720P60      8 /* SMPTE 274M/296M */
814 #define     V4L2_DV_1080I29_97  9 /* BT.1120/ SMPTE 274M */
815 #define     V4L2_DV_1080I30     10 /* BT.1120/ SMPTE 274M */
816 #define     V4L2_DV_1080I25     11 /* BT.1120 */
817 #define     V4L2_DV_1080I50     12 /* SMPTE 296M */
818 #define     V4L2_DV_1080I60     13 /* SMPTE 296M */
819 #define     V4L2_DV_1080P24     14 /* SMPTE 296M */
820 #define     V4L2_DV_1080P25     15 /* SMPTE 296M */
821 #define     V4L2_DV_1080P30     16 /* SMPTE 296M */
822 #define     V4L2_DV_1080P50     17 /* BT.1120 */
823 #define     V4L2_DV_1080P60     18 /* BT.1120 */
824 
825 /*
826  *  D V     B T T I M I N G S
827  */
828 
829 /* BT.656/BT.1120 timing data */
830 __packed struct v4l2_bt_timings {
831     __u32   width;      /* width in pixels */
832     __u32   height;     /* height in lines */
833     __u32   interlaced; /* Interlaced or progressive */
834     __u32   polarities; /* Positive or negative polarity */
835     __u64   pixelclock; /* Pixel clock in HZ. Ex. 74.25MHz->74250000 */
836     __u32   hfrontporch;    /* Horizpontal front porch in pixels */
837     __u32   hsync;      /* Horizontal Sync length in pixels */
838     __u32   hbackporch; /* Horizontal back porch in pixels */
839     __u32   vfrontporch;    /* Vertical front porch in pixels */
840     __u32   vsync;      /* Vertical Sync length in lines */
841     __u32   vbackporch; /* Vertical back porch in lines */
842     __u32   il_vfrontporch; /* Vertical front porch for bottom field of
843                  * interlaced field formats
844                  */
845     __u32   il_vsync;   /* Vertical sync length for bottom field of
846                  * interlaced field formats
847                  */
848     __u32   il_vbackporch;  /* Vertical back porch for bottom field of
849                  * interlaced field formats
850                  */
851     __u32   reserved[16];
852 };
853 
854 /* Interlaced or progressive format */
855 #define V4L2_DV_PROGRESSIVE 0
856 #define V4L2_DV_INTERLACED  1
857 
858 /* Polarities. If bit is not set, it is assumed to be negative polarity */
859 #define V4L2_DV_VSYNC_POS_POL   0x00000001
860 #define V4L2_DV_HSYNC_POS_POL   0x00000002
861 
862 
863 ///* DV timings */
864 //__packed struct v4l2_dv_timings {
865 //  __u32 type;
866 //  union {
867 //      struct v4l2_bt_timings  bt;
868 //      __u32   reserved[32];
869 //  };
870 //};
871 
872 /* Values for the type field */
873 #define V4L2_DV_BT_656_1120 0   /* BT.656/1120 timing type */
874 
875 /*
876  *  V I D E O   I N P U T S
877  */
878 struct v4l2_input {
879     __u32        index;     /*  Which input */
880     __u8         name[32];      /*  Label */
881     __u32        type;      /*  Type of input */
882     __u32        audioset;      /*  Associated audios (bitfield) */
883     __u32        tuner;             /*  Associated tuner */
884     v4l2_std_id  std;
885     __u32        status;
886     __u32        capabilities;
887     __u32        reserved[3];
888 };
889 
890 /*  Values for the 'type' field */
891 #define V4L2_INPUT_TYPE_TUNER       1
892 #define V4L2_INPUT_TYPE_CAMERA      2
893 
894 /* field 'status' - general */
895 #define V4L2_IN_ST_NO_POWER    0x00000001  /* Attached device is off */
896 #define V4L2_IN_ST_NO_SIGNAL   0x00000002
897 #define V4L2_IN_ST_NO_COLOR    0x00000004
898 
899 /* field 'status' - sensor orientation */
900 /* If sensor is mounted upside down set both bits */
901 #define V4L2_IN_ST_HFLIP       0x00000010 /* Frames are flipped horizontally */
902 #define V4L2_IN_ST_VFLIP       0x00000020 /* Frames are flipped vertically */
903 
904 /* field 'status' - analog */
905 #define V4L2_IN_ST_NO_H_LOCK   0x00000100  /* No horizontal sync lock */
906 #define V4L2_IN_ST_COLOR_KILL  0x00000200  /* Color killer is active */
907 
908 /* field 'status' - digital */
909 #define V4L2_IN_ST_NO_SYNC     0x00010000  /* No synchronization lock */
910 #define V4L2_IN_ST_NO_EQU      0x00020000  /* No equalizer lock */
911 #define V4L2_IN_ST_NO_CARRIER  0x00040000  /* Carrier recovery failed */
912 
913 /* field 'status' - VCR and set-top box */
914 #define V4L2_IN_ST_MACROVISION 0x01000000  /* Macrovision detected */
915 #define V4L2_IN_ST_NO_ACCESS   0x02000000  /* Conditional access denied */
916 #define V4L2_IN_ST_VTR         0x04000000  /* VTR time constant */
917 
918 /* capabilities flags */
919 #define V4L2_IN_CAP_PRESETS     0x00000001 /* Supports S_DV_PRESET */
920 #define V4L2_IN_CAP_CUSTOM_TIMINGS  0x00000002 /* Supports S_DV_TIMINGS */
921 #define V4L2_IN_CAP_STD         0x00000004 /* Supports S_STD */
922 
923 /*
924  *  V I D E O   O U T P U T S
925  */
926 struct v4l2_output {
927     __u32        index;     /*  Which output */
928     __u8         name[32];      /*  Label */
929     __u32        type;      /*  Type of output */
930     __u32        audioset;      /*  Associated audios (bitfield) */
931     __u32        modulator;         /*  Associated modulator */
932     v4l2_std_id  std;
933     __u32        capabilities;
934     __u32        reserved[3];
935 };
936 /*  Values for the 'type' field */
937 #define V4L2_OUTPUT_TYPE_MODULATOR      1
938 #define V4L2_OUTPUT_TYPE_ANALOG         2
939 #define V4L2_OUTPUT_TYPE_ANALOGVGAOVERLAY   3
940 
941 /* capabilities flags */
942 #define V4L2_OUT_CAP_PRESETS        0x00000001 /* Supports S_DV_PRESET */
943 #define V4L2_OUT_CAP_CUSTOM_TIMINGS 0x00000002 /* Supports S_DV_TIMINGS */
944 #define V4L2_OUT_CAP_STD        0x00000004 /* Supports S_STD */
945 
946 /*
947  *  C O N T R O L S
948  */
949 struct v4l2_control {
950     __u32            id;
951     __s32            value;
952     __u32                user_pt;   /* Add user pointer by raymonxiu */
953 };
954 
955 //__packed struct v4l2_ext_control {
956 //  __u32 id;
957 //  __u32 size;
958 //  __u32 reserved2[1];
959 //  union {
960 //      __s32 value;
961 //      __s64 value64;
962 //      char *string;
963 //  };
964 //};
965 
966 struct v4l2_ext_controls {
967     __u32 ctrl_class;
968     __u32 count;
969     __u32 error_idx;
970     __u32 reserved[2];
971     struct v4l2_ext_control *controls;
972 };
973 
974 /*  Values for ctrl_class field */
975 #define V4L2_CTRL_CLASS_USER 0x00980000 /* Old-style 'user' controls */
976 #define V4L2_CTRL_CLASS_MPEG 0x00990000 /* MPEG-compression controls */
977 #define V4L2_CTRL_CLASS_CAMERA 0x009a0000   /* Camera class controls */
978 #define V4L2_CTRL_CLASS_FM_TX 0x009b0000    /* FM Modulator control class */
979 
980 #define V4L2_CTRL_ID_MASK         (0x0fffffff)
981 #define V4L2_CTRL_ID2CLASS(id)    ((id) & 0x0fff0000UL)
982 #define V4L2_CTRL_DRIVER_PRIV(id) (((id) & 0xffff) >= 0x1000)
983 
984 enum v4l2_ctrl_type {
985     V4L2_CTRL_TYPE_INTEGER       = 1,
986     V4L2_CTRL_TYPE_BOOLEAN       = 2,
987     V4L2_CTRL_TYPE_MENU      = 3,
988     V4L2_CTRL_TYPE_BUTTON        = 4,
989     V4L2_CTRL_TYPE_INTEGER64     = 5,
990     V4L2_CTRL_TYPE_CTRL_CLASS    = 6,
991     V4L2_CTRL_TYPE_STRING        = 7,
992 };
993 
994 /*  Used in the VIDIOC_QUERYCTRL ioctl for querying controls */
995 struct v4l2_queryctrl {
996     __u32            id;
997     enum v4l2_ctrl_type  type;
998     __u8             name[32];  /* Whatever */
999     __s32            minimum;   /* Note signedness */
1000     __s32            maximum;
1001     __s32            step;
1002     __s32            default_value;
1003     __u32                flags;
1004     __u32            reserved[2];
1005 };
1006 
1007 /*  Used in the VIDIOC_QUERYMENU ioctl for querying menu items */
1008 struct v4l2_querymenu {
1009     __u32       id;
1010     __u32       index;
1011     __u8        name[32];   /* Whatever */
1012     __u32       reserved;
1013 };
1014 
1015 /*  Control flags  */
1016 #define V4L2_CTRL_FLAG_DISABLED     0x0001
1017 #define V4L2_CTRL_FLAG_GRABBED      0x0002
1018 #define V4L2_CTRL_FLAG_READ_ONLY    0x0004
1019 #define V4L2_CTRL_FLAG_UPDATE       0x0008
1020 #define V4L2_CTRL_FLAG_INACTIVE     0x0010
1021 #define V4L2_CTRL_FLAG_SLIDER       0x0020
1022 #define V4L2_CTRL_FLAG_WRITE_ONLY   0x0040
1023 
1024 /*  Query flag, to be ORed with the control ID */
1025 #define V4L2_CTRL_FLAG_NEXT_CTRL    0x80000000
1026 
1027 /*  User-class control IDs defined by V4L2 */
1028 #define V4L2_CID_BASE           (V4L2_CTRL_CLASS_USER | 0x900)
1029 #define V4L2_CID_USER_BASE      V4L2_CID_BASE
1030 /*  IDs reserved for driver specific controls */
1031 #define V4L2_CID_PRIVATE_BASE       0x08000000
1032 
1033 #define V4L2_CID_USER_CLASS         (V4L2_CTRL_CLASS_USER | 1)
1034 #define V4L2_CID_BRIGHTNESS     (V4L2_CID_BASE+0)
1035 #define V4L2_CID_CONTRAST       (V4L2_CID_BASE+1)
1036 #define V4L2_CID_SATURATION     (V4L2_CID_BASE+2)
1037 #define V4L2_CID_HUE            (V4L2_CID_BASE+3)
1038 #define V4L2_CID_AUDIO_VOLUME       (V4L2_CID_BASE+5)
1039 #define V4L2_CID_AUDIO_BALANCE      (V4L2_CID_BASE+6)
1040 #define V4L2_CID_AUDIO_BASS     (V4L2_CID_BASE+7)
1041 #define V4L2_CID_AUDIO_TREBLE       (V4L2_CID_BASE+8)
1042 #define V4L2_CID_AUDIO_MUTE     (V4L2_CID_BASE+9)
1043 #define V4L2_CID_AUDIO_LOUDNESS     (V4L2_CID_BASE+10)
1044 #define V4L2_CID_BLACK_LEVEL        (V4L2_CID_BASE+11) /* Deprecated */
1045 #define V4L2_CID_AUTO_WHITE_BALANCE (V4L2_CID_BASE+12)
1046 #define V4L2_CID_DO_WHITE_BALANCE   (V4L2_CID_BASE+13)
1047 enum v4l2_whiteblance {
1048     V4L2_WB_AUTO = 0,
1049     V4L2_WB_CLOUD = 1,
1050     V4L2_WB_DAYLIGHT = 2,
1051     V4L2_WB_INCANDESCENCE = 3,
1052     V4L2_WB_FLUORESCENT = 4,
1053     V4L2_WB_TUNGSTEN = 5,
1054 };
1055 #define V4L2_CID_RED_BALANCE        (V4L2_CID_BASE+14)
1056 #define V4L2_CID_BLUE_BALANCE       (V4L2_CID_BASE+15)
1057 #define V4L2_CID_GAMMA          (V4L2_CID_BASE+16)
1058 #define V4L2_CID_WHITENESS      (V4L2_CID_GAMMA) /* Deprecated */
1059 #define V4L2_CID_EXPOSURE       (V4L2_CID_BASE+17)
1060 #define V4L2_CID_AUTOGAIN       (V4L2_CID_BASE+18)
1061 #define V4L2_CID_GAIN           (V4L2_CID_BASE+19)
1062 #define V4L2_CID_HFLIP          (V4L2_CID_BASE+20)
1063 #define V4L2_CID_VFLIP          (V4L2_CID_BASE+21)
1064 
1065 /* Deprecated; use V4L2_CID_PAN_RESET and V4L2_CID_TILT_RESET */
1066 #define V4L2_CID_HCENTER        (V4L2_CID_BASE+22)
1067 #define V4L2_CID_VCENTER        (V4L2_CID_BASE+23)
1068 
1069 #define V4L2_CID_POWER_LINE_FREQUENCY   (V4L2_CID_BASE+24)
1070 enum v4l2_power_line_frequency {
1071     V4L2_CID_POWER_LINE_FREQUENCY_DISABLED  = 0,
1072     V4L2_CID_POWER_LINE_FREQUENCY_50HZ  = 1,
1073     V4L2_CID_POWER_LINE_FREQUENCY_60HZ  = 2,
1074 };
1075 #define V4L2_CID_HUE_AUTO           (V4L2_CID_BASE+25)
1076 #define V4L2_CID_WHITE_BALANCE_TEMPERATURE  (V4L2_CID_BASE+26)
1077 #define V4L2_CID_SHARPNESS          (V4L2_CID_BASE+27)
1078 #define V4L2_CID_BACKLIGHT_COMPENSATION     (V4L2_CID_BASE+28)
1079 #define V4L2_CID_CHROMA_AGC                     (V4L2_CID_BASE+29)
1080 #define V4L2_CID_COLOR_KILLER                   (V4L2_CID_BASE+30)
1081 #define V4L2_CID_COLORFX            (V4L2_CID_BASE+31)
1082 enum v4l2_colorfx {
1083     V4L2_COLORFX_NONE   = 0,
1084     V4L2_COLORFX_BW     = 1,
1085     V4L2_COLORFX_SEPIA  = 2,
1086     V4L2_COLORFX_NEGATIVE = 3,
1087     V4L2_COLORFX_EMBOSS = 4,
1088     V4L2_COLORFX_SKETCH = 5,
1089     V4L2_COLORFX_SKY_BLUE = 6,
1090     V4L2_COLORFX_GRASS_GREEN = 7,
1091     V4L2_COLORFX_SKIN_WHITEN = 8,
1092     V4L2_COLORFX_VIVID = 9,
1093 };
1094 #define V4L2_CID_AUTOBRIGHTNESS         (V4L2_CID_BASE+32)
1095 #define V4L2_CID_BAND_STOP_FILTER       (V4L2_CID_BASE+33)
1096 
1097 #define V4L2_CID_ROTATE             (V4L2_CID_BASE+34)
1098 #define V4L2_CID_BG_COLOR           (V4L2_CID_BASE+35)
1099 
1100 #define V4L2_CID_CHROMA_GAIN                    (V4L2_CID_BASE+36)
1101 
1102 #define V4L2_CID_ILLUMINATORS_1         (V4L2_CID_BASE+37)
1103 #define V4L2_CID_ILLUMINATORS_2         (V4L2_CID_BASE+38)
1104 
1105 /* last CID + 1 */
1106 #define V4L2_CID_LASTP1                         (V4L2_CID_BASE+39)
1107 /* Add camera flash light by raymonxiu */
1108 #define V4L2_CID_CAMERA_FLASH_MODE              (V4L2_CID_PRIVATE_BASE+0)
1109 enum v4l2_flash_mode {
1110     V4L2_FLASH_MODE_OFF = 0,
1111     V4L2_FLASH_MODE_AUTO = 1,
1112     V4L2_FLASH_MODE_ON = 2,
1113     V4L2_FLASH_MODE_TORCH = 3,
1114     V4L2_FLASH_MODE_RED_EYE = 4,
1115 };
1116 /* Add camera autofocus mode by raymonxiu */
1117 #define V4L2_CID_CAMERA_AF_MODE              (V4L2_CID_PRIVATE_BASE+1)
1118 enum v4l2_autofocus_mode {
1119     V4L2_AF_FIXED = 0,
1120     V4L2_AF_INFINITY = 1,
1121     V4L2_AF_MACRO = 2,
1122     V4L2_AF_AUTO = 3,
1123     V4L2_AF_TOUCH = 4,
1124     V4L2_AF_FACE = 5,
1125 };
1126 /* Add camera autofocus ctrl by raymonxiu */
1127 #define V4L2_CID_CAMERA_AF_CTRL              (V4L2_CID_PRIVATE_BASE+2)
1128 enum v4l2_autofocus_ctrl {
1129     V4L2_AF_INIT = 0,
1130     V4L2_AF_RELEASE = 1,
1131     V4L2_AF_TRIG_SINGLE = 2,
1132     V4L2_AF_TRIG_CONTINUEOUS = 3,
1133     V4L2_AF_LOCK = 4,
1134     V4L2_AF_WIN_XY = 5,
1135     V4L2_AF_WIN_NUM = 6,
1136 };
1137 
1138 /*  MPEG-class control IDs defined by V4L2 */
1139 #define V4L2_CID_MPEG_BASE          (V4L2_CTRL_CLASS_MPEG | 0x900)
1140 #define V4L2_CID_MPEG_CLASS             (V4L2_CTRL_CLASS_MPEG | 1)
1141 
1142 /*  MPEG streams */
1143 #define V4L2_CID_MPEG_STREAM_TYPE       (V4L2_CID_MPEG_BASE+0)
1144 enum v4l2_mpeg_stream_type {
1145     V4L2_MPEG_STREAM_TYPE_MPEG2_PS   = 0, /* MPEG-2 program stream */
1146     V4L2_MPEG_STREAM_TYPE_MPEG2_TS   = 1, /* MPEG-2 transport stream */
1147     V4L2_MPEG_STREAM_TYPE_MPEG1_SS   = 2, /* MPEG-1 system stream */
1148     V4L2_MPEG_STREAM_TYPE_MPEG2_DVD  = 3, /* MPEG-2 DVD-compatible stream */
1149     V4L2_MPEG_STREAM_TYPE_MPEG1_VCD  = 4, /* MPEG-1 VCD-compatible stream */
1150     V4L2_MPEG_STREAM_TYPE_MPEG2_SVCD = 5, /* MPEG-2 SVCD-compatible stream */
1151 };
1152 #define V4L2_CID_MPEG_STREAM_PID_PMT        (V4L2_CID_MPEG_BASE+1)
1153 #define V4L2_CID_MPEG_STREAM_PID_AUDIO      (V4L2_CID_MPEG_BASE+2)
1154 #define V4L2_CID_MPEG_STREAM_PID_VIDEO      (V4L2_CID_MPEG_BASE+3)
1155 #define V4L2_CID_MPEG_STREAM_PID_PCR        (V4L2_CID_MPEG_BASE+4)
1156 #define V4L2_CID_MPEG_STREAM_PES_ID_AUDIO   (V4L2_CID_MPEG_BASE+5)
1157 #define V4L2_CID_MPEG_STREAM_PES_ID_VIDEO   (V4L2_CID_MPEG_BASE+6)
1158 #define V4L2_CID_MPEG_STREAM_VBI_FMT        (V4L2_CID_MPEG_BASE+7)
1159 enum v4l2_mpeg_stream_vbi_fmt {
1160     V4L2_MPEG_STREAM_VBI_FMT_NONE = 0,  /* No VBI in the MPEG stream */
1161     V4L2_MPEG_STREAM_VBI_FMT_IVTV = 1,  /* VBI in private packets, IVTV format */
1162 };
1163 
1164 /*  MPEG audio */
1165 #define V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ   (V4L2_CID_MPEG_BASE+100)
1166 enum v4l2_mpeg_audio_sampling_freq {
1167     V4L2_MPEG_AUDIO_SAMPLING_FREQ_44100 = 0,
1168     V4L2_MPEG_AUDIO_SAMPLING_FREQ_48000 = 1,
1169     V4L2_MPEG_AUDIO_SAMPLING_FREQ_32000 = 2,
1170 };
1171 #define V4L2_CID_MPEG_AUDIO_ENCODING        (V4L2_CID_MPEG_BASE+101)
1172 enum v4l2_mpeg_audio_encoding {
1173     V4L2_MPEG_AUDIO_ENCODING_LAYER_1 = 0,
1174     V4L2_MPEG_AUDIO_ENCODING_LAYER_2 = 1,
1175     V4L2_MPEG_AUDIO_ENCODING_LAYER_3 = 2,
1176     V4L2_MPEG_AUDIO_ENCODING_AAC     = 3,
1177     V4L2_MPEG_AUDIO_ENCODING_AC3     = 4,
1178 };
1179 #define V4L2_CID_MPEG_AUDIO_L1_BITRATE      (V4L2_CID_MPEG_BASE+102)
1180 enum v4l2_mpeg_audio_l1_bitrate {
1181     V4L2_MPEG_AUDIO_L1_BITRATE_32K  = 0,
1182     V4L2_MPEG_AUDIO_L1_BITRATE_64K  = 1,
1183     V4L2_MPEG_AUDIO_L1_BITRATE_96K  = 2,
1184     V4L2_MPEG_AUDIO_L1_BITRATE_128K = 3,
1185     V4L2_MPEG_AUDIO_L1_BITRATE_160K = 4,
1186     V4L2_MPEG_AUDIO_L1_BITRATE_192K = 5,
1187     V4L2_MPEG_AUDIO_L1_BITRATE_224K = 6,
1188     V4L2_MPEG_AUDIO_L1_BITRATE_256K = 7,
1189     V4L2_MPEG_AUDIO_L1_BITRATE_288K = 8,
1190     V4L2_MPEG_AUDIO_L1_BITRATE_320K = 9,
1191     V4L2_MPEG_AUDIO_L1_BITRATE_352K = 10,
1192     V4L2_MPEG_AUDIO_L1_BITRATE_384K = 11,
1193     V4L2_MPEG_AUDIO_L1_BITRATE_416K = 12,
1194     V4L2_MPEG_AUDIO_L1_BITRATE_448K = 13,
1195 };
1196 #define V4L2_CID_MPEG_AUDIO_L2_BITRATE      (V4L2_CID_MPEG_BASE+103)
1197 enum v4l2_mpeg_audio_l2_bitrate {
1198     V4L2_MPEG_AUDIO_L2_BITRATE_32K  = 0,
1199     V4L2_MPEG_AUDIO_L2_BITRATE_48K  = 1,
1200     V4L2_MPEG_AUDIO_L2_BITRATE_56K  = 2,
1201     V4L2_MPEG_AUDIO_L2_BITRATE_64K  = 3,
1202     V4L2_MPEG_AUDIO_L2_BITRATE_80K  = 4,
1203     V4L2_MPEG_AUDIO_L2_BITRATE_96K  = 5,
1204     V4L2_MPEG_AUDIO_L2_BITRATE_112K = 6,
1205     V4L2_MPEG_AUDIO_L2_BITRATE_128K = 7,
1206     V4L2_MPEG_AUDIO_L2_BITRATE_160K = 8,
1207     V4L2_MPEG_AUDIO_L2_BITRATE_192K = 9,
1208     V4L2_MPEG_AUDIO_L2_BITRATE_224K = 10,
1209     V4L2_MPEG_AUDIO_L2_BITRATE_256K = 11,
1210     V4L2_MPEG_AUDIO_L2_BITRATE_320K = 12,
1211     V4L2_MPEG_AUDIO_L2_BITRATE_384K = 13,
1212 };
1213 #define V4L2_CID_MPEG_AUDIO_L3_BITRATE      (V4L2_CID_MPEG_BASE+104)
1214 enum v4l2_mpeg_audio_l3_bitrate {
1215     V4L2_MPEG_AUDIO_L3_BITRATE_32K  = 0,
1216     V4L2_MPEG_AUDIO_L3_BITRATE_40K  = 1,
1217     V4L2_MPEG_AUDIO_L3_BITRATE_48K  = 2,
1218     V4L2_MPEG_AUDIO_L3_BITRATE_56K  = 3,
1219     V4L2_MPEG_AUDIO_L3_BITRATE_64K  = 4,
1220     V4L2_MPEG_AUDIO_L3_BITRATE_80K  = 5,
1221     V4L2_MPEG_AUDIO_L3_BITRATE_96K  = 6,
1222     V4L2_MPEG_AUDIO_L3_BITRATE_112K = 7,
1223     V4L2_MPEG_AUDIO_L3_BITRATE_128K = 8,
1224     V4L2_MPEG_AUDIO_L3_BITRATE_160K = 9,
1225     V4L2_MPEG_AUDIO_L3_BITRATE_192K = 10,
1226     V4L2_MPEG_AUDIO_L3_BITRATE_224K = 11,
1227     V4L2_MPEG_AUDIO_L3_BITRATE_256K = 12,
1228     V4L2_MPEG_AUDIO_L3_BITRATE_320K = 13,
1229 };
1230 #define V4L2_CID_MPEG_AUDIO_MODE        (V4L2_CID_MPEG_BASE+105)
1231 enum v4l2_mpeg_audio_mode {
1232     V4L2_MPEG_AUDIO_MODE_STEREO       = 0,
1233     V4L2_MPEG_AUDIO_MODE_JOINT_STEREO = 1,
1234     V4L2_MPEG_AUDIO_MODE_DUAL         = 2,
1235     V4L2_MPEG_AUDIO_MODE_MONO         = 3,
1236 };
1237 #define V4L2_CID_MPEG_AUDIO_MODE_EXTENSION  (V4L2_CID_MPEG_BASE+106)
1238 enum v4l2_mpeg_audio_mode_extension {
1239     V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_4  = 0,
1240     V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_8  = 1,
1241     V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_12 = 2,
1242     V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_16 = 3,
1243 };
1244 #define V4L2_CID_MPEG_AUDIO_EMPHASIS        (V4L2_CID_MPEG_BASE+107)
1245 enum v4l2_mpeg_audio_emphasis {
1246     V4L2_MPEG_AUDIO_EMPHASIS_NONE         = 0,
1247     V4L2_MPEG_AUDIO_EMPHASIS_50_DIV_15_uS = 1,
1248     V4L2_MPEG_AUDIO_EMPHASIS_CCITT_J17    = 2,
1249 };
1250 #define V4L2_CID_MPEG_AUDIO_CRC         (V4L2_CID_MPEG_BASE+108)
1251 enum v4l2_mpeg_audio_crc {
1252     V4L2_MPEG_AUDIO_CRC_NONE  = 0,
1253     V4L2_MPEG_AUDIO_CRC_CRC16 = 1,
1254 };
1255 #define V4L2_CID_MPEG_AUDIO_MUTE        (V4L2_CID_MPEG_BASE+109)
1256 #define V4L2_CID_MPEG_AUDIO_AAC_BITRATE     (V4L2_CID_MPEG_BASE+110)
1257 #define V4L2_CID_MPEG_AUDIO_AC3_BITRATE     (V4L2_CID_MPEG_BASE+111)
1258 enum v4l2_mpeg_audio_ac3_bitrate {
1259     V4L2_MPEG_AUDIO_AC3_BITRATE_32K  = 0,
1260     V4L2_MPEG_AUDIO_AC3_BITRATE_40K  = 1,
1261     V4L2_MPEG_AUDIO_AC3_BITRATE_48K  = 2,
1262     V4L2_MPEG_AUDIO_AC3_BITRATE_56K  = 3,
1263     V4L2_MPEG_AUDIO_AC3_BITRATE_64K  = 4,
1264     V4L2_MPEG_AUDIO_AC3_BITRATE_80K  = 5,
1265     V4L2_MPEG_AUDIO_AC3_BITRATE_96K  = 6,
1266     V4L2_MPEG_AUDIO_AC3_BITRATE_112K = 7,
1267     V4L2_MPEG_AUDIO_AC3_BITRATE_128K = 8,
1268     V4L2_MPEG_AUDIO_AC3_BITRATE_160K = 9,
1269     V4L2_MPEG_AUDIO_AC3_BITRATE_192K = 10,
1270     V4L2_MPEG_AUDIO_AC3_BITRATE_224K = 11,
1271     V4L2_MPEG_AUDIO_AC3_BITRATE_256K = 12,
1272     V4L2_MPEG_AUDIO_AC3_BITRATE_320K = 13,
1273     V4L2_MPEG_AUDIO_AC3_BITRATE_384K = 14,
1274     V4L2_MPEG_AUDIO_AC3_BITRATE_448K = 15,
1275     V4L2_MPEG_AUDIO_AC3_BITRATE_512K = 16,
1276     V4L2_MPEG_AUDIO_AC3_BITRATE_576K = 17,
1277     V4L2_MPEG_AUDIO_AC3_BITRATE_640K = 18,
1278 };
1279 
1280 /*  MPEG video */
1281 #define V4L2_CID_MPEG_VIDEO_ENCODING        (V4L2_CID_MPEG_BASE+200)
1282 enum v4l2_mpeg_video_encoding {
1283     V4L2_MPEG_VIDEO_ENCODING_MPEG_1     = 0,
1284     V4L2_MPEG_VIDEO_ENCODING_MPEG_2     = 1,
1285     V4L2_MPEG_VIDEO_ENCODING_MPEG_4_AVC = 2,
1286 };
1287 #define V4L2_CID_MPEG_VIDEO_ASPECT      (V4L2_CID_MPEG_BASE+201)
1288 enum v4l2_mpeg_video_aspect {
1289     V4L2_MPEG_VIDEO_ASPECT_1x1     = 0,
1290     V4L2_MPEG_VIDEO_ASPECT_4x3     = 1,
1291     V4L2_MPEG_VIDEO_ASPECT_16x9    = 2,
1292     V4L2_MPEG_VIDEO_ASPECT_221x100 = 3,
1293 };
1294 #define V4L2_CID_MPEG_VIDEO_B_FRAMES        (V4L2_CID_MPEG_BASE+202)
1295 #define V4L2_CID_MPEG_VIDEO_GOP_SIZE        (V4L2_CID_MPEG_BASE+203)
1296 #define V4L2_CID_MPEG_VIDEO_GOP_CLOSURE     (V4L2_CID_MPEG_BASE+204)
1297 #define V4L2_CID_MPEG_VIDEO_PULLDOWN        (V4L2_CID_MPEG_BASE+205)
1298 #define V4L2_CID_MPEG_VIDEO_BITRATE_MODE    (V4L2_CID_MPEG_BASE+206)
1299 enum v4l2_mpeg_video_bitrate_mode {
1300     V4L2_MPEG_VIDEO_BITRATE_MODE_VBR = 0,
1301     V4L2_MPEG_VIDEO_BITRATE_MODE_CBR = 1,
1302 };
1303 #define V4L2_CID_MPEG_VIDEO_BITRATE         (V4L2_CID_MPEG_BASE+207)
1304 #define V4L2_CID_MPEG_VIDEO_BITRATE_PEAK    (V4L2_CID_MPEG_BASE+208)
1305 #define V4L2_CID_MPEG_VIDEO_TEMPORAL_DECIMATION (V4L2_CID_MPEG_BASE+209)
1306 #define V4L2_CID_MPEG_VIDEO_MUTE        (V4L2_CID_MPEG_BASE+210)
1307 #define V4L2_CID_MPEG_VIDEO_MUTE_YUV        (V4L2_CID_MPEG_BASE+211)
1308 
1309 /*  MPEG-class control IDs specific to the CX2341x driver as defined by V4L2 */
1310 #define V4L2_CID_MPEG_CX2341X_BASE              (V4L2_CTRL_CLASS_MPEG | 0x1000)
1311 #define V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE     (V4L2_CID_MPEG_CX2341X_BASE+0)
1312 enum v4l2_mpeg_cx2341x_video_spatial_filter_mode {
1313     V4L2_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE_MANUAL = 0,
1314     V4L2_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE_AUTO   = 1,
1315 };
1316 #define V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER      (V4L2_CID_MPEG_CX2341X_BASE+1)
1317 #define V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE    (V4L2_CID_MPEG_CX2341X_BASE+2)
1318 enum v4l2_mpeg_cx2341x_video_luma_spatial_filter_type {
1319     V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_OFF                  = 0,
1320     V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_1D_HOR               = 1,
1321     V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_1D_VERT              = 2,
1322     V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_2D_HV_SEPARABLE      = 3,
1323     V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_2D_SYM_NON_SEPARABLE = 4,
1324 };
1325 #define V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE  (V4L2_CID_MPEG_CX2341X_BASE+3)
1326 enum v4l2_mpeg_cx2341x_video_chroma_spatial_filter_type {
1327     V4L2_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE_OFF    = 0,
1328     V4L2_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE_1D_HOR = 1,
1329 };
1330 #define V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE    (V4L2_CID_MPEG_CX2341X_BASE+4)
1331 enum v4l2_mpeg_cx2341x_video_temporal_filter_mode {
1332     V4L2_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE_MANUAL = 0,
1333     V4L2_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE_AUTO   = 1,
1334 };
1335 #define V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER         (V4L2_CID_MPEG_CX2341X_BASE+5)
1336 #define V4L2_CID_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE      (V4L2_CID_MPEG_CX2341X_BASE+6)
1337 enum v4l2_mpeg_cx2341x_video_median_filter_type {
1338     V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_OFF      = 0,
1339     V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_HOR      = 1,
1340     V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_VERT     = 2,
1341     V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_HOR_VERT = 3,
1342     V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_DIAG     = 4,
1343 };
1344 #define V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_BOTTOM   (V4L2_CID_MPEG_CX2341X_BASE+7)
1345 #define V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_TOP  (V4L2_CID_MPEG_CX2341X_BASE+8)
1346 #define V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_BOTTOM (V4L2_CID_MPEG_CX2341X_BASE+9)
1347 #define V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_TOP    (V4L2_CID_MPEG_CX2341X_BASE+10)
1348 #define V4L2_CID_MPEG_CX2341X_STREAM_INSERT_NAV_PACKETS     (V4L2_CID_MPEG_CX2341X_BASE+11)
1349 
1350 /*  Camera class control IDs */
1351 #define V4L2_CID_CAMERA_CLASS_BASE  (V4L2_CTRL_CLASS_CAMERA | 0x900)
1352 #define V4L2_CID_CAMERA_CLASS       (V4L2_CTRL_CLASS_CAMERA | 1)
1353 
1354 #define V4L2_CID_EXPOSURE_AUTO          (V4L2_CID_CAMERA_CLASS_BASE+1)
1355 enum  v4l2_exposure_auto_type {
1356     V4L2_EXPOSURE_AUTO = 0,
1357     V4L2_EXPOSURE_MANUAL = 1,
1358     V4L2_EXPOSURE_SHUTTER_PRIORITY = 2,
1359     V4L2_EXPOSURE_APERTURE_PRIORITY = 3
1360 };
1361 #define V4L2_CID_EXPOSURE_ABSOLUTE      (V4L2_CID_CAMERA_CLASS_BASE+2)
1362 #define V4L2_CID_EXPOSURE_AUTO_PRIORITY     (V4L2_CID_CAMERA_CLASS_BASE+3)
1363 
1364 #define V4L2_CID_PAN_RELATIVE           (V4L2_CID_CAMERA_CLASS_BASE+4)
1365 #define V4L2_CID_TILT_RELATIVE          (V4L2_CID_CAMERA_CLASS_BASE+5)
1366 #define V4L2_CID_PAN_RESET          (V4L2_CID_CAMERA_CLASS_BASE+6)
1367 #define V4L2_CID_TILT_RESET         (V4L2_CID_CAMERA_CLASS_BASE+7)
1368 
1369 #define V4L2_CID_PAN_ABSOLUTE           (V4L2_CID_CAMERA_CLASS_BASE+8)
1370 #define V4L2_CID_TILT_ABSOLUTE          (V4L2_CID_CAMERA_CLASS_BASE+9)
1371 
1372 #define V4L2_CID_FOCUS_ABSOLUTE         (V4L2_CID_CAMERA_CLASS_BASE+10)
1373 #define V4L2_CID_FOCUS_RELATIVE         (V4L2_CID_CAMERA_CLASS_BASE+11)
1374 #define V4L2_CID_FOCUS_AUTO         (V4L2_CID_CAMERA_CLASS_BASE+12)
1375 
1376 #define V4L2_CID_ZOOM_ABSOLUTE          (V4L2_CID_CAMERA_CLASS_BASE+13)
1377 #define V4L2_CID_ZOOM_RELATIVE          (V4L2_CID_CAMERA_CLASS_BASE+14)
1378 #define V4L2_CID_ZOOM_CONTINUOUS        (V4L2_CID_CAMERA_CLASS_BASE+15)
1379 
1380 #define V4L2_CID_PRIVACY            (V4L2_CID_CAMERA_CLASS_BASE+16)
1381 
1382 #define V4L2_CID_IRIS_ABSOLUTE          (V4L2_CID_CAMERA_CLASS_BASE+17)
1383 #define V4L2_CID_IRIS_RELATIVE          (V4L2_CID_CAMERA_CLASS_BASE+18)
1384 
1385 /* FM Modulator class control IDs */
1386 #define V4L2_CID_FM_TX_CLASS_BASE       (V4L2_CTRL_CLASS_FM_TX | 0x900)
1387 #define V4L2_CID_FM_TX_CLASS            (V4L2_CTRL_CLASS_FM_TX | 1)
1388 
1389 #define V4L2_CID_RDS_TX_DEVIATION       (V4L2_CID_FM_TX_CLASS_BASE + 1)
1390 #define V4L2_CID_RDS_TX_PI          (V4L2_CID_FM_TX_CLASS_BASE + 2)
1391 #define V4L2_CID_RDS_TX_PTY         (V4L2_CID_FM_TX_CLASS_BASE + 3)
1392 #define V4L2_CID_RDS_TX_PS_NAME         (V4L2_CID_FM_TX_CLASS_BASE + 5)
1393 #define V4L2_CID_RDS_TX_RADIO_TEXT      (V4L2_CID_FM_TX_CLASS_BASE + 6)
1394 
1395 #define V4L2_CID_AUDIO_LIMITER_ENABLED      (V4L2_CID_FM_TX_CLASS_BASE + 64)
1396 #define V4L2_CID_AUDIO_LIMITER_RELEASE_TIME (V4L2_CID_FM_TX_CLASS_BASE + 65)
1397 #define V4L2_CID_AUDIO_LIMITER_DEVIATION    (V4L2_CID_FM_TX_CLASS_BASE + 66)
1398 
1399 #define V4L2_CID_AUDIO_COMPRESSION_ENABLED  (V4L2_CID_FM_TX_CLASS_BASE + 80)
1400 #define V4L2_CID_AUDIO_COMPRESSION_GAIN     (V4L2_CID_FM_TX_CLASS_BASE + 81)
1401 #define V4L2_CID_AUDIO_COMPRESSION_THRESHOLD    (V4L2_CID_FM_TX_CLASS_BASE + 82)
1402 #define V4L2_CID_AUDIO_COMPRESSION_ATTACK_TIME  (V4L2_CID_FM_TX_CLASS_BASE + 83)
1403 #define V4L2_CID_AUDIO_COMPRESSION_RELEASE_TIME (V4L2_CID_FM_TX_CLASS_BASE + 84)
1404 
1405 #define V4L2_CID_PILOT_TONE_ENABLED     (V4L2_CID_FM_TX_CLASS_BASE + 96)
1406 #define V4L2_CID_PILOT_TONE_DEVIATION       (V4L2_CID_FM_TX_CLASS_BASE + 97)
1407 #define V4L2_CID_PILOT_TONE_FREQUENCY       (V4L2_CID_FM_TX_CLASS_BASE + 98)
1408 
1409 #define V4L2_CID_TUNE_PREEMPHASIS       (V4L2_CID_FM_TX_CLASS_BASE + 112)
1410 enum v4l2_preemphasis {
1411     V4L2_PREEMPHASIS_DISABLED   = 0,
1412     V4L2_PREEMPHASIS_50_uS      = 1,
1413     V4L2_PREEMPHASIS_75_uS      = 2,
1414 };
1415 #define V4L2_CID_TUNE_POWER_LEVEL       (V4L2_CID_FM_TX_CLASS_BASE + 113)
1416 #define V4L2_CID_TUNE_ANTENNA_CAPACITOR     (V4L2_CID_FM_TX_CLASS_BASE + 114)
1417 
1418 /*
1419  *  T U N I N G
1420  */
1421 struct v4l2_tuner {
1422     __u32                   index;
1423     __u8            name[32];
1424     enum v4l2_tuner_type    type;
1425     __u32           capability;
1426     __u32           rangelow;
1427     __u32           rangehigh;
1428     __u32           rxsubchans;
1429     __u32           audmode;
1430     __s32           signal;
1431     __s32           afc;
1432     __u32           reserved[4];
1433 };
1434 
1435 struct v4l2_modulator {
1436     __u32           index;
1437     __u8            name[32];
1438     __u32           capability;
1439     __u32           rangelow;
1440     __u32           rangehigh;
1441     __u32           txsubchans;
1442     __u32           reserved[4];
1443 };
1444 
1445 /*  Flags for the 'capability' field */
1446 #define V4L2_TUNER_CAP_LOW      0x0001
1447 #define V4L2_TUNER_CAP_NORM     0x0002
1448 #define V4L2_TUNER_CAP_STEREO       0x0010
1449 #define V4L2_TUNER_CAP_LANG2        0x0020
1450 #define V4L2_TUNER_CAP_SAP      0x0020
1451 #define V4L2_TUNER_CAP_LANG1        0x0040
1452 #define V4L2_TUNER_CAP_RDS      0x0080
1453 #define V4L2_TUNER_CAP_RDS_BLOCK_IO 0x0100
1454 #define V4L2_TUNER_CAP_RDS_CONTROLS 0x0200
1455 
1456 /*  Flags for the 'rxsubchans' field */
1457 #define V4L2_TUNER_SUB_MONO     0x0001
1458 #define V4L2_TUNER_SUB_STEREO       0x0002
1459 #define V4L2_TUNER_SUB_LANG2        0x0004
1460 #define V4L2_TUNER_SUB_SAP      0x0004
1461 #define V4L2_TUNER_SUB_LANG1        0x0008
1462 #define V4L2_TUNER_SUB_RDS      0x0010
1463 
1464 /*  Values for the 'audmode' field */
1465 #define V4L2_TUNER_MODE_MONO        0x0000
1466 #define V4L2_TUNER_MODE_STEREO      0x0001
1467 #define V4L2_TUNER_MODE_LANG2       0x0002
1468 #define V4L2_TUNER_MODE_SAP     0x0002
1469 #define V4L2_TUNER_MODE_LANG1       0x0003
1470 #define V4L2_TUNER_MODE_LANG1_LANG2 0x0004
1471 
1472 struct v4l2_frequency {
1473     __u32             tuner;
1474     enum v4l2_tuner_type  type;
1475     __u32             frequency;
1476     __u32             reserved[8];
1477 };
1478 
1479 struct v4l2_hw_freq_seek {
1480     __u32             tuner;
1481     enum v4l2_tuner_type  type;
1482     __u32             seek_upward;
1483     __u32             wrap_around;
1484     __u32             spacing;
1485     __u32             reserved[7];
1486 };
1487 
1488 /*
1489  *  R D S
1490  */
1491 
1492 __packed struct v4l2_rds_data {
1493     __u8    lsb;
1494     __u8    msb;
1495     __u8    block;
1496 };
1497 
1498 #define V4L2_RDS_BLOCK_MSK   0x7
1499 #define V4L2_RDS_BLOCK_A     0
1500 #define V4L2_RDS_BLOCK_B     1
1501 #define V4L2_RDS_BLOCK_C     2
1502 #define V4L2_RDS_BLOCK_D     3
1503 #define V4L2_RDS_BLOCK_C_ALT     4
1504 #define V4L2_RDS_BLOCK_INVALID   7
1505 
1506 #define V4L2_RDS_BLOCK_CORRECTED 0x40
1507 #define V4L2_RDS_BLOCK_ERROR     0x80
1508 
1509 /*
1510  *  A U D I O
1511  */
1512 struct v4l2_audio {
1513     __u32   index;
1514     __u8    name[32];
1515     __u32   capability;
1516     __u32   mode;
1517     __u32   reserved[2];
1518 };
1519 
1520 /*  Flags for the 'capability' field */
1521 #define V4L2_AUDCAP_STEREO      0x00001
1522 #define V4L2_AUDCAP_AVL         0x00002
1523 
1524 /*  Flags for the 'mode' field */
1525 #define V4L2_AUDMODE_AVL        0x00001
1526 
1527 struct v4l2_audioout {
1528     __u32   index;
1529     __u8    name[32];
1530     __u32   capability;
1531     __u32   mode;
1532     __u32   reserved[2];
1533 };
1534 
1535 /*
1536  *  M P E G   S E R V I C E S
1537  *
1538  *  NOTE: EXPERIMENTAL API
1539  */
1540 #if 1
1541 #define V4L2_ENC_IDX_FRAME_I    (0)
1542 #define V4L2_ENC_IDX_FRAME_P    (1)
1543 #define V4L2_ENC_IDX_FRAME_B    (2)
1544 #define V4L2_ENC_IDX_FRAME_MASK (0xf)
1545 
1546 struct v4l2_enc_idx_entry {
1547     __u64 offset;
1548     __u64 pts;
1549     __u32 length;
1550     __u32 flags;
1551     __u32 reserved[2];
1552 };
1553 
1554 #define V4L2_ENC_IDX_ENTRIES (64)
1555 struct v4l2_enc_idx {
1556     __u32 entries;
1557     __u32 entries_cap;
1558     __u32 reserved[4];
1559     struct v4l2_enc_idx_entry entry[V4L2_ENC_IDX_ENTRIES];
1560 };
1561 
1562 
1563 #define V4L2_ENC_CMD_START      (0)
1564 #define V4L2_ENC_CMD_STOP       (1)
1565 #define V4L2_ENC_CMD_PAUSE      (2)
1566 #define V4L2_ENC_CMD_RESUME     (3)
1567 
1568 /* Flags for V4L2_ENC_CMD_STOP */
1569 #define V4L2_ENC_CMD_STOP_AT_GOP_END    (1 << 0)
1570 
1571 struct v4l2_encoder_cmd {
1572     __u32 cmd;
1573     __u32 flags;
1574     union {
1575         struct {
1576             __u32 data[8];
1577         } raw;
1578     }un;
1579 };
1580 
1581 #endif
1582 
1583 
1584 /*
1585  *  D A T A   S E R V I C E S   ( V B I )
1586  *
1587  *  Data services API by Michael Schimek
1588  */
1589 
1590 /* Raw VBI */
1591 struct v4l2_vbi_format {
1592     __u32   sampling_rate;      /* in 1 Hz */
1593     __u32   offset;
1594     __u32   samples_per_line;
1595     __u32   sample_format;      /* V4L2_PIX_FMT_* */
1596     __s32   start[2];
1597     __u32   count[2];
1598     __u32   flags;          /* V4L2_VBI_* */
1599     __u32   reserved[2];        /* must be zero */
1600 };
1601 
1602 /*  VBI flags  */
1603 #define V4L2_VBI_UNSYNC     (1 << 0)
1604 #define V4L2_VBI_INTERLACED (1 << 1)
1605 
1606 /* Sliced VBI
1607  *
1608  *    This implements is a proposal V4L2 API to allow SLICED VBI
1609  * required for some hardware encoders. It should change without
1610  * notice in the definitive implementation.
1611  */
1612 
1613 struct v4l2_sliced_vbi_format {
1614     __u16   service_set;
1615     /* service_lines[0][...] specifies lines 0-23 (1-23 used) of the first field
1616        service_lines[1][...] specifies lines 0-23 (1-23 used) of the second field
1617                  (equals frame lines 313-336 for 625 line video
1618                   standards, 263-286 for 525 line standards) */
1619     __u16   service_lines[2][24];
1620     __u32   io_size;
1621     __u32   reserved[2];            /* must be zero */
1622 };
1623 
1624 /* Teletext World System Teletext
1625    (WST), defined on ITU-R BT.653-2 */
1626 #define V4L2_SLICED_TELETEXT_B          (0x0001)
1627 /* Video Program System, defined on ETS 300 231*/
1628 #define V4L2_SLICED_VPS                 (0x0400)
1629 /* Closed Caption, defined on EIA-608 */
1630 #define V4L2_SLICED_CAPTION_525         (0x1000)
1631 /* Wide Screen System, defined on ITU-R BT1119.1 */
1632 #define V4L2_SLICED_WSS_625             (0x4000)
1633 
1634 #define V4L2_SLICED_VBI_525             (V4L2_SLICED_CAPTION_525)
1635 #define V4L2_SLICED_VBI_625             (V4L2_SLICED_TELETEXT_B | V4L2_SLICED_VPS | V4L2_SLICED_WSS_625)
1636 
1637 struct v4l2_sliced_vbi_cap {
1638     __u16   service_set;
1639     /* service_lines[0][...] specifies lines 0-23 (1-23 used) of the first field
1640        service_lines[1][...] specifies lines 0-23 (1-23 used) of the second field
1641                  (equals frame lines 313-336 for 625 line video
1642                   standards, 263-286 for 525 line standards) */
1643     __u16   service_lines[2][24];
1644     enum v4l2_buf_type type;
1645     __u32   reserved[3];    /* must be 0 */
1646 };
1647 
1648 struct v4l2_sliced_vbi_data {
1649     __u32   id;
1650     __u32   field;          /* 0: first field, 1: second field */
1651     __u32   line;           /* 1-23 */
1652     __u32   reserved;       /* must be 0 */
1653     __u8    data[48];
1654 };
1655 
1656 /*
1657  * Sliced VBI data inserted into MPEG Streams
1658  */
1659 
1660 /*
1661  * V4L2_MPEG_STREAM_VBI_FMT_IVTV:
1662  *
1663  * Structure of payload contained in an MPEG 2 Private Stream 1 PES Packet in an
1664  * MPEG-2 Program Pack that contains V4L2_MPEG_STREAM_VBI_FMT_IVTV Sliced VBI
1665  * data
1666  *
1667  * Note, the MPEG-2 Program Pack and Private Stream 1 PES packet header
1668  * definitions are not included here.  See the MPEG-2 specifications for details
1669  * on these headers.
1670  */
1671 
1672 /* Line type IDs */
1673 #define V4L2_MPEG_VBI_IVTV_TELETEXT_B     (1)
1674 #define V4L2_MPEG_VBI_IVTV_CAPTION_525    (4)
1675 #define V4L2_MPEG_VBI_IVTV_WSS_625        (5)
1676 #define V4L2_MPEG_VBI_IVTV_VPS            (7)
1677 
1678 __packed struct v4l2_mpeg_vbi_itv0_line {
1679     __u8 id;    /* One of V4L2_MPEG_VBI_IVTV_* above */
1680     __u8 data[42];  /* Sliced VBI data for the line */
1681 };
1682 
1683 __packed struct v4l2_mpeg_vbi_itv0 {
1684     __u32 linemask[2]; /* Bitmasks of VBI service lines present */
1685     struct v4l2_mpeg_vbi_itv0_line line[35];
1686 };
1687 
1688 __packed struct v4l2_mpeg_vbi_ITV0 {
1689     struct v4l2_mpeg_vbi_itv0_line line[36];
1690 };
1691 
1692 #define V4L2_MPEG_VBI_IVTV_MAGIC0   "itv0"
1693 #define V4L2_MPEG_VBI_IVTV_MAGIC1   "ITV0"
1694 
1695 //__packed struct v4l2_mpeg_vbi_fmt_ivtv {
1696 //  __u8 magic[4];
1697 //  union {
1698 //      struct v4l2_mpeg_vbi_itv0 itv0;
1699 //      struct v4l2_mpeg_vbi_ITV0 ITV0;
1700 //  };
1701 //};
1702 
1703 /*
1704  *  A G G R E G A T E   S T R U C T U R E S
1705  */
1706 
1707 /**
1708  * struct v4l2_plane_pix_format - additional, per-plane format definition
1709  * @sizeimage:      maximum size in bytes required for data, for which
1710  *          this plane will be used
1711  * @bytesperline:   distance in bytes between the leftmost pixels in two
1712  *          adjacent lines
1713  */
1714 __packed struct v4l2_plane_pix_format {
1715     __u32       sizeimage;
1716     __u16       bytesperline;
1717     __u16       reserved[7];
1718 };
1719 
1720 /**
1721  * struct v4l2_pix_format_mplane - multiplanar format definition
1722  * @width:      image width in pixels
1723  * @height:     image height in pixels
1724  * @pixelformat:    little endian four character code (fourcc)
1725  * @field:      field order (for interlaced video)
1726  * @colorspace:     supplemental to pixelformat
1727  * @plane_fmt:      per-plane information
1728  * @num_planes:     number of planes for this format
1729  */
1730 __packed struct v4l2_pix_format_mplane {
1731     __u32               width;
1732     __u32               height;
1733     __u32               pixelformat;
1734     enum v4l2_field         field;
1735     enum v4l2_colorspace        colorspace;
1736 
1737     struct v4l2_plane_pix_format    plane_fmt[VIDEO_MAX_PLANES];
1738     __u8                num_planes;
1739     __u8                reserved[11];
1740 };
1741 
1742 /**
1743  * struct v4l2_format - stream data format
1744  * @type:   type of the data stream
1745  * @pix:    definition of an image format
1746  * @pix_mp: definition of a multiplanar image format
1747  * @win:    definition of an overlaid image
1748  * @vbi:    raw VBI capture or output parameters
1749  * @sliced: sliced VBI capture or output parameters
1750  * @raw_data:   placeholder for future extensions and custom formats
1751  */
1752 struct v4l2_format {
1753     enum v4l2_buf_type type;
1754     union {
1755         struct v4l2_pix_format      pix;     /* V4L2_BUF_TYPE_VIDEO_CAPTURE */
1756         struct v4l2_pix_format_mplane   pix_mp;  /* V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE */
1757         struct v4l2_window      win;     /* V4L2_BUF_TYPE_VIDEO_OVERLAY */
1758         struct v4l2_vbi_format      vbi;     /* V4L2_BUF_TYPE_VBI_CAPTURE */
1759         struct v4l2_sliced_vbi_format   sliced;  /* V4L2_BUF_TYPE_SLICED_VBI_CAPTURE */
1760         __u8    raw_data[200];                   /* user-defined */
1761     } fmt;
1762 };
1763 
1764 /*  Stream type-dependent parameters
1765  */
1766 struct v4l2_streamparm {
1767     enum v4l2_buf_type type;
1768     union {
1769         struct v4l2_captureparm capture;
1770         struct v4l2_outputparm  output;
1771         __u8    raw_data[200];  /* user-defined */
1772     } parm;
1773 };
1774 
1775 /*
1776  *  E V E N T S
1777  */
1778 
1779 #define V4L2_EVENT_ALL              0
1780 #define V4L2_EVENT_VSYNC            1
1781 #define V4L2_EVENT_EOS              2
1782 #define V4L2_EVENT_PRIVATE_START        0x08000000
1783 
1784 /* Payload for V4L2_EVENT_VSYNC */
1785 __packed struct v4l2_event_vsync {
1786     /* Can be V4L2_FIELD_ANY, _NONE, _TOP or _BOTTOM */
1787     __u8 field;
1788 };
1789 
1790 //struct v4l2_event {
1791 //  __u32               type;
1792 //  union {
1793 //      struct v4l2_event_vsync vsync;
1794 //      __u8            data[64];
1795 //  } u;
1796 //  __u32               pending;
1797 //  __u32               sequence;
1798 //  struct timespec         timestamp;
1799 //  __u32               reserved[9];
1800 //};
1801 
1802 struct v4l2_event_subscription {
1803     __u32               type;
1804     __u32               reserved[7];
1805 };
1806 
1807 /*
1808  *  A D V A N C E D   D E B U G G I N G
1809  *
1810  *  NOTE: EXPERIMENTAL API, NEVER RELY ON THIS IN APPLICATIONS!
1811  *  FOR DEBUGGING, TESTING AND INTERNAL USE ONLY!
1812  */
1813 
1814 /* VIDIOC_DBG_G_REGISTER and VIDIOC_DBG_S_REGISTER */
1815 
1816 #define V4L2_CHIP_MATCH_HOST       0  /* Match against chip ID on host (0 for the host) */
1817 #define V4L2_CHIP_MATCH_I2C_DRIVER 1  /* Match against I2C driver name */
1818 #define V4L2_CHIP_MATCH_I2C_ADDR   2  /* Match against I2C 7-bit address */
1819 #define V4L2_CHIP_MATCH_AC97       3  /* Match against anciliary AC97 chip */
1820 
1821 __packed struct v4l2_dbg_match {
1822     __u32 type; /* Match type */
1823     union {     /* Match this chip, meaning determined by type */
1824         __u32 addr;
1825         char name[32];
1826     };
1827 };
1828 
1829 __packed struct v4l2_dbg_register {
1830     struct v4l2_dbg_match match;
1831     __u32 size; /* register size in bytes */
1832     __u64 reg;
1833     __u64 val;
1834 };
1835 
1836 /* VIDIOC_DBG_G_CHIP_IDENT */
1837 __packed struct v4l2_dbg_chip_ident {
1838     struct v4l2_dbg_match match;
1839     __u32 ident;       /* chip identifier as specified in <media/v4l2-chip-ident.h> */
1840     __u32 revision;    /* chip revision, chip specific */
1841 };
1842 
1843 /*
1844  *  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
1845  *
1846  */
1847 #define VIDIOC_QUERYCAP            1
1848 #define VIDIOC_RESERVED            2
1849 #define VIDIOC_ENUM_FMT            3
1850 #define VIDIOC_G_FMT               4
1851 #define VIDIOC_S_FMT               5
1852 #define VIDIOC_REQBUFS             6
1853 #define VIDIOC_QUERYBUF            7
1854 #define VIDIOC_G_FBUF              8
1855 #define VIDIOC_S_FBUF              9
1856 #define VIDIOC_OVERLAY             10
1857 #define VIDIOC_QBUF                11
1858 #define VIDIOC_DQBUF               12
1859 #define VIDIOC_STREAMON            13
1860 #define VIDIOC_STREAMOFF           14
1861 #define VIDIOC_G_PARM              15
1862 #define VIDIOC_S_PARM              16
1863 #define VIDIOC_G_STD               17
1864 #define VIDIOC_S_STD               18
1865 #define VIDIOC_ENUMSTD             19
1866 #define VIDIOC_ENUMINPUT           20
1867 #define VIDIOC_G_CTRL              21
1868 #define VIDIOC_S_CTRL              22
1869 #define VIDIOC_G_TUNER             23
1870 #define VIDIOC_S_TUNER             24
1871 #define VIDIOC_G_AUDIO             25
1872 #define VIDIOC_S_AUDIO             26
1873 #define VIDIOC_QUERYCTRL           27
1874 #define VIDIOC_QUERYMENU           28
1875 #define VIDIOC_G_INPUT             29
1876 #define VIDIOC_S_INPUT             30
1877 #define VIDIOC_G_OUTPUT            31
1878 #define VIDIOC_S_OUTPUT            32
1879 #define VIDIOC_ENUMOUTPUT          33
1880 #define VIDIOC_G_AUDOUT            34
1881 #define VIDIOC_S_AUDOUT            35
1882 #define VIDIOC_G_MODULATOR         36
1883 #define VIDIOC_S_MODULATOR         37
1884 #define VIDIOC_G_FREQUENCY         38
1885 #define VIDIOC_S_FREQUENCY         39
1886 #define VIDIOC_CROPCAP             40
1887 #define VIDIOC_G_CROP              41
1888 #define VIDIOC_S_CROP              42
1889 #define VIDIOC_G_JPEGCOMP          43
1890 #define VIDIOC_S_JPEGCOMP          44
1891 #define VIDIOC_QUERYSTD            45
1892 #define VIDIOC_TRY_FMT             46
1893 #define VIDIOC_ENUMAUDIO           47
1894 #define VIDIOC_ENUMAUDOUT          48
1895 #define VIDIOC_G_PRIORITY          49
1896 #define VIDIOC_S_PRIORITY          50
1897 #define VIDIOC_G_SLICED_VBI_CAP    51
1898 #define VIDIOC_LOG_STATUS          52
1899 #define VIDIOC_G_EXT_CTRLS         53
1900 #define VIDIOC_S_EXT_CTRLS         54
1901 #define VIDIOC_TRY_EXT_CTRLS       55
1902 #if 1
1903 #define VIDIOC_ENUM_FRAMESIZES     56
1904 #define VIDIOC_ENUM_FRAMEINTERVALS 57
1905 #define VIDIOC_G_ENC_INDEX         58
1906 #define VIDIOC_ENCODER_CMD         59
1907 #define VIDIOC_TRY_ENCODER_CMD     60
1908 #endif
1909 
1910 #if 1
1911 /* Experimental, meant for debugging, testing and internal use.
1912    Only implemented if CONFIG_VIDEO_ADV_DEBUG is defined.
1913    You must be root to use these ioctls. Never use these in applications! */
1914 #define VIDIOC_DBG_S_REGISTER      61
1915 #define VIDIOC_DBG_G_REGISTER      62
1916 
1917 /* Experimental, meant for debugging, testing and internal use.
1918    Never use this ioctl in applications! */
1919 #define VIDIOC_DBG_G_CHIP_IDENT    63
1920 #endif
1921 
1922 #define VIDIOC_S_HW_FREQ_SEEK      64
1923 #define VIDIOC_ENUM_DV_PRESETS     65
1924 #define VIDIOC_S_DV_PRESET         66
1925 #define VIDIOC_G_DV_PRESET         67
1926 #define VIDIOC_QUERY_DV_PRESET     68
1927 #define VIDIOC_S_DV_TIMINGS        69
1928 #define VIDIOC_G_DV_TIMINGS        70
1929 #define VIDIOC_DQEVENT             71
1930 #define VIDIOC_SUBSCRIBE_EVE       72
1931 #define VIDIOC_UNSUBSCRIBE_EVENT   73
1932 
1933 /* Reminder: when adding new ioctls please add support for them to
1934    drivers/media/video/v4l2-compat-ioctl32.c as well! */
1935 
1936 #define BASE_VIDIOC_PRIVATE 192     /* 192-255 are private */
1937 
1938 
1939 
1940 
1941 
1942 
1943 #endif
1944 
1945