1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57#ifndef _UAPI__LINUX_VIDEODEV2_H
58#define _UAPI__LINUX_VIDEODEV2_H
59
60#ifndef __KERNEL__
61#include <sys/time.h>
62#endif
63#include <linux/compiler.h>
64#include <linux/ioctl.h>
65#include <linux/types.h>
66#include <linux/v4l2-common.h>
67#include <linux/v4l2-controls.h>
68
69
70
71
72
73#define VIDEO_MAX_FRAME 32
74#define VIDEO_MAX_PLANES 8
75
76
77
78
79
80
81#define v4l2_fourcc(a, b, c, d)\
82 ((__u32)(a) | ((__u32)(b) << 8) | ((__u32)(c) << 16) | ((__u32)(d) << 24))
83#define v4l2_fourcc_be(a, b, c, d) (v4l2_fourcc(a, b, c, d) | (1U << 31))
84
85
86
87
88enum v4l2_field {
89 V4L2_FIELD_ANY = 0,
90
91
92
93 V4L2_FIELD_NONE = 1,
94 V4L2_FIELD_TOP = 2,
95 V4L2_FIELD_BOTTOM = 3,
96 V4L2_FIELD_INTERLACED = 4,
97 V4L2_FIELD_SEQ_TB = 5,
98
99 V4L2_FIELD_SEQ_BT = 6,
100 V4L2_FIELD_ALTERNATE = 7,
101
102 V4L2_FIELD_INTERLACED_TB = 8,
103
104
105 V4L2_FIELD_INTERLACED_BT = 9,
106
107
108};
109#define V4L2_FIELD_HAS_TOP(field) \
110 ((field) == V4L2_FIELD_TOP ||\
111 (field) == V4L2_FIELD_INTERLACED ||\
112 (field) == V4L2_FIELD_INTERLACED_TB ||\
113 (field) == V4L2_FIELD_INTERLACED_BT ||\
114 (field) == V4L2_FIELD_SEQ_TB ||\
115 (field) == V4L2_FIELD_SEQ_BT)
116#define V4L2_FIELD_HAS_BOTTOM(field) \
117 ((field) == V4L2_FIELD_BOTTOM ||\
118 (field) == V4L2_FIELD_INTERLACED ||\
119 (field) == V4L2_FIELD_INTERLACED_TB ||\
120 (field) == V4L2_FIELD_INTERLACED_BT ||\
121 (field) == V4L2_FIELD_SEQ_TB ||\
122 (field) == V4L2_FIELD_SEQ_BT)
123#define V4L2_FIELD_HAS_BOTH(field) \
124 ((field) == V4L2_FIELD_INTERLACED ||\
125 (field) == V4L2_FIELD_INTERLACED_TB ||\
126 (field) == V4L2_FIELD_INTERLACED_BT ||\
127 (field) == V4L2_FIELD_SEQ_TB ||\
128 (field) == V4L2_FIELD_SEQ_BT)
129#define V4L2_FIELD_HAS_T_OR_B(field) \
130 ((field) == V4L2_FIELD_BOTTOM ||\
131 (field) == V4L2_FIELD_TOP ||\
132 (field) == V4L2_FIELD_ALTERNATE)
133#define V4L2_FIELD_IS_INTERLACED(field) \
134 ((field) == V4L2_FIELD_INTERLACED ||\
135 (field) == V4L2_FIELD_INTERLACED_TB ||\
136 (field) == V4L2_FIELD_INTERLACED_BT)
137#define V4L2_FIELD_IS_SEQUENTIAL(field) \
138 ((field) == V4L2_FIELD_SEQ_TB ||\
139 (field) == V4L2_FIELD_SEQ_BT)
140
141enum v4l2_buf_type {
142 V4L2_BUF_TYPE_VIDEO_CAPTURE = 1,
143 V4L2_BUF_TYPE_VIDEO_OUTPUT = 2,
144 V4L2_BUF_TYPE_VIDEO_OVERLAY = 3,
145 V4L2_BUF_TYPE_VBI_CAPTURE = 4,
146 V4L2_BUF_TYPE_VBI_OUTPUT = 5,
147 V4L2_BUF_TYPE_SLICED_VBI_CAPTURE = 6,
148 V4L2_BUF_TYPE_SLICED_VBI_OUTPUT = 7,
149 V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY = 8,
150 V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE = 9,
151 V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE = 10,
152 V4L2_BUF_TYPE_SDR_CAPTURE = 11,
153 V4L2_BUF_TYPE_SDR_OUTPUT = 12,
154 V4L2_BUF_TYPE_META_CAPTURE = 13,
155 V4L2_BUF_TYPE_META_OUTPUT = 14,
156
157 V4L2_BUF_TYPE_PRIVATE = 0x80,
158};
159
160#define V4L2_TYPE_IS_MULTIPLANAR(type) \
161 ((type) == V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE \
162 || (type) == V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE)
163
164#define V4L2_TYPE_IS_OUTPUT(type) \
165 ((type) == V4L2_BUF_TYPE_VIDEO_OUTPUT \
166 || (type) == V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE \
167 || (type) == V4L2_BUF_TYPE_VIDEO_OVERLAY \
168 || (type) == V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY \
169 || (type) == V4L2_BUF_TYPE_VBI_OUTPUT \
170 || (type) == V4L2_BUF_TYPE_SLICED_VBI_OUTPUT \
171 || (type) == V4L2_BUF_TYPE_SDR_OUTPUT \
172 || (type) == V4L2_BUF_TYPE_META_OUTPUT)
173
174enum v4l2_tuner_type {
175 V4L2_TUNER_RADIO = 1,
176 V4L2_TUNER_ANALOG_TV = 2,
177 V4L2_TUNER_DIGITAL_TV = 3,
178 V4L2_TUNER_SDR = 4,
179 V4L2_TUNER_RF = 5,
180};
181
182
183#define V4L2_TUNER_ADC V4L2_TUNER_SDR
184
185enum v4l2_memory {
186 V4L2_MEMORY_MMAP = 1,
187 V4L2_MEMORY_USERPTR = 2,
188 V4L2_MEMORY_OVERLAY = 3,
189 V4L2_MEMORY_DMABUF = 4,
190};
191
192
193enum v4l2_colorspace {
194
195
196
197
198 V4L2_COLORSPACE_DEFAULT = 0,
199
200
201 V4L2_COLORSPACE_SMPTE170M = 1,
202
203
204 V4L2_COLORSPACE_SMPTE240M = 2,
205
206
207 V4L2_COLORSPACE_REC709 = 3,
208
209
210
211
212
213 V4L2_COLORSPACE_BT878 = 4,
214
215
216
217
218
219 V4L2_COLORSPACE_470_SYSTEM_M = 5,
220
221
222
223
224
225
226 V4L2_COLORSPACE_470_SYSTEM_BG = 6,
227
228
229
230
231
232 V4L2_COLORSPACE_JPEG = 7,
233
234
235 V4L2_COLORSPACE_SRGB = 8,
236
237
238 V4L2_COLORSPACE_OPRGB = 9,
239
240
241 V4L2_COLORSPACE_BT2020 = 10,
242
243
244 V4L2_COLORSPACE_RAW = 11,
245
246
247 V4L2_COLORSPACE_DCI_P3 = 12,
248};
249
250
251
252
253
254
255#define V4L2_MAP_COLORSPACE_DEFAULT(is_sdtv, is_hdtv) \
256 ((is_sdtv) ? V4L2_COLORSPACE_SMPTE170M : \
257 ((is_hdtv) ? V4L2_COLORSPACE_REC709 : V4L2_COLORSPACE_SRGB))
258
259enum v4l2_xfer_func {
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278 V4L2_XFER_FUNC_DEFAULT = 0,
279 V4L2_XFER_FUNC_709 = 1,
280 V4L2_XFER_FUNC_SRGB = 2,
281 V4L2_XFER_FUNC_OPRGB = 3,
282 V4L2_XFER_FUNC_SMPTE240M = 4,
283 V4L2_XFER_FUNC_NONE = 5,
284 V4L2_XFER_FUNC_DCI_P3 = 6,
285 V4L2_XFER_FUNC_SMPTE2084 = 7,
286};
287
288
289
290
291
292#define V4L2_MAP_XFER_FUNC_DEFAULT(colsp) \
293 ((colsp) == V4L2_COLORSPACE_OPRGB ? V4L2_XFER_FUNC_OPRGB : \
294 ((colsp) == V4L2_COLORSPACE_SMPTE240M ? V4L2_XFER_FUNC_SMPTE240M : \
295 ((colsp) == V4L2_COLORSPACE_DCI_P3 ? V4L2_XFER_FUNC_DCI_P3 : \
296 ((colsp) == V4L2_COLORSPACE_RAW ? V4L2_XFER_FUNC_NONE : \
297 ((colsp) == V4L2_COLORSPACE_SRGB || (colsp) == V4L2_COLORSPACE_JPEG ? \
298 V4L2_XFER_FUNC_SRGB : V4L2_XFER_FUNC_709)))))
299
300enum v4l2_ycbcr_encoding {
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315 V4L2_YCBCR_ENC_DEFAULT = 0,
316
317
318 V4L2_YCBCR_ENC_601 = 1,
319
320
321 V4L2_YCBCR_ENC_709 = 2,
322
323
324 V4L2_YCBCR_ENC_XV601 = 3,
325
326
327 V4L2_YCBCR_ENC_XV709 = 4,
328
329#ifndef __KERNEL__
330
331
332
333
334
335 V4L2_YCBCR_ENC_SYCC = 5,
336#endif
337
338
339 V4L2_YCBCR_ENC_BT2020 = 6,
340
341
342 V4L2_YCBCR_ENC_BT2020_CONST_LUM = 7,
343
344
345 V4L2_YCBCR_ENC_SMPTE240M = 8,
346};
347
348
349
350
351
352enum v4l2_hsv_encoding {
353
354
355 V4L2_HSV_ENC_180 = 128,
356
357
358 V4L2_HSV_ENC_256 = 129,
359};
360
361
362
363
364
365#define V4L2_MAP_YCBCR_ENC_DEFAULT(colsp) \
366 (((colsp) == V4L2_COLORSPACE_REC709 || \
367 (colsp) == V4L2_COLORSPACE_DCI_P3) ? V4L2_YCBCR_ENC_709 : \
368 ((colsp) == V4L2_COLORSPACE_BT2020 ? V4L2_YCBCR_ENC_BT2020 : \
369 ((colsp) == V4L2_COLORSPACE_SMPTE240M ? V4L2_YCBCR_ENC_SMPTE240M : \
370 V4L2_YCBCR_ENC_601)))
371
372enum v4l2_quantization {
373
374
375
376
377
378 V4L2_QUANTIZATION_DEFAULT = 0,
379 V4L2_QUANTIZATION_FULL_RANGE = 1,
380 V4L2_QUANTIZATION_LIM_RANGE = 2,
381};
382
383
384
385
386
387
388#define V4L2_MAP_QUANTIZATION_DEFAULT(is_rgb_or_hsv, colsp, ycbcr_enc) \
389 (((is_rgb_or_hsv) && (colsp) == V4L2_COLORSPACE_BT2020) ? \
390 V4L2_QUANTIZATION_LIM_RANGE : \
391 (((is_rgb_or_hsv) || (colsp) == V4L2_COLORSPACE_JPEG) ? \
392 V4L2_QUANTIZATION_FULL_RANGE : V4L2_QUANTIZATION_LIM_RANGE))
393
394
395
396
397
398
399
400#ifndef __KERNEL__
401#define V4L2_COLORSPACE_ADOBERGB V4L2_COLORSPACE_OPRGB
402#define V4L2_XFER_FUNC_ADOBERGB V4L2_XFER_FUNC_OPRGB
403#endif
404
405enum v4l2_priority {
406 V4L2_PRIORITY_UNSET = 0,
407 V4L2_PRIORITY_BACKGROUND = 1,
408 V4L2_PRIORITY_INTERACTIVE = 2,
409 V4L2_PRIORITY_RECORD = 3,
410 V4L2_PRIORITY_DEFAULT = V4L2_PRIORITY_INTERACTIVE,
411};
412
413struct v4l2_rect {
414 __s32 left;
415 __s32 top;
416 __u32 width;
417 __u32 height;
418};
419
420struct v4l2_fract {
421 __u32 numerator;
422 __u32 denominator;
423};
424
425
426
427
428
429
430
431
432
433
434
435
436struct v4l2_capability {
437 __u8 driver[16];
438 __u8 card[32];
439 __u8 bus_info[32];
440 __u32 version;
441 __u32 capabilities;
442 __u32 device_caps;
443 __u32 reserved[3];
444};
445
446
447#define V4L2_CAP_VIDEO_CAPTURE 0x00000001
448#define V4L2_CAP_VIDEO_OUTPUT 0x00000002
449#define V4L2_CAP_VIDEO_OVERLAY 0x00000004
450#define V4L2_CAP_VBI_CAPTURE 0x00000010
451#define V4L2_CAP_VBI_OUTPUT 0x00000020
452#define V4L2_CAP_SLICED_VBI_CAPTURE 0x00000040
453#define V4L2_CAP_SLICED_VBI_OUTPUT 0x00000080
454#define V4L2_CAP_RDS_CAPTURE 0x00000100
455#define V4L2_CAP_VIDEO_OUTPUT_OVERLAY 0x00000200
456#define V4L2_CAP_HW_FREQ_SEEK 0x00000400
457#define V4L2_CAP_RDS_OUTPUT 0x00000800
458
459
460#define V4L2_CAP_VIDEO_CAPTURE_MPLANE 0x00001000
461
462#define V4L2_CAP_VIDEO_OUTPUT_MPLANE 0x00002000
463
464#define V4L2_CAP_VIDEO_M2M_MPLANE 0x00004000
465
466#define V4L2_CAP_VIDEO_M2M 0x00008000
467
468#define V4L2_CAP_TUNER 0x00010000
469#define V4L2_CAP_AUDIO 0x00020000
470#define V4L2_CAP_RADIO 0x00040000
471#define V4L2_CAP_MODULATOR 0x00080000
472
473#define V4L2_CAP_SDR_CAPTURE 0x00100000
474#define V4L2_CAP_EXT_PIX_FORMAT 0x00200000
475#define V4L2_CAP_SDR_OUTPUT 0x00400000
476#define V4L2_CAP_META_CAPTURE 0x00800000
477
478#define V4L2_CAP_READWRITE 0x01000000
479#define V4L2_CAP_ASYNCIO 0x02000000
480#define V4L2_CAP_STREAMING 0x04000000
481#define V4L2_CAP_META_OUTPUT 0x08000000
482
483#define V4L2_CAP_TOUCH 0x10000000
484
485#define V4L2_CAP_DEVICE_CAPS 0x80000000
486
487
488
489
490struct v4l2_pix_format {
491 __u32 width;
492 __u32 height;
493 __u32 pixelformat;
494 __u32 field;
495 __u32 bytesperline;
496 __u32 sizeimage;
497 __u32 colorspace;
498 __u32 priv;
499 __u32 flags;
500 union {
501
502 __u32 ycbcr_enc;
503
504 __u32 hsv_enc;
505 };
506 __u32 quantization;
507 __u32 xfer_func;
508};
509
510
511
512
513#define V4L2_PIX_FMT_RGB332 v4l2_fourcc('R', 'G', 'B', '1')
514#define V4L2_PIX_FMT_RGB444 v4l2_fourcc('R', '4', '4', '4')
515#define V4L2_PIX_FMT_ARGB444 v4l2_fourcc('A', 'R', '1', '2')
516#define V4L2_PIX_FMT_XRGB444 v4l2_fourcc('X', 'R', '1', '2')
517#define V4L2_PIX_FMT_RGBA444 v4l2_fourcc('R', 'A', '1', '2')
518#define V4L2_PIX_FMT_RGBX444 v4l2_fourcc('R', 'X', '1', '2')
519#define V4L2_PIX_FMT_ABGR444 v4l2_fourcc('A', 'B', '1', '2')
520#define V4L2_PIX_FMT_XBGR444 v4l2_fourcc('X', 'B', '1', '2')
521
522
523
524
525
526
527#define V4L2_PIX_FMT_BGRA444 v4l2_fourcc('G', 'A', '1', '2')
528#define V4L2_PIX_FMT_BGRX444 v4l2_fourcc('B', 'X', '1', '2')
529#define V4L2_PIX_FMT_RGB555 v4l2_fourcc('R', 'G', 'B', 'O')
530#define V4L2_PIX_FMT_ARGB555 v4l2_fourcc('A', 'R', '1', '5')
531#define V4L2_PIX_FMT_XRGB555 v4l2_fourcc('X', 'R', '1', '5')
532#define V4L2_PIX_FMT_RGBA555 v4l2_fourcc('R', 'A', '1', '5')
533#define V4L2_PIX_FMT_RGBX555 v4l2_fourcc('R', 'X', '1', '5')
534#define V4L2_PIX_FMT_ABGR555 v4l2_fourcc('A', 'B', '1', '5')
535#define V4L2_PIX_FMT_XBGR555 v4l2_fourcc('X', 'B', '1', '5')
536#define V4L2_PIX_FMT_BGRA555 v4l2_fourcc('B', 'A', '1', '5')
537#define V4L2_PIX_FMT_BGRX555 v4l2_fourcc('B', 'X', '1', '5')
538#define V4L2_PIX_FMT_RGB565 v4l2_fourcc('R', 'G', 'B', 'P')
539#define V4L2_PIX_FMT_RGB555X v4l2_fourcc('R', 'G', 'B', 'Q')
540#define V4L2_PIX_FMT_ARGB555X v4l2_fourcc_be('A', 'R', '1', '5')
541#define V4L2_PIX_FMT_XRGB555X v4l2_fourcc_be('X', 'R', '1', '5')
542#define V4L2_PIX_FMT_RGB565X v4l2_fourcc('R', 'G', 'B', 'R')
543#define V4L2_PIX_FMT_BGR666 v4l2_fourcc('B', 'G', 'R', 'H')
544#define V4L2_PIX_FMT_BGR24 v4l2_fourcc('B', 'G', 'R', '3')
545#define V4L2_PIX_FMT_RGB24 v4l2_fourcc('R', 'G', 'B', '3')
546#define V4L2_PIX_FMT_BGR32 v4l2_fourcc('B', 'G', 'R', '4')
547#define V4L2_PIX_FMT_ABGR32 v4l2_fourcc('A', 'R', '2', '4')
548#define V4L2_PIX_FMT_XBGR32 v4l2_fourcc('X', 'R', '2', '4')
549#define V4L2_PIX_FMT_BGRA32 v4l2_fourcc('R', 'A', '2', '4')
550#define V4L2_PIX_FMT_BGRX32 v4l2_fourcc('R', 'X', '2', '4')
551#define V4L2_PIX_FMT_RGB32 v4l2_fourcc('R', 'G', 'B', '4')
552#define V4L2_PIX_FMT_RGBA32 v4l2_fourcc('A', 'B', '2', '4')
553#define V4L2_PIX_FMT_RGBX32 v4l2_fourcc('X', 'B', '2', '4')
554#define V4L2_PIX_FMT_ARGB32 v4l2_fourcc('B', 'A', '2', '4')
555#define V4L2_PIX_FMT_XRGB32 v4l2_fourcc('B', 'X', '2', '4')
556
557
558#define V4L2_PIX_FMT_GREY v4l2_fourcc('G', 'R', 'E', 'Y')
559#define V4L2_PIX_FMT_Y4 v4l2_fourcc('Y', '0', '4', ' ')
560#define V4L2_PIX_FMT_Y6 v4l2_fourcc('Y', '0', '6', ' ')
561#define V4L2_PIX_FMT_Y10 v4l2_fourcc('Y', '1', '0', ' ')
562#define V4L2_PIX_FMT_Y12 v4l2_fourcc('Y', '1', '2', ' ')
563#define V4L2_PIX_FMT_Y16 v4l2_fourcc('Y', '1', '6', ' ')
564#define V4L2_PIX_FMT_Y16_BE v4l2_fourcc_be('Y', '1', '6', ' ')
565
566
567#define V4L2_PIX_FMT_Y10BPACK v4l2_fourcc('Y', '1', '0', 'B')
568#define V4L2_PIX_FMT_Y10P v4l2_fourcc('Y', '1', '0', 'P')
569
570
571#define V4L2_PIX_FMT_PAL8 v4l2_fourcc('P', 'A', 'L', '8')
572
573
574#define V4L2_PIX_FMT_UV8 v4l2_fourcc('U', 'V', '8', ' ')
575
576
577#define V4L2_PIX_FMT_YUYV v4l2_fourcc('Y', 'U', 'Y', 'V')
578#define V4L2_PIX_FMT_YYUV v4l2_fourcc('Y', 'Y', 'U', 'V')
579#define V4L2_PIX_FMT_YVYU v4l2_fourcc('Y', 'V', 'Y', 'U')
580#define V4L2_PIX_FMT_UYVY v4l2_fourcc('U', 'Y', 'V', 'Y')
581#define V4L2_PIX_FMT_VYUY v4l2_fourcc('V', 'Y', 'U', 'Y')
582#define V4L2_PIX_FMT_Y41P v4l2_fourcc('Y', '4', '1', 'P')
583#define V4L2_PIX_FMT_YUV444 v4l2_fourcc('Y', '4', '4', '4')
584#define V4L2_PIX_FMT_YUV555 v4l2_fourcc('Y', 'U', 'V', 'O')
585#define V4L2_PIX_FMT_YUV565 v4l2_fourcc('Y', 'U', 'V', 'P')
586#define V4L2_PIX_FMT_YUV32 v4l2_fourcc('Y', 'U', 'V', '4')
587#define V4L2_PIX_FMT_AYUV32 v4l2_fourcc('A', 'Y', 'U', 'V')
588#define V4L2_PIX_FMT_XYUV32 v4l2_fourcc('X', 'Y', 'U', 'V')
589#define V4L2_PIX_FMT_VUYA32 v4l2_fourcc('V', 'U', 'Y', 'A')
590#define V4L2_PIX_FMT_VUYX32 v4l2_fourcc('V', 'U', 'Y', 'X')
591#define V4L2_PIX_FMT_HI240 v4l2_fourcc('H', 'I', '2', '4')
592#define V4L2_PIX_FMT_HM12 v4l2_fourcc('H', 'M', '1', '2')
593#define V4L2_PIX_FMT_M420 v4l2_fourcc('M', '4', '2', '0')
594
595
596#define V4L2_PIX_FMT_NV12 v4l2_fourcc('N', 'V', '1', '2')
597#define V4L2_PIX_FMT_NV21 v4l2_fourcc('N', 'V', '2', '1')
598#define V4L2_PIX_FMT_NV16 v4l2_fourcc('N', 'V', '1', '6')
599#define V4L2_PIX_FMT_NV61 v4l2_fourcc('N', 'V', '6', '1')
600#define V4L2_PIX_FMT_NV24 v4l2_fourcc('N', 'V', '2', '4')
601#define V4L2_PIX_FMT_NV42 v4l2_fourcc('N', 'V', '4', '2')
602
603
604#define V4L2_PIX_FMT_NV12M v4l2_fourcc('N', 'M', '1', '2')
605#define V4L2_PIX_FMT_NV21M v4l2_fourcc('N', 'M', '2', '1')
606#define V4L2_PIX_FMT_NV16M v4l2_fourcc('N', 'M', '1', '6')
607#define V4L2_PIX_FMT_NV61M v4l2_fourcc('N', 'M', '6', '1')
608#define V4L2_PIX_FMT_NV12MT v4l2_fourcc('T', 'M', '1', '2')
609#define V4L2_PIX_FMT_NV12MT_16X16 v4l2_fourcc('V', 'M', '1', '2')
610
611
612#define V4L2_PIX_FMT_YUV410 v4l2_fourcc('Y', 'U', 'V', '9')
613#define V4L2_PIX_FMT_YVU410 v4l2_fourcc('Y', 'V', 'U', '9')
614#define V4L2_PIX_FMT_YUV411P v4l2_fourcc('4', '1', '1', 'P')
615#define V4L2_PIX_FMT_YUV420 v4l2_fourcc('Y', 'U', '1', '2')
616#define V4L2_PIX_FMT_YVU420 v4l2_fourcc('Y', 'V', '1', '2')
617#define V4L2_PIX_FMT_YUV422P v4l2_fourcc('4', '2', '2', 'P')
618
619
620#define V4L2_PIX_FMT_YUV420M v4l2_fourcc('Y', 'M', '1', '2')
621#define V4L2_PIX_FMT_YVU420M v4l2_fourcc('Y', 'M', '2', '1')
622#define V4L2_PIX_FMT_YUV422M v4l2_fourcc('Y', 'M', '1', '6')
623#define V4L2_PIX_FMT_YVU422M v4l2_fourcc('Y', 'M', '6', '1')
624#define V4L2_PIX_FMT_YUV444M v4l2_fourcc('Y', 'M', '2', '4')
625#define V4L2_PIX_FMT_YVU444M v4l2_fourcc('Y', 'M', '4', '2')
626
627
628#define V4L2_PIX_FMT_SBGGR8 v4l2_fourcc('B', 'A', '8', '1')
629#define V4L2_PIX_FMT_SGBRG8 v4l2_fourcc('G', 'B', 'R', 'G')
630#define V4L2_PIX_FMT_SGRBG8 v4l2_fourcc('G', 'R', 'B', 'G')
631#define V4L2_PIX_FMT_SRGGB8 v4l2_fourcc('R', 'G', 'G', 'B')
632#define V4L2_PIX_FMT_SBGGR10 v4l2_fourcc('B', 'G', '1', '0')
633#define V4L2_PIX_FMT_SGBRG10 v4l2_fourcc('G', 'B', '1', '0')
634#define V4L2_PIX_FMT_SGRBG10 v4l2_fourcc('B', 'A', '1', '0')
635#define V4L2_PIX_FMT_SRGGB10 v4l2_fourcc('R', 'G', '1', '0')
636
637#define V4L2_PIX_FMT_SBGGR10P v4l2_fourcc('p', 'B', 'A', 'A')
638#define V4L2_PIX_FMT_SGBRG10P v4l2_fourcc('p', 'G', 'A', 'A')
639#define V4L2_PIX_FMT_SGRBG10P v4l2_fourcc('p', 'g', 'A', 'A')
640#define V4L2_PIX_FMT_SRGGB10P v4l2_fourcc('p', 'R', 'A', 'A')
641
642#define V4L2_PIX_FMT_SBGGR10ALAW8 v4l2_fourcc('a', 'B', 'A', '8')
643#define V4L2_PIX_FMT_SGBRG10ALAW8 v4l2_fourcc('a', 'G', 'A', '8')
644#define V4L2_PIX_FMT_SGRBG10ALAW8 v4l2_fourcc('a', 'g', 'A', '8')
645#define V4L2_PIX_FMT_SRGGB10ALAW8 v4l2_fourcc('a', 'R', 'A', '8')
646
647#define V4L2_PIX_FMT_SBGGR10DPCM8 v4l2_fourcc('b', 'B', 'A', '8')
648#define V4L2_PIX_FMT_SGBRG10DPCM8 v4l2_fourcc('b', 'G', 'A', '8')
649#define V4L2_PIX_FMT_SGRBG10DPCM8 v4l2_fourcc('B', 'D', '1', '0')
650#define V4L2_PIX_FMT_SRGGB10DPCM8 v4l2_fourcc('b', 'R', 'A', '8')
651#define V4L2_PIX_FMT_SBGGR12 v4l2_fourcc('B', 'G', '1', '2')
652#define V4L2_PIX_FMT_SGBRG12 v4l2_fourcc('G', 'B', '1', '2')
653#define V4L2_PIX_FMT_SGRBG12 v4l2_fourcc('B', 'A', '1', '2')
654#define V4L2_PIX_FMT_SRGGB12 v4l2_fourcc('R', 'G', '1', '2')
655
656#define V4L2_PIX_FMT_SBGGR12P v4l2_fourcc('p', 'B', 'C', 'C')
657#define V4L2_PIX_FMT_SGBRG12P v4l2_fourcc('p', 'G', 'C', 'C')
658#define V4L2_PIX_FMT_SGRBG12P v4l2_fourcc('p', 'g', 'C', 'C')
659#define V4L2_PIX_FMT_SRGGB12P v4l2_fourcc('p', 'R', 'C', 'C')
660
661#define V4L2_PIX_FMT_SBGGR14P v4l2_fourcc('p', 'B', 'E', 'E')
662#define V4L2_PIX_FMT_SGBRG14P v4l2_fourcc('p', 'G', 'E', 'E')
663#define V4L2_PIX_FMT_SGRBG14P v4l2_fourcc('p', 'g', 'E', 'E')
664#define V4L2_PIX_FMT_SRGGB14P v4l2_fourcc('p', 'R', 'E', 'E')
665#define V4L2_PIX_FMT_SBGGR16 v4l2_fourcc('B', 'Y', 'R', '2')
666#define V4L2_PIX_FMT_SGBRG16 v4l2_fourcc('G', 'B', '1', '6')
667#define V4L2_PIX_FMT_SGRBG16 v4l2_fourcc('G', 'R', '1', '6')
668#define V4L2_PIX_FMT_SRGGB16 v4l2_fourcc('R', 'G', '1', '6')
669
670
671#define V4L2_PIX_FMT_HSV24 v4l2_fourcc('H', 'S', 'V', '3')
672#define V4L2_PIX_FMT_HSV32 v4l2_fourcc('H', 'S', 'V', '4')
673
674
675#define V4L2_PIX_FMT_MJPEG v4l2_fourcc('M', 'J', 'P', 'G')
676#define V4L2_PIX_FMT_JPEG v4l2_fourcc('J', 'P', 'E', 'G')
677#define V4L2_PIX_FMT_DV v4l2_fourcc('d', 'v', 's', 'd')
678#define V4L2_PIX_FMT_MPEG v4l2_fourcc('M', 'P', 'E', 'G')
679#define V4L2_PIX_FMT_H264 v4l2_fourcc('H', '2', '6', '4')
680#define V4L2_PIX_FMT_H264_NO_SC v4l2_fourcc('A', 'V', 'C', '1')
681#define V4L2_PIX_FMT_H264_MVC v4l2_fourcc('M', '2', '6', '4')
682#define V4L2_PIX_FMT_H263 v4l2_fourcc('H', '2', '6', '3')
683#define V4L2_PIX_FMT_MPEG1 v4l2_fourcc('M', 'P', 'G', '1')
684#define V4L2_PIX_FMT_MPEG2 v4l2_fourcc('M', 'P', 'G', '2')
685#define V4L2_PIX_FMT_MPEG2_SLICE v4l2_fourcc('M', 'G', '2', 'S')
686#define V4L2_PIX_FMT_MPEG4 v4l2_fourcc('M', 'P', 'G', '4')
687#define V4L2_PIX_FMT_XVID v4l2_fourcc('X', 'V', 'I', 'D')
688#define V4L2_PIX_FMT_VC1_ANNEX_G v4l2_fourcc('V', 'C', '1', 'G')
689#define V4L2_PIX_FMT_VC1_ANNEX_L v4l2_fourcc('V', 'C', '1', 'L')
690#define V4L2_PIX_FMT_VP8 v4l2_fourcc('V', 'P', '8', '0')
691#define V4L2_PIX_FMT_VP9 v4l2_fourcc('V', 'P', '9', '0')
692#define V4L2_PIX_FMT_HEVC v4l2_fourcc('H', 'E', 'V', 'C')
693#define V4L2_PIX_FMT_FWHT v4l2_fourcc('F', 'W', 'H', 'T')
694#define V4L2_PIX_FMT_FWHT_STATELESS v4l2_fourcc('S', 'F', 'W', 'H')
695
696
697#define V4L2_PIX_FMT_CPIA1 v4l2_fourcc('C', 'P', 'I', 'A')
698#define V4L2_PIX_FMT_WNVA v4l2_fourcc('W', 'N', 'V', 'A')
699#define V4L2_PIX_FMT_SN9C10X v4l2_fourcc('S', '9', '1', '0')
700#define V4L2_PIX_FMT_SN9C20X_I420 v4l2_fourcc('S', '9', '2', '0')
701#define V4L2_PIX_FMT_PWC1 v4l2_fourcc('P', 'W', 'C', '1')
702#define V4L2_PIX_FMT_PWC2 v4l2_fourcc('P', 'W', 'C', '2')
703#define V4L2_PIX_FMT_ET61X251 v4l2_fourcc('E', '6', '2', '5')
704#define V4L2_PIX_FMT_SPCA501 v4l2_fourcc('S', '5', '0', '1')
705#define V4L2_PIX_FMT_SPCA505 v4l2_fourcc('S', '5', '0', '5')
706#define V4L2_PIX_FMT_SPCA508 v4l2_fourcc('S', '5', '0', '8')
707#define V4L2_PIX_FMT_SPCA561 v4l2_fourcc('S', '5', '6', '1')
708#define V4L2_PIX_FMT_PAC207 v4l2_fourcc('P', '2', '0', '7')
709#define V4L2_PIX_FMT_MR97310A v4l2_fourcc('M', '3', '1', '0')
710#define V4L2_PIX_FMT_JL2005BCD v4l2_fourcc('J', 'L', '2', '0')
711#define V4L2_PIX_FMT_SN9C2028 v4l2_fourcc('S', 'O', 'N', 'X')
712#define V4L2_PIX_FMT_SQ905C v4l2_fourcc('9', '0', '5', 'C')
713#define V4L2_PIX_FMT_PJPG v4l2_fourcc('P', 'J', 'P', 'G')
714#define V4L2_PIX_FMT_OV511 v4l2_fourcc('O', '5', '1', '1')
715#define V4L2_PIX_FMT_OV518 v4l2_fourcc('O', '5', '1', '8')
716#define V4L2_PIX_FMT_STV0680 v4l2_fourcc('S', '6', '8', '0')
717#define V4L2_PIX_FMT_TM6000 v4l2_fourcc('T', 'M', '6', '0')
718#define V4L2_PIX_FMT_CIT_YYVYUY v4l2_fourcc('C', 'I', 'T', 'V')
719#define V4L2_PIX_FMT_KONICA420 v4l2_fourcc('K', 'O', 'N', 'I')
720#define V4L2_PIX_FMT_JPGL v4l2_fourcc('J', 'P', 'G', 'L')
721#define V4L2_PIX_FMT_SE401 v4l2_fourcc('S', '4', '0', '1')
722#define V4L2_PIX_FMT_S5C_UYVY_JPG v4l2_fourcc('S', '5', 'C', 'I')
723#define V4L2_PIX_FMT_Y8I v4l2_fourcc('Y', '8', 'I', ' ')
724#define V4L2_PIX_FMT_Y12I v4l2_fourcc('Y', '1', '2', 'I')
725#define V4L2_PIX_FMT_Z16 v4l2_fourcc('Z', '1', '6', ' ')
726#define V4L2_PIX_FMT_MT21C v4l2_fourcc('M', 'T', '2', '1')
727#define V4L2_PIX_FMT_INZI v4l2_fourcc('I', 'N', 'Z', 'I')
728#define V4L2_PIX_FMT_SUNXI_TILED_NV12 v4l2_fourcc('S', 'T', '1', '2')
729#define V4L2_PIX_FMT_CNF4 v4l2_fourcc('C', 'N', 'F', '4')
730
731
732#define V4L2_PIX_FMT_IPU3_SBGGR10 v4l2_fourcc('i', 'p', '3', 'b')
733#define V4L2_PIX_FMT_IPU3_SGBRG10 v4l2_fourcc('i', 'p', '3', 'g')
734#define V4L2_PIX_FMT_IPU3_SGRBG10 v4l2_fourcc('i', 'p', '3', 'G')
735#define V4L2_PIX_FMT_IPU3_SRGGB10 v4l2_fourcc('i', 'p', '3', 'r')
736
737
738#define V4L2_SDR_FMT_CU8 v4l2_fourcc('C', 'U', '0', '8')
739#define V4L2_SDR_FMT_CU16LE v4l2_fourcc('C', 'U', '1', '6')
740#define V4L2_SDR_FMT_CS8 v4l2_fourcc('C', 'S', '0', '8')
741#define V4L2_SDR_FMT_CS14LE v4l2_fourcc('C', 'S', '1', '4')
742#define V4L2_SDR_FMT_RU12LE v4l2_fourcc('R', 'U', '1', '2')
743#define V4L2_SDR_FMT_PCU16BE v4l2_fourcc('P', 'C', '1', '6')
744#define V4L2_SDR_FMT_PCU18BE v4l2_fourcc('P', 'C', '1', '8')
745#define V4L2_SDR_FMT_PCU20BE v4l2_fourcc('P', 'C', '2', '0')
746
747
748#define V4L2_TCH_FMT_DELTA_TD16 v4l2_fourcc('T', 'D', '1', '6')
749#define V4L2_TCH_FMT_DELTA_TD08 v4l2_fourcc('T', 'D', '0', '8')
750#define V4L2_TCH_FMT_TU16 v4l2_fourcc('T', 'U', '1', '6')
751#define V4L2_TCH_FMT_TU08 v4l2_fourcc('T', 'U', '0', '8')
752
753
754#define V4L2_META_FMT_VSP1_HGO v4l2_fourcc('V', 'S', 'P', 'H')
755#define V4L2_META_FMT_VSP1_HGT v4l2_fourcc('V', 'S', 'P', 'T')
756#define V4L2_META_FMT_UVC v4l2_fourcc('U', 'V', 'C', 'H')
757#define V4L2_META_FMT_D4XX v4l2_fourcc('D', '4', 'X', 'X')
758
759
760#define V4L2_PIX_FMT_PRIV_MAGIC 0xfeedcafe
761
762
763#define V4L2_PIX_FMT_FLAG_PREMUL_ALPHA 0x00000001
764
765
766
767
768struct v4l2_fmtdesc {
769 __u32 index;
770 __u32 type;
771 __u32 flags;
772 __u8 description[32];
773 __u32 pixelformat;
774 __u32 reserved[4];
775};
776
777#define V4L2_FMT_FLAG_COMPRESSED 0x0001
778#define V4L2_FMT_FLAG_EMULATED 0x0002
779
780
781
782
783
784enum v4l2_frmsizetypes {
785 V4L2_FRMSIZE_TYPE_DISCRETE = 1,
786 V4L2_FRMSIZE_TYPE_CONTINUOUS = 2,
787 V4L2_FRMSIZE_TYPE_STEPWISE = 3,
788};
789
790struct v4l2_frmsize_discrete {
791 __u32 width;
792 __u32 height;
793};
794
795struct v4l2_frmsize_stepwise {
796 __u32 min_width;
797 __u32 max_width;
798 __u32 step_width;
799 __u32 min_height;
800 __u32 max_height;
801 __u32 step_height;
802};
803
804struct v4l2_frmsizeenum {
805 __u32 index;
806 __u32 pixel_format;
807 __u32 type;
808
809 union {
810 struct v4l2_frmsize_discrete discrete;
811 struct v4l2_frmsize_stepwise stepwise;
812 };
813
814 __u32 reserved[2];
815};
816
817
818
819
820enum v4l2_frmivaltypes {
821 V4L2_FRMIVAL_TYPE_DISCRETE = 1,
822 V4L2_FRMIVAL_TYPE_CONTINUOUS = 2,
823 V4L2_FRMIVAL_TYPE_STEPWISE = 3,
824};
825
826struct v4l2_frmival_stepwise {
827 struct v4l2_fract min;
828 struct v4l2_fract max;
829 struct v4l2_fract step;
830};
831
832struct v4l2_frmivalenum {
833 __u32 index;
834 __u32 pixel_format;
835 __u32 width;
836 __u32 height;
837 __u32 type;
838
839 union {
840 struct v4l2_fract discrete;
841 struct v4l2_frmival_stepwise stepwise;
842 };
843
844 __u32 reserved[2];
845};
846
847
848
849
850struct v4l2_timecode {
851 __u32 type;
852 __u32 flags;
853 __u8 frames;
854 __u8 seconds;
855 __u8 minutes;
856 __u8 hours;
857 __u8 userbits[4];
858};
859
860
861#define V4L2_TC_TYPE_24FPS 1
862#define V4L2_TC_TYPE_25FPS 2
863#define V4L2_TC_TYPE_30FPS 3
864#define V4L2_TC_TYPE_50FPS 4
865#define V4L2_TC_TYPE_60FPS 5
866
867
868#define V4L2_TC_FLAG_DROPFRAME 0x0001
869#define V4L2_TC_FLAG_COLORFRAME 0x0002
870#define V4L2_TC_USERBITS_field 0x000C
871#define V4L2_TC_USERBITS_USERDEFINED 0x0000
872#define V4L2_TC_USERBITS_8BITCHARS 0x0008
873
874
875struct v4l2_jpegcompression {
876 int quality;
877
878 int APPn;
879
880 int APP_len;
881 char APP_data[60];
882
883 int COM_len;
884 char COM_data[60];
885
886 __u32 jpeg_markers;
887
888
889
890
891
892
893
894
895
896#define V4L2_JPEG_MARKER_DHT (1<<3)
897#define V4L2_JPEG_MARKER_DQT (1<<4)
898#define V4L2_JPEG_MARKER_DRI (1<<5)
899#define V4L2_JPEG_MARKER_COM (1<<6)
900#define V4L2_JPEG_MARKER_APP (1<<7)
901
902};
903
904
905
906
907struct v4l2_requestbuffers {
908 __u32 count;
909 __u32 type;
910 __u32 memory;
911 __u32 capabilities;
912 __u32 reserved[1];
913};
914
915
916#define V4L2_BUF_CAP_SUPPORTS_MMAP (1 << 0)
917#define V4L2_BUF_CAP_SUPPORTS_USERPTR (1 << 1)
918#define V4L2_BUF_CAP_SUPPORTS_DMABUF (1 << 2)
919#define V4L2_BUF_CAP_SUPPORTS_REQUESTS (1 << 3)
920#define V4L2_BUF_CAP_SUPPORTS_ORPHANED_BUFS (1 << 4)
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942struct v4l2_plane {
943 __u32 bytesused;
944 __u32 length;
945 union {
946 __u32 mem_offset;
947 unsigned long userptr;
948 __s32 fd;
949 } m;
950 __u32 data_offset;
951 __u32 reserved[11];
952};
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985struct v4l2_buffer {
986 __u32 index;
987 __u32 type;
988 __u32 bytesused;
989 __u32 flags;
990 __u32 field;
991 struct timeval timestamp;
992 struct v4l2_timecode timecode;
993 __u32 sequence;
994
995
996 __u32 memory;
997 union {
998 __u32 offset;
999 unsigned long userptr;
1000 struct v4l2_plane *planes;
1001 __s32 fd;
1002 } m;
1003 __u32 length;
1004 __u32 reserved2;
1005 union {
1006 __s32 request_fd;
1007 __u32 reserved;
1008 };
1009};
1010
1011
1012
1013
1014
1015
1016
1017
1018static inline __u64 v4l2_timeval_to_ns(const struct timeval *tv)
1019{
1020 return (__u64)tv->tv_sec * 1000000000ULL + tv->tv_usec * 1000;
1021}
1022
1023
1024
1025#define V4L2_BUF_FLAG_MAPPED 0x00000001
1026
1027#define V4L2_BUF_FLAG_QUEUED 0x00000002
1028
1029#define V4L2_BUF_FLAG_DONE 0x00000004
1030
1031#define V4L2_BUF_FLAG_KEYFRAME 0x00000008
1032
1033#define V4L2_BUF_FLAG_PFRAME 0x00000010
1034
1035#define V4L2_BUF_FLAG_BFRAME 0x00000020
1036
1037#define V4L2_BUF_FLAG_ERROR 0x00000040
1038
1039#define V4L2_BUF_FLAG_IN_REQUEST 0x00000080
1040
1041#define V4L2_BUF_FLAG_TIMECODE 0x00000100
1042
1043#define V4L2_BUF_FLAG_PREPARED 0x00000400
1044
1045#define V4L2_BUF_FLAG_NO_CACHE_INVALIDATE 0x00000800
1046#define V4L2_BUF_FLAG_NO_CACHE_CLEAN 0x00001000
1047
1048#define V4L2_BUF_FLAG_TIMESTAMP_MASK 0x0000e000
1049#define V4L2_BUF_FLAG_TIMESTAMP_UNKNOWN 0x00000000
1050#define V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC 0x00002000
1051#define V4L2_BUF_FLAG_TIMESTAMP_COPY 0x00004000
1052
1053#define V4L2_BUF_FLAG_TSTAMP_SRC_MASK 0x00070000
1054#define V4L2_BUF_FLAG_TSTAMP_SRC_EOF 0x00000000
1055#define V4L2_BUF_FLAG_TSTAMP_SRC_SOE 0x00010000
1056
1057#define V4L2_BUF_FLAG_LAST 0x00100000
1058
1059#define V4L2_BUF_FLAG_REQUEST_FD 0x00800000
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079struct v4l2_exportbuffer {
1080 __u32 type;
1081 __u32 index;
1082 __u32 plane;
1083 __u32 flags;
1084 __s32 fd;
1085 __u32 reserved[11];
1086};
1087
1088
1089
1090
1091struct v4l2_framebuffer {
1092 __u32 capability;
1093 __u32 flags;
1094
1095
1096 void *base;
1097 struct {
1098 __u32 width;
1099 __u32 height;
1100 __u32 pixelformat;
1101 __u32 field;
1102 __u32 bytesperline;
1103 __u32 sizeimage;
1104 __u32 colorspace;
1105 __u32 priv;
1106 } fmt;
1107};
1108
1109#define V4L2_FBUF_CAP_EXTERNOVERLAY 0x0001
1110#define V4L2_FBUF_CAP_CHROMAKEY 0x0002
1111#define V4L2_FBUF_CAP_LIST_CLIPPING 0x0004
1112#define V4L2_FBUF_CAP_BITMAP_CLIPPING 0x0008
1113#define V4L2_FBUF_CAP_LOCAL_ALPHA 0x0010
1114#define V4L2_FBUF_CAP_GLOBAL_ALPHA 0x0020
1115#define V4L2_FBUF_CAP_LOCAL_INV_ALPHA 0x0040
1116#define V4L2_FBUF_CAP_SRC_CHROMAKEY 0x0080
1117
1118#define V4L2_FBUF_FLAG_PRIMARY 0x0001
1119#define V4L2_FBUF_FLAG_OVERLAY 0x0002
1120#define V4L2_FBUF_FLAG_CHROMAKEY 0x0004
1121#define V4L2_FBUF_FLAG_LOCAL_ALPHA 0x0008
1122#define V4L2_FBUF_FLAG_GLOBAL_ALPHA 0x0010
1123#define V4L2_FBUF_FLAG_LOCAL_INV_ALPHA 0x0020
1124#define V4L2_FBUF_FLAG_SRC_CHROMAKEY 0x0040
1125
1126struct v4l2_clip {
1127 struct v4l2_rect c;
1128 struct v4l2_clip __user *next;
1129};
1130
1131struct v4l2_window {
1132 struct v4l2_rect w;
1133 __u32 field;
1134 __u32 chromakey;
1135 struct v4l2_clip __user *clips;
1136 __u32 clipcount;
1137 void __user *bitmap;
1138 __u8 global_alpha;
1139};
1140
1141
1142
1143
1144struct v4l2_captureparm {
1145 __u32 capability;
1146 __u32 capturemode;
1147 struct v4l2_fract timeperframe;
1148 __u32 extendedmode;
1149 __u32 readbuffers;
1150 __u32 reserved[4];
1151};
1152
1153
1154#define V4L2_MODE_HIGHQUALITY 0x0001
1155#define V4L2_CAP_TIMEPERFRAME 0x1000
1156
1157struct v4l2_outputparm {
1158 __u32 capability;
1159 __u32 outputmode;
1160 struct v4l2_fract timeperframe;
1161 __u32 extendedmode;
1162 __u32 writebuffers;
1163 __u32 reserved[4];
1164};
1165
1166
1167
1168
1169struct v4l2_cropcap {
1170 __u32 type;
1171 struct v4l2_rect bounds;
1172 struct v4l2_rect defrect;
1173 struct v4l2_fract pixelaspect;
1174};
1175
1176struct v4l2_crop {
1177 __u32 type;
1178 struct v4l2_rect c;
1179};
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194struct v4l2_selection {
1195 __u32 type;
1196 __u32 target;
1197 __u32 flags;
1198 struct v4l2_rect r;
1199 __u32 reserved[9];
1200};
1201
1202
1203
1204
1205
1206
1207typedef __u64 v4l2_std_id;
1208
1209
1210#define V4L2_STD_PAL_B ((v4l2_std_id)0x00000001)
1211#define V4L2_STD_PAL_B1 ((v4l2_std_id)0x00000002)
1212#define V4L2_STD_PAL_G ((v4l2_std_id)0x00000004)
1213#define V4L2_STD_PAL_H ((v4l2_std_id)0x00000008)
1214#define V4L2_STD_PAL_I ((v4l2_std_id)0x00000010)
1215#define V4L2_STD_PAL_D ((v4l2_std_id)0x00000020)
1216#define V4L2_STD_PAL_D1 ((v4l2_std_id)0x00000040)
1217#define V4L2_STD_PAL_K ((v4l2_std_id)0x00000080)
1218
1219#define V4L2_STD_PAL_M ((v4l2_std_id)0x00000100)
1220#define V4L2_STD_PAL_N ((v4l2_std_id)0x00000200)
1221#define V4L2_STD_PAL_Nc ((v4l2_std_id)0x00000400)
1222#define V4L2_STD_PAL_60 ((v4l2_std_id)0x00000800)
1223
1224#define V4L2_STD_NTSC_M ((v4l2_std_id)0x00001000)
1225#define V4L2_STD_NTSC_M_JP ((v4l2_std_id)0x00002000)
1226#define V4L2_STD_NTSC_443 ((v4l2_std_id)0x00004000)
1227#define V4L2_STD_NTSC_M_KR ((v4l2_std_id)0x00008000)
1228
1229#define V4L2_STD_SECAM_B ((v4l2_std_id)0x00010000)
1230#define V4L2_STD_SECAM_D ((v4l2_std_id)0x00020000)
1231#define V4L2_STD_SECAM_G ((v4l2_std_id)0x00040000)
1232#define V4L2_STD_SECAM_H ((v4l2_std_id)0x00080000)
1233#define V4L2_STD_SECAM_K ((v4l2_std_id)0x00100000)
1234#define V4L2_STD_SECAM_K1 ((v4l2_std_id)0x00200000)
1235#define V4L2_STD_SECAM_L ((v4l2_std_id)0x00400000)
1236#define V4L2_STD_SECAM_LC ((v4l2_std_id)0x00800000)
1237
1238
1239#define V4L2_STD_ATSC_8_VSB ((v4l2_std_id)0x01000000)
1240#define V4L2_STD_ATSC_16_VSB ((v4l2_std_id)0x02000000)
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260#define V4L2_STD_NTSC (V4L2_STD_NTSC_M |\
1261 V4L2_STD_NTSC_M_JP |\
1262 V4L2_STD_NTSC_M_KR)
1263
1264#define V4L2_STD_SECAM_DK (V4L2_STD_SECAM_D |\
1265 V4L2_STD_SECAM_K |\
1266 V4L2_STD_SECAM_K1)
1267
1268#define V4L2_STD_SECAM (V4L2_STD_SECAM_B |\
1269 V4L2_STD_SECAM_G |\
1270 V4L2_STD_SECAM_H |\
1271 V4L2_STD_SECAM_DK |\
1272 V4L2_STD_SECAM_L |\
1273 V4L2_STD_SECAM_LC)
1274
1275#define V4L2_STD_PAL_BG (V4L2_STD_PAL_B |\
1276 V4L2_STD_PAL_B1 |\
1277 V4L2_STD_PAL_G)
1278#define V4L2_STD_PAL_DK (V4L2_STD_PAL_D |\
1279 V4L2_STD_PAL_D1 |\
1280 V4L2_STD_PAL_K)
1281
1282
1283
1284
1285
1286#define V4L2_STD_PAL (V4L2_STD_PAL_BG |\
1287 V4L2_STD_PAL_DK |\
1288 V4L2_STD_PAL_H |\
1289 V4L2_STD_PAL_I)
1290
1291#define V4L2_STD_B (V4L2_STD_PAL_B |\
1292 V4L2_STD_PAL_B1 |\
1293 V4L2_STD_SECAM_B)
1294#define V4L2_STD_G (V4L2_STD_PAL_G |\
1295 V4L2_STD_SECAM_G)
1296#define V4L2_STD_H (V4L2_STD_PAL_H |\
1297 V4L2_STD_SECAM_H)
1298#define V4L2_STD_L (V4L2_STD_SECAM_L |\
1299 V4L2_STD_SECAM_LC)
1300#define V4L2_STD_GH (V4L2_STD_G |\
1301 V4L2_STD_H)
1302#define V4L2_STD_DK (V4L2_STD_PAL_DK |\
1303 V4L2_STD_SECAM_DK)
1304#define V4L2_STD_BG (V4L2_STD_B |\
1305 V4L2_STD_G)
1306#define V4L2_STD_MN (V4L2_STD_PAL_M |\
1307 V4L2_STD_PAL_N |\
1308 V4L2_STD_PAL_Nc |\
1309 V4L2_STD_NTSC)
1310
1311
1312#define V4L2_STD_MTS (V4L2_STD_NTSC_M |\
1313 V4L2_STD_PAL_M |\
1314 V4L2_STD_PAL_N |\
1315 V4L2_STD_PAL_Nc)
1316
1317
1318#define V4L2_STD_525_60 (V4L2_STD_PAL_M |\
1319 V4L2_STD_PAL_60 |\
1320 V4L2_STD_NTSC |\
1321 V4L2_STD_NTSC_443)
1322
1323#define V4L2_STD_625_50 (V4L2_STD_PAL |\
1324 V4L2_STD_PAL_N |\
1325 V4L2_STD_PAL_Nc |\
1326 V4L2_STD_SECAM)
1327
1328#define V4L2_STD_ATSC (V4L2_STD_ATSC_8_VSB |\
1329 V4L2_STD_ATSC_16_VSB)
1330
1331#define V4L2_STD_UNKNOWN 0
1332#define V4L2_STD_ALL (V4L2_STD_525_60 |\
1333 V4L2_STD_625_50)
1334
1335struct v4l2_standard {
1336 __u32 index;
1337 v4l2_std_id id;
1338 __u8 name[24];
1339 struct v4l2_fract frameperiod;
1340 __u32 framelines;
1341 __u32 reserved[4];
1342};
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383struct v4l2_bt_timings {
1384 __u32 width;
1385 __u32 height;
1386 __u32 interlaced;
1387 __u32 polarities;
1388 __u64 pixelclock;
1389 __u32 hfrontporch;
1390 __u32 hsync;
1391 __u32 hbackporch;
1392 __u32 vfrontporch;
1393 __u32 vsync;
1394 __u32 vbackporch;
1395 __u32 il_vfrontporch;
1396 __u32 il_vsync;
1397 __u32 il_vbackporch;
1398 __u32 standards;
1399 __u32 flags;
1400 struct v4l2_fract picture_aspect;
1401 __u8 cea861_vic;
1402 __u8 hdmi_vic;
1403 __u8 reserved[46];
1404} __attribute__ ((packed));
1405
1406
1407#define V4L2_DV_PROGRESSIVE 0
1408#define V4L2_DV_INTERLACED 1
1409
1410
1411#define V4L2_DV_VSYNC_POS_POL 0x00000001
1412#define V4L2_DV_HSYNC_POS_POL 0x00000002
1413
1414
1415#define V4L2_DV_BT_STD_CEA861 (1 << 0)
1416#define V4L2_DV_BT_STD_DMT (1 << 1)
1417#define V4L2_DV_BT_STD_CVT (1 << 2)
1418#define V4L2_DV_BT_STD_GTF (1 << 3)
1419#define V4L2_DV_BT_STD_SDI (1 << 4)
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429#define V4L2_DV_FL_REDUCED_BLANKING (1 << 0)
1430
1431
1432
1433
1434
1435#define V4L2_DV_FL_CAN_REDUCE_FPS (1 << 1)
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445#define V4L2_DV_FL_REDUCED_FPS (1 << 2)
1446
1447
1448
1449
1450
1451
1452#define V4L2_DV_FL_HALF_LINE (1 << 3)
1453
1454
1455
1456
1457
1458
1459
1460#define V4L2_DV_FL_IS_CE_VIDEO (1 << 4)
1461
1462
1463
1464
1465#define V4L2_DV_FL_FIRST_FIELD_EXTRA_LINE (1 << 5)
1466
1467
1468
1469
1470
1471#define V4L2_DV_FL_HAS_PICTURE_ASPECT (1 << 6)
1472
1473
1474
1475
1476#define V4L2_DV_FL_HAS_CEA861_VIC (1 << 7)
1477
1478
1479
1480
1481
1482#define V4L2_DV_FL_HAS_HDMI_VIC (1 << 8)
1483
1484
1485
1486
1487
1488
1489#define V4L2_DV_FL_CAN_DETECT_REDUCED_FPS (1 << 9)
1490
1491
1492#define V4L2_DV_BT_BLANKING_WIDTH(bt) \
1493 ((bt)->hfrontporch + (bt)->hsync + (bt)->hbackporch)
1494#define V4L2_DV_BT_FRAME_WIDTH(bt) \
1495 ((bt)->width + V4L2_DV_BT_BLANKING_WIDTH(bt))
1496#define V4L2_DV_BT_BLANKING_HEIGHT(bt) \
1497 ((bt)->vfrontporch + (bt)->vsync + (bt)->vbackporch + \
1498 (bt)->il_vfrontporch + (bt)->il_vsync + (bt)->il_vbackporch)
1499#define V4L2_DV_BT_FRAME_HEIGHT(bt) \
1500 ((bt)->height + V4L2_DV_BT_BLANKING_HEIGHT(bt))
1501
1502
1503
1504
1505
1506struct v4l2_dv_timings {
1507 __u32 type;
1508 union {
1509 struct v4l2_bt_timings bt;
1510 __u32 reserved[32];
1511 };
1512} __attribute__ ((packed));
1513
1514
1515#define V4L2_DV_BT_656_1120 0
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525struct v4l2_enum_dv_timings {
1526 __u32 index;
1527 __u32 pad;
1528 __u32 reserved[2];
1529 struct v4l2_dv_timings timings;
1530};
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543struct v4l2_bt_timings_cap {
1544 __u32 min_width;
1545 __u32 max_width;
1546 __u32 min_height;
1547 __u32 max_height;
1548 __u64 min_pixelclock;
1549 __u64 max_pixelclock;
1550 __u32 standards;
1551 __u32 capabilities;
1552 __u32 reserved[16];
1553} __attribute__ ((packed));
1554
1555
1556#define V4L2_DV_BT_CAP_INTERLACED (1 << 0)
1557
1558#define V4L2_DV_BT_CAP_PROGRESSIVE (1 << 1)
1559
1560#define V4L2_DV_BT_CAP_REDUCED_BLANKING (1 << 2)
1561
1562#define V4L2_DV_BT_CAP_CUSTOM (1 << 3)
1563
1564
1565
1566
1567
1568
1569
1570struct v4l2_dv_timings_cap {
1571 __u32 type;
1572 __u32 pad;
1573 __u32 reserved[2];
1574 union {
1575 struct v4l2_bt_timings_cap bt;
1576 __u32 raw_data[32];
1577 };
1578};
1579
1580
1581
1582
1583
1584struct v4l2_input {
1585 __u32 index;
1586 __u8 name[32];
1587 __u32 type;
1588 __u32 audioset;
1589 __u32 tuner;
1590 v4l2_std_id std;
1591 __u32 status;
1592 __u32 capabilities;
1593 __u32 reserved[3];
1594};
1595
1596
1597#define V4L2_INPUT_TYPE_TUNER 1
1598#define V4L2_INPUT_TYPE_CAMERA 2
1599#define V4L2_INPUT_TYPE_TOUCH 3
1600
1601
1602#define V4L2_IN_ST_NO_POWER 0x00000001
1603#define V4L2_IN_ST_NO_SIGNAL 0x00000002
1604#define V4L2_IN_ST_NO_COLOR 0x00000004
1605
1606
1607
1608#define V4L2_IN_ST_HFLIP 0x00000010
1609#define V4L2_IN_ST_VFLIP 0x00000020
1610
1611
1612#define V4L2_IN_ST_NO_H_LOCK 0x00000100
1613#define V4L2_IN_ST_COLOR_KILL 0x00000200
1614#define V4L2_IN_ST_NO_V_LOCK 0x00000400
1615#define V4L2_IN_ST_NO_STD_LOCK 0x00000800
1616
1617
1618#define V4L2_IN_ST_NO_SYNC 0x00010000
1619#define V4L2_IN_ST_NO_EQU 0x00020000
1620#define V4L2_IN_ST_NO_CARRIER 0x00040000
1621
1622
1623#define V4L2_IN_ST_MACROVISION 0x01000000
1624#define V4L2_IN_ST_NO_ACCESS 0x02000000
1625#define V4L2_IN_ST_VTR 0x04000000
1626
1627
1628#define V4L2_IN_CAP_DV_TIMINGS 0x00000002
1629#define V4L2_IN_CAP_CUSTOM_TIMINGS V4L2_IN_CAP_DV_TIMINGS
1630#define V4L2_IN_CAP_STD 0x00000004
1631#define V4L2_IN_CAP_NATIVE_SIZE 0x00000008
1632
1633
1634
1635
1636struct v4l2_output {
1637 __u32 index;
1638 __u8 name[32];
1639 __u32 type;
1640 __u32 audioset;
1641 __u32 modulator;
1642 v4l2_std_id std;
1643 __u32 capabilities;
1644 __u32 reserved[3];
1645};
1646
1647#define V4L2_OUTPUT_TYPE_MODULATOR 1
1648#define V4L2_OUTPUT_TYPE_ANALOG 2
1649#define V4L2_OUTPUT_TYPE_ANALOGVGAOVERLAY 3
1650
1651
1652#define V4L2_OUT_CAP_DV_TIMINGS 0x00000002
1653#define V4L2_OUT_CAP_CUSTOM_TIMINGS V4L2_OUT_CAP_DV_TIMINGS
1654#define V4L2_OUT_CAP_STD 0x00000004
1655#define V4L2_OUT_CAP_NATIVE_SIZE 0x00000008
1656
1657
1658
1659
1660struct v4l2_control {
1661 __u32 id;
1662 __s32 value;
1663};
1664
1665struct v4l2_ext_control {
1666 __u32 id;
1667 __u32 size;
1668 __u32 reserved2[1];
1669 union {
1670 __s32 value;
1671 __s64 value64;
1672 char __user *string;
1673 __u8 __user *p_u8;
1674 __u16 __user *p_u16;
1675 __u32 __user *p_u32;
1676 void __user *ptr;
1677 };
1678} __attribute__ ((packed));
1679
1680struct v4l2_ext_controls {
1681 union {
1682#ifndef __KERNEL__
1683 __u32 ctrl_class;
1684#endif
1685 __u32 which;
1686 };
1687 __u32 count;
1688 __u32 error_idx;
1689 __s32 request_fd;
1690 __u32 reserved[1];
1691 struct v4l2_ext_control *controls;
1692};
1693
1694#define V4L2_CTRL_ID_MASK (0x0fffffff)
1695#ifndef __KERNEL__
1696#define V4L2_CTRL_ID2CLASS(id) ((id) & 0x0fff0000UL)
1697#endif
1698#define V4L2_CTRL_ID2WHICH(id) ((id) & 0x0fff0000UL)
1699#define V4L2_CTRL_DRIVER_PRIV(id) (((id) & 0xffff) >= 0x1000)
1700#define V4L2_CTRL_MAX_DIMS (4)
1701#define V4L2_CTRL_WHICH_CUR_VAL 0
1702#define V4L2_CTRL_WHICH_DEF_VAL 0x0f000000
1703#define V4L2_CTRL_WHICH_REQUEST_VAL 0x0f010000
1704
1705enum v4l2_ctrl_type {
1706 V4L2_CTRL_TYPE_INTEGER = 1,
1707 V4L2_CTRL_TYPE_BOOLEAN = 2,
1708 V4L2_CTRL_TYPE_MENU = 3,
1709 V4L2_CTRL_TYPE_BUTTON = 4,
1710 V4L2_CTRL_TYPE_INTEGER64 = 5,
1711 V4L2_CTRL_TYPE_CTRL_CLASS = 6,
1712 V4L2_CTRL_TYPE_STRING = 7,
1713 V4L2_CTRL_TYPE_BITMASK = 8,
1714 V4L2_CTRL_TYPE_INTEGER_MENU = 9,
1715
1716
1717 V4L2_CTRL_COMPOUND_TYPES = 0x0100,
1718 V4L2_CTRL_TYPE_U8 = 0x0100,
1719 V4L2_CTRL_TYPE_U16 = 0x0101,
1720 V4L2_CTRL_TYPE_U32 = 0x0102,
1721};
1722
1723
1724struct v4l2_queryctrl {
1725 __u32 id;
1726 __u32 type;
1727 __u8 name[32];
1728 __s32 minimum;
1729 __s32 maximum;
1730 __s32 step;
1731 __s32 default_value;
1732 __u32 flags;
1733 __u32 reserved[2];
1734};
1735
1736
1737struct v4l2_query_ext_ctrl {
1738 __u32 id;
1739 __u32 type;
1740 char name[32];
1741 __s64 minimum;
1742 __s64 maximum;
1743 __u64 step;
1744 __s64 default_value;
1745 __u32 flags;
1746 __u32 elem_size;
1747 __u32 elems;
1748 __u32 nr_of_dims;
1749 __u32 dims[V4L2_CTRL_MAX_DIMS];
1750 __u32 reserved[32];
1751};
1752
1753
1754struct v4l2_querymenu {
1755 __u32 id;
1756 __u32 index;
1757 union {
1758 __u8 name[32];
1759 __s64 value;
1760 };
1761 __u32 reserved;
1762} __attribute__ ((packed));
1763
1764
1765#define V4L2_CTRL_FLAG_DISABLED 0x0001
1766#define V4L2_CTRL_FLAG_GRABBED 0x0002
1767#define V4L2_CTRL_FLAG_READ_ONLY 0x0004
1768#define V4L2_CTRL_FLAG_UPDATE 0x0008
1769#define V4L2_CTRL_FLAG_INACTIVE 0x0010
1770#define V4L2_CTRL_FLAG_SLIDER 0x0020
1771#define V4L2_CTRL_FLAG_WRITE_ONLY 0x0040
1772#define V4L2_CTRL_FLAG_VOLATILE 0x0080
1773#define V4L2_CTRL_FLAG_HAS_PAYLOAD 0x0100
1774#define V4L2_CTRL_FLAG_EXECUTE_ON_WRITE 0x0200
1775#define V4L2_CTRL_FLAG_MODIFY_LAYOUT 0x0400
1776
1777
1778#define V4L2_CTRL_FLAG_NEXT_CTRL 0x80000000
1779#define V4L2_CTRL_FLAG_NEXT_COMPOUND 0x40000000
1780
1781
1782#define V4L2_CID_MAX_CTRLS 1024
1783
1784#define V4L2_CID_PRIVATE_BASE 0x08000000
1785
1786
1787
1788
1789
1790struct v4l2_tuner {
1791 __u32 index;
1792 __u8 name[32];
1793 __u32 type;
1794 __u32 capability;
1795 __u32 rangelow;
1796 __u32 rangehigh;
1797 __u32 rxsubchans;
1798 __u32 audmode;
1799 __s32 signal;
1800 __s32 afc;
1801 __u32 reserved[4];
1802};
1803
1804struct v4l2_modulator {
1805 __u32 index;
1806 __u8 name[32];
1807 __u32 capability;
1808 __u32 rangelow;
1809 __u32 rangehigh;
1810 __u32 txsubchans;
1811 __u32 type;
1812 __u32 reserved[3];
1813};
1814
1815
1816#define V4L2_TUNER_CAP_LOW 0x0001
1817#define V4L2_TUNER_CAP_NORM 0x0002
1818#define V4L2_TUNER_CAP_HWSEEK_BOUNDED 0x0004
1819#define V4L2_TUNER_CAP_HWSEEK_WRAP 0x0008
1820#define V4L2_TUNER_CAP_STEREO 0x0010
1821#define V4L2_TUNER_CAP_LANG2 0x0020
1822#define V4L2_TUNER_CAP_SAP 0x0020
1823#define V4L2_TUNER_CAP_LANG1 0x0040
1824#define V4L2_TUNER_CAP_RDS 0x0080
1825#define V4L2_TUNER_CAP_RDS_BLOCK_IO 0x0100
1826#define V4L2_TUNER_CAP_RDS_CONTROLS 0x0200
1827#define V4L2_TUNER_CAP_FREQ_BANDS 0x0400
1828#define V4L2_TUNER_CAP_HWSEEK_PROG_LIM 0x0800
1829#define V4L2_TUNER_CAP_1HZ 0x1000
1830
1831
1832#define V4L2_TUNER_SUB_MONO 0x0001
1833#define V4L2_TUNER_SUB_STEREO 0x0002
1834#define V4L2_TUNER_SUB_LANG2 0x0004
1835#define V4L2_TUNER_SUB_SAP 0x0004
1836#define V4L2_TUNER_SUB_LANG1 0x0008
1837#define V4L2_TUNER_SUB_RDS 0x0010
1838
1839
1840#define V4L2_TUNER_MODE_MONO 0x0000
1841#define V4L2_TUNER_MODE_STEREO 0x0001
1842#define V4L2_TUNER_MODE_LANG2 0x0002
1843#define V4L2_TUNER_MODE_SAP 0x0002
1844#define V4L2_TUNER_MODE_LANG1 0x0003
1845#define V4L2_TUNER_MODE_LANG1_LANG2 0x0004
1846
1847struct v4l2_frequency {
1848 __u32 tuner;
1849 __u32 type;
1850 __u32 frequency;
1851 __u32 reserved[8];
1852};
1853
1854#define V4L2_BAND_MODULATION_VSB (1 << 1)
1855#define V4L2_BAND_MODULATION_FM (1 << 2)
1856#define V4L2_BAND_MODULATION_AM (1 << 3)
1857
1858struct v4l2_frequency_band {
1859 __u32 tuner;
1860 __u32 type;
1861 __u32 index;
1862 __u32 capability;
1863 __u32 rangelow;
1864 __u32 rangehigh;
1865 __u32 modulation;
1866 __u32 reserved[9];
1867};
1868
1869struct v4l2_hw_freq_seek {
1870 __u32 tuner;
1871 __u32 type;
1872 __u32 seek_upward;
1873 __u32 wrap_around;
1874 __u32 spacing;
1875 __u32 rangelow;
1876 __u32 rangehigh;
1877 __u32 reserved[5];
1878};
1879
1880
1881
1882
1883
1884struct v4l2_rds_data {
1885 __u8 lsb;
1886 __u8 msb;
1887 __u8 block;
1888} __attribute__ ((packed));
1889
1890#define V4L2_RDS_BLOCK_MSK 0x7
1891#define V4L2_RDS_BLOCK_A 0
1892#define V4L2_RDS_BLOCK_B 1
1893#define V4L2_RDS_BLOCK_C 2
1894#define V4L2_RDS_BLOCK_D 3
1895#define V4L2_RDS_BLOCK_C_ALT 4
1896#define V4L2_RDS_BLOCK_INVALID 7
1897
1898#define V4L2_RDS_BLOCK_CORRECTED 0x40
1899#define V4L2_RDS_BLOCK_ERROR 0x80
1900
1901
1902
1903
1904struct v4l2_audio {
1905 __u32 index;
1906 __u8 name[32];
1907 __u32 capability;
1908 __u32 mode;
1909 __u32 reserved[2];
1910};
1911
1912
1913#define V4L2_AUDCAP_STEREO 0x00001
1914#define V4L2_AUDCAP_AVL 0x00002
1915
1916
1917#define V4L2_AUDMODE_AVL 0x00001
1918
1919struct v4l2_audioout {
1920 __u32 index;
1921 __u8 name[32];
1922 __u32 capability;
1923 __u32 mode;
1924 __u32 reserved[2];
1925};
1926
1927
1928
1929
1930#if 1
1931#define V4L2_ENC_IDX_FRAME_I (0)
1932#define V4L2_ENC_IDX_FRAME_P (1)
1933#define V4L2_ENC_IDX_FRAME_B (2)
1934#define V4L2_ENC_IDX_FRAME_MASK (0xf)
1935
1936struct v4l2_enc_idx_entry {
1937 __u64 offset;
1938 __u64 pts;
1939 __u32 length;
1940 __u32 flags;
1941 __u32 reserved[2];
1942};
1943
1944#define V4L2_ENC_IDX_ENTRIES (64)
1945struct v4l2_enc_idx {
1946 __u32 entries;
1947 __u32 entries_cap;
1948 __u32 reserved[4];
1949 struct v4l2_enc_idx_entry entry[V4L2_ENC_IDX_ENTRIES];
1950};
1951
1952
1953#define V4L2_ENC_CMD_START (0)
1954#define V4L2_ENC_CMD_STOP (1)
1955#define V4L2_ENC_CMD_PAUSE (2)
1956#define V4L2_ENC_CMD_RESUME (3)
1957
1958
1959#define V4L2_ENC_CMD_STOP_AT_GOP_END (1 << 0)
1960
1961struct v4l2_encoder_cmd {
1962 __u32 cmd;
1963 __u32 flags;
1964 union {
1965 struct {
1966 __u32 data[8];
1967 } raw;
1968 };
1969};
1970
1971
1972#define V4L2_DEC_CMD_START (0)
1973#define V4L2_DEC_CMD_STOP (1)
1974#define V4L2_DEC_CMD_PAUSE (2)
1975#define V4L2_DEC_CMD_RESUME (3)
1976
1977
1978#define V4L2_DEC_CMD_START_MUTE_AUDIO (1 << 0)
1979
1980
1981#define V4L2_DEC_CMD_PAUSE_TO_BLACK (1 << 0)
1982
1983
1984#define V4L2_DEC_CMD_STOP_TO_BLACK (1 << 0)
1985#define V4L2_DEC_CMD_STOP_IMMEDIATELY (1 << 1)
1986
1987
1988
1989
1990#define V4L2_DEC_START_FMT_NONE (0)
1991
1992#define V4L2_DEC_START_FMT_GOP (1)
1993
1994
1995
1996struct v4l2_decoder_cmd {
1997 __u32 cmd;
1998 __u32 flags;
1999 union {
2000 struct {
2001 __u64 pts;
2002 } stop;
2003
2004 struct {
2005
2006
2007
2008
2009
2010 __s32 speed;
2011 __u32 format;
2012 } start;
2013
2014 struct {
2015 __u32 data[16];
2016 } raw;
2017 };
2018};
2019#endif
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029struct v4l2_vbi_format {
2030 __u32 sampling_rate;
2031 __u32 offset;
2032 __u32 samples_per_line;
2033 __u32 sample_format;
2034 __s32 start[2];
2035 __u32 count[2];
2036 __u32 flags;
2037 __u32 reserved[2];
2038};
2039
2040
2041#define V4L2_VBI_UNSYNC (1 << 0)
2042#define V4L2_VBI_INTERLACED (1 << 1)
2043
2044
2045#define V4L2_VBI_ITU_525_F1_START (1)
2046#define V4L2_VBI_ITU_525_F2_START (264)
2047#define V4L2_VBI_ITU_625_F1_START (1)
2048#define V4L2_VBI_ITU_625_F2_START (314)
2049
2050
2051
2052
2053
2054
2055
2056
2057struct v4l2_sliced_vbi_format {
2058 __u16 service_set;
2059
2060
2061
2062
2063 __u16 service_lines[2][24];
2064 __u32 io_size;
2065 __u32 reserved[2];
2066};
2067
2068
2069
2070#define V4L2_SLICED_TELETEXT_B (0x0001)
2071
2072#define V4L2_SLICED_VPS (0x0400)
2073
2074#define V4L2_SLICED_CAPTION_525 (0x1000)
2075
2076#define V4L2_SLICED_WSS_625 (0x4000)
2077
2078#define V4L2_SLICED_VBI_525 (V4L2_SLICED_CAPTION_525)
2079#define V4L2_SLICED_VBI_625 (V4L2_SLICED_TELETEXT_B | V4L2_SLICED_VPS | V4L2_SLICED_WSS_625)
2080
2081struct v4l2_sliced_vbi_cap {
2082 __u16 service_set;
2083
2084
2085
2086
2087 __u16 service_lines[2][24];
2088 __u32 type;
2089 __u32 reserved[3];
2090};
2091
2092struct v4l2_sliced_vbi_data {
2093 __u32 id;
2094 __u32 field;
2095 __u32 line;
2096 __u32 reserved;
2097 __u8 data[48];
2098};
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117#define V4L2_MPEG_VBI_IVTV_TELETEXT_B (1)
2118#define V4L2_MPEG_VBI_IVTV_CAPTION_525 (4)
2119#define V4L2_MPEG_VBI_IVTV_WSS_625 (5)
2120#define V4L2_MPEG_VBI_IVTV_VPS (7)
2121
2122struct v4l2_mpeg_vbi_itv0_line {
2123 __u8 id;
2124 __u8 data[42];
2125} __attribute__ ((packed));
2126
2127struct v4l2_mpeg_vbi_itv0 {
2128 __le32 linemask[2];
2129 struct v4l2_mpeg_vbi_itv0_line line[35];
2130} __attribute__ ((packed));
2131
2132struct v4l2_mpeg_vbi_ITV0 {
2133 struct v4l2_mpeg_vbi_itv0_line line[36];
2134} __attribute__ ((packed));
2135
2136#define V4L2_MPEG_VBI_IVTV_MAGIC0 "itv0"
2137#define V4L2_MPEG_VBI_IVTV_MAGIC1 "ITV0"
2138
2139struct v4l2_mpeg_vbi_fmt_ivtv {
2140 __u8 magic[4];
2141 union {
2142 struct v4l2_mpeg_vbi_itv0 itv0;
2143 struct v4l2_mpeg_vbi_ITV0 ITV0;
2144 };
2145} __attribute__ ((packed));
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158struct v4l2_plane_pix_format {
2159 __u32 sizeimage;
2160 __u32 bytesperline;
2161 __u16 reserved[6];
2162} __attribute__ ((packed));
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178struct v4l2_pix_format_mplane {
2179 __u32 width;
2180 __u32 height;
2181 __u32 pixelformat;
2182 __u32 field;
2183 __u32 colorspace;
2184
2185 struct v4l2_plane_pix_format plane_fmt[VIDEO_MAX_PLANES];
2186 __u8 num_planes;
2187 __u8 flags;
2188 union {
2189 __u8 ycbcr_enc;
2190 __u8 hsv_enc;
2191 };
2192 __u8 quantization;
2193 __u8 xfer_func;
2194 __u8 reserved[7];
2195} __attribute__ ((packed));
2196
2197
2198
2199
2200
2201
2202struct v4l2_sdr_format {
2203 __u32 pixelformat;
2204 __u32 buffersize;
2205 __u8 reserved[24];
2206} __attribute__ ((packed));
2207
2208
2209
2210
2211
2212
2213struct v4l2_meta_format {
2214 __u32 dataformat;
2215 __u32 buffersize;
2216} __attribute__ ((packed));
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228struct v4l2_format {
2229 __u32 type;
2230 union {
2231 struct v4l2_pix_format pix;
2232 struct v4l2_pix_format_mplane pix_mp;
2233 struct v4l2_window win;
2234 struct v4l2_vbi_format vbi;
2235 struct v4l2_sliced_vbi_format sliced;
2236 struct v4l2_sdr_format sdr;
2237 struct v4l2_meta_format meta;
2238 __u8 raw_data[200];
2239 } fmt;
2240};
2241
2242
2243
2244struct v4l2_streamparm {
2245 __u32 type;
2246 union {
2247 struct v4l2_captureparm capture;
2248 struct v4l2_outputparm output;
2249 __u8 raw_data[200];
2250 } parm;
2251};
2252
2253
2254
2255
2256
2257#define V4L2_EVENT_ALL 0
2258#define V4L2_EVENT_VSYNC 1
2259#define V4L2_EVENT_EOS 2
2260#define V4L2_EVENT_CTRL 3
2261#define V4L2_EVENT_FRAME_SYNC 4
2262#define V4L2_EVENT_SOURCE_CHANGE 5
2263#define V4L2_EVENT_MOTION_DET 6
2264#define V4L2_EVENT_PRIVATE_START 0x08000000
2265
2266
2267struct v4l2_event_vsync {
2268
2269 __u8 field;
2270} __attribute__ ((packed));
2271
2272
2273#define V4L2_EVENT_CTRL_CH_VALUE (1 << 0)
2274#define V4L2_EVENT_CTRL_CH_FLAGS (1 << 1)
2275#define V4L2_EVENT_CTRL_CH_RANGE (1 << 2)
2276
2277struct v4l2_event_ctrl {
2278 __u32 changes;
2279 __u32 type;
2280 union {
2281 __s32 value;
2282 __s64 value64;
2283 };
2284 __u32 flags;
2285 __s32 minimum;
2286 __s32 maximum;
2287 __s32 step;
2288 __s32 default_value;
2289};
2290
2291struct v4l2_event_frame_sync {
2292 __u32 frame_sequence;
2293};
2294
2295#define V4L2_EVENT_SRC_CH_RESOLUTION (1 << 0)
2296
2297struct v4l2_event_src_change {
2298 __u32 changes;
2299};
2300
2301#define V4L2_EVENT_MD_FL_HAVE_FRAME_SEQ (1 << 0)
2302
2303
2304
2305
2306
2307
2308
2309
2310struct v4l2_event_motion_det {
2311 __u32 flags;
2312 __u32 frame_sequence;
2313 __u32 region_mask;
2314};
2315
2316struct v4l2_event {
2317 __u32 type;
2318 union {
2319 struct v4l2_event_vsync vsync;
2320 struct v4l2_event_ctrl ctrl;
2321 struct v4l2_event_frame_sync frame_sync;
2322 struct v4l2_event_src_change src_change;
2323 struct v4l2_event_motion_det motion_det;
2324 __u8 data[64];
2325 } u;
2326 __u32 pending;
2327 __u32 sequence;
2328 struct timespec timestamp;
2329 __u32 id;
2330 __u32 reserved[8];
2331};
2332
2333#define V4L2_EVENT_SUB_FL_SEND_INITIAL (1 << 0)
2334#define V4L2_EVENT_SUB_FL_ALLOW_FEEDBACK (1 << 1)
2335
2336struct v4l2_event_subscription {
2337 __u32 type;
2338 __u32 id;
2339 __u32 flags;
2340 __u32 reserved[5];
2341};
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352#define V4L2_CHIP_MATCH_BRIDGE 0
2353#define V4L2_CHIP_MATCH_SUBDEV 4
2354
2355
2356#define V4L2_CHIP_MATCH_HOST V4L2_CHIP_MATCH_BRIDGE
2357#define V4L2_CHIP_MATCH_I2C_DRIVER 1
2358#define V4L2_CHIP_MATCH_I2C_ADDR 2
2359#define V4L2_CHIP_MATCH_AC97 3
2360
2361struct v4l2_dbg_match {
2362 __u32 type;
2363 union {
2364 __u32 addr;
2365 char name[32];
2366 };
2367} __attribute__ ((packed));
2368
2369struct v4l2_dbg_register {
2370 struct v4l2_dbg_match match;
2371 __u32 size;
2372 __u64 reg;
2373 __u64 val;
2374} __attribute__ ((packed));
2375
2376#define V4L2_CHIP_FL_READABLE (1 << 0)
2377#define V4L2_CHIP_FL_WRITABLE (1 << 1)
2378
2379
2380struct v4l2_dbg_chip_info {
2381 struct v4l2_dbg_match match;
2382 char name[32];
2383 __u32 flags;
2384 __u32 reserved[32];
2385} __attribute__ ((packed));
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397struct v4l2_create_buffers {
2398 __u32 index;
2399 __u32 count;
2400 __u32 memory;
2401 struct v4l2_format format;
2402 __u32 capabilities;
2403 __u32 reserved[7];
2404};
2405
2406
2407
2408
2409
2410#define VIDIOC_QUERYCAP _IOR('V', 0, struct v4l2_capability)
2411#define VIDIOC_ENUM_FMT _IOWR('V', 2, struct v4l2_fmtdesc)
2412#define VIDIOC_G_FMT _IOWR('V', 4, struct v4l2_format)
2413#define VIDIOC_S_FMT _IOWR('V', 5, struct v4l2_format)
2414#define VIDIOC_REQBUFS _IOWR('V', 8, struct v4l2_requestbuffers)
2415#define VIDIOC_QUERYBUF _IOWR('V', 9, struct v4l2_buffer)
2416#define VIDIOC_G_FBUF _IOR('V', 10, struct v4l2_framebuffer)
2417#define VIDIOC_S_FBUF _IOW('V', 11, struct v4l2_framebuffer)
2418#define VIDIOC_OVERLAY _IOW('V', 14, int)
2419#define VIDIOC_QBUF _IOWR('V', 15, struct v4l2_buffer)
2420#define VIDIOC_EXPBUF _IOWR('V', 16, struct v4l2_exportbuffer)
2421#define VIDIOC_DQBUF _IOWR('V', 17, struct v4l2_buffer)
2422#define VIDIOC_STREAMON _IOW('V', 18, int)
2423#define VIDIOC_STREAMOFF _IOW('V', 19, int)
2424#define VIDIOC_G_PARM _IOWR('V', 21, struct v4l2_streamparm)
2425#define VIDIOC_S_PARM _IOWR('V', 22, struct v4l2_streamparm)
2426#define VIDIOC_G_STD _IOR('V', 23, v4l2_std_id)
2427#define VIDIOC_S_STD _IOW('V', 24, v4l2_std_id)
2428#define VIDIOC_ENUMSTD _IOWR('V', 25, struct v4l2_standard)
2429#define VIDIOC_ENUMINPUT _IOWR('V', 26, struct v4l2_input)
2430#define VIDIOC_G_CTRL _IOWR('V', 27, struct v4l2_control)
2431#define VIDIOC_S_CTRL _IOWR('V', 28, struct v4l2_control)
2432#define VIDIOC_G_TUNER _IOWR('V', 29, struct v4l2_tuner)
2433#define VIDIOC_S_TUNER _IOW('V', 30, struct v4l2_tuner)
2434#define VIDIOC_G_AUDIO _IOR('V', 33, struct v4l2_audio)
2435#define VIDIOC_S_AUDIO _IOW('V', 34, struct v4l2_audio)
2436#define VIDIOC_QUERYCTRL _IOWR('V', 36, struct v4l2_queryctrl)
2437#define VIDIOC_QUERYMENU _IOWR('V', 37, struct v4l2_querymenu)
2438#define VIDIOC_G_INPUT _IOR('V', 38, int)
2439#define VIDIOC_S_INPUT _IOWR('V', 39, int)
2440#define VIDIOC_G_EDID _IOWR('V', 40, struct v4l2_edid)
2441#define VIDIOC_S_EDID _IOWR('V', 41, struct v4l2_edid)
2442#define VIDIOC_G_OUTPUT _IOR('V', 46, int)
2443#define VIDIOC_S_OUTPUT _IOWR('V', 47, int)
2444#define VIDIOC_ENUMOUTPUT _IOWR('V', 48, struct v4l2_output)
2445#define VIDIOC_G_AUDOUT _IOR('V', 49, struct v4l2_audioout)
2446#define VIDIOC_S_AUDOUT _IOW('V', 50, struct v4l2_audioout)
2447#define VIDIOC_G_MODULATOR _IOWR('V', 54, struct v4l2_modulator)
2448#define VIDIOC_S_MODULATOR _IOW('V', 55, struct v4l2_modulator)
2449#define VIDIOC_G_FREQUENCY _IOWR('V', 56, struct v4l2_frequency)
2450#define VIDIOC_S_FREQUENCY _IOW('V', 57, struct v4l2_frequency)
2451#define VIDIOC_CROPCAP _IOWR('V', 58, struct v4l2_cropcap)
2452#define VIDIOC_G_CROP _IOWR('V', 59, struct v4l2_crop)
2453#define VIDIOC_S_CROP _IOW('V', 60, struct v4l2_crop)
2454#define VIDIOC_G_JPEGCOMP _IOR('V', 61, struct v4l2_jpegcompression)
2455#define VIDIOC_S_JPEGCOMP _IOW('V', 62, struct v4l2_jpegcompression)
2456#define VIDIOC_QUERYSTD _IOR('V', 63, v4l2_std_id)
2457#define VIDIOC_TRY_FMT _IOWR('V', 64, struct v4l2_format)
2458#define VIDIOC_ENUMAUDIO _IOWR('V', 65, struct v4l2_audio)
2459#define VIDIOC_ENUMAUDOUT _IOWR('V', 66, struct v4l2_audioout)
2460#define VIDIOC_G_PRIORITY _IOR('V', 67, __u32)
2461#define VIDIOC_S_PRIORITY _IOW('V', 68, __u32)
2462#define VIDIOC_G_SLICED_VBI_CAP _IOWR('V', 69, struct v4l2_sliced_vbi_cap)
2463#define VIDIOC_LOG_STATUS _IO('V', 70)
2464#define VIDIOC_G_EXT_CTRLS _IOWR('V', 71, struct v4l2_ext_controls)
2465#define VIDIOC_S_EXT_CTRLS _IOWR('V', 72, struct v4l2_ext_controls)
2466#define VIDIOC_TRY_EXT_CTRLS _IOWR('V', 73, struct v4l2_ext_controls)
2467#define VIDIOC_ENUM_FRAMESIZES _IOWR('V', 74, struct v4l2_frmsizeenum)
2468#define VIDIOC_ENUM_FRAMEINTERVALS _IOWR('V', 75, struct v4l2_frmivalenum)
2469#define VIDIOC_G_ENC_INDEX _IOR('V', 76, struct v4l2_enc_idx)
2470#define VIDIOC_ENCODER_CMD _IOWR('V', 77, struct v4l2_encoder_cmd)
2471#define VIDIOC_TRY_ENCODER_CMD _IOWR('V', 78, struct v4l2_encoder_cmd)
2472
2473
2474
2475
2476
2477
2478#define VIDIOC_DBG_S_REGISTER _IOW('V', 79, struct v4l2_dbg_register)
2479#define VIDIOC_DBG_G_REGISTER _IOWR('V', 80, struct v4l2_dbg_register)
2480
2481#define VIDIOC_S_HW_FREQ_SEEK _IOW('V', 82, struct v4l2_hw_freq_seek)
2482#define VIDIOC_S_DV_TIMINGS _IOWR('V', 87, struct v4l2_dv_timings)
2483#define VIDIOC_G_DV_TIMINGS _IOWR('V', 88, struct v4l2_dv_timings)
2484#define VIDIOC_DQEVENT _IOR('V', 89, struct v4l2_event)
2485#define VIDIOC_SUBSCRIBE_EVENT _IOW('V', 90, struct v4l2_event_subscription)
2486#define VIDIOC_UNSUBSCRIBE_EVENT _IOW('V', 91, struct v4l2_event_subscription)
2487#define VIDIOC_CREATE_BUFS _IOWR('V', 92, struct v4l2_create_buffers)
2488#define VIDIOC_PREPARE_BUF _IOWR('V', 93, struct v4l2_buffer)
2489#define VIDIOC_G_SELECTION _IOWR('V', 94, struct v4l2_selection)
2490#define VIDIOC_S_SELECTION _IOWR('V', 95, struct v4l2_selection)
2491#define VIDIOC_DECODER_CMD _IOWR('V', 96, struct v4l2_decoder_cmd)
2492#define VIDIOC_TRY_DECODER_CMD _IOWR('V', 97, struct v4l2_decoder_cmd)
2493#define VIDIOC_ENUM_DV_TIMINGS _IOWR('V', 98, struct v4l2_enum_dv_timings)
2494#define VIDIOC_QUERY_DV_TIMINGS _IOR('V', 99, struct v4l2_dv_timings)
2495#define VIDIOC_DV_TIMINGS_CAP _IOWR('V', 100, struct v4l2_dv_timings_cap)
2496#define VIDIOC_ENUM_FREQ_BANDS _IOWR('V', 101, struct v4l2_frequency_band)
2497
2498
2499
2500
2501
2502#define VIDIOC_DBG_G_CHIP_INFO _IOWR('V', 102, struct v4l2_dbg_chip_info)
2503
2504#define VIDIOC_QUERY_EXT_CTRL _IOWR('V', 103, struct v4l2_query_ext_ctrl)
2505
2506
2507
2508
2509#define BASE_VIDIOC_PRIVATE 192
2510
2511#endif
2512