1e2be04c7SGreg Kroah-Hartman /* SPDX-License-Identifier: ((GPL-2.0+ WITH Linux-syscall-note) OR BSD-3-Clause) */
2607ca46eSDavid Howells /*
3607ca46eSDavid Howells * Video for Linux Two header file
4607ca46eSDavid Howells *
5607ca46eSDavid Howells * Copyright (C) 1999-2012 the contributors
6607ca46eSDavid Howells *
7607ca46eSDavid Howells * This program is free software; you can redistribute it and/or modify
8607ca46eSDavid Howells * it under the terms of the GNU General Public License as published by
9607ca46eSDavid Howells * the Free Software Foundation; either version 2 of the License, or
10607ca46eSDavid Howells * (at your option) any later version.
11607ca46eSDavid Howells *
12607ca46eSDavid Howells * This program is distributed in the hope that it will be useful,
13607ca46eSDavid Howells * but WITHOUT ANY WARRANTY; without even the implied warranty of
14607ca46eSDavid Howells * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15607ca46eSDavid Howells * GNU General Public License for more details.
16607ca46eSDavid Howells *
17607ca46eSDavid Howells * Alternatively you can redistribute this file under the terms of the
18607ca46eSDavid Howells * BSD license as stated below:
19607ca46eSDavid Howells *
20607ca46eSDavid Howells * Redistribution and use in source and binary forms, with or without
21607ca46eSDavid Howells * modification, are permitted provided that the following conditions
22607ca46eSDavid Howells * are met:
23607ca46eSDavid Howells * 1. Redistributions of source code must retain the above copyright
24607ca46eSDavid Howells * notice, this list of conditions and the following disclaimer.
25607ca46eSDavid Howells * 2. Redistributions in binary form must reproduce the above copyright
26607ca46eSDavid Howells * notice, this list of conditions and the following disclaimer in
27607ca46eSDavid Howells * the documentation and/or other materials provided with the
28607ca46eSDavid Howells * distribution.
29607ca46eSDavid Howells * 3. The names of its contributors may not be used to endorse or promote
30607ca46eSDavid Howells * products derived from this software without specific prior written
31607ca46eSDavid Howells * permission.
32607ca46eSDavid Howells *
33607ca46eSDavid Howells * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
34607ca46eSDavid Howells * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
35607ca46eSDavid Howells * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
36607ca46eSDavid Howells * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
37607ca46eSDavid Howells * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
38607ca46eSDavid Howells * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
39607ca46eSDavid Howells * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
40607ca46eSDavid Howells * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
41607ca46eSDavid Howells * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
42607ca46eSDavid Howells * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
43607ca46eSDavid Howells * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
44607ca46eSDavid Howells *
45607ca46eSDavid Howells * Header file for v4l or V4L2 drivers and applications
46607ca46eSDavid Howells * with public API.
47607ca46eSDavid Howells * All kernel-specific stuff were moved to media/v4l2-dev.h, so
48607ca46eSDavid Howells * no #if __KERNEL tests are allowed here
49607ca46eSDavid Howells *
50991ce92fSMauro Carvalho Chehab * See https://linuxtv.org for more info
51607ca46eSDavid Howells *
52607ca46eSDavid Howells * Author: Bill Dirks <[email protected]>
53607ca46eSDavid Howells * Justin Schoeman
54607ca46eSDavid Howells * Hans Verkuil <[email protected]>
55607ca46eSDavid Howells * et al.
56607ca46eSDavid Howells */
57607ca46eSDavid Howells #ifndef _UAPI__LINUX_VIDEODEV2_H
58607ca46eSDavid Howells #define _UAPI__LINUX_VIDEODEV2_H
59607ca46eSDavid Howells
60607ca46eSDavid Howells #ifndef __KERNEL__
61607ca46eSDavid Howells #include <sys/time.h>
62607ca46eSDavid Howells #endif
63607ca46eSDavid Howells #include <linux/compiler.h>
64607ca46eSDavid Howells #include <linux/ioctl.h>
65607ca46eSDavid Howells #include <linux/types.h>
66607ca46eSDavid Howells #include <linux/v4l2-common.h>
67607ca46eSDavid Howells #include <linux/v4l2-controls.h>
68607ca46eSDavid Howells
69607ca46eSDavid Howells /*
70607ca46eSDavid Howells * Common stuff for both V4L1 and V4L2
71607ca46eSDavid Howells * Moved from videodev.h
72607ca46eSDavid Howells */
73607ca46eSDavid Howells #define VIDEO_MAX_FRAME 32
74607ca46eSDavid Howells #define VIDEO_MAX_PLANES 8
75607ca46eSDavid Howells
76607ca46eSDavid Howells /*
77607ca46eSDavid Howells * M I S C E L L A N E O U S
78607ca46eSDavid Howells */
79607ca46eSDavid Howells
80607ca46eSDavid Howells /* Four-character-code (FOURCC) */
81607ca46eSDavid Howells #define v4l2_fourcc(a, b, c, d)\
82607ca46eSDavid Howells ((__u32)(a) | ((__u32)(b) << 8) | ((__u32)(c) << 16) | ((__u32)(d) << 24))
83ff3c65cbSShuah Khan #define v4l2_fourcc_be(a, b, c, d) (v4l2_fourcc(a, b, c, d) | (1U << 31))
84607ca46eSDavid Howells
85607ca46eSDavid Howells /*
86607ca46eSDavid Howells * E N U M S
87607ca46eSDavid Howells */
88607ca46eSDavid Howells enum v4l2_field {
89607ca46eSDavid Howells V4L2_FIELD_ANY = 0, /* driver can choose from none,
90607ca46eSDavid Howells top, bottom, interlaced
91607ca46eSDavid Howells depending on whatever it thinks
92607ca46eSDavid Howells is approximate ... */
93607ca46eSDavid Howells V4L2_FIELD_NONE = 1, /* this device has no fields ... */
94607ca46eSDavid Howells V4L2_FIELD_TOP = 2, /* top field only */
95607ca46eSDavid Howells V4L2_FIELD_BOTTOM = 3, /* bottom field only */
96607ca46eSDavid Howells V4L2_FIELD_INTERLACED = 4, /* both fields interlaced */
97607ca46eSDavid Howells V4L2_FIELD_SEQ_TB = 5, /* both fields sequential into one
98607ca46eSDavid Howells buffer, top-bottom order */
99607ca46eSDavid Howells V4L2_FIELD_SEQ_BT = 6, /* same as above + bottom-top order */
100607ca46eSDavid Howells V4L2_FIELD_ALTERNATE = 7, /* both fields alternating into
101607ca46eSDavid Howells separate buffers */
102607ca46eSDavid Howells V4L2_FIELD_INTERLACED_TB = 8, /* both fields interlaced, top field
103607ca46eSDavid Howells first and the top field is
104607ca46eSDavid Howells transmitted first */
105607ca46eSDavid Howells V4L2_FIELD_INTERLACED_BT = 9, /* both fields interlaced, top field
106607ca46eSDavid Howells first and the bottom field is
107607ca46eSDavid Howells transmitted first */
108607ca46eSDavid Howells };
109607ca46eSDavid Howells #define V4L2_FIELD_HAS_TOP(field) \
110607ca46eSDavid Howells ((field) == V4L2_FIELD_TOP ||\
111607ca46eSDavid Howells (field) == V4L2_FIELD_INTERLACED ||\
112607ca46eSDavid Howells (field) == V4L2_FIELD_INTERLACED_TB ||\
113607ca46eSDavid Howells (field) == V4L2_FIELD_INTERLACED_BT ||\
114607ca46eSDavid Howells (field) == V4L2_FIELD_SEQ_TB ||\
115607ca46eSDavid Howells (field) == V4L2_FIELD_SEQ_BT)
116607ca46eSDavid Howells #define V4L2_FIELD_HAS_BOTTOM(field) \
117607ca46eSDavid Howells ((field) == V4L2_FIELD_BOTTOM ||\
118607ca46eSDavid Howells (field) == V4L2_FIELD_INTERLACED ||\
119607ca46eSDavid Howells (field) == V4L2_FIELD_INTERLACED_TB ||\
120607ca46eSDavid Howells (field) == V4L2_FIELD_INTERLACED_BT ||\
121607ca46eSDavid Howells (field) == V4L2_FIELD_SEQ_TB ||\
122607ca46eSDavid Howells (field) == V4L2_FIELD_SEQ_BT)
123607ca46eSDavid Howells #define V4L2_FIELD_HAS_BOTH(field) \
124607ca46eSDavid Howells ((field) == V4L2_FIELD_INTERLACED ||\
125607ca46eSDavid Howells (field) == V4L2_FIELD_INTERLACED_TB ||\
126607ca46eSDavid Howells (field) == V4L2_FIELD_INTERLACED_BT ||\
127607ca46eSDavid Howells (field) == V4L2_FIELD_SEQ_TB ||\
128607ca46eSDavid Howells (field) == V4L2_FIELD_SEQ_BT)
129e34c4db8SHans Verkuil #define V4L2_FIELD_HAS_T_OR_B(field) \
130e34c4db8SHans Verkuil ((field) == V4L2_FIELD_BOTTOM ||\
131e34c4db8SHans Verkuil (field) == V4L2_FIELD_TOP ||\
132e34c4db8SHans Verkuil (field) == V4L2_FIELD_ALTERNATE)
1331c3721b1SSteve Longerbeam #define V4L2_FIELD_IS_INTERLACED(field) \
1341c3721b1SSteve Longerbeam ((field) == V4L2_FIELD_INTERLACED ||\
1351c3721b1SSteve Longerbeam (field) == V4L2_FIELD_INTERLACED_TB ||\
1361c3721b1SSteve Longerbeam (field) == V4L2_FIELD_INTERLACED_BT)
1371c3721b1SSteve Longerbeam #define V4L2_FIELD_IS_SEQUENTIAL(field) \
1381c3721b1SSteve Longerbeam ((field) == V4L2_FIELD_SEQ_TB ||\
1391c3721b1SSteve Longerbeam (field) == V4L2_FIELD_SEQ_BT)
140607ca46eSDavid Howells
141607ca46eSDavid Howells enum v4l2_buf_type {
142607ca46eSDavid Howells V4L2_BUF_TYPE_VIDEO_CAPTURE = 1,
143607ca46eSDavid Howells V4L2_BUF_TYPE_VIDEO_OUTPUT = 2,
144607ca46eSDavid Howells V4L2_BUF_TYPE_VIDEO_OVERLAY = 3,
145607ca46eSDavid Howells V4L2_BUF_TYPE_VBI_CAPTURE = 4,
146607ca46eSDavid Howells V4L2_BUF_TYPE_VBI_OUTPUT = 5,
147607ca46eSDavid Howells V4L2_BUF_TYPE_SLICED_VBI_CAPTURE = 6,
148607ca46eSDavid Howells V4L2_BUF_TYPE_SLICED_VBI_OUTPUT = 7,
149607ca46eSDavid Howells V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY = 8,
150607ca46eSDavid Howells V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE = 9,
151607ca46eSDavid Howells V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE = 10,
1526f3073b8SAntti Palosaari V4L2_BUF_TYPE_SDR_CAPTURE = 11,
1539effc72fSAntti Palosaari V4L2_BUF_TYPE_SDR_OUTPUT = 12,
154fb9ffa6aSLaurent Pinchart V4L2_BUF_TYPE_META_CAPTURE = 13,
15572148d1aSSakari Ailus V4L2_BUF_TYPE_META_OUTPUT = 14,
156607ca46eSDavid Howells /* Deprecated, do not use */
157607ca46eSDavid Howells V4L2_BUF_TYPE_PRIVATE = 0x80,
158607ca46eSDavid Howells };
159607ca46eSDavid Howells
160607ca46eSDavid Howells #define V4L2_TYPE_IS_MULTIPLANAR(type) \
161607ca46eSDavid Howells ((type) == V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE \
162607ca46eSDavid Howells || (type) == V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE)
163607ca46eSDavid Howells
164607ca46eSDavid Howells #define V4L2_TYPE_IS_OUTPUT(type) \
165607ca46eSDavid Howells ((type) == V4L2_BUF_TYPE_VIDEO_OUTPUT \
166607ca46eSDavid Howells || (type) == V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE \
167607ca46eSDavid Howells || (type) == V4L2_BUF_TYPE_VIDEO_OVERLAY \
168607ca46eSDavid Howells || (type) == V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY \
169607ca46eSDavid Howells || (type) == V4L2_BUF_TYPE_VBI_OUTPUT \
1709effc72fSAntti Palosaari || (type) == V4L2_BUF_TYPE_SLICED_VBI_OUTPUT \
1714b837c6dSSakari Ailus || (type) == V4L2_BUF_TYPE_SDR_OUTPUT \
1724b837c6dSSakari Ailus || (type) == V4L2_BUF_TYPE_META_OUTPUT)
173607ca46eSDavid Howells
174b3ab1c60SEzequiel Garcia #define V4L2_TYPE_IS_CAPTURE(type) (!V4L2_TYPE_IS_OUTPUT(type))
175b3ab1c60SEzequiel Garcia
176607ca46eSDavid Howells enum v4l2_tuner_type {
177607ca46eSDavid Howells V4L2_TUNER_RADIO = 1,
178607ca46eSDavid Howells V4L2_TUNER_ANALOG_TV = 2,
179607ca46eSDavid Howells V4L2_TUNER_DIGITAL_TV = 3,
180f3c3ececSAntti Palosaari V4L2_TUNER_SDR = 4,
18184099a28SAntti Palosaari V4L2_TUNER_RF = 5,
182607ca46eSDavid Howells };
183607ca46eSDavid Howells
184f3c3ececSAntti Palosaari /* Deprecated, do not use */
185f3c3ececSAntti Palosaari #define V4L2_TUNER_ADC V4L2_TUNER_SDR
186f3c3ececSAntti Palosaari
187607ca46eSDavid Howells enum v4l2_memory {
188607ca46eSDavid Howells V4L2_MEMORY_MMAP = 1,
189607ca46eSDavid Howells V4L2_MEMORY_USERPTR = 2,
190607ca46eSDavid Howells V4L2_MEMORY_OVERLAY = 3,
191051c7788SSumit Semwal V4L2_MEMORY_DMABUF = 4,
192607ca46eSDavid Howells };
193607ca46eSDavid Howells
194607ca46eSDavid Howells /* see also http://vektor.theorem.ca/graphics/ycbcr/ */
195607ca46eSDavid Howells enum v4l2_colorspace {
196e01dfc01SHans Verkuil /*
197e01dfc01SHans Verkuil * Default colorspace, i.e. let the driver figure it out.
198e01dfc01SHans Verkuil * Can only be used with video capture.
199e01dfc01SHans Verkuil */
200e01dfc01SHans Verkuil V4L2_COLORSPACE_DEFAULT = 0,
201e01dfc01SHans Verkuil
202d5735d64SHans Verkuil /* SMPTE 170M: used for broadcast NTSC/PAL SDTV */
203607ca46eSDavid Howells V4L2_COLORSPACE_SMPTE170M = 1,
204607ca46eSDavid Howells
205d5735d64SHans Verkuil /* Obsolete pre-1998 SMPTE 240M HDTV standard, superseded by Rec 709 */
206607ca46eSDavid Howells V4L2_COLORSPACE_SMPTE240M = 2,
207607ca46eSDavid Howells
208d5735d64SHans Verkuil /* Rec.709: used for HDTV */
209607ca46eSDavid Howells V4L2_COLORSPACE_REC709 = 3,
210607ca46eSDavid Howells
211d5735d64SHans Verkuil /*
212d5735d64SHans Verkuil * Deprecated, do not use. No driver will ever return this. This was
213d5735d64SHans Verkuil * based on a misunderstanding of the bt878 datasheet.
214d5735d64SHans Verkuil */
215607ca46eSDavid Howells V4L2_COLORSPACE_BT878 = 4,
216607ca46eSDavid Howells
217d5735d64SHans Verkuil /*
218d5735d64SHans Verkuil * NTSC 1953 colorspace. This only makes sense when dealing with
219d5735d64SHans Verkuil * really, really old NTSC recordings. Superseded by SMPTE 170M.
220d5735d64SHans Verkuil */
221607ca46eSDavid Howells V4L2_COLORSPACE_470_SYSTEM_M = 5,
222d5735d64SHans Verkuil
223d5735d64SHans Verkuil /*
224e7531d56SHans Verkuil * EBU Tech 3213 PAL/SECAM colorspace.
225d5735d64SHans Verkuil */
226607ca46eSDavid Howells V4L2_COLORSPACE_470_SYSTEM_BG = 6,
227607ca46eSDavid Howells
228d5735d64SHans Verkuil /*
229d5735d64SHans Verkuil * Effectively shorthand for V4L2_COLORSPACE_SRGB, V4L2_YCBCR_ENC_601
230d5735d64SHans Verkuil * and V4L2_QUANTIZATION_FULL_RANGE. To be used for (Motion-)JPEG.
231607ca46eSDavid Howells */
232607ca46eSDavid Howells V4L2_COLORSPACE_JPEG = 7,
233607ca46eSDavid Howells
234d5735d64SHans Verkuil /* For RGB colorspaces such as produces by most webcams. */
235607ca46eSDavid Howells V4L2_COLORSPACE_SRGB = 8,
236d5735d64SHans Verkuil
237db034018SHans Verkuil /* opRGB colorspace */
238db034018SHans Verkuil V4L2_COLORSPACE_OPRGB = 9,
239d5735d64SHans Verkuil
240d5735d64SHans Verkuil /* BT.2020 colorspace, used for UHDTV. */
241d5735d64SHans Verkuil V4L2_COLORSPACE_BT2020 = 10,
242addad105SHans Verkuil
243addad105SHans Verkuil /* Raw colorspace: for RAW unprocessed images */
244addad105SHans Verkuil V4L2_COLORSPACE_RAW = 11,
245529a7960SHans Verkuil
246529a7960SHans Verkuil /* DCI-P3 colorspace, used by cinema projectors */
247529a7960SHans Verkuil V4L2_COLORSPACE_DCI_P3 = 12,
248718d2153SLaurent Pinchart
249718d2153SLaurent Pinchart #ifdef __KERNEL__
250718d2153SLaurent Pinchart /*
251718d2153SLaurent Pinchart * Largest supported colorspace value, assigned by the compiler, used
252718d2153SLaurent Pinchart * by the framework to check for invalid values.
253718d2153SLaurent Pinchart */
254718d2153SLaurent Pinchart V4L2_COLORSPACE_LAST,
255718d2153SLaurent Pinchart #endif
256d5735d64SHans Verkuil };
257d5735d64SHans Verkuil
2583818c4daSHans Verkuil /*
2593818c4daSHans Verkuil * Determine how COLORSPACE_DEFAULT should map to a proper colorspace.
2603818c4daSHans Verkuil * This depends on whether this is a SDTV image (use SMPTE 170M), an
2613818c4daSHans Verkuil * HDTV image (use Rec. 709), or something else (use sRGB).
2623818c4daSHans Verkuil */
2633818c4daSHans Verkuil #define V4L2_MAP_COLORSPACE_DEFAULT(is_sdtv, is_hdtv) \
2643818c4daSHans Verkuil ((is_sdtv) ? V4L2_COLORSPACE_SMPTE170M : \
2653818c4daSHans Verkuil ((is_hdtv) ? V4L2_COLORSPACE_REC709 : V4L2_COLORSPACE_SRGB))
2663818c4daSHans Verkuil
26774fdcb2eSHans Verkuil enum v4l2_xfer_func {
26874fdcb2eSHans Verkuil /*
26974fdcb2eSHans Verkuil * Mapping of V4L2_XFER_FUNC_DEFAULT to actual transfer functions
27074fdcb2eSHans Verkuil * for the various colorspaces:
27174fdcb2eSHans Verkuil *
27274fdcb2eSHans Verkuil * V4L2_COLORSPACE_SMPTE170M, V4L2_COLORSPACE_470_SYSTEM_M,
27374fdcb2eSHans Verkuil * V4L2_COLORSPACE_470_SYSTEM_BG, V4L2_COLORSPACE_REC709 and
27474fdcb2eSHans Verkuil * V4L2_COLORSPACE_BT2020: V4L2_XFER_FUNC_709
27574fdcb2eSHans Verkuil *
27674fdcb2eSHans Verkuil * V4L2_COLORSPACE_SRGB, V4L2_COLORSPACE_JPEG: V4L2_XFER_FUNC_SRGB
27774fdcb2eSHans Verkuil *
278db034018SHans Verkuil * V4L2_COLORSPACE_OPRGB: V4L2_XFER_FUNC_OPRGB
27974fdcb2eSHans Verkuil *
28074fdcb2eSHans Verkuil * V4L2_COLORSPACE_SMPTE240M: V4L2_XFER_FUNC_SMPTE240M
28174fdcb2eSHans Verkuil *
28274fdcb2eSHans Verkuil * V4L2_COLORSPACE_RAW: V4L2_XFER_FUNC_NONE
283529a7960SHans Verkuil *
284529a7960SHans Verkuil * V4L2_COLORSPACE_DCI_P3: V4L2_XFER_FUNC_DCI_P3
28574fdcb2eSHans Verkuil */
28674fdcb2eSHans Verkuil V4L2_XFER_FUNC_DEFAULT = 0,
28774fdcb2eSHans Verkuil V4L2_XFER_FUNC_709 = 1,
28874fdcb2eSHans Verkuil V4L2_XFER_FUNC_SRGB = 2,
289db034018SHans Verkuil V4L2_XFER_FUNC_OPRGB = 3,
29074fdcb2eSHans Verkuil V4L2_XFER_FUNC_SMPTE240M = 4,
29174fdcb2eSHans Verkuil V4L2_XFER_FUNC_NONE = 5,
292529a7960SHans Verkuil V4L2_XFER_FUNC_DCI_P3 = 6,
2932bdd2801SHans Verkuil V4L2_XFER_FUNC_SMPTE2084 = 7,
294718d2153SLaurent Pinchart #ifdef __KERNEL__
295718d2153SLaurent Pinchart /*
296718d2153SLaurent Pinchart * Largest supported transfer function value, assigned by the compiler,
297718d2153SLaurent Pinchart * used by the framework to check for invalid values.
298718d2153SLaurent Pinchart */
299718d2153SLaurent Pinchart V4L2_XFER_FUNC_LAST,
300718d2153SLaurent Pinchart #endif
30174fdcb2eSHans Verkuil };
30274fdcb2eSHans Verkuil
30374fdcb2eSHans Verkuil /*
30474fdcb2eSHans Verkuil * Determine how XFER_FUNC_DEFAULT should map to a proper transfer function.
30574fdcb2eSHans Verkuil * This depends on the colorspace.
30674fdcb2eSHans Verkuil */
30774fdcb2eSHans Verkuil #define V4L2_MAP_XFER_FUNC_DEFAULT(colsp) \
308db034018SHans Verkuil ((colsp) == V4L2_COLORSPACE_OPRGB ? V4L2_XFER_FUNC_OPRGB : \
30974fdcb2eSHans Verkuil ((colsp) == V4L2_COLORSPACE_SMPTE240M ? V4L2_XFER_FUNC_SMPTE240M : \
310529a7960SHans Verkuil ((colsp) == V4L2_COLORSPACE_DCI_P3 ? V4L2_XFER_FUNC_DCI_P3 : \
31174fdcb2eSHans Verkuil ((colsp) == V4L2_COLORSPACE_RAW ? V4L2_XFER_FUNC_NONE : \
31274fdcb2eSHans Verkuil ((colsp) == V4L2_COLORSPACE_SRGB || (colsp) == V4L2_COLORSPACE_JPEG ? \
313529a7960SHans Verkuil V4L2_XFER_FUNC_SRGB : V4L2_XFER_FUNC_709)))))
31474fdcb2eSHans Verkuil
315d5735d64SHans Verkuil enum v4l2_ycbcr_encoding {
316d5735d64SHans Verkuil /*
317d5735d64SHans Verkuil * Mapping of V4L2_YCBCR_ENC_DEFAULT to actual encodings for the
318d5735d64SHans Verkuil * various colorspaces:
319d5735d64SHans Verkuil *
320d5735d64SHans Verkuil * V4L2_COLORSPACE_SMPTE170M, V4L2_COLORSPACE_470_SYSTEM_M,
321adca8c8eSHans Verkuil * V4L2_COLORSPACE_470_SYSTEM_BG, V4L2_COLORSPACE_SRGB,
322db034018SHans Verkuil * V4L2_COLORSPACE_OPRGB and V4L2_COLORSPACE_JPEG: V4L2_YCBCR_ENC_601
323d5735d64SHans Verkuil *
324529a7960SHans Verkuil * V4L2_COLORSPACE_REC709 and V4L2_COLORSPACE_DCI_P3: V4L2_YCBCR_ENC_709
325d5735d64SHans Verkuil *
326d5735d64SHans Verkuil * V4L2_COLORSPACE_BT2020: V4L2_YCBCR_ENC_BT2020
327d5735d64SHans Verkuil *
328d5735d64SHans Verkuil * V4L2_COLORSPACE_SMPTE240M: V4L2_YCBCR_ENC_SMPTE240M
329d5735d64SHans Verkuil */
330d5735d64SHans Verkuil V4L2_YCBCR_ENC_DEFAULT = 0,
331d5735d64SHans Verkuil
332d5735d64SHans Verkuil /* ITU-R 601 -- SDTV */
333d5735d64SHans Verkuil V4L2_YCBCR_ENC_601 = 1,
334d5735d64SHans Verkuil
335d5735d64SHans Verkuil /* Rec. 709 -- HDTV */
336d5735d64SHans Verkuil V4L2_YCBCR_ENC_709 = 2,
337d5735d64SHans Verkuil
338d5735d64SHans Verkuil /* ITU-R 601/EN 61966-2-4 Extended Gamut -- SDTV */
339d5735d64SHans Verkuil V4L2_YCBCR_ENC_XV601 = 3,
340d5735d64SHans Verkuil
341d5735d64SHans Verkuil /* Rec. 709/EN 61966-2-4 Extended Gamut -- HDTV */
342d5735d64SHans Verkuil V4L2_YCBCR_ENC_XV709 = 4,
343d5735d64SHans Verkuil
344adca8c8eSHans Verkuil #ifndef __KERNEL__
345adca8c8eSHans Verkuil /*
346adca8c8eSHans Verkuil * sYCC (Y'CbCr encoding of sRGB), identical to ENC_601. It was added
347adca8c8eSHans Verkuil * originally due to a misunderstanding of the sYCC standard. It should
348adca8c8eSHans Verkuil * not be used, instead use V4L2_YCBCR_ENC_601.
349adca8c8eSHans Verkuil */
350d5735d64SHans Verkuil V4L2_YCBCR_ENC_SYCC = 5,
351adca8c8eSHans Verkuil #endif
352d5735d64SHans Verkuil
353d5735d64SHans Verkuil /* BT.2020 Non-constant Luminance Y'CbCr */
354d5735d64SHans Verkuil V4L2_YCBCR_ENC_BT2020 = 6,
355d5735d64SHans Verkuil
356d5735d64SHans Verkuil /* BT.2020 Constant Luminance Y'CbcCrc */
357d5735d64SHans Verkuil V4L2_YCBCR_ENC_BT2020_CONST_LUM = 7,
358d5735d64SHans Verkuil
359d5735d64SHans Verkuil /* SMPTE 240M -- Obsolete HDTV */
360d5735d64SHans Verkuil V4L2_YCBCR_ENC_SMPTE240M = 8,
361718d2153SLaurent Pinchart #ifdef __KERNEL__
362718d2153SLaurent Pinchart /*
363718d2153SLaurent Pinchart * Largest supported encoding value, assigned by the compiler, used by
364718d2153SLaurent Pinchart * the framework to check for invalid values.
365718d2153SLaurent Pinchart */
366718d2153SLaurent Pinchart V4L2_YCBCR_ENC_LAST,
367718d2153SLaurent Pinchart #endif
368d5735d64SHans Verkuil };
369d5735d64SHans Verkuil
3703818c4daSHans Verkuil /*
3718a0d62afSRicardo Ribalda Delgado * enum v4l2_hsv_encoding values should not collide with the ones from
3728a0d62afSRicardo Ribalda Delgado * enum v4l2_ycbcr_encoding.
3738a0d62afSRicardo Ribalda Delgado */
3748a0d62afSRicardo Ribalda Delgado enum v4l2_hsv_encoding {
3758a0d62afSRicardo Ribalda Delgado
3768a0d62afSRicardo Ribalda Delgado /* Hue mapped to 0 - 179 */
3778a0d62afSRicardo Ribalda Delgado V4L2_HSV_ENC_180 = 128,
3788a0d62afSRicardo Ribalda Delgado
3798a0d62afSRicardo Ribalda Delgado /* Hue mapped to 0-255 */
3808a0d62afSRicardo Ribalda Delgado V4L2_HSV_ENC_256 = 129,
3818a0d62afSRicardo Ribalda Delgado };
3828a0d62afSRicardo Ribalda Delgado
3838a0d62afSRicardo Ribalda Delgado /*
3843818c4daSHans Verkuil * Determine how YCBCR_ENC_DEFAULT should map to a proper Y'CbCr encoding.
3853818c4daSHans Verkuil * This depends on the colorspace.
3863818c4daSHans Verkuil */
3873818c4daSHans Verkuil #define V4L2_MAP_YCBCR_ENC_DEFAULT(colsp) \
388529a7960SHans Verkuil (((colsp) == V4L2_COLORSPACE_REC709 || \
389529a7960SHans Verkuil (colsp) == V4L2_COLORSPACE_DCI_P3) ? V4L2_YCBCR_ENC_709 : \
3903818c4daSHans Verkuil ((colsp) == V4L2_COLORSPACE_BT2020 ? V4L2_YCBCR_ENC_BT2020 : \
3913818c4daSHans Verkuil ((colsp) == V4L2_COLORSPACE_SMPTE240M ? V4L2_YCBCR_ENC_SMPTE240M : \
3923818c4daSHans Verkuil V4L2_YCBCR_ENC_601)))
3933818c4daSHans Verkuil
394d5735d64SHans Verkuil enum v4l2_quantization {
395d5735d64SHans Verkuil /*
396b305dfe2SHans Verkuil * The default for R'G'B' quantization is always full range.
397b305dfe2SHans Verkuil * For Y'CbCr the quantization is always limited range, except
398b305dfe2SHans Verkuil * for COLORSPACE_JPEG: this is full range.
399d5735d64SHans Verkuil */
400d5735d64SHans Verkuil V4L2_QUANTIZATION_DEFAULT = 0,
401d5735d64SHans Verkuil V4L2_QUANTIZATION_FULL_RANGE = 1,
402d5735d64SHans Verkuil V4L2_QUANTIZATION_LIM_RANGE = 2,
403607ca46eSDavid Howells };
404607ca46eSDavid Howells
4053818c4daSHans Verkuil /*
4063818c4daSHans Verkuil * Determine how QUANTIZATION_DEFAULT should map to a proper quantization.
407b305dfe2SHans Verkuil * This depends on whether the image is RGB or not, the colorspace.
408b305dfe2SHans Verkuil * The Y'CbCr encoding is not used anymore, but is still there for backwards
409b305dfe2SHans Verkuil * compatibility.
4103818c4daSHans Verkuil */
4118a0d62afSRicardo Ribalda Delgado #define V4L2_MAP_QUANTIZATION_DEFAULT(is_rgb_or_hsv, colsp, ycbcr_enc) \
41279e92dc0SHans Verkuil (((is_rgb_or_hsv) || (colsp) == V4L2_COLORSPACE_JPEG) ? \
413b305dfe2SHans Verkuil V4L2_QUANTIZATION_FULL_RANGE : V4L2_QUANTIZATION_LIM_RANGE)
4143818c4daSHans Verkuil
415db034018SHans Verkuil /*
416db034018SHans Verkuil * Deprecated names for opRGB colorspace (IEC 61966-2-5)
417db034018SHans Verkuil *
418db034018SHans Verkuil * WARNING: Please don't use these deprecated defines in your code, as
419db034018SHans Verkuil * there is a chance we have to remove them in the future.
420db034018SHans Verkuil */
421db034018SHans Verkuil #ifndef __KERNEL__
422db034018SHans Verkuil #define V4L2_COLORSPACE_ADOBERGB V4L2_COLORSPACE_OPRGB
423db034018SHans Verkuil #define V4L2_XFER_FUNC_ADOBERGB V4L2_XFER_FUNC_OPRGB
424db034018SHans Verkuil #endif
425db034018SHans Verkuil
426607ca46eSDavid Howells enum v4l2_priority {
427607ca46eSDavid Howells V4L2_PRIORITY_UNSET = 0, /* not initialized */
428607ca46eSDavid Howells V4L2_PRIORITY_BACKGROUND = 1,
429607ca46eSDavid Howells V4L2_PRIORITY_INTERACTIVE = 2,
430607ca46eSDavid Howells V4L2_PRIORITY_RECORD = 3,
431607ca46eSDavid Howells V4L2_PRIORITY_DEFAULT = V4L2_PRIORITY_INTERACTIVE,
432607ca46eSDavid Howells };
433607ca46eSDavid Howells
434607ca46eSDavid Howells struct v4l2_rect {
435607ca46eSDavid Howells __s32 left;
436607ca46eSDavid Howells __s32 top;
437f90580caSRicardo Ribalda __u32 width;
438f90580caSRicardo Ribalda __u32 height;
439607ca46eSDavid Howells };
440607ca46eSDavid Howells
441607ca46eSDavid Howells struct v4l2_fract {
442607ca46eSDavid Howells __u32 numerator;
443607ca46eSDavid Howells __u32 denominator;
444607ca46eSDavid Howells };
445607ca46eSDavid Howells
446d1dc4937SRicardo Ribalda Delgado struct v4l2_area {
447d1dc4937SRicardo Ribalda Delgado __u32 width;
448d1dc4937SRicardo Ribalda Delgado __u32 height;
449d1dc4937SRicardo Ribalda Delgado };
450d1dc4937SRicardo Ribalda Delgado
451607ca46eSDavid Howells /**
452607ca46eSDavid Howells * struct v4l2_capability - Describes V4L2 device caps returned by VIDIOC_QUERYCAP
453607ca46eSDavid Howells *
454607ca46eSDavid Howells * @driver: name of the driver module (e.g. "bttv")
455607ca46eSDavid Howells * @card: name of the card (e.g. "Hauppauge WinTV")
456607ca46eSDavid Howells * @bus_info: name of the bus (e.g. "PCI:" + pci_name(pci_dev) )
457607ca46eSDavid Howells * @version: KERNEL_VERSION
458607ca46eSDavid Howells * @capabilities: capabilities of the physical device as a whole
459607ca46eSDavid Howells * @device_caps: capabilities accessed via this particular device (node)
460607ca46eSDavid Howells * @reserved: reserved fields for future extensions
461607ca46eSDavid Howells */
462607ca46eSDavid Howells struct v4l2_capability {
463607ca46eSDavid Howells __u8 driver[16];
464607ca46eSDavid Howells __u8 card[32];
465607ca46eSDavid Howells __u8 bus_info[32];
466607ca46eSDavid Howells __u32 version;
467607ca46eSDavid Howells __u32 capabilities;
468607ca46eSDavid Howells __u32 device_caps;
469607ca46eSDavid Howells __u32 reserved[3];
470607ca46eSDavid Howells };
471607ca46eSDavid Howells
472607ca46eSDavid Howells /* Values for 'capabilities' field */
473607ca46eSDavid Howells #define V4L2_CAP_VIDEO_CAPTURE 0x00000001 /* Is a video capture device */
474607ca46eSDavid Howells #define V4L2_CAP_VIDEO_OUTPUT 0x00000002 /* Is a video output device */
475607ca46eSDavid Howells #define V4L2_CAP_VIDEO_OVERLAY 0x00000004 /* Can do video overlay */
476607ca46eSDavid Howells #define V4L2_CAP_VBI_CAPTURE 0x00000010 /* Is a raw VBI capture device */
477607ca46eSDavid Howells #define V4L2_CAP_VBI_OUTPUT 0x00000020 /* Is a raw VBI output device */
478607ca46eSDavid Howells #define V4L2_CAP_SLICED_VBI_CAPTURE 0x00000040 /* Is a sliced VBI capture device */
479607ca46eSDavid Howells #define V4L2_CAP_SLICED_VBI_OUTPUT 0x00000080 /* Is a sliced VBI output device */
480607ca46eSDavid Howells #define V4L2_CAP_RDS_CAPTURE 0x00000100 /* RDS data capture */
481607ca46eSDavid Howells #define V4L2_CAP_VIDEO_OUTPUT_OVERLAY 0x00000200 /* Can do video output overlay */
482607ca46eSDavid Howells #define V4L2_CAP_HW_FREQ_SEEK 0x00000400 /* Can do hardware frequency seek */
483607ca46eSDavid Howells #define V4L2_CAP_RDS_OUTPUT 0x00000800 /* Is an RDS encoder */
484607ca46eSDavid Howells
485607ca46eSDavid Howells /* Is a video capture device that supports multiplanar formats */
486607ca46eSDavid Howells #define V4L2_CAP_VIDEO_CAPTURE_MPLANE 0x00001000
487607ca46eSDavid Howells /* Is a video output device that supports multiplanar formats */
488607ca46eSDavid Howells #define V4L2_CAP_VIDEO_OUTPUT_MPLANE 0x00002000
489607ca46eSDavid Howells /* Is a video mem-to-mem device that supports multiplanar formats */
490607ca46eSDavid Howells #define V4L2_CAP_VIDEO_M2M_MPLANE 0x00004000
491607ca46eSDavid Howells /* Is a video mem-to-mem device */
492607ca46eSDavid Howells #define V4L2_CAP_VIDEO_M2M 0x00008000
493607ca46eSDavid Howells
494607ca46eSDavid Howells #define V4L2_CAP_TUNER 0x00010000 /* has a tuner */
495607ca46eSDavid Howells #define V4L2_CAP_AUDIO 0x00020000 /* has audio support */
496607ca46eSDavid Howells #define V4L2_CAP_RADIO 0x00040000 /* is a radio device */
497607ca46eSDavid Howells #define V4L2_CAP_MODULATOR 0x00080000 /* has a modulator */
498607ca46eSDavid Howells
499c9c54f72SAntti Palosaari #define V4L2_CAP_SDR_CAPTURE 0x00100000 /* Is a SDR capture device */
500d52e2381SLaurent Pinchart #define V4L2_CAP_EXT_PIX_FORMAT 0x00200000 /* Supports the extended pixel format */
5019effc72fSAntti Palosaari #define V4L2_CAP_SDR_OUTPUT 0x00400000 /* Is a SDR output device */
502fb9ffa6aSLaurent Pinchart #define V4L2_CAP_META_CAPTURE 0x00800000 /* Is a metadata capture device */
503c9c54f72SAntti Palosaari
504607ca46eSDavid Howells #define V4L2_CAP_READWRITE 0x01000000 /* read/write systemcalls */
5056fe0593bSErling Ljunggren #define V4L2_CAP_EDID 0x02000000 /* Is an EDID-only device */
506607ca46eSDavid Howells #define V4L2_CAP_STREAMING 0x04000000 /* streaming I/O ioctls */
50772148d1aSSakari Ailus #define V4L2_CAP_META_OUTPUT 0x08000000 /* Is a metadata output device */
508607ca46eSDavid Howells
509b2fe22d0SNick Dyer #define V4L2_CAP_TOUCH 0x10000000 /* Is a touch device */
510b2fe22d0SNick Dyer
511f645e625SNiklas Söderlund #define V4L2_CAP_IO_MC 0x20000000 /* Is input/output controlled by the media controller */
512f645e625SNiklas Söderlund
513607ca46eSDavid Howells #define V4L2_CAP_DEVICE_CAPS 0x80000000 /* sets device capabilities field */
514607ca46eSDavid Howells
515607ca46eSDavid Howells /*
516607ca46eSDavid Howells * V I D E O I M A G E F O R M A T
517607ca46eSDavid Howells */
518607ca46eSDavid Howells struct v4l2_pix_format {
519607ca46eSDavid Howells __u32 width;
520607ca46eSDavid Howells __u32 height;
521607ca46eSDavid Howells __u32 pixelformat;
522607ca46eSDavid Howells __u32 field; /* enum v4l2_field */
523607ca46eSDavid Howells __u32 bytesperline; /* for padding, zero if unused */
524607ca46eSDavid Howells __u32 sizeimage;
525607ca46eSDavid Howells __u32 colorspace; /* enum v4l2_colorspace */
526607ca46eSDavid Howells __u32 priv; /* private data, depends on pixelformat */
527c96fd46aSLaurent Pinchart __u32 flags; /* format flags (V4L2_PIX_FMT_FLAG_*) */
5288a0d62afSRicardo Ribalda Delgado union {
5298a0d62afSRicardo Ribalda Delgado /* enum v4l2_ycbcr_encoding */
5308a0d62afSRicardo Ribalda Delgado __u32 ycbcr_enc;
5318a0d62afSRicardo Ribalda Delgado /* enum v4l2_hsv_encoding */
5328a0d62afSRicardo Ribalda Delgado __u32 hsv_enc;
5338a0d62afSRicardo Ribalda Delgado };
534d5735d64SHans Verkuil __u32 quantization; /* enum v4l2_quantization */
53574fdcb2eSHans Verkuil __u32 xfer_func; /* enum v4l2_xfer_func */
536607ca46eSDavid Howells };
537607ca46eSDavid Howells
538607ca46eSDavid Howells /* Pixel format FOURCC depth Description */
539607ca46eSDavid Howells
540e9a66489SLaurent Pinchart /* RGB formats (1 or 2 bytes per pixel) */
541607ca46eSDavid Howells #define V4L2_PIX_FMT_RGB332 v4l2_fourcc('R', 'G', 'B', '1') /* 8 RGB-3-3-2 */
542607ca46eSDavid Howells #define V4L2_PIX_FMT_RGB444 v4l2_fourcc('R', '4', '4', '4') /* 16 xxxxrrrr ggggbbbb */
543977ff0e4SLaurent Pinchart #define V4L2_PIX_FMT_ARGB444 v4l2_fourcc('A', 'R', '1', '2') /* 16 aaaarrrr ggggbbbb */
544977ff0e4SLaurent Pinchart #define V4L2_PIX_FMT_XRGB444 v4l2_fourcc('X', 'R', '1', '2') /* 16 xxxxrrrr ggggbbbb */
5456c84f9b1SLaurent Pinchart #define V4L2_PIX_FMT_RGBA444 v4l2_fourcc('R', 'A', '1', '2') /* 16 rrrrgggg bbbbaaaa */
5466c84f9b1SLaurent Pinchart #define V4L2_PIX_FMT_RGBX444 v4l2_fourcc('R', 'X', '1', '2') /* 16 rrrrgggg bbbbxxxx */
5476c84f9b1SLaurent Pinchart #define V4L2_PIX_FMT_ABGR444 v4l2_fourcc('A', 'B', '1', '2') /* 16 aaaabbbb ggggrrrr */
5486c84f9b1SLaurent Pinchart #define V4L2_PIX_FMT_XBGR444 v4l2_fourcc('X', 'B', '1', '2') /* 16 xxxxbbbb ggggrrrr */
54922be8233SHans Verkuil #define V4L2_PIX_FMT_BGRA444 v4l2_fourcc('G', 'A', '1', '2') /* 16 bbbbgggg rrrraaaa */
5506c84f9b1SLaurent Pinchart #define V4L2_PIX_FMT_BGRX444 v4l2_fourcc('B', 'X', '1', '2') /* 16 bbbbgggg rrrrxxxx */
551607ca46eSDavid Howells #define V4L2_PIX_FMT_RGB555 v4l2_fourcc('R', 'G', 'B', 'O') /* 16 RGB-5-5-5 */
552977ff0e4SLaurent Pinchart #define V4L2_PIX_FMT_ARGB555 v4l2_fourcc('A', 'R', '1', '5') /* 16 ARGB-1-5-5-5 */
553977ff0e4SLaurent Pinchart #define V4L2_PIX_FMT_XRGB555 v4l2_fourcc('X', 'R', '1', '5') /* 16 XRGB-1-5-5-5 */
5548b65db13SLaurent Pinchart #define V4L2_PIX_FMT_RGBA555 v4l2_fourcc('R', 'A', '1', '5') /* 16 RGBA-5-5-5-1 */
5558b65db13SLaurent Pinchart #define V4L2_PIX_FMT_RGBX555 v4l2_fourcc('R', 'X', '1', '5') /* 16 RGBX-5-5-5-1 */
5568b65db13SLaurent Pinchart #define V4L2_PIX_FMT_ABGR555 v4l2_fourcc('A', 'B', '1', '5') /* 16 ABGR-1-5-5-5 */
5578b65db13SLaurent Pinchart #define V4L2_PIX_FMT_XBGR555 v4l2_fourcc('X', 'B', '1', '5') /* 16 XBGR-1-5-5-5 */
5588b65db13SLaurent Pinchart #define V4L2_PIX_FMT_BGRA555 v4l2_fourcc('B', 'A', '1', '5') /* 16 BGRA-5-5-5-1 */
5598b65db13SLaurent Pinchart #define V4L2_PIX_FMT_BGRX555 v4l2_fourcc('B', 'X', '1', '5') /* 16 BGRX-5-5-5-1 */
560607ca46eSDavid Howells #define V4L2_PIX_FMT_RGB565 v4l2_fourcc('R', 'G', 'B', 'P') /* 16 RGB-5-6-5 */
561607ca46eSDavid Howells #define V4L2_PIX_FMT_RGB555X v4l2_fourcc('R', 'G', 'B', 'Q') /* 16 RGB-5-5-5 BE */
562fcc0d3dbSLaurent Pinchart #define V4L2_PIX_FMT_ARGB555X v4l2_fourcc_be('A', 'R', '1', '5') /* 16 ARGB-5-5-5 BE */
563fcc0d3dbSLaurent Pinchart #define V4L2_PIX_FMT_XRGB555X v4l2_fourcc_be('X', 'R', '1', '5') /* 16 XRGB-5-5-5 BE */
564607ca46eSDavid Howells #define V4L2_PIX_FMT_RGB565X v4l2_fourcc('R', 'G', 'B', 'R') /* 16 RGB-5-6-5 BE */
565e9a66489SLaurent Pinchart
566e9a66489SLaurent Pinchart /* RGB formats (3 or 4 bytes per pixel) */
567607ca46eSDavid Howells #define V4L2_PIX_FMT_BGR666 v4l2_fourcc('B', 'G', 'R', 'H') /* 18 BGR-6-6-6 */
568607ca46eSDavid Howells #define V4L2_PIX_FMT_BGR24 v4l2_fourcc('B', 'G', 'R', '3') /* 24 BGR-8-8-8 */
569607ca46eSDavid Howells #define V4L2_PIX_FMT_RGB24 v4l2_fourcc('R', 'G', 'B', '3') /* 24 RGB-8-8-8 */
570607ca46eSDavid Howells #define V4L2_PIX_FMT_BGR32 v4l2_fourcc('B', 'G', 'R', '4') /* 32 BGR-8-8-8-8 */
571977ff0e4SLaurent Pinchart #define V4L2_PIX_FMT_ABGR32 v4l2_fourcc('A', 'R', '2', '4') /* 32 BGRA-8-8-8-8 */
572977ff0e4SLaurent Pinchart #define V4L2_PIX_FMT_XBGR32 v4l2_fourcc('X', 'R', '2', '4') /* 32 BGRX-8-8-8-8 */
573e25ec914SLaurent Pinchart #define V4L2_PIX_FMT_BGRA32 v4l2_fourcc('R', 'A', '2', '4') /* 32 ABGR-8-8-8-8 */
574e25ec914SLaurent Pinchart #define V4L2_PIX_FMT_BGRX32 v4l2_fourcc('R', 'X', '2', '4') /* 32 XBGR-8-8-8-8 */
575607ca46eSDavid Howells #define V4L2_PIX_FMT_RGB32 v4l2_fourcc('R', 'G', 'B', '4') /* 32 RGB-8-8-8-8 */
576e25ec914SLaurent Pinchart #define V4L2_PIX_FMT_RGBA32 v4l2_fourcc('A', 'B', '2', '4') /* 32 RGBA-8-8-8-8 */
577e25ec914SLaurent Pinchart #define V4L2_PIX_FMT_RGBX32 v4l2_fourcc('X', 'B', '2', '4') /* 32 RGBX-8-8-8-8 */
578977ff0e4SLaurent Pinchart #define V4L2_PIX_FMT_ARGB32 v4l2_fourcc('B', 'A', '2', '4') /* 32 ARGB-8-8-8-8 */
579977ff0e4SLaurent Pinchart #define V4L2_PIX_FMT_XRGB32 v4l2_fourcc('B', 'X', '2', '4') /* 32 XRGB-8-8-8-8 */
5808d0e3fc6STomi Valkeinen #define V4L2_PIX_FMT_RGBX1010102 v4l2_fourcc('R', 'X', '3', '0') /* 32 RGBX-10-10-10-2 */
5818d0e3fc6STomi Valkeinen #define V4L2_PIX_FMT_RGBA1010102 v4l2_fourcc('R', 'A', '3', '0') /* 32 RGBA-10-10-10-2 */
5828d0e3fc6STomi Valkeinen #define V4L2_PIX_FMT_ARGB2101010 v4l2_fourcc('A', 'R', '3', '0') /* 32 ARGB-2-10-10-10 */
583607ca46eSDavid Howells
584da0b7a40SMing Qian /* RGB formats (6 or 8 bytes per pixel) */
585da0b7a40SMing Qian #define V4L2_PIX_FMT_BGR48_12 v4l2_fourcc('B', '3', '1', '2') /* 48 BGR 12-bit per component */
586d1741141SJacopo Mondi #define V4L2_PIX_FMT_BGR48 v4l2_fourcc('B', 'G', 'R', '6') /* 48 BGR 16-bit per component */
587d1741141SJacopo Mondi #define V4L2_PIX_FMT_RGB48 v4l2_fourcc('R', 'G', 'B', '6') /* 48 RGB 16-bit per component */
588302b988cSMing Qian #define V4L2_PIX_FMT_ABGR64_12 v4l2_fourcc('B', '4', '1', '2') /* 64 BGRA 12-bit per component */
589da0b7a40SMing Qian
590607ca46eSDavid Howells /* Grey formats */
591607ca46eSDavid Howells #define V4L2_PIX_FMT_GREY v4l2_fourcc('G', 'R', 'E', 'Y') /* 8 Greyscale */
592607ca46eSDavid Howells #define V4L2_PIX_FMT_Y4 v4l2_fourcc('Y', '0', '4', ' ') /* 4 Greyscale */
593607ca46eSDavid Howells #define V4L2_PIX_FMT_Y6 v4l2_fourcc('Y', '0', '6', ' ') /* 6 Greyscale */
594607ca46eSDavid Howells #define V4L2_PIX_FMT_Y10 v4l2_fourcc('Y', '1', '0', ' ') /* 10 Greyscale */
595607ca46eSDavid Howells #define V4L2_PIX_FMT_Y12 v4l2_fourcc('Y', '1', '2', ' ') /* 12 Greyscale */
596a490ea68SMing Qian #define V4L2_PIX_FMT_Y012 v4l2_fourcc('Y', '0', '1', '2') /* 12 Greyscale */
597ae9753a0SDaniel Glöckner #define V4L2_PIX_FMT_Y14 v4l2_fourcc('Y', '1', '4', ' ') /* 14 Greyscale */
598607ca46eSDavid Howells #define V4L2_PIX_FMT_Y16 v4l2_fourcc('Y', '1', '6', ' ') /* 16 Greyscale */
5992e5e435fSRicardo Ribalda #define V4L2_PIX_FMT_Y16_BE v4l2_fourcc_be('Y', '1', '6', ' ') /* 16 Greyscale BE */
600607ca46eSDavid Howells
601607ca46eSDavid Howells /* Grey bit-packed formats */
602607ca46eSDavid Howells #define V4L2_PIX_FMT_Y10BPACK v4l2_fourcc('Y', '1', '0', 'B') /* 10 Greyscale bit-packed */
6036e15bec4STodor Tomov #define V4L2_PIX_FMT_Y10P v4l2_fourcc('Y', '1', '0', 'P') /* 10 Greyscale, MIPI RAW10 packed */
604b87f5e25SDaniel Scally #define V4L2_PIX_FMT_IPU3_Y10 v4l2_fourcc('i', 'p', '3', 'y') /* IPU3 packed 10-bit greyscale */
60518104776SJean-Michel Hautbois #define V4L2_PIX_FMT_Y12P v4l2_fourcc('Y', '1', '2', 'P') /* 12 Greyscale, MIPI RAW12 packed */
606adb1d465SJean-Michel Hautbois #define V4L2_PIX_FMT_Y14P v4l2_fourcc('Y', '1', '4', 'P') /* 14 Greyscale, MIPI RAW14 packed */
607607ca46eSDavid Howells
608607ca46eSDavid Howells /* Palette formats */
609607ca46eSDavid Howells #define V4L2_PIX_FMT_PAL8 v4l2_fourcc('P', 'A', 'L', '8') /* 8 8-bit palette */
610607ca46eSDavid Howells
61105ad6fc1SManjunath Hadli /* Chrominance formats */
61205ad6fc1SManjunath Hadli #define V4L2_PIX_FMT_UV8 v4l2_fourcc('U', 'V', '8', ' ') /* 8 UV 4:4 */
61305ad6fc1SManjunath Hadli
614607ca46eSDavid Howells /* Luminance+Chrominance formats */
615607ca46eSDavid Howells #define V4L2_PIX_FMT_YUYV v4l2_fourcc('Y', 'U', 'Y', 'V') /* 16 YUV 4:2:2 */
616607ca46eSDavid Howells #define V4L2_PIX_FMT_YYUV v4l2_fourcc('Y', 'Y', 'U', 'V') /* 16 YUV 4:2:2 */
617607ca46eSDavid Howells #define V4L2_PIX_FMT_YVYU v4l2_fourcc('Y', 'V', 'Y', 'U') /* 16 YVU 4:2:2 */
618607ca46eSDavid Howells #define V4L2_PIX_FMT_UYVY v4l2_fourcc('U', 'Y', 'V', 'Y') /* 16 YUV 4:2:2 */
619607ca46eSDavid Howells #define V4L2_PIX_FMT_VYUY v4l2_fourcc('V', 'Y', 'U', 'Y') /* 16 YUV 4:2:2 */
620607ca46eSDavid Howells #define V4L2_PIX_FMT_Y41P v4l2_fourcc('Y', '4', '1', 'P') /* 12 YUV 4:1:1 */
621607ca46eSDavid Howells #define V4L2_PIX_FMT_YUV444 v4l2_fourcc('Y', '4', '4', '4') /* 16 xxxxyyyy uuuuvvvv */
622607ca46eSDavid Howells #define V4L2_PIX_FMT_YUV555 v4l2_fourcc('Y', 'U', 'V', 'O') /* 16 YUV-5-5-5 */
623607ca46eSDavid Howells #define V4L2_PIX_FMT_YUV565 v4l2_fourcc('Y', 'U', 'V', 'P') /* 16 YUV-5-6-5 */
6240376a51fSMirela Rabulea #define V4L2_PIX_FMT_YUV24 v4l2_fourcc('Y', 'U', 'V', '3') /* 24 YUV-8-8-8 */
625607ca46eSDavid Howells #define V4L2_PIX_FMT_YUV32 v4l2_fourcc('Y', 'U', 'V', '4') /* 32 YUV-8-8-8-8 */
626a7fe4ca7SVivek Kasireddy #define V4L2_PIX_FMT_AYUV32 v4l2_fourcc('A', 'Y', 'U', 'V') /* 32 AYUV-8-8-8-8 */
627a7fe4ca7SVivek Kasireddy #define V4L2_PIX_FMT_XYUV32 v4l2_fourcc('X', 'Y', 'U', 'V') /* 32 XYUV-8-8-8-8 */
628a7fe4ca7SVivek Kasireddy #define V4L2_PIX_FMT_VUYA32 v4l2_fourcc('V', 'U', 'Y', 'A') /* 32 VUYA-8-8-8-8 */
629a7fe4ca7SVivek Kasireddy #define V4L2_PIX_FMT_VUYX32 v4l2_fourcc('V', 'U', 'Y', 'X') /* 32 VUYX-8-8-8-8 */
63000f6842eSLaurent Pinchart #define V4L2_PIX_FMT_YUVA32 v4l2_fourcc('Y', 'U', 'V', 'A') /* 32 YUVA-8-8-8-8 */
63100f6842eSLaurent Pinchart #define V4L2_PIX_FMT_YUVX32 v4l2_fourcc('Y', 'U', 'V', 'X') /* 32 YUVX-8-8-8-8 */
632607ca46eSDavid Howells #define V4L2_PIX_FMT_M420 v4l2_fourcc('M', '4', '2', '0') /* 12 YUV 4:2:0 2 lines y, 1 line uv interleaved */
63399c95496SMing Qian #define V4L2_PIX_FMT_YUV48_12 v4l2_fourcc('Y', '3', '1', '2') /* 48 YUV 4:4:4 12-bit per component */
634607ca46eSDavid Howells
6350dc1d7a7STomi Valkeinen /*
6360dc1d7a7STomi Valkeinen * YCbCr packed format. For each Y2xx format, xx bits of valid data occupy the MSBs
6370dc1d7a7STomi Valkeinen * of the 16 bit components, and 16-xx bits of zero padding occupy the LSBs.
6380dc1d7a7STomi Valkeinen */
6390dc1d7a7STomi Valkeinen #define V4L2_PIX_FMT_Y210 v4l2_fourcc('Y', '2', '1', '0') /* 32 YUYV 4:2:2 */
6400dc1d7a7STomi Valkeinen #define V4L2_PIX_FMT_Y212 v4l2_fourcc('Y', '2', '1', '2') /* 32 YUYV 4:2:2 */
6410dc1d7a7STomi Valkeinen #define V4L2_PIX_FMT_Y216 v4l2_fourcc('Y', '2', '1', '6') /* 32 YUYV 4:2:2 */
6420dc1d7a7STomi Valkeinen
643607ca46eSDavid Howells /* two planes -- one Y, one Cr + Cb interleaved */
644607ca46eSDavid Howells #define V4L2_PIX_FMT_NV12 v4l2_fourcc('N', 'V', '1', '2') /* 12 Y/CbCr 4:2:0 */
645607ca46eSDavid Howells #define V4L2_PIX_FMT_NV21 v4l2_fourcc('N', 'V', '2', '1') /* 12 Y/CrCb 4:2:0 */
646607ca46eSDavid Howells #define V4L2_PIX_FMT_NV16 v4l2_fourcc('N', 'V', '1', '6') /* 16 Y/CbCr 4:2:2 */
647607ca46eSDavid Howells #define V4L2_PIX_FMT_NV61 v4l2_fourcc('N', 'V', '6', '1') /* 16 Y/CrCb 4:2:2 */
648607ca46eSDavid Howells #define V4L2_PIX_FMT_NV24 v4l2_fourcc('N', 'V', '2', '4') /* 24 Y/CbCr 4:4:4 */
649607ca46eSDavid Howells #define V4L2_PIX_FMT_NV42 v4l2_fourcc('N', 'V', '4', '2') /* 24 Y/CrCb 4:4:4 */
6505374d8fbSBenjamin Gaignard #define V4L2_PIX_FMT_P010 v4l2_fourcc('P', '0', '1', '0') /* 24 Y/CbCr 4:2:0 10-bit per component */
651aa108040SMing Qian #define V4L2_PIX_FMT_P012 v4l2_fourcc('P', '0', '1', '2') /* 24 Y/CbCr 4:2:0 12-bit per component */
652607ca46eSDavid Howells
653607ca46eSDavid Howells /* two non contiguous planes - one Y, one Cr + Cb interleaved */
654607ca46eSDavid Howells #define V4L2_PIX_FMT_NV12M v4l2_fourcc('N', 'M', '1', '2') /* 12 Y/CbCr 4:2:0 */
655607ca46eSDavid Howells #define V4L2_PIX_FMT_NV21M v4l2_fourcc('N', 'M', '2', '1') /* 21 Y/CrCb 4:2:0 */
65684930548SLaurent Pinchart #define V4L2_PIX_FMT_NV16M v4l2_fourcc('N', 'M', '1', '6') /* 16 Y/CbCr 4:2:2 */
65784930548SLaurent Pinchart #define V4L2_PIX_FMT_NV61M v4l2_fourcc('N', 'M', '6', '1') /* 16 Y/CrCb 4:2:2 */
658aa108040SMing Qian #define V4L2_PIX_FMT_P012M v4l2_fourcc('P', 'M', '1', '2') /* 24 Y/CbCr 4:2:0 12-bit per component */
659607ca46eSDavid Howells
66079c8d083SLaurent Pinchart /* three planes - Y Cb, Cr */
66179c8d083SLaurent Pinchart #define V4L2_PIX_FMT_YUV410 v4l2_fourcc('Y', 'U', 'V', '9') /* 9 YUV 4:1:0 */
66279c8d083SLaurent Pinchart #define V4L2_PIX_FMT_YVU410 v4l2_fourcc('Y', 'V', 'U', '9') /* 9 YVU 4:1:0 */
663ab46f6d2SLaurent Pinchart #define V4L2_PIX_FMT_YUV411P v4l2_fourcc('4', '1', '1', 'P') /* 12 YVU411 planar */
66479c8d083SLaurent Pinchart #define V4L2_PIX_FMT_YUV420 v4l2_fourcc('Y', 'U', '1', '2') /* 12 YUV 4:2:0 */
66579c8d083SLaurent Pinchart #define V4L2_PIX_FMT_YVU420 v4l2_fourcc('Y', 'V', '1', '2') /* 12 YVU 4:2:0 */
66679c8d083SLaurent Pinchart #define V4L2_PIX_FMT_YUV422P v4l2_fourcc('4', '2', '2', 'P') /* 16 YVU422 planar */
66779c8d083SLaurent Pinchart
668607ca46eSDavid Howells /* three non contiguous planes - Y, Cb, Cr */
669607ca46eSDavid Howells #define V4L2_PIX_FMT_YUV420M v4l2_fourcc('Y', 'M', '1', '2') /* 12 YUV420 planar */
670607ca46eSDavid Howells #define V4L2_PIX_FMT_YVU420M v4l2_fourcc('Y', 'M', '2', '1') /* 12 YVU420 planar */
671d65fae92SLaurent Pinchart #define V4L2_PIX_FMT_YUV422M v4l2_fourcc('Y', 'M', '1', '6') /* 16 YUV422 planar */
672d65fae92SLaurent Pinchart #define V4L2_PIX_FMT_YVU422M v4l2_fourcc('Y', 'M', '6', '1') /* 16 YVU422 planar */
673d65fae92SLaurent Pinchart #define V4L2_PIX_FMT_YUV444M v4l2_fourcc('Y', 'M', '2', '4') /* 24 YUV444 planar */
674d65fae92SLaurent Pinchart #define V4L2_PIX_FMT_YVU444M v4l2_fourcc('Y', 'M', '4', '2') /* 24 YVU444 planar */
675607ca46eSDavid Howells
676b84f60a3SEzequiel Garcia /* Tiled YUV formats */
677683f71ebSEzequiel Garcia #define V4L2_PIX_FMT_NV12_4L4 v4l2_fourcc('V', 'T', '1', '2') /* 12 Y/CbCr 4:2:0 4x4 tiles */
67878eee7b5SEzequiel Garcia #define V4L2_PIX_FMT_NV12_16L16 v4l2_fourcc('H', 'M', '1', '2') /* 12 Y/CbCr 4:2:0 16x16 tiles */
679b84f60a3SEzequiel Garcia #define V4L2_PIX_FMT_NV12_32L32 v4l2_fourcc('S', 'T', '1', '2') /* 12 Y/CbCr 4:2:0 32x32 tiles */
680fc91af07SBenjamin Gaignard #define V4L2_PIX_FMT_NV15_4L4 v4l2_fourcc('V', 'T', '1', '5') /* 15 Y/CbCr 4:2:0 10-bit 4x4 tiles */
6813c8e19d3SEzequiel Garcia #define V4L2_PIX_FMT_P010_4L4 v4l2_fourcc('T', '0', '1', '0') /* 12 Y/CbCr 4:2:0 10-bit 4x4 macroblocks */
6825b8bb216SMing Qian #define V4L2_PIX_FMT_NV12_8L128 v4l2_fourcc('A', 'T', '1', '2') /* Y/CbCr 4:2:0 8x128 tiles */
6835b8bb216SMing Qian #define V4L2_PIX_FMT_NV12_10BE_8L128 v4l2_fourcc_be('A', 'X', '1', '2') /* Y/CbCr 4:2:0 10-bit 8x128 tiles */
684b84f60a3SEzequiel Garcia
68575b8f8f2SEzequiel Garcia /* Tiled YUV formats, non contiguous planes */
68675b8f8f2SEzequiel Garcia #define V4L2_PIX_FMT_NV12MT v4l2_fourcc('T', 'M', '1', '2') /* 12 Y/CbCr 4:2:0 64x32 tiles */
68775b8f8f2SEzequiel Garcia #define V4L2_PIX_FMT_NV12MT_16X16 v4l2_fourcc('V', 'M', '1', '2') /* 12 Y/CbCr 4:2:0 16x16 tiles */
68872a74c8fSMing Qian #define V4L2_PIX_FMT_NV12M_8L128 v4l2_fourcc('N', 'A', '1', '2') /* Y/CbCr 4:2:0 8x128 tiles */
68972a74c8fSMing Qian #define V4L2_PIX_FMT_NV12M_10BE_8L128 v4l2_fourcc_be('N', 'T', '1', '2') /* Y/CbCr 4:2:0 10-bit 8x128 tiles */
69075b8f8f2SEzequiel Garcia
691607ca46eSDavid Howells /* Bayer formats - see http://www.siliconimaging.com/RGB%20Bayer.htm */
692607ca46eSDavid Howells #define V4L2_PIX_FMT_SBGGR8 v4l2_fourcc('B', 'A', '8', '1') /* 8 BGBG.. GRGR.. */
693607ca46eSDavid Howells #define V4L2_PIX_FMT_SGBRG8 v4l2_fourcc('G', 'B', 'R', 'G') /* 8 GBGB.. RGRG.. */
694607ca46eSDavid Howells #define V4L2_PIX_FMT_SGRBG8 v4l2_fourcc('G', 'R', 'B', 'G') /* 8 GRGR.. BGBG.. */
695607ca46eSDavid Howells #define V4L2_PIX_FMT_SRGGB8 v4l2_fourcc('R', 'G', 'G', 'B') /* 8 RGRG.. GBGB.. */
696607ca46eSDavid Howells #define V4L2_PIX_FMT_SBGGR10 v4l2_fourcc('B', 'G', '1', '0') /* 10 BGBG.. GRGR.. */
697607ca46eSDavid Howells #define V4L2_PIX_FMT_SGBRG10 v4l2_fourcc('G', 'B', '1', '0') /* 10 GBGB.. RGRG.. */
698607ca46eSDavid Howells #define V4L2_PIX_FMT_SGRBG10 v4l2_fourcc('B', 'A', '1', '0') /* 10 GRGR.. BGBG.. */
699607ca46eSDavid Howells #define V4L2_PIX_FMT_SRGGB10 v4l2_fourcc('R', 'G', '1', '0') /* 10 RGRG.. GBGB.. */
7004353e36eSAviv Greenberg /* 10bit raw bayer packed, 5 bytes for every 4 pixels */
7014353e36eSAviv Greenberg #define V4L2_PIX_FMT_SBGGR10P v4l2_fourcc('p', 'B', 'A', 'A')
7024353e36eSAviv Greenberg #define V4L2_PIX_FMT_SGBRG10P v4l2_fourcc('p', 'G', 'A', 'A')
7034353e36eSAviv Greenberg #define V4L2_PIX_FMT_SGRBG10P v4l2_fourcc('p', 'g', 'A', 'A')
7044353e36eSAviv Greenberg #define V4L2_PIX_FMT_SRGGB10P v4l2_fourcc('p', 'R', 'A', 'A')
70505ad6fc1SManjunath Hadli /* 10bit raw bayer a-law compressed to 8 bits */
70605ad6fc1SManjunath Hadli #define V4L2_PIX_FMT_SBGGR10ALAW8 v4l2_fourcc('a', 'B', 'A', '8')
70705ad6fc1SManjunath Hadli #define V4L2_PIX_FMT_SGBRG10ALAW8 v4l2_fourcc('a', 'G', 'A', '8')
70805ad6fc1SManjunath Hadli #define V4L2_PIX_FMT_SGRBG10ALAW8 v4l2_fourcc('a', 'g', 'A', '8')
70905ad6fc1SManjunath Hadli #define V4L2_PIX_FMT_SRGGB10ALAW8 v4l2_fourcc('a', 'R', 'A', '8')
710607ca46eSDavid Howells /* 10bit raw bayer DPCM compressed to 8 bits */
711607ca46eSDavid Howells #define V4L2_PIX_FMT_SBGGR10DPCM8 v4l2_fourcc('b', 'B', 'A', '8')
712607ca46eSDavid Howells #define V4L2_PIX_FMT_SGBRG10DPCM8 v4l2_fourcc('b', 'G', 'A', '8')
713607ca46eSDavid Howells #define V4L2_PIX_FMT_SGRBG10DPCM8 v4l2_fourcc('B', 'D', '1', '0')
714607ca46eSDavid Howells #define V4L2_PIX_FMT_SRGGB10DPCM8 v4l2_fourcc('b', 'R', 'A', '8')
715cbb77bc2SSakari Ailus #define V4L2_PIX_FMT_SBGGR12 v4l2_fourcc('B', 'G', '1', '2') /* 12 BGBG.. GRGR.. */
716cbb77bc2SSakari Ailus #define V4L2_PIX_FMT_SGBRG12 v4l2_fourcc('G', 'B', '1', '2') /* 12 GBGB.. RGRG.. */
717cbb77bc2SSakari Ailus #define V4L2_PIX_FMT_SGRBG12 v4l2_fourcc('B', 'A', '1', '2') /* 12 GRGR.. BGBG.. */
718cbb77bc2SSakari Ailus #define V4L2_PIX_FMT_SRGGB12 v4l2_fourcc('R', 'G', '1', '2') /* 12 RGRG.. GBGB.. */
719d1b3437eSSakari Ailus /* 12bit raw bayer packed, 6 bytes for every 4 pixels */
720d1b3437eSSakari Ailus #define V4L2_PIX_FMT_SBGGR12P v4l2_fourcc('p', 'B', 'C', 'C')
721d1b3437eSSakari Ailus #define V4L2_PIX_FMT_SGBRG12P v4l2_fourcc('p', 'G', 'C', 'C')
722d1b3437eSSakari Ailus #define V4L2_PIX_FMT_SGRBG12P v4l2_fourcc('p', 'g', 'C', 'C')
723d1b3437eSSakari Ailus #define V4L2_PIX_FMT_SRGGB12P v4l2_fourcc('p', 'R', 'C', 'C')
724d12127edSSakari Ailus #define V4L2_PIX_FMT_SBGGR14 v4l2_fourcc('B', 'G', '1', '4') /* 14 BGBG.. GRGR.. */
725d12127edSSakari Ailus #define V4L2_PIX_FMT_SGBRG14 v4l2_fourcc('G', 'B', '1', '4') /* 14 GBGB.. RGRG.. */
726d12127edSSakari Ailus #define V4L2_PIX_FMT_SGRBG14 v4l2_fourcc('G', 'R', '1', '4') /* 14 GRGR.. BGBG.. */
727d12127edSSakari Ailus #define V4L2_PIX_FMT_SRGGB14 v4l2_fourcc('R', 'G', '1', '4') /* 14 RGRG.. GBGB.. */
72883b15832SSakari Ailus /* 14bit raw bayer packed, 7 bytes for every 4 pixels */
72983b15832SSakari Ailus #define V4L2_PIX_FMT_SBGGR14P v4l2_fourcc('p', 'B', 'E', 'E')
73083b15832SSakari Ailus #define V4L2_PIX_FMT_SGBRG14P v4l2_fourcc('p', 'G', 'E', 'E')
73183b15832SSakari Ailus #define V4L2_PIX_FMT_SGRBG14P v4l2_fourcc('p', 'g', 'E', 'E')
73283b15832SSakari Ailus #define V4L2_PIX_FMT_SRGGB14P v4l2_fourcc('p', 'R', 'E', 'E')
733607ca46eSDavid Howells #define V4L2_PIX_FMT_SBGGR16 v4l2_fourcc('B', 'Y', 'R', '2') /* 16 BGBG.. GRGR.. */
734b9a4b13cSSakari Ailus #define V4L2_PIX_FMT_SGBRG16 v4l2_fourcc('G', 'B', '1', '6') /* 16 GBGB.. RGRG.. */
735b9a4b13cSSakari Ailus #define V4L2_PIX_FMT_SGRBG16 v4l2_fourcc('G', 'R', '1', '6') /* 16 GRGR.. BGBG.. */
736b9a4b13cSSakari Ailus #define V4L2_PIX_FMT_SRGGB16 v4l2_fourcc('R', 'G', '1', '6') /* 16 RGRG.. GBGB.. */
737607ca46eSDavid Howells
73866b2ab27SRicardo Ribalda Delgado /* HSV formats */
73966b2ab27SRicardo Ribalda Delgado #define V4L2_PIX_FMT_HSV24 v4l2_fourcc('H', 'S', 'V', '3')
74066b2ab27SRicardo Ribalda Delgado #define V4L2_PIX_FMT_HSV32 v4l2_fourcc('H', 'S', 'V', '4')
74166b2ab27SRicardo Ribalda Delgado
742607ca46eSDavid Howells /* compressed formats */
743607ca46eSDavid Howells #define V4L2_PIX_FMT_MJPEG v4l2_fourcc('M', 'J', 'P', 'G') /* Motion-JPEG */
744607ca46eSDavid Howells #define V4L2_PIX_FMT_JPEG v4l2_fourcc('J', 'P', 'E', 'G') /* JFIF JPEG */
745607ca46eSDavid Howells #define V4L2_PIX_FMT_DV v4l2_fourcc('d', 'v', 's', 'd') /* 1394 */
746607ca46eSDavid Howells #define V4L2_PIX_FMT_MPEG v4l2_fourcc('M', 'P', 'E', 'G') /* MPEG-1/2/4 Multiplexed */
747607ca46eSDavid Howells #define V4L2_PIX_FMT_H264 v4l2_fourcc('H', '2', '6', '4') /* H264 with start codes */
748607ca46eSDavid Howells #define V4L2_PIX_FMT_H264_NO_SC v4l2_fourcc('A', 'V', 'C', '1') /* H264 without start codes */
749607ca46eSDavid Howells #define V4L2_PIX_FMT_H264_MVC v4l2_fourcc('M', '2', '6', '4') /* H264 MVC */
750607ca46eSDavid Howells #define V4L2_PIX_FMT_H263 v4l2_fourcc('H', '2', '6', '3') /* H263 */
751607ca46eSDavid Howells #define V4L2_PIX_FMT_MPEG1 v4l2_fourcc('M', 'P', 'G', '1') /* MPEG-1 ES */
752607ca46eSDavid Howells #define V4L2_PIX_FMT_MPEG2 v4l2_fourcc('M', 'P', 'G', '2') /* MPEG-2 ES */
753c27bb30eSPaul Kocialkowski #define V4L2_PIX_FMT_MPEG2_SLICE v4l2_fourcc('M', 'G', '2', 'S') /* MPEG-2 parsed slice data */
754adf62712SIsmael Luceno #define V4L2_PIX_FMT_MPEG4 v4l2_fourcc('M', 'P', 'G', '4') /* MPEG-4 part 2 ES */
755607ca46eSDavid Howells #define V4L2_PIX_FMT_XVID v4l2_fourcc('X', 'V', 'I', 'D') /* Xvid */
756607ca46eSDavid Howells #define V4L2_PIX_FMT_VC1_ANNEX_G v4l2_fourcc('V', 'C', '1', 'G') /* SMPTE 421M Annex G compliant stream */
757607ca46eSDavid Howells #define V4L2_PIX_FMT_VC1_ANNEX_L v4l2_fourcc('V', 'C', '1', 'L') /* SMPTE 421M Annex L compliant stream */
758607ca46eSDavid Howells #define V4L2_PIX_FMT_VP8 v4l2_fourcc('V', 'P', '8', '0') /* VP8 */
7591fb03333SEzequiel Garcia #define V4L2_PIX_FMT_VP8_FRAME v4l2_fourcc('V', 'P', '8', 'F') /* VP8 parsed frame */
760a8b4a1eaSWu-Cheng Li #define V4L2_PIX_FMT_VP9 v4l2_fourcc('V', 'P', '9', '0') /* VP9 */
761b88dbe38SAndrzej Pietrasiewicz #define V4L2_PIX_FMT_VP9_FRAME v4l2_fourcc('V', 'P', '9', 'F') /* VP9 parsed frame */
76253b25345SSmitha T Murthy #define V4L2_PIX_FMT_HEVC v4l2_fourcc('H', 'E', 'V', 'C') /* HEVC aka H.265 */
76362c3fce0SHans Verkuil #define V4L2_PIX_FMT_FWHT v4l2_fourcc('F', 'W', 'H', 'T') /* Fast Walsh Hadamard Transform (vicodec) */
7642495f39cSDafna Hirschfeld #define V4L2_PIX_FMT_FWHT_STATELESS v4l2_fourcc('S', 'F', 'W', 'H') /* Stateless FWHT (vicodec) */
76595e95ebeSEzequiel Garcia #define V4L2_PIX_FMT_H264_SLICE v4l2_fourcc('S', '2', '6', '4') /* H264 parsed slices */
76601dcfd53SBenjamin Gaignard #define V4L2_PIX_FMT_HEVC_SLICE v4l2_fourcc('S', '2', '6', '5') /* HEVC parsed slices */
7679de30f57SDaniel Almeida #define V4L2_PIX_FMT_AV1_FRAME v4l2_fourcc('A', 'V', '1', 'F') /* AV1 parsed frame */
768ae77d139SMing Qian #define V4L2_PIX_FMT_SPK v4l2_fourcc('S', 'P', 'K', '0') /* Sorenson Spark */
769ec9aa62aSMing Qian #define V4L2_PIX_FMT_RV30 v4l2_fourcc('R', 'V', '3', '0') /* RealVideo 8 */
770ec9aa62aSMing Qian #define V4L2_PIX_FMT_RV40 v4l2_fourcc('R', 'V', '4', '0') /* RealVideo 9 & 10 */
771607ca46eSDavid Howells
772607ca46eSDavid Howells /* Vendor-specific formats */
773607ca46eSDavid Howells #define V4L2_PIX_FMT_CPIA1 v4l2_fourcc('C', 'P', 'I', 'A') /* cpia1 YUV */
774607ca46eSDavid Howells #define V4L2_PIX_FMT_WNVA v4l2_fourcc('W', 'N', 'V', 'A') /* Winnov hw compress */
775607ca46eSDavid Howells #define V4L2_PIX_FMT_SN9C10X v4l2_fourcc('S', '9', '1', '0') /* SN9C10x compression */
776607ca46eSDavid Howells #define V4L2_PIX_FMT_SN9C20X_I420 v4l2_fourcc('S', '9', '2', '0') /* SN9C20x YUV 4:2:0 */
777607ca46eSDavid Howells #define V4L2_PIX_FMT_PWC1 v4l2_fourcc('P', 'W', 'C', '1') /* pwc older webcam */
778607ca46eSDavid Howells #define V4L2_PIX_FMT_PWC2 v4l2_fourcc('P', 'W', 'C', '2') /* pwc newer webcam */
779607ca46eSDavid Howells #define V4L2_PIX_FMT_ET61X251 v4l2_fourcc('E', '6', '2', '5') /* ET61X251 compression */
780607ca46eSDavid Howells #define V4L2_PIX_FMT_SPCA501 v4l2_fourcc('S', '5', '0', '1') /* YUYV per line */
781607ca46eSDavid Howells #define V4L2_PIX_FMT_SPCA505 v4l2_fourcc('S', '5', '0', '5') /* YYUV per line */
782607ca46eSDavid Howells #define V4L2_PIX_FMT_SPCA508 v4l2_fourcc('S', '5', '0', '8') /* YUVY per line */
783607ca46eSDavid Howells #define V4L2_PIX_FMT_SPCA561 v4l2_fourcc('S', '5', '6', '1') /* compressed GBRG bayer */
784607ca46eSDavid Howells #define V4L2_PIX_FMT_PAC207 v4l2_fourcc('P', '2', '0', '7') /* compressed BGGR bayer */
785607ca46eSDavid Howells #define V4L2_PIX_FMT_MR97310A v4l2_fourcc('M', '3', '1', '0') /* compressed BGGR bayer */
786607ca46eSDavid Howells #define V4L2_PIX_FMT_JL2005BCD v4l2_fourcc('J', 'L', '2', '0') /* compressed RGGB bayer */
787607ca46eSDavid Howells #define V4L2_PIX_FMT_SN9C2028 v4l2_fourcc('S', 'O', 'N', 'X') /* compressed GBRG bayer */
788607ca46eSDavid Howells #define V4L2_PIX_FMT_SQ905C v4l2_fourcc('9', '0', '5', 'C') /* compressed RGGB bayer */
789607ca46eSDavid Howells #define V4L2_PIX_FMT_PJPG v4l2_fourcc('P', 'J', 'P', 'G') /* Pixart 73xx JPEG */
790607ca46eSDavid Howells #define V4L2_PIX_FMT_OV511 v4l2_fourcc('O', '5', '1', '1') /* ov511 JPEG */
791607ca46eSDavid Howells #define V4L2_PIX_FMT_OV518 v4l2_fourcc('O', '5', '1', '8') /* ov518 JPEG */
792607ca46eSDavid Howells #define V4L2_PIX_FMT_STV0680 v4l2_fourcc('S', '6', '8', '0') /* stv0680 bayer */
793607ca46eSDavid Howells #define V4L2_PIX_FMT_TM6000 v4l2_fourcc('T', 'M', '6', '0') /* tm5600/tm60x0 */
794607ca46eSDavid Howells #define V4L2_PIX_FMT_CIT_YYVYUY v4l2_fourcc('C', 'I', 'T', 'V') /* one line of Y then 1 line of VYUY */
795607ca46eSDavid Howells #define V4L2_PIX_FMT_KONICA420 v4l2_fourcc('K', 'O', 'N', 'I') /* YUV420 planar in blocks of 256 pixels */
796607ca46eSDavid Howells #define V4L2_PIX_FMT_JPGL v4l2_fourcc('J', 'P', 'G', 'L') /* JPEG-Lite */
797607ca46eSDavid Howells #define V4L2_PIX_FMT_SE401 v4l2_fourcc('S', '4', '0', '1') /* se401 janggu compressed rgb */
798607ca46eSDavid Howells #define V4L2_PIX_FMT_S5C_UYVY_JPG v4l2_fourcc('S', '5', 'C', 'I') /* S5C73M3 interleaved UYVY/JPEG */
7995d8d8db8SAviv Greenberg #define V4L2_PIX_FMT_Y8I v4l2_fourcc('Y', '8', 'I', ' ') /* Greyscale 8-bit L/R interleaved */
8005d8d8db8SAviv Greenberg #define V4L2_PIX_FMT_Y12I v4l2_fourcc('Y', '1', '2', 'I') /* Greyscale 12-bit L/R interleaved */
801a8f2cdd2SDmitry Perchanov #define V4L2_PIX_FMT_Y16I v4l2_fourcc('Y', '1', '6', 'I') /* Greyscale 16-bit L/R interleaved */
8025d8d8db8SAviv Greenberg #define V4L2_PIX_FMT_Z16 v4l2_fourcc('Z', '1', '6', ' ') /* Depth data 16-bit */
803d4de6634STiffany Lin #define V4L2_PIX_FMT_MT21C v4l2_fourcc('M', 'T', '2', '1') /* Mediatek compressed block mode */
804ffe5350cSAlexandre Courbot #define V4L2_PIX_FMT_MM21 v4l2_fourcc('M', 'M', '2', '1') /* Mediatek 8-bit block mode, two non-contiguous planes */
8056afcc2b0SMingjia Zhang #define V4L2_PIX_FMT_MT2110T v4l2_fourcc('M', 'T', '2', 'T') /* Mediatek 10-bit block tile mode */
8061dff2bebSMingjia Zhang #define V4L2_PIX_FMT_MT2110R v4l2_fourcc('M', 'T', '2', 'R') /* Mediatek 10-bit block raster mode */
8075df082e2SEvgeni Raikhel #define V4L2_PIX_FMT_INZI v4l2_fourcc('I', 'N', 'Z', 'I') /* Intel Planar Greyscale 10-bit and Depth 16-bit */
80892799ef7SSergey Dorodnicov #define V4L2_PIX_FMT_CNF4 v4l2_fourcc('C', 'N', 'F', '4') /* Intel 4-bit packed depth confidence information */
8090a078e0dSLaurent Pinchart #define V4L2_PIX_FMT_HI240 v4l2_fourcc('H', 'I', '2', '4') /* BTTV 8-bit dithered RGB */
8102308d5afSStanimir Varbanov #define V4L2_PIX_FMT_QC08C v4l2_fourcc('Q', '0', '8', 'C') /* Qualcomm 8-bit compressed */
8112308d5afSStanimir Varbanov #define V4L2_PIX_FMT_QC10C v4l2_fourcc('Q', '1', '0', 'C') /* Qualcomm 10-bit compressed */
8127a4b3770SJammy Huang #define V4L2_PIX_FMT_AJPG v4l2_fourcc('A', 'J', 'P', 'G') /* Aspeed JPEG */
813d62d8e7bSMarvin Lin #define V4L2_PIX_FMT_HEXTILE v4l2_fourcc('H', 'X', 'T', 'L') /* Hextile compressed */
814607ca46eSDavid Howells
815b87f5e25SDaniel Scally /* 10bit raw packed, 32 bytes for every 25 pixels, last LSB 6 bits unused */
816e8391b76SYong Zhi #define V4L2_PIX_FMT_IPU3_SBGGR10 v4l2_fourcc('i', 'p', '3', 'b') /* IPU3 packed 10-bit BGGR bayer */
817e8391b76SYong Zhi #define V4L2_PIX_FMT_IPU3_SGBRG10 v4l2_fourcc('i', 'p', '3', 'g') /* IPU3 packed 10-bit GBRG bayer */
818e8391b76SYong Zhi #define V4L2_PIX_FMT_IPU3_SGRBG10 v4l2_fourcc('i', 'p', '3', 'G') /* IPU3 packed 10-bit GRBG bayer */
819e8391b76SYong Zhi #define V4L2_PIX_FMT_IPU3_SRGGB10 v4l2_fourcc('i', 'p', '3', 'r') /* IPU3 packed 10-bit RGGB bayer */
820e8391b76SYong Zhi
821d260c122SJacopo Mondi /* Raspberry Pi PiSP compressed formats. */
822d260c122SJacopo Mondi #define V4L2_PIX_FMT_PISP_COMP1_RGGB v4l2_fourcc('P', 'C', '1', 'R') /* PiSP 8-bit mode 1 compressed RGGB bayer */
823d260c122SJacopo Mondi #define V4L2_PIX_FMT_PISP_COMP1_GRBG v4l2_fourcc('P', 'C', '1', 'G') /* PiSP 8-bit mode 1 compressed GRBG bayer */
824d260c122SJacopo Mondi #define V4L2_PIX_FMT_PISP_COMP1_GBRG v4l2_fourcc('P', 'C', '1', 'g') /* PiSP 8-bit mode 1 compressed GBRG bayer */
825d260c122SJacopo Mondi #define V4L2_PIX_FMT_PISP_COMP1_BGGR v4l2_fourcc('P', 'C', '1', 'B') /* PiSP 8-bit mode 1 compressed BGGR bayer */
826d260c122SJacopo Mondi #define V4L2_PIX_FMT_PISP_COMP1_MONO v4l2_fourcc('P', 'C', '1', 'M') /* PiSP 8-bit mode 1 compressed monochrome */
827d260c122SJacopo Mondi #define V4L2_PIX_FMT_PISP_COMP2_RGGB v4l2_fourcc('P', 'C', '2', 'R') /* PiSP 8-bit mode 2 compressed RGGB bayer */
828d260c122SJacopo Mondi #define V4L2_PIX_FMT_PISP_COMP2_GRBG v4l2_fourcc('P', 'C', '2', 'G') /* PiSP 8-bit mode 2 compressed GRBG bayer */
829d260c122SJacopo Mondi #define V4L2_PIX_FMT_PISP_COMP2_GBRG v4l2_fourcc('P', 'C', '2', 'g') /* PiSP 8-bit mode 2 compressed GBRG bayer */
830d260c122SJacopo Mondi #define V4L2_PIX_FMT_PISP_COMP2_BGGR v4l2_fourcc('P', 'C', '2', 'B') /* PiSP 8-bit mode 2 compressed BGGR bayer */
831d260c122SJacopo Mondi #define V4L2_PIX_FMT_PISP_COMP2_MONO v4l2_fourcc('P', 'C', '2', 'M') /* PiSP 8-bit mode 2 compressed monochrome */
832d260c122SJacopo Mondi
83300419a6aSAntti Palosaari /* SDR formats - used only for Software Defined Radio devices */
83400419a6aSAntti Palosaari #define V4L2_SDR_FMT_CU8 v4l2_fourcc('C', 'U', '0', '8') /* IQ u8 */
83500419a6aSAntti Palosaari #define V4L2_SDR_FMT_CU16LE v4l2_fourcc('C', 'U', '1', '6') /* IQ u16le */
836c0c03886SAntti Palosaari #define V4L2_SDR_FMT_CS8 v4l2_fourcc('C', 'S', '0', '8') /* complex s8 */
8375c5be570SAntti Palosaari #define V4L2_SDR_FMT_CS14LE v4l2_fourcc('C', 'S', '1', '4') /* complex s14le */
8389e9e3927SAntti Palosaari #define V4L2_SDR_FMT_RU12LE v4l2_fourcc('R', 'U', '1', '2') /* real u12le */
839c28f2118SRamesh Shanmugasundaram #define V4L2_SDR_FMT_PCU16BE v4l2_fourcc('P', 'C', '1', '6') /* planar complex u16be */
840c28f2118SRamesh Shanmugasundaram #define V4L2_SDR_FMT_PCU18BE v4l2_fourcc('P', 'C', '1', '8') /* planar complex u18be */
841c28f2118SRamesh Shanmugasundaram #define V4L2_SDR_FMT_PCU20BE v4l2_fourcc('P', 'C', '2', '0') /* planar complex u20be */
84200419a6aSAntti Palosaari
843b2fe22d0SNick Dyer /* Touch formats - used for Touch devices */
844b2fe22d0SNick Dyer #define V4L2_TCH_FMT_DELTA_TD16 v4l2_fourcc('T', 'D', '1', '6') /* 16-bit signed deltas */
845b2fe22d0SNick Dyer #define V4L2_TCH_FMT_DELTA_TD08 v4l2_fourcc('T', 'D', '0', '8') /* 8-bit signed deltas */
846b2fe22d0SNick Dyer #define V4L2_TCH_FMT_TU16 v4l2_fourcc('T', 'U', '1', '6') /* 16-bit unsigned touch data */
847b2fe22d0SNick Dyer #define V4L2_TCH_FMT_TU08 v4l2_fourcc('T', 'U', '0', '8') /* 8-bit unsigned touch data */
848b2fe22d0SNick Dyer
84914d66538SLaurent Pinchart /* Meta-data formats */
8505deb1c04SNiklas Söderlund #define V4L2_META_FMT_VSP1_HGO v4l2_fourcc('V', 'S', 'P', 'H') /* R-Car VSP1 1-D Histogram */
8515deb1c04SNiklas Söderlund #define V4L2_META_FMT_VSP1_HGT v4l2_fourcc('V', 'S', 'P', 'T') /* R-Car VSP1 2-D Histogram */
852563a01e1SGuennadi Liakhovetski #define V4L2_META_FMT_UVC v4l2_fourcc('U', 'V', 'C', 'H') /* UVC Payload Header metadata */
8536ea0d588SGuennadi Liakhovetski #define V4L2_META_FMT_D4XX v4l2_fourcc('D', '4', 'X', 'X') /* D4XX Payload Header metadata */
85478892b6bSVandana BN #define V4L2_META_FMT_VIVID v4l2_fourcc('V', 'I', 'V', 'D') /* Vivid Metadata */
85514d66538SLaurent Pinchart
856df22026aSShunqian Zheng /* Vendor specific - used for RK_ISP1 camera sub-system */
857df22026aSShunqian Zheng #define V4L2_META_FMT_RK_ISP1_PARAMS v4l2_fourcc('R', 'K', '1', 'P') /* Rockchip ISP1 3A Parameters */
858df22026aSShunqian Zheng #define V4L2_META_FMT_RK_ISP1_STAT_3A v4l2_fourcc('R', 'K', '1', 'S') /* Rockchip ISP1 3A Statistics */
8591fc379f6SJacopo Mondi #define V4L2_META_FMT_RK_ISP1_EXT_PARAMS v4l2_fourcc('R', 'K', '1', 'E') /* Rockchip ISP1 3a Extensible Parameters */
860df22026aSShunqian Zheng
8618f6c2202SJacopo Mondi /* Vendor specific - used for RaspberryPi PiSP */
8628f6c2202SJacopo Mondi #define V4L2_META_FMT_RPI_BE_CFG v4l2_fourcc('R', 'P', 'B', 'C') /* PiSP BE configuration */
8636390834cSTomi Valkeinen #define V4L2_META_FMT_RPI_FE_CFG v4l2_fourcc('R', 'P', 'F', 'C') /* PiSP FE configuration */
8646390834cSTomi Valkeinen #define V4L2_META_FMT_RPI_FE_STATS v4l2_fourcc('R', 'P', 'F', 'S') /* PiSP FE stats */
8658f6c2202SJacopo Mondi
866d69c8429SLaurent Pinchart #ifdef __KERNEL__
86721828609SSakari Ailus /*
86821828609SSakari Ailus * Line-based metadata formats. Remember to update v4l_fill_fmtdesc() when
86921828609SSakari Ailus * adding new ones!
87021828609SSakari Ailus */
8711d921523SSakari Ailus #define V4L2_META_FMT_GENERIC_8 v4l2_fourcc('M', 'E', 'T', '8') /* Generic 8-bit metadata */
8721d921523SSakari Ailus #define V4L2_META_FMT_GENERIC_CSI2_10 v4l2_fourcc('M', 'C', '1', 'A') /* 10-bit CSI-2 packed 8-bit metadata */
8731d921523SSakari Ailus #define V4L2_META_FMT_GENERIC_CSI2_12 v4l2_fourcc('M', 'C', '1', 'C') /* 12-bit CSI-2 packed 8-bit metadata */
8741d921523SSakari Ailus #define V4L2_META_FMT_GENERIC_CSI2_14 v4l2_fourcc('M', 'C', '1', 'E') /* 14-bit CSI-2 packed 8-bit metadata */
8751d921523SSakari Ailus #define V4L2_META_FMT_GENERIC_CSI2_16 v4l2_fourcc('M', 'C', '1', 'G') /* 16-bit CSI-2 packed 8-bit metadata */
8761d921523SSakari Ailus #define V4L2_META_FMT_GENERIC_CSI2_20 v4l2_fourcc('M', 'C', '1', 'K') /* 20-bit CSI-2 packed 8-bit metadata */
8771d921523SSakari Ailus #define V4L2_META_FMT_GENERIC_CSI2_24 v4l2_fourcc('M', 'C', '1', 'O') /* 24-bit CSI-2 packed 8-bit metadata */
878d69c8429SLaurent Pinchart #endif
8791d921523SSakari Ailus
880d52e2381SLaurent Pinchart /* priv field value to indicates that subsequent fields are valid. */
881d52e2381SLaurent Pinchart #define V4L2_PIX_FMT_PRIV_MAGIC 0xfeedcafe
882d52e2381SLaurent Pinchart
883c96fd46aSLaurent Pinchart /* Flags */
884c96fd46aSLaurent Pinchart #define V4L2_PIX_FMT_FLAG_PREMUL_ALPHA 0x00000001
885b38c73caSDafna Hirschfeld #define V4L2_PIX_FMT_FLAG_SET_CSC 0x00000002
886c96fd46aSLaurent Pinchart
887607ca46eSDavid Howells /*
888607ca46eSDavid Howells * F O R M A T E N U M E R A T I O N
889607ca46eSDavid Howells */
890607ca46eSDavid Howells struct v4l2_fmtdesc {
891607ca46eSDavid Howells __u32 index; /* Format number */
892607ca46eSDavid Howells __u32 type; /* enum v4l2_buf_type */
893607ca46eSDavid Howells __u32 flags;
894607ca46eSDavid Howells __u8 description[32]; /* Description string */
895607ca46eSDavid Howells __u32 pixelformat; /* Format fourcc */
896e5b6b07aSLaurent Pinchart __u32 mbus_code; /* Media bus code */
897e5b6b07aSLaurent Pinchart __u32 reserved[3];
898607ca46eSDavid Howells };
899607ca46eSDavid Howells
900607ca46eSDavid Howells #define V4L2_FMT_FLAG_COMPRESSED 0x0001
901607ca46eSDavid Howells #define V4L2_FMT_FLAG_EMULATED 0x0002
9022b770beeSHans Verkuil #define V4L2_FMT_FLAG_CONTINUOUS_BYTESTREAM 0x0004
90360a039ebSMaxime Jourdan #define V4L2_FMT_FLAG_DYN_RESOLUTION 0x0008
904286cf7d3SHans Verkuil #define V4L2_FMT_FLAG_ENC_CAP_FRAME_INTERVAL 0x0010
905b38c73caSDafna Hirschfeld #define V4L2_FMT_FLAG_CSC_COLORSPACE 0x0020
906b38c73caSDafna Hirschfeld #define V4L2_FMT_FLAG_CSC_XFER_FUNC 0x0040
907b38c73caSDafna Hirschfeld #define V4L2_FMT_FLAG_CSC_YCBCR_ENC 0x0080
908b38c73caSDafna Hirschfeld #define V4L2_FMT_FLAG_CSC_HSV_ENC V4L2_FMT_FLAG_CSC_YCBCR_ENC
909b38c73caSDafna Hirschfeld #define V4L2_FMT_FLAG_CSC_QUANTIZATION 0x0100
91089345c2aSSakari Ailus #define V4L2_FMT_FLAG_META_LINE_BASED 0x0200
911607ca46eSDavid Howells
91206f55319SBenjamin Gaignard /* Format description flag, to be ORed with the index */
91306f55319SBenjamin Gaignard #define V4L2_FMTDESC_FLAG_ENUM_ALL 0x80000000
91406f55319SBenjamin Gaignard
91557c75987SHans Verkuil /* Frame Size and frame rate enumeration */
916607ca46eSDavid Howells /*
917607ca46eSDavid Howells * F R A M E S I Z E E N U M E R A T I O N
918607ca46eSDavid Howells */
919607ca46eSDavid Howells enum v4l2_frmsizetypes {
920607ca46eSDavid Howells V4L2_FRMSIZE_TYPE_DISCRETE = 1,
921607ca46eSDavid Howells V4L2_FRMSIZE_TYPE_CONTINUOUS = 2,
922607ca46eSDavid Howells V4L2_FRMSIZE_TYPE_STEPWISE = 3,
923607ca46eSDavid Howells };
924607ca46eSDavid Howells
925607ca46eSDavid Howells struct v4l2_frmsize_discrete {
926607ca46eSDavid Howells __u32 width; /* Frame width [pixel] */
927607ca46eSDavid Howells __u32 height; /* Frame height [pixel] */
928607ca46eSDavid Howells };
929607ca46eSDavid Howells
930607ca46eSDavid Howells struct v4l2_frmsize_stepwise {
931607ca46eSDavid Howells __u32 min_width; /* Minimum frame width [pixel] */
932607ca46eSDavid Howells __u32 max_width; /* Maximum frame width [pixel] */
933607ca46eSDavid Howells __u32 step_width; /* Frame width step size [pixel] */
934607ca46eSDavid Howells __u32 min_height; /* Minimum frame height [pixel] */
935607ca46eSDavid Howells __u32 max_height; /* Maximum frame height [pixel] */
936607ca46eSDavid Howells __u32 step_height; /* Frame height step size [pixel] */
937607ca46eSDavid Howells };
938607ca46eSDavid Howells
939607ca46eSDavid Howells struct v4l2_frmsizeenum {
940607ca46eSDavid Howells __u32 index; /* Frame size number */
941607ca46eSDavid Howells __u32 pixel_format; /* Pixel format */
942607ca46eSDavid Howells __u32 type; /* Frame size type the device supports. */
943607ca46eSDavid Howells
944607ca46eSDavid Howells union { /* Frame size */
945607ca46eSDavid Howells struct v4l2_frmsize_discrete discrete;
946607ca46eSDavid Howells struct v4l2_frmsize_stepwise stepwise;
947607ca46eSDavid Howells };
948607ca46eSDavid Howells
949607ca46eSDavid Howells __u32 reserved[2]; /* Reserved space for future use */
950607ca46eSDavid Howells };
951607ca46eSDavid Howells
952607ca46eSDavid Howells /*
953607ca46eSDavid Howells * F R A M E R A T E E N U M E R A T I O N
954607ca46eSDavid Howells */
955607ca46eSDavid Howells enum v4l2_frmivaltypes {
956607ca46eSDavid Howells V4L2_FRMIVAL_TYPE_DISCRETE = 1,
957607ca46eSDavid Howells V4L2_FRMIVAL_TYPE_CONTINUOUS = 2,
958607ca46eSDavid Howells V4L2_FRMIVAL_TYPE_STEPWISE = 3,
959607ca46eSDavid Howells };
960607ca46eSDavid Howells
961607ca46eSDavid Howells struct v4l2_frmival_stepwise {
962607ca46eSDavid Howells struct v4l2_fract min; /* Minimum frame interval [s] */
963607ca46eSDavid Howells struct v4l2_fract max; /* Maximum frame interval [s] */
964607ca46eSDavid Howells struct v4l2_fract step; /* Frame interval step size [s] */
965607ca46eSDavid Howells };
966607ca46eSDavid Howells
967607ca46eSDavid Howells struct v4l2_frmivalenum {
968607ca46eSDavid Howells __u32 index; /* Frame format index */
969607ca46eSDavid Howells __u32 pixel_format; /* Pixel format */
970607ca46eSDavid Howells __u32 width; /* Frame width */
971607ca46eSDavid Howells __u32 height; /* Frame height */
972607ca46eSDavid Howells __u32 type; /* Frame interval type the device supports. */
973607ca46eSDavid Howells
974607ca46eSDavid Howells union { /* Frame interval */
975607ca46eSDavid Howells struct v4l2_fract discrete;
976607ca46eSDavid Howells struct v4l2_frmival_stepwise stepwise;
977607ca46eSDavid Howells };
978607ca46eSDavid Howells
979607ca46eSDavid Howells __u32 reserved[2]; /* Reserved space for future use */
980607ca46eSDavid Howells };
981607ca46eSDavid Howells
982607ca46eSDavid Howells /*
983607ca46eSDavid Howells * T I M E C O D E
984607ca46eSDavid Howells */
985607ca46eSDavid Howells struct v4l2_timecode {
986607ca46eSDavid Howells __u32 type;
987607ca46eSDavid Howells __u32 flags;
988607ca46eSDavid Howells __u8 frames;
989607ca46eSDavid Howells __u8 seconds;
990607ca46eSDavid Howells __u8 minutes;
991607ca46eSDavid Howells __u8 hours;
992607ca46eSDavid Howells __u8 userbits[4];
993607ca46eSDavid Howells };
994607ca46eSDavid Howells
995607ca46eSDavid Howells /* Type */
996607ca46eSDavid Howells #define V4L2_TC_TYPE_24FPS 1
997607ca46eSDavid Howells #define V4L2_TC_TYPE_25FPS 2
998607ca46eSDavid Howells #define V4L2_TC_TYPE_30FPS 3
999607ca46eSDavid Howells #define V4L2_TC_TYPE_50FPS 4
1000607ca46eSDavid Howells #define V4L2_TC_TYPE_60FPS 5
1001607ca46eSDavid Howells
1002607ca46eSDavid Howells /* Flags */
1003607ca46eSDavid Howells #define V4L2_TC_FLAG_DROPFRAME 0x0001 /* "drop-frame" mode */
1004607ca46eSDavid Howells #define V4L2_TC_FLAG_COLORFRAME 0x0002
1005607ca46eSDavid Howells #define V4L2_TC_USERBITS_field 0x000C
1006607ca46eSDavid Howells #define V4L2_TC_USERBITS_USERDEFINED 0x0000
1007607ca46eSDavid Howells #define V4L2_TC_USERBITS_8BITCHARS 0x0008
1008607ca46eSDavid Howells /* The above is based on SMPTE timecodes */
1009607ca46eSDavid Howells
1010607ca46eSDavid Howells struct v4l2_jpegcompression {
1011607ca46eSDavid Howells int quality;
1012607ca46eSDavid Howells
1013607ca46eSDavid Howells int APPn; /* Number of APP segment to be written,
1014607ca46eSDavid Howells * must be 0..15 */
1015607ca46eSDavid Howells int APP_len; /* Length of data in JPEG APPn segment */
1016607ca46eSDavid Howells char APP_data[60]; /* Data in the JPEG APPn segment. */
1017607ca46eSDavid Howells
1018607ca46eSDavid Howells int COM_len; /* Length of data in JPEG COM segment */
1019607ca46eSDavid Howells char COM_data[60]; /* Data in JPEG COM segment */
1020607ca46eSDavid Howells
1021607ca46eSDavid Howells __u32 jpeg_markers; /* Which markers should go into the JPEG
1022607ca46eSDavid Howells * output. Unless you exactly know what
1023607ca46eSDavid Howells * you do, leave them untouched.
1024ff29feb9SLad, Prabhakar * Including less markers will make the
1025607ca46eSDavid Howells * resulting code smaller, but there will
1026607ca46eSDavid Howells * be fewer applications which can read it.
1027607ca46eSDavid Howells * The presence of the APP and COM marker
1028607ca46eSDavid Howells * is influenced by APP_len and COM_len
1029607ca46eSDavid Howells * ONLY, not by this property! */
1030607ca46eSDavid Howells
1031607ca46eSDavid Howells #define V4L2_JPEG_MARKER_DHT (1<<3) /* Define Huffman Tables */
1032607ca46eSDavid Howells #define V4L2_JPEG_MARKER_DQT (1<<4) /* Define Quantization Tables */
1033607ca46eSDavid Howells #define V4L2_JPEG_MARKER_DRI (1<<5) /* Define Restart Interval */
1034607ca46eSDavid Howells #define V4L2_JPEG_MARKER_COM (1<<6) /* Comment segment */
1035607ca46eSDavid Howells #define V4L2_JPEG_MARKER_APP (1<<7) /* App segment, driver will
1036ff29feb9SLad, Prabhakar * always use APP0 */
1037607ca46eSDavid Howells };
1038607ca46eSDavid Howells
1039607ca46eSDavid Howells /*
1040607ca46eSDavid Howells * M E M O R Y - M A P P I N G B U F F E R S
1041607ca46eSDavid Howells */
1042577c89b0SArnd Bergmann
1043577c89b0SArnd Bergmann #ifdef __KERNEL__
1044577c89b0SArnd Bergmann /*
1045577c89b0SArnd Bergmann * This corresponds to the user space version of timeval
1046577c89b0SArnd Bergmann * for 64-bit time_t. sparc64 is different from everyone
1047577c89b0SArnd Bergmann * else, using the microseconds in the wrong half of the
1048577c89b0SArnd Bergmann * second 64-bit word.
1049577c89b0SArnd Bergmann */
1050577c89b0SArnd Bergmann struct __kernel_v4l2_timeval {
1051577c89b0SArnd Bergmann long long tv_sec;
1052577c89b0SArnd Bergmann #if defined(__sparc__) && defined(__arch64__)
1053577c89b0SArnd Bergmann int tv_usec;
1054577c89b0SArnd Bergmann int __pad;
1055577c89b0SArnd Bergmann #else
1056577c89b0SArnd Bergmann long long tv_usec;
1057577c89b0SArnd Bergmann #endif
1058577c89b0SArnd Bergmann };
1059577c89b0SArnd Bergmann #endif
1060577c89b0SArnd Bergmann
1061607ca46eSDavid Howells struct v4l2_requestbuffers {
1062607ca46eSDavid Howells __u32 count;
1063607ca46eSDavid Howells __u32 type; /* enum v4l2_buf_type */
1064607ca46eSDavid Howells __u32 memory; /* enum v4l2_memory */
1065f35f5d72SHans Verkuil __u32 capabilities;
1066c0acf9cfSSergey Senozhatsky __u8 flags;
1067c0acf9cfSSergey Senozhatsky __u8 reserved[3];
1068607ca46eSDavid Howells };
1069607ca46eSDavid Howells
1070965c1e0bSSergey Senozhatsky #define V4L2_MEMORY_FLAG_NON_COHERENT (1 << 0)
1071965c1e0bSSergey Senozhatsky
1072f35f5d72SHans Verkuil /* capabilities for struct v4l2_requestbuffers and v4l2_create_buffers */
1073f35f5d72SHans Verkuil #define V4L2_BUF_CAP_SUPPORTS_MMAP (1 << 0)
1074f35f5d72SHans Verkuil #define V4L2_BUF_CAP_SUPPORTS_USERPTR (1 << 1)
1075f35f5d72SHans Verkuil #define V4L2_BUF_CAP_SUPPORTS_DMABUF (1 << 2)
1076f35f5d72SHans Verkuil #define V4L2_BUF_CAP_SUPPORTS_REQUESTS (1 << 3)
1077d644cca5SJohn Sheu #define V4L2_BUF_CAP_SUPPORTS_ORPHANED_BUFS (1 << 4)
1078137272cdSHans Verkuil #define V4L2_BUF_CAP_SUPPORTS_M2M_HOLD_CAPTURE_BUF (1 << 5)
1079ac53503eSSergey Senozhatsky #define V4L2_BUF_CAP_SUPPORTS_MMAP_CACHE_HINTS (1 << 6)
1080d055a76cSBenjamin Gaignard #define V4L2_BUF_CAP_SUPPORTS_MAX_NUM_BUFFERS (1 << 7)
1081a3293a85SBenjamin Gaignard #define V4L2_BUF_CAP_SUPPORTS_REMOVE_BUFS (1 << 8)
1082f35f5d72SHans Verkuil
1083607ca46eSDavid Howells /**
1084607ca46eSDavid Howells * struct v4l2_plane - plane info for multi-planar buffers
1085607ca46eSDavid Howells * @bytesused: number of bytes occupied by data in the plane (payload)
1086607ca46eSDavid Howells * @length: size of this plane (NOT the payload) in bytes
108727b9e36dSRicardo Ribalda * @m.mem_offset: when memory in the associated struct v4l2_buffer is
1088607ca46eSDavid Howells * V4L2_MEMORY_MMAP, equals the offset from the start of
1089607ca46eSDavid Howells * the device memory for this plane (or is a "cookie" that
1090607ca46eSDavid Howells * should be passed to mmap() called on the video node)
109127b9e36dSRicardo Ribalda * @m.userptr: when memory is V4L2_MEMORY_USERPTR, a userspace pointer
1092607ca46eSDavid Howells * pointing to this plane
109327b9e36dSRicardo Ribalda * @m.fd: when memory is V4L2_MEMORY_DMABUF, a userspace file
1094051c7788SSumit Semwal * descriptor associated with this plane
1095f12b81e4SHans Verkuil * @m: union of @mem_offset, @userptr and @fd
1096607ca46eSDavid Howells * @data_offset: offset in the plane to the start of data; usually 0,
1097607ca46eSDavid Howells * unless there is a header in front of the data
1098f12b81e4SHans Verkuil * @reserved: drivers and applications must zero this array
1099607ca46eSDavid Howells *
1100607ca46eSDavid Howells * Multi-planar buffers consist of one or more planes, e.g. an YCbCr buffer
1101607ca46eSDavid Howells * with two planes can have one plane for Y, and another for interleaved CbCr
1102607ca46eSDavid Howells * components. Each plane can reside in a separate memory buffer, or even in
1103607ca46eSDavid Howells * a completely separate memory node (e.g. in embedded devices).
1104607ca46eSDavid Howells */
1105607ca46eSDavid Howells struct v4l2_plane {
1106607ca46eSDavid Howells __u32 bytesused;
1107607ca46eSDavid Howells __u32 length;
1108607ca46eSDavid Howells union {
1109607ca46eSDavid Howells __u32 mem_offset;
1110607ca46eSDavid Howells unsigned long userptr;
1111051c7788SSumit Semwal __s32 fd;
1112607ca46eSDavid Howells } m;
1113607ca46eSDavid Howells __u32 data_offset;
1114607ca46eSDavid Howells __u32 reserved[11];
1115607ca46eSDavid Howells };
1116607ca46eSDavid Howells
1117607ca46eSDavid Howells /**
1118607ca46eSDavid Howells * struct v4l2_buffer - video buffer info
1119607ca46eSDavid Howells * @index: id number of the buffer
1120607ca46eSDavid Howells * @type: enum v4l2_buf_type; buffer type (type == *_MPLANE for
1121607ca46eSDavid Howells * multiplanar buffers);
1122607ca46eSDavid Howells * @bytesused: number of bytes occupied by data in the buffer (payload);
1123607ca46eSDavid Howells * unused (set to 0) for multiplanar buffers
1124607ca46eSDavid Howells * @flags: buffer informational flags
1125607ca46eSDavid Howells * @field: enum v4l2_field; field order of the image in the buffer
1126607ca46eSDavid Howells * @timestamp: frame timestamp
1127607ca46eSDavid Howells * @timecode: frame timecode
1128607ca46eSDavid Howells * @sequence: sequence count of this frame
1129607ca46eSDavid Howells * @memory: enum v4l2_memory; the method, in which the actual video data is
1130607ca46eSDavid Howells * passed
113127b9e36dSRicardo Ribalda * @m.offset: for non-multiplanar buffers with memory == V4L2_MEMORY_MMAP;
1132607ca46eSDavid Howells * offset from the start of the device memory for this plane,
1133607ca46eSDavid Howells * (or a "cookie" that should be passed to mmap() as offset)
113427b9e36dSRicardo Ribalda * @m.userptr: for non-multiplanar buffers with memory == V4L2_MEMORY_USERPTR;
1135607ca46eSDavid Howells * a userspace pointer pointing to this buffer
113627b9e36dSRicardo Ribalda * @m.fd: for non-multiplanar buffers with memory == V4L2_MEMORY_DMABUF;
1137051c7788SSumit Semwal * a userspace file descriptor associated with this buffer
113827b9e36dSRicardo Ribalda * @m.planes: for multiplanar buffers; userspace pointer to the array of plane
1139607ca46eSDavid Howells * info structs for this buffer
1140f12b81e4SHans Verkuil * @m: union of @offset, @userptr, @planes and @fd
1141607ca46eSDavid Howells * @length: size in bytes of the buffer (NOT its payload) for single-plane
1142607ca46eSDavid Howells * buffers (when type != *_MPLANE); number of elements in the
1143607ca46eSDavid Howells * planes array for multi-plane buffers
1144f12b81e4SHans Verkuil * @reserved2: drivers and applications must zero this field
114562fed26fSHans Verkuil * @request_fd: fd of the request that this buffer should use
1146f12b81e4SHans Verkuil * @reserved: for backwards compatibility with applications that do not know
1147f12b81e4SHans Verkuil * about @request_fd
1148607ca46eSDavid Howells *
1149607ca46eSDavid Howells * Contains data exchanged by application and driver using one of the Streaming
1150607ca46eSDavid Howells * I/O methods.
1151607ca46eSDavid Howells */
1152607ca46eSDavid Howells struct v4l2_buffer {
1153607ca46eSDavid Howells __u32 index;
1154607ca46eSDavid Howells __u32 type;
1155607ca46eSDavid Howells __u32 bytesused;
1156607ca46eSDavid Howells __u32 flags;
1157607ca46eSDavid Howells __u32 field;
1158577c89b0SArnd Bergmann #ifdef __KERNEL__
1159577c89b0SArnd Bergmann struct __kernel_v4l2_timeval timestamp;
1160577c89b0SArnd Bergmann #else
1161607ca46eSDavid Howells struct timeval timestamp;
1162577c89b0SArnd Bergmann #endif
1163607ca46eSDavid Howells struct v4l2_timecode timecode;
1164607ca46eSDavid Howells __u32 sequence;
1165607ca46eSDavid Howells
1166607ca46eSDavid Howells /* memory location */
1167607ca46eSDavid Howells __u32 memory;
1168607ca46eSDavid Howells union {
1169607ca46eSDavid Howells __u32 offset;
1170607ca46eSDavid Howells unsigned long userptr;
1171607ca46eSDavid Howells struct v4l2_plane *planes;
1172051c7788SSumit Semwal __s32 fd;
1173607ca46eSDavid Howells } m;
1174607ca46eSDavid Howells __u32 length;
1175607ca46eSDavid Howells __u32 reserved2;
117662fed26fSHans Verkuil union {
117762fed26fSHans Verkuil __s32 request_fd;
1178607ca46eSDavid Howells __u32 reserved;
1179607ca46eSDavid Howells };
118062fed26fSHans Verkuil };
1181607ca46eSDavid Howells
118277cdffcbSArnd Bergmann #ifndef __KERNEL__
1183c2eb8effSHans Verkuil /**
1184c2eb8effSHans Verkuil * v4l2_timeval_to_ns - Convert timeval to nanoseconds
1185f12b81e4SHans Verkuil * @tv: pointer to the timeval variable to be converted
1186c2eb8effSHans Verkuil *
1187c2eb8effSHans Verkuil * Returns the scalar nanosecond representation of the timeval
1188c2eb8effSHans Verkuil * parameter.
1189c2eb8effSHans Verkuil */
v4l2_timeval_to_ns(const struct timeval * tv)1190c2eb8effSHans Verkuil static inline __u64 v4l2_timeval_to_ns(const struct timeval *tv)
1191c2eb8effSHans Verkuil {
1192c2eb8effSHans Verkuil return (__u64)tv->tv_sec * 1000000000ULL + tv->tv_usec * 1000;
1193c2eb8effSHans Verkuil }
119477cdffcbSArnd Bergmann #endif
1195c2eb8effSHans Verkuil
1196607ca46eSDavid Howells /* Flags for 'flags' field */
1197939f1377SSakari Ailus /* Buffer is mapped (flag) */
1198939f1377SSakari Ailus #define V4L2_BUF_FLAG_MAPPED 0x00000001
1199939f1377SSakari Ailus /* Buffer is queued for processing */
1200939f1377SSakari Ailus #define V4L2_BUF_FLAG_QUEUED 0x00000002
1201939f1377SSakari Ailus /* Buffer is ready */
1202939f1377SSakari Ailus #define V4L2_BUF_FLAG_DONE 0x00000004
1203939f1377SSakari Ailus /* Image is a keyframe (I-frame) */
1204939f1377SSakari Ailus #define V4L2_BUF_FLAG_KEYFRAME 0x00000008
1205939f1377SSakari Ailus /* Image is a P-frame */
1206939f1377SSakari Ailus #define V4L2_BUF_FLAG_PFRAME 0x00000010
1207939f1377SSakari Ailus /* Image is a B-frame */
1208939f1377SSakari Ailus #define V4L2_BUF_FLAG_BFRAME 0x00000020
1209607ca46eSDavid Howells /* Buffer is ready, but the data contained within is corrupted. */
1210939f1377SSakari Ailus #define V4L2_BUF_FLAG_ERROR 0x00000040
121162fed26fSHans Verkuil /* Buffer is added to an unqueued request */
121262fed26fSHans Verkuil #define V4L2_BUF_FLAG_IN_REQUEST 0x00000080
1213939f1377SSakari Ailus /* timecode field is valid */
1214939f1377SSakari Ailus #define V4L2_BUF_FLAG_TIMECODE 0x00000100
1215137272cdSHans Verkuil /* Don't return the capture buffer until OUTPUT timestamp changes */
1216137272cdSHans Verkuil #define V4L2_BUF_FLAG_M2M_HOLD_CAPTURE_BUF 0x00000200
1217939f1377SSakari Ailus /* Buffer is prepared for queuing */
1218939f1377SSakari Ailus #define V4L2_BUF_FLAG_PREPARED 0x00000400
1219607ca46eSDavid Howells /* Cache handling flags */
1220939f1377SSakari Ailus #define V4L2_BUF_FLAG_NO_CACHE_INVALIDATE 0x00000800
1221939f1377SSakari Ailus #define V4L2_BUF_FLAG_NO_CACHE_CLEAN 0x00001000
12221202ecdcSSakari Ailus /* Timestamp type */
1223939f1377SSakari Ailus #define V4L2_BUF_FLAG_TIMESTAMP_MASK 0x0000e000
1224939f1377SSakari Ailus #define V4L2_BUF_FLAG_TIMESTAMP_UNKNOWN 0x00000000
1225939f1377SSakari Ailus #define V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC 0x00002000
1226939f1377SSakari Ailus #define V4L2_BUF_FLAG_TIMESTAMP_COPY 0x00004000
1227872484ceSSakari Ailus /* Timestamp sources. */
1228872484ceSSakari Ailus #define V4L2_BUF_FLAG_TSTAMP_SRC_MASK 0x00070000
1229872484ceSSakari Ailus #define V4L2_BUF_FLAG_TSTAMP_SRC_EOF 0x00000000
1230872484ceSSakari Ailus #define V4L2_BUF_FLAG_TSTAMP_SRC_SOE 0x00010000
1231dc199241SPeter Seiderer /* mem2mem encoder/decoder */
1232dc199241SPeter Seiderer #define V4L2_BUF_FLAG_LAST 0x00100000
123362fed26fSHans Verkuil /* request_fd is valid */
123462fed26fSHans Verkuil #define V4L2_BUF_FLAG_REQUEST_FD 0x00800000
1235607ca46eSDavid Howells
1236b799d09aSTomasz Stanislawski /**
1237b799d09aSTomasz Stanislawski * struct v4l2_exportbuffer - export of video buffer as DMABUF file descriptor
1238b799d09aSTomasz Stanislawski *
1239b799d09aSTomasz Stanislawski * @index: id number of the buffer
1240b799d09aSTomasz Stanislawski * @type: enum v4l2_buf_type; buffer type (type == *_MPLANE for
1241b799d09aSTomasz Stanislawski * multiplanar buffers);
1242b799d09aSTomasz Stanislawski * @plane: index of the plane to be exported, 0 for single plane queues
1243b799d09aSTomasz Stanislawski * @flags: flags for newly created file, currently only O_CLOEXEC is
1244b799d09aSTomasz Stanislawski * supported, refer to manual of open syscall for more details
1245b799d09aSTomasz Stanislawski * @fd: file descriptor associated with DMABUF (set by driver)
1246f12b81e4SHans Verkuil * @reserved: drivers and applications must zero this array
1247b799d09aSTomasz Stanislawski *
1248b799d09aSTomasz Stanislawski * Contains data used for exporting a video buffer as DMABUF file descriptor.
1249b799d09aSTomasz Stanislawski * The buffer is identified by a 'cookie' returned by VIDIOC_QUERYBUF
1250b799d09aSTomasz Stanislawski * (identical to the cookie used to mmap() the buffer to userspace). All
1251b799d09aSTomasz Stanislawski * reserved fields must be set to zero. The field reserved0 is expected to
1252b799d09aSTomasz Stanislawski * become a structure 'type' allowing an alternative layout of the structure
1253b799d09aSTomasz Stanislawski * content. Therefore this field should not be used for any other extensions.
1254b799d09aSTomasz Stanislawski */
1255b799d09aSTomasz Stanislawski struct v4l2_exportbuffer {
1256b799d09aSTomasz Stanislawski __u32 type; /* enum v4l2_buf_type */
1257b799d09aSTomasz Stanislawski __u32 index;
1258b799d09aSTomasz Stanislawski __u32 plane;
1259b799d09aSTomasz Stanislawski __u32 flags;
1260b799d09aSTomasz Stanislawski __s32 fd;
1261b799d09aSTomasz Stanislawski __u32 reserved[11];
1262b799d09aSTomasz Stanislawski };
1263b799d09aSTomasz Stanislawski
1264607ca46eSDavid Howells /*
1265607ca46eSDavid Howells * O V E R L A Y P R E V I E W
1266607ca46eSDavid Howells */
1267607ca46eSDavid Howells struct v4l2_framebuffer {
1268607ca46eSDavid Howells __u32 capability;
1269607ca46eSDavid Howells __u32 flags;
1270607ca46eSDavid Howells /* FIXME: in theory we should pass something like PCI device + memory
1271607ca46eSDavid Howells * region + offset instead of some physical address */
1272607ca46eSDavid Howells void *base;
1273d52e2381SLaurent Pinchart struct {
1274d52e2381SLaurent Pinchart __u32 width;
1275d52e2381SLaurent Pinchart __u32 height;
1276d52e2381SLaurent Pinchart __u32 pixelformat;
1277d52e2381SLaurent Pinchart __u32 field; /* enum v4l2_field */
1278d52e2381SLaurent Pinchart __u32 bytesperline; /* for padding, zero if unused */
1279d52e2381SLaurent Pinchart __u32 sizeimage;
1280d52e2381SLaurent Pinchart __u32 colorspace; /* enum v4l2_colorspace */
1281d52e2381SLaurent Pinchart __u32 priv; /* reserved field, set to 0 */
1282d52e2381SLaurent Pinchart } fmt;
1283607ca46eSDavid Howells };
1284607ca46eSDavid Howells /* Flags for the 'capability' field. Read only */
1285607ca46eSDavid Howells #define V4L2_FBUF_CAP_EXTERNOVERLAY 0x0001
1286607ca46eSDavid Howells #define V4L2_FBUF_CAP_CHROMAKEY 0x0002
1287fc650d2eSHans Verkuil #ifndef __KERNEL__
1288607ca46eSDavid Howells #define V4L2_FBUF_CAP_LIST_CLIPPING 0x0004
1289607ca46eSDavid Howells #define V4L2_FBUF_CAP_BITMAP_CLIPPING 0x0008
1290fc650d2eSHans Verkuil #endif
1291607ca46eSDavid Howells #define V4L2_FBUF_CAP_LOCAL_ALPHA 0x0010
1292607ca46eSDavid Howells #define V4L2_FBUF_CAP_GLOBAL_ALPHA 0x0020
1293607ca46eSDavid Howells #define V4L2_FBUF_CAP_LOCAL_INV_ALPHA 0x0040
1294607ca46eSDavid Howells #define V4L2_FBUF_CAP_SRC_CHROMAKEY 0x0080
1295607ca46eSDavid Howells /* Flags for the 'flags' field. */
1296607ca46eSDavid Howells #define V4L2_FBUF_FLAG_PRIMARY 0x0001
1297607ca46eSDavid Howells #define V4L2_FBUF_FLAG_OVERLAY 0x0002
1298607ca46eSDavid Howells #define V4L2_FBUF_FLAG_CHROMAKEY 0x0004
1299607ca46eSDavid Howells #define V4L2_FBUF_FLAG_LOCAL_ALPHA 0x0008
1300607ca46eSDavid Howells #define V4L2_FBUF_FLAG_GLOBAL_ALPHA 0x0010
1301607ca46eSDavid Howells #define V4L2_FBUF_FLAG_LOCAL_INV_ALPHA 0x0020
1302607ca46eSDavid Howells #define V4L2_FBUF_FLAG_SRC_CHROMAKEY 0x0040
1303607ca46eSDavid Howells
1304607ca46eSDavid Howells struct v4l2_clip {
1305607ca46eSDavid Howells struct v4l2_rect c;
1306607ca46eSDavid Howells struct v4l2_clip __user *next;
1307607ca46eSDavid Howells };
1308607ca46eSDavid Howells
1309607ca46eSDavid Howells struct v4l2_window {
1310607ca46eSDavid Howells struct v4l2_rect w;
1311607ca46eSDavid Howells __u32 field; /* enum v4l2_field */
1312607ca46eSDavid Howells __u32 chromakey;
13133f65c6f6SArnd Bergmann struct v4l2_clip *clips;
1314607ca46eSDavid Howells __u32 clipcount;
1315607ca46eSDavid Howells void __user *bitmap;
1316607ca46eSDavid Howells __u8 global_alpha;
1317607ca46eSDavid Howells };
1318607ca46eSDavid Howells
1319607ca46eSDavid Howells /*
1320607ca46eSDavid Howells * C A P T U R E P A R A M E T E R S
1321607ca46eSDavid Howells */
1322607ca46eSDavid Howells struct v4l2_captureparm {
1323607ca46eSDavid Howells __u32 capability; /* Supported modes */
1324607ca46eSDavid Howells __u32 capturemode; /* Current mode */
13252e74598dSKirill Smelkov struct v4l2_fract timeperframe; /* Time per frame in seconds */
1326607ca46eSDavid Howells __u32 extendedmode; /* Driver-specific extensions */
1327607ca46eSDavid Howells __u32 readbuffers; /* # of buffers for read */
1328607ca46eSDavid Howells __u32 reserved[4];
1329607ca46eSDavid Howells };
1330607ca46eSDavid Howells
1331607ca46eSDavid Howells /* Flags for 'capability' and 'capturemode' fields */
1332607ca46eSDavid Howells #define V4L2_MODE_HIGHQUALITY 0x0001 /* High quality imaging mode */
1333607ca46eSDavid Howells #define V4L2_CAP_TIMEPERFRAME 0x1000 /* timeperframe field is supported */
1334607ca46eSDavid Howells
1335607ca46eSDavid Howells struct v4l2_outputparm {
1336607ca46eSDavid Howells __u32 capability; /* Supported modes */
1337607ca46eSDavid Howells __u32 outputmode; /* Current mode */
1338607ca46eSDavid Howells struct v4l2_fract timeperframe; /* Time per frame in seconds */
1339607ca46eSDavid Howells __u32 extendedmode; /* Driver-specific extensions */
1340607ca46eSDavid Howells __u32 writebuffers; /* # of buffers for write */
1341607ca46eSDavid Howells __u32 reserved[4];
1342607ca46eSDavid Howells };
1343607ca46eSDavid Howells
1344607ca46eSDavid Howells /*
1345607ca46eSDavid Howells * I N P U T I M A G E C R O P P I N G
1346607ca46eSDavid Howells */
1347607ca46eSDavid Howells struct v4l2_cropcap {
1348607ca46eSDavid Howells __u32 type; /* enum v4l2_buf_type */
1349607ca46eSDavid Howells struct v4l2_rect bounds;
1350607ca46eSDavid Howells struct v4l2_rect defrect;
1351607ca46eSDavid Howells struct v4l2_fract pixelaspect;
1352607ca46eSDavid Howells };
1353607ca46eSDavid Howells
1354607ca46eSDavid Howells struct v4l2_crop {
1355607ca46eSDavid Howells __u32 type; /* enum v4l2_buf_type */
1356607ca46eSDavid Howells struct v4l2_rect c;
1357607ca46eSDavid Howells };
1358607ca46eSDavid Howells
1359607ca46eSDavid Howells /**
1360607ca46eSDavid Howells * struct v4l2_selection - selection info
1361607ca46eSDavid Howells * @type: buffer type (do not use *_MPLANE types)
1362607ca46eSDavid Howells * @target: Selection target, used to choose one of possible rectangles;
1363607ca46eSDavid Howells * defined in v4l2-common.h; V4L2_SEL_TGT_* .
1364607ca46eSDavid Howells * @flags: constraints flags, defined in v4l2-common.h; V4L2_SEL_FLAG_*.
1365607ca46eSDavid Howells * @r: coordinates of selection window
1366607ca46eSDavid Howells * @reserved: for future use, rounds structure size to 64 bytes, set to zero
1367607ca46eSDavid Howells *
1368607ca46eSDavid Howells * Hardware may use multiple helper windows to process a video stream.
1369607ca46eSDavid Howells * The structure is used to exchange this selection areas between
1370607ca46eSDavid Howells * an application and a driver.
1371607ca46eSDavid Howells */
1372607ca46eSDavid Howells struct v4l2_selection {
1373607ca46eSDavid Howells __u32 type;
1374607ca46eSDavid Howells __u32 target;
1375607ca46eSDavid Howells __u32 flags;
1376607ca46eSDavid Howells struct v4l2_rect r;
1377607ca46eSDavid Howells __u32 reserved[9];
1378607ca46eSDavid Howells };
1379607ca46eSDavid Howells
1380607ca46eSDavid Howells
1381607ca46eSDavid Howells /*
1382607ca46eSDavid Howells * A N A L O G V I D E O S T A N D A R D
1383607ca46eSDavid Howells */
1384607ca46eSDavid Howells
1385607ca46eSDavid Howells typedef __u64 v4l2_std_id;
1386607ca46eSDavid Howells
1387f8c8ee61SMarco Felsch /*
1388f8c8ee61SMarco Felsch * Attention: Keep the V4L2_STD_* bit definitions in sync with
1389f8c8ee61SMarco Felsch * include/dt-bindings/display/sdtv-standards.h SDTV_STD_* bit definitions.
1390f8c8ee61SMarco Felsch */
1391607ca46eSDavid Howells /* one bit for each */
1392607ca46eSDavid Howells #define V4L2_STD_PAL_B ((v4l2_std_id)0x00000001)
1393607ca46eSDavid Howells #define V4L2_STD_PAL_B1 ((v4l2_std_id)0x00000002)
1394607ca46eSDavid Howells #define V4L2_STD_PAL_G ((v4l2_std_id)0x00000004)
1395607ca46eSDavid Howells #define V4L2_STD_PAL_H ((v4l2_std_id)0x00000008)
1396607ca46eSDavid Howells #define V4L2_STD_PAL_I ((v4l2_std_id)0x00000010)
1397607ca46eSDavid Howells #define V4L2_STD_PAL_D ((v4l2_std_id)0x00000020)
1398607ca46eSDavid Howells #define V4L2_STD_PAL_D1 ((v4l2_std_id)0x00000040)
1399607ca46eSDavid Howells #define V4L2_STD_PAL_K ((v4l2_std_id)0x00000080)
1400607ca46eSDavid Howells
1401607ca46eSDavid Howells #define V4L2_STD_PAL_M ((v4l2_std_id)0x00000100)
1402607ca46eSDavid Howells #define V4L2_STD_PAL_N ((v4l2_std_id)0x00000200)
1403607ca46eSDavid Howells #define V4L2_STD_PAL_Nc ((v4l2_std_id)0x00000400)
1404607ca46eSDavid Howells #define V4L2_STD_PAL_60 ((v4l2_std_id)0x00000800)
1405607ca46eSDavid Howells
1406607ca46eSDavid Howells #define V4L2_STD_NTSC_M ((v4l2_std_id)0x00001000) /* BTSC */
1407607ca46eSDavid Howells #define V4L2_STD_NTSC_M_JP ((v4l2_std_id)0x00002000) /* EIA-J */
1408607ca46eSDavid Howells #define V4L2_STD_NTSC_443 ((v4l2_std_id)0x00004000)
1409607ca46eSDavid Howells #define V4L2_STD_NTSC_M_KR ((v4l2_std_id)0x00008000) /* FM A2 */
1410607ca46eSDavid Howells
1411607ca46eSDavid Howells #define V4L2_STD_SECAM_B ((v4l2_std_id)0x00010000)
1412607ca46eSDavid Howells #define V4L2_STD_SECAM_D ((v4l2_std_id)0x00020000)
1413607ca46eSDavid Howells #define V4L2_STD_SECAM_G ((v4l2_std_id)0x00040000)
1414607ca46eSDavid Howells #define V4L2_STD_SECAM_H ((v4l2_std_id)0x00080000)
1415607ca46eSDavid Howells #define V4L2_STD_SECAM_K ((v4l2_std_id)0x00100000)
1416607ca46eSDavid Howells #define V4L2_STD_SECAM_K1 ((v4l2_std_id)0x00200000)
1417607ca46eSDavid Howells #define V4L2_STD_SECAM_L ((v4l2_std_id)0x00400000)
1418607ca46eSDavid Howells #define V4L2_STD_SECAM_LC ((v4l2_std_id)0x00800000)
1419607ca46eSDavid Howells
1420607ca46eSDavid Howells /* ATSC/HDTV */
1421607ca46eSDavid Howells #define V4L2_STD_ATSC_8_VSB ((v4l2_std_id)0x01000000)
1422607ca46eSDavid Howells #define V4L2_STD_ATSC_16_VSB ((v4l2_std_id)0x02000000)
1423607ca46eSDavid Howells
1424607ca46eSDavid Howells /* FIXME:
1425607ca46eSDavid Howells Although std_id is 64 bits, there is an issue on PPC32 architecture that
1426607ca46eSDavid Howells makes switch(__u64) to break. So, there's a hack on v4l2-common.c rounding
1427607ca46eSDavid Howells this value to 32 bits.
1428607ca46eSDavid Howells As, currently, the max value is for V4L2_STD_ATSC_16_VSB (30 bits wide),
1429607ca46eSDavid Howells it should work fine. However, if needed to add more than two standards,
1430607ca46eSDavid Howells v4l2-common.c should be fixed.
1431607ca46eSDavid Howells */
1432607ca46eSDavid Howells
1433607ca46eSDavid Howells /*
1434607ca46eSDavid Howells * Some macros to merge video standards in order to make live easier for the
1435607ca46eSDavid Howells * drivers and V4L2 applications
1436607ca46eSDavid Howells */
1437607ca46eSDavid Howells
1438607ca46eSDavid Howells /*
1439607ca46eSDavid Howells * "Common" NTSC/M - It should be noticed that V4L2_STD_NTSC_443 is
1440607ca46eSDavid Howells * Missing here.
1441607ca46eSDavid Howells */
1442607ca46eSDavid Howells #define V4L2_STD_NTSC (V4L2_STD_NTSC_M |\
1443607ca46eSDavid Howells V4L2_STD_NTSC_M_JP |\
1444607ca46eSDavid Howells V4L2_STD_NTSC_M_KR)
1445607ca46eSDavid Howells /* Secam macros */
1446607ca46eSDavid Howells #define V4L2_STD_SECAM_DK (V4L2_STD_SECAM_D |\
1447607ca46eSDavid Howells V4L2_STD_SECAM_K |\
1448607ca46eSDavid Howells V4L2_STD_SECAM_K1)
1449607ca46eSDavid Howells /* All Secam Standards */
1450607ca46eSDavid Howells #define V4L2_STD_SECAM (V4L2_STD_SECAM_B |\
1451607ca46eSDavid Howells V4L2_STD_SECAM_G |\
1452607ca46eSDavid Howells V4L2_STD_SECAM_H |\
1453607ca46eSDavid Howells V4L2_STD_SECAM_DK |\
1454607ca46eSDavid Howells V4L2_STD_SECAM_L |\
1455607ca46eSDavid Howells V4L2_STD_SECAM_LC)
1456607ca46eSDavid Howells /* PAL macros */
1457607ca46eSDavid Howells #define V4L2_STD_PAL_BG (V4L2_STD_PAL_B |\
1458607ca46eSDavid Howells V4L2_STD_PAL_B1 |\
1459607ca46eSDavid Howells V4L2_STD_PAL_G)
1460607ca46eSDavid Howells #define V4L2_STD_PAL_DK (V4L2_STD_PAL_D |\
1461607ca46eSDavid Howells V4L2_STD_PAL_D1 |\
1462607ca46eSDavid Howells V4L2_STD_PAL_K)
1463607ca46eSDavid Howells /*
1464607ca46eSDavid Howells * "Common" PAL - This macro is there to be compatible with the old
1465607ca46eSDavid Howells * V4L1 concept of "PAL": /BGDKHI.
1466ff29feb9SLad, Prabhakar * Several PAL standards are missing here: /M, /N and /Nc
1467607ca46eSDavid Howells */
1468607ca46eSDavid Howells #define V4L2_STD_PAL (V4L2_STD_PAL_BG |\
1469607ca46eSDavid Howells V4L2_STD_PAL_DK |\
1470607ca46eSDavid Howells V4L2_STD_PAL_H |\
1471607ca46eSDavid Howells V4L2_STD_PAL_I)
1472607ca46eSDavid Howells /* Chroma "agnostic" standards */
1473607ca46eSDavid Howells #define V4L2_STD_B (V4L2_STD_PAL_B |\
1474607ca46eSDavid Howells V4L2_STD_PAL_B1 |\
1475607ca46eSDavid Howells V4L2_STD_SECAM_B)
1476607ca46eSDavid Howells #define V4L2_STD_G (V4L2_STD_PAL_G |\
1477607ca46eSDavid Howells V4L2_STD_SECAM_G)
1478607ca46eSDavid Howells #define V4L2_STD_H (V4L2_STD_PAL_H |\
1479607ca46eSDavid Howells V4L2_STD_SECAM_H)
1480607ca46eSDavid Howells #define V4L2_STD_L (V4L2_STD_SECAM_L |\
1481607ca46eSDavid Howells V4L2_STD_SECAM_LC)
1482607ca46eSDavid Howells #define V4L2_STD_GH (V4L2_STD_G |\
1483607ca46eSDavid Howells V4L2_STD_H)
1484607ca46eSDavid Howells #define V4L2_STD_DK (V4L2_STD_PAL_DK |\
1485607ca46eSDavid Howells V4L2_STD_SECAM_DK)
1486607ca46eSDavid Howells #define V4L2_STD_BG (V4L2_STD_B |\
1487607ca46eSDavid Howells V4L2_STD_G)
1488607ca46eSDavid Howells #define V4L2_STD_MN (V4L2_STD_PAL_M |\
1489607ca46eSDavid Howells V4L2_STD_PAL_N |\
1490607ca46eSDavid Howells V4L2_STD_PAL_Nc |\
1491607ca46eSDavid Howells V4L2_STD_NTSC)
1492607ca46eSDavid Howells
1493607ca46eSDavid Howells /* Standards where MTS/BTSC stereo could be found */
1494607ca46eSDavid Howells #define V4L2_STD_MTS (V4L2_STD_NTSC_M |\
1495607ca46eSDavid Howells V4L2_STD_PAL_M |\
1496607ca46eSDavid Howells V4L2_STD_PAL_N |\
1497607ca46eSDavid Howells V4L2_STD_PAL_Nc)
1498607ca46eSDavid Howells
1499607ca46eSDavid Howells /* Standards for Countries with 60Hz Line frequency */
1500607ca46eSDavid Howells #define V4L2_STD_525_60 (V4L2_STD_PAL_M |\
1501607ca46eSDavid Howells V4L2_STD_PAL_60 |\
1502607ca46eSDavid Howells V4L2_STD_NTSC |\
1503607ca46eSDavid Howells V4L2_STD_NTSC_443)
1504607ca46eSDavid Howells /* Standards for Countries with 50Hz Line frequency */
1505607ca46eSDavid Howells #define V4L2_STD_625_50 (V4L2_STD_PAL |\
1506607ca46eSDavid Howells V4L2_STD_PAL_N |\
1507607ca46eSDavid Howells V4L2_STD_PAL_Nc |\
1508607ca46eSDavid Howells V4L2_STD_SECAM)
1509607ca46eSDavid Howells
1510607ca46eSDavid Howells #define V4L2_STD_ATSC (V4L2_STD_ATSC_8_VSB |\
1511607ca46eSDavid Howells V4L2_STD_ATSC_16_VSB)
1512607ca46eSDavid Howells /* Macros with none and all analog standards */
1513607ca46eSDavid Howells #define V4L2_STD_UNKNOWN 0
1514607ca46eSDavid Howells #define V4L2_STD_ALL (V4L2_STD_525_60 |\
1515607ca46eSDavid Howells V4L2_STD_625_50)
1516607ca46eSDavid Howells
1517607ca46eSDavid Howells struct v4l2_standard {
1518607ca46eSDavid Howells __u32 index;
1519607ca46eSDavid Howells v4l2_std_id id;
1520607ca46eSDavid Howells __u8 name[24];
1521607ca46eSDavid Howells struct v4l2_fract frameperiod; /* Frames, not fields */
1522607ca46eSDavid Howells __u32 framelines;
1523607ca46eSDavid Howells __u32 reserved[4];
1524607ca46eSDavid Howells };
1525607ca46eSDavid Howells
1526607ca46eSDavid Howells /*
1527607ca46eSDavid Howells * D V B T T I M I N G S
1528607ca46eSDavid Howells */
1529607ca46eSDavid Howells
1530607ca46eSDavid Howells /** struct v4l2_bt_timings - BT.656/BT.1120 timing data
1531607ca46eSDavid Howells * @width: total width of the active video in pixels
1532607ca46eSDavid Howells * @height: total height of the active video in lines
1533607ca46eSDavid Howells * @interlaced: Interlaced or progressive
1534607ca46eSDavid Howells * @polarities: Positive or negative polarities
1535607ca46eSDavid Howells * @pixelclock: Pixel clock in HZ. Ex. 74.25MHz->74250000
1536607ca46eSDavid Howells * @hfrontporch:Horizontal front porch in pixels
1537607ca46eSDavid Howells * @hsync: Horizontal Sync length in pixels
1538607ca46eSDavid Howells * @hbackporch: Horizontal back porch in pixels
1539607ca46eSDavid Howells * @vfrontporch:Vertical front porch in lines
1540607ca46eSDavid Howells * @vsync: Vertical Sync length in lines
1541607ca46eSDavid Howells * @vbackporch: Vertical back porch in lines
1542607ca46eSDavid Howells * @il_vfrontporch:Vertical front porch for the even field
1543607ca46eSDavid Howells * (aka field 2) of interlaced field formats
1544607ca46eSDavid Howells * @il_vsync: Vertical Sync length for the even field
1545607ca46eSDavid Howells * (aka field 2) of interlaced field formats
1546607ca46eSDavid Howells * @il_vbackporch:Vertical back porch for the even field
1547607ca46eSDavid Howells * (aka field 2) of interlaced field formats
1548607ca46eSDavid Howells * @standards: Standards the timing belongs to
1549607ca46eSDavid Howells * @flags: Flags
15504f100ff6SHans Verkuil * @picture_aspect: The picture aspect ratio (hor/vert).
15514f100ff6SHans Verkuil * @cea861_vic: VIC code as per the CEA-861 standard.
15524f100ff6SHans Verkuil * @hdmi_vic: VIC code as per the HDMI standard.
1553607ca46eSDavid Howells * @reserved: Reserved fields, must be zeroed.
1554607ca46eSDavid Howells *
1555607ca46eSDavid Howells * A note regarding vertical interlaced timings: height refers to the total
1556607ca46eSDavid Howells * height of the active video frame (= two fields). The blanking timings refer
1557607ca46eSDavid Howells * to the blanking of each field. So the height of the total frame is
1558607ca46eSDavid Howells * calculated as follows:
1559607ca46eSDavid Howells *
1560607ca46eSDavid Howells * tot_height = height + vfrontporch + vsync + vbackporch +
1561607ca46eSDavid Howells * il_vfrontporch + il_vsync + il_vbackporch
1562607ca46eSDavid Howells *
1563607ca46eSDavid Howells * The active height of each field is height / 2.
1564607ca46eSDavid Howells */
1565607ca46eSDavid Howells struct v4l2_bt_timings {
1566607ca46eSDavid Howells __u32 width;
1567607ca46eSDavid Howells __u32 height;
1568607ca46eSDavid Howells __u32 interlaced;
1569607ca46eSDavid Howells __u32 polarities;
1570607ca46eSDavid Howells __u64 pixelclock;
1571607ca46eSDavid Howells __u32 hfrontporch;
1572607ca46eSDavid Howells __u32 hsync;
1573607ca46eSDavid Howells __u32 hbackporch;
1574607ca46eSDavid Howells __u32 vfrontporch;
1575607ca46eSDavid Howells __u32 vsync;
1576607ca46eSDavid Howells __u32 vbackporch;
1577607ca46eSDavid Howells __u32 il_vfrontporch;
1578607ca46eSDavid Howells __u32 il_vsync;
1579607ca46eSDavid Howells __u32 il_vbackporch;
1580607ca46eSDavid Howells __u32 standards;
1581607ca46eSDavid Howells __u32 flags;
15824f100ff6SHans Verkuil struct v4l2_fract picture_aspect;
15834f100ff6SHans Verkuil __u8 cea861_vic;
15844f100ff6SHans Verkuil __u8 hdmi_vic;
15854f100ff6SHans Verkuil __u8 reserved[46];
1586607ca46eSDavid Howells } __attribute__ ((packed));
1587607ca46eSDavid Howells
1588607ca46eSDavid Howells /* Interlaced or progressive format */
1589607ca46eSDavid Howells #define V4L2_DV_PROGRESSIVE 0
1590607ca46eSDavid Howells #define V4L2_DV_INTERLACED 1
1591607ca46eSDavid Howells
1592607ca46eSDavid Howells /* Polarities. If bit is not set, it is assumed to be negative polarity */
1593607ca46eSDavid Howells #define V4L2_DV_VSYNC_POS_POL 0x00000001
1594607ca46eSDavid Howells #define V4L2_DV_HSYNC_POS_POL 0x00000002
1595607ca46eSDavid Howells
1596607ca46eSDavid Howells /* Timings standards */
1597607ca46eSDavid Howells #define V4L2_DV_BT_STD_CEA861 (1 << 0) /* CEA-861 Digital TV Profile */
1598607ca46eSDavid Howells #define V4L2_DV_BT_STD_DMT (1 << 1) /* VESA Discrete Monitor Timings */
1599607ca46eSDavid Howells #define V4L2_DV_BT_STD_CVT (1 << 2) /* VESA Coordinated Video Timings */
1600607ca46eSDavid Howells #define V4L2_DV_BT_STD_GTF (1 << 3) /* VESA Generalized Timings Formula */
16017389e6efSCharles-Antoine Couret #define V4L2_DV_BT_STD_SDI (1 << 4) /* SDI Timings */
1602607ca46eSDavid Howells
1603607ca46eSDavid Howells /* Flags */
1604607ca46eSDavid Howells
16058fbe91e7SHans Verkuil /*
16068fbe91e7SHans Verkuil * CVT/GTF specific: timing uses reduced blanking (CVT) or the 'Secondary
16078fbe91e7SHans Verkuil * GTF' curve (GTF). In both cases the horizontal and/or vertical blanking
16088fbe91e7SHans Verkuil * intervals are reduced, allowing a higher resolution over the same
16098fbe91e7SHans Verkuil * bandwidth. This is a read-only flag.
16108fbe91e7SHans Verkuil */
1611607ca46eSDavid Howells #define V4L2_DV_FL_REDUCED_BLANKING (1 << 0)
16128fbe91e7SHans Verkuil /*
16138fbe91e7SHans Verkuil * CEA-861 specific: set for CEA-861 formats with a framerate of a multiple
16148fbe91e7SHans Verkuil * of six. These formats can be optionally played at 1 / 1.001 speed.
16158fbe91e7SHans Verkuil * This is a read-only flag.
16168fbe91e7SHans Verkuil */
1617607ca46eSDavid Howells #define V4L2_DV_FL_CAN_REDUCE_FPS (1 << 1)
16188fbe91e7SHans Verkuil /*
16198fbe91e7SHans Verkuil * CEA-861 specific: only valid for video transmitters, the flag is cleared
16208fbe91e7SHans Verkuil * by receivers.
16218fbe91e7SHans Verkuil * If the framerate of the format is a multiple of six, then the pixelclock
16228fbe91e7SHans Verkuil * used to set up the transmitter is divided by 1.001 to make it compatible
16238fbe91e7SHans Verkuil * with 60 Hz based standards such as NTSC and PAL-M that use a framerate of
16248fbe91e7SHans Verkuil * 29.97 Hz. Otherwise this flag is cleared. If the transmitter can't generate
16258fbe91e7SHans Verkuil * such frequencies, then the flag will also be cleared.
16268fbe91e7SHans Verkuil */
1627607ca46eSDavid Howells #define V4L2_DV_FL_REDUCED_FPS (1 << 2)
16288fbe91e7SHans Verkuil /*
16298fbe91e7SHans Verkuil * Specific to interlaced formats: if set, then field 1 is really one half-line
16308fbe91e7SHans Verkuil * longer and field 2 is really one half-line shorter, so each field has
16318fbe91e7SHans Verkuil * exactly the same number of half-lines. Whether half-lines can be detected
16328fbe91e7SHans Verkuil * or used depends on the hardware.
16338fbe91e7SHans Verkuil */
1634292a8787SHans Verkuil #define V4L2_DV_FL_HALF_LINE (1 << 3)
16358fbe91e7SHans Verkuil /*
16368fbe91e7SHans Verkuil * If set, then this is a Consumer Electronics (CE) video format. Such formats
16375ce65d1fSHans Verkuil * differ from other formats (commonly called IT formats) in that if RGB
16385ce65d1fSHans Verkuil * encoding is used then by default the RGB values use limited range (i.e.
16395ce65d1fSHans Verkuil * use the range 16-235) as opposed to 0-255. All formats defined in CEA-861
16408fbe91e7SHans Verkuil * except for the 640x480 format are CE formats.
16418fbe91e7SHans Verkuil */
16425ce65d1fSHans Verkuil #define V4L2_DV_FL_IS_CE_VIDEO (1 << 4)
16437389e6efSCharles-Antoine Couret /* Some formats like SMPTE-125M have an interlaced signal with a odd
16447389e6efSCharles-Antoine Couret * total height. For these formats, if this flag is set, the first
16457389e6efSCharles-Antoine Couret * field has the extra line. If not, it is the second field.
16467389e6efSCharles-Antoine Couret */
16477389e6efSCharles-Antoine Couret #define V4L2_DV_FL_FIRST_FIELD_EXTRA_LINE (1 << 5)
16484f100ff6SHans Verkuil /*
16494f100ff6SHans Verkuil * If set, then the picture_aspect field is valid. Otherwise assume that the
16504f100ff6SHans Verkuil * pixels are square, so the picture aspect ratio is the same as the width to
16514f100ff6SHans Verkuil * height ratio.
16524f100ff6SHans Verkuil */
16534f100ff6SHans Verkuil #define V4L2_DV_FL_HAS_PICTURE_ASPECT (1 << 6)
16544f100ff6SHans Verkuil /*
16554f100ff6SHans Verkuil * If set, then the cea861_vic field is valid and contains the Video
16564f100ff6SHans Verkuil * Identification Code as per the CEA-861 standard.
16574f100ff6SHans Verkuil */
16584f100ff6SHans Verkuil #define V4L2_DV_FL_HAS_CEA861_VIC (1 << 7)
16594f100ff6SHans Verkuil /*
16604f100ff6SHans Verkuil * If set, then the hdmi_vic field is valid and contains the Video
16614f100ff6SHans Verkuil * Identification Code as per the HDMI standard (HDMI Vendor Specific
16624f100ff6SHans Verkuil * InfoFrame).
16634f100ff6SHans Verkuil */
16644f100ff6SHans Verkuil #define V4L2_DV_FL_HAS_HDMI_VIC (1 << 8)
1665f992cee5SJose Abreu /*
1666f992cee5SJose Abreu * CEA-861 specific: only valid for video receivers.
1667f992cee5SJose Abreu * If set, then HW can detect the difference between regular FPS and
1668f992cee5SJose Abreu * 1000/1001 FPS. Note: This flag is only valid for HDMI VIC codes with
1669f992cee5SJose Abreu * the V4L2_DV_FL_CAN_REDUCE_FPS flag set.
1670f992cee5SJose Abreu */
1671f992cee5SJose Abreu #define V4L2_DV_FL_CAN_DETECT_REDUCED_FPS (1 << 9)
1672607ca46eSDavid Howells
16737f68127fSHans Verkuil /* A few useful defines to calculate the total blanking and frame sizes */
16747f68127fSHans Verkuil #define V4L2_DV_BT_BLANKING_WIDTH(bt) \
1675aee786acSHans Verkuil ((bt)->hfrontporch + (bt)->hsync + (bt)->hbackporch)
16767f68127fSHans Verkuil #define V4L2_DV_BT_FRAME_WIDTH(bt) \
1677aee786acSHans Verkuil ((bt)->width + V4L2_DV_BT_BLANKING_WIDTH(bt))
16787f68127fSHans Verkuil #define V4L2_DV_BT_BLANKING_HEIGHT(bt) \
1679aee786acSHans Verkuil ((bt)->vfrontporch + (bt)->vsync + (bt)->vbackporch + \
16808da7f097SHans Verkuil ((bt)->interlaced ? \
16818da7f097SHans Verkuil ((bt)->il_vfrontporch + (bt)->il_vsync + (bt)->il_vbackporch) : 0))
16827f68127fSHans Verkuil #define V4L2_DV_BT_FRAME_HEIGHT(bt) \
1683aee786acSHans Verkuil ((bt)->height + V4L2_DV_BT_BLANKING_HEIGHT(bt))
1684607ca46eSDavid Howells
1685607ca46eSDavid Howells /** struct v4l2_dv_timings - DV timings
1686607ca46eSDavid Howells * @type: the type of the timings
1687607ca46eSDavid Howells * @bt: BT656/1120 timings
1688607ca46eSDavid Howells */
1689607ca46eSDavid Howells struct v4l2_dv_timings {
1690607ca46eSDavid Howells __u32 type;
1691607ca46eSDavid Howells union {
1692607ca46eSDavid Howells struct v4l2_bt_timings bt;
1693607ca46eSDavid Howells __u32 reserved[32];
1694607ca46eSDavid Howells };
1695607ca46eSDavid Howells } __attribute__ ((packed));
1696607ca46eSDavid Howells
1697607ca46eSDavid Howells /* Values for the type field */
1698607ca46eSDavid Howells #define V4L2_DV_BT_656_1120 0 /* BT.656/1120 timing type */
1699607ca46eSDavid Howells
1700607ca46eSDavid Howells
1701607ca46eSDavid Howells /** struct v4l2_enum_dv_timings - DV timings enumeration
1702607ca46eSDavid Howells * @index: enumeration index
17030349f6a5SLaurent Pinchart * @pad: the pad number for which to enumerate timings (used with
17040349f6a5SLaurent Pinchart * v4l-subdev nodes only)
1705607ca46eSDavid Howells * @reserved: must be zeroed
1706607ca46eSDavid Howells * @timings: the timings for the given index
1707607ca46eSDavid Howells */
1708607ca46eSDavid Howells struct v4l2_enum_dv_timings {
1709607ca46eSDavid Howells __u32 index;
17100349f6a5SLaurent Pinchart __u32 pad;
17110349f6a5SLaurent Pinchart __u32 reserved[2];
1712607ca46eSDavid Howells struct v4l2_dv_timings timings;
1713607ca46eSDavid Howells };
1714607ca46eSDavid Howells
1715607ca46eSDavid Howells /** struct v4l2_bt_timings_cap - BT.656/BT.1120 timing capabilities
1716607ca46eSDavid Howells * @min_width: width in pixels
1717607ca46eSDavid Howells * @max_width: width in pixels
1718607ca46eSDavid Howells * @min_height: height in lines
1719607ca46eSDavid Howells * @max_height: height in lines
1720607ca46eSDavid Howells * @min_pixelclock: Pixel clock in HZ. Ex. 74.25MHz->74250000
1721607ca46eSDavid Howells * @max_pixelclock: Pixel clock in HZ. Ex. 74.25MHz->74250000
1722607ca46eSDavid Howells * @standards: Supported standards
1723607ca46eSDavid Howells * @capabilities: Supported capabilities
1724607ca46eSDavid Howells * @reserved: Must be zeroed
1725607ca46eSDavid Howells */
1726607ca46eSDavid Howells struct v4l2_bt_timings_cap {
1727607ca46eSDavid Howells __u32 min_width;
1728607ca46eSDavid Howells __u32 max_width;
1729607ca46eSDavid Howells __u32 min_height;
1730607ca46eSDavid Howells __u32 max_height;
1731607ca46eSDavid Howells __u64 min_pixelclock;
1732607ca46eSDavid Howells __u64 max_pixelclock;
1733607ca46eSDavid Howells __u32 standards;
1734607ca46eSDavid Howells __u32 capabilities;
1735607ca46eSDavid Howells __u32 reserved[16];
1736607ca46eSDavid Howells } __attribute__ ((packed));
1737607ca46eSDavid Howells
1738607ca46eSDavid Howells /* Supports interlaced formats */
1739607ca46eSDavid Howells #define V4L2_DV_BT_CAP_INTERLACED (1 << 0)
1740607ca46eSDavid Howells /* Supports progressive formats */
1741607ca46eSDavid Howells #define V4L2_DV_BT_CAP_PROGRESSIVE (1 << 1)
1742607ca46eSDavid Howells /* Supports CVT/GTF reduced blanking */
1743607ca46eSDavid Howells #define V4L2_DV_BT_CAP_REDUCED_BLANKING (1 << 2)
1744607ca46eSDavid Howells /* Supports custom formats */
1745607ca46eSDavid Howells #define V4L2_DV_BT_CAP_CUSTOM (1 << 3)
1746607ca46eSDavid Howells
1747607ca46eSDavid Howells /** struct v4l2_dv_timings_cap - DV timings capabilities
1748607ca46eSDavid Howells * @type: the type of the timings (same as in struct v4l2_dv_timings)
17490349f6a5SLaurent Pinchart * @pad: the pad number for which to query capabilities (used with
17500349f6a5SLaurent Pinchart * v4l-subdev nodes only)
1751607ca46eSDavid Howells * @bt: the BT656/1120 timings capabilities
1752607ca46eSDavid Howells */
1753607ca46eSDavid Howells struct v4l2_dv_timings_cap {
1754607ca46eSDavid Howells __u32 type;
17550349f6a5SLaurent Pinchart __u32 pad;
17560349f6a5SLaurent Pinchart __u32 reserved[2];
1757607ca46eSDavid Howells union {
1758607ca46eSDavid Howells struct v4l2_bt_timings_cap bt;
1759607ca46eSDavid Howells __u32 raw_data[32];
1760607ca46eSDavid Howells };
1761607ca46eSDavid Howells };
1762607ca46eSDavid Howells
1763607ca46eSDavid Howells
1764607ca46eSDavid Howells /*
1765607ca46eSDavid Howells * V I D E O I N P U T S
1766607ca46eSDavid Howells */
1767607ca46eSDavid Howells struct v4l2_input {
1768607ca46eSDavid Howells __u32 index; /* Which input */
1769607ca46eSDavid Howells __u8 name[32]; /* Label */
1770607ca46eSDavid Howells __u32 type; /* Type of input */
1771607ca46eSDavid Howells __u32 audioset; /* Associated audios (bitfield) */
177226ae58f6SMarek Vasut __u32 tuner; /* Tuner index */
1773607ca46eSDavid Howells v4l2_std_id std;
1774607ca46eSDavid Howells __u32 status;
1775607ca46eSDavid Howells __u32 capabilities;
1776607ca46eSDavid Howells __u32 reserved[3];
1777607ca46eSDavid Howells };
1778607ca46eSDavid Howells
1779607ca46eSDavid Howells /* Values for the 'type' field */
1780607ca46eSDavid Howells #define V4L2_INPUT_TYPE_TUNER 1
1781607ca46eSDavid Howells #define V4L2_INPUT_TYPE_CAMERA 2
1782b2fe22d0SNick Dyer #define V4L2_INPUT_TYPE_TOUCH 3
1783607ca46eSDavid Howells
1784607ca46eSDavid Howells /* field 'status' - general */
1785607ca46eSDavid Howells #define V4L2_IN_ST_NO_POWER 0x00000001 /* Attached device is off */
1786607ca46eSDavid Howells #define V4L2_IN_ST_NO_SIGNAL 0x00000002
1787607ca46eSDavid Howells #define V4L2_IN_ST_NO_COLOR 0x00000004
1788607ca46eSDavid Howells
1789607ca46eSDavid Howells /* field 'status' - sensor orientation */
1790607ca46eSDavid Howells /* If sensor is mounted upside down set both bits */
1791607ca46eSDavid Howells #define V4L2_IN_ST_HFLIP 0x00000010 /* Frames are flipped horizontally */
1792607ca46eSDavid Howells #define V4L2_IN_ST_VFLIP 0x00000020 /* Frames are flipped vertically */
1793607ca46eSDavid Howells
1794607ca46eSDavid Howells /* field 'status' - analog */
1795607ca46eSDavid Howells #define V4L2_IN_ST_NO_H_LOCK 0x00000100 /* No horizontal sync lock */
1796607ca46eSDavid Howells #define V4L2_IN_ST_COLOR_KILL 0x00000200 /* Color killer is active */
17977389e6efSCharles-Antoine Couret #define V4L2_IN_ST_NO_V_LOCK 0x00000400 /* No vertical sync lock */
17987389e6efSCharles-Antoine Couret #define V4L2_IN_ST_NO_STD_LOCK 0x00000800 /* No standard format lock */
1799607ca46eSDavid Howells
1800607ca46eSDavid Howells /* field 'status' - digital */
1801607ca46eSDavid Howells #define V4L2_IN_ST_NO_SYNC 0x00010000 /* No synchronization lock */
1802607ca46eSDavid Howells #define V4L2_IN_ST_NO_EQU 0x00020000 /* No equalizer lock */
1803607ca46eSDavid Howells #define V4L2_IN_ST_NO_CARRIER 0x00040000 /* Carrier recovery failed */
1804607ca46eSDavid Howells
1805607ca46eSDavid Howells /* field 'status' - VCR and set-top box */
1806607ca46eSDavid Howells #define V4L2_IN_ST_MACROVISION 0x01000000 /* Macrovision detected */
1807607ca46eSDavid Howells #define V4L2_IN_ST_NO_ACCESS 0x02000000 /* Conditional access denied */
1808607ca46eSDavid Howells #define V4L2_IN_ST_VTR 0x04000000 /* VTR time constant */
1809607ca46eSDavid Howells
1810607ca46eSDavid Howells /* capabilities flags */
1811607ca46eSDavid Howells #define V4L2_IN_CAP_DV_TIMINGS 0x00000002 /* Supports S_DV_TIMINGS */
1812607ca46eSDavid Howells #define V4L2_IN_CAP_CUSTOM_TIMINGS V4L2_IN_CAP_DV_TIMINGS /* For compatibility */
1813607ca46eSDavid Howells #define V4L2_IN_CAP_STD 0x00000004 /* Supports S_STD */
18148af03459SSakari Ailus #define V4L2_IN_CAP_NATIVE_SIZE 0x00000008 /* Supports setting native size */
1815607ca46eSDavid Howells
1816607ca46eSDavid Howells /*
1817607ca46eSDavid Howells * V I D E O O U T P U T S
1818607ca46eSDavid Howells */
1819607ca46eSDavid Howells struct v4l2_output {
1820607ca46eSDavid Howells __u32 index; /* Which output */
1821607ca46eSDavid Howells __u8 name[32]; /* Label */
1822607ca46eSDavid Howells __u32 type; /* Type of output */
1823607ca46eSDavid Howells __u32 audioset; /* Associated audios (bitfield) */
1824607ca46eSDavid Howells __u32 modulator; /* Associated modulator */
1825607ca46eSDavid Howells v4l2_std_id std;
1826607ca46eSDavid Howells __u32 capabilities;
1827607ca46eSDavid Howells __u32 reserved[3];
1828607ca46eSDavid Howells };
1829607ca46eSDavid Howells /* Values for the 'type' field */
1830607ca46eSDavid Howells #define V4L2_OUTPUT_TYPE_MODULATOR 1
1831607ca46eSDavid Howells #define V4L2_OUTPUT_TYPE_ANALOG 2
1832607ca46eSDavid Howells #define V4L2_OUTPUT_TYPE_ANALOGVGAOVERLAY 3
1833607ca46eSDavid Howells
1834607ca46eSDavid Howells /* capabilities flags */
1835607ca46eSDavid Howells #define V4L2_OUT_CAP_DV_TIMINGS 0x00000002 /* Supports S_DV_TIMINGS */
1836607ca46eSDavid Howells #define V4L2_OUT_CAP_CUSTOM_TIMINGS V4L2_OUT_CAP_DV_TIMINGS /* For compatibility */
1837607ca46eSDavid Howells #define V4L2_OUT_CAP_STD 0x00000004 /* Supports S_STD */
18388af03459SSakari Ailus #define V4L2_OUT_CAP_NATIVE_SIZE 0x00000008 /* Supports setting native size */
1839607ca46eSDavid Howells
1840607ca46eSDavid Howells /*
1841607ca46eSDavid Howells * C O N T R O L S
1842607ca46eSDavid Howells */
1843607ca46eSDavid Howells struct v4l2_control {
1844607ca46eSDavid Howells __u32 id;
1845607ca46eSDavid Howells __s32 value;
1846607ca46eSDavid Howells };
1847607ca46eSDavid Howells
1848607ca46eSDavid Howells struct v4l2_ext_control {
1849607ca46eSDavid Howells __u32 id;
1850607ca46eSDavid Howells __u32 size;
1851607ca46eSDavid Howells __u32 reserved2[1];
1852607ca46eSDavid Howells union {
1853607ca46eSDavid Howells __s32 value;
1854607ca46eSDavid Howells __s64 value64;
1855eadf9e26SHans Verkuil char __user *string;
1856eadf9e26SHans Verkuil __u8 __user *p_u8;
1857eadf9e26SHans Verkuil __u16 __user *p_u16;
1858eadf9e26SHans Verkuil __u32 __user *p_u32;
18593f6375a2SDaniel Lundberg Pedersen __s32 __user *p_s32;
18603f6375a2SDaniel Lundberg Pedersen __s64 __user *p_s64;
1861134f9e9eSRicardo Ribalda Delgado struct v4l2_area __user *p_area;
18623b9d7340SYunke Cao struct v4l2_rect __user *p_rect;
186346a309d2SEzequiel Garcia struct v4l2_ctrl_h264_sps __user *p_h264_sps;
186470be8a84SHans Verkuil struct v4l2_ctrl_h264_pps __user *p_h264_pps;
186546a309d2SEzequiel Garcia struct v4l2_ctrl_h264_scaling_matrix __user *p_h264_scaling_matrix;
186646a309d2SEzequiel Garcia struct v4l2_ctrl_h264_pred_weights __user *p_h264_pred_weights;
186746a309d2SEzequiel Garcia struct v4l2_ctrl_h264_slice_params __user *p_h264_slice_params;
186846a309d2SEzequiel Garcia struct v4l2_ctrl_h264_decode_params __user *p_h264_decode_params;
1869206bc0f6SHans Verkuil struct v4l2_ctrl_fwht_params __user *p_fwht_params;
1870363240ceSEzequiel Garcia struct v4l2_ctrl_vp8_frame __user *p_vp8_frame;
1871f4815b39SEzequiel Garcia struct v4l2_ctrl_mpeg2_sequence __user *p_mpeg2_sequence;
1872f4815b39SEzequiel Garcia struct v4l2_ctrl_mpeg2_picture __user *p_mpeg2_picture;
1873f4815b39SEzequiel Garcia struct v4l2_ctrl_mpeg2_quantisation __user *p_mpeg2_quantisation;
1874b88dbe38SAndrzej Pietrasiewicz struct v4l2_ctrl_vp9_compressed_hdr __user *p_vp9_compressed_hdr_probs;
1875b88dbe38SAndrzej Pietrasiewicz struct v4l2_ctrl_vp9_frame __user *p_vp9_frame;
1876ca24fef0SBenjamin Gaignard struct v4l2_ctrl_hevc_sps __user *p_hevc_sps;
1877ca24fef0SBenjamin Gaignard struct v4l2_ctrl_hevc_pps __user *p_hevc_pps;
1878ca24fef0SBenjamin Gaignard struct v4l2_ctrl_hevc_slice_params __user *p_hevc_slice_params;
1879ca24fef0SBenjamin Gaignard struct v4l2_ctrl_hevc_scaling_matrix __user *p_hevc_scaling_matrix;
1880ca24fef0SBenjamin Gaignard struct v4l2_ctrl_hevc_decode_params __user *p_hevc_decode_params;
18819de30f57SDaniel Almeida struct v4l2_ctrl_av1_sequence __user *p_av1_sequence;
18829de30f57SDaniel Almeida struct v4l2_ctrl_av1_tile_group_entry __user *p_av1_tile_group_entry;
18839de30f57SDaniel Almeida struct v4l2_ctrl_av1_frame __user *p_av1_frame;
18849de30f57SDaniel Almeida struct v4l2_ctrl_av1_film_grain __user *p_av1_film_grain;
188526846ddaSHans Verkuil struct v4l2_ctrl_hdr10_cll_info __user *p_hdr10_cll_info;
188626846ddaSHans Verkuil struct v4l2_ctrl_hdr10_mastering_display __user *p_hdr10_mastering_display;
1887eadf9e26SHans Verkuil void __user *ptr;
188881741e80SRicardo Ribalda } __attribute__ ((packed));
1889607ca46eSDavid Howells } __attribute__ ((packed));
1890607ca46eSDavid Howells
1891607ca46eSDavid Howells struct v4l2_ext_controls {
189235ec2a2fSRicardo Ribalda union {
18930f8017beSRicardo Ribalda #ifndef __KERNEL__
1894607ca46eSDavid Howells __u32 ctrl_class;
18950f8017beSRicardo Ribalda #endif
189635ec2a2fSRicardo Ribalda __u32 which;
189735ec2a2fSRicardo Ribalda };
1898607ca46eSDavid Howells __u32 count;
1899607ca46eSDavid Howells __u32 error_idx;
1900f23317adSAlexandre Courbot __s32 request_fd;
1901f23317adSAlexandre Courbot __u32 reserved[1];
1902607ca46eSDavid Howells struct v4l2_ext_control *controls;
1903607ca46eSDavid Howells };
1904607ca46eSDavid Howells
1905607ca46eSDavid Howells #define V4L2_CTRL_ID_MASK (0x0fffffff)
19060f8017beSRicardo Ribalda #ifndef __KERNEL__
1907607ca46eSDavid Howells #define V4L2_CTRL_ID2CLASS(id) ((id) & 0x0fff0000UL)
19080f8017beSRicardo Ribalda #endif
19090f8017beSRicardo Ribalda #define V4L2_CTRL_ID2WHICH(id) ((id) & 0x0fff0000UL)
1910607ca46eSDavid Howells #define V4L2_CTRL_DRIVER_PRIV(id) (((id) & 0xffff) >= 0x1000)
19115082c241SHans Verkuil #define V4L2_CTRL_MAX_DIMS (4)
191235ec2a2fSRicardo Ribalda #define V4L2_CTRL_WHICH_CUR_VAL 0
191335ec2a2fSRicardo Ribalda #define V4L2_CTRL_WHICH_DEF_VAL 0x0f000000
1914f23317adSAlexandre Courbot #define V4L2_CTRL_WHICH_REQUEST_VAL 0x0f010000
1915*a5bd42aaSHans Verkuil #define V4L2_CTRL_WHICH_MIN_VAL 0x0f020000
1916*a5bd42aaSHans Verkuil #define V4L2_CTRL_WHICH_MAX_VAL 0x0f030000
1917607ca46eSDavid Howells
1918607ca46eSDavid Howells enum v4l2_ctrl_type {
1919607ca46eSDavid Howells V4L2_CTRL_TYPE_INTEGER = 1,
1920607ca46eSDavid Howells V4L2_CTRL_TYPE_BOOLEAN = 2,
1921607ca46eSDavid Howells V4L2_CTRL_TYPE_MENU = 3,
1922607ca46eSDavid Howells V4L2_CTRL_TYPE_BUTTON = 4,
1923607ca46eSDavid Howells V4L2_CTRL_TYPE_INTEGER64 = 5,
1924607ca46eSDavid Howells V4L2_CTRL_TYPE_CTRL_CLASS = 6,
1925607ca46eSDavid Howells V4L2_CTRL_TYPE_STRING = 7,
1926607ca46eSDavid Howells V4L2_CTRL_TYPE_BITMASK = 8,
1927607ca46eSDavid Howells V4L2_CTRL_TYPE_INTEGER_MENU = 9,
19287e6a6821SHans Verkuil
19297e6a6821SHans Verkuil /* Compound types are >= 0x0100 */
19307e6a6821SHans Verkuil V4L2_CTRL_COMPOUND_TYPES = 0x0100,
1931dda4a4d5SHans Verkuil V4L2_CTRL_TYPE_U8 = 0x0100,
1932dda4a4d5SHans Verkuil V4L2_CTRL_TYPE_U16 = 0x0101,
1933811c5081SHans Verkuil V4L2_CTRL_TYPE_U32 = 0x0102,
1934d1dc4937SRicardo Ribalda Delgado V4L2_CTRL_TYPE_AREA = 0x0106,
19353b9d7340SYunke Cao V4L2_CTRL_TYPE_RECT = 0x0107,
1936a7ead397SEzequiel Garcia
19371ad0de78SStanimir Varbanov V4L2_CTRL_TYPE_HDR10_CLL_INFO = 0x0110,
19381ad0de78SStanimir Varbanov V4L2_CTRL_TYPE_HDR10_MASTERING_DISPLAY = 0x0111,
19391ad0de78SStanimir Varbanov
1940a7ead397SEzequiel Garcia V4L2_CTRL_TYPE_H264_SPS = 0x0200,
1941a7ead397SEzequiel Garcia V4L2_CTRL_TYPE_H264_PPS = 0x0201,
1942a7ead397SEzequiel Garcia V4L2_CTRL_TYPE_H264_SCALING_MATRIX = 0x0202,
1943a7ead397SEzequiel Garcia V4L2_CTRL_TYPE_H264_SLICE_PARAMS = 0x0203,
1944a7ead397SEzequiel Garcia V4L2_CTRL_TYPE_H264_DECODE_PARAMS = 0x0204,
1945a7ead397SEzequiel Garcia V4L2_CTRL_TYPE_H264_PRED_WEIGHTS = 0x0205,
1946206bc0f6SHans Verkuil
1947206bc0f6SHans Verkuil V4L2_CTRL_TYPE_FWHT_PARAMS = 0x0220,
1948e74b504aSEzequiel Garcia
1949e74b504aSEzequiel Garcia V4L2_CTRL_TYPE_VP8_FRAME = 0x0240,
19502f096882SEzequiel Garcia
19512f096882SEzequiel Garcia V4L2_CTRL_TYPE_MPEG2_QUANTISATION = 0x0250,
19522f096882SEzequiel Garcia V4L2_CTRL_TYPE_MPEG2_SEQUENCE = 0x0251,
19532f096882SEzequiel Garcia V4L2_CTRL_TYPE_MPEG2_PICTURE = 0x0252,
1954b88dbe38SAndrzej Pietrasiewicz
1955b88dbe38SAndrzej Pietrasiewicz V4L2_CTRL_TYPE_VP9_COMPRESSED_HDR = 0x0260,
1956b88dbe38SAndrzej Pietrasiewicz V4L2_CTRL_TYPE_VP9_FRAME = 0x0261,
195716e2d220SBenjamin Gaignard
195816e2d220SBenjamin Gaignard V4L2_CTRL_TYPE_HEVC_SPS = 0x0270,
195916e2d220SBenjamin Gaignard V4L2_CTRL_TYPE_HEVC_PPS = 0x0271,
196016e2d220SBenjamin Gaignard V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS = 0x0272,
196116e2d220SBenjamin Gaignard V4L2_CTRL_TYPE_HEVC_SCALING_MATRIX = 0x0273,
196216e2d220SBenjamin Gaignard V4L2_CTRL_TYPE_HEVC_DECODE_PARAMS = 0x0274,
19639de30f57SDaniel Almeida
19649de30f57SDaniel Almeida V4L2_CTRL_TYPE_AV1_SEQUENCE = 0x280,
19659de30f57SDaniel Almeida V4L2_CTRL_TYPE_AV1_TILE_GROUP_ENTRY = 0x281,
19669de30f57SDaniel Almeida V4L2_CTRL_TYPE_AV1_FRAME = 0x282,
19679de30f57SDaniel Almeida V4L2_CTRL_TYPE_AV1_FILM_GRAIN = 0x283,
1968607ca46eSDavid Howells };
1969607ca46eSDavid Howells
1970607ca46eSDavid Howells /* Used in the VIDIOC_QUERYCTRL ioctl for querying controls */
1971607ca46eSDavid Howells struct v4l2_queryctrl {
1972607ca46eSDavid Howells __u32 id;
1973607ca46eSDavid Howells __u32 type; /* enum v4l2_ctrl_type */
1974607ca46eSDavid Howells __u8 name[32]; /* Whatever */
1975607ca46eSDavid Howells __s32 minimum; /* Note signedness */
1976607ca46eSDavid Howells __s32 maximum;
1977607ca46eSDavid Howells __s32 step;
1978607ca46eSDavid Howells __s32 default_value;
1979607ca46eSDavid Howells __u32 flags;
1980607ca46eSDavid Howells __u32 reserved[2];
1981607ca46eSDavid Howells };
1982607ca46eSDavid Howells
19835082c241SHans Verkuil /* Used in the VIDIOC_QUERY_EXT_CTRL ioctl for querying extended controls */
19845082c241SHans Verkuil struct v4l2_query_ext_ctrl {
19855082c241SHans Verkuil __u32 id;
19865082c241SHans Verkuil __u32 type;
19875082c241SHans Verkuil char name[32];
19885082c241SHans Verkuil __s64 minimum;
19895082c241SHans Verkuil __s64 maximum;
19905082c241SHans Verkuil __u64 step;
19915082c241SHans Verkuil __s64 default_value;
19925082c241SHans Verkuil __u32 flags;
19935082c241SHans Verkuil __u32 elem_size;
19945082c241SHans Verkuil __u32 elems;
19955082c241SHans Verkuil __u32 nr_of_dims;
19965082c241SHans Verkuil __u32 dims[V4L2_CTRL_MAX_DIMS];
19975082c241SHans Verkuil __u32 reserved[32];
19985082c241SHans Verkuil };
19995082c241SHans Verkuil
2000607ca46eSDavid Howells /* Used in the VIDIOC_QUERYMENU ioctl for querying menu items */
2001607ca46eSDavid Howells struct v4l2_querymenu {
2002607ca46eSDavid Howells __u32 id;
2003607ca46eSDavid Howells __u32 index;
2004607ca46eSDavid Howells union {
2005607ca46eSDavid Howells __u8 name[32]; /* Whatever */
2006607ca46eSDavid Howells __s64 value;
2007607ca46eSDavid Howells };
2008607ca46eSDavid Howells __u32 reserved;
2009607ca46eSDavid Howells } __attribute__ ((packed));
2010607ca46eSDavid Howells
2011607ca46eSDavid Howells /* Control flags */
2012607ca46eSDavid Howells #define V4L2_CTRL_FLAG_DISABLED 0x0001
2013607ca46eSDavid Howells #define V4L2_CTRL_FLAG_GRABBED 0x0002
2014607ca46eSDavid Howells #define V4L2_CTRL_FLAG_READ_ONLY 0x0004
2015607ca46eSDavid Howells #define V4L2_CTRL_FLAG_UPDATE 0x0008
2016607ca46eSDavid Howells #define V4L2_CTRL_FLAG_INACTIVE 0x0010
2017607ca46eSDavid Howells #define V4L2_CTRL_FLAG_SLIDER 0x0020
2018607ca46eSDavid Howells #define V4L2_CTRL_FLAG_WRITE_ONLY 0x0040
2019607ca46eSDavid Howells #define V4L2_CTRL_FLAG_VOLATILE 0x0080
20207e6a6821SHans Verkuil #define V4L2_CTRL_FLAG_HAS_PAYLOAD 0x0100
2021b6e5b8f1SRicardo Ribalda #define V4L2_CTRL_FLAG_EXECUTE_ON_WRITE 0x0200
20226df8be76SHans Verkuil #define V4L2_CTRL_FLAG_MODIFY_LAYOUT 0x0400
202364fe675eSHans Verkuil #define V4L2_CTRL_FLAG_DYNAMIC_ARRAY 0x0800
2024*a5bd42aaSHans Verkuil #define V4L2_CTRL_FLAG_HAS_WHICH_MIN_MAX 0x1000
2025607ca46eSDavid Howells
20267e6a6821SHans Verkuil /* Query flags, to be ORed with the control ID */
2027607ca46eSDavid Howells #define V4L2_CTRL_FLAG_NEXT_CTRL 0x80000000
20287e6a6821SHans Verkuil #define V4L2_CTRL_FLAG_NEXT_COMPOUND 0x40000000
2029607ca46eSDavid Howells
2030607ca46eSDavid Howells /* User-class control IDs defined by V4L2 */
2031607ca46eSDavid Howells #define V4L2_CID_MAX_CTRLS 1024
2032607ca46eSDavid Howells /* IDs reserved for driver specific controls */
2033607ca46eSDavid Howells #define V4L2_CID_PRIVATE_BASE 0x08000000
2034607ca46eSDavid Howells
2035607ca46eSDavid Howells
2036607ca46eSDavid Howells /*
2037607ca46eSDavid Howells * T U N I N G
2038607ca46eSDavid Howells */
2039607ca46eSDavid Howells struct v4l2_tuner {
2040607ca46eSDavid Howells __u32 index;
2041607ca46eSDavid Howells __u8 name[32];
2042607ca46eSDavid Howells __u32 type; /* enum v4l2_tuner_type */
2043607ca46eSDavid Howells __u32 capability;
2044607ca46eSDavid Howells __u32 rangelow;
2045607ca46eSDavid Howells __u32 rangehigh;
2046607ca46eSDavid Howells __u32 rxsubchans;
2047607ca46eSDavid Howells __u32 audmode;
2048607ca46eSDavid Howells __s32 signal;
2049607ca46eSDavid Howells __s32 afc;
2050607ca46eSDavid Howells __u32 reserved[4];
2051607ca46eSDavid Howells };
2052607ca46eSDavid Howells
2053607ca46eSDavid Howells struct v4l2_modulator {
2054607ca46eSDavid Howells __u32 index;
2055607ca46eSDavid Howells __u8 name[32];
2056607ca46eSDavid Howells __u32 capability;
2057607ca46eSDavid Howells __u32 rangelow;
2058607ca46eSDavid Howells __u32 rangehigh;
2059607ca46eSDavid Howells __u32 txsubchans;
20604124a3c4SAntti Palosaari __u32 type; /* enum v4l2_tuner_type */
20614124a3c4SAntti Palosaari __u32 reserved[3];
2062607ca46eSDavid Howells };
2063607ca46eSDavid Howells
2064607ca46eSDavid Howells /* Flags for the 'capability' field */
2065607ca46eSDavid Howells #define V4L2_TUNER_CAP_LOW 0x0001
2066607ca46eSDavid Howells #define V4L2_TUNER_CAP_NORM 0x0002
2067607ca46eSDavid Howells #define V4L2_TUNER_CAP_HWSEEK_BOUNDED 0x0004
2068607ca46eSDavid Howells #define V4L2_TUNER_CAP_HWSEEK_WRAP 0x0008
2069607ca46eSDavid Howells #define V4L2_TUNER_CAP_STEREO 0x0010
2070607ca46eSDavid Howells #define V4L2_TUNER_CAP_LANG2 0x0020
2071607ca46eSDavid Howells #define V4L2_TUNER_CAP_SAP 0x0020
2072607ca46eSDavid Howells #define V4L2_TUNER_CAP_LANG1 0x0040
2073607ca46eSDavid Howells #define V4L2_TUNER_CAP_RDS 0x0080
2074607ca46eSDavid Howells #define V4L2_TUNER_CAP_RDS_BLOCK_IO 0x0100
2075607ca46eSDavid Howells #define V4L2_TUNER_CAP_RDS_CONTROLS 0x0200
2076607ca46eSDavid Howells #define V4L2_TUNER_CAP_FREQ_BANDS 0x0400
2077607ca46eSDavid Howells #define V4L2_TUNER_CAP_HWSEEK_PROG_LIM 0x0800
207867f9a117SAntti Palosaari #define V4L2_TUNER_CAP_1HZ 0x1000
2079607ca46eSDavid Howells
2080607ca46eSDavid Howells /* Flags for the 'rxsubchans' field */
2081607ca46eSDavid Howells #define V4L2_TUNER_SUB_MONO 0x0001
2082607ca46eSDavid Howells #define V4L2_TUNER_SUB_STEREO 0x0002
2083607ca46eSDavid Howells #define V4L2_TUNER_SUB_LANG2 0x0004
2084607ca46eSDavid Howells #define V4L2_TUNER_SUB_SAP 0x0004
2085607ca46eSDavid Howells #define V4L2_TUNER_SUB_LANG1 0x0008
2086607ca46eSDavid Howells #define V4L2_TUNER_SUB_RDS 0x0010
2087607ca46eSDavid Howells
2088607ca46eSDavid Howells /* Values for the 'audmode' field */
2089607ca46eSDavid Howells #define V4L2_TUNER_MODE_MONO 0x0000
2090607ca46eSDavid Howells #define V4L2_TUNER_MODE_STEREO 0x0001
2091607ca46eSDavid Howells #define V4L2_TUNER_MODE_LANG2 0x0002
2092607ca46eSDavid Howells #define V4L2_TUNER_MODE_SAP 0x0002
2093607ca46eSDavid Howells #define V4L2_TUNER_MODE_LANG1 0x0003
2094607ca46eSDavid Howells #define V4L2_TUNER_MODE_LANG1_LANG2 0x0004
2095607ca46eSDavid Howells
2096607ca46eSDavid Howells struct v4l2_frequency {
2097607ca46eSDavid Howells __u32 tuner;
2098607ca46eSDavid Howells __u32 type; /* enum v4l2_tuner_type */
2099607ca46eSDavid Howells __u32 frequency;
2100607ca46eSDavid Howells __u32 reserved[8];
2101607ca46eSDavid Howells };
2102607ca46eSDavid Howells
2103607ca46eSDavid Howells #define V4L2_BAND_MODULATION_VSB (1 << 1)
2104607ca46eSDavid Howells #define V4L2_BAND_MODULATION_FM (1 << 2)
2105607ca46eSDavid Howells #define V4L2_BAND_MODULATION_AM (1 << 3)
2106607ca46eSDavid Howells
2107607ca46eSDavid Howells struct v4l2_frequency_band {
2108607ca46eSDavid Howells __u32 tuner;
2109607ca46eSDavid Howells __u32 type; /* enum v4l2_tuner_type */
2110607ca46eSDavid Howells __u32 index;
2111607ca46eSDavid Howells __u32 capability;
2112607ca46eSDavid Howells __u32 rangelow;
2113607ca46eSDavid Howells __u32 rangehigh;
2114607ca46eSDavid Howells __u32 modulation;
2115607ca46eSDavid Howells __u32 reserved[9];
2116607ca46eSDavid Howells };
2117607ca46eSDavid Howells
2118607ca46eSDavid Howells struct v4l2_hw_freq_seek {
2119607ca46eSDavid Howells __u32 tuner;
2120607ca46eSDavid Howells __u32 type; /* enum v4l2_tuner_type */
2121607ca46eSDavid Howells __u32 seek_upward;
2122607ca46eSDavid Howells __u32 wrap_around;
2123607ca46eSDavid Howells __u32 spacing;
2124607ca46eSDavid Howells __u32 rangelow;
2125607ca46eSDavid Howells __u32 rangehigh;
2126607ca46eSDavid Howells __u32 reserved[5];
2127607ca46eSDavid Howells };
2128607ca46eSDavid Howells
2129607ca46eSDavid Howells /*
2130607ca46eSDavid Howells * R D S
2131607ca46eSDavid Howells */
2132607ca46eSDavid Howells
2133607ca46eSDavid Howells struct v4l2_rds_data {
2134607ca46eSDavid Howells __u8 lsb;
2135607ca46eSDavid Howells __u8 msb;
2136607ca46eSDavid Howells __u8 block;
2137607ca46eSDavid Howells } __attribute__ ((packed));
2138607ca46eSDavid Howells
2139607ca46eSDavid Howells #define V4L2_RDS_BLOCK_MSK 0x7
2140607ca46eSDavid Howells #define V4L2_RDS_BLOCK_A 0
2141607ca46eSDavid Howells #define V4L2_RDS_BLOCK_B 1
2142607ca46eSDavid Howells #define V4L2_RDS_BLOCK_C 2
2143607ca46eSDavid Howells #define V4L2_RDS_BLOCK_D 3
2144607ca46eSDavid Howells #define V4L2_RDS_BLOCK_C_ALT 4
2145607ca46eSDavid Howells #define V4L2_RDS_BLOCK_INVALID 7
2146607ca46eSDavid Howells
2147607ca46eSDavid Howells #define V4L2_RDS_BLOCK_CORRECTED 0x40
2148607ca46eSDavid Howells #define V4L2_RDS_BLOCK_ERROR 0x80
2149607ca46eSDavid Howells
2150607ca46eSDavid Howells /*
2151607ca46eSDavid Howells * A U D I O
2152607ca46eSDavid Howells */
2153607ca46eSDavid Howells struct v4l2_audio {
2154607ca46eSDavid Howells __u32 index;
2155607ca46eSDavid Howells __u8 name[32];
2156607ca46eSDavid Howells __u32 capability;
2157607ca46eSDavid Howells __u32 mode;
2158607ca46eSDavid Howells __u32 reserved[2];
2159607ca46eSDavid Howells };
2160607ca46eSDavid Howells
2161607ca46eSDavid Howells /* Flags for the 'capability' field */
2162607ca46eSDavid Howells #define V4L2_AUDCAP_STEREO 0x00001
2163607ca46eSDavid Howells #define V4L2_AUDCAP_AVL 0x00002
2164607ca46eSDavid Howells
2165607ca46eSDavid Howells /* Flags for the 'mode' field */
2166607ca46eSDavid Howells #define V4L2_AUDMODE_AVL 0x00001
2167607ca46eSDavid Howells
2168607ca46eSDavid Howells struct v4l2_audioout {
2169607ca46eSDavid Howells __u32 index;
2170607ca46eSDavid Howells __u8 name[32];
2171607ca46eSDavid Howells __u32 capability;
2172607ca46eSDavid Howells __u32 mode;
2173607ca46eSDavid Howells __u32 reserved[2];
2174607ca46eSDavid Howells };
2175607ca46eSDavid Howells
2176607ca46eSDavid Howells /*
2177607ca46eSDavid Howells * M P E G S E R V I C E S
2178607ca46eSDavid Howells */
2179607ca46eSDavid Howells #if 1
2180607ca46eSDavid Howells #define V4L2_ENC_IDX_FRAME_I (0)
2181607ca46eSDavid Howells #define V4L2_ENC_IDX_FRAME_P (1)
2182607ca46eSDavid Howells #define V4L2_ENC_IDX_FRAME_B (2)
2183607ca46eSDavid Howells #define V4L2_ENC_IDX_FRAME_MASK (0xf)
2184607ca46eSDavid Howells
2185607ca46eSDavid Howells struct v4l2_enc_idx_entry {
2186607ca46eSDavid Howells __u64 offset;
2187607ca46eSDavid Howells __u64 pts;
2188607ca46eSDavid Howells __u32 length;
2189607ca46eSDavid Howells __u32 flags;
2190607ca46eSDavid Howells __u32 reserved[2];
2191607ca46eSDavid Howells };
2192607ca46eSDavid Howells
2193607ca46eSDavid Howells #define V4L2_ENC_IDX_ENTRIES (64)
2194607ca46eSDavid Howells struct v4l2_enc_idx {
2195607ca46eSDavid Howells __u32 entries;
2196607ca46eSDavid Howells __u32 entries_cap;
2197607ca46eSDavid Howells __u32 reserved[4];
2198607ca46eSDavid Howells struct v4l2_enc_idx_entry entry[V4L2_ENC_IDX_ENTRIES];
2199607ca46eSDavid Howells };
2200607ca46eSDavid Howells
2201607ca46eSDavid Howells
2202607ca46eSDavid Howells #define V4L2_ENC_CMD_START (0)
2203607ca46eSDavid Howells #define V4L2_ENC_CMD_STOP (1)
2204607ca46eSDavid Howells #define V4L2_ENC_CMD_PAUSE (2)
2205607ca46eSDavid Howells #define V4L2_ENC_CMD_RESUME (3)
2206607ca46eSDavid Howells
2207607ca46eSDavid Howells /* Flags for V4L2_ENC_CMD_STOP */
2208607ca46eSDavid Howells #define V4L2_ENC_CMD_STOP_AT_GOP_END (1 << 0)
2209607ca46eSDavid Howells
2210607ca46eSDavid Howells struct v4l2_encoder_cmd {
2211607ca46eSDavid Howells __u32 cmd;
2212607ca46eSDavid Howells __u32 flags;
2213607ca46eSDavid Howells union {
2214607ca46eSDavid Howells struct {
2215607ca46eSDavid Howells __u32 data[8];
2216607ca46eSDavid Howells } raw;
2217607ca46eSDavid Howells };
2218607ca46eSDavid Howells };
2219607ca46eSDavid Howells
2220607ca46eSDavid Howells /* Decoder commands */
2221607ca46eSDavid Howells #define V4L2_DEC_CMD_START (0)
2222607ca46eSDavid Howells #define V4L2_DEC_CMD_STOP (1)
2223607ca46eSDavid Howells #define V4L2_DEC_CMD_PAUSE (2)
2224607ca46eSDavid Howells #define V4L2_DEC_CMD_RESUME (3)
2225bac06ec3SHans Verkuil #define V4L2_DEC_CMD_FLUSH (4)
2226607ca46eSDavid Howells
2227607ca46eSDavid Howells /* Flags for V4L2_DEC_CMD_START */
2228607ca46eSDavid Howells #define V4L2_DEC_CMD_START_MUTE_AUDIO (1 << 0)
2229607ca46eSDavid Howells
2230607ca46eSDavid Howells /* Flags for V4L2_DEC_CMD_PAUSE */
2231607ca46eSDavid Howells #define V4L2_DEC_CMD_PAUSE_TO_BLACK (1 << 0)
2232607ca46eSDavid Howells
2233607ca46eSDavid Howells /* Flags for V4L2_DEC_CMD_STOP */
2234607ca46eSDavid Howells #define V4L2_DEC_CMD_STOP_TO_BLACK (1 << 0)
2235607ca46eSDavid Howells #define V4L2_DEC_CMD_STOP_IMMEDIATELY (1 << 1)
2236607ca46eSDavid Howells
2237607ca46eSDavid Howells /* Play format requirements (returned by the driver): */
2238607ca46eSDavid Howells
2239607ca46eSDavid Howells /* The decoder has no special format requirements */
2240607ca46eSDavid Howells #define V4L2_DEC_START_FMT_NONE (0)
2241607ca46eSDavid Howells /* The decoder requires full GOPs */
2242607ca46eSDavid Howells #define V4L2_DEC_START_FMT_GOP (1)
2243607ca46eSDavid Howells
2244607ca46eSDavid Howells /* The structure must be zeroed before use by the application
2245607ca46eSDavid Howells This ensures it can be extended safely in the future. */
2246607ca46eSDavid Howells struct v4l2_decoder_cmd {
2247607ca46eSDavid Howells __u32 cmd;
2248607ca46eSDavid Howells __u32 flags;
2249607ca46eSDavid Howells union {
2250607ca46eSDavid Howells struct {
2251607ca46eSDavid Howells __u64 pts;
2252607ca46eSDavid Howells } stop;
2253607ca46eSDavid Howells
2254607ca46eSDavid Howells struct {
2255607ca46eSDavid Howells /* 0 or 1000 specifies normal speed,
2256607ca46eSDavid Howells 1 specifies forward single stepping,
2257607ca46eSDavid Howells -1 specifies backward single stepping,
2258607ca46eSDavid Howells >1: playback at speed/1000 of the normal speed,
2259607ca46eSDavid Howells <-1: reverse playback at (-speed/1000) of the normal speed. */
2260607ca46eSDavid Howells __s32 speed;
2261607ca46eSDavid Howells __u32 format;
2262607ca46eSDavid Howells } start;
2263607ca46eSDavid Howells
2264607ca46eSDavid Howells struct {
2265607ca46eSDavid Howells __u32 data[16];
2266607ca46eSDavid Howells } raw;
2267607ca46eSDavid Howells };
2268607ca46eSDavid Howells };
2269607ca46eSDavid Howells #endif
2270607ca46eSDavid Howells
2271607ca46eSDavid Howells
2272607ca46eSDavid Howells /*
2273607ca46eSDavid Howells * D A T A S E R V I C E S ( V B I )
2274607ca46eSDavid Howells *
2275607ca46eSDavid Howells * Data services API by Michael Schimek
2276607ca46eSDavid Howells */
2277607ca46eSDavid Howells
2278607ca46eSDavid Howells /* Raw VBI */
2279607ca46eSDavid Howells struct v4l2_vbi_format {
2280607ca46eSDavid Howells __u32 sampling_rate; /* in 1 Hz */
2281607ca46eSDavid Howells __u32 offset;
2282607ca46eSDavid Howells __u32 samples_per_line;
2283607ca46eSDavid Howells __u32 sample_format; /* V4L2_PIX_FMT_* */
2284607ca46eSDavid Howells __s32 start[2];
2285607ca46eSDavid Howells __u32 count[2];
2286607ca46eSDavid Howells __u32 flags; /* V4L2_VBI_* */
2287607ca46eSDavid Howells __u32 reserved[2]; /* must be zero */
2288607ca46eSDavid Howells };
2289607ca46eSDavid Howells
2290607ca46eSDavid Howells /* VBI flags */
2291607ca46eSDavid Howells #define V4L2_VBI_UNSYNC (1 << 0)
2292607ca46eSDavid Howells #define V4L2_VBI_INTERLACED (1 << 1)
2293607ca46eSDavid Howells
2294273886b4SHans Verkuil /* ITU-R start lines for each field */
2295273886b4SHans Verkuil #define V4L2_VBI_ITU_525_F1_START (1)
2296273886b4SHans Verkuil #define V4L2_VBI_ITU_525_F2_START (264)
2297273886b4SHans Verkuil #define V4L2_VBI_ITU_625_F1_START (1)
2298273886b4SHans Verkuil #define V4L2_VBI_ITU_625_F2_START (314)
2299273886b4SHans Verkuil
2300607ca46eSDavid Howells /* Sliced VBI
2301607ca46eSDavid Howells *
2302607ca46eSDavid Howells * This implements is a proposal V4L2 API to allow SLICED VBI
2303607ca46eSDavid Howells * required for some hardware encoders. It should change without
2304607ca46eSDavid Howells * notice in the definitive implementation.
2305607ca46eSDavid Howells */
2306607ca46eSDavid Howells
2307607ca46eSDavid Howells struct v4l2_sliced_vbi_format {
2308607ca46eSDavid Howells __u16 service_set;
2309607ca46eSDavid Howells /* service_lines[0][...] specifies lines 0-23 (1-23 used) of the first field
2310607ca46eSDavid Howells service_lines[1][...] specifies lines 0-23 (1-23 used) of the second field
2311607ca46eSDavid Howells (equals frame lines 313-336 for 625 line video
2312607ca46eSDavid Howells standards, 263-286 for 525 line standards) */
2313607ca46eSDavid Howells __u16 service_lines[2][24];
2314607ca46eSDavid Howells __u32 io_size;
2315607ca46eSDavid Howells __u32 reserved[2]; /* must be zero */
2316607ca46eSDavid Howells };
2317607ca46eSDavid Howells
2318607ca46eSDavid Howells /* Teletext World System Teletext
2319607ca46eSDavid Howells (WST), defined on ITU-R BT.653-2 */
2320607ca46eSDavid Howells #define V4L2_SLICED_TELETEXT_B (0x0001)
2321607ca46eSDavid Howells /* Video Program System, defined on ETS 300 231*/
2322607ca46eSDavid Howells #define V4L2_SLICED_VPS (0x0400)
2323607ca46eSDavid Howells /* Closed Caption, defined on EIA-608 */
2324607ca46eSDavid Howells #define V4L2_SLICED_CAPTION_525 (0x1000)
2325607ca46eSDavid Howells /* Wide Screen System, defined on ITU-R BT1119.1 */
2326607ca46eSDavid Howells #define V4L2_SLICED_WSS_625 (0x4000)
2327607ca46eSDavid Howells
2328607ca46eSDavid Howells #define V4L2_SLICED_VBI_525 (V4L2_SLICED_CAPTION_525)
2329607ca46eSDavid Howells #define V4L2_SLICED_VBI_625 (V4L2_SLICED_TELETEXT_B | V4L2_SLICED_VPS | V4L2_SLICED_WSS_625)
2330607ca46eSDavid Howells
2331607ca46eSDavid Howells struct v4l2_sliced_vbi_cap {
2332607ca46eSDavid Howells __u16 service_set;
2333607ca46eSDavid Howells /* service_lines[0][...] specifies lines 0-23 (1-23 used) of the first field
2334607ca46eSDavid Howells service_lines[1][...] specifies lines 0-23 (1-23 used) of the second field
2335607ca46eSDavid Howells (equals frame lines 313-336 for 625 line video
2336607ca46eSDavid Howells standards, 263-286 for 525 line standards) */
2337607ca46eSDavid Howells __u16 service_lines[2][24];
2338607ca46eSDavid Howells __u32 type; /* enum v4l2_buf_type */
2339607ca46eSDavid Howells __u32 reserved[3]; /* must be 0 */
2340607ca46eSDavid Howells };
2341607ca46eSDavid Howells
2342607ca46eSDavid Howells struct v4l2_sliced_vbi_data {
2343607ca46eSDavid Howells __u32 id;
2344607ca46eSDavid Howells __u32 field; /* 0: first field, 1: second field */
2345607ca46eSDavid Howells __u32 line; /* 1-23 */
2346607ca46eSDavid Howells __u32 reserved; /* must be 0 */
2347607ca46eSDavid Howells __u8 data[48];
2348607ca46eSDavid Howells };
2349607ca46eSDavid Howells
2350607ca46eSDavid Howells /*
2351607ca46eSDavid Howells * Sliced VBI data inserted into MPEG Streams
2352607ca46eSDavid Howells */
2353607ca46eSDavid Howells
2354607ca46eSDavid Howells /*
2355607ca46eSDavid Howells * V4L2_MPEG_STREAM_VBI_FMT_IVTV:
2356607ca46eSDavid Howells *
2357607ca46eSDavid Howells * Structure of payload contained in an MPEG 2 Private Stream 1 PES Packet in an
2358607ca46eSDavid Howells * MPEG-2 Program Pack that contains V4L2_MPEG_STREAM_VBI_FMT_IVTV Sliced VBI
2359607ca46eSDavid Howells * data
2360607ca46eSDavid Howells *
2361607ca46eSDavid Howells * Note, the MPEG-2 Program Pack and Private Stream 1 PES packet header
2362607ca46eSDavid Howells * definitions are not included here. See the MPEG-2 specifications for details
2363607ca46eSDavid Howells * on these headers.
2364607ca46eSDavid Howells */
2365607ca46eSDavid Howells
2366607ca46eSDavid Howells /* Line type IDs */
2367607ca46eSDavid Howells #define V4L2_MPEG_VBI_IVTV_TELETEXT_B (1)
2368607ca46eSDavid Howells #define V4L2_MPEG_VBI_IVTV_CAPTION_525 (4)
2369607ca46eSDavid Howells #define V4L2_MPEG_VBI_IVTV_WSS_625 (5)
2370607ca46eSDavid Howells #define V4L2_MPEG_VBI_IVTV_VPS (7)
2371607ca46eSDavid Howells
2372607ca46eSDavid Howells struct v4l2_mpeg_vbi_itv0_line {
2373607ca46eSDavid Howells __u8 id; /* One of V4L2_MPEG_VBI_IVTV_* above */
2374607ca46eSDavid Howells __u8 data[42]; /* Sliced VBI data for the line */
2375607ca46eSDavid Howells } __attribute__ ((packed));
2376607ca46eSDavid Howells
2377607ca46eSDavid Howells struct v4l2_mpeg_vbi_itv0 {
2378607ca46eSDavid Howells __le32 linemask[2]; /* Bitmasks of VBI service lines present */
2379607ca46eSDavid Howells struct v4l2_mpeg_vbi_itv0_line line[35];
2380607ca46eSDavid Howells } __attribute__ ((packed));
2381607ca46eSDavid Howells
2382607ca46eSDavid Howells struct v4l2_mpeg_vbi_ITV0 {
2383607ca46eSDavid Howells struct v4l2_mpeg_vbi_itv0_line line[36];
2384607ca46eSDavid Howells } __attribute__ ((packed));
2385607ca46eSDavid Howells
2386607ca46eSDavid Howells #define V4L2_MPEG_VBI_IVTV_MAGIC0 "itv0"
2387607ca46eSDavid Howells #define V4L2_MPEG_VBI_IVTV_MAGIC1 "ITV0"
2388607ca46eSDavid Howells
2389607ca46eSDavid Howells struct v4l2_mpeg_vbi_fmt_ivtv {
2390607ca46eSDavid Howells __u8 magic[4];
2391607ca46eSDavid Howells union {
2392607ca46eSDavid Howells struct v4l2_mpeg_vbi_itv0 itv0;
2393607ca46eSDavid Howells struct v4l2_mpeg_vbi_ITV0 ITV0;
2394607ca46eSDavid Howells };
2395607ca46eSDavid Howells } __attribute__ ((packed));
2396607ca46eSDavid Howells
2397607ca46eSDavid Howells /*
2398607ca46eSDavid Howells * A G G R E G A T E S T R U C T U R E S
2399607ca46eSDavid Howells */
2400607ca46eSDavid Howells
2401607ca46eSDavid Howells /**
2402607ca46eSDavid Howells * struct v4l2_plane_pix_format - additional, per-plane format definition
2403607ca46eSDavid Howells * @sizeimage: maximum size in bytes required for data, for which
2404607ca46eSDavid Howells * this plane will be used
2405607ca46eSDavid Howells * @bytesperline: distance in bytes between the leftmost pixels in two
2406607ca46eSDavid Howells * adjacent lines
2407f12b81e4SHans Verkuil * @reserved: drivers and applications must zero this array
2408607ca46eSDavid Howells */
2409607ca46eSDavid Howells struct v4l2_plane_pix_format {
2410607ca46eSDavid Howells __u32 sizeimage;
2411cc7d2dfbSHans Verkuil __u32 bytesperline;
2412cc7d2dfbSHans Verkuil __u16 reserved[6];
2413607ca46eSDavid Howells } __attribute__ ((packed));
2414607ca46eSDavid Howells
2415607ca46eSDavid Howells /**
2416607ca46eSDavid Howells * struct v4l2_pix_format_mplane - multiplanar format definition
2417607ca46eSDavid Howells * @width: image width in pixels
2418607ca46eSDavid Howells * @height: image height in pixels
2419607ca46eSDavid Howells * @pixelformat: little endian four character code (fourcc)
2420607ca46eSDavid Howells * @field: enum v4l2_field; field order (for interlaced video)
2421607ca46eSDavid Howells * @colorspace: enum v4l2_colorspace; supplemental to pixelformat
2422607ca46eSDavid Howells * @plane_fmt: per-plane information
2423607ca46eSDavid Howells * @num_planes: number of planes for this format
2424c96fd46aSLaurent Pinchart * @flags: format flags (V4L2_PIX_FMT_FLAG_*)
2425d5735d64SHans Verkuil * @ycbcr_enc: enum v4l2_ycbcr_encoding, Y'CbCr encoding
2426f12b81e4SHans Verkuil * @hsv_enc: enum v4l2_hsv_encoding, HSV encoding
2427d5735d64SHans Verkuil * @quantization: enum v4l2_quantization, colorspace quantization
242874fdcb2eSHans Verkuil * @xfer_func: enum v4l2_xfer_func, colorspace transfer function
2429f12b81e4SHans Verkuil * @reserved: drivers and applications must zero this array
2430607ca46eSDavid Howells */
2431607ca46eSDavid Howells struct v4l2_pix_format_mplane {
2432607ca46eSDavid Howells __u32 width;
2433607ca46eSDavid Howells __u32 height;
2434607ca46eSDavid Howells __u32 pixelformat;
2435607ca46eSDavid Howells __u32 field;
2436607ca46eSDavid Howells __u32 colorspace;
2437607ca46eSDavid Howells
2438607ca46eSDavid Howells struct v4l2_plane_pix_format plane_fmt[VIDEO_MAX_PLANES];
2439607ca46eSDavid Howells __u8 num_planes;
2440c96fd46aSLaurent Pinchart __u8 flags;
24418a0d62afSRicardo Ribalda Delgado union {
2442d5735d64SHans Verkuil __u8 ycbcr_enc;
24438a0d62afSRicardo Ribalda Delgado __u8 hsv_enc;
24448a0d62afSRicardo Ribalda Delgado };
2445d5735d64SHans Verkuil __u8 quantization;
244674fdcb2eSHans Verkuil __u8 xfer_func;
244774fdcb2eSHans Verkuil __u8 reserved[7];
2448607ca46eSDavid Howells } __attribute__ ((packed));
2449607ca46eSDavid Howells
2450607ca46eSDavid Howells /**
245187185c95SAntti Palosaari * struct v4l2_sdr_format - SDR format definition
24526f3073b8SAntti Palosaari * @pixelformat: little endian four character code (fourcc)
2453aaa968b6SAntti Palosaari * @buffersize: maximum size in bytes required for data
2454f12b81e4SHans Verkuil * @reserved: drivers and applications must zero this array
24556f3073b8SAntti Palosaari */
245687185c95SAntti Palosaari struct v4l2_sdr_format {
24576f3073b8SAntti Palosaari __u32 pixelformat;
2458aaa968b6SAntti Palosaari __u32 buffersize;
2459aaa968b6SAntti Palosaari __u8 reserved[24];
24606f3073b8SAntti Palosaari } __attribute__ ((packed));
24616f3073b8SAntti Palosaari
24626f3073b8SAntti Palosaari /**
2463fb9ffa6aSLaurent Pinchart * struct v4l2_meta_format - metadata format definition
2464fb9ffa6aSLaurent Pinchart * @dataformat: little endian four character code (fourcc)
2465fb9ffa6aSLaurent Pinchart * @buffersize: maximum size in bytes required for data
246689345c2aSSakari Ailus * @width: number of data units of data per line (valid for line
246789345c2aSSakari Ailus * based formats only, see format documentation)
246889345c2aSSakari Ailus * @height: number of lines of data per buffer (valid for line based
246989345c2aSSakari Ailus * formats only)
247089345c2aSSakari Ailus * @bytesperline: offset between the beginnings of two adjacent lines in
247189345c2aSSakari Ailus * bytes (valid for line based formats only)
2472fb9ffa6aSLaurent Pinchart */
2473fb9ffa6aSLaurent Pinchart struct v4l2_meta_format {
2474fb9ffa6aSLaurent Pinchart __u32 dataformat;
2475fb9ffa6aSLaurent Pinchart __u32 buffersize;
247689345c2aSSakari Ailus __u32 width;
247789345c2aSSakari Ailus __u32 height;
247889345c2aSSakari Ailus __u32 bytesperline;
2479fb9ffa6aSLaurent Pinchart } __attribute__ ((packed));
2480fb9ffa6aSLaurent Pinchart
2481fb9ffa6aSLaurent Pinchart /**
2482607ca46eSDavid Howells * struct v4l2_format - stream data format
2483607ca46eSDavid Howells * @type: enum v4l2_buf_type; type of the data stream
248427b9e36dSRicardo Ribalda * @fmt.pix: definition of an image format
248527b9e36dSRicardo Ribalda * @fmt.pix_mp: definition of a multiplanar image format
248627b9e36dSRicardo Ribalda * @fmt.win: definition of an overlaid image
248727b9e36dSRicardo Ribalda * @fmt.vbi: raw VBI capture or output parameters
248827b9e36dSRicardo Ribalda * @fmt.sliced: sliced VBI capture or output parameters
248927b9e36dSRicardo Ribalda * @fmt.raw_data: placeholder for future extensions and custom formats
249027b9e36dSRicardo Ribalda * @fmt: union of @pix, @pix_mp, @win, @vbi, @sliced, @sdr,
249127b9e36dSRicardo Ribalda * @meta and @raw_data
2492607ca46eSDavid Howells */
2493607ca46eSDavid Howells struct v4l2_format {
2494607ca46eSDavid Howells __u32 type;
2495607ca46eSDavid Howells union {
2496607ca46eSDavid Howells struct v4l2_pix_format pix; /* V4L2_BUF_TYPE_VIDEO_CAPTURE */
2497607ca46eSDavid Howells struct v4l2_pix_format_mplane pix_mp; /* V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE */
2498607ca46eSDavid Howells struct v4l2_window win; /* V4L2_BUF_TYPE_VIDEO_OVERLAY */
2499607ca46eSDavid Howells struct v4l2_vbi_format vbi; /* V4L2_BUF_TYPE_VBI_CAPTURE */
2500607ca46eSDavid Howells struct v4l2_sliced_vbi_format sliced; /* V4L2_BUF_TYPE_SLICED_VBI_CAPTURE */
250187185c95SAntti Palosaari struct v4l2_sdr_format sdr; /* V4L2_BUF_TYPE_SDR_CAPTURE */
2502fb9ffa6aSLaurent Pinchart struct v4l2_meta_format meta; /* V4L2_BUF_TYPE_META_CAPTURE */
2503607ca46eSDavid Howells __u8 raw_data[200]; /* user-defined */
2504607ca46eSDavid Howells } fmt;
2505607ca46eSDavid Howells };
2506607ca46eSDavid Howells
2507607ca46eSDavid Howells /* Stream type-dependent parameters
2508607ca46eSDavid Howells */
2509607ca46eSDavid Howells struct v4l2_streamparm {
2510607ca46eSDavid Howells __u32 type; /* enum v4l2_buf_type */
2511607ca46eSDavid Howells union {
2512607ca46eSDavid Howells struct v4l2_captureparm capture;
2513607ca46eSDavid Howells struct v4l2_outputparm output;
2514607ca46eSDavid Howells __u8 raw_data[200]; /* user-defined */
2515607ca46eSDavid Howells } parm;
2516607ca46eSDavid Howells };
2517607ca46eSDavid Howells
2518607ca46eSDavid Howells /*
2519607ca46eSDavid Howells * E V E N T S
2520607ca46eSDavid Howells */
2521607ca46eSDavid Howells
2522607ca46eSDavid Howells #define V4L2_EVENT_ALL 0
2523607ca46eSDavid Howells #define V4L2_EVENT_VSYNC 1
2524607ca46eSDavid Howells #define V4L2_EVENT_EOS 2
2525607ca46eSDavid Howells #define V4L2_EVENT_CTRL 3
2526607ca46eSDavid Howells #define V4L2_EVENT_FRAME_SYNC 4
25273cbe6e5bSArun Kumar K #define V4L2_EVENT_SOURCE_CHANGE 5
252878ea6113SHans Verkuil #define V4L2_EVENT_MOTION_DET 6
2529607ca46eSDavid Howells #define V4L2_EVENT_PRIVATE_START 0x08000000
2530607ca46eSDavid Howells
2531607ca46eSDavid Howells /* Payload for V4L2_EVENT_VSYNC */
2532607ca46eSDavid Howells struct v4l2_event_vsync {
2533607ca46eSDavid Howells /* Can be V4L2_FIELD_ANY, _NONE, _TOP or _BOTTOM */
2534607ca46eSDavid Howells __u8 field;
2535607ca46eSDavid Howells } __attribute__ ((packed));
2536607ca46eSDavid Howells
2537607ca46eSDavid Howells /* Payload for V4L2_EVENT_CTRL */
2538607ca46eSDavid Howells #define V4L2_EVENT_CTRL_CH_VALUE (1 << 0)
2539607ca46eSDavid Howells #define V4L2_EVENT_CTRL_CH_FLAGS (1 << 1)
25402ccbe779SSylwester Nawrocki #define V4L2_EVENT_CTRL_CH_RANGE (1 << 2)
254143cc0ec3SHans Verkuil #define V4L2_EVENT_CTRL_CH_DIMENSIONS (1 << 3)
2542607ca46eSDavid Howells
2543607ca46eSDavid Howells struct v4l2_event_ctrl {
2544607ca46eSDavid Howells __u32 changes;
2545607ca46eSDavid Howells __u32 type;
2546607ca46eSDavid Howells union {
2547607ca46eSDavid Howells __s32 value;
2548607ca46eSDavid Howells __s64 value64;
2549607ca46eSDavid Howells };
2550607ca46eSDavid Howells __u32 flags;
2551607ca46eSDavid Howells __s32 minimum;
2552607ca46eSDavid Howells __s32 maximum;
2553607ca46eSDavid Howells __s32 step;
2554607ca46eSDavid Howells __s32 default_value;
2555607ca46eSDavid Howells };
2556607ca46eSDavid Howells
2557607ca46eSDavid Howells struct v4l2_event_frame_sync {
2558607ca46eSDavid Howells __u32 frame_sequence;
2559607ca46eSDavid Howells };
2560607ca46eSDavid Howells
25613cbe6e5bSArun Kumar K #define V4L2_EVENT_SRC_CH_RESOLUTION (1 << 0)
25623cbe6e5bSArun Kumar K
25633cbe6e5bSArun Kumar K struct v4l2_event_src_change {
25643cbe6e5bSArun Kumar K __u32 changes;
25653cbe6e5bSArun Kumar K };
25663cbe6e5bSArun Kumar K
256778ea6113SHans Verkuil #define V4L2_EVENT_MD_FL_HAVE_FRAME_SEQ (1 << 0)
256878ea6113SHans Verkuil
256978ea6113SHans Verkuil /**
257078ea6113SHans Verkuil * struct v4l2_event_motion_det - motion detection event
257178ea6113SHans Verkuil * @flags: if V4L2_EVENT_MD_FL_HAVE_FRAME_SEQ is set, then the
257278ea6113SHans Verkuil * frame_sequence field is valid.
257378ea6113SHans Verkuil * @frame_sequence: the frame sequence number associated with this event.
257478ea6113SHans Verkuil * @region_mask: which regions detected motion.
257578ea6113SHans Verkuil */
257678ea6113SHans Verkuil struct v4l2_event_motion_det {
257778ea6113SHans Verkuil __u32 flags;
257878ea6113SHans Verkuil __u32 frame_sequence;
257978ea6113SHans Verkuil __u32 region_mask;
258078ea6113SHans Verkuil };
258178ea6113SHans Verkuil
2582607ca46eSDavid Howells struct v4l2_event {
2583607ca46eSDavid Howells __u32 type;
2584607ca46eSDavid Howells union {
2585607ca46eSDavid Howells struct v4l2_event_vsync vsync;
2586607ca46eSDavid Howells struct v4l2_event_ctrl ctrl;
2587607ca46eSDavid Howells struct v4l2_event_frame_sync frame_sync;
25883cbe6e5bSArun Kumar K struct v4l2_event_src_change src_change;
258978ea6113SHans Verkuil struct v4l2_event_motion_det motion_det;
2590607ca46eSDavid Howells __u8 data[64];
2591607ca46eSDavid Howells } u;
2592607ca46eSDavid Howells __u32 pending;
2593607ca46eSDavid Howells __u32 sequence;
25941a6c0b36SArnd Bergmann #ifdef __KERNEL__
25951a6c0b36SArnd Bergmann struct __kernel_timespec timestamp;
25961a6c0b36SArnd Bergmann #else
2597607ca46eSDavid Howells struct timespec timestamp;
25981a6c0b36SArnd Bergmann #endif
2599607ca46eSDavid Howells __u32 id;
2600607ca46eSDavid Howells __u32 reserved[8];
2601607ca46eSDavid Howells };
2602607ca46eSDavid Howells
2603607ca46eSDavid Howells #define V4L2_EVENT_SUB_FL_SEND_INITIAL (1 << 0)
2604607ca46eSDavid Howells #define V4L2_EVENT_SUB_FL_ALLOW_FEEDBACK (1 << 1)
2605607ca46eSDavid Howells
2606607ca46eSDavid Howells struct v4l2_event_subscription {
2607607ca46eSDavid Howells __u32 type;
2608607ca46eSDavid Howells __u32 id;
2609607ca46eSDavid Howells __u32 flags;
2610607ca46eSDavid Howells __u32 reserved[5];
2611607ca46eSDavid Howells };
2612607ca46eSDavid Howells
2613607ca46eSDavid Howells /*
2614607ca46eSDavid Howells * A D V A N C E D D E B U G G I N G
2615607ca46eSDavid Howells *
2616607ca46eSDavid Howells * NOTE: EXPERIMENTAL API, NEVER RELY ON THIS IN APPLICATIONS!
2617607ca46eSDavid Howells * FOR DEBUGGING, TESTING AND INTERNAL USE ONLY!
2618607ca46eSDavid Howells */
2619607ca46eSDavid Howells
2620607ca46eSDavid Howells /* VIDIOC_DBG_G_REGISTER and VIDIOC_DBG_S_REGISTER */
2621607ca46eSDavid Howells
262279b0c640SHans Verkuil #define V4L2_CHIP_MATCH_BRIDGE 0 /* Match against chip ID on the bridge (0 for the bridge) */
2623b71c9980SHans Verkuil #define V4L2_CHIP_MATCH_SUBDEV 4 /* Match against subdev index */
2624b71c9980SHans Verkuil
2625b71c9980SHans Verkuil /* The following four defines are no longer in use */
262679b0c640SHans Verkuil #define V4L2_CHIP_MATCH_HOST V4L2_CHIP_MATCH_BRIDGE
2627607ca46eSDavid Howells #define V4L2_CHIP_MATCH_I2C_DRIVER 1 /* Match against I2C driver name */
2628607ca46eSDavid Howells #define V4L2_CHIP_MATCH_I2C_ADDR 2 /* Match against I2C 7-bit address */
2629ff29feb9SLad, Prabhakar #define V4L2_CHIP_MATCH_AC97 3 /* Match against ancillary AC97 chip */
2630607ca46eSDavid Howells
2631607ca46eSDavid Howells struct v4l2_dbg_match {
2632607ca46eSDavid Howells __u32 type; /* Match type */
2633607ca46eSDavid Howells union { /* Match this chip, meaning determined by type */
2634607ca46eSDavid Howells __u32 addr;
2635607ca46eSDavid Howells char name[32];
2636607ca46eSDavid Howells };
2637607ca46eSDavid Howells } __attribute__ ((packed));
2638607ca46eSDavid Howells
2639607ca46eSDavid Howells struct v4l2_dbg_register {
2640607ca46eSDavid Howells struct v4l2_dbg_match match;
2641607ca46eSDavid Howells __u32 size; /* register size in bytes */
2642607ca46eSDavid Howells __u64 reg;
2643607ca46eSDavid Howells __u64 val;
2644607ca46eSDavid Howells } __attribute__ ((packed));
2645607ca46eSDavid Howells
264679b0c640SHans Verkuil #define V4L2_CHIP_FL_READABLE (1 << 0)
264779b0c640SHans Verkuil #define V4L2_CHIP_FL_WRITABLE (1 << 1)
264879b0c640SHans Verkuil
264996b03d2aSHans Verkuil /* VIDIOC_DBG_G_CHIP_INFO */
265096b03d2aSHans Verkuil struct v4l2_dbg_chip_info {
265179b0c640SHans Verkuil struct v4l2_dbg_match match;
265279b0c640SHans Verkuil char name[32];
265379b0c640SHans Verkuil __u32 flags;
2654b8399b83SHans Verkuil __u32 reserved[32];
265579b0c640SHans Verkuil } __attribute__ ((packed));
265679b0c640SHans Verkuil
2657607ca46eSDavid Howells /**
2658607ca46eSDavid Howells * struct v4l2_create_buffers - VIDIOC_CREATE_BUFS argument
2659607ca46eSDavid Howells * @index: on return, index of the first created buffer
2660607ca46eSDavid Howells * @count: entry: number of requested buffers,
2661607ca46eSDavid Howells * return: number of created buffers
2662607ca46eSDavid Howells * @memory: enum v4l2_memory; buffer memory type
2663607ca46eSDavid Howells * @format: frame format, for which buffers are requested
2664f35f5d72SHans Verkuil * @capabilities: capabilities of this buffer type.
2665c0acf9cfSSergey Senozhatsky * @flags: additional buffer management attributes (ignored unless the
2666c0acf9cfSSergey Senozhatsky * queue has V4L2_BUF_CAP_SUPPORTS_MMAP_CACHE_HINTS capability
2667c0acf9cfSSergey Senozhatsky * and configured for MMAP streaming I/O).
2668d055a76cSBenjamin Gaignard * @max_num_buffers: if V4L2_BUF_CAP_SUPPORTS_MAX_NUM_BUFFERS capability flag is set
2669d055a76cSBenjamin Gaignard * this field indicate the maximum possible number of buffers
2670d055a76cSBenjamin Gaignard * for this queue.
2671607ca46eSDavid Howells * @reserved: future extensions
2672607ca46eSDavid Howells */
2673607ca46eSDavid Howells struct v4l2_create_buffers {
2674607ca46eSDavid Howells __u32 index;
2675607ca46eSDavid Howells __u32 count;
2676607ca46eSDavid Howells __u32 memory;
2677607ca46eSDavid Howells struct v4l2_format format;
2678f35f5d72SHans Verkuil __u32 capabilities;
2679c0acf9cfSSergey Senozhatsky __u32 flags;
2680d055a76cSBenjamin Gaignard __u32 max_num_buffers;
2681d055a76cSBenjamin Gaignard __u32 reserved[5];
2682607ca46eSDavid Howells };
2683607ca46eSDavid Howells
2684a3293a85SBenjamin Gaignard /**
2685a3293a85SBenjamin Gaignard * struct v4l2_remove_buffers - VIDIOC_REMOVE_BUFS argument
2686a3293a85SBenjamin Gaignard * @index: the first buffer to be removed
2687a3293a85SBenjamin Gaignard * @count: number of buffers to removed
2688a3293a85SBenjamin Gaignard * @type: enum v4l2_buf_type
2689a3293a85SBenjamin Gaignard * @reserved: future extensions
2690a3293a85SBenjamin Gaignard */
2691a3293a85SBenjamin Gaignard struct v4l2_remove_buffers {
2692a3293a85SBenjamin Gaignard __u32 index;
2693a3293a85SBenjamin Gaignard __u32 count;
2694a3293a85SBenjamin Gaignard __u32 type;
2695a3293a85SBenjamin Gaignard __u32 reserved[13];
2696a3293a85SBenjamin Gaignard };
2697a3293a85SBenjamin Gaignard
2698607ca46eSDavid Howells /*
2699607ca46eSDavid Howells * 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
2700607ca46eSDavid Howells *
2701607ca46eSDavid Howells */
2702607ca46eSDavid Howells #define VIDIOC_QUERYCAP _IOR('V', 0, struct v4l2_capability)
2703607ca46eSDavid Howells #define VIDIOC_ENUM_FMT _IOWR('V', 2, struct v4l2_fmtdesc)
2704607ca46eSDavid Howells #define VIDIOC_G_FMT _IOWR('V', 4, struct v4l2_format)
2705607ca46eSDavid Howells #define VIDIOC_S_FMT _IOWR('V', 5, struct v4l2_format)
2706607ca46eSDavid Howells #define VIDIOC_REQBUFS _IOWR('V', 8, struct v4l2_requestbuffers)
2707607ca46eSDavid Howells #define VIDIOC_QUERYBUF _IOWR('V', 9, struct v4l2_buffer)
2708607ca46eSDavid Howells #define VIDIOC_G_FBUF _IOR('V', 10, struct v4l2_framebuffer)
2709607ca46eSDavid Howells #define VIDIOC_S_FBUF _IOW('V', 11, struct v4l2_framebuffer)
2710607ca46eSDavid Howells #define VIDIOC_OVERLAY _IOW('V', 14, int)
2711607ca46eSDavid Howells #define VIDIOC_QBUF _IOWR('V', 15, struct v4l2_buffer)
2712b799d09aSTomasz Stanislawski #define VIDIOC_EXPBUF _IOWR('V', 16, struct v4l2_exportbuffer)
2713607ca46eSDavid Howells #define VIDIOC_DQBUF _IOWR('V', 17, struct v4l2_buffer)
2714607ca46eSDavid Howells #define VIDIOC_STREAMON _IOW('V', 18, int)
2715607ca46eSDavid Howells #define VIDIOC_STREAMOFF _IOW('V', 19, int)
2716607ca46eSDavid Howells #define VIDIOC_G_PARM _IOWR('V', 21, struct v4l2_streamparm)
2717607ca46eSDavid Howells #define VIDIOC_S_PARM _IOWR('V', 22, struct v4l2_streamparm)
2718607ca46eSDavid Howells #define VIDIOC_G_STD _IOR('V', 23, v4l2_std_id)
2719607ca46eSDavid Howells #define VIDIOC_S_STD _IOW('V', 24, v4l2_std_id)
2720607ca46eSDavid Howells #define VIDIOC_ENUMSTD _IOWR('V', 25, struct v4l2_standard)
2721607ca46eSDavid Howells #define VIDIOC_ENUMINPUT _IOWR('V', 26, struct v4l2_input)
2722607ca46eSDavid Howells #define VIDIOC_G_CTRL _IOWR('V', 27, struct v4l2_control)
2723607ca46eSDavid Howells #define VIDIOC_S_CTRL _IOWR('V', 28, struct v4l2_control)
2724607ca46eSDavid Howells #define VIDIOC_G_TUNER _IOWR('V', 29, struct v4l2_tuner)
2725607ca46eSDavid Howells #define VIDIOC_S_TUNER _IOW('V', 30, struct v4l2_tuner)
2726607ca46eSDavid Howells #define VIDIOC_G_AUDIO _IOR('V', 33, struct v4l2_audio)
2727607ca46eSDavid Howells #define VIDIOC_S_AUDIO _IOW('V', 34, struct v4l2_audio)
2728607ca46eSDavid Howells #define VIDIOC_QUERYCTRL _IOWR('V', 36, struct v4l2_queryctrl)
2729607ca46eSDavid Howells #define VIDIOC_QUERYMENU _IOWR('V', 37, struct v4l2_querymenu)
2730607ca46eSDavid Howells #define VIDIOC_G_INPUT _IOR('V', 38, int)
2731607ca46eSDavid Howells #define VIDIOC_S_INPUT _IOWR('V', 39, int)
2732254a4777SHans Verkuil #define VIDIOC_G_EDID _IOWR('V', 40, struct v4l2_edid)
2733254a4777SHans Verkuil #define VIDIOC_S_EDID _IOWR('V', 41, struct v4l2_edid)
2734607ca46eSDavid Howells #define VIDIOC_G_OUTPUT _IOR('V', 46, int)
2735607ca46eSDavid Howells #define VIDIOC_S_OUTPUT _IOWR('V', 47, int)
2736607ca46eSDavid Howells #define VIDIOC_ENUMOUTPUT _IOWR('V', 48, struct v4l2_output)
2737607ca46eSDavid Howells #define VIDIOC_G_AUDOUT _IOR('V', 49, struct v4l2_audioout)
2738607ca46eSDavid Howells #define VIDIOC_S_AUDOUT _IOW('V', 50, struct v4l2_audioout)
2739607ca46eSDavid Howells #define VIDIOC_G_MODULATOR _IOWR('V', 54, struct v4l2_modulator)
2740607ca46eSDavid Howells #define VIDIOC_S_MODULATOR _IOW('V', 55, struct v4l2_modulator)
2741607ca46eSDavid Howells #define VIDIOC_G_FREQUENCY _IOWR('V', 56, struct v4l2_frequency)
2742607ca46eSDavid Howells #define VIDIOC_S_FREQUENCY _IOW('V', 57, struct v4l2_frequency)
2743607ca46eSDavid Howells #define VIDIOC_CROPCAP _IOWR('V', 58, struct v4l2_cropcap)
2744607ca46eSDavid Howells #define VIDIOC_G_CROP _IOWR('V', 59, struct v4l2_crop)
2745607ca46eSDavid Howells #define VIDIOC_S_CROP _IOW('V', 60, struct v4l2_crop)
2746607ca46eSDavid Howells #define VIDIOC_G_JPEGCOMP _IOR('V', 61, struct v4l2_jpegcompression)
2747607ca46eSDavid Howells #define VIDIOC_S_JPEGCOMP _IOW('V', 62, struct v4l2_jpegcompression)
2748607ca46eSDavid Howells #define VIDIOC_QUERYSTD _IOR('V', 63, v4l2_std_id)
2749607ca46eSDavid Howells #define VIDIOC_TRY_FMT _IOWR('V', 64, struct v4l2_format)
2750607ca46eSDavid Howells #define VIDIOC_ENUMAUDIO _IOWR('V', 65, struct v4l2_audio)
2751607ca46eSDavid Howells #define VIDIOC_ENUMAUDOUT _IOWR('V', 66, struct v4l2_audioout)
2752607ca46eSDavid Howells #define VIDIOC_G_PRIORITY _IOR('V', 67, __u32) /* enum v4l2_priority */
2753607ca46eSDavid Howells #define VIDIOC_S_PRIORITY _IOW('V', 68, __u32) /* enum v4l2_priority */
2754607ca46eSDavid Howells #define VIDIOC_G_SLICED_VBI_CAP _IOWR('V', 69, struct v4l2_sliced_vbi_cap)
2755607ca46eSDavid Howells #define VIDIOC_LOG_STATUS _IO('V', 70)
2756607ca46eSDavid Howells #define VIDIOC_G_EXT_CTRLS _IOWR('V', 71, struct v4l2_ext_controls)
2757607ca46eSDavid Howells #define VIDIOC_S_EXT_CTRLS _IOWR('V', 72, struct v4l2_ext_controls)
2758607ca46eSDavid Howells #define VIDIOC_TRY_EXT_CTRLS _IOWR('V', 73, struct v4l2_ext_controls)
2759607ca46eSDavid Howells #define VIDIOC_ENUM_FRAMESIZES _IOWR('V', 74, struct v4l2_frmsizeenum)
2760607ca46eSDavid Howells #define VIDIOC_ENUM_FRAMEINTERVALS _IOWR('V', 75, struct v4l2_frmivalenum)
2761607ca46eSDavid Howells #define VIDIOC_G_ENC_INDEX _IOR('V', 76, struct v4l2_enc_idx)
2762607ca46eSDavid Howells #define VIDIOC_ENCODER_CMD _IOWR('V', 77, struct v4l2_encoder_cmd)
2763607ca46eSDavid Howells #define VIDIOC_TRY_ENCODER_CMD _IOWR('V', 78, struct v4l2_encoder_cmd)
2764607ca46eSDavid Howells
276557c75987SHans Verkuil /*
276657c75987SHans Verkuil * Experimental, meant for debugging, testing and internal use.
276757c75987SHans Verkuil * Only implemented if CONFIG_VIDEO_ADV_DEBUG is defined.
276857c75987SHans Verkuil * You must be root to use these ioctls. Never use these in applications!
276957c75987SHans Verkuil */
2770607ca46eSDavid Howells #define VIDIOC_DBG_S_REGISTER _IOW('V', 79, struct v4l2_dbg_register)
2771607ca46eSDavid Howells #define VIDIOC_DBG_G_REGISTER _IOWR('V', 80, struct v4l2_dbg_register)
2772607ca46eSDavid Howells
2773607ca46eSDavid Howells #define VIDIOC_S_HW_FREQ_SEEK _IOW('V', 82, struct v4l2_hw_freq_seek)
2774607ca46eSDavid Howells #define VIDIOC_S_DV_TIMINGS _IOWR('V', 87, struct v4l2_dv_timings)
2775607ca46eSDavid Howells #define VIDIOC_G_DV_TIMINGS _IOWR('V', 88, struct v4l2_dv_timings)
2776607ca46eSDavid Howells #define VIDIOC_DQEVENT _IOR('V', 89, struct v4l2_event)
2777607ca46eSDavid Howells #define VIDIOC_SUBSCRIBE_EVENT _IOW('V', 90, struct v4l2_event_subscription)
2778607ca46eSDavid Howells #define VIDIOC_UNSUBSCRIBE_EVENT _IOW('V', 91, struct v4l2_event_subscription)
2779607ca46eSDavid Howells #define VIDIOC_CREATE_BUFS _IOWR('V', 92, struct v4l2_create_buffers)
2780607ca46eSDavid Howells #define VIDIOC_PREPARE_BUF _IOWR('V', 93, struct v4l2_buffer)
2781607ca46eSDavid Howells #define VIDIOC_G_SELECTION _IOWR('V', 94, struct v4l2_selection)
2782607ca46eSDavid Howells #define VIDIOC_S_SELECTION _IOWR('V', 95, struct v4l2_selection)
2783607ca46eSDavid Howells #define VIDIOC_DECODER_CMD _IOWR('V', 96, struct v4l2_decoder_cmd)
2784607ca46eSDavid Howells #define VIDIOC_TRY_DECODER_CMD _IOWR('V', 97, struct v4l2_decoder_cmd)
2785607ca46eSDavid Howells #define VIDIOC_ENUM_DV_TIMINGS _IOWR('V', 98, struct v4l2_enum_dv_timings)
2786607ca46eSDavid Howells #define VIDIOC_QUERY_DV_TIMINGS _IOR('V', 99, struct v4l2_dv_timings)
2787607ca46eSDavid Howells #define VIDIOC_DV_TIMINGS_CAP _IOWR('V', 100, struct v4l2_dv_timings_cap)
2788607ca46eSDavid Howells #define VIDIOC_ENUM_FREQ_BANDS _IOWR('V', 101, struct v4l2_frequency_band)
2789607ca46eSDavid Howells
279057c75987SHans Verkuil /*
279157c75987SHans Verkuil * Experimental, meant for debugging, testing and internal use.
279257c75987SHans Verkuil * Never use this in applications!
279357c75987SHans Verkuil */
279496b03d2aSHans Verkuil #define VIDIOC_DBG_G_CHIP_INFO _IOWR('V', 102, struct v4l2_dbg_chip_info)
279579b0c640SHans Verkuil
27965082c241SHans Verkuil #define VIDIOC_QUERY_EXT_CTRL _IOWR('V', 103, struct v4l2_query_ext_ctrl)
2797a3293a85SBenjamin Gaignard #define VIDIOC_REMOVE_BUFS _IOWR('V', 104, struct v4l2_remove_buffers)
2798a3293a85SBenjamin Gaignard
27995082c241SHans Verkuil
2800607ca46eSDavid Howells /* Reminder: when adding new ioctls please add support for them to
2801d9e7d228SRicardo Ribalda drivers/media/v4l2-core/v4l2-compat-ioctl32.c as well! */
2802607ca46eSDavid Howells
2803607ca46eSDavid Howells #define BASE_VIDIOC_PRIVATE 192 /* 192-255 are private */
2804607ca46eSDavid Howells
2805b84f60a3SEzequiel Garcia /* Deprecated definitions kept for backwards compatibility */
2806b84f60a3SEzequiel Garcia #ifndef __KERNEL__
280778eee7b5SEzequiel Garcia #define V4L2_PIX_FMT_HM12 V4L2_PIX_FMT_NV12_16L16
2808b84f60a3SEzequiel Garcia #define V4L2_PIX_FMT_SUNXI_TILED_NV12 V4L2_PIX_FMT_NV12_32L32
280917611d3fSHans Verkuil /*
281017611d3fSHans Verkuil * This capability was never implemented, anyone using this cap should drop it
281117611d3fSHans Verkuil * from their code.
281217611d3fSHans Verkuil */
281317611d3fSHans Verkuil #define V4L2_CAP_ASYNCIO 0x02000000
2814b84f60a3SEzequiel Garcia #endif
2815b84f60a3SEzequiel Garcia
2816607ca46eSDavid Howells #endif /* _UAPI__LINUX_VIDEODEV2_H */
2817