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