xref: /netbsd-src/sys/sys/videoio.h (revision 179b12252ecaf3553d9c2b7458ce62b6a2203d0c)
1 /* $NetBSD: videoio.h,v 1.7 2009/11/14 10:37:27 njoly Exp $ */
2 
3 /*-
4  * Copyright (c) 2005, 2008 Jared D. McNeill <jmcneill@invisible.ca>
5  * All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  * 1. Redistributions of source code must retain the above copyright
11  *    notice, this list of conditions and the following disclaimer.
12  * 2. The name of the author may not be used to endorse or promote products
13  *    derived from this software without specific prior written permission.
14  *
15  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
16  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
17  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
18  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
19  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
20  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
21  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
22  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
23  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25  * SUCH DAMAGE.
26  */
27 
28 /* See http://v4l2spec.bytesex.org/ for Video4Linux 2 specifications */
29 
30 #ifndef _HAVE_SYS_VIDEOIO_H
31 #define _HAVE_SYS_VIDEOIO_H
32 
33 #include <sys/types.h>
34 #include <sys/time.h>
35 
36 #ifndef _KERNEL
37 #define __u64	uint64_t
38 #define __u32	uint32_t
39 #define __u16	uint16_t
40 #define __u8	uint8_t
41 #define __s64	int64_t
42 #define __s32	int32_t
43 #define __s16	int16_t
44 #define __s8	int8_t
45 #endif
46 
47 typedef uint64_t v4l2_std_id;
48 #define v4l2_fourcc(a,b,c,d) (((uint32_t)(a) << 0) |	\
49 			      ((uint32_t)(b) << 8) |	\
50 			      ((uint32_t)(c) << 16) |	\
51 			      ((uint32_t)(d) << 24))
52 #if 0
53 #define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))
54 #endif
55 
56 #define V4L2_CTRL_ID2CLASS(id)	((id >> 16) & 0xfff)
57 #define V4L2_CTRL_ID2CID(id)	(id & 0xffff)
58 
59 enum v4l2_colorspace {
60 	V4L2_COLORSPACE_SMPTE170M = 1,
61 	V4L2_COLORSPACE_SMPTE240M,
62 	V4L2_COLORSPACE_REC709,
63 	V4L2_COLORSPACE_BT878,
64 	V4L2_COLORSPACE_470_SYSTEM_M,
65 	V4L2_COLORSPACE_470_SYSTEM_BG,
66 	V4L2_COLORSPACE_JPEG,
67 	V4L2_COLORSPACE_SRGB
68 };
69 
70 enum v4l2_field {
71 	V4L2_FIELD_ANY = 0,
72 	V4L2_FIELD_NONE,
73 	V4L2_FIELD_TOP,
74 	V4L2_FIELD_BOTTOM,
75 	V4L2_FIELD_INTERLACED,
76 	V4L2_FIELD_SEQ_TB,
77 	V4L2_FIELD_SEQ_BT,
78 	V4L2_FIELD_ALTERNATE
79 };
80 
81 enum v4l2_buf_type {
82 	V4L2_BUF_TYPE_VIDEO_CAPTURE = 1,
83 	V4L2_BUF_TYPE_VIDEO_OUTPUT,
84 	V4L2_BUF_TYPE_VIDEO_OVERLAY,
85 	V4L2_BUF_TYPE_VBI_CAPTURE,
86 	V4L2_BUF_TYPE_VBI_OUTPUT,
87 	V4L2_BUF_TYPE_PRIVATE = 0x80
88 };
89 
90 enum v4l2_memory {
91 	V4L2_MEMORY_MMAP = 1,
92 	V4L2_MEMORY_USERPTR,
93 	V4L2_MEMORY_OVERLAY
94 };
95 
96 enum v4l2_priority {
97 	V4L2_PRIORITY_UNSET = 0,
98 	V4L2_PRIORITY_BACKGROUND,
99 	V4L2_PRIORITY_INTERACTIVE,
100 	V4L2_PRIORITY_RECORD,
101 	V4L2_PRIORITY_DEFAULT = V4L2_PRIORITY_INTERACTIVE
102 };
103 
104 enum v4l2_tuner_type {
105 	V4L2_TUNER_RADIO = 1,
106 	V4L2_TUNER_ANALOG_TV
107 };
108 
109 enum v4l2_ctrl_type {
110 	V4L2_CTRL_TYPE_INTEGER = 1,
111 	V4L2_CTRL_TYPE_BOOLEAN,
112 	V4L2_CTRL_TYPE_MENU,
113 	V4L2_CTRL_TYPE_BUTTON
114 };
115 
116 struct v4l2_timecode {
117 	uint32_t	type;
118 	uint32_t	flags;
119 	uint8_t		frames;
120 	uint8_t		seconds;
121 	uint8_t		minutes;
122 	uint8_t		hours;
123 	uint8_t		userbits[4];
124 };
125 
126 struct v4l2_pix_format {
127 	uint32_t	width;
128 	uint32_t	height;
129 	uint32_t	pixelformat;
130 	enum v4l2_field	field;
131 	uint32_t	bytesperline;
132 	uint32_t	sizeimage;
133 	enum v4l2_colorspace colorspace;
134 	uint32_t	priv;
135 };
136 
137 struct v4l2_buffer {
138 	uint32_t	index;
139 	enum v4l2_buf_type type;
140 	uint32_t	bytesused;
141 	uint32_t	flags;
142 	enum v4l2_field	field;
143 	struct timeval	timestamp;
144 	struct v4l2_timecode timecode;
145 	uint32_t	sequence;
146 	enum v4l2_memory memory;
147 	union {
148 		uint32_t	offset;
149 		unsigned long	userptr;
150 	} m;
151 	uint32_t	length;
152 	uint32_t	input;
153 	uint32_t	reserved;
154 };
155 
156 struct v4l2_buffer32 {
157 	uint32_t	index;
158 	enum v4l2_buf_type type;
159 	uint32_t	bytesused;
160 	uint32_t	flags;
161 	enum v4l2_field	field;
162 	struct {
163 		uint32_t tv_sec;
164 		uint32_t tv_usec;
165 	} timestamp;
166 	struct v4l2_timecode timecode;
167 	uint32_t	sequence;
168 	enum v4l2_memory memory;
169 	union {
170 		uint32_t offset;
171 		uint32_t userptr;
172 	} m;
173 	uint32_t	length;
174 	uint32_t	input;
175 	uint32_t	reserved;
176 };
177 
178 struct v4l2_rect {
179 	int32_t		left;
180 	int32_t		top;
181 	int32_t		width;
182 	int32_t		height;
183 };
184 
185 struct v4l2_fract {
186 	uint32_t	numerator;
187 	uint32_t	denominator;
188 };
189 
190 struct v4l2_fmtdesc {
191 	uint32_t	index;
192 	enum v4l2_buf_type type;
193 	uint32_t	flags;
194 	uint8_t		description[32];
195 	uint32_t	pixelformat;
196 	uint32_t	reserved[4];
197 };
198 
199 struct v4l2_clip {
200 	struct v4l2_rect c;
201 	struct v4l2_clip *next;
202 };
203 
204 struct v4l2_window {
205 	struct v4l2_rect w;
206 	enum v4l2_field	field;
207 	uint32_t	chromakey;
208 	struct v4l2_clip *clips;
209 	uint32_t	clipcount;
210 	void		*bitmap;
211 };
212 
213 struct v4l2_vbi_format {
214 	uint32_t	sampling_rate;
215 	uint32_t	offset;
216 	uint32_t	samples_per_line;
217 	uint32_t	sample_format;
218 	uint32_t	start[2];
219 	uint32_t	count[2];
220 	uint32_t	flags;
221 	uint32_t	reserved[2];
222 };
223 
224 /* In the API docs, but not the Linux implementation
225  *
226  * struct v4l2_sliced_vbi_format {
227  * 	uint32_t	service_set;
228  * 	uint32_t	packet_size;
229  * 	uint32_t	io_size;
230  * 	uint32_t	reserved;
231  * };
232  *
233  *
234  * struct v4l2_sliced_data {
235  * 	uint32_t	id;
236  * 	uint32_t	line;
237  * 	uint8_t		data[];
238  * };
239  */
240 
241 struct v4l2_cropcap {
242 	enum v4l2_buf_type type;
243 	struct v4l2_rect bounds;
244 	struct v4l2_rect defrect;
245 	struct v4l2_fract pixelaspect;
246 };
247 
248 struct v4l2_input {
249 	uint32_t	index;
250 	uint8_t		name[32];
251 	uint32_t	type;
252 	uint32_t	audioset;
253 	uint32_t	tuner;
254 	v4l2_std_id	std;
255 	uint32_t	status;
256 	uint32_t	reserved[4];
257 };
258 
259 struct v4l2_output {
260 	uint32_t	index;
261 	uint8_t		name[32];
262 	uint32_t	type;
263 	uint32_t	audioset;
264 	uint32_t	modulator;
265 	v4l2_std_id	std;
266 	uint32_t	reserved[4];
267 };
268 
269 struct v4l2_audio {
270 	uint32_t	index;
271 	uint8_t		name[32];
272 	uint32_t	capability;
273 	uint32_t	mode;
274 	uint32_t	reserved[2];
275 };
276 
277 struct v4l2_audioout {
278 	uint32_t	index;
279 	uint8_t		name[32];
280 	uint32_t	capability;
281 	uint32_t	mode;
282 	uint32_t	reserved[2];
283 };
284 
285 struct v4l2_compression {
286 	uint32_t	quality;
287 	uint32_t	keyframerate;
288 	uint32_t	pframerate;
289 	uint32_t	reserved[5];
290 };
291 
292 struct v4l2_crop {
293 	enum v4l2_buf_type type;
294 	struct v4l2_rect c;
295 };
296 
297 struct v4l2_control {
298 	uint32_t	id;
299 	int32_t		value;
300 };
301 
302 struct v4l2_framebuffer {
303 	uint32_t	capability;
304 	uint32_t	flags;
305 	void		*base;
306 	struct v4l2_pix_format fmt;
307 };
308 
309 struct v4l2_standard {
310 	uint32_t	index;
311 	v4l2_std_id	id;
312 	uint8_t		name[24];
313 	struct v4l2_fract frameperiod;
314 	uint32_t	framelines;
315 	uint32_t	reserved[4];
316 };
317 
318 struct v4l2_format {
319 	enum v4l2_buf_type type;
320 	union {
321 		struct v4l2_pix_format pix;
322 		struct v4l2_window win;
323 		struct v4l2_vbi_format vbi;
324 		uint8_t		raw_data[200];
325 	} fmt;
326 } __packed;
327 
328 struct v4l2_frequency {
329 	uint32_t	tuner;
330 	enum v4l2_tuner_type type;
331 	uint32_t	frequency;
332 	uint32_t	reserved[8];
333 };
334 
335 struct v4l2_jpegcompression {
336 	int		quality;
337 	int		APPn;
338 	int		APP_len;
339 	char		APP_data[60];
340 	int		COM_len;
341 	char		COM_data[60];
342 	uint32_t	jpeg_markers;
343 };
344 
345 struct v4l2_modulator {
346 	uint32_t	index;
347 	uint8_t		name[32];
348 	uint32_t	capability;
349 	uint32_t	rangelow;
350 	uint32_t	rangehigh;
351 	uint32_t	txsubchans;
352 	uint32_t	reserved[4];
353 };
354 
355 struct v4l2_captureparm {
356 	uint32_t	capability;
357 	uint32_t	capturemode;
358 	struct v4l2_fract timeperframe;
359 	uint32_t	extendedmode;
360 	uint32_t	readbuffers;
361 	uint32_t	reserved[4];
362 };
363 
364 struct v4l2_outputparm {
365 	uint32_t	capability;
366 	uint32_t	outputmode;
367 	struct v4l2_fract timeperframe;
368 	uint32_t	extendedmode;
369 	uint32_t	writebuffers;
370 	uint32_t	reserved[4];
371 };
372 
373 struct v4l2_streamparm {
374 	enum v4l2_buf_type type;
375 	union {
376 		struct v4l2_captureparm capture;
377 		struct v4l2_outputparm output;
378 		uint8_t		raw_data[200];
379 	} parm;
380 };
381 
382 struct v4l2_tuner {
383 	uint32_t	index;
384 	uint8_t		name[32];
385 	enum v4l2_tuner_type type;
386 	uint32_t	capability;
387 	uint32_t	rangelow;
388 	uint32_t	rangehigh;
389 	uint32_t	rxsubchans;
390 	uint32_t	audmode;
391 	uint32_t	signal;
392 	int32_t		afc;
393 	uint32_t	reserved[4];
394 };
395 
396 struct v4l2_capability {
397 	uint8_t		driver[16];
398 	uint8_t		card[32];
399 	uint8_t		bus_info[32];
400 	uint32_t	version;
401 	uint32_t	capabilities;
402 	uint32_t	reserved[4];
403 };
404 
405 struct v4l2_queryctrl {
406 	uint32_t	id;
407 	enum v4l2_ctrl_type type;
408 	uint8_t		name[32];
409 	int32_t		minimum;
410 	int32_t		maximum;
411 	int32_t		step;
412 	int32_t		default_value;
413 	uint32_t	flags;
414 	uint32_t	reserved[2];
415 };
416 
417 struct v4l2_querymenu {
418 	uint32_t	id;
419 	uint32_t	index;
420 	uint8_t		name[32];
421 	uint32_t	reserved;
422 };
423 
424 struct v4l2_requestbuffers {
425 	uint32_t	count;
426 	enum v4l2_buf_type type;
427 	enum v4l2_memory memory;
428 	uint32_t	reserved[2];
429 };
430 
431 /* Timecode types */
432 #define V4L2_TC_TYPE_24FPS		1
433 #define V4L2_TC_TYPE_25FPS		2
434 #define V4L2_TC_TYPE_30FPS		3
435 #define V4L2_TC_TYPE_50FPS		4
436 #define V4L2_TC_TYPE_60FPS		5
437 
438 /* Timecode flags */
439 #define V4L2_TC_FLAG_DROPFRAME		0x0001
440 #define V4L2_TC_FLAG_COLORFRAME		0x0002
441 #define V4L2_TC_USERBITS_field		0x000c
442 #define V4L2_TC_USERBITS_USERDEFINED	0x0000
443 #define V4L2_TC_USERBITS_8BITCHARS	0x0008
444 
445 /* Buffer flags */
446 #define V4L2_BUF_FLAG_MAPPED		0x0001
447 #define V4L2_BUF_FLAG_QUEUED		0x0002
448 #define V4L2_BUF_FLAG_DONE		0x0004
449 #define V4L2_BUF_FLAG_KEYFRAME		0x0008
450 #define V4L2_BUF_FLAG_PFRAME		0x0010
451 #define V4L2_BUF_FLAG_BFRAME		0x0020
452 #define V4L2_BUF_FLAG_TIMECODE		0x0100
453 #define V4L2_BUF_FLAG_INPUT		0x0200
454 
455 /* Image format description flags */
456 #define V4L2_FMT_FLAG_COMPRESSED	0x0001
457 
458 /* Input types */
459 #define V4L2_INPUT_TYPE_TUNER		1
460 #define V4L2_INPUT_TYPE_CAMERA		2
461 
462 /* Input status flags */
463 #define V4L2_IN_ST_NO_POWER		0x00000001
464 #define V4L2_IN_ST_NO_SIGNAL		0x00000002
465 #define V4L2_IN_ST_NO_COLOR		0x00000004
466 #define V4L2_IN_ST_NO_H_LOCK		0x00000100
467 #define V4L2_IN_ST_COLOR_KILL		0x00000200
468 #define V4L2_IN_ST_NO_SYNC		0x00010000
469 #define V4L2_IN_ST_NO_EQU		0x00020000
470 #define V4L2_IN_ST_NO_CARRIER		0x00040000
471 #define V4L2_IN_ST_MACROVISION		0x01000000
472 #define V4L2_IN_ST_NO_ACCESS		0x02000000
473 #define V4L2_IN_ST_VTR			0x04000000
474 
475 /* Output types */
476 #define V4L2_OUTPUT_TYPE_MODULATOR		1
477 #define V4L2_OUTPUT_TYPE_ANALOG			2
478 #define V4L2_OUTPUT_TYPE_ANALOGVGAOVERLAY	3
479 
480 /* Audio capability flags */
481 #define V4L2_AUDCAP_STEREO		0x00001
482 #define V4L2_AUDCAP_AVL			0x00002
483 
484 /* Audio modes */
485 #define V4L2_AUDMODE_AVL		0x00001
486 
487 /* Frame buffer capability flags */
488 #define V4L2_FBUF_CAP_EXTERNOVERLAY	0x0001
489 #define V4L2_FBUF_CAP_CHROMAKEY		0x0002
490 #define V4L2_FBUF_CAP_LIST_CLIPPING	0x0004
491 #define V4L2_FBUF_CAP_BITMAP_CLIPPING	0x0008
492 
493 /* Frame buffer flags */
494 #define V4L2_FBUF_FLAG_PRIMARY		0x0001
495 #define V4L2_FBUF_FLAG_OVERLAY		0x0002
496 #define V4L2_FBUF_FLAG_CHROMAKEY	0x0004
497 
498 /* JPEG markers flags */
499 #define V4L2_JPEG_MARKER_DHT		(1 << 3)
500 #define V4L2_JPEG_MARKER_DQT		(1 << 4)
501 #define V4L2_JPEG_MARKER_DRI		(1 << 5)
502 #define V4L2_JPEG_MARKER_COM		(1 << 6)
503 #define V4L2_JPEG_MARKER_APP		(1 << 7)
504 
505 /* Streaming parameters capabilities */
506 #define V4L2_CAP_TIMEPERFRAME		0x1000
507 
508 /* Capture parameters flags */
509 #define V4L2_MODE_HIGHQUALITY		0x0001
510 
511 /* Tuner and modulator capability flags */
512 #define V4L2_TUNER_CAP_LOW		0x0001
513 #define V4L2_TUNER_CAP_NORM		0x0002
514 #define V4L2_TUNER_CAP_STEREO		0x0010
515 #define V4L2_TUNER_CAP_LANG2		0x0020
516 #define V4L2_TUNER_CAP_SAP		0x0020
517 #define V4L2_TUNER_CAP_LANG1		0x0040
518 
519 /* Tuner and modulation audio transmission flags */
520 #define V4L2_TUNER_SUB_MONO		0x0001
521 #define V4L2_TUNER_SUB_STEREO		0x0002
522 #define V4L2_TUNER_SUB_LANG2		0x0004
523 #define V4L2_TUNER_SUB_SAP		0x0004
524 #define V4L2_TUNER_SUB_LANG1		0x0008
525 
526 /* Tuner audio modes */
527 #define V4L2_TUNER_MODE_MONO		0
528 #define V4L2_TUNER_MODE_STEREO		1
529 #define V4L2_TUNER_MODE_LANG2		2
530 #define V4L2_TUNER_MODE_SAP		2
531 #define V4L2_TUNER_MODE_LANG1		3
532 #define V4L2_TUNER_MODE_LANG1_LANG2	4
533 
534 /* Control flags */
535 #define V4L2_CTRL_FLAG_DISABLED		0x0001
536 #define V4L2_CTRL_FLAG_GRABBED		0x0002
537 #define V4L2_CTRL_FLAG_READ_ONLY	0x0004
538 #define V4L2_CTRL_FLAG_UPDATE		0x0008
539 #define V4L2_CTRL_FLAG_INACTIVE		0x0010
540 #define V4L2_CTRL_FLAG_SLIDER		0x0020
541 
542 /* Control IDs defined by V4L2 */
543 #define V4L2_CID_BASE			0x00980900
544 #define V4L2_CID_PRIVATE_BASE		0x08000000
545 
546 #define V4L2_CID_BRIGHTNESS		(V4L2_CID_BASE + 0)
547 #define V4L2_CID_CONTRAST		(V4L2_CID_BASE + 1)
548 #define V4L2_CID_SATURATION		(V4L2_CID_BASE + 2)
549 #define V4L2_CID_HUE			(V4L2_CID_BASE + 3)
550 #define V4L2_CID_AUDIO_VOLUME		(V4L2_CID_BASE + 5)
551 #define V4L2_CID_AUDIO_BALANCE		(V4L2_CID_BASE + 6)
552 #define V4L2_CID_AUDIO_BASS		(V4L2_CID_BASE + 7)
553 #define V4L2_CID_AUDIO_TREBLE		(V4L2_CID_BASE + 8)
554 #define V4L2_CID_AUDIO_MUTE		(V4L2_CID_BASE + 9)
555 #define V4L2_CID_AUDIO_LOUDNESS		(V4L2_CID_BASE + 10)
556 #define V4L2_CID_BLACK_LEVEL		(V4L2_CID_BASE + 11)
557 #define V4L2_CID_AUTO_WHITE_BALANCE	(V4L2_CID_BASE + 12)
558 #define V4L2_CID_DO_WHITE_BALANCE	(V4L2_CID_BASE + 13)
559 #define V4L2_CID_RED_BALANCE		(V4L2_CID_BASE + 14)
560 #define V4L2_CID_BLUE_BALANCE		(V4L2_CID_BASE + 15)
561 #define V4L2_CID_GAMMA			(V4L2_CID_BASE + 16)
562 #define V4L2_CID_WHITENESS		(V4L2_CID_GAMMA)
563 #define V4L2_CID_EXPOSURE		(V4L2_CID_BASE + 17)
564 #define V4L2_CID_AUTOGAIN		(V4L2_CID_BASE + 18)
565 #define V4L2_CID_GAIN			(V4L2_CID_BASE + 19)
566 #define V4L2_CID_HFLIP			(V4L2_CID_BASE + 20)
567 #define V4L2_CID_VFLIP			(V4L2_CID_BASE + 21)
568 #define V4L2_CID_HCENTER_DEPRECATED	(V4L2_CID_BASE + 22)
569 #define V4L2_CID_VCENTER_DEPRECATED	(V4L2_CID_BASE + 23)
570 #define V4L2_CID_HCENTER	V4L2_CID_HCENTER_DEPRECATED
571 #define V4L2_CID_VCENTER	V4L2_CID_VCENTER_DEPRECATED
572 #define V4L2_CID_POWER_LINE_FREQUENCY	(V4L2_CID_BASE + 24)
573 #define V4L2_CID_HUE_AUTO		(V4L2_CID_BASE + 25)
574 #define V4L2_CID_WHITE_BALANCE_TEMPERATURE (V4L2_CID_BASE + 26)
575 #define V4L2_CID_SHARPNESS		(V4L2_CID_BASE + 27)
576 #define V4L2_CID_BACKLIGHT_COMPENSATION	(V4L2_CID_BASE + 28)
577 #define V4L2_CID_LASTP1			(V4L2_CID_BASE + 29)
578 
579 /* Pixel formats */
580 #define V4L2_PIX_FMT_RGB332	v4l2_fourcc('R', 'G', 'B', '1')
581 #define V4L2_PIX_FMT_RGB555	v4l2_fourcc('R', 'G', 'B', 'O')
582 #define V4L2_PIX_FMT_RGB565	v4l2_fourcc('R', 'G', 'B', 'P')
583 #define V4L2_PIX_FMT_RGB555X	v4l2_fourcc('R', 'G', 'B', 'Q')
584 #define V4L2_PIX_FMT_RGB565X	v4l2_fourcc('R', 'G', 'B', 'R')
585 #define V4L2_PIX_FMT_BGR24	v4l2_fourcc('B', 'G', 'R', '3')
586 #define V4L2_PIX_FMT_RGB24	v4l2_fourcc('R', 'G', 'B', '3')
587 #define V4L2_PIX_FMT_BGR32	v4l2_fourcc('B', 'G', 'R', '4')
588 #define V4L2_PIX_FMT_RGB32	v4l2_fourcc('R', 'G', 'B', '4')
589 #define V4L2_PIX_FMT_GREY	v4l2_fourcc('G', 'R', 'E', 'Y')
590 #define V4L2_PIX_FMT_YUYV	v4l2_fourcc('Y', 'U', 'Y', 'V')
591 #define V4L2_PIX_FMT_UYVY	v4l2_fourcc('U', 'Y', 'V', 'Y')
592 #define V4L2_PIX_FMT_Y41P	v4l2_fourcc('Y', '4', '1', 'P')
593 #define V4L2_PIX_FMT_YVU420	v4l2_fourcc('Y', 'V', '1', '2')
594 #define V4L2_PIX_FMT_YUV420	v4l2_fourcc('Y', 'U', '1', '2')
595 #define V4L2_PIX_FMT_YVU410	v4l2_fourcc('Y', 'V', 'U', '9')
596 #define V4L2_PIX_FMT_YUV410	v4l2_fourcc('Y', 'U', 'V', '9')
597 #define V4L2_PIX_FMT_YUV422P	v4l2_fourcc('4', '2', '2', 'P')
598 #define V4L2_PIX_FMT_YUV411P	v4l2_fourcc('Y', '1', '1', 'P')
599 #define V4L2_PIX_FMT_NV12	v4l2_fourcc('N', 'V', '1', '2')
600 #define V4L2_PIX_FMT_NV21	v4l2_fourcc('N', 'V', '2', '1')
601 /* http://www.siliconimaging.com/RGB%20Bayer.htm */
602 #define V4L2_PIX_FMT_SBGGR8	v4l2_fourcc('B', 'A', '8', '1')
603 /* Reserved pixel formats */
604 #define V4L2_PIX_FMT_YYUV	v4l2_fourcc('Y', 'Y', 'U', 'V')
605 #define V4L2_PIX_FMT_HI240	v4l2_fourcc('H', 'I', '2', '4')
606 #define V4L2_PIX_FMT_MJPEG	v4l2_fourcc('M', 'J', 'P', 'G')
607 #define V4L2_PIX_FMT_JPEG	v4l2_fourcc('J', 'P', 'E', 'G')
608 #define V4L2_PIX_FMT_DV		v4l2_fourcc('d', 'v', 's', 'd')
609 #define V4L2_PIX_FMT_MPEG	v4l2_fourcc('M', 'P', 'E', 'G')
610 #define V4L2_PIX_FMT_WNVA	v4l2_fourcc('W', 'N', 'V', 'A')
611 #define V4L2_PIX_FMT_SN9C10X	v4l2_fourcc('S', '9', '1', '0')
612 
613 /* Video standards */
614 #define V4L2_STD_PAL_B		((v4l2_std_id)0x00000001)
615 #define V4L2_STD_PAL_B1		((v4l2_std_id)0x00000002)
616 #define V4L2_STD_PAL_G		((v4l2_std_id)0x00000004)
617 #define V4L2_STD_PAL_H		((v4l2_std_id)0x00000008)
618 #define V4L2_STD_PAL_I		((v4l2_std_id)0x00000010)
619 #define V4L2_STD_PAL_D		((v4l2_std_id)0x00000020)
620 #define V4L2_STD_PAL_D1		((v4l2_std_id)0x00000040)
621 #define V4L2_STD_PAL_K		((v4l2_std_id)0x00000080)
622 #define V4L2_STD_PAL_M		((v4l2_std_id)0x00000100)
623 #define V4L2_STD_PAL_N		((v4l2_std_id)0x00000200)
624 #define V4L2_STD_PAL_Nc		((v4l2_std_id)0x00000400)
625 #define V4L2_STD_PAL_60		((v4l2_std_id)0x00000800)
626 #define V4L2_STD_NTSC_M		((v4l2_std_id)0x00001000)
627 #define V4L2_STD_NTSC_M_JP	((v4l2_std_id)0x00002000)
628 #define V4L2_STD_SECAM_B	((v4l2_std_id)0x00010000)
629 #define V4L2_STD_SECAM_D	((v4l2_std_id)0x00020000)
630 #define V4L2_STD_SECAM_G	((v4l2_std_id)0x00040000)
631 #define V4L2_STD_SECAM_H	((v4l2_std_id)0x00080000)
632 #define V4L2_STD_SECAM_K	((v4l2_std_id)0x00100000)
633 #define V4L2_STD_SECAM_K1	((v4l2_std_id)0x00200000)
634 #define V4L2_STD_SECAM_L	((v4l2_std_id)0x00400000)
635 #define V4L2_STD_ATSC_8_VSB	((v4l2_std_id)0x01000000)
636 #define V4L2_STD_ATSC_16_VSB	((v4l2_std_id)0x02000000)
637 #define V4L2_STD_PAL_BG		(V4L2_STD_PAL_B |	\
638 				 V4L2_STD_PAL_B1 |	\
639 				 V4L2_STD_PAL_G)
640 #define V4L2_STD_PAL_DK		(V4L2_STD_PAL_D |	\
641 				 V4L2_STD_PAL_D1 |	\
642 				 V4L2_STD_PAL_K)
643 #define V4L2_STD_PAL		(V4L2_STD_PAL_BG |	\
644 				 V4L2_STD_PAL_DK |	\
645 				 V4L2_STD_PAL_H |	\
646 				 V4L2_STD_PAL_I)
647 #define V4L2_STD_NTSC		(V4L2_STD_NTSC_M |	\
648 				 V4L2_STD_NTSC_M_JP)
649 #define V4L2_STD_SECAM		(V4L2_STD_SECAM_B |	\
650 				 V4L2_STD_SECAM_D |	\
651 				 V4L2_STD_SECAM_G |	\
652 				 V4L2_STD_SECAM_H |	\
653 				 V4L2_STD_SECAM_K |	\
654 				 V4L2_STD_SECAM_K1 |	\
655 				 V4L2_STD_SECAM_L)
656 #define V4L2_STD_525_60		(V4L2_STD_PAL_M |	\
657 				 V4L2_STD_PAL_60 |	\
658 				 V4L2_STD_NTSC)
659 #define V4L2_STD_625_50		(V4L2_STD_PAL |		\
660 				 V4L2_STD_PAL_N |	\
661 				 V4L2_STD_PAL_Nc |	\
662 				 V4L2_STD_SECAM)
663 #define V4L2_STD_UNKNOWN	0
664 #define V4L2_STD_ALL		(V4L2_STD_525_60 |	\
665 				 V4L2_STD_625_50)
666 
667 /* Raw VBI format flags */
668 #define V4L2_VBI_UNSYNC			0x0001
669 #define V4L2_VBI_INTERLACED		0x0002
670 
671 /* Device capabilities */
672 #define V4L2_CAP_VIDEO_CAPTURE		0x00000001
673 #define V4L2_CAP_VIDEO_OUTPUT		0x00000002
674 #define V4L2_CAP_VIDEO_OVERLAY		0x00000004
675 #define V4L2_CAP_VBI_CAPTURE		0x00000010
676 #define V4L2_CAP_VBI_OUTPUT		0x00000020
677 #define V4L2_CAP_RDS_CAPTURE		0x00000100
678 #define V4L2_CAP_TUNER			0x00010000
679 #define V4L2_CAP_AUDIO			0x00020000
680 #define V4L2_CAP_READWRITE		0x01000000
681 #define V4L2_CAP_ASYNCIO		0x02000000
682 #define V4L2_CAP_STREAMING		0x04000000
683 #define V4L2_CAP_BITMASK	\
684 	"\20\1VIDEO_CAPTURE\2VIDEO_OUTPUT\3VIDEO_OVERLAY"	\
685 	"\5VBI_CAPTURE\6VBI_OUTPUT\10RDS_CAPTURE"		\
686 	"\21TUNER\22AUDIO\31READWRITE"				\
687 	"\32ASYNCIO\33STREAMING"
688 
689 /* Device ioctls -- try to keep them the same as Linux for compat_linux */
690 #define VIDIOC_QUERYCAP		_IOR('V', 0, struct v4l2_capability)
691 #define VIDIOC_RESERVED		_IO('V', 1)
692 #define VIDIOC_ENUM_FMT		_IOWR('V', 2, struct v4l2_fmtdesc)
693 #define VIDIOC_G_FMT		_IOWR('V', 4, struct v4l2_format)
694 #define VIDIOC_S_FMT		_IOWR('V', 5, struct v4l2_format)
695 /* 6 and 7 are VIDIOC_[SG]_COMP, which are unsupported */
696 #define VIDIOC_REQBUFS		_IOWR('V', 8, struct v4l2_requestbuffers)
697 #define VIDIOC_QUERYBUF		_IOWR('V', 9, struct v4l2_buffer)
698 #define VIDIOC_QUERYBUF32	_IOWR('V', 9, struct v4l2_buffer32)
699 #define VIDIOC_G_FBUF		_IOR('V', 10, struct v4l2_framebuffer)
700 #define VIDIOC_S_FBUF		_IOW('V', 11, struct v4l2_framebuffer)
701 #define VIDIOC_OVERLAY		_IOW('V', 14, int)
702 #define VIDIOC_QBUF		_IOWR('V', 15, struct v4l2_buffer)
703 #define VIDIOC_QBUF32		_IOWR('V', 15, struct v4l2_buffer32)
704 #define VIDIOC_DQBUF		_IOWR('V', 17, struct v4l2_buffer)
705 #define VIDIOC_DQBUF32		_IOWR('V', 17, struct v4l2_buffer32)
706 #define VIDIOC_STREAMON		_IOW('V', 18, int)
707 #define VIDIOC_STREAMOFF	_IOW('V', 19, int)
708 #define VIDIOC_G_PARM		_IOWR('V', 21, struct v4l2_streamparm)
709 #define VIDIOC_S_PARM		_IOWR('V', 22, struct v4l2_streamparm)
710 #define VIDIOC_G_STD		_IOR('V', 23, v4l2_std_id)
711 #define VIDIOC_S_STD		_IOW('V', 24, v4l2_std_id)
712 #define VIDIOC_ENUMSTD		_IOWR('V', 25, struct v4l2_standard)
713 #define VIDIOC_ENUMINPUT	_IOWR('V', 26, struct v4l2_input)
714 #define VIDIOC_G_CTRL		_IOWR('V', 27, struct v4l2_control)
715 #define VIDIOC_S_CTRL		_IOWR('V', 28, struct v4l2_control)
716 #define VIDIOC_G_TUNER		_IOWR('V', 29, struct v4l2_tuner)
717 #define VIDIOC_S_TUNER		_IOW('V', 30, struct v4l2_tuner)
718 #define VIDIOC_G_AUDIO		_IOR('V', 33, struct v4l2_audio)
719 #define VIDIOC_S_AUDIO		_IOW('V', 34, struct v4l2_audio)
720 #define VIDIOC_QUERYCTRL	_IOWR('V', 36, struct v4l2_queryctrl)
721 #define VIDIOC_QUERYMENU	_IOWR('V', 37, struct v4l2_querymenu)
722 #define VIDIOC_G_INPUT		_IOR('V', 38, int)
723 #define VIDIOC_S_INPUT		_IOWR('V', 39, int)
724 #define VIDIOC_G_OUTPUT		_IOR('V', 46, int)
725 #define VIDIOC_S_OUTPUT		_IOWR('V', 47, int)
726 #define VIDIOC_ENUMOUTPUT	_IOWR('V', 48, struct v4l2_output)
727 #define VIDIOC_G_AUDOUT		_IOR('V', 49, struct v4l2_audioout)
728 #define VIDIOC_S_AUDOUT		_IOW('V', 50, struct v4l2_audioout)
729 #define VIDIOC_G_MODULATOR	_IOWR('V', 54, struct v4l2_modulator)
730 #define VIDIOC_S_MODULATOR	_IOW('V', 55, struct v4l2_modulator)
731 #define VIDIOC_G_FREQUENCY	_IOWR('V', 56, struct v4l2_frequency)
732 #define VIDIOC_S_FREQUENCY	_IOW('V', 57, struct v4l2_frequency)
733 #define VIDIOC_CROPCAP		_IOWR('V', 58, struct v4l2_cropcap)
734 #define VIDIOC_G_CROP		_IOWR('V', 59, struct v4l2_crop)
735 #define VIDIOC_S_CROP		_IOW('V', 60, struct v4l2_crop)
736 #define VIDIOC_G_JPEGCOMP	_IOR('V', 61, struct v4l2_jpegcompression)
737 #define VIDIOC_S_JPEGCOMP	_IOW('V', 62, struct v4l2_jpegcompression)
738 #define VIDIOC_QUERYSTD		_IOR('V', 63, v4l2_std_id)
739 #define VIDIOC_TRY_FMT		_IOWR('V', 64, struct v4l2_format)
740 #define VIDIOC_ENUMAUDIO	_IOWR('V', 65, struct v4l2_audio)
741 #define VIDIOC_ENUMAUDOUT	_IOWR('V', 66, struct v4l2_audioout)
742 #define VIDIOC_G_PRIORITY	_IOR('V', 67, enum v4l2_priority)
743 #define VIDIOC_S_PRIORITY	_IOW('V', 68, enum v4l2_priority)
744 
745 #endif /* !_HAVE_SYS_VIDEOIO_H */
746