doc-rst: linux_tv: remove whitespaces
[deliverable/linux.git] / Documentation / linux_tv / videodev2.h.rst
CommitLineData
5377d91f
MH
1.. -*- coding: utf-8; mode: rst -*-
2
3file: videodev2.h
4=================
5
6.. code-block:: c
7
8 /*
9 * Video for Linux Two header file
10 *
11 * Copyright (C) 1999-2012 the contributors
12 *
13 * This program is free software; you can redistribute it and/or modify
14 * it under the terms of the GNU General Public License as published by
15 * the Free Software Foundation; either version 2 of the License, or
16 * (at your option) any later version.
17 *
18 * This program is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU General Public License for more details.
22 *
23 * Alternatively you can redistribute this file under the terms of the
24 * BSD license as stated below:
25 *
26 * Redistribution and use in source and binary forms, with or without
27 * modification, are permitted provided that the following conditions
28 * are met:
29 * 1. Redistributions of source code must retain the above copyright
30 * notice, this list of conditions and the following disclaimer.
31 * 2. Redistributions in binary form must reproduce the above copyright
32 * notice, this list of conditions and the following disclaimer in
33 * the documentation and/or other materials provided with the
34 * distribution.
35 * 3. The names of its contributors may not be used to endorse or promote
36 * products derived from this software without specific prior written
37 * permission.
38 *
39 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
40 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
41 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
42 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
43 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
44 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
45 * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
46 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
47 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
48 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
49 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
50 *
51 * Header file for v4l or V4L2 drivers and applications
52 * with public API.
53 * All kernel-specific stuff were moved to media/v4l2-dev.h, so
54 * no #if __KERNEL tests are allowed here
55 *
56 * See https://linuxtv.org for more info
57 *
58 * Author: Bill Dirks <bill@thedirks.org>
59 * Justin Schoeman
60 * Hans Verkuil <hverkuil@xs4all.nl>
61 * et al.
62 */
63 #ifndef _UAPI__LINUX_VIDEODEV2_H
64 #define _UAPI__LINUX_VIDEODEV2_H
65
66 #ifndef __KERNEL__
67 #include <sys/time.h>
68 #endif
69 #include <linux/compiler.h>
70 #include <linux/ioctl.h>
71 #include <linux/types.h>
72 #include <linux/v4l2-common.h>
73 #include <linux/v4l2-controls.h>
74
75 /*
76 * Common stuff for both V4L1 and V4L2
77 * Moved from videodev.h
78 */
79 #define VIDEO_MAX_FRAME 32
80 #define VIDEO_MAX_PLANES 8
81
82 /*
83 * M I S C E L L A N E O U S
84 */
85
86 /* Four-character-code (FOURCC) */
87 #define v4l2_fourcc(a, b, c, d)
0579e6e3 88 ((__u32)(a) | ((__u32)(b) << 8) | ((__u32)(c) << 16) | ((__u32)(d) << 24))
5377d91f
MH
89 #define v4l2_fourcc_be(a, b, c, d) (v4l2_fourcc(a, b, c, d) | (1 << 31))
90
91 /*
92 * E N U M S
93 */
94 enum v4l2_field {
0579e6e3
MCC
95 V4L2_FIELD_ANY = 0, /* driver can choose from none,
96 top, bottom, interlaced
97 depending on whatever it thinks
98 is approximate ... */
99 V4L2_FIELD_NONE = 1, /* this device has no fields ... */
100 V4L2_FIELD_TOP = 2, /* top field only */
101 V4L2_FIELD_BOTTOM = 3, /* bottom field only */
102 V4L2_FIELD_INTERLACED = 4, /* both fields interlaced */
103 V4L2_FIELD_SEQ_TB = 5, /* both fields sequential into one
104 buffer, top-bottom order */
105 V4L2_FIELD_SEQ_BT = 6, /* same as above + bottom-top order */
106 V4L2_FIELD_ALTERNATE = 7, /* both fields alternating into
107 separate buffers */
108 V4L2_FIELD_INTERLACED_TB = 8, /* both fields interlaced, top field
109 first and the top field is
110 transmitted first */
111 V4L2_FIELD_INTERLACED_BT = 9, /* both fields interlaced, top field
112 first and the bottom field is
113 transmitted first */
114 };
115 #define V4L2_FIELD_HAS_TOP(field)
116 ((field) == V4L2_FIELD_TOP ||
117 (field) == V4L2_FIELD_INTERLACED ||
118 (field) == V4L2_FIELD_INTERLACED_TB ||
119 (field) == V4L2_FIELD_INTERLACED_BT ||
120 (field) == V4L2_FIELD_SEQ_TB ||
121 (field) == V4L2_FIELD_SEQ_BT)
122 #define V4L2_FIELD_HAS_BOTTOM(field)
123 ((field) == V4L2_FIELD_BOTTOM ||
124 (field) == V4L2_FIELD_INTERLACED ||
125 (field) == V4L2_FIELD_INTERLACED_TB ||
126 (field) == V4L2_FIELD_INTERLACED_BT ||
127 (field) == V4L2_FIELD_SEQ_TB ||
128 (field) == V4L2_FIELD_SEQ_BT)
129 #define V4L2_FIELD_HAS_BOTH(field)
130 ((field) == V4L2_FIELD_INTERLACED ||
131 (field) == V4L2_FIELD_INTERLACED_TB ||
132 (field) == V4L2_FIELD_INTERLACED_BT ||
133 (field) == V4L2_FIELD_SEQ_TB ||
134 (field) == V4L2_FIELD_SEQ_BT)
135 #define V4L2_FIELD_HAS_T_OR_B(field)
136 ((field) == V4L2_FIELD_BOTTOM ||
137 (field) == V4L2_FIELD_TOP ||
138 (field) == V4L2_FIELD_ALTERNATE)
5377d91f
MH
139
140 enum v4l2_buf_type {
0579e6e3
MCC
141 V4L2_BUF_TYPE_VIDEO_CAPTURE = 1,
142 V4L2_BUF_TYPE_VIDEO_OUTPUT = 2,
143 V4L2_BUF_TYPE_VIDEO_OVERLAY = 3,
144 V4L2_BUF_TYPE_VBI_CAPTURE = 4,
145 V4L2_BUF_TYPE_VBI_OUTPUT = 5,
146 V4L2_BUF_TYPE_SLICED_VBI_CAPTURE = 6,
147 V4L2_BUF_TYPE_SLICED_VBI_OUTPUT = 7,
148 V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY = 8,
149 V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE = 9,
150 V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE = 10,
151 V4L2_BUF_TYPE_SDR_CAPTURE = 11,
152 V4L2_BUF_TYPE_SDR_OUTPUT = 12,
153 /* Deprecated, do not use */
154 V4L2_BUF_TYPE_PRIVATE = 0x80,
155 };
156
157 #define V4L2_TYPE_IS_MULTIPLANAR(type)
158 ((type) == V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE
159 || (type) == V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE)
160
161 #define V4L2_TYPE_IS_OUTPUT(type)
162 ((type) == V4L2_BUF_TYPE_VIDEO_OUTPUT
163 || (type) == V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE
164 || (type) == V4L2_BUF_TYPE_VIDEO_OVERLAY
165 || (type) == V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY
166 || (type) == V4L2_BUF_TYPE_VBI_OUTPUT
167 || (type) == V4L2_BUF_TYPE_SLICED_VBI_OUTPUT
168 || (type) == V4L2_BUF_TYPE_SDR_OUTPUT)
5377d91f
MH
169
170 enum v4l2_tuner_type {
0579e6e3
MCC
171 V4L2_TUNER_RADIO = 1,
172 V4L2_TUNER_ANALOG_TV = 2,
173 V4L2_TUNER_DIGITAL_TV = 3,
174 V4L2_TUNER_SDR = 4,
175 V4L2_TUNER_RF = 5,
5377d91f
MH
176 };
177
178 /* Deprecated, do not use */
179 #define V4L2_TUNER_ADC V4L2_TUNER_SDR
180
181 enum v4l2_memory {
0579e6e3
MCC
182 V4L2_MEMORY_MMAP = 1,
183 V4L2_MEMORY_USERPTR = 2,
184 V4L2_MEMORY_OVERLAY = 3,
185 V4L2_MEMORY_DMABUF = 4,
5377d91f
MH
186 };
187
188 /* see also http://vektor.theorem.ca/graphics/ycbcr/ */
189 enum v4l2_colorspace {
0579e6e3
MCC
190 /*
191 * Default colorspace, i.e.ie; let the driver figure it out.
192 * Can only be used with video capture.
193 */
194 V4L2_COLORSPACE_DEFAULT = 0,
5377d91f 195
0579e6e3
MCC
196 /* SMPTE 170M: used for broadcast NTSC/PAL SDTV */
197 V4L2_COLORSPACE_SMPTE170M = 1,
5377d91f 198
0579e6e3
MCC
199 /* Obsolete pre-1998 SMPTE 240M HDTV standard, superseded by Rec 709 */
200 V4L2_COLORSPACE_SMPTE240M = 2,
5377d91f 201
0579e6e3
MCC
202 /* Rec.709: used for HDTV */
203 V4L2_COLORSPACE_REC709 = 3,
5377d91f 204
0579e6e3
MCC
205 /*
206 * Deprecated, do not use. No driver will ever return this. This was
207 * based on a misunderstanding of the bt878 datasheet.
208 */
209 V4L2_COLORSPACE_BT878 = 4,
5377d91f 210
0579e6e3
MCC
211 /*
212 * NTSC 1953 colorspace. This only makes sense when dealing with
213 * really, really old NTSC recordings. Superseded by SMPTE 170M.
214 */
215 V4L2_COLORSPACE_470_SYSTEM_M = 5,
5377d91f 216
0579e6e3
MCC
217 /*
218 * EBU Tech 3213 PAL/SECAM colorspace. This only makes sense when
219 * dealing with really old PAL/SECAM recordings. Superseded by
220 * SMPTE 170M.
221 */
222 V4L2_COLORSPACE_470_SYSTEM_BG = 6,
5377d91f 223
0579e6e3
MCC
224 /*
225 * Effectively shorthand for V4L2_COLORSPACE_SRGB, V4L2_YCBCR_ENC_601
226 * and V4L2_QUANTIZATION_FULL_RANGE. To be used for (Motion-)JPEG.
227 */
228 V4L2_COLORSPACE_JPEG = 7,
5377d91f 229
0579e6e3
MCC
230 /* For RGB colorspaces such as produces by most webcams. */
231 V4L2_COLORSPACE_SRGB = 8,
5377d91f 232
0579e6e3
MCC
233 /* AdobeRGB colorspace */
234 V4L2_COLORSPACE_ADOBERGB = 9,
5377d91f 235
0579e6e3
MCC
236 /* BT.2020 colorspace, used for UHDTV. */
237 V4L2_COLORSPACE_BT2020 = 10,
5377d91f 238
0579e6e3
MCC
239 /* Raw colorspace: for RAW unprocessed images */
240 V4L2_COLORSPACE_RAW = 11,
5377d91f 241
0579e6e3
MCC
242 /* DCI-P3 colorspace, used by cinema projectors */
243 V4L2_COLORSPACE_DCI_P3 = 12,
5377d91f
MH
244 };
245
246 /*
247 * Determine how COLORSPACE_DEFAULT should map to a proper colorspace.
248 * This depends on whether this is a SDTV image (use SMPTE 170M), an
249 * HDTV image (use Rec. 709), or something else (use sRGB).
250 */
0579e6e3
MCC
251 #define V4L2_MAP_COLORSPACE_DEFAULT(is_sdtv, is_hdtv)
252 ((is_sdtv) ? V4L2_COLORSPACE_SMPTE170M :
253 ((is_hdtv) ? V4L2_COLORSPACE_REC709 : V4L2_COLORSPACE_SRGB))
5377d91f
MH
254
255 enum v4l2_xfer_func {
0579e6e3
MCC
256 /*
257 * Mapping of V4L2_XFER_FUNC_DEFAULT to actual transfer functions
258 * for the various colorspaces:
259 *
260 * V4L2_COLORSPACE_SMPTE170M, V4L2_COLORSPACE_470_SYSTEM_M,
261 * V4L2_COLORSPACE_470_SYSTEM_BG, V4L2_COLORSPACE_REC709 and
262 * V4L2_COLORSPACE_BT2020: V4L2_XFER_FUNC_709
263 *
264 * V4L2_COLORSPACE_SRGB, V4L2_COLORSPACE_JPEG: V4L2_XFER_FUNC_SRGB
265 *
266 * V4L2_COLORSPACE_ADOBERGB: V4L2_XFER_FUNC_ADOBERGB
267 *
268 * V4L2_COLORSPACE_SMPTE240M: V4L2_XFER_FUNC_SMPTE240M
269 *
270 * V4L2_COLORSPACE_RAW: V4L2_XFER_FUNC_NONE
271 *
272 * V4L2_COLORSPACE_DCI_P3: V4L2_XFER_FUNC_DCI_P3
273 */
274 V4L2_XFER_FUNC_DEFAULT = 0,
275 V4L2_XFER_FUNC_709 = 1,
276 V4L2_XFER_FUNC_SRGB = 2,
277 V4L2_XFER_FUNC_ADOBERGB = 3,
278 V4L2_XFER_FUNC_SMPTE240M = 4,
279 V4L2_XFER_FUNC_NONE = 5,
280 V4L2_XFER_FUNC_DCI_P3 = 6,
281 V4L2_XFER_FUNC_SMPTE2084 = 7,
5377d91f
MH
282 };
283
284 /*
285 * Determine how XFER_FUNC_DEFAULT should map to a proper transfer function.
286 * This depends on the colorspace.
287 */
0579e6e3
MCC
288 #define V4L2_MAP_XFER_FUNC_DEFAULT(colsp)
289 ((colsp) == V4L2_COLORSPACE_ADOBERGB ? V4L2_XFER_FUNC_ADOBERGB :
290 ((colsp) == V4L2_COLORSPACE_SMPTE240M ? V4L2_XFER_FUNC_SMPTE240M :
291 ((colsp) == V4L2_COLORSPACE_DCI_P3 ? V4L2_XFER_FUNC_DCI_P3 :
292 ((colsp) == V4L2_COLORSPACE_RAW ? V4L2_XFER_FUNC_NONE :
293 ((colsp) == V4L2_COLORSPACE_SRGB || (colsp) == V4L2_COLORSPACE_JPEG ?
294 V4L2_XFER_FUNC_SRGB : V4L2_XFER_FUNC_709)))))
5377d91f
MH
295
296 enum v4l2_ycbcr_encoding {
0579e6e3
MCC
297 /*
298 * Mapping of V4L2_YCBCR_ENC_DEFAULT to actual encodings for the
299 * various colorspaces:
300 *
301 * V4L2_COLORSPACE_SMPTE170M, V4L2_COLORSPACE_470_SYSTEM_M,
302 * V4L2_COLORSPACE_470_SYSTEM_BG, V4L2_COLORSPACE_ADOBERGB and
303 * V4L2_COLORSPACE_JPEG: V4L2_YCBCR_ENC_601
304 *
305 * V4L2_COLORSPACE_REC709 and V4L2_COLORSPACE_DCI_P3: V4L2_YCBCR_ENC_709
306 *
307 * V4L2_COLORSPACE_SRGB: V4L2_YCBCR_ENC_SYCC
308 *
309 * V4L2_COLORSPACE_BT2020: V4L2_YCBCR_ENC_BT2020
310 *
311 * V4L2_COLORSPACE_SMPTE240M: V4L2_YCBCR_ENC_SMPTE240M
312 */
313 V4L2_YCBCR_ENC_DEFAULT = 0,
5377d91f 314
0579e6e3
MCC
315 /* ITU-R 601 -- SDTV */
316 V4L2_YCBCR_ENC_601 = 1,
5377d91f 317
0579e6e3
MCC
318 /* Rec. 709 -- HDTV */
319 V4L2_YCBCR_ENC_709 = 2,
5377d91f 320
0579e6e3
MCC
321 /* ITU-R 601/EN 61966-2-4 Extended Gamut -- SDTV */
322 V4L2_YCBCR_ENC_XV601 = 3,
5377d91f 323
0579e6e3
MCC
324 /* Rec. 709/EN 61966-2-4 Extended Gamut -- HDTV */
325 V4L2_YCBCR_ENC_XV709 = 4,
5377d91f 326
0579e6e3
MCC
327 /* sYCC (Y'CbCr encoding of sRGB) */
328 V4L2_YCBCR_ENC_SYCC = 5,
5377d91f 329
0579e6e3
MCC
330 /* BT.2020 Non-constant Luminance Y'CbCr */
331 V4L2_YCBCR_ENC_BT2020 = 6,
5377d91f 332
0579e6e3
MCC
333 /* BT.2020 Constant Luminance Y'CbcCrc */
334 V4L2_YCBCR_ENC_BT2020_CONST_LUM = 7,
5377d91f 335
0579e6e3
MCC
336 /* SMPTE 240M -- Obsolete HDTV */
337 V4L2_YCBCR_ENC_SMPTE240M = 8,
5377d91f
MH
338 };
339
340 /*
341 * Determine how YCBCR_ENC_DEFAULT should map to a proper Y'CbCr encoding.
342 * This depends on the colorspace.
343 */
0579e6e3
MCC
344 #define V4L2_MAP_YCBCR_ENC_DEFAULT(colsp)
345 (((colsp) == V4L2_COLORSPACE_REC709 ||
346 (colsp) == V4L2_COLORSPACE_DCI_P3) ? V4L2_YCBCR_ENC_709 :
347 ((colsp) == V4L2_COLORSPACE_BT2020 ? V4L2_YCBCR_ENC_BT2020 :
348 ((colsp) == V4L2_COLORSPACE_SMPTE240M ? V4L2_YCBCR_ENC_SMPTE240M :
349 V4L2_YCBCR_ENC_601)))
5377d91f
MH
350
351 enum v4l2_quantization {
0579e6e3
MCC
352 /*
353 * The default for R'G'B' quantization is always full range, except
354 * for the BT2020 colorspace. For Y'CbCr the quantization is always
355 * limited range, except for COLORSPACE_JPEG, SYCC, XV601 or XV709:
356 * those are full range.
357 */
358 V4L2_QUANTIZATION_DEFAULT = 0,
359 V4L2_QUANTIZATION_FULL_RANGE = 1,
360 V4L2_QUANTIZATION_LIM_RANGE = 2,
5377d91f
MH
361 };
362
363 /*
364 * Determine how QUANTIZATION_DEFAULT should map to a proper quantization.
365 * This depends on whether the image is RGB or not, the colorspace and the
366 * Y'CbCr encoding.
367 */
0579e6e3
MCC
368 #define V4L2_MAP_QUANTIZATION_DEFAULT(is_rgb, colsp, ycbcr_enc)
369 (((is_rgb) && (colsp) == V4L2_COLORSPACE_BT2020) ? V4L2_QUANTIZATION_LIM_RANGE :
370 (((is_rgb) || (ycbcr_enc) == V4L2_YCBCR_ENC_XV601 ||
371 (ycbcr_enc) == V4L2_YCBCR_ENC_XV709 || (colsp) == V4L2_COLORSPACE_JPEG) ?
372 V4L2_QUANTIZATION_FULL_RANGE : V4L2_QUANTIZATION_LIM_RANGE))
5377d91f
MH
373
374 enum v4l2_priority {
0579e6e3
MCC
375 V4L2_PRIORITY_UNSET = 0, /* not initialized */
376 V4L2_PRIORITY_BACKGROUND = 1,
377 V4L2_PRIORITY_INTERACTIVE = 2,
378 V4L2_PRIORITY_RECORD = 3,
379 V4L2_PRIORITY_DEFAULT = V4L2_PRIORITY_INTERACTIVE,
5377d91f
MH
380 };
381
382 struct v4l2_rect {
0579e6e3
MCC
383 __s32 left;
384 __s32 top;
385 __u32 width;
386 __u32 height;
5377d91f
MH
387 };
388
389 struct v4l2_fract {
0579e6e3
MCC
390 __u32 numerator;
391 __u32 denominator;
5377d91f
MH
392 };
393
394 /**
395 * struct v4l2_capability - Describes V4L2 device caps returned by VIDIOC_QUERYCAP
396 *
397 * @driver: name of the driver module (e.g. "bttv")
398 * @card: name of the card (e.g. "Hauppauge WinTV")
399 * @bus_info: name of the bus (e.g. "PCI:" + pci_name(pci_dev) )
400 * @version: KERNEL_VERSION
401 * @capabilities: capabilities of the physical device as a whole
402 * @device_caps: capabilities accessed via this particular device (node)
403 * @reserved: reserved fields for future extensions
404 */
405 struct v4l2_capability {
0579e6e3
MCC
406 __u8 driver[16];
407 __u8 card[32];
408 __u8 bus_info[32];
409 __u32 version;
410 __u32 capabilities;
411 __u32 device_caps;
412 __u32 reserved[3];
5377d91f
MH
413 };
414
415 /* Values for 'capabilities' field */
416 #define V4L2_CAP_VIDEO_CAPTURE 0x00000001 /* Is a video capture device */
417 #define V4L2_CAP_VIDEO_OUTPUT 0x00000002 /* Is a video output device */
418 #define V4L2_CAP_VIDEO_OVERLAY 0x00000004 /* Can do video overlay */
419 #define V4L2_CAP_VBI_CAPTURE 0x00000010 /* Is a raw VBI capture device */
420 #define V4L2_CAP_VBI_OUTPUT 0x00000020 /* Is a raw VBI output device */
421 #define V4L2_CAP_SLICED_VBI_CAPTURE 0x00000040 /* Is a sliced VBI capture device */
422 #define V4L2_CAP_SLICED_VBI_OUTPUT 0x00000080 /* Is a sliced VBI output device */
423 #define V4L2_CAP_RDS_CAPTURE 0x00000100 /* RDS data capture */
424 #define V4L2_CAP_VIDEO_OUTPUT_OVERLAY 0x00000200 /* Can do video output overlay */
425 #define V4L2_CAP_HW_FREQ_SEEK 0x00000400 /* Can do hardware frequency seek */
426 #define V4L2_CAP_RDS_OUTPUT 0x00000800 /* Is an RDS encoder */
427
428 /* Is a video capture device that supports multiplanar formats */
429 #define V4L2_CAP_VIDEO_CAPTURE_MPLANE 0x00001000
430 /* Is a video output device that supports multiplanar formats */
431 #define V4L2_CAP_VIDEO_OUTPUT_MPLANE 0x00002000
432 /* Is a video mem-to-mem device that supports multiplanar formats */
433 #define V4L2_CAP_VIDEO_M2M_MPLANE 0x00004000
434 /* Is a video mem-to-mem device */
435 #define V4L2_CAP_VIDEO_M2M 0x00008000
436
437 #define V4L2_CAP_TUNER 0x00010000 /* has a tuner */
438 #define V4L2_CAP_AUDIO 0x00020000 /* has audio support */
439 #define V4L2_CAP_RADIO 0x00040000 /* is a radio device */
440 #define V4L2_CAP_MODULATOR 0x00080000 /* has a modulator */
441
442 #define V4L2_CAP_SDR_CAPTURE 0x00100000 /* Is a SDR capture device */
443 #define V4L2_CAP_EXT_PIX_FORMAT 0x00200000 /* Supports the extended pixel format */
444 #define V4L2_CAP_SDR_OUTPUT 0x00400000 /* Is a SDR output device */
445
446 #define V4L2_CAP_READWRITE 0x01000000 /* read/write systemcalls */
447 #define V4L2_CAP_ASYNCIO 0x02000000 /* async I/O */
448 #define V4L2_CAP_STREAMING 0x04000000 /* streaming I/O ioctls */
449
450 #define V4L2_CAP_DEVICE_CAPS 0x80000000 /* sets device capabilities field */
451
452 /*
453 * V I D E O I M A G E F O R M A T
454 */
455 struct v4l2_pix_format {
0579e6e3
MCC
456 __u32 width;
457 __u32 height;
458 __u32 pixelformat;
459 __u32 field; /* enum v4l2_field */
460 __u32 bytesperline; /* for padding, zero if unused */
461 __u32 sizeimage;
462 __u32 colorspace; /* enum v4l2_colorspace */
463 __u32 priv; /* private data, depends on pixelformat */
464 __u32 flags; /* format flags (V4L2_PIX_FMT_FLAG_*) */
465 __u32 ycbcr_enc; /* enum v4l2_ycbcr_encoding */
466 __u32 quantization; /* enum v4l2_quantization */
467 __u32 xfer_func; /* enum v4l2_xfer_func */
5377d91f
MH
468 };
469
470 /* Pixel format FOURCC depth Description */
471
472 /* RGB formats */
473 #define V4L2_PIX_FMT_RGB332 v4l2_fourcc('R', 'G', 'B', '1') /* 8 RGB-3-3-2 */
474 #define V4L2_PIX_FMT_RGB444 v4l2_fourcc('R', '4', '4', '4') /* 16 xxxxrrrr ggggbbbb */
475 #define V4L2_PIX_FMT_ARGB444 v4l2_fourcc('A', 'R', '1', '2') /* 16 aaaarrrr ggggbbbb */
476 #define V4L2_PIX_FMT_XRGB444 v4l2_fourcc('X', 'R', '1', '2') /* 16 xxxxrrrr ggggbbbb */
477 #define V4L2_PIX_FMT_RGB555 v4l2_fourcc('R', 'G', 'B', 'O') /* 16 RGB-5-5-5 */
478 #define V4L2_PIX_FMT_ARGB555 v4l2_fourcc('A', 'R', '1', '5') /* 16 ARGB-1-5-5-5 */
479 #define V4L2_PIX_FMT_XRGB555 v4l2_fourcc('X', 'R', '1', '5') /* 16 XRGB-1-5-5-5 */
480 #define V4L2_PIX_FMT_RGB565 v4l2_fourcc('R', 'G', 'B', 'P') /* 16 RGB-5-6-5 */
481 #define V4L2_PIX_FMT_RGB555X v4l2_fourcc('R', 'G', 'B', 'Q') /* 16 RGB-5-5-5 BE */
482 #define V4L2_PIX_FMT_ARGB555X v4l2_fourcc_be('A', 'R', '1', '5') /* 16 ARGB-5-5-5 BE */
483 #define V4L2_PIX_FMT_XRGB555X v4l2_fourcc_be('X', 'R', '1', '5') /* 16 XRGB-5-5-5 BE */
484 #define V4L2_PIX_FMT_RGB565X v4l2_fourcc('R', 'G', 'B', 'R') /* 16 RGB-5-6-5 BE */
485 #define V4L2_PIX_FMT_BGR666 v4l2_fourcc('B', 'G', 'R', 'H') /* 18 BGR-6-6-6 */
486 #define V4L2_PIX_FMT_BGR24 v4l2_fourcc('B', 'G', 'R', '3') /* 24 BGR-8-8-8 */
487 #define V4L2_PIX_FMT_RGB24 v4l2_fourcc('R', 'G', 'B', '3') /* 24 RGB-8-8-8 */
488 #define V4L2_PIX_FMT_BGR32 v4l2_fourcc('B', 'G', 'R', '4') /* 32 BGR-8-8-8-8 */
489 #define V4L2_PIX_FMT_ABGR32 v4l2_fourcc('A', 'R', '2', '4') /* 32 BGRA-8-8-8-8 */
490 #define V4L2_PIX_FMT_XBGR32 v4l2_fourcc('X', 'R', '2', '4') /* 32 BGRX-8-8-8-8 */
491 #define V4L2_PIX_FMT_RGB32 v4l2_fourcc('R', 'G', 'B', '4') /* 32 RGB-8-8-8-8 */
492 #define V4L2_PIX_FMT_ARGB32 v4l2_fourcc('B', 'A', '2', '4') /* 32 ARGB-8-8-8-8 */
493 #define V4L2_PIX_FMT_XRGB32 v4l2_fourcc('B', 'X', '2', '4') /* 32 XRGB-8-8-8-8 */
494
495 /* Grey formats */
496 #define V4L2_PIX_FMT_GREY v4l2_fourcc('G', 'R', 'E', 'Y') /* 8 Greyscale */
497 #define V4L2_PIX_FMT_Y4 v4l2_fourcc('Y', '0', '4', ' ') /* 4 Greyscale */
498 #define V4L2_PIX_FMT_Y6 v4l2_fourcc('Y', '0', '6', ' ') /* 6 Greyscale */
499 #define V4L2_PIX_FMT_Y10 v4l2_fourcc('Y', '1', '0', ' ') /* 10 Greyscale */
500 #define V4L2_PIX_FMT_Y12 v4l2_fourcc('Y', '1', '2', ' ') /* 12 Greyscale */
501 #define V4L2_PIX_FMT_Y16 v4l2_fourcc('Y', '1', '6', ' ') /* 16 Greyscale */
502 #define V4L2_PIX_FMT_Y16_BE v4l2_fourcc_be('Y', '1', '6', ' ') /* 16 Greyscale BE */
503
504 /* Grey bit-packed formats */
505 #define V4L2_PIX_FMT_Y10BPACK v4l2_fourcc('Y', '1', '0', 'B') /* 10 Greyscale bit-packed */
506
507 /* Palette formats */
508 #define V4L2_PIX_FMT_PAL8 v4l2_fourcc('P', 'A', 'L', '8') /* 8 8-bit palette */
509
510 /* Chrominance formats */
511 #define V4L2_PIX_FMT_UV8 v4l2_fourcc('U', 'V', '8', ' ') /* 8 UV 4:4 */
512
513 /* Luminance+Chrominance formats */
514 #define V4L2_PIX_FMT_YVU410 v4l2_fourcc('Y', 'V', 'U', '9') /* 9 YVU 4:1:0 */
515 #define V4L2_PIX_FMT_YVU420 v4l2_fourcc('Y', 'V', '1', '2') /* 12 YVU 4:2:0 */
516 #define V4L2_PIX_FMT_YUYV v4l2_fourcc('Y', 'U', 'Y', 'V') /* 16 YUV 4:2:2 */
517 #define V4L2_PIX_FMT_YYUV v4l2_fourcc('Y', 'Y', 'U', 'V') /* 16 YUV 4:2:2 */
518 #define V4L2_PIX_FMT_YVYU v4l2_fourcc('Y', 'V', 'Y', 'U') /* 16 YVU 4:2:2 */
519 #define V4L2_PIX_FMT_UYVY v4l2_fourcc('U', 'Y', 'V', 'Y') /* 16 YUV 4:2:2 */
520 #define V4L2_PIX_FMT_VYUY v4l2_fourcc('V', 'Y', 'U', 'Y') /* 16 YUV 4:2:2 */
521 #define V4L2_PIX_FMT_YUV422P v4l2_fourcc('4', '2', '2', 'P') /* 16 YVU422 planar */
522 #define V4L2_PIX_FMT_YUV411P v4l2_fourcc('4', '1', '1', 'P') /* 16 YVU411 planar */
523 #define V4L2_PIX_FMT_Y41P v4l2_fourcc('Y', '4', '1', 'P') /* 12 YUV 4:1:1 */
524 #define V4L2_PIX_FMT_YUV444 v4l2_fourcc('Y', '4', '4', '4') /* 16 xxxxyyyy uuuuvvvv */
525 #define V4L2_PIX_FMT_YUV555 v4l2_fourcc('Y', 'U', 'V', 'O') /* 16 YUV-5-5-5 */
526 #define V4L2_PIX_FMT_YUV565 v4l2_fourcc('Y', 'U', 'V', 'P') /* 16 YUV-5-6-5 */
527 #define V4L2_PIX_FMT_YUV32 v4l2_fourcc('Y', 'U', 'V', '4') /* 32 YUV-8-8-8-8 */
528 #define V4L2_PIX_FMT_YUV410 v4l2_fourcc('Y', 'U', 'V', '9') /* 9 YUV 4:1:0 */
529 #define V4L2_PIX_FMT_YUV420 v4l2_fourcc('Y', 'U', '1', '2') /* 12 YUV 4:2:0 */
530 #define V4L2_PIX_FMT_HI240 v4l2_fourcc('H', 'I', '2', '4') /* 8 8-bit color */
531 #define V4L2_PIX_FMT_HM12 v4l2_fourcc('H', 'M', '1', '2') /* 8 YUV 4:2:0 16x16 macroblocks */
532 #define V4L2_PIX_FMT_M420 v4l2_fourcc('M', '4', '2', '0') /* 12 YUV 4:2:0 2 lines y, 1 line uv interleaved */
533
534 /* two planes -- one Y, one Cr + Cb interleaved */
535 #define V4L2_PIX_FMT_NV12 v4l2_fourcc('N', 'V', '1', '2') /* 12 Y/CbCr 4:2:0 */
536 #define V4L2_PIX_FMT_NV21 v4l2_fourcc('N', 'V', '2', '1') /* 12 Y/CrCb 4:2:0 */
537 #define V4L2_PIX_FMT_NV16 v4l2_fourcc('N', 'V', '1', '6') /* 16 Y/CbCr 4:2:2 */
538 #define V4L2_PIX_FMT_NV61 v4l2_fourcc('N', 'V', '6', '1') /* 16 Y/CrCb 4:2:2 */
539 #define V4L2_PIX_FMT_NV24 v4l2_fourcc('N', 'V', '2', '4') /* 24 Y/CbCr 4:4:4 */
540 #define V4L2_PIX_FMT_NV42 v4l2_fourcc('N', 'V', '4', '2') /* 24 Y/CrCb 4:4:4 */
541
542 /* two non contiguous planes - one Y, one Cr + Cb interleaved */
543 #define V4L2_PIX_FMT_NV12M v4l2_fourcc('N', 'M', '1', '2') /* 12 Y/CbCr 4:2:0 */
544 #define V4L2_PIX_FMT_NV21M v4l2_fourcc('N', 'M', '2', '1') /* 21 Y/CrCb 4:2:0 */
545 #define V4L2_PIX_FMT_NV16M v4l2_fourcc('N', 'M', '1', '6') /* 16 Y/CbCr 4:2:2 */
546 #define V4L2_PIX_FMT_NV61M v4l2_fourcc('N', 'M', '6', '1') /* 16 Y/CrCb 4:2:2 */
547 #define V4L2_PIX_FMT_NV12MT v4l2_fourcc('T', 'M', '1', '2') /* 12 Y/CbCr 4:2:0 64x32 macroblocks */
548 #define V4L2_PIX_FMT_NV12MT_16X16 v4l2_fourcc('V', 'M', '1', '2') /* 12 Y/CbCr 4:2:0 16x16 macroblocks */
549
550 /* three non contiguous planes - Y, Cb, Cr */
551 #define V4L2_PIX_FMT_YUV420M v4l2_fourcc('Y', 'M', '1', '2') /* 12 YUV420 planar */
552 #define V4L2_PIX_FMT_YVU420M v4l2_fourcc('Y', 'M', '2', '1') /* 12 YVU420 planar */
553 #define V4L2_PIX_FMT_YUV422M v4l2_fourcc('Y', 'M', '1', '6') /* 16 YUV422 planar */
554 #define V4L2_PIX_FMT_YVU422M v4l2_fourcc('Y', 'M', '6', '1') /* 16 YVU422 planar */
555 #define V4L2_PIX_FMT_YUV444M v4l2_fourcc('Y', 'M', '2', '4') /* 24 YUV444 planar */
556 #define V4L2_PIX_FMT_YVU444M v4l2_fourcc('Y', 'M', '4', '2') /* 24 YVU444 planar */
557
558 /* Bayer formats - see http://www.siliconimaging.com/RGB%20Bayer.htm */
559 #define V4L2_PIX_FMT_SBGGR8 v4l2_fourcc('B', 'A', '8', '1') /* 8 BGBG.. GRGR.. */
560 #define V4L2_PIX_FMT_SGBRG8 v4l2_fourcc('G', 'B', 'R', 'G') /* 8 GBGB.. RGRG.. */
561 #define V4L2_PIX_FMT_SGRBG8 v4l2_fourcc('G', 'R', 'B', 'G') /* 8 GRGR.. BGBG.. */
562 #define V4L2_PIX_FMT_SRGGB8 v4l2_fourcc('R', 'G', 'G', 'B') /* 8 RGRG.. GBGB.. */
563 #define V4L2_PIX_FMT_SBGGR10 v4l2_fourcc('B', 'G', '1', '0') /* 10 BGBG.. GRGR.. */
564 #define V4L2_PIX_FMT_SGBRG10 v4l2_fourcc('G', 'B', '1', '0') /* 10 GBGB.. RGRG.. */
565 #define V4L2_PIX_FMT_SGRBG10 v4l2_fourcc('B', 'A', '1', '0') /* 10 GRGR.. BGBG.. */
566 #define V4L2_PIX_FMT_SRGGB10 v4l2_fourcc('R', 'G', '1', '0') /* 10 RGRG.. GBGB.. */
0579e6e3 567 /* 10bit raw bayer packed, 5 bytes for every 4 pixels */
5377d91f
MH
568 #define V4L2_PIX_FMT_SBGGR10P v4l2_fourcc('p', 'B', 'A', 'A')
569 #define V4L2_PIX_FMT_SGBRG10P v4l2_fourcc('p', 'G', 'A', 'A')
570 #define V4L2_PIX_FMT_SGRBG10P v4l2_fourcc('p', 'g', 'A', 'A')
571 #define V4L2_PIX_FMT_SRGGB10P v4l2_fourcc('p', 'R', 'A', 'A')
0579e6e3 572 /* 10bit raw bayer a-law compressed to 8 bits */
5377d91f
MH
573 #define V4L2_PIX_FMT_SBGGR10ALAW8 v4l2_fourcc('a', 'B', 'A', '8')
574 #define V4L2_PIX_FMT_SGBRG10ALAW8 v4l2_fourcc('a', 'G', 'A', '8')
575 #define V4L2_PIX_FMT_SGRBG10ALAW8 v4l2_fourcc('a', 'g', 'A', '8')
576 #define V4L2_PIX_FMT_SRGGB10ALAW8 v4l2_fourcc('a', 'R', 'A', '8')
0579e6e3 577 /* 10bit raw bayer DPCM compressed to 8 bits */
5377d91f
MH
578 #define V4L2_PIX_FMT_SBGGR10DPCM8 v4l2_fourcc('b', 'B', 'A', '8')
579 #define V4L2_PIX_FMT_SGBRG10DPCM8 v4l2_fourcc('b', 'G', 'A', '8')
580 #define V4L2_PIX_FMT_SGRBG10DPCM8 v4l2_fourcc('B', 'D', '1', '0')
581 #define V4L2_PIX_FMT_SRGGB10DPCM8 v4l2_fourcc('b', 'R', 'A', '8')
582 #define V4L2_PIX_FMT_SBGGR12 v4l2_fourcc('B', 'G', '1', '2') /* 12 BGBG.. GRGR.. */
583 #define V4L2_PIX_FMT_SGBRG12 v4l2_fourcc('G', 'B', '1', '2') /* 12 GBGB.. RGRG.. */
584 #define V4L2_PIX_FMT_SGRBG12 v4l2_fourcc('B', 'A', '1', '2') /* 12 GRGR.. BGBG.. */
585 #define V4L2_PIX_FMT_SRGGB12 v4l2_fourcc('R', 'G', '1', '2') /* 12 RGRG.. GBGB.. */
586 #define V4L2_PIX_FMT_SBGGR16 v4l2_fourcc('B', 'Y', 'R', '2') /* 16 BGBG.. GRGR.. */
587
588 /* compressed formats */
589 #define V4L2_PIX_FMT_MJPEG v4l2_fourcc('M', 'J', 'P', 'G') /* Motion-JPEG */
590 #define V4L2_PIX_FMT_JPEG v4l2_fourcc('J', 'P', 'E', 'G') /* JFIF JPEG */
591 #define V4L2_PIX_FMT_DV v4l2_fourcc('d', 'v', 's', 'd') /* 1394 */
592 #define V4L2_PIX_FMT_MPEG v4l2_fourcc('M', 'P', 'E', 'G') /* MPEG-1/2/4 Multiplexed */
593 #define V4L2_PIX_FMT_H264 v4l2_fourcc('H', '2', '6', '4') /* H264 with start codes */
594 #define V4L2_PIX_FMT_H264_NO_SC v4l2_fourcc('A', 'V', 'C', '1') /* H264 without start codes */
595 #define V4L2_PIX_FMT_H264_MVC v4l2_fourcc('M', '2', '6', '4') /* H264 MVC */
596 #define V4L2_PIX_FMT_H263 v4l2_fourcc('H', '2', '6', '3') /* H263 */
597 #define V4L2_PIX_FMT_MPEG1 v4l2_fourcc('M', 'P', 'G', '1') /* MPEG-1 ES */
598 #define V4L2_PIX_FMT_MPEG2 v4l2_fourcc('M', 'P', 'G', '2') /* MPEG-2 ES */
599 #define V4L2_PIX_FMT_MPEG4 v4l2_fourcc('M', 'P', 'G', '4') /* MPEG-4 part 2 ES */
600 #define V4L2_PIX_FMT_XVID v4l2_fourcc('X', 'V', 'I', 'D') /* Xvid */
601 #define V4L2_PIX_FMT_VC1_ANNEX_G v4l2_fourcc('V', 'C', '1', 'G') /* SMPTE 421M Annex G compliant stream */
602 #define V4L2_PIX_FMT_VC1_ANNEX_L v4l2_fourcc('V', 'C', '1', 'L') /* SMPTE 421M Annex L compliant stream */
603 #define V4L2_PIX_FMT_VP8 v4l2_fourcc('V', 'P', '8', '0') /* VP8 */
604
605 /* Vendor-specific formats */
606 #define V4L2_PIX_FMT_CPIA1 v4l2_fourcc('C', 'P', 'I', 'A') /* cpia1 YUV */
607 #define V4L2_PIX_FMT_WNVA v4l2_fourcc('W', 'N', 'V', 'A') /* Winnov hw compress */
608 #define V4L2_PIX_FMT_SN9C10X v4l2_fourcc('S', '9', '1', '0') /* SN9C10x compression */
609 #define V4L2_PIX_FMT_SN9C20X_I420 v4l2_fourcc('S', '9', '2', '0') /* SN9C20x YUV 4:2:0 */
610 #define V4L2_PIX_FMT_PWC1 v4l2_fourcc('P', 'W', 'C', '1') /* pwc older webcam */
611 #define V4L2_PIX_FMT_PWC2 v4l2_fourcc('P', 'W', 'C', '2') /* pwc newer webcam */
612 #define V4L2_PIX_FMT_ET61X251 v4l2_fourcc('E', '6', '2', '5') /* ET61X251 compression */
613 #define V4L2_PIX_FMT_SPCA501 v4l2_fourcc('S', '5', '0', '1') /* YUYV per line */
614 #define V4L2_PIX_FMT_SPCA505 v4l2_fourcc('S', '5', '0', '5') /* YYUV per line */
615 #define V4L2_PIX_FMT_SPCA508 v4l2_fourcc('S', '5', '0', '8') /* YUVY per line */
616 #define V4L2_PIX_FMT_SPCA561 v4l2_fourcc('S', '5', '6', '1') /* compressed GBRG bayer */
617 #define V4L2_PIX_FMT_PAC207 v4l2_fourcc('P', '2', '0', '7') /* compressed BGGR bayer */
618 #define V4L2_PIX_FMT_MR97310A v4l2_fourcc('M', '3', '1', '0') /* compressed BGGR bayer */
619 #define V4L2_PIX_FMT_JL2005BCD v4l2_fourcc('J', 'L', '2', '0') /* compressed RGGB bayer */
620 #define V4L2_PIX_FMT_SN9C2028 v4l2_fourcc('S', 'O', 'N', 'X') /* compressed GBRG bayer */
621 #define V4L2_PIX_FMT_SQ905C v4l2_fourcc('9', '0', '5', 'C') /* compressed RGGB bayer */
622 #define V4L2_PIX_FMT_PJPG v4l2_fourcc('P', 'J', 'P', 'G') /* Pixart 73xx JPEG */
623 #define V4L2_PIX_FMT_OV511 v4l2_fourcc('O', '5', '1', '1') /* ov511 JPEG */
624 #define V4L2_PIX_FMT_OV518 v4l2_fourcc('O', '5', '1', '8') /* ov518 JPEG */
625 #define V4L2_PIX_FMT_STV0680 v4l2_fourcc('S', '6', '8', '0') /* stv0680 bayer */
626 #define V4L2_PIX_FMT_TM6000 v4l2_fourcc('T', 'M', '6', '0') /* tm5600/tm60x0 */
627 #define V4L2_PIX_FMT_CIT_YYVYUY v4l2_fourcc('C', 'I', 'T', 'V') /* one line of Y then 1 line of VYUY */
628 #define V4L2_PIX_FMT_KONICA420 v4l2_fourcc('K', 'O', 'N', 'I') /* YUV420 planar in blocks of 256 pixels */
629 #define V4L2_PIX_FMT_JPGL v4l2_fourcc('J', 'P', 'G', 'L') /* JPEG-Lite */
630 #define V4L2_PIX_FMT_SE401 v4l2_fourcc('S', '4', '0', '1') /* se401 janggu compressed rgb */
631 #define V4L2_PIX_FMT_S5C_UYVY_JPG v4l2_fourcc('S', '5', 'C', 'I') /* S5C73M3 interleaved UYVY/JPEG */
632 #define V4L2_PIX_FMT_Y8I v4l2_fourcc('Y', '8', 'I', ' ') /* Greyscale 8-bit L/R interleaved */
633 #define V4L2_PIX_FMT_Y12I v4l2_fourcc('Y', '1', '2', 'I') /* Greyscale 12-bit L/R interleaved */
634 #define V4L2_PIX_FMT_Z16 v4l2_fourcc('Z', '1', '6', ' ') /* Depth data 16-bit */
635
636 /* SDR formats - used only for Software Defined Radio devices */
637 #define V4L2_SDR_FMT_CU8 v4l2_fourcc('C', 'U', '0', '8') /* IQ u8 */
638 #define V4L2_SDR_FMT_CU16LE v4l2_fourcc('C', 'U', '1', '6') /* IQ u16le */
639 #define V4L2_SDR_FMT_CS8 v4l2_fourcc('C', 'S', '0', '8') /* complex s8 */
640 #define V4L2_SDR_FMT_CS14LE v4l2_fourcc('C', 'S', '1', '4') /* complex s14le */
641 #define V4L2_SDR_FMT_RU12LE v4l2_fourcc('R', 'U', '1', '2') /* real u12le */
642
643 /* priv field value to indicates that subsequent fields are valid. */
644 #define V4L2_PIX_FMT_PRIV_MAGIC 0xfeedcafe
645
646 /* Flags */
647 #define V4L2_PIX_FMT_FLAG_PREMUL_ALPHA 0x00000001
648
649 /*
650 * F O R M A T E N U M E R A T I O N
651 */
652 struct v4l2_fmtdesc {
0579e6e3
MCC
653 __u32 index; /* Format number */
654 __u32 type; /* enum v4l2_buf_type */
655 __u32 flags;
656 __u8 description[32]; /* Description string */
657 __u32 pixelformat; /* Format fourcc */
658 __u32 reserved[4];
5377d91f
MH
659 };
660
661 #define V4L2_FMT_FLAG_COMPRESSED 0x0001
662 #define V4L2_FMT_FLAG_EMULATED 0x0002
663
0579e6e3 664 /* Frame Size and frame rate enumeration */
5377d91f
MH
665 /*
666 * F R A M E S I Z E E N U M E R A T I O N
667 */
668 enum v4l2_frmsizetypes {
0579e6e3
MCC
669 V4L2_FRMSIZE_TYPE_DISCRETE = 1,
670 V4L2_FRMSIZE_TYPE_CONTINUOUS = 2,
671 V4L2_FRMSIZE_TYPE_STEPWISE = 3,
5377d91f
MH
672 };
673
674 struct v4l2_frmsize_discrete {
0579e6e3
MCC
675 __u32 width; /* Frame width [pixel] */
676 __u32 height; /* Frame height [pixel] */
5377d91f
MH
677 };
678
679 struct v4l2_frmsize_stepwise {
0579e6e3
MCC
680 __u32 min_width; /* Minimum frame width [pixel] */
681 __u32 max_width; /* Maximum frame width [pixel] */
682 __u32 step_width; /* Frame width step size [pixel] */
683 __u32 min_height; /* Minimum frame height [pixel] */
684 __u32 max_height; /* Maximum frame height [pixel] */
685 __u32 step_height; /* Frame height step size [pixel] */
5377d91f
MH
686 };
687
688 struct v4l2_frmsizeenum {
0579e6e3
MCC
689 __u32 index; /* Frame size number */
690 __u32 pixel_format; /* Pixel format */
691 __u32 type; /* Frame size type the device supports. */
5377d91f 692
0579e6e3
MCC
693 union { /* Frame size */
694 struct v4l2_frmsize_discrete discrete;
695 struct v4l2_frmsize_stepwise stepwise;
696 };
5377d91f 697
0579e6e3 698 __u32 reserved[2]; /* Reserved space for future use */
5377d91f
MH
699 };
700
701 /*
702 * F R A M E R A T E E N U M E R A T I O N
703 */
704 enum v4l2_frmivaltypes {
0579e6e3
MCC
705 V4L2_FRMIVAL_TYPE_DISCRETE = 1,
706 V4L2_FRMIVAL_TYPE_CONTINUOUS = 2,
707 V4L2_FRMIVAL_TYPE_STEPWISE = 3,
5377d91f
MH
708 };
709
710 struct v4l2_frmival_stepwise {
0579e6e3
MCC
711 struct v4l2_fract min; /* Minimum frame interval [s] */
712 struct v4l2_fract max; /* Maximum frame interval [s] */
713 struct v4l2_fract step; /* Frame interval step size [s] */
5377d91f
MH
714 };
715
716 struct v4l2_frmivalenum {
0579e6e3
MCC
717 __u32 index; /* Frame format index */
718 __u32 pixel_format; /* Pixel format */
719 __u32 width; /* Frame width */
720 __u32 height; /* Frame height */
721 __u32 type; /* Frame interval type the device supports. */
5377d91f 722
0579e6e3
MCC
723 union { /* Frame interval */
724 struct v4l2_fract discrete;
725 struct v4l2_frmival_stepwise stepwise;
726 };
5377d91f 727
0579e6e3 728 __u32 reserved[2]; /* Reserved space for future use */
5377d91f
MH
729 };
730
731 /*
732 * T I M E C O D E
733 */
734 struct v4l2_timecode {
0579e6e3
MCC
735 __u32 type;
736 __u32 flags;
737 __u8 frames;
738 __u8 seconds;
739 __u8 minutes;
740 __u8 hours;
741 __u8 userbits[4];
5377d91f
MH
742 };
743
744 /* Type */
745 #define V4L2_TC_TYPE_24FPS 1
746 #define V4L2_TC_TYPE_25FPS 2
747 #define V4L2_TC_TYPE_30FPS 3
748 #define V4L2_TC_TYPE_50FPS 4
749 #define V4L2_TC_TYPE_60FPS 5
750
751 /* Flags */
752 #define V4L2_TC_FLAG_DROPFRAME 0x0001 /* "drop-frame" mode */
753 #define V4L2_TC_FLAG_COLORFRAME 0x0002
754 #define V4L2_TC_USERBITS_field 0x000C
755 #define V4L2_TC_USERBITS_USERDEFINED 0x0000
756 #define V4L2_TC_USERBITS_8BITCHARS 0x0008
757 /* The above is based on SMPTE timecodes */
758
759 struct v4l2_jpegcompression {
0579e6e3
MCC
760 int quality;
761
762 int APPn; /* Number of APP segment to be written,
763 * must be 0..15 */
764 int APP_len; /* Length of data in JPEG APPn segment */
765 char APP_data[60]; /* Data in the JPEG APPn segment. */
766
767 int COM_len; /* Length of data in JPEG COM segment */
768 char COM_data[60]; /* Data in JPEG COM segment */
769
770 __u32 jpeg_markers; /* Which markers should go into the JPEG
771 * output. Unless you exactly know what
772 * you do, leave them untouched.
773 * Including less markers will make the
774 * resulting code smaller, but there will
775 * be fewer applications which can read it.
776 * The presence of the APP and COM marker
777 * is influenced by APP_len and COM_len
778 * ONLY, not by this property! */
5377d91f
MH
779
780 #define V4L2_JPEG_MARKER_DHT (1<<3) /* Define Huffman Tables */
781 #define V4L2_JPEG_MARKER_DQT (1<<4) /* Define Quantization Tables */
782 #define V4L2_JPEG_MARKER_DRI (1<<5) /* Define Restart Interval */
783 #define V4L2_JPEG_MARKER_COM (1<<6) /* Comment segment */
784 #define V4L2_JPEG_MARKER_APP (1<<7) /* App segment, driver will
0579e6e3 785 * always use APP0 */
5377d91f
MH
786 };
787
788 /*
789 * M E M O R Y - M A P P I N G B U F F E R S
790 */
791 struct v4l2_requestbuffers {
0579e6e3
MCC
792 __u32 count;
793 __u32 type; /* enum v4l2_buf_type */
794 __u32 memory; /* enum v4l2_memory */
795 __u32 reserved[2];
5377d91f
MH
796 };
797
798 /**
799 * struct v4l2_plane - plane info for multi-planar buffers
800 * @bytesused: number of bytes occupied by data in the plane (payload)
801 * @length: size of this plane (NOT the payload) in bytes
802 * @mem_offset: when memory in the associated struct v4l2_buffer is
803 * V4L2_MEMORY_MMAP, equals the offset from the start of
804 * the device memory for this plane (or is a "cookie" that
805 * should be passed to mmap() called on the video node)
806 * @userptr: when memory is V4L2_MEMORY_USERPTR, a userspace pointer
807 * pointing to this plane
808 * @fd: when memory is V4L2_MEMORY_DMABUF, a userspace file
809 * descriptor associated with this plane
810 * @data_offset: offset in the plane to the start of data; usually 0,
811 * unless there is a header in front of the data
812 *
813 * Multi-planar buffers consist of one or more planes, e.g. an YCbCr buffer
814 * with two planes can have one plane for Y, and another for interleaved CbCr
815 * components. Each plane can reside in a separate memory buffer, or even in
816 * a completely separate memory node (e.g. in embedded devices).
817 */
818 struct v4l2_plane {
0579e6e3
MCC
819 __u32 bytesused;
820 __u32 length;
821 union {
822 __u32 mem_offset;
823 unsigned long userptr;
824 __s32 fd;
825 } m;
826 __u32 data_offset;
827 __u32 reserved[11];
5377d91f
MH
828 };
829
830 /**
831 * struct v4l2_buffer - video buffer info
832 * @index: id number of the buffer
833 * @type: enum v4l2_buf_type; buffer type (type == *_MPLANE for
834 * multiplanar buffers);
835 * @bytesused: number of bytes occupied by data in the buffer (payload);
836 * unused (set to 0) for multiplanar buffers
837 * @flags: buffer informational flags
838 * @field: enum v4l2_field; field order of the image in the buffer
839 * @timestamp: frame timestamp
840 * @timecode: frame timecode
841 * @sequence: sequence count of this frame
842 * @memory: enum v4l2_memory; the method, in which the actual video data is
843 * passed
844 * @offset: for non-multiplanar buffers with memory == V4L2_MEMORY_MMAP;
845 * offset from the start of the device memory for this plane,
846 * (or a "cookie" that should be passed to mmap() as offset)
847 * @userptr: for non-multiplanar buffers with memory == V4L2_MEMORY_USERPTR;
848 * a userspace pointer pointing to this buffer
849 * @fd: for non-multiplanar buffers with memory == V4L2_MEMORY_DMABUF;
850 * a userspace file descriptor associated with this buffer
851 * @planes: for multiplanar buffers; userspace pointer to the array of plane
852 * info structs for this buffer
853 * @length: size in bytes of the buffer (NOT its payload) for single-plane
854 * buffers (when type != *_MPLANE); number of elements in the
855 * planes array for multi-plane buffers
856 *
857 * Contains data exchanged by application and driver using one of the Streaming
858 * I/O methods.
859 */
860 struct v4l2_buffer {
0579e6e3
MCC
861 __u32 index;
862 __u32 type;
863 __u32 bytesused;
864 __u32 flags;
865 __u32 field;
866 struct timeval timestamp;
867 struct v4l2_timecode timecode;
868 __u32 sequence;
869
870 /* memory location */
871 __u32 memory;
872 union {
873 __u32 offset;
874 unsigned long userptr;
875 struct v4l2_plane *planes;
876 __s32 fd;
877 } m;
878 __u32 length;
879 __u32 reserved2;
880 __u32 reserved;
5377d91f
MH
881 };
882
883 /* Flags for 'flags' field */
884 /* Buffer is mapped (flag) */
885 #define V4L2_BUF_FLAG_MAPPED 0x00000001
886 /* Buffer is queued for processing */
887 #define V4L2_BUF_FLAG_QUEUED 0x00000002
888 /* Buffer is ready */
889 #define V4L2_BUF_FLAG_DONE 0x00000004
890 /* Image is a keyframe (I-frame) */
891 #define V4L2_BUF_FLAG_KEYFRAME 0x00000008
892 /* Image is a P-frame */
893 #define V4L2_BUF_FLAG_PFRAME 0x00000010
894 /* Image is a B-frame */
895 #define V4L2_BUF_FLAG_BFRAME 0x00000020
896 /* Buffer is ready, but the data contained within is corrupted. */
897 #define V4L2_BUF_FLAG_ERROR 0x00000040
898 /* timecode field is valid */
899 #define V4L2_BUF_FLAG_TIMECODE 0x00000100
900 /* Buffer is prepared for queuing */
901 #define V4L2_BUF_FLAG_PREPARED 0x00000400
902 /* Cache handling flags */
903 #define V4L2_BUF_FLAG_NO_CACHE_INVALIDATE 0x00000800
904 #define V4L2_BUF_FLAG_NO_CACHE_CLEAN 0x00001000
905 /* Timestamp type */
906 #define V4L2_BUF_FLAG_TIMESTAMP_MASK 0x0000e000
907 #define V4L2_BUF_FLAG_TIMESTAMP_UNKNOWN 0x00000000
908 #define V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC 0x00002000
909 #define V4L2_BUF_FLAG_TIMESTAMP_COPY 0x00004000
910 /* Timestamp sources. */
911 #define V4L2_BUF_FLAG_TSTAMP_SRC_MASK 0x00070000
912 #define V4L2_BUF_FLAG_TSTAMP_SRC_EOF 0x00000000
913 #define V4L2_BUF_FLAG_TSTAMP_SRC_SOE 0x00010000
914 /* mem2mem encoder/decoder */
915 #define V4L2_BUF_FLAG_LAST 0x00100000
916
917 /**
918 * struct v4l2_exportbuffer - export of video buffer as DMABUF file descriptor
919 *
920 * @index: id number of the buffer
921 * @type: enum v4l2_buf_type; buffer type (type == *_MPLANE for
922 * multiplanar buffers);
923 * @plane: index of the plane to be exported, 0 for single plane queues
924 * @flags: flags for newly created file, currently only O_CLOEXEC is
925 * supported, refer to manual of open syscall for more details
926 * @fd: file descriptor associated with DMABUF (set by driver)
927 *
928 * Contains data used for exporting a video buffer as DMABUF file descriptor.
929 * The buffer is identified by a 'cookie' returned by VIDIOC_QUERYBUF
930 * (identical to the cookie used to mmap() the buffer to userspace). All
931 * reserved fields must be set to zero. The field reserved0 is expected to
932 * become a structure 'type' allowing an alternative layout of the structure
933 * content. Therefore this field should not be used for any other extensions.
934 */
935 struct v4l2_exportbuffer {
0579e6e3
MCC
936 __u32 type; /* enum v4l2_buf_type */
937 __u32 index;
938 __u32 plane;
939 __u32 flags;
940 __s32 fd;
941 __u32 reserved[11];
5377d91f
MH
942 };
943
944 /*
945 * O V E R L A Y P R E V I E W
946 */
947 struct v4l2_framebuffer {
0579e6e3
MCC
948 __u32 capability;
949 __u32 flags;
5377d91f
MH
950 /* FIXME: in theory we should pass something like PCI device + memory
951 * region + offset instead of some physical address */
0579e6e3
MCC
952 void *base;
953 struct {
954 __u32 width;
955 __u32 height;
956 __u32 pixelformat;
957 __u32 field; /* enum v4l2_field */
958 __u32 bytesperline; /* for padding, zero if unused */
959 __u32 sizeimage;
960 __u32 colorspace; /* enum v4l2_colorspace */
961 __u32 priv; /* reserved field, set to 0 */
962 } fmt;
5377d91f
MH
963 };
964 /* Flags for the 'capability' field. Read only */
965 #define V4L2_FBUF_CAP_EXTERNOVERLAY 0x0001
966 #define V4L2_FBUF_CAP_CHROMAKEY 0x0002
967 #define V4L2_FBUF_CAP_LIST_CLIPPING 0x0004
968 #define V4L2_FBUF_CAP_BITMAP_CLIPPING 0x0008
969 #define V4L2_FBUF_CAP_LOCAL_ALPHA 0x0010
970 #define V4L2_FBUF_CAP_GLOBAL_ALPHA 0x0020
971 #define V4L2_FBUF_CAP_LOCAL_INV_ALPHA 0x0040
972 #define V4L2_FBUF_CAP_SRC_CHROMAKEY 0x0080
973 /* Flags for the 'flags' field. */
974 #define V4L2_FBUF_FLAG_PRIMARY 0x0001
975 #define V4L2_FBUF_FLAG_OVERLAY 0x0002
976 #define V4L2_FBUF_FLAG_CHROMAKEY 0x0004
977 #define V4L2_FBUF_FLAG_LOCAL_ALPHA 0x0008
978 #define V4L2_FBUF_FLAG_GLOBAL_ALPHA 0x0010
979 #define V4L2_FBUF_FLAG_LOCAL_INV_ALPHA 0x0020
980 #define V4L2_FBUF_FLAG_SRC_CHROMAKEY 0x0040
981
982 struct v4l2_clip {
0579e6e3
MCC
983 struct v4l2_rect c;
984 struct v4l2_clip __user *next;
5377d91f
MH
985 };
986
987 struct v4l2_window {
0579e6e3
MCC
988 struct v4l2_rect w;
989 __u32 field; /* enum v4l2_field */
990 __u32 chromakey;
991 struct v4l2_clip __user *clips;
992 __u32 clipcount;
993 void __user *bitmap;
994 __u8 global_alpha;
5377d91f
MH
995 };
996
997 /*
998 * C A P T U R E P A R A M E T E R S
999 */
1000 struct v4l2_captureparm {
0579e6e3
MCC
1001 __u32 capability; /* Supported modes */
1002 __u32 capturemode; /* Current mode */
1003 struct v4l2_fract timeperframe; /* Time per frame in seconds */
1004 __u32 extendedmode; /* Driver-specific extensions */
1005 __u32 readbuffers; /* # of buffers for read */
1006 __u32 reserved[4];
5377d91f
MH
1007 };
1008
1009 /* Flags for 'capability' and 'capturemode' fields */
1010 #define V4L2_MODE_HIGHQUALITY 0x0001 /* High quality imaging mode */
1011 #define V4L2_CAP_TIMEPERFRAME 0x1000 /* timeperframe field is supported */
1012
1013 struct v4l2_outputparm {
0579e6e3
MCC
1014 __u32 capability; /* Supported modes */
1015 __u32 outputmode; /* Current mode */
1016 struct v4l2_fract timeperframe; /* Time per frame in seconds */
1017 __u32 extendedmode; /* Driver-specific extensions */
1018 __u32 writebuffers; /* # of buffers for write */
1019 __u32 reserved[4];
5377d91f
MH
1020 };
1021
1022 /*
1023 * I N P U T I M A G E C R O P P I N G
1024 */
1025 struct v4l2_cropcap {
0579e6e3
MCC
1026 __u32 type; /* enum v4l2_buf_type */
1027 struct v4l2_rect bounds;
1028 struct v4l2_rect defrect;
1029 struct v4l2_fract pixelaspect;
5377d91f
MH
1030 };
1031
1032 struct v4l2_crop {
0579e6e3
MCC
1033 __u32 type; /* enum v4l2_buf_type */
1034 struct v4l2_rect c;
5377d91f
MH
1035 };
1036
1037 /**
1038 * struct v4l2_selection - selection info
1039 * @type: buffer type (do not use *_MPLANE types)
1040 * @target: Selection target, used to choose one of possible rectangles;
1041 * defined in v4l2-common.h; V4L2_SEL_TGT_* .
1042 * @flags: constraints flags, defined in v4l2-common.h; V4L2_SEL_FLAG_*.
1043 * @r: coordinates of selection window
1044 * @reserved: for future use, rounds structure size to 64 bytes, set to zero
1045 *
1046 * Hardware may use multiple helper windows to process a video stream.
1047 * The structure is used to exchange this selection areas between
1048 * an application and a driver.
1049 */
1050 struct v4l2_selection {
0579e6e3
MCC
1051 __u32 type;
1052 __u32 target;
1053 __u32 flags;
1054 struct v4l2_rect r;
1055 __u32 reserved[9];
5377d91f
MH
1056 };
1057
1058
1059 /*
1060 * A N A L O G V I D E O S T A N D A R D
1061 */
1062
1063 typedef __u64 v4l2_std_id;
1064
1065 /* one bit for each */
1066 #define V4L2_STD_PAL_B ((v4l2_std_id)0x00000001)
1067 #define V4L2_STD_PAL_B1 ((v4l2_std_id)0x00000002)
1068 #define V4L2_STD_PAL_G ((v4l2_std_id)0x00000004)
1069 #define V4L2_STD_PAL_H ((v4l2_std_id)0x00000008)
1070 #define V4L2_STD_PAL_I ((v4l2_std_id)0x00000010)
1071 #define V4L2_STD_PAL_D ((v4l2_std_id)0x00000020)
1072 #define V4L2_STD_PAL_D1 ((v4l2_std_id)0x00000040)
1073 #define V4L2_STD_PAL_K ((v4l2_std_id)0x00000080)
1074
1075 #define V4L2_STD_PAL_M ((v4l2_std_id)0x00000100)
1076 #define V4L2_STD_PAL_N ((v4l2_std_id)0x00000200)
1077 #define V4L2_STD_PAL_Nc ((v4l2_std_id)0x00000400)
1078 #define V4L2_STD_PAL_60 ((v4l2_std_id)0x00000800)
1079
1080 #define V4L2_STD_NTSC_M ((v4l2_std_id)0x00001000) /* BTSC */
1081 #define V4L2_STD_NTSC_M_JP ((v4l2_std_id)0x00002000) /* EIA-J */
1082 #define V4L2_STD_NTSC_443 ((v4l2_std_id)0x00004000)
1083 #define V4L2_STD_NTSC_M_KR ((v4l2_std_id)0x00008000) /* FM A2 */
1084
1085 #define V4L2_STD_SECAM_B ((v4l2_std_id)0x00010000)
1086 #define V4L2_STD_SECAM_D ((v4l2_std_id)0x00020000)
1087 #define V4L2_STD_SECAM_G ((v4l2_std_id)0x00040000)
1088 #define V4L2_STD_SECAM_H ((v4l2_std_id)0x00080000)
1089 #define V4L2_STD_SECAM_K ((v4l2_std_id)0x00100000)
1090 #define V4L2_STD_SECAM_K1 ((v4l2_std_id)0x00200000)
1091 #define V4L2_STD_SECAM_L ((v4l2_std_id)0x00400000)
1092 #define V4L2_STD_SECAM_LC ((v4l2_std_id)0x00800000)
1093
1094 /* ATSC/HDTV */
1095 #define V4L2_STD_ATSC_8_VSB ((v4l2_std_id)0x01000000)
1096 #define V4L2_STD_ATSC_16_VSB ((v4l2_std_id)0x02000000)
1097
1098 /* FIXME:
1099 Although std_id is 64 bits, there is an issue on PPC32 architecture that
1100 makes switch(__u64) to break. So, there's a hack on v4l2-common.c rounding
1101 this value to 32 bits.
1102 As, currently, the max value is for V4L2_STD_ATSC_16_VSB (30 bits wide),
1103 it should work fine. However, if needed to add more than two standards,
1104 v4l2-common.c should be fixed.
1105 */
1106
1107 /*
1108 * Some macros to merge video standards in order to make live easier for the
1109 * drivers and V4L2 applications
1110 */
1111
1112 /*
1113 * "Common" NTSC/M - It should be noticed that V4L2_STD_NTSC_443 is
1114 * Missing here.
1115 */
1116 #define V4L2_STD_NTSC (V4L2_STD_NTSC_M |
0579e6e3
MCC
1117 V4L2_STD_NTSC_M_JP |
1118 V4L2_STD_NTSC_M_KR)
5377d91f
MH
1119 /* Secam macros */
1120 #define V4L2_STD_SECAM_DK (V4L2_STD_SECAM_D |
0579e6e3
MCC
1121 V4L2_STD_SECAM_K |
1122 V4L2_STD_SECAM_K1)
5377d91f
MH
1123 /* All Secam Standards */
1124 #define V4L2_STD_SECAM (V4L2_STD_SECAM_B |
0579e6e3
MCC
1125 V4L2_STD_SECAM_G |
1126 V4L2_STD_SECAM_H |
1127 V4L2_STD_SECAM_DK |
1128 V4L2_STD_SECAM_L |
1129 V4L2_STD_SECAM_LC)
5377d91f
MH
1130 /* PAL macros */
1131 #define V4L2_STD_PAL_BG (V4L2_STD_PAL_B |
0579e6e3
MCC
1132 V4L2_STD_PAL_B1 |
1133 V4L2_STD_PAL_G)
5377d91f 1134 #define V4L2_STD_PAL_DK (V4L2_STD_PAL_D |
0579e6e3
MCC
1135 V4L2_STD_PAL_D1 |
1136 V4L2_STD_PAL_K)
5377d91f
MH
1137 /*
1138 * "Common" PAL - This macro is there to be compatible with the old
1139 * V4L1 concept of "PAL": /BGDKHI.
1140 * Several PAL standards are missing here: /M, /N and /Nc
1141 */
1142 #define V4L2_STD_PAL (V4L2_STD_PAL_BG |
0579e6e3
MCC
1143 V4L2_STD_PAL_DK |
1144 V4L2_STD_PAL_H |
1145 V4L2_STD_PAL_I)
5377d91f
MH
1146 /* Chroma "agnostic" standards */
1147 #define V4L2_STD_B (V4L2_STD_PAL_B |
0579e6e3
MCC
1148 V4L2_STD_PAL_B1 |
1149 V4L2_STD_SECAM_B)
5377d91f 1150 #define V4L2_STD_G (V4L2_STD_PAL_G |
0579e6e3 1151 V4L2_STD_SECAM_G)
5377d91f 1152 #define V4L2_STD_H (V4L2_STD_PAL_H |
0579e6e3 1153 V4L2_STD_SECAM_H)
5377d91f 1154 #define V4L2_STD_L (V4L2_STD_SECAM_L |
0579e6e3 1155 V4L2_STD_SECAM_LC)
5377d91f 1156 #define V4L2_STD_GH (V4L2_STD_G |
0579e6e3 1157 V4L2_STD_H)
5377d91f 1158 #define V4L2_STD_DK (V4L2_STD_PAL_DK |
0579e6e3 1159 V4L2_STD_SECAM_DK)
5377d91f 1160 #define V4L2_STD_BG (V4L2_STD_B |
0579e6e3 1161 V4L2_STD_G)
5377d91f 1162 #define V4L2_STD_MN (V4L2_STD_PAL_M |
0579e6e3
MCC
1163 V4L2_STD_PAL_N |
1164 V4L2_STD_PAL_Nc |
1165 V4L2_STD_NTSC)
5377d91f
MH
1166
1167 /* Standards where MTS/BTSC stereo could be found */
1168 #define V4L2_STD_MTS (V4L2_STD_NTSC_M |
0579e6e3
MCC
1169 V4L2_STD_PAL_M |
1170 V4L2_STD_PAL_N |
1171 V4L2_STD_PAL_Nc)
5377d91f
MH
1172
1173 /* Standards for Countries with 60Hz Line frequency */
1174 #define V4L2_STD_525_60 (V4L2_STD_PAL_M |
0579e6e3
MCC
1175 V4L2_STD_PAL_60 |
1176 V4L2_STD_NTSC |
1177 V4L2_STD_NTSC_443)
5377d91f
MH
1178 /* Standards for Countries with 50Hz Line frequency */
1179 #define V4L2_STD_625_50 (V4L2_STD_PAL |
0579e6e3
MCC
1180 V4L2_STD_PAL_N |
1181 V4L2_STD_PAL_Nc |
1182 V4L2_STD_SECAM)
5377d91f
MH
1183
1184 #define V4L2_STD_ATSC (V4L2_STD_ATSC_8_VSB |
0579e6e3 1185 V4L2_STD_ATSC_16_VSB)
5377d91f
MH
1186 /* Macros with none and all analog standards */
1187 #define V4L2_STD_UNKNOWN 0
1188 #define V4L2_STD_ALL (V4L2_STD_525_60 |
0579e6e3 1189 V4L2_STD_625_50)
5377d91f
MH
1190
1191 struct v4l2_standard {
0579e6e3
MCC
1192 __u32 index;
1193 v4l2_std_id id;
1194 __u8 name[24];
1195 struct v4l2_fract frameperiod; /* Frames, not fields */
1196 __u32 framelines;
1197 __u32 reserved[4];
5377d91f
MH
1198 };
1199
1200 /*
1201 * D V B T T I M I N G S
1202 */
1203
1204 /** struct v4l2_bt_timings - BT.656/BT.1120 timing data
1205 * @width: total width of the active video in pixels
1206 * @height: total height of the active video in lines
1207 * @interlaced: Interlaced or progressive
1208 * @polarities: Positive or negative polarities
1209 * @pixelclock: Pixel clock in HZ. Ex. 74.25MHz->74250000
1210 * @hfrontporch:Horizontal front porch in pixels
1211 * @hsync: Horizontal Sync length in pixels
1212 * @hbackporch: Horizontal back porch in pixels
1213 * @vfrontporch:Vertical front porch in lines
1214 * @vsync: Vertical Sync length in lines
1215 * @vbackporch: Vertical back porch in lines
1216 * @il_vfrontporch:Vertical front porch for the even field
1217 * (aka field 2) of interlaced field formats
1218 * @il_vsync: Vertical Sync length for the even field
1219 * (aka field 2) of interlaced field formats
1220 * @il_vbackporch:Vertical back porch for the even field
1221 * (aka field 2) of interlaced field formats
1222 * @standards: Standards the timing belongs to
1223 * @flags: Flags
1224 * @reserved: Reserved fields, must be zeroed.
1225 *
1226 * A note regarding vertical interlaced timings: height refers to the total
1227 * height of the active video frame (= two fields). The blanking timings refer
1228 * to the blanking of each field. So the height of the total frame is
1229 * calculated as follows:
1230 *
1231 * tot_height = height + vfrontporch + vsync + vbackporch +
1232 * il_vfrontporch + il_vsync + il_vbackporch
1233 *
1234 * The active height of each field is height / 2.
1235 */
1236 struct v4l2_bt_timings {
0579e6e3
MCC
1237 __u32 width;
1238 __u32 height;
1239 __u32 interlaced;
1240 __u32 polarities;
1241 __u64 pixelclock;
1242 __u32 hfrontporch;
1243 __u32 hsync;
1244 __u32 hbackporch;
1245 __u32 vfrontporch;
1246 __u32 vsync;
1247 __u32 vbackporch;
1248 __u32 il_vfrontporch;
1249 __u32 il_vsync;
1250 __u32 il_vbackporch;
1251 __u32 standards;
1252 __u32 flags;
1253 __u32 reserved[14];
5377d91f
MH
1254 } __attribute__ ((packed));
1255
1256 /* Interlaced or progressive format */
1257 #define V4L2_DV_PROGRESSIVE 0
1258 #define V4L2_DV_INTERLACED 1
1259
1260 /* Polarities. If bit is not set, it is assumed to be negative polarity */
1261 #define V4L2_DV_VSYNC_POS_POL 0x00000001
1262 #define V4L2_DV_HSYNC_POS_POL 0x00000002
1263
1264 /* Timings standards */
1265 #define V4L2_DV_BT_STD_CEA861 (1 << 0) /* CEA-861 Digital TV Profile */
1266 #define V4L2_DV_BT_STD_DMT (1 << 1) /* VESA Discrete Monitor Timings */
1267 #define V4L2_DV_BT_STD_CVT (1 << 2) /* VESA Coordinated Video Timings */
1268 #define V4L2_DV_BT_STD_GTF (1 << 3) /* VESA Generalized Timings Formula */
1269
1270 /* Flags */
1271
1272 /* CVT/GTF specific: timing uses reduced blanking (CVT) or the 'Secondary
1273 GTF' curve (GTF). In both cases the horizontal and/or vertical blanking
1274 intervals are reduced, allowing a higher resolution over the same
1275 bandwidth. This is a read-only flag. */
1276 #define V4L2_DV_FL_REDUCED_BLANKING (1 << 0)
1277 /* CEA-861 specific: set for CEA-861 formats with a framerate of a multiple
1278 of six. These formats can be optionally played at 1 / 1.001 speed.
1279 This is a read-only flag. */
1280 #define V4L2_DV_FL_CAN_REDUCE_FPS (1 << 1)
1281 /* CEA-861 specific: only valid for video transmitters, the flag is cleared
1282 by receivers.
1283 If the framerate of the format is a multiple of six, then the pixelclock
1284 used to set up the transmitter is divided by 1.001 to make it compatible
1285 with 60 Hz based standards such as NTSC and PAL-M that use a framerate of
1286 29.97 Hz. Otherwise this flag is cleared. If the transmitter can't generate
1287 such frequencies, then the flag will also be cleared. */
1288 #define V4L2_DV_FL_REDUCED_FPS (1 << 2)
1289 /* Specific to interlaced formats: if set, then field 1 is really one half-line
1290 longer and field 2 is really one half-line shorter, so each field has
1291 exactly the same number of half-lines. Whether half-lines can be detected
1292 or used depends on the hardware. */
1293 #define V4L2_DV_FL_HALF_LINE (1 << 3)
1294 /* If set, then this is a Consumer Electronics (CE) video format. Such formats
1295 * differ from other formats (commonly called IT formats) in that if RGB
1296 * encoding is used then by default the RGB values use limited range (i.e.ie;
1297 * use the range 16-235) as opposed to 0-255. All formats defined in CEA-861
1298 * except for the 640x480 format are CE formats. */
1299 #define V4L2_DV_FL_IS_CE_VIDEO (1 << 4)
1300
1301 /* A few useful defines to calculate the total blanking and frame sizes */
0579e6e3
MCC
1302 #define V4L2_DV_BT_BLANKING_WIDTH(bt)
1303 ((bt)->hfrontporch + (bt)->hsync + (bt)->hbackporch)
1304 #define V4L2_DV_BT_FRAME_WIDTH(bt)
1305 ((bt)->width + V4L2_DV_BT_BLANKING_WIDTH(bt))
1306 #define V4L2_DV_BT_BLANKING_HEIGHT(bt)
1307 ((bt)->vfrontporch + (bt)->vsync + (bt)->vbackporch + \\
1308 (bt)->il_vfrontporch + (bt)->il_vsync + (bt)->il_vbackporch)
1309 #define V4L2_DV_BT_FRAME_HEIGHT(bt)
1310 ((bt)->height + V4L2_DV_BT_BLANKING_HEIGHT(bt))
5377d91f
MH
1311
1312 /** struct v4l2_dv_timings - DV timings
1313 * @type: the type of the timings
1314 * @bt: BT656/1120 timings
1315 */
1316 struct v4l2_dv_timings {
0579e6e3
MCC
1317 __u32 type;
1318 union {
1319 struct v4l2_bt_timings bt;
1320 __u32 reserved[32];
1321 };
5377d91f
MH
1322 } __attribute__ ((packed));
1323
1324 /* Values for the type field */
1325 #define V4L2_DV_BT_656_1120 0 /* BT.656/1120 timing type */
1326
1327
1328 /** struct v4l2_enum_dv_timings - DV timings enumeration
1329 * @index: enumeration index
1330 * @pad: the pad number for which to enumerate timings (used with
1331 * v4l-subdev nodes only)
1332 * @reserved: must be zeroed
1333 * @timings: the timings for the given index
1334 */
1335 struct v4l2_enum_dv_timings {
0579e6e3
MCC
1336 __u32 index;
1337 __u32 pad;
1338 __u32 reserved[2];
1339 struct v4l2_dv_timings timings;
5377d91f
MH
1340 };
1341
1342 /** struct v4l2_bt_timings_cap - BT.656/BT.1120 timing capabilities
1343 * @min_width: width in pixels
1344 * @max_width: width in pixels
1345 * @min_height: height in lines
1346 * @max_height: height in lines
1347 * @min_pixelclock: Pixel clock in HZ. Ex. 74.25MHz->74250000
1348 * @max_pixelclock: Pixel clock in HZ. Ex. 74.25MHz->74250000
1349 * @standards: Supported standards
1350 * @capabilities: Supported capabilities
1351 * @reserved: Must be zeroed
1352 */
1353 struct v4l2_bt_timings_cap {
0579e6e3
MCC
1354 __u32 min_width;
1355 __u32 max_width;
1356 __u32 min_height;
1357 __u32 max_height;
1358 __u64 min_pixelclock;
1359 __u64 max_pixelclock;
1360 __u32 standards;
1361 __u32 capabilities;
1362 __u32 reserved[16];
5377d91f
MH
1363 } __attribute__ ((packed));
1364
1365 /* Supports interlaced formats */
1366 #define V4L2_DV_BT_CAP_INTERLACED (1 << 0)
1367 /* Supports progressive formats */
1368 #define V4L2_DV_BT_CAP_PROGRESSIVE (1 << 1)
1369 /* Supports CVT/GTF reduced blanking */
1370 #define V4L2_DV_BT_CAP_REDUCED_BLANKING (1 << 2)
1371 /* Supports custom formats */
1372 #define V4L2_DV_BT_CAP_CUSTOM (1 << 3)
1373
1374 /** struct v4l2_dv_timings_cap - DV timings capabilities
1375 * @type: the type of the timings (same as in struct v4l2_dv_timings)
1376 * @pad: the pad number for which to query capabilities (used with
1377 * v4l-subdev nodes only)
1378 * @bt: the BT656/1120 timings capabilities
1379 */
1380 struct v4l2_dv_timings_cap {
0579e6e3
MCC
1381 __u32 type;
1382 __u32 pad;
1383 __u32 reserved[2];
1384 union {
1385 struct v4l2_bt_timings_cap bt;
1386 __u32 raw_data[32];
1387 };
5377d91f
MH
1388 };
1389
1390
1391 /*
1392 * V I D E O I N P U T S
1393 */
1394 struct v4l2_input {
0579e6e3
MCC
1395 __u32 index; /* Which input */
1396 __u8 name[32]; /* Label */
1397 __u32 type; /* Type of input */
1398 __u32 audioset; /* Associated audios (bitfield) */
1399 __u32 tuner; /* enum v4l2_tuner_type */
1400 v4l2_std_id std;
1401 __u32 status;
1402 __u32 capabilities;
1403 __u32 reserved[3];
5377d91f
MH
1404 };
1405
1406 /* Values for the 'type' field */
1407 #define V4L2_INPUT_TYPE_TUNER 1
1408 #define V4L2_INPUT_TYPE_CAMERA 2
1409
1410 /* field 'status' - general */
1411 #define V4L2_IN_ST_NO_POWER 0x00000001 /* Attached device is off */
1412 #define V4L2_IN_ST_NO_SIGNAL 0x00000002
1413 #define V4L2_IN_ST_NO_COLOR 0x00000004
1414
1415 /* field 'status' - sensor orientation */
1416 /* If sensor is mounted upside down set both bits */
1417 #define V4L2_IN_ST_HFLIP 0x00000010 /* Frames are flipped horizontally */
1418 #define V4L2_IN_ST_VFLIP 0x00000020 /* Frames are flipped vertically */
1419
1420 /* field 'status' - analog */
1421 #define V4L2_IN_ST_NO_H_LOCK 0x00000100 /* No horizontal sync lock */
1422 #define V4L2_IN_ST_COLOR_KILL 0x00000200 /* Color killer is active */
1423
1424 /* field 'status' - digital */
1425 #define V4L2_IN_ST_NO_SYNC 0x00010000 /* No synchronization lock */
1426 #define V4L2_IN_ST_NO_EQU 0x00020000 /* No equalizer lock */
1427 #define V4L2_IN_ST_NO_CARRIER 0x00040000 /* Carrier recovery failed */
1428
1429 /* field 'status' - VCR and set-top box */
1430 #define V4L2_IN_ST_MACROVISION 0x01000000 /* Macrovision detected */
1431 #define V4L2_IN_ST_NO_ACCESS 0x02000000 /* Conditional access denied */
1432 #define V4L2_IN_ST_VTR 0x04000000 /* VTR time constant */
1433
1434 /* capabilities flags */
1435 #define V4L2_IN_CAP_DV_TIMINGS 0x00000002 /* Supports S_DV_TIMINGS */
1436 #define V4L2_IN_CAP_CUSTOM_TIMINGS V4L2_IN_CAP_DV_TIMINGS /* For compatibility */
1437 #define V4L2_IN_CAP_STD 0x00000004 /* Supports S_STD */
1438 #define V4L2_IN_CAP_NATIVE_SIZE 0x00000008 /* Supports setting native size */
1439
1440 /*
1441 * V I D E O O U T P U T S
1442 */
1443 struct v4l2_output {
0579e6e3
MCC
1444 __u32 index; /* Which output */
1445 __u8 name[32]; /* Label */
1446 __u32 type; /* Type of output */
1447 __u32 audioset; /* Associated audios (bitfield) */
1448 __u32 modulator; /* Associated modulator */
1449 v4l2_std_id std;
1450 __u32 capabilities;
1451 __u32 reserved[3];
5377d91f
MH
1452 };
1453 /* Values for the 'type' field */
1454 #define V4L2_OUTPUT_TYPE_MODULATOR 1
1455 #define V4L2_OUTPUT_TYPE_ANALOG 2
1456 #define V4L2_OUTPUT_TYPE_ANALOGVGAOVERLAY 3
1457
1458 /* capabilities flags */
1459 #define V4L2_OUT_CAP_DV_TIMINGS 0x00000002 /* Supports S_DV_TIMINGS */
1460 #define V4L2_OUT_CAP_CUSTOM_TIMINGS V4L2_OUT_CAP_DV_TIMINGS /* For compatibility */
1461 #define V4L2_OUT_CAP_STD 0x00000004 /* Supports S_STD */
1462 #define V4L2_OUT_CAP_NATIVE_SIZE 0x00000008 /* Supports setting native size */
1463
1464 /*
1465 * C O N T R O L S
1466 */
1467 struct v4l2_control {
0579e6e3
MCC
1468 __u32 id;
1469 __s32 value;
5377d91f
MH
1470 };
1471
1472 struct v4l2_ext_control {
0579e6e3
MCC
1473 __u32 id;
1474 __u32 size;
1475 __u32 reserved2[1];
1476 union {
1477 __s32 value;
1478 __s64 value64;
1479 char __user *string;
1480 __u8 __user *p_u8;
1481 __u16 __user *p_u16;
1482 __u32 __user *p_u32;
1483 void __user *ptr;
1484 };
5377d91f
MH
1485 } __attribute__ ((packed));
1486
1487 struct v4l2_ext_controls {
0579e6e3 1488 union {
5377d91f 1489 #ifndef __KERNEL__
0579e6e3 1490 __u32 ctrl_class;
5377d91f 1491 #endif
0579e6e3
MCC
1492 __u32 which;
1493 };
1494 __u32 count;
1495 __u32 error_idx;
1496 __u32 reserved[2];
1497 struct v4l2_ext_control *controls;
5377d91f
MH
1498 };
1499
1500 #define V4L2_CTRL_ID_MASK (0x0fffffff)
1501 #ifndef __KERNEL__
1502 #define V4L2_CTRL_ID2CLASS(id) ((id) & 0x0fff0000UL)
1503 #endif
1504 #define V4L2_CTRL_ID2WHICH(id) ((id) & 0x0fff0000UL)
1505 #define V4L2_CTRL_DRIVER_PRIV(id) (((id) & 0xffff) >= 0x1000)
1506 #define V4L2_CTRL_MAX_DIMS (4)
1507 #define V4L2_CTRL_WHICH_CUR_VAL 0
1508 #define V4L2_CTRL_WHICH_DEF_VAL 0x0f000000
1509
1510 enum v4l2_ctrl_type {
0579e6e3
MCC
1511 V4L2_CTRL_TYPE_INTEGER = 1,
1512 V4L2_CTRL_TYPE_BOOLEAN = 2,
1513 V4L2_CTRL_TYPE_MENU = 3,
1514 V4L2_CTRL_TYPE_BUTTON = 4,
1515 V4L2_CTRL_TYPE_INTEGER64 = 5,
1516 V4L2_CTRL_TYPE_CTRL_CLASS = 6,
1517 V4L2_CTRL_TYPE_STRING = 7,
1518 V4L2_CTRL_TYPE_BITMASK = 8,
1519 V4L2_CTRL_TYPE_INTEGER_MENU = 9,
1520
1521 /* Compound types are >= 0x0100 */
1522 V4L2_CTRL_COMPOUND_TYPES = 0x0100,
1523 V4L2_CTRL_TYPE_U8 = 0x0100,
1524 V4L2_CTRL_TYPE_U16 = 0x0101,
1525 V4L2_CTRL_TYPE_U32 = 0x0102,
5377d91f
MH
1526 };
1527
1528 /* Used in the VIDIOC_QUERYCTRL ioctl for querying controls */
1529 struct v4l2_queryctrl {
0579e6e3
MCC
1530 __u32 id;
1531 __u32 type; /* enum v4l2_ctrl_type */
1532 __u8 name[32]; /* Whatever */
1533 __s32 minimum; /* Note signedness */
1534 __s32 maximum;
1535 __s32 step;
1536 __s32 default_value;
1537 __u32 flags;
1538 __u32 reserved[2];
5377d91f
MH
1539 };
1540
1541 /* Used in the VIDIOC_QUERY_EXT_CTRL ioctl for querying extended controls */
1542 struct v4l2_query_ext_ctrl {
0579e6e3
MCC
1543 __u32 id;
1544 __u32 type;
1545 char name[32];
1546 __s64 minimum;
1547 __s64 maximum;
1548 __u64 step;
1549 __s64 default_value;
1550 __u32 flags;
1551 __u32 elem_size;
1552 __u32 elems;
1553 __u32 nr_of_dims;
1554 __u32 dims[V4L2_CTRL_MAX_DIMS];
1555 __u32 reserved[32];
5377d91f
MH
1556 };
1557
1558 /* Used in the VIDIOC_QUERYMENU ioctl for querying menu items */
1559 struct v4l2_querymenu {
0579e6e3
MCC
1560 __u32 id;
1561 __u32 index;
1562 union {
1563 __u8 name[32]; /* Whatever */
1564 __s64 value;
1565 };
1566 __u32 reserved;
5377d91f
MH
1567 } __attribute__ ((packed));
1568
1569 /* Control flags */
1570 #define V4L2_CTRL_FLAG_DISABLED 0x0001
1571 #define V4L2_CTRL_FLAG_GRABBED 0x0002
1572 #define V4L2_CTRL_FLAG_READ_ONLY 0x0004
1573 #define V4L2_CTRL_FLAG_UPDATE 0x0008
1574 #define V4L2_CTRL_FLAG_INACTIVE 0x0010
1575 #define V4L2_CTRL_FLAG_SLIDER 0x0020
1576 #define V4L2_CTRL_FLAG_WRITE_ONLY 0x0040
1577 #define V4L2_CTRL_FLAG_VOLATILE 0x0080
1578 #define V4L2_CTRL_FLAG_HAS_PAYLOAD 0x0100
1579 #define V4L2_CTRL_FLAG_EXECUTE_ON_WRITE 0x0200
1580
1581 /* Query flags, to be ORed with the control ID */
1582 #define V4L2_CTRL_FLAG_NEXT_CTRL 0x80000000
1583 #define V4L2_CTRL_FLAG_NEXT_COMPOUND 0x40000000
1584
1585 /* User-class control IDs defined by V4L2 */
1586 #define V4L2_CID_MAX_CTRLS 1024
1587 /* IDs reserved for driver specific controls */
1588 #define V4L2_CID_PRIVATE_BASE 0x08000000
1589
1590
1591 /*
1592 * T U N I N G
1593 */
1594 struct v4l2_tuner {
0579e6e3
MCC
1595 __u32 index;
1596 __u8 name[32];
1597 __u32 type; /* enum v4l2_tuner_type */
1598 __u32 capability;
1599 __u32 rangelow;
1600 __u32 rangehigh;
1601 __u32 rxsubchans;
1602 __u32 audmode;
1603 __s32 signal;
1604 __s32 afc;
1605 __u32 reserved[4];
5377d91f
MH
1606 };
1607
1608 struct v4l2_modulator {
0579e6e3
MCC
1609 __u32 index;
1610 __u8 name[32];
1611 __u32 capability;
1612 __u32 rangelow;
1613 __u32 rangehigh;
1614 __u32 txsubchans;
1615 __u32 type; /* enum v4l2_tuner_type */
1616 __u32 reserved[3];
5377d91f
MH
1617 };
1618
1619 /* Flags for the 'capability' field */
1620 #define V4L2_TUNER_CAP_LOW 0x0001
1621 #define V4L2_TUNER_CAP_NORM 0x0002
1622 #define V4L2_TUNER_CAP_HWSEEK_BOUNDED 0x0004
1623 #define V4L2_TUNER_CAP_HWSEEK_WRAP 0x0008
1624 #define V4L2_TUNER_CAP_STEREO 0x0010
1625 #define V4L2_TUNER_CAP_LANG2 0x0020
1626 #define V4L2_TUNER_CAP_SAP 0x0020
1627 #define V4L2_TUNER_CAP_LANG1 0x0040
1628 #define V4L2_TUNER_CAP_RDS 0x0080
1629 #define V4L2_TUNER_CAP_RDS_BLOCK_IO 0x0100
1630 #define V4L2_TUNER_CAP_RDS_CONTROLS 0x0200
1631 #define V4L2_TUNER_CAP_FREQ_BANDS 0x0400
1632 #define V4L2_TUNER_CAP_HWSEEK_PROG_LIM 0x0800
1633 #define V4L2_TUNER_CAP_1HZ 0x1000
1634
1635 /* Flags for the 'rxsubchans' field */
1636 #define V4L2_TUNER_SUB_MONO 0x0001
1637 #define V4L2_TUNER_SUB_STEREO 0x0002
1638 #define V4L2_TUNER_SUB_LANG2 0x0004
1639 #define V4L2_TUNER_SUB_SAP 0x0004
1640 #define V4L2_TUNER_SUB_LANG1 0x0008
1641 #define V4L2_TUNER_SUB_RDS 0x0010
1642
1643 /* Values for the 'audmode' field */
1644 #define V4L2_TUNER_MODE_MONO 0x0000
1645 #define V4L2_TUNER_MODE_STEREO 0x0001
1646 #define V4L2_TUNER_MODE_LANG2 0x0002
1647 #define V4L2_TUNER_MODE_SAP 0x0002
1648 #define V4L2_TUNER_MODE_LANG1 0x0003
1649 #define V4L2_TUNER_MODE_LANG1_LANG2 0x0004
1650
1651 struct v4l2_frequency {
0579e6e3
MCC
1652 __u32 tuner;
1653 __u32 type; /* enum v4l2_tuner_type */
1654 __u32 frequency;
1655 __u32 reserved[8];
5377d91f
MH
1656 };
1657
1658 #define V4L2_BAND_MODULATION_VSB (1 << 1)
1659 #define V4L2_BAND_MODULATION_FM (1 << 2)
1660 #define V4L2_BAND_MODULATION_AM (1 << 3)
1661
1662 struct v4l2_frequency_band {
0579e6e3
MCC
1663 __u32 tuner;
1664 __u32 type; /* enum v4l2_tuner_type */
1665 __u32 index;
1666 __u32 capability;
1667 __u32 rangelow;
1668 __u32 rangehigh;
1669 __u32 modulation;
1670 __u32 reserved[9];
5377d91f
MH
1671 };
1672
1673 struct v4l2_hw_freq_seek {
0579e6e3
MCC
1674 __u32 tuner;
1675 __u32 type; /* enum v4l2_tuner_type */
1676 __u32 seek_upward;
1677 __u32 wrap_around;
1678 __u32 spacing;
1679 __u32 rangelow;
1680 __u32 rangehigh;
1681 __u32 reserved[5];
5377d91f
MH
1682 };
1683
1684 /*
1685 * R D S
1686 */
1687
1688 struct v4l2_rds_data {
0579e6e3
MCC
1689 __u8 lsb;
1690 __u8 msb;
1691 __u8 block;
5377d91f
MH
1692 } __attribute__ ((packed));
1693
1694 #define V4L2_RDS_BLOCK_MSK 0x7
1695 #define V4L2_RDS_BLOCK_A 0
1696 #define V4L2_RDS_BLOCK_B 1
1697 #define V4L2_RDS_BLOCK_C 2
1698 #define V4L2_RDS_BLOCK_D 3
1699 #define V4L2_RDS_BLOCK_C_ALT 4
1700 #define V4L2_RDS_BLOCK_INVALID 7
1701
1702 #define V4L2_RDS_BLOCK_CORRECTED 0x40
1703 #define V4L2_RDS_BLOCK_ERROR 0x80
1704
1705 /*
1706 * A U D I O
1707 */
1708 struct v4l2_audio {
0579e6e3
MCC
1709 __u32 index;
1710 __u8 name[32];
1711 __u32 capability;
1712 __u32 mode;
1713 __u32 reserved[2];
5377d91f
MH
1714 };
1715
1716 /* Flags for the 'capability' field */
1717 #define V4L2_AUDCAP_STEREO 0x00001
1718 #define V4L2_AUDCAP_AVL 0x00002
1719
1720 /* Flags for the 'mode' field */
1721 #define V4L2_AUDMODE_AVL 0x00001
1722
1723 struct v4l2_audioout {
0579e6e3
MCC
1724 __u32 index;
1725 __u8 name[32];
1726 __u32 capability;
1727 __u32 mode;
1728 __u32 reserved[2];
5377d91f
MH
1729 };
1730
1731 /*
1732 * M P E G S E R V I C E S
1733 */
1734 #if 1
1735 #define V4L2_ENC_IDX_FRAME_I (0)
1736 #define V4L2_ENC_IDX_FRAME_P (1)
1737 #define V4L2_ENC_IDX_FRAME_B (2)
1738 #define V4L2_ENC_IDX_FRAME_MASK (0xf)
1739
1740 struct v4l2_enc_idx_entry {
0579e6e3
MCC
1741 __u64 offset;
1742 __u64 pts;
1743 __u32 length;
1744 __u32 flags;
1745 __u32 reserved[2];
5377d91f
MH
1746 };
1747
1748 #define V4L2_ENC_IDX_ENTRIES (64)
1749 struct v4l2_enc_idx {
0579e6e3
MCC
1750 __u32 entries;
1751 __u32 entries_cap;
1752 __u32 reserved[4];
1753 struct v4l2_enc_idx_entry entry[V4L2_ENC_IDX_ENTRIES];
5377d91f
MH
1754 };
1755
1756
1757 #define V4L2_ENC_CMD_START (0)
1758 #define V4L2_ENC_CMD_STOP (1)
1759 #define V4L2_ENC_CMD_PAUSE (2)
1760 #define V4L2_ENC_CMD_RESUME (3)
1761
1762 /* Flags for V4L2_ENC_CMD_STOP */
1763 #define V4L2_ENC_CMD_STOP_AT_GOP_END (1 << 0)
1764
1765 struct v4l2_encoder_cmd {
0579e6e3
MCC
1766 __u32 cmd;
1767 __u32 flags;
1768 union {
1769 struct {
1770 __u32 data[8];
1771 } raw;
1772 };
5377d91f
MH
1773 };
1774
1775 /* Decoder commands */
1776 #define V4L2_DEC_CMD_START (0)
1777 #define V4L2_DEC_CMD_STOP (1)
1778 #define V4L2_DEC_CMD_PAUSE (2)
1779 #define V4L2_DEC_CMD_RESUME (3)
1780
1781 /* Flags for V4L2_DEC_CMD_START */
1782 #define V4L2_DEC_CMD_START_MUTE_AUDIO (1 << 0)
1783
1784 /* Flags for V4L2_DEC_CMD_PAUSE */
1785 #define V4L2_DEC_CMD_PAUSE_TO_BLACK (1 << 0)
1786
1787 /* Flags for V4L2_DEC_CMD_STOP */
1788 #define V4L2_DEC_CMD_STOP_TO_BLACK (1 << 0)
1789 #define V4L2_DEC_CMD_STOP_IMMEDIATELY (1 << 1)
1790
1791 /* Play format requirements (returned by the driver): */
1792
1793 /* The decoder has no special format requirements */
1794 #define V4L2_DEC_START_FMT_NONE (0)
1795 /* The decoder requires full GOPs */
1796 #define V4L2_DEC_START_FMT_GOP (1)
1797
1798 /* The structure must be zeroed before use by the application
1799 This ensures it can be extended safely in the future. */
1800 struct v4l2_decoder_cmd {
0579e6e3
MCC
1801 __u32 cmd;
1802 __u32 flags;
1803 union {
1804 struct {
1805 __u64 pts;
1806 } stop;
1807
1808 struct {
1809 /* 0 or 1000 specifies normal speed,
1810 1 specifies forward single stepping,
1811 -1 specifies backward single stepping,
1812 >1: playback at speed/1000 of the normal speed,
1813 <-1: reverse playback at (-speed/1000) of the normal speed. */
1814 __s32 speed;
1815 __u32 format;
1816 } start;
1817
1818 struct {
1819 __u32 data[16];
1820 } raw;
1821 };
5377d91f
MH
1822 };
1823 #endif
1824
1825
1826 /*
1827 * D A T A S E R V I C E S ( V B I )
1828 *
1829 * Data services API by Michael Schimek
1830 */
1831
1832 /* Raw VBI */
1833 struct v4l2_vbi_format {
0579e6e3
MCC
1834 __u32 sampling_rate; /* in 1 Hz */
1835 __u32 offset;
1836 __u32 samples_per_line;
1837 __u32 sample_format; /* V4L2_PIX_FMT_* */
1838 __s32 start[2];
1839 __u32 count[2];
1840 __u32 flags; /* V4L2_VBI_* */
1841 __u32 reserved[2]; /* must be zero */
5377d91f
MH
1842 };
1843
1844 /* VBI flags */
1845 #define V4L2_VBI_UNSYNC (1 << 0)
1846 #define V4L2_VBI_INTERLACED (1 << 1)
1847
1848 /* ITU-R start lines for each field */
1849 #define V4L2_VBI_ITU_525_F1_START (1)
1850 #define V4L2_VBI_ITU_525_F2_START (264)
1851 #define V4L2_VBI_ITU_625_F1_START (1)
1852 #define V4L2_VBI_ITU_625_F2_START (314)
1853
1854 /* Sliced VBI
1855 *
1856 * This implements is a proposal V4L2 API to allow SLICED VBI
1857 * required for some hardware encoders. It should change without
1858 * notice in the definitive implementation.
1859 */
1860
1861 struct v4l2_sliced_vbi_format {
0579e6e3
MCC
1862 __u16 service_set;
1863 /* service_lines[0][...] specifies lines 0-23 (1-23 used) of the first field
1864 service_lines[1][...] specifies lines 0-23 (1-23 used) of the second field
1865 (equals frame lines 313-336 for 625 line video
1866 standards, 263-286 for 525 line standards) */
1867 __u16 service_lines[2][24];
1868 __u32 io_size;
1869 __u32 reserved[2]; /* must be zero */
5377d91f
MH
1870 };
1871
1872 /* Teletext World System Teletext
1873 (WST), defined on ITU-R BT.653-2 */
1874 #define V4L2_SLICED_TELETEXT_B (0x0001)
1875 /* Video Program System, defined on ETS 300 231*/
1876 #define V4L2_SLICED_VPS (0x0400)
1877 /* Closed Caption, defined on EIA-608 */
1878 #define V4L2_SLICED_CAPTION_525 (0x1000)
1879 /* Wide Screen System, defined on ITU-R BT1119.1 */
1880 #define V4L2_SLICED_WSS_625 (0x4000)
1881
1882 #define V4L2_SLICED_VBI_525 (V4L2_SLICED_CAPTION_525)
1883 #define V4L2_SLICED_VBI_625 (V4L2_SLICED_TELETEXT_B | V4L2_SLICED_VPS | V4L2_SLICED_WSS_625)
1884
1885 struct v4l2_sliced_vbi_cap {
0579e6e3
MCC
1886 __u16 service_set;
1887 /* service_lines[0][...] specifies lines 0-23 (1-23 used) of the first field
1888 service_lines[1][...] specifies lines 0-23 (1-23 used) of the second field
1889 (equals frame lines 313-336 for 625 line video
1890 standards, 263-286 for 525 line standards) */
1891 __u16 service_lines[2][24];
1892 __u32 type; /* enum v4l2_buf_type */
1893 __u32 reserved[3]; /* must be 0 */
5377d91f
MH
1894 };
1895
1896 struct v4l2_sliced_vbi_data {
0579e6e3
MCC
1897 __u32 id;
1898 __u32 field; /* 0: first field, 1: second field */
1899 __u32 line; /* 1-23 */
1900 __u32 reserved; /* must be 0 */
1901 __u8 data[48];
5377d91f
MH
1902 };
1903
1904 /*
1905 * Sliced VBI data inserted into MPEG Streams
1906 */
1907
1908 /*
1909 * V4L2_MPEG_STREAM_VBI_FMT_IVTV:
1910 *
1911 * Structure of payload contained in an MPEG 2 Private Stream 1 PES Packet in an
1912 * MPEG-2 Program Pack that contains V4L2_MPEG_STREAM_VBI_FMT_IVTV Sliced VBI
1913 * data
1914 *
1915 * Note, the MPEG-2 Program Pack and Private Stream 1 PES packet header
1916 * definitions are not included here. See the MPEG-2 specifications for details
1917 * on these headers.
1918 */
1919
1920 /* Line type IDs */
1921 #define V4L2_MPEG_VBI_IVTV_TELETEXT_B (1)
1922 #define V4L2_MPEG_VBI_IVTV_CAPTION_525 (4)
1923 #define V4L2_MPEG_VBI_IVTV_WSS_625 (5)
1924 #define V4L2_MPEG_VBI_IVTV_VPS (7)
1925
1926 struct v4l2_mpeg_vbi_itv0_line {
0579e6e3
MCC
1927 __u8 id; /* One of V4L2_MPEG_VBI_IVTV_* above */
1928 __u8 data[42]; /* Sliced VBI data for the line */
5377d91f
MH
1929 } __attribute__ ((packed));
1930
1931 struct v4l2_mpeg_vbi_itv0 {
0579e6e3
MCC
1932 __le32 linemask[2]; /* Bitmasks of VBI service lines present */
1933 struct v4l2_mpeg_vbi_itv0_line line[35];
5377d91f
MH
1934 } __attribute__ ((packed));
1935
1936 struct v4l2_mpeg_vbi_ITV0 {
0579e6e3 1937 struct v4l2_mpeg_vbi_itv0_line line[36];
5377d91f
MH
1938 } __attribute__ ((packed));
1939
1940 #define V4L2_MPEG_VBI_IVTV_MAGIC0 "itv0"
1941 #define V4L2_MPEG_VBI_IVTV_MAGIC1 "ITV0"
1942
1943 struct v4l2_mpeg_vbi_fmt_ivtv {
0579e6e3
MCC
1944 __u8 magic[4];
1945 union {
1946 struct v4l2_mpeg_vbi_itv0 itv0;
1947 struct v4l2_mpeg_vbi_ITV0 ITV0;
1948 };
5377d91f
MH
1949 } __attribute__ ((packed));
1950
1951 /*
1952 * A G G R E G A T E S T R U C T U R E S
1953 */
1954
1955 /**
1956 * struct v4l2_plane_pix_format - additional, per-plane format definition
1957 * @sizeimage: maximum size in bytes required for data, for which
1958 * this plane will be used
1959 * @bytesperline: distance in bytes between the leftmost pixels in two
1960 * adjacent lines
1961 */
1962 struct v4l2_plane_pix_format {
0579e6e3
MCC
1963 __u32 sizeimage;
1964 __u32 bytesperline;
1965 __u16 reserved[6];
5377d91f
MH
1966 } __attribute__ ((packed));
1967
1968 /**
1969 * struct v4l2_pix_format_mplane - multiplanar format definition
1970 * @width: image width in pixels
1971 * @height: image height in pixels
1972 * @pixelformat: little endian four character code (fourcc)
1973 * @field: enum v4l2_field; field order (for interlaced video)
1974 * @colorspace: enum v4l2_colorspace; supplemental to pixelformat
1975 * @plane_fmt: per-plane information
1976 * @num_planes: number of planes for this format
1977 * @flags: format flags (V4L2_PIX_FMT_FLAG_*)
1978 * @ycbcr_enc: enum v4l2_ycbcr_encoding, Y'CbCr encoding
1979 * @quantization: enum v4l2_quantization, colorspace quantization
1980 * @xfer_func: enum v4l2_xfer_func, colorspace transfer function
1981 */
1982 struct v4l2_pix_format_mplane {
0579e6e3
MCC
1983 __u32 width;
1984 __u32 height;
1985 __u32 pixelformat;
1986 __u32 field;
1987 __u32 colorspace;
1988
1989 struct v4l2_plane_pix_format plane_fmt[VIDEO_MAX_PLANES];
1990 __u8 num_planes;
1991 __u8 flags;
1992 __u8 ycbcr_enc;
1993 __u8 quantization;
1994 __u8 xfer_func;
1995 __u8 reserved[7];
5377d91f
MH
1996 } __attribute__ ((packed));
1997
1998 /**
1999 * struct v4l2_sdr_format - SDR format definition
2000 * @pixelformat: little endian four character code (fourcc)
2001 * @buffersize: maximum size in bytes required for data
2002 */
2003 struct v4l2_sdr_format {
0579e6e3
MCC
2004 __u32 pixelformat;
2005 __u32 buffersize;
2006 __u8 reserved[24];
5377d91f
MH
2007 } __attribute__ ((packed));
2008
2009 /**
2010 * struct v4l2_format - stream data format
2011 * @type: enum v4l2_buf_type; type of the data stream
2012 * @pix: definition of an image format
2013 * @pix_mp: definition of a multiplanar image format
2014 * @win: definition of an overlaid image
2015 * @vbi: raw VBI capture or output parameters
2016 * @sliced: sliced VBI capture or output parameters
2017 * @raw_data: placeholder for future extensions and custom formats
2018 */
2019 struct v4l2_format {
0579e6e3
MCC
2020 __u32 type;
2021 union {
2022 struct v4l2_pix_format pix; /* V4L2_BUF_TYPE_VIDEO_CAPTURE */
2023 struct v4l2_pix_format_mplane pix_mp; /* V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE */
2024 struct v4l2_window win; /* V4L2_BUF_TYPE_VIDEO_OVERLAY */
2025 struct v4l2_vbi_format vbi; /* V4L2_BUF_TYPE_VBI_CAPTURE */
2026 struct v4l2_sliced_vbi_format sliced; /* V4L2_BUF_TYPE_SLICED_VBI_CAPTURE */
2027 struct v4l2_sdr_format sdr; /* V4L2_BUF_TYPE_SDR_CAPTURE */
2028 __u8 raw_data[200]; /* user-defined */
2029 } fmt;
5377d91f
MH
2030 };
2031
2032 /* Stream type-dependent parameters
2033 */
2034 struct v4l2_streamparm {
0579e6e3
MCC
2035 __u32 type; /* enum v4l2_buf_type */
2036 union {
2037 struct v4l2_captureparm capture;
2038 struct v4l2_outputparm output;
2039 __u8 raw_data[200]; /* user-defined */
2040 } parm;
5377d91f
MH
2041 };
2042
2043 /*
2044 * E V E N T S
2045 */
2046
2047 #define V4L2_EVENT_ALL 0
2048 #define V4L2_EVENT_VSYNC 1
2049 #define V4L2_EVENT_EOS 2
2050 #define V4L2_EVENT_CTRL 3
2051 #define V4L2_EVENT_FRAME_SYNC 4
2052 #define V4L2_EVENT_SOURCE_CHANGE 5
2053 #define V4L2_EVENT_MOTION_DET 6
2054 #define V4L2_EVENT_PRIVATE_START 0x08000000
2055
2056 /* Payload for V4L2_EVENT_VSYNC */
2057 struct v4l2_event_vsync {
0579e6e3
MCC
2058 /* Can be V4L2_FIELD_ANY, _NONE, _TOP or _BOTTOM */
2059 __u8 field;
5377d91f
MH
2060 } __attribute__ ((packed));
2061
2062 /* Payload for V4L2_EVENT_CTRL */
2063 #define V4L2_EVENT_CTRL_CH_VALUE (1 << 0)
2064 #define V4L2_EVENT_CTRL_CH_FLAGS (1 << 1)
2065 #define V4L2_EVENT_CTRL_CH_RANGE (1 << 2)
2066
2067 struct v4l2_event_ctrl {
0579e6e3
MCC
2068 __u32 changes;
2069 __u32 type;
2070 union {
2071 __s32 value;
2072 __s64 value64;
2073 };
2074 __u32 flags;
2075 __s32 minimum;
2076 __s32 maximum;
2077 __s32 step;
2078 __s32 default_value;
5377d91f
MH
2079 };
2080
2081 struct v4l2_event_frame_sync {
0579e6e3 2082 __u32 frame_sequence;
5377d91f
MH
2083 };
2084
2085 #define V4L2_EVENT_SRC_CH_RESOLUTION (1 << 0)
2086
2087 struct v4l2_event_src_change {
0579e6e3 2088 __u32 changes;
5377d91f
MH
2089 };
2090
2091 #define V4L2_EVENT_MD_FL_HAVE_FRAME_SEQ (1 << 0)
2092
2093 /**
2094 * struct v4l2_event_motion_det - motion detection event
2095 * @flags: if V4L2_EVENT_MD_FL_HAVE_FRAME_SEQ is set, then the
2096 * frame_sequence field is valid.
2097 * @frame_sequence: the frame sequence number associated with this event.
2098 * @region_mask: which regions detected motion.
2099 */
2100 struct v4l2_event_motion_det {
0579e6e3
MCC
2101 __u32 flags;
2102 __u32 frame_sequence;
2103 __u32 region_mask;
5377d91f
MH
2104 };
2105
2106 struct v4l2_event {
0579e6e3
MCC
2107 __u32 type;
2108 union {
2109 struct v4l2_event_vsync vsync;
2110 struct v4l2_event_ctrl ctrl;
2111 struct v4l2_event_frame_sync frame_sync;
2112 struct v4l2_event_src_change src_change;
2113 struct v4l2_event_motion_det motion_det;
2114 __u8 data[64];
2115 } u;
2116 __u32 pending;
2117 __u32 sequence;
2118 struct timespec timestamp;
2119 __u32 id;
2120 __u32 reserved[8];
5377d91f
MH
2121 };
2122
2123 #define V4L2_EVENT_SUB_FL_SEND_INITIAL (1 << 0)
2124 #define V4L2_EVENT_SUB_FL_ALLOW_FEEDBACK (1 << 1)
2125
2126 struct v4l2_event_subscription {
0579e6e3
MCC
2127 __u32 type;
2128 __u32 id;
2129 __u32 flags;
2130 __u32 reserved[5];
5377d91f
MH
2131 };
2132
2133 /*
2134 * A D V A N C E D D E B U G G I N G
2135 *
2136 * NOTE: EXPERIMENTAL API, NEVER RELY ON THIS IN APPLICATIONS!
2137 * FOR DEBUGGING, TESTING AND INTERNAL USE ONLY!
2138 */
2139
2140 /* VIDIOC_DBG_G_REGISTER and VIDIOC_DBG_S_REGISTER */
2141
2142 #define V4L2_CHIP_MATCH_BRIDGE 0 /* Match against chip ID on the bridge (0 for the bridge) */
2143 #define V4L2_CHIP_MATCH_SUBDEV 4 /* Match against subdev index */
2144
2145 /* The following four defines are no longer in use */
2146 #define V4L2_CHIP_MATCH_HOST V4L2_CHIP_MATCH_BRIDGE
2147 #define V4L2_CHIP_MATCH_I2C_DRIVER 1 /* Match against I2C driver name */
2148 #define V4L2_CHIP_MATCH_I2C_ADDR 2 /* Match against I2C 7-bit address */
2149 #define V4L2_CHIP_MATCH_AC97 3 /* Match against ancillary AC97 chip */
2150
2151 struct v4l2_dbg_match {
0579e6e3
MCC
2152 __u32 type; /* Match type */
2153 union { /* Match this chip, meaning determined by type */
2154 __u32 addr;
2155 char name[32];
2156 };
5377d91f
MH
2157 } __attribute__ ((packed));
2158
2159 struct v4l2_dbg_register {
0579e6e3
MCC
2160 struct v4l2_dbg_match match;
2161 __u32 size; /* register size in bytes */
2162 __u64 reg;
2163 __u64 val;
5377d91f
MH
2164 } __attribute__ ((packed));
2165
2166 #define V4L2_CHIP_FL_READABLE (1 << 0)
2167 #define V4L2_CHIP_FL_WRITABLE (1 << 1)
2168
2169 /* VIDIOC_DBG_G_CHIP_INFO */
2170 struct v4l2_dbg_chip_info {
0579e6e3
MCC
2171 struct v4l2_dbg_match match;
2172 char name[32];
2173 __u32 flags;
2174 __u32 reserved[32];
5377d91f
MH
2175 } __attribute__ ((packed));
2176
2177 /**
2178 * struct v4l2_create_buffers - VIDIOC_CREATE_BUFS argument
2179 * @index: on return, index of the first created buffer
2180 * @count: entry: number of requested buffers,
2181 * return: number of created buffers
2182 * @memory: enum v4l2_memory; buffer memory type
2183 * @format: frame format, for which buffers are requested
2184 * @reserved: future extensions
2185 */
2186 struct v4l2_create_buffers {
0579e6e3
MCC
2187 __u32 index;
2188 __u32 count;
2189 __u32 memory;
2190 struct v4l2_format format;
2191 __u32 reserved[8];
5377d91f
MH
2192 };
2193
2194 /*
2195 * 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
2196 *
2197 */
2198 #define VIDIOC_QUERYCAP _IOR('V', 0, struct v4l2_capability)
2199 #define VIDIOC_RESERVED _IO('V', 1)
2200 #define VIDIOC_ENUM_FMT _IOWR('V', 2, struct v4l2_fmtdesc)
2201 #define VIDIOC_G_FMT _IOWR('V', 4, struct v4l2_format)
2202 #define VIDIOC_S_FMT _IOWR('V', 5, struct v4l2_format)
2203 #define VIDIOC_REQBUFS _IOWR('V', 8, struct v4l2_requestbuffers)
2204 #define VIDIOC_QUERYBUF _IOWR('V', 9, struct v4l2_buffer)
2205 #define VIDIOC_G_FBUF _IOR('V', 10, struct v4l2_framebuffer)
2206 #define VIDIOC_S_FBUF _IOW('V', 11, struct v4l2_framebuffer)
2207 #define VIDIOC_OVERLAY _IOW('V', 14, int)
2208 #define VIDIOC_QBUF _IOWR('V', 15, struct v4l2_buffer)
2209 #define VIDIOC_EXPBUF _IOWR('V', 16, struct v4l2_exportbuffer)
2210 #define VIDIOC_DQBUF _IOWR('V', 17, struct v4l2_buffer)
2211 #define VIDIOC_STREAMON _IOW('V', 18, int)
2212 #define VIDIOC_STREAMOFF _IOW('V', 19, int)
2213 #define VIDIOC_G_PARM _IOWR('V', 21, struct v4l2_streamparm)
2214 #define VIDIOC_S_PARM _IOWR('V', 22, struct v4l2_streamparm)
2215 #define VIDIOC_G_STD _IOR('V', 23, v4l2_std_id)
2216 #define VIDIOC_S_STD _IOW('V', 24, v4l2_std_id)
2217 #define VIDIOC_ENUMSTD _IOWR('V', 25, struct v4l2_standard)
2218 #define VIDIOC_ENUMINPUT _IOWR('V', 26, struct v4l2_input)
2219 #define VIDIOC_G_CTRL _IOWR('V', 27, struct v4l2_control)
2220 #define VIDIOC_S_CTRL _IOWR('V', 28, struct v4l2_control)
2221 #define VIDIOC_G_TUNER _IOWR('V', 29, struct v4l2_tuner)
2222 #define VIDIOC_S_TUNER _IOW('V', 30, struct v4l2_tuner)
2223 #define VIDIOC_G_AUDIO _IOR('V', 33, struct v4l2_audio)
2224 #define VIDIOC_S_AUDIO _IOW('V', 34, struct v4l2_audio)
2225 #define VIDIOC_QUERYCTRL _IOWR('V', 36, struct v4l2_queryctrl)
2226 #define VIDIOC_QUERYMENU _IOWR('V', 37, struct v4l2_querymenu)
2227 #define VIDIOC_G_INPUT _IOR('V', 38, int)
2228 #define VIDIOC_S_INPUT _IOWR('V', 39, int)
2229 #define VIDIOC_G_EDID _IOWR('V', 40, struct v4l2_edid)
2230 #define VIDIOC_S_EDID _IOWR('V', 41, struct v4l2_edid)
2231 #define VIDIOC_G_OUTPUT _IOR('V', 46, int)
2232 #define VIDIOC_S_OUTPUT _IOWR('V', 47, int)
2233 #define VIDIOC_ENUMOUTPUT _IOWR('V', 48, struct v4l2_output)
2234 #define VIDIOC_G_AUDOUT _IOR('V', 49, struct v4l2_audioout)
2235 #define VIDIOC_S_AUDOUT _IOW('V', 50, struct v4l2_audioout)
2236 #define VIDIOC_G_MODULATOR _IOWR('V', 54, struct v4l2_modulator)
2237 #define VIDIOC_S_MODULATOR _IOW('V', 55, struct v4l2_modulator)
2238 #define VIDIOC_G_FREQUENCY _IOWR('V', 56, struct v4l2_frequency)
2239 #define VIDIOC_S_FREQUENCY _IOW('V', 57, struct v4l2_frequency)
2240 #define VIDIOC_CROPCAP _IOWR('V', 58, struct v4l2_cropcap)
2241 #define VIDIOC_G_CROP _IOWR('V', 59, struct v4l2_crop)
2242 #define VIDIOC_S_CROP _IOW('V', 60, struct v4l2_crop)
2243 #define VIDIOC_G_JPEGCOMP _IOR('V', 61, struct v4l2_jpegcompression)
2244 #define VIDIOC_S_JPEGCOMP _IOW('V', 62, struct v4l2_jpegcompression)
2245 #define VIDIOC_QUERYSTD _IOR('V', 63, v4l2_std_id)
2246 #define VIDIOC_TRY_FMT _IOWR('V', 64, struct v4l2_format)
2247 #define VIDIOC_ENUMAUDIO _IOWR('V', 65, struct v4l2_audio)
2248 #define VIDIOC_ENUMAUDOUT _IOWR('V', 66, struct v4l2_audioout)
2249 #define VIDIOC_G_PRIORITY _IOR('V', 67, __u32) /* enum v4l2_priority */
2250 #define VIDIOC_S_PRIORITY _IOW('V', 68, __u32) /* enum v4l2_priority */
2251 #define VIDIOC_G_SLICED_VBI_CAP _IOWR('V', 69, struct v4l2_sliced_vbi_cap)
2252 #define VIDIOC_LOG_STATUS _IO('V', 70)
2253 #define VIDIOC_G_EXT_CTRLS _IOWR('V', 71, struct v4l2_ext_controls)
2254 #define VIDIOC_S_EXT_CTRLS _IOWR('V', 72, struct v4l2_ext_controls)
2255 #define VIDIOC_TRY_EXT_CTRLS _IOWR('V', 73, struct v4l2_ext_controls)
2256 #define VIDIOC_ENUM_FRAMESIZES _IOWR('V', 74, struct v4l2_frmsizeenum)
2257 #define VIDIOC_ENUM_FRAMEINTERVALS _IOWR('V', 75, struct v4l2_frmivalenum)
2258 #define VIDIOC_G_ENC_INDEX _IOR('V', 76, struct v4l2_enc_idx)
2259 #define VIDIOC_ENCODER_CMD _IOWR('V', 77, struct v4l2_encoder_cmd)
2260 #define VIDIOC_TRY_ENCODER_CMD _IOWR('V', 78, struct v4l2_encoder_cmd)
2261
2262 /*
2263 * Experimental, meant for debugging, testing and internal use.
2264 * Only implemented if CONFIG_VIDEO_ADV_DEBUG is defined.
2265 * You must be root to use these ioctls. Never use these in applications!
2266 */
2267 #define VIDIOC_DBG_S_REGISTER _IOW('V', 79, struct v4l2_dbg_register)
2268 #define VIDIOC_DBG_G_REGISTER _IOWR('V', 80, struct v4l2_dbg_register)
2269
2270 #define VIDIOC_S_HW_FREQ_SEEK _IOW('V', 82, struct v4l2_hw_freq_seek)
2271 #define VIDIOC_S_DV_TIMINGS _IOWR('V', 87, struct v4l2_dv_timings)
2272 #define VIDIOC_G_DV_TIMINGS _IOWR('V', 88, struct v4l2_dv_timings)
2273 #define VIDIOC_DQEVENT _IOR('V', 89, struct v4l2_event)
2274 #define VIDIOC_SUBSCRIBE_EVENT _IOW('V', 90, struct v4l2_event_subscription)
2275 #define VIDIOC_UNSUBSCRIBE_EVENT _IOW('V', 91, struct v4l2_event_subscription)
2276 #define VIDIOC_CREATE_BUFS _IOWR('V', 92, struct v4l2_create_buffers)
2277 #define VIDIOC_PREPARE_BUF _IOWR('V', 93, struct v4l2_buffer)
2278 #define VIDIOC_G_SELECTION _IOWR('V', 94, struct v4l2_selection)
2279 #define VIDIOC_S_SELECTION _IOWR('V', 95, struct v4l2_selection)
2280 #define VIDIOC_DECODER_CMD _IOWR('V', 96, struct v4l2_decoder_cmd)
2281 #define VIDIOC_TRY_DECODER_CMD _IOWR('V', 97, struct v4l2_decoder_cmd)
2282 #define VIDIOC_ENUM_DV_TIMINGS _IOWR('V', 98, struct v4l2_enum_dv_timings)
2283 #define VIDIOC_QUERY_DV_TIMINGS _IOR('V', 99, struct v4l2_dv_timings)
2284 #define VIDIOC_DV_TIMINGS_CAP _IOWR('V', 100, struct v4l2_dv_timings_cap)
2285 #define VIDIOC_ENUM_FREQ_BANDS _IOWR('V', 101, struct v4l2_frequency_band)
2286
2287 /*
2288 * Experimental, meant for debugging, testing and internal use.
2289 * Never use this in applications!
2290 */
2291 #define VIDIOC_DBG_G_CHIP_INFO _IOWR('V', 102, struct v4l2_dbg_chip_info)
2292
2293 #define VIDIOC_QUERY_EXT_CTRL _IOWR('V', 103, struct v4l2_query_ext_ctrl)
2294
2295 /* Reminder: when adding new ioctls please add support for them to
2296 drivers/media/v4l2-core/v4l2-compat-ioctl32.c as well! */
2297
2298 #define BASE_VIDIOC_PRIVATE 192 /* 192-255 are private */
2299
2300 #endif /* _UAPI__LINUX_VIDEODEV2_H */
This page took 0.118414 seconds and 5 git commands to generate.