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