xref: /openbmc/linux/include/linux/videodev2.h (revision 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2)
1 #ifndef __LINUX_VIDEODEV2_H
2 #define __LINUX_VIDEODEV2_H
3 /*
4  *	Video for Linux Two
5  *
6  *	Header file for v4l or V4L2 drivers and applications, for
7  *	Linux kernels 2.2.x or 2.4.x.
8  *
9  *	See http://bytesex.org/v4l/ for API specs and other
10  *	v4l2 documentation.
11  *
12  *	Author: Bill Dirks <bdirks@pacbell.net>
13  *		Justin Schoeman
14  *		et al.
15  */
16 #ifdef __KERNEL__
17 #include <linux/time.h> /* need struct timeval */
18 #endif
19 #include <linux/compiler.h> /* need __user */
20 
21 /*
22  *	M I S C E L L A N E O U S
23  */
24 
25 /*  Four-character-code (FOURCC) */
26 #define v4l2_fourcc(a,b,c,d)\
27         (((__u32)(a)<<0)|((__u32)(b)<<8)|((__u32)(c)<<16)|((__u32)(d)<<24))
28 
29 /*
30  *	E N U M S
31  */
32 enum v4l2_field {
33 	V4L2_FIELD_ANY        = 0, /* driver can choose from none,
34 				      top, bottom, interlaced
35 				      depending on whatever it thinks
36 				      is approximate ... */
37 	V4L2_FIELD_NONE       = 1, /* this device has no fields ... */
38 	V4L2_FIELD_TOP        = 2, /* top field only */
39 	V4L2_FIELD_BOTTOM     = 3, /* bottom field only */
40 	V4L2_FIELD_INTERLACED = 4, /* both fields interlaced */
41 	V4L2_FIELD_SEQ_TB     = 5, /* both fields sequential into one
42 				      buffer, top-bottom order */
43 	V4L2_FIELD_SEQ_BT     = 6, /* same as above + bottom-top order */
44 	V4L2_FIELD_ALTERNATE  = 7, /* both fields alternating into
45 				      separate buffers */
46 };
47 #define V4L2_FIELD_HAS_TOP(field)	\
48 	((field) == V4L2_FIELD_TOP 	||\
49 	 (field) == V4L2_FIELD_INTERLACED ||\
50 	 (field) == V4L2_FIELD_SEQ_TB	||\
51 	 (field) == V4L2_FIELD_SEQ_BT)
52 #define V4L2_FIELD_HAS_BOTTOM(field)	\
53 	((field) == V4L2_FIELD_BOTTOM 	||\
54 	 (field) == V4L2_FIELD_INTERLACED ||\
55 	 (field) == V4L2_FIELD_SEQ_TB	||\
56 	 (field) == V4L2_FIELD_SEQ_BT)
57 #define V4L2_FIELD_HAS_BOTH(field)	\
58 	((field) == V4L2_FIELD_INTERLACED ||\
59 	 (field) == V4L2_FIELD_SEQ_TB	||\
60 	 (field) == V4L2_FIELD_SEQ_BT)
61 
62 enum v4l2_buf_type {
63 	V4L2_BUF_TYPE_VIDEO_CAPTURE  = 1,
64 	V4L2_BUF_TYPE_VIDEO_OUTPUT   = 2,
65 	V4L2_BUF_TYPE_VIDEO_OVERLAY  = 3,
66 	V4L2_BUF_TYPE_VBI_CAPTURE    = 4,
67 	V4L2_BUF_TYPE_VBI_OUTPUT     = 5,
68 	V4L2_BUF_TYPE_PRIVATE        = 0x80,
69 };
70 
71 enum v4l2_ctrl_type {
72 	V4L2_CTRL_TYPE_INTEGER	     = 1,
73 	V4L2_CTRL_TYPE_BOOLEAN	     = 2,
74 	V4L2_CTRL_TYPE_MENU	     = 3,
75 	V4L2_CTRL_TYPE_BUTTON	     = 4,
76 };
77 
78 enum v4l2_tuner_type {
79 	V4L2_TUNER_RADIO	     = 1,
80 	V4L2_TUNER_ANALOG_TV	     = 2,
81 	V4L2_TUNER_DIGITAL_TV	     = 3,
82 };
83 
84 enum v4l2_memory {
85 	V4L2_MEMORY_MMAP             = 1,
86 	V4L2_MEMORY_USERPTR          = 2,
87 	V4L2_MEMORY_OVERLAY          = 3,
88 };
89 
90 /* see also http://vektor.theorem.ca/graphics/ycbcr/ */
91 enum v4l2_colorspace {
92 	/* ITU-R 601 -- broadcast NTSC/PAL */
93 	V4L2_COLORSPACE_SMPTE170M     = 1,
94 
95 	/* 1125-Line (US) HDTV */
96 	V4L2_COLORSPACE_SMPTE240M     = 2,
97 
98 	/* HD and modern captures. */
99 	V4L2_COLORSPACE_REC709        = 3,
100 
101 	/* broken BT878 extents (601, luma range 16-253 instead of 16-235) */
102 	V4L2_COLORSPACE_BT878         = 4,
103 
104 	/* These should be useful.  Assume 601 extents. */
105 	V4L2_COLORSPACE_470_SYSTEM_M  = 5,
106 	V4L2_COLORSPACE_470_SYSTEM_BG = 6,
107 
108 	/* I know there will be cameras that send this.  So, this is
109 	 * unspecified chromaticities and full 0-255 on each of the
110 	 * Y'CbCr components
111 	 */
112 	V4L2_COLORSPACE_JPEG          = 7,
113 
114 	/* For RGB colourspaces, this is probably a good start. */
115 	V4L2_COLORSPACE_SRGB          = 8,
116 };
117 
118 enum v4l2_priority {
119 	V4L2_PRIORITY_UNSET       = 0,  /* not initialized */
120 	V4L2_PRIORITY_BACKGROUND  = 1,
121 	V4L2_PRIORITY_INTERACTIVE = 2,
122 	V4L2_PRIORITY_RECORD      = 3,
123 	V4L2_PRIORITY_DEFAULT     = V4L2_PRIORITY_INTERACTIVE,
124 };
125 
126 struct v4l2_rect {
127 	__s32   left;
128 	__s32   top;
129 	__s32   width;
130 	__s32   height;
131 };
132 
133 struct v4l2_fract {
134 	__u32   numerator;
135 	__u32   denominator;
136 };
137 
138 /*
139  *	D R I V E R   C A P A B I L I T I E S
140  */
141 struct v4l2_capability
142 {
143 	__u8	driver[16];	/* i.e. "bttv" */
144 	__u8	card[32];	/* i.e. "Hauppauge WinTV" */
145 	__u8	bus_info[32];	/* "PCI:" + pci_name(pci_dev) */
146 	__u32   version;        /* should use KERNEL_VERSION() */
147 	__u32	capabilities;	/* Device capabilities */
148 	__u32	reserved[4];
149 };
150 
151 /* Values for 'capabilities' field */
152 #define V4L2_CAP_VIDEO_CAPTURE	0x00000001  /* Is a video capture device */
153 #define V4L2_CAP_VIDEO_OUTPUT	0x00000002  /* Is a video output device */
154 #define V4L2_CAP_VIDEO_OVERLAY	0x00000004  /* Can do video overlay */
155 #define V4L2_CAP_VBI_CAPTURE	0x00000010  /* Is a VBI capture device */
156 #define V4L2_CAP_VBI_OUTPUT	0x00000020  /* Is a VBI output device */
157 #define V4L2_CAP_RDS_CAPTURE	0x00000100  /* RDS data capture */
158 
159 #define V4L2_CAP_TUNER		0x00010000  /* has a tuner */
160 #define V4L2_CAP_AUDIO		0x00020000  /* has audio support */
161 #define V4L2_CAP_RADIO		0x00040000  /* is a radio device */
162 
163 #define V4L2_CAP_READWRITE      0x01000000  /* read/write systemcalls */
164 #define V4L2_CAP_ASYNCIO        0x02000000  /* async I/O */
165 #define V4L2_CAP_STREAMING      0x04000000  /* streaming I/O ioctls */
166 
167 /*
168  *	V I D E O   I M A G E   F O R M A T
169  */
170 
171 struct v4l2_pix_format
172 {
173 	__u32         	 	width;
174 	__u32	         	height;
175 	__u32	         	pixelformat;
176 	enum v4l2_field  	field;
177 	__u32            	bytesperline;	/* for padding, zero if unused */
178 	__u32          	 	sizeimage;
179         enum v4l2_colorspace	colorspace;
180 	__u32			priv;		/* private data, depends on pixelformat */
181 };
182 
183 /*           Pixel format    FOURCC                  depth  Description   */
184 #define V4L2_PIX_FMT_RGB332  v4l2_fourcc('R','G','B','1') /*  8  RGB-3-3-2     */
185 #define V4L2_PIX_FMT_RGB555  v4l2_fourcc('R','G','B','O') /* 16  RGB-5-5-5     */
186 #define V4L2_PIX_FMT_RGB565  v4l2_fourcc('R','G','B','P') /* 16  RGB-5-6-5     */
187 #define V4L2_PIX_FMT_RGB555X v4l2_fourcc('R','G','B','Q') /* 16  RGB-5-5-5 BE  */
188 #define V4L2_PIX_FMT_RGB565X v4l2_fourcc('R','G','B','R') /* 16  RGB-5-6-5 BE  */
189 #define V4L2_PIX_FMT_BGR24   v4l2_fourcc('B','G','R','3') /* 24  BGR-8-8-8     */
190 #define V4L2_PIX_FMT_RGB24   v4l2_fourcc('R','G','B','3') /* 24  RGB-8-8-8     */
191 #define V4L2_PIX_FMT_BGR32   v4l2_fourcc('B','G','R','4') /* 32  BGR-8-8-8-8   */
192 #define V4L2_PIX_FMT_RGB32   v4l2_fourcc('R','G','B','4') /* 32  RGB-8-8-8-8   */
193 #define V4L2_PIX_FMT_GREY    v4l2_fourcc('G','R','E','Y') /*  8  Greyscale     */
194 #define V4L2_PIX_FMT_YVU410  v4l2_fourcc('Y','V','U','9') /*  9  YVU 4:1:0     */
195 #define V4L2_PIX_FMT_YVU420  v4l2_fourcc('Y','V','1','2') /* 12  YVU 4:2:0     */
196 #define V4L2_PIX_FMT_YUYV    v4l2_fourcc('Y','U','Y','V') /* 16  YUV 4:2:2     */
197 #define V4L2_PIX_FMT_UYVY    v4l2_fourcc('U','Y','V','Y') /* 16  YUV 4:2:2     */
198 #define V4L2_PIX_FMT_YUV422P v4l2_fourcc('4','2','2','P') /* 16  YVU422 planar */
199 #define V4L2_PIX_FMT_YUV411P v4l2_fourcc('4','1','1','P') /* 16  YVU411 planar */
200 #define V4L2_PIX_FMT_Y41P    v4l2_fourcc('Y','4','1','P') /* 12  YUV 4:1:1     */
201 
202 /* two planes -- one Y, one Cr + Cb interleaved  */
203 #define V4L2_PIX_FMT_NV12    v4l2_fourcc('N','V','1','2') /* 12  Y/CbCr 4:2:0  */
204 #define V4L2_PIX_FMT_NV21    v4l2_fourcc('N','V','2','1') /* 12  Y/CrCb 4:2:0  */
205 
206 /*  The following formats are not defined in the V4L2 specification */
207 #define V4L2_PIX_FMT_YUV410  v4l2_fourcc('Y','U','V','9') /*  9  YUV 4:1:0     */
208 #define V4L2_PIX_FMT_YUV420  v4l2_fourcc('Y','U','1','2') /* 12  YUV 4:2:0     */
209 #define V4L2_PIX_FMT_YYUV    v4l2_fourcc('Y','Y','U','V') /* 16  YUV 4:2:2     */
210 #define V4L2_PIX_FMT_HI240   v4l2_fourcc('H','I','2','4') /*  8  8-bit color   */
211 
212 /* see http://www.siliconimaging.com/RGB%20Bayer.htm */
213 #define V4L2_PIX_FMT_SBGGR8  v4l2_fourcc('B','A','8','1') /*  8  BGBG.. GRGR.. */
214 
215 /* compressed formats */
216 #define V4L2_PIX_FMT_MJPEG    v4l2_fourcc('M','J','P','G') /* Motion-JPEG   */
217 #define V4L2_PIX_FMT_JPEG     v4l2_fourcc('J','P','E','G') /* JFIF JPEG     */
218 #define V4L2_PIX_FMT_DV       v4l2_fourcc('d','v','s','d') /* 1394          */
219 #define V4L2_PIX_FMT_MPEG     v4l2_fourcc('M','P','E','G') /* MPEG          */
220 
221 /*  Vendor-specific formats   */
222 #define V4L2_PIX_FMT_WNVA     v4l2_fourcc('W','N','V','A') /* Winnov hw compress */
223 #define V4L2_PIX_FMT_SN9C10X  v4l2_fourcc('S','9','1','0') /* SN9C10x compression */
224 
225 /*
226  *	F O R M A T   E N U M E R A T I O N
227  */
228 struct v4l2_fmtdesc
229 {
230 	__u32	            index;             /* Format number      */
231 	enum v4l2_buf_type  type;              /* buffer type        */
232 	__u32               flags;
233 	__u8	            description[32];   /* Description string */
234 	__u32	            pixelformat;       /* Format fourcc      */
235 	__u32	            reserved[4];
236 };
237 
238 #define V4L2_FMT_FLAG_COMPRESSED 0x0001
239 
240 
241 /*
242  *	T I M E C O D E
243  */
244 struct v4l2_timecode
245 {
246 	__u32	type;
247 	__u32	flags;
248 	__u8	frames;
249 	__u8	seconds;
250 	__u8	minutes;
251 	__u8	hours;
252 	__u8	userbits[4];
253 };
254 
255 /*  Type  */
256 #define V4L2_TC_TYPE_24FPS		1
257 #define V4L2_TC_TYPE_25FPS		2
258 #define V4L2_TC_TYPE_30FPS		3
259 #define V4L2_TC_TYPE_50FPS		4
260 #define V4L2_TC_TYPE_60FPS		5
261 
262 /*  Flags  */
263 #define V4L2_TC_FLAG_DROPFRAME		0x0001 /* "drop-frame" mode */
264 #define V4L2_TC_FLAG_COLORFRAME		0x0002
265 #define V4L2_TC_USERBITS_field		0x000C
266 #define V4L2_TC_USERBITS_USERDEFINED	0x0000
267 #define V4L2_TC_USERBITS_8BITCHARS	0x0008
268 /* The above is based on SMPTE timecodes */
269 
270 
271 #if 1
272 /*
273  *	M P E G   C O M P R E S S I O N   P A R A M E T E R S
274  *
275  *  ### WARNING: this is still work-in-progress right now, most likely
276  *  ###          there will be some incompatible changes.
277  *
278  */
279 
280 
281 enum v4l2_bitrate_mode {
282 	V4L2_BITRATE_NONE = 0,	/* not specified */
283 	V4L2_BITRATE_CBR,	/* constant bitrate */
284 	V4L2_BITRATE_VBR,	/* variable bitrate */
285 };
286 struct v4l2_bitrate {
287 	/* rates are specified in kbit/sec */
288 	enum v4l2_bitrate_mode	mode;
289 	__u32			min;
290 	__u32			target;  /* use this one for CBR */
291 	__u32			max;
292 };
293 
294 enum v4l2_mpeg_streamtype {
295 	V4L2_MPEG_SS_1,		/* MPEG-1 system stream */
296 	V4L2_MPEG_PS_2,		/* MPEG-2 program stream */
297 	V4L2_MPEG_TS_2,		/* MPEG-2 transport stream */
298 	V4L2_MPEG_PS_DVD,      	/* MPEG-2 program stream with DVD header fixups */
299 };
300 enum v4l2_mpeg_audiotype {
301 	V4L2_MPEG_AU_2_I,	/* MPEG-2 layer 1 */
302 	V4L2_MPEG_AU_2_II,	/* MPEG-2 layer 2 */
303 	V4L2_MPEG_AU_2_III,	/* MPEG-2 layer 3 */
304 	V4L2_MPEG_AC3,		/* AC3 */
305 	V4L2_MPEG_LPCM,		/* LPCM */
306 };
307 enum v4l2_mpeg_videotype {
308 	V4L2_MPEG_VI_1,		/* MPEG-1 */
309 	V4L2_MPEG_VI_2,		/* MPEG-2 */
310 };
311 enum v4l2_mpeg_aspectratio {
312 	V4L2_MPEG_ASPECT_SQUARE = 1,   /* square pixel */
313 	V4L2_MPEG_ASPECT_4_3    = 2,   /*  4 : 3       */
314 	V4L2_MPEG_ASPECT_16_9   = 3,   /* 16 : 9       */
315 	V4L2_MPEG_ASPECT_1_221  = 4,   /*  1 : 2,21    */
316 };
317 
318 struct v4l2_mpeg_compression {
319 	/* general */
320 	enum v4l2_mpeg_streamtype	st_type;
321 	struct v4l2_bitrate		st_bitrate;
322 
323 	/* transport streams */
324 	__u16				ts_pid_pmt;
325 	__u16				ts_pid_audio;
326 	__u16				ts_pid_video;
327 	__u16				ts_pid_pcr;
328 
329 	/* program stream */
330 	__u16				ps_size;
331 	__u16				reserved_1;    /* align */
332 
333 	/* audio */
334 	enum v4l2_mpeg_audiotype	au_type;
335 	struct v4l2_bitrate		au_bitrate;
336 	__u32				au_sample_rate;
337 	__u8                            au_pesid;
338 	__u8                            reserved_2[3]; /* align */
339 
340 	/* video */
341 	enum v4l2_mpeg_videotype	vi_type;
342 	enum v4l2_mpeg_aspectratio	vi_aspect_ratio;
343 	struct v4l2_bitrate		vi_bitrate;
344 	__u32				vi_frame_rate;
345 	__u16				vi_frames_per_gop;
346 	__u16				vi_bframes_count;
347 	__u8                            vi_pesid;
348 	__u8                            reserved_3[3]; /* align */
349 
350 	/* misc flags */
351 	__u32                           closed_gops:1;
352 	__u32                           pulldown:1;
353 	__u32                           reserved_4:30; /* align */
354 
355 	/* I don't expect the above being perfect yet ;) */
356 	__u32				reserved_5[8];
357 };
358 #endif
359 
360 struct v4l2_jpegcompression
361 {
362 	int quality;
363 
364 	int  APPn;              /* Number of APP segment to be written,
365 				 * must be 0..15 */
366 	int  APP_len;           /* Length of data in JPEG APPn segment */
367 	char APP_data[60];      /* Data in the JPEG APPn segment. */
368 
369 	int  COM_len;           /* Length of data in JPEG COM segment */
370 	char COM_data[60];      /* Data in JPEG COM segment */
371 
372 	__u32 jpeg_markers;     /* Which markers should go into the JPEG
373 				 * output. Unless you exactly know what
374 				 * you do, leave them untouched.
375 				 * Inluding less markers will make the
376 				 * resulting code smaller, but there will
377 				 * be fewer aplications which can read it.
378 				 * The presence of the APP and COM marker
379 				 * is influenced by APP_len and COM_len
380 				 * ONLY, not by this property! */
381 
382 #define V4L2_JPEG_MARKER_DHT (1<<3)    /* Define Huffman Tables */
383 #define V4L2_JPEG_MARKER_DQT (1<<4)    /* Define Quantization Tables */
384 #define V4L2_JPEG_MARKER_DRI (1<<5)    /* Define Restart Interval */
385 #define V4L2_JPEG_MARKER_COM (1<<6)    /* Comment segment */
386 #define V4L2_JPEG_MARKER_APP (1<<7)    /* App segment, driver will
387                                         * allways use APP0 */
388 };
389 
390 
391 /*
392  *	M E M O R Y - M A P P I N G   B U F F E R S
393  */
394 struct v4l2_requestbuffers
395 {
396 	__u32	                count;
397 	enum v4l2_buf_type      type;
398 	enum v4l2_memory        memory;
399 	__u32	                reserved[2];
400 };
401 
402 struct v4l2_buffer
403 {
404 	__u32			index;
405 	enum v4l2_buf_type      type;
406 	__u32			bytesused;
407 	__u32			flags;
408 	enum v4l2_field		field;
409 	struct timeval		timestamp;
410 	struct v4l2_timecode	timecode;
411 	__u32			sequence;
412 
413 	/* memory location */
414 	enum v4l2_memory        memory;
415 	union {
416 		__u32           offset;
417 		unsigned long   userptr;
418 	} m;
419 	__u32			length;
420 	__u32			input;
421 	__u32			reserved;
422 };
423 
424 /*  Flags for 'flags' field */
425 #define V4L2_BUF_FLAG_MAPPED	0x0001  /* Buffer is mapped (flag) */
426 #define V4L2_BUF_FLAG_QUEUED	0x0002	/* Buffer is queued for processing */
427 #define V4L2_BUF_FLAG_DONE	0x0004	/* Buffer is ready */
428 #define V4L2_BUF_FLAG_KEYFRAME	0x0008	/* Image is a keyframe (I-frame) */
429 #define V4L2_BUF_FLAG_PFRAME	0x0010	/* Image is a P-frame */
430 #define V4L2_BUF_FLAG_BFRAME	0x0020	/* Image is a B-frame */
431 #define V4L2_BUF_FLAG_TIMECODE	0x0100	/* timecode field is valid */
432 #define V4L2_BUF_FLAG_INPUT     0x0200  /* input field is valid */
433 
434 /*
435  *	O V E R L A Y   P R E V I E W
436  */
437 struct v4l2_framebuffer
438 {
439 	__u32			capability;
440 	__u32			flags;
441 /* FIXME: in theory we should pass something like PCI device + memory
442  * region + offset instead of some physical address */
443 	void*                   base;
444 	struct v4l2_pix_format	fmt;
445 };
446 /*  Flags for the 'capability' field. Read only */
447 #define V4L2_FBUF_CAP_EXTERNOVERLAY	0x0001
448 #define V4L2_FBUF_CAP_CHROMAKEY		0x0002
449 #define V4L2_FBUF_CAP_LIST_CLIPPING     0x0004
450 #define V4L2_FBUF_CAP_BITMAP_CLIPPING	0x0008
451 /*  Flags for the 'flags' field. */
452 #define V4L2_FBUF_FLAG_PRIMARY		0x0001
453 #define V4L2_FBUF_FLAG_OVERLAY		0x0002
454 #define V4L2_FBUF_FLAG_CHROMAKEY	0x0004
455 
456 struct v4l2_clip
457 {
458 	struct v4l2_rect        c;
459 	struct v4l2_clip	*next;
460 };
461 
462 struct v4l2_window
463 {
464 	struct v4l2_rect        w;
465 	enum v4l2_field  	field;
466 	__u32			chromakey;
467 	struct v4l2_clip	__user *clips;
468 	__u32			clipcount;
469 	void			__user *bitmap;
470 };
471 
472 
473 /*
474  *	C A P T U R E   P A R A M E T E R S
475  */
476 struct v4l2_captureparm
477 {
478 	__u32		   capability;	  /*  Supported modes */
479 	__u32		   capturemode;	  /*  Current mode */
480 	struct v4l2_fract  timeperframe;  /*  Time per frame in .1us units */
481 	__u32		   extendedmode;  /*  Driver-specific extensions */
482 	__u32              readbuffers;   /*  # of buffers for read */
483 	__u32		   reserved[4];
484 };
485 /*  Flags for 'capability' and 'capturemode' fields */
486 #define V4L2_MODE_HIGHQUALITY	0x0001	/*  High quality imaging mode */
487 #define V4L2_CAP_TIMEPERFRAME	0x1000	/*  timeperframe field is supported */
488 
489 struct v4l2_outputparm
490 {
491 	__u32		   capability;	 /*  Supported modes */
492 	__u32		   outputmode;	 /*  Current mode */
493 	struct v4l2_fract  timeperframe; /*  Time per frame in seconds */
494 	__u32		   extendedmode; /*  Driver-specific extensions */
495 	__u32              writebuffers; /*  # of buffers for write */
496 	__u32		   reserved[4];
497 };
498 
499 /*
500  *	I N P U T   I M A G E   C R O P P I N G
501  */
502 
503 struct v4l2_cropcap {
504 	enum v4l2_buf_type      type;
505         struct v4l2_rect        bounds;
506         struct v4l2_rect        defrect;
507         struct v4l2_fract       pixelaspect;
508 };
509 
510 struct v4l2_crop {
511 	enum v4l2_buf_type      type;
512 	struct v4l2_rect        c;
513 };
514 
515 /*
516  *      A N A L O G   V I D E O   S T A N D A R D
517  */
518 
519 typedef __u64 v4l2_std_id;
520 
521 /* one bit for each */
522 #define V4L2_STD_PAL_B          ((v4l2_std_id)0x00000001)
523 #define V4L2_STD_PAL_B1         ((v4l2_std_id)0x00000002)
524 #define V4L2_STD_PAL_G          ((v4l2_std_id)0x00000004)
525 #define V4L2_STD_PAL_H          ((v4l2_std_id)0x00000008)
526 #define V4L2_STD_PAL_I          ((v4l2_std_id)0x00000010)
527 #define V4L2_STD_PAL_D          ((v4l2_std_id)0x00000020)
528 #define V4L2_STD_PAL_D1         ((v4l2_std_id)0x00000040)
529 #define V4L2_STD_PAL_K          ((v4l2_std_id)0x00000080)
530 
531 #define V4L2_STD_PAL_M          ((v4l2_std_id)0x00000100)
532 #define V4L2_STD_PAL_N          ((v4l2_std_id)0x00000200)
533 #define V4L2_STD_PAL_Nc         ((v4l2_std_id)0x00000400)
534 #define V4L2_STD_PAL_60         ((v4l2_std_id)0x00000800)
535 
536 #define V4L2_STD_NTSC_M         ((v4l2_std_id)0x00001000)
537 #define V4L2_STD_NTSC_M_JP      ((v4l2_std_id)0x00002000)
538 
539 #define V4L2_STD_SECAM_B        ((v4l2_std_id)0x00010000)
540 #define V4L2_STD_SECAM_D        ((v4l2_std_id)0x00020000)
541 #define V4L2_STD_SECAM_G        ((v4l2_std_id)0x00040000)
542 #define V4L2_STD_SECAM_H        ((v4l2_std_id)0x00080000)
543 #define V4L2_STD_SECAM_K        ((v4l2_std_id)0x00100000)
544 #define V4L2_STD_SECAM_K1       ((v4l2_std_id)0x00200000)
545 #define V4L2_STD_SECAM_L        ((v4l2_std_id)0x00400000)
546 
547 /* ATSC/HDTV */
548 #define V4L2_STD_ATSC_8_VSB     ((v4l2_std_id)0x01000000)
549 #define V4L2_STD_ATSC_16_VSB    ((v4l2_std_id)0x02000000)
550 
551 /* some common needed stuff */
552 #define V4L2_STD_PAL_BG		(V4L2_STD_PAL_B		|\
553 				 V4L2_STD_PAL_B1	|\
554 				 V4L2_STD_PAL_G)
555 #define V4L2_STD_PAL_DK		(V4L2_STD_PAL_D		|\
556 				 V4L2_STD_PAL_D1	|\
557 				 V4L2_STD_PAL_K)
558 #define V4L2_STD_PAL		(V4L2_STD_PAL_BG	|\
559 				 V4L2_STD_PAL_DK	|\
560 				 V4L2_STD_PAL_H		|\
561 				 V4L2_STD_PAL_I)
562 #define V4L2_STD_NTSC           (V4L2_STD_NTSC_M	|\
563 				 V4L2_STD_NTSC_M_JP)
564 #define V4L2_STD_SECAM_DK      	(V4L2_STD_SECAM_D	|\
565 				 V4L2_STD_SECAM_K	|\
566 				 V4L2_STD_SECAM_K1)
567 #define V4L2_STD_SECAM		(V4L2_STD_SECAM_B	|\
568 				 V4L2_STD_SECAM_G	|\
569 				 V4L2_STD_SECAM_H	|\
570 				 V4L2_STD_SECAM_DK	|\
571 				 V4L2_STD_SECAM_L)
572 
573 #define V4L2_STD_525_60		(V4L2_STD_PAL_M		|\
574 				 V4L2_STD_PAL_60	|\
575 				 V4L2_STD_NTSC)
576 #define V4L2_STD_625_50		(V4L2_STD_PAL		|\
577 				 V4L2_STD_PAL_N		|\
578 				 V4L2_STD_PAL_Nc	|\
579 				 V4L2_STD_SECAM)
580 #define V4L2_STD_ATSC           (V4L2_STD_ATSC_8_VSB    |\
581 		                 V4L2_STD_ATSC_16_VSB)
582 
583 #define V4L2_STD_UNKNOWN        0
584 #define V4L2_STD_ALL            (V4L2_STD_525_60	|\
585 				 V4L2_STD_625_50)
586 
587 struct v4l2_standard
588 {
589 	__u32	       	     index;
590 	v4l2_std_id          id;
591 	__u8		     name[24];
592 	struct v4l2_fract    frameperiod; /* Frames, not fields */
593 	__u32		     framelines;
594 	__u32		     reserved[4];
595 };
596 
597 
598 /*
599  *	V I D E O   I N P U T S
600  */
601 struct v4l2_input
602 {
603 	__u32	     index;		/*  Which input */
604 	__u8	     name[32];	        /*  Label */
605 	__u32	     type;		/*  Type of input */
606 	__u32	     audioset;	        /*  Associated audios (bitfield) */
607 	__u32        tuner;             /*  Associated tuner */
608 	v4l2_std_id  std;
609 	__u32	     status;
610 	__u32	     reserved[4];
611 };
612 /*  Values for the 'type' field */
613 #define V4L2_INPUT_TYPE_TUNER		1
614 #define V4L2_INPUT_TYPE_CAMERA		2
615 
616 /* field 'status' - general */
617 #define V4L2_IN_ST_NO_POWER    0x00000001  /* Attached device is off */
618 #define V4L2_IN_ST_NO_SIGNAL   0x00000002
619 #define V4L2_IN_ST_NO_COLOR    0x00000004
620 
621 /* field 'status' - analog */
622 #define V4L2_IN_ST_NO_H_LOCK   0x00000100  /* No horizontal sync lock */
623 #define V4L2_IN_ST_COLOR_KILL  0x00000200  /* Color killer is active */
624 
625 /* field 'status' - digital */
626 #define V4L2_IN_ST_NO_SYNC     0x00010000  /* No synchronization lock */
627 #define V4L2_IN_ST_NO_EQU      0x00020000  /* No equalizer lock */
628 #define V4L2_IN_ST_NO_CARRIER  0x00040000  /* Carrier recovery failed */
629 
630 /* field 'status' - VCR and set-top box */
631 #define V4L2_IN_ST_MACROVISION 0x01000000  /* Macrovision detected */
632 #define V4L2_IN_ST_NO_ACCESS   0x02000000  /* Conditional access denied */
633 #define V4L2_IN_ST_VTR         0x04000000  /* VTR time constant */
634 
635 /*
636  *	V I D E O   O U T P U T S
637  */
638 struct v4l2_output
639 {
640 	__u32	     index;		/*  Which output */
641 	__u8	     name[32];	        /*  Label */
642 	__u32	     type;		/*  Type of output */
643 	__u32	     audioset;	        /*  Associated audios (bitfield) */
644 	__u32	     modulator;         /*  Associated modulator */
645 	v4l2_std_id  std;
646 	__u32	     reserved[4];
647 };
648 /*  Values for the 'type' field */
649 #define V4L2_OUTPUT_TYPE_MODULATOR		1
650 #define V4L2_OUTPUT_TYPE_ANALOG			2
651 #define V4L2_OUTPUT_TYPE_ANALOGVGAOVERLAY	3
652 
653 /*
654  *	C O N T R O L S
655  */
656 struct v4l2_control
657 {
658 	__u32		     id;
659 	__s32		     value;
660 };
661 
662 /*  Used in the VIDIOC_QUERYCTRL ioctl for querying controls */
663 struct v4l2_queryctrl
664 {
665 	__u32	             id;
666 	enum v4l2_ctrl_type  type;
667 	__u8		     name[32];	/* Whatever */
668 	__s32		     minimum;	/* Note signedness */
669 	__s32		     maximum;
670 	__s32	             step;
671 	__s32		     default_value;
672 	__u32                flags;
673 	__u32		     reserved[2];
674 };
675 
676 /*  Used in the VIDIOC_QUERYMENU ioctl for querying menu items */
677 struct v4l2_querymenu
678 {
679 	__u32		id;
680 	__u32		index;
681 	__u8		name[32];	/* Whatever */
682 	__u32		reserved;
683 };
684 
685 /*  Control flags  */
686 #define V4L2_CTRL_FLAG_DISABLED		0x0001
687 #define V4L2_CTRL_FLAG_GRABBED		0x0002
688 
689 /*  Control IDs defined by V4L2 */
690 #define V4L2_CID_BASE			0x00980900
691 /*  IDs reserved for driver specific controls */
692 #define V4L2_CID_PRIVATE_BASE		0x08000000
693 
694 #define V4L2_CID_BRIGHTNESS		(V4L2_CID_BASE+0)
695 #define V4L2_CID_CONTRAST		(V4L2_CID_BASE+1)
696 #define V4L2_CID_SATURATION		(V4L2_CID_BASE+2)
697 #define V4L2_CID_HUE			(V4L2_CID_BASE+3)
698 #define V4L2_CID_AUDIO_VOLUME		(V4L2_CID_BASE+5)
699 #define V4L2_CID_AUDIO_BALANCE		(V4L2_CID_BASE+6)
700 #define V4L2_CID_AUDIO_BASS		(V4L2_CID_BASE+7)
701 #define V4L2_CID_AUDIO_TREBLE		(V4L2_CID_BASE+8)
702 #define V4L2_CID_AUDIO_MUTE		(V4L2_CID_BASE+9)
703 #define V4L2_CID_AUDIO_LOUDNESS		(V4L2_CID_BASE+10)
704 #define V4L2_CID_BLACK_LEVEL		(V4L2_CID_BASE+11)
705 #define V4L2_CID_AUTO_WHITE_BALANCE	(V4L2_CID_BASE+12)
706 #define V4L2_CID_DO_WHITE_BALANCE	(V4L2_CID_BASE+13)
707 #define V4L2_CID_RED_BALANCE		(V4L2_CID_BASE+14)
708 #define V4L2_CID_BLUE_BALANCE		(V4L2_CID_BASE+15)
709 #define V4L2_CID_GAMMA			(V4L2_CID_BASE+16)
710 #define V4L2_CID_WHITENESS		(V4L2_CID_GAMMA) /* ? Not sure */
711 #define V4L2_CID_EXPOSURE		(V4L2_CID_BASE+17)
712 #define V4L2_CID_AUTOGAIN		(V4L2_CID_BASE+18)
713 #define V4L2_CID_GAIN			(V4L2_CID_BASE+19)
714 #define V4L2_CID_HFLIP			(V4L2_CID_BASE+20)
715 #define V4L2_CID_VFLIP			(V4L2_CID_BASE+21)
716 #define V4L2_CID_HCENTER		(V4L2_CID_BASE+22)
717 #define V4L2_CID_VCENTER		(V4L2_CID_BASE+23)
718 #define V4L2_CID_LASTP1			(V4L2_CID_BASE+24) /* last CID + 1 */
719 
720 /*
721  *	T U N I N G
722  */
723 struct v4l2_tuner
724 {
725 	__u32                   index;
726 	__u8			name[32];
727 	enum v4l2_tuner_type    type;
728 	__u32			capability;
729 	__u32			rangelow;
730 	__u32			rangehigh;
731 	__u32			rxsubchans;
732 	__u32			audmode;
733 	__s32			signal;
734 	__s32			afc;
735 	__u32			reserved[4];
736 };
737 
738 struct v4l2_modulator
739 {
740 	__u32			index;
741 	__u8			name[32];
742 	__u32			capability;
743 	__u32			rangelow;
744 	__u32			rangehigh;
745 	__u32			txsubchans;
746 	__u32			reserved[4];
747 };
748 
749 /*  Flags for the 'capability' field */
750 #define V4L2_TUNER_CAP_LOW		0x0001
751 #define V4L2_TUNER_CAP_NORM		0x0002
752 #define V4L2_TUNER_CAP_STEREO		0x0010
753 #define V4L2_TUNER_CAP_LANG2		0x0020
754 #define V4L2_TUNER_CAP_SAP		0x0020
755 #define V4L2_TUNER_CAP_LANG1		0x0040
756 
757 /*  Flags for the 'rxsubchans' field */
758 #define V4L2_TUNER_SUB_MONO		0x0001
759 #define V4L2_TUNER_SUB_STEREO		0x0002
760 #define V4L2_TUNER_SUB_LANG2		0x0004
761 #define V4L2_TUNER_SUB_SAP		0x0004
762 #define V4L2_TUNER_SUB_LANG1		0x0008
763 
764 /*  Values for the 'audmode' field */
765 #define V4L2_TUNER_MODE_MONO		0x0000
766 #define V4L2_TUNER_MODE_STEREO		0x0001
767 #define V4L2_TUNER_MODE_LANG2		0x0002
768 #define V4L2_TUNER_MODE_SAP		0x0002
769 #define V4L2_TUNER_MODE_LANG1		0x0003
770 
771 struct v4l2_frequency
772 {
773 	__u32	              tuner;
774 	enum v4l2_tuner_type  type;
775         __u32	              frequency;
776 	__u32	              reserved[8];
777 };
778 
779 /*
780  *	A U D I O
781  */
782 struct v4l2_audio
783 {
784 	__u32	index;
785 	__u8	name[32];
786 	__u32	capability;
787 	__u32	mode;
788 	__u32	reserved[2];
789 };
790 /*  Flags for the 'capability' field */
791 #define V4L2_AUDCAP_STEREO		0x00001
792 #define V4L2_AUDCAP_AVL			0x00002
793 
794 /*  Flags for the 'mode' field */
795 #define V4L2_AUDMODE_AVL		0x00001
796 
797 struct v4l2_audioout
798 {
799 	__u32	index;
800 	__u8	name[32];
801 	__u32	capability;
802 	__u32	mode;
803 	__u32	reserved[2];
804 };
805 
806 /*
807  *	D A T A   S E R V I C E S   ( V B I )
808  *
809  *	Data services API by Michael Schimek
810  */
811 
812 struct v4l2_vbi_format
813 {
814 	__u32	sampling_rate;		/* in 1 Hz */
815 	__u32	offset;
816 	__u32	samples_per_line;
817 	__u32	sample_format;		/* V4L2_PIX_FMT_* */
818 	__s32	start[2];
819 	__u32	count[2];
820 	__u32	flags;			/* V4L2_VBI_* */
821 	__u32	reserved[2];		/* must be zero */
822 };
823 
824 /*  VBI flags  */
825 #define V4L2_VBI_UNSYNC		(1<< 0)
826 #define V4L2_VBI_INTERLACED	(1<< 1)
827 
828 
829 /*
830  *	A G G R E G A T E   S T R U C T U R E S
831  */
832 
833 /*	Stream data format
834  */
835 struct v4l2_format
836 {
837 	enum v4l2_buf_type type;
838 	union
839 	{
840 		struct v4l2_pix_format	pix;  // V4L2_BUF_TYPE_VIDEO_CAPTURE
841 		struct v4l2_window	win;  // V4L2_BUF_TYPE_VIDEO_OVERLAY
842 		struct v4l2_vbi_format	vbi;  // V4L2_BUF_TYPE_VBI_CAPTURE
843 		__u8	raw_data[200];        // user-defined
844 	} fmt;
845 };
846 
847 
848 /*	Stream type-dependent parameters
849  */
850 struct v4l2_streamparm
851 {
852 	enum v4l2_buf_type type;
853 	union
854 	{
855 		struct v4l2_captureparm	capture;
856 		struct v4l2_outputparm	output;
857 		__u8	raw_data[200];  /* user-defined */
858 	} parm;
859 };
860 
861 
862 
863 /*
864  *	I O C T L   C O D E S   F O R   V I D E O   D E V I C E S
865  *
866  */
867 #define VIDIOC_QUERYCAP		_IOR  ('V',  0, struct v4l2_capability)
868 #define VIDIOC_RESERVED		_IO   ('V',  1)
869 #define VIDIOC_ENUM_FMT         _IOWR ('V',  2, struct v4l2_fmtdesc)
870 #define VIDIOC_G_FMT		_IOWR ('V',  4, struct v4l2_format)
871 #define VIDIOC_S_FMT		_IOWR ('V',  5, struct v4l2_format)
872 #if 1 /* experimental */
873 #define VIDIOC_G_MPEGCOMP       _IOR  ('V',  6, struct v4l2_mpeg_compression)
874 #define VIDIOC_S_MPEGCOMP     	_IOW  ('V',  7, struct v4l2_mpeg_compression)
875 #endif
876 #define VIDIOC_REQBUFS		_IOWR ('V',  8, struct v4l2_requestbuffers)
877 #define VIDIOC_QUERYBUF		_IOWR ('V',  9, struct v4l2_buffer)
878 #define VIDIOC_G_FBUF		_IOR  ('V', 10, struct v4l2_framebuffer)
879 #define VIDIOC_S_FBUF		_IOW  ('V', 11, struct v4l2_framebuffer)
880 #define VIDIOC_OVERLAY		_IOW  ('V', 14, int)
881 #define VIDIOC_QBUF		_IOWR ('V', 15, struct v4l2_buffer)
882 #define VIDIOC_DQBUF		_IOWR ('V', 17, struct v4l2_buffer)
883 #define VIDIOC_STREAMON		_IOW  ('V', 18, int)
884 #define VIDIOC_STREAMOFF	_IOW  ('V', 19, int)
885 #define VIDIOC_G_PARM		_IOWR ('V', 21, struct v4l2_streamparm)
886 #define VIDIOC_S_PARM		_IOWR ('V', 22, struct v4l2_streamparm)
887 #define VIDIOC_G_STD		_IOR  ('V', 23, v4l2_std_id)
888 #define VIDIOC_S_STD		_IOW  ('V', 24, v4l2_std_id)
889 #define VIDIOC_ENUMSTD		_IOWR ('V', 25, struct v4l2_standard)
890 #define VIDIOC_ENUMINPUT	_IOWR ('V', 26, struct v4l2_input)
891 #define VIDIOC_G_CTRL		_IOWR ('V', 27, struct v4l2_control)
892 #define VIDIOC_S_CTRL		_IOWR ('V', 28, struct v4l2_control)
893 #define VIDIOC_G_TUNER		_IOWR ('V', 29, struct v4l2_tuner)
894 #define VIDIOC_S_TUNER		_IOW  ('V', 30, struct v4l2_tuner)
895 #define VIDIOC_G_AUDIO		_IOR  ('V', 33, struct v4l2_audio)
896 #define VIDIOC_S_AUDIO		_IOW  ('V', 34, struct v4l2_audio)
897 #define VIDIOC_QUERYCTRL	_IOWR ('V', 36, struct v4l2_queryctrl)
898 #define VIDIOC_QUERYMENU	_IOWR ('V', 37, struct v4l2_querymenu)
899 #define VIDIOC_G_INPUT		_IOR  ('V', 38, int)
900 #define VIDIOC_S_INPUT		_IOWR ('V', 39, int)
901 #define VIDIOC_G_OUTPUT		_IOR  ('V', 46, int)
902 #define VIDIOC_S_OUTPUT		_IOWR ('V', 47, int)
903 #define VIDIOC_ENUMOUTPUT	_IOWR ('V', 48, struct v4l2_output)
904 #define VIDIOC_G_AUDOUT		_IOR  ('V', 49, struct v4l2_audioout)
905 #define VIDIOC_S_AUDOUT		_IOW  ('V', 50, struct v4l2_audioout)
906 #define VIDIOC_G_MODULATOR	_IOWR ('V', 54, struct v4l2_modulator)
907 #define VIDIOC_S_MODULATOR	_IOW  ('V', 55, struct v4l2_modulator)
908 #define VIDIOC_G_FREQUENCY	_IOWR ('V', 56, struct v4l2_frequency)
909 #define VIDIOC_S_FREQUENCY	_IOW  ('V', 57, struct v4l2_frequency)
910 #define VIDIOC_CROPCAP		_IOWR ('V', 58, struct v4l2_cropcap)
911 #define VIDIOC_G_CROP		_IOWR ('V', 59, struct v4l2_crop)
912 #define VIDIOC_S_CROP		_IOW  ('V', 60, struct v4l2_crop)
913 #define VIDIOC_G_JPEGCOMP	_IOR  ('V', 61, struct v4l2_jpegcompression)
914 #define VIDIOC_S_JPEGCOMP	_IOW  ('V', 62, struct v4l2_jpegcompression)
915 #define VIDIOC_QUERYSTD      	_IOR  ('V', 63, v4l2_std_id)
916 #define VIDIOC_TRY_FMT      	_IOWR ('V', 64, struct v4l2_format)
917 #define VIDIOC_ENUMAUDIO	_IOWR ('V', 65, struct v4l2_audio)
918 #define VIDIOC_ENUMAUDOUT	_IOWR ('V', 66, struct v4l2_audioout)
919 #define VIDIOC_G_PRIORITY       _IOR  ('V', 67, enum v4l2_priority)
920 #define VIDIOC_S_PRIORITY       _IOW  ('V', 68, enum v4l2_priority)
921 
922 /* for compatibility, will go away some day */
923 #define VIDIOC_OVERLAY_OLD     	_IOWR ('V', 14, int)
924 #define VIDIOC_S_PARM_OLD      	_IOW  ('V', 22, struct v4l2_streamparm)
925 #define VIDIOC_S_CTRL_OLD      	_IOW  ('V', 28, struct v4l2_control)
926 #define VIDIOC_G_AUDIO_OLD     	_IOWR ('V', 33, struct v4l2_audio)
927 #define VIDIOC_G_AUDOUT_OLD    	_IOWR ('V', 49, struct v4l2_audioout)
928 #define VIDIOC_CROPCAP_OLD     	_IOR  ('V', 58, struct v4l2_cropcap)
929 
930 #define BASE_VIDIOC_PRIVATE	192		/* 192-255 are private */
931 
932 
933 #ifdef __KERNEL__
934 /*
935  *
936  *	V 4 L 2   D R I V E R   H E L P E R   A P I
937  *
938  *	Some commonly needed functions for drivers (v4l2-common.o module)
939  */
940 #include <linux/fs.h>
941 
942 /*  Video standard functions  */
943 extern unsigned int v4l2_video_std_fps(struct v4l2_standard *vs);
944 extern int v4l2_video_std_construct(struct v4l2_standard *vs,
945 				    int id, char *name);
946 
947 /* prority handling */
948 struct v4l2_prio_state {
949 	atomic_t prios[4];
950 };
951 int v4l2_prio_init(struct v4l2_prio_state *global);
952 int v4l2_prio_change(struct v4l2_prio_state *global, enum v4l2_priority *local,
953 		     enum v4l2_priority new);
954 int v4l2_prio_open(struct v4l2_prio_state *global, enum v4l2_priority *local);
955 int v4l2_prio_close(struct v4l2_prio_state *global, enum v4l2_priority *local);
956 enum v4l2_priority v4l2_prio_max(struct v4l2_prio_state *global);
957 int v4l2_prio_check(struct v4l2_prio_state *global, enum v4l2_priority *local);
958 
959 /* names for fancy debug output */
960 extern char *v4l2_field_names[];
961 extern char *v4l2_type_names[];
962 extern char *v4l2_ioctl_names[];
963 
964 /*  Compatibility layer interface  --  v4l1-compat module */
965 typedef int (*v4l2_kioctl)(struct inode *inode, struct file *file,
966 			   unsigned int cmd, void *arg);
967 int v4l_compat_translate_ioctl(struct inode *inode, struct file *file,
968 			       int cmd, void *arg, v4l2_kioctl driver_ioctl);
969 
970 #endif /* __KERNEL__ */
971 #endif /* __LINUX_VIDEODEV2_H */
972 
973 /*
974  * Local variables:
975  * c-basic-offset: 8
976  * End:
977  */
978