xref: /openbsd/sys/sys/videoio.h (revision ce9983e9)
1 /*	$OpenBSD: videoio.h,v 1.21 2025/01/18 19:50:55 kirill Exp $	*/
2 
3 /*
4  *  Video for Linux Two header file
5  *
6  *  Copyright (C) 1999-2012 the contributors
7  *  Copyright (C) 2012 Nokia Corporation
8  *  Contact: Sakari Ailus <sakari.ailus@iki.fi>
9  *
10  *  This program is free software; you can redistribute it and/or modify
11  *  it under the terms of the GNU General Public License as published by
12  *  the Free Software Foundation; either version 2 of the License, or
13  *  (at your option) any later version.
14  *
15  *  This program is distributed in the hope that it will be useful,
16  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
17  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  *  GNU General Public License for more details.
19  *
20  *  Alternatively you can redistribute this file under the terms of the
21  *  BSD license as stated below:
22  *
23  *  Redistribution and use in source and binary forms, with or without
24  *  modification, are permitted provided that the following conditions
25  *  are met:
26  *  1. Redistributions of source code must retain the above copyright
27  *     notice, this list of conditions and the following disclaimer.
28  *  2. Redistributions in binary form must reproduce the above copyright
29  *     notice, this list of conditions and the following disclaimer in
30  *     the documentation and/or other materials provided with the
31  *     distribution.
32  *  3. The names of its contributors may not be used to endorse or promote
33  *     products derived from this software without specific prior written
34  *     permission.
35  *
36  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
37  *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
38  *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
39  *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
40  *  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
41  *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
42  *  TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
43  *  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
44  *  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
45  *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
46  *  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
47  *
48  *	Header file for v4l or V4L2 drivers and applications
49  * with public API.
50  * All kernel-specific stuff were moved to media/v4l2-dev.h, so
51  * no #if __KERNEL tests are allowed here
52  *
53  *	See https://linuxtv.org for more info
54  *
55  *	Author: Bill Dirks <bill@thedirks.org>
56  *		Justin Schoeman
57  *              Hans Verkuil <hverkuil@xs4all.nl>
58  *		et al.
59  */
60 
61 #ifndef _SYS_VIDEOIO_H_
62 #define _SYS_VIDEOIO_H_
63 #include <sys/time.h>
64 #include <sys/types.h>
65 #include <sys/ioccom.h>
66 /* Inline #include <linux/v4l2-common.h>
67  * (v4l2-common.h was split off from videodev2.h and has the same BSD license.)
68  *
69  * Begin of v4l2-common.h
70  */
71 /*
72  *
73  * Selection interface definitions
74  *
75  */
76 
77 /* Current cropping area */
78 #define V4L2_SEL_TGT_CROP		0x0000
79 /* Default cropping area */
80 #define V4L2_SEL_TGT_CROP_DEFAULT	0x0001
81 /* Cropping bounds */
82 #define V4L2_SEL_TGT_CROP_BOUNDS	0x0002
83 /* Native frame size */
84 #define V4L2_SEL_TGT_NATIVE_SIZE	0x0003
85 /* Current composing area */
86 #define V4L2_SEL_TGT_COMPOSE		0x0100
87 /* Default composing area */
88 #define V4L2_SEL_TGT_COMPOSE_DEFAULT	0x0101
89 /* Composing bounds */
90 #define V4L2_SEL_TGT_COMPOSE_BOUNDS	0x0102
91 /* Current composing area plus all padding pixels */
92 #define V4L2_SEL_TGT_COMPOSE_PADDED	0x0103
93 
94 /* Backward compatibility target definitions --- to be removed. */
95 #define V4L2_SEL_TGT_CROP_ACTIVE	V4L2_SEL_TGT_CROP
96 #define V4L2_SEL_TGT_COMPOSE_ACTIVE	V4L2_SEL_TGT_COMPOSE
97 #define V4L2_SUBDEV_SEL_TGT_CROP_ACTUAL	V4L2_SEL_TGT_CROP
98 #define V4L2_SUBDEV_SEL_TGT_COMPOSE_ACTUAL V4L2_SEL_TGT_COMPOSE
99 #define V4L2_SUBDEV_SEL_TGT_CROP_BOUNDS	V4L2_SEL_TGT_CROP_BOUNDS
100 #define V4L2_SUBDEV_SEL_TGT_COMPOSE_BOUNDS V4L2_SEL_TGT_COMPOSE_BOUNDS
101 
102 /* Selection flags */
103 #define V4L2_SEL_FLAG_GE		(1 << 0)
104 #define V4L2_SEL_FLAG_LE		(1 << 1)
105 #define V4L2_SEL_FLAG_KEEP_CONFIG	(1 << 2)
106 
107 struct v4l2_edid {
108 	u_int32_t pad;
109 	u_int32_t start_block;
110 	u_int32_t blocks;
111 	u_int32_t reserved[5];
112 	u_int8_t  *edid;
113 };
114 
115 /* Backward compatibility target definitions --- to be removed. */
116 #define V4L2_SEL_TGT_CROP_ACTIVE	V4L2_SEL_TGT_CROP
117 #define V4L2_SEL_TGT_COMPOSE_ACTIVE	V4L2_SEL_TGT_COMPOSE
118 #define V4L2_SUBDEV_SEL_TGT_CROP_ACTUAL	V4L2_SEL_TGT_CROP
119 #define V4L2_SUBDEV_SEL_TGT_COMPOSE_ACTUAL V4L2_SEL_TGT_COMPOSE
120 #define V4L2_SUBDEV_SEL_TGT_CROP_BOUNDS	V4L2_SEL_TGT_CROP_BOUNDS
121 #define V4L2_SUBDEV_SEL_TGT_COMPOSE_BOUNDS V4L2_SEL_TGT_COMPOSE_BOUNDS
122 
123 /* Backward compatibility flag definitions --- to be removed. */
124 #define V4L2_SUBDEV_SEL_FLAG_SIZE_GE	V4L2_SEL_FLAG_GE
125 #define V4L2_SUBDEV_SEL_FLAG_SIZE_LE	V4L2_SEL_FLAG_LE
126 #define V4L2_SUBDEV_SEL_FLAG_KEEP_CONFIG V4L2_SEL_FLAG_KEEP_CONFIG
127 /*
128  * End of v4l2-common.h
129  */
130 /* Inline #include <linux/v4l2-controls.h>
131  * (v4l2-controls.h was split off from videodev2.h and has the same BSD license.)
132  *
133  * Begin of v4l2-controls.h
134  */
135 /* Control classes */
136 #define V4L2_CTRL_CLASS_USER		0x00980000	/* Old-style 'user' controls */
137 #define V4L2_CTRL_CLASS_CODEC		0x00990000	/* Stateful codec controls */
138 #define V4L2_CTRL_CLASS_CAMERA		0x009a0000	/* Camera class controls */
139 #define V4L2_CTRL_CLASS_FM_TX		0x009b0000	/* FM Modulator controls */
140 #define V4L2_CTRL_CLASS_FLASH		0x009c0000	/* Camera flash controls */
141 #define V4L2_CTRL_CLASS_JPEG		0x009d0000	/* JPEG-compression controls */
142 #define V4L2_CTRL_CLASS_IMAGE_SOURCE	0x009e0000	/* Image source controls */
143 #define V4L2_CTRL_CLASS_IMAGE_PROC	0x009f0000	/* Image processing controls */
144 #define V4L2_CTRL_CLASS_DV		0x00a00000	/* Digital Video controls */
145 #define V4L2_CTRL_CLASS_FM_RX		0x00a10000	/* FM Receiver controls */
146 #define V4L2_CTRL_CLASS_RF_TUNER	0x00a20000	/* RF tuner controls */
147 #define V4L2_CTRL_CLASS_DETECT		0x00a30000	/* Detection controls */
148 #define V4L2_CTRL_CLASS_CODEC_STATELESS 0x00a40000	/* Stateless codecs controls */
149 #define V4L2_CTRL_CLASS_COLORIMETRY	0x00a50000	/* Colorimetry controls */
150 
151 /* User-class control IDs */
152 
153 #define V4L2_CID_BASE			(V4L2_CTRL_CLASS_USER | 0x900)
154 #define V4L2_CID_USER_BASE		V4L2_CID_BASE
155 #define V4L2_CID_USER_CLASS		(V4L2_CTRL_CLASS_USER | 1)
156 #define V4L2_CID_BRIGHTNESS		(V4L2_CID_BASE+0)
157 #define V4L2_CID_CONTRAST		(V4L2_CID_BASE+1)
158 #define V4L2_CID_SATURATION		(V4L2_CID_BASE+2)
159 #define V4L2_CID_HUE			(V4L2_CID_BASE+3)
160 #define V4L2_CID_AUDIO_VOLUME		(V4L2_CID_BASE+5)
161 #define V4L2_CID_AUDIO_BALANCE		(V4L2_CID_BASE+6)
162 #define V4L2_CID_AUDIO_BASS		(V4L2_CID_BASE+7)
163 #define V4L2_CID_AUDIO_TREBLE		(V4L2_CID_BASE+8)
164 #define V4L2_CID_AUDIO_MUTE		(V4L2_CID_BASE+9)
165 #define V4L2_CID_AUDIO_LOUDNESS		(V4L2_CID_BASE+10)
166 #define V4L2_CID_BLACK_LEVEL		(V4L2_CID_BASE+11) /* Deprecated */
167 #define V4L2_CID_AUTO_WHITE_BALANCE	(V4L2_CID_BASE+12)
168 #define V4L2_CID_DO_WHITE_BALANCE	(V4L2_CID_BASE+13)
169 #define V4L2_CID_RED_BALANCE		(V4L2_CID_BASE+14)
170 #define V4L2_CID_BLUE_BALANCE		(V4L2_CID_BASE+15)
171 #define V4L2_CID_GAMMA			(V4L2_CID_BASE+16)
172 #define V4L2_CID_WHITENESS		(V4L2_CID_GAMMA) /* Deprecated */
173 #define V4L2_CID_EXPOSURE		(V4L2_CID_BASE+17)
174 #define V4L2_CID_AUTOGAIN		(V4L2_CID_BASE+18)
175 #define V4L2_CID_GAIN			(V4L2_CID_BASE+19)
176 #define V4L2_CID_HFLIP			(V4L2_CID_BASE+20)
177 #define V4L2_CID_VFLIP			(V4L2_CID_BASE+21)
178 
179 #define V4L2_CID_POWER_LINE_FREQUENCY	(V4L2_CID_BASE+24)
180 enum v4l2_power_line_frequency {
181 	V4L2_CID_POWER_LINE_FREQUENCY_DISABLED	= 0,
182 	V4L2_CID_POWER_LINE_FREQUENCY_50HZ	= 1,
183 	V4L2_CID_POWER_LINE_FREQUENCY_60HZ	= 2,
184 	V4L2_CID_POWER_LINE_FREQUENCY_AUTO	= 3,
185 };
186 #define V4L2_CID_HUE_AUTO			(V4L2_CID_BASE+25)
187 #define V4L2_CID_WHITE_BALANCE_TEMPERATURE	(V4L2_CID_BASE+26)
188 #define V4L2_CID_SHARPNESS			(V4L2_CID_BASE+27)
189 #define V4L2_CID_BACKLIGHT_COMPENSATION		(V4L2_CID_BASE+28)
190 #define V4L2_CID_CHROMA_AGC                     (V4L2_CID_BASE+29)
191 #define V4L2_CID_COLOR_KILLER                   (V4L2_CID_BASE+30)
192 #define V4L2_CID_COLORFX			(V4L2_CID_BASE+31)
193 enum v4l2_colorfx {
194 	V4L2_COLORFX_NONE			= 0,
195 	V4L2_COLORFX_BW				= 1,
196 	V4L2_COLORFX_SEPIA			= 2,
197 	V4L2_COLORFX_NEGATIVE			= 3,
198 	V4L2_COLORFX_EMBOSS			= 4,
199 	V4L2_COLORFX_SKETCH			= 5,
200 	V4L2_COLORFX_SKY_BLUE			= 6,
201 	V4L2_COLORFX_GRASS_GREEN		= 7,
202 	V4L2_COLORFX_SKIN_WHITEN		= 8,
203 	V4L2_COLORFX_VIVID			= 9,
204 	V4L2_COLORFX_AQUA			= 10,
205 	V4L2_COLORFX_ART_FREEZE			= 11,
206 	V4L2_COLORFX_SILHOUETTE			= 12,
207 	V4L2_COLORFX_SOLARIZATION		= 13,
208 	V4L2_COLORFX_ANTIQUE			= 14,
209 	V4L2_COLORFX_SET_CBCR			= 15,
210 	V4L2_COLORFX_SET_RGB			= 16,
211 };
212 #define V4L2_CID_AUTOBRIGHTNESS			(V4L2_CID_BASE+32)
213 #define V4L2_CID_BAND_STOP_FILTER		(V4L2_CID_BASE+33)
214 
215 #define V4L2_CID_ROTATE				(V4L2_CID_BASE+34)
216 #define V4L2_CID_BG_COLOR			(V4L2_CID_BASE+35)
217 
218 #define V4L2_CID_CHROMA_GAIN                    (V4L2_CID_BASE+36)
219 
220 #define V4L2_CID_ILLUMINATORS_1			(V4L2_CID_BASE+37)
221 #define V4L2_CID_ILLUMINATORS_2			(V4L2_CID_BASE+38)
222 
223 #define V4L2_CID_MIN_BUFFERS_FOR_CAPTURE	(V4L2_CID_BASE+39)
224 #define V4L2_CID_MIN_BUFFERS_FOR_OUTPUT		(V4L2_CID_BASE+40)
225 
226 #define V4L2_CID_ALPHA_COMPONENT		(V4L2_CID_BASE+41)
227 #define V4L2_CID_COLORFX_CBCR			(V4L2_CID_BASE+42)
228 #define V4L2_CID_COLORFX_RGB			(V4L2_CID_BASE+43)
229 
230 /* last CID + 1 */
231 #define V4L2_CID_LASTP1                         (V4L2_CID_BASE+44)
232 
233 /* USER-class private control IDs */
234 
235 /*
236  * The base for the meye driver controls. This driver was removed, but
237  * we keep this define in case any software still uses it.
238  */
239 #define V4L2_CID_USER_MEYE_BASE			(V4L2_CID_USER_BASE + 0x1000)
240 
241 /* The base for the bttv driver controls.
242  * We reserve 32 controls for this driver. */
243 #define V4L2_CID_USER_BTTV_BASE			(V4L2_CID_USER_BASE + 0x1010)
244 
245 
246 /* The base for the s2255 driver controls.
247  * We reserve 16 controls for this driver. */
248 #define V4L2_CID_USER_S2255_BASE		(V4L2_CID_USER_BASE + 0x1030)
249 
250 /*
251  * The base for the si476x driver controls. See include/media/drv-intf/si476x.h
252  * for the list of controls. Total of 16 controls is reserved for this driver
253  */
254 #define V4L2_CID_USER_SI476X_BASE		(V4L2_CID_USER_BASE + 0x1040)
255 
256 /* The base for the TI VPE driver controls. Total of 16 controls is reserved for
257  * this driver */
258 #define V4L2_CID_USER_TI_VPE_BASE		(V4L2_CID_USER_BASE + 0x1050)
259 
260 /* The base for the saa7134 driver controls.
261  * We reserve 16 controls for this driver. */
262 #define V4L2_CID_USER_SAA7134_BASE		(V4L2_CID_USER_BASE + 0x1060)
263 
264 /* The base for the adv7180 driver controls.
265  * We reserve 16 controls for this driver. */
266 #define V4L2_CID_USER_ADV7180_BASE		(V4L2_CID_USER_BASE + 0x1070)
267 
268 /* The base for the tc358743 driver controls.
269  * We reserve 16 controls for this driver. */
270 #define V4L2_CID_USER_TC358743_BASE		(V4L2_CID_USER_BASE + 0x1080)
271 
272 /* The base for the max217x driver controls.
273  * We reserve 32 controls for this driver
274  */
275 #define V4L2_CID_USER_MAX217X_BASE		(V4L2_CID_USER_BASE + 0x1090)
276 
277 /* The base for the imx driver controls.
278  * We reserve 16 controls for this driver. */
279 #define V4L2_CID_USER_IMX_BASE			(V4L2_CID_USER_BASE + 0x10b0)
280 
281 /*
282  * The base for the atmel isc driver controls.
283  * We reserve 32 controls for this driver.
284  */
285 #define V4L2_CID_USER_ATMEL_ISC_BASE		(V4L2_CID_USER_BASE + 0x10c0)
286 
287 /*
288  * The base for the CODA driver controls.
289  * We reserve 16 controls for this driver.
290  */
291 #define V4L2_CID_USER_CODA_BASE			(V4L2_CID_USER_BASE + 0x10e0)
292 /*
293  * The base for MIPI CCS driver controls.
294  * We reserve 128 controls for this driver.
295  */
296 #define V4L2_CID_USER_CCS_BASE			(V4L2_CID_USER_BASE + 0x10f0)
297 /*
298  * The base for Allegro driver controls.
299  * We reserve 16 controls for this driver.
300  */
301 #define V4L2_CID_USER_ALLEGRO_BASE		(V4L2_CID_USER_BASE + 0x1170)
302 
303 /*
304  * The base for the isl7998x driver controls.
305  * We reserve 16 controls for this driver.
306  */
307 #define V4L2_CID_USER_ISL7998X_BASE		(V4L2_CID_USER_BASE + 0x1180)
308 
309 /*
310  * The base for DW100 driver controls.
311  * We reserve 16 controls for this driver.
312  */
313 #define V4L2_CID_USER_DW100_BASE		(V4L2_CID_USER_BASE + 0x1190)
314 
315 /*
316  * The base for Aspeed driver controls.
317  * We reserve 16 controls for this driver.
318  */
319 #define V4L2_CID_USER_ASPEED_BASE		(V4L2_CID_USER_BASE + 0x11a0)
320 
321 /*
322  * The base for Nuvoton NPCM driver controls.
323  * We reserve 16 controls for this driver.
324  */
325 #define V4L2_CID_USER_NPCM_BASE			(V4L2_CID_USER_BASE + 0x11b0)
326 
327 /*
328  * The base for THine THP7312 driver controls.
329  * We reserve 32 controls for this driver.
330  */
331 #define V4L2_CID_USER_THP7312_BASE		(V4L2_CID_USER_BASE + 0x11c0)
332 
333 /* MPEG-class control IDs */
334 /* The MPEG controls are applicable to all codec controls
335  * and the 'MPEG' part of the define is historical */
336 
337 #define V4L2_CID_CODEC_BASE			(V4L2_CTRL_CLASS_CODEC | 0x900)
338 #define V4L2_CID_CODEC_CLASS			(V4L2_CTRL_CLASS_CODEC | 1)
339 
340 /*  MPEG streams, specific to multiplexed streams */
341 #define V4L2_CID_MPEG_STREAM_TYPE		(V4L2_CID_CODEC_BASE+0)
342 enum v4l2_mpeg_stream_type {
343 	V4L2_MPEG_STREAM_TYPE_MPEG2_PS   = 0, /* MPEG-2 program stream */
344 	V4L2_MPEG_STREAM_TYPE_MPEG2_TS   = 1, /* MPEG-2 transport stream */
345 	V4L2_MPEG_STREAM_TYPE_MPEG1_SS   = 2, /* MPEG-1 system stream */
346 	V4L2_MPEG_STREAM_TYPE_MPEG2_DVD  = 3, /* MPEG-2 DVD-compatible stream */
347 	V4L2_MPEG_STREAM_TYPE_MPEG1_VCD  = 4, /* MPEG-1 VCD-compatible stream */
348 	V4L2_MPEG_STREAM_TYPE_MPEG2_SVCD = 5, /* MPEG-2 SVCD-compatible stream */
349 };
350 #define V4L2_CID_MPEG_STREAM_PID_PMT		(V4L2_CID_CODEC_BASE+1)
351 #define V4L2_CID_MPEG_STREAM_PID_AUDIO		(V4L2_CID_CODEC_BASE+2)
352 #define V4L2_CID_MPEG_STREAM_PID_VIDEO		(V4L2_CID_CODEC_BASE+3)
353 #define V4L2_CID_MPEG_STREAM_PID_PCR		(V4L2_CID_CODEC_BASE+4)
354 #define V4L2_CID_MPEG_STREAM_PES_ID_AUDIO	(V4L2_CID_CODEC_BASE+5)
355 #define V4L2_CID_MPEG_STREAM_PES_ID_VIDEO	(V4L2_CID_CODEC_BASE+6)
356 #define V4L2_CID_MPEG_STREAM_VBI_FMT		(V4L2_CID_CODEC_BASE+7)
357 enum v4l2_mpeg_stream_vbi_fmt {
358 	V4L2_MPEG_STREAM_VBI_FMT_NONE = 0,  /* No VBI in the MPEG stream */
359 	V4L2_MPEG_STREAM_VBI_FMT_IVTV = 1,  /* VBI in private packets, IVTV format */
360 };
361 
362 /*  MPEG audio controls specific to multiplexed streams  */
363 #define V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ	(V4L2_CID_CODEC_BASE+100)
364 enum v4l2_mpeg_audio_sampling_freq {
365 	V4L2_MPEG_AUDIO_SAMPLING_FREQ_44100 = 0,
366 	V4L2_MPEG_AUDIO_SAMPLING_FREQ_48000 = 1,
367 	V4L2_MPEG_AUDIO_SAMPLING_FREQ_32000 = 2,
368 };
369 #define V4L2_CID_MPEG_AUDIO_ENCODING		(V4L2_CID_CODEC_BASE+101)
370 enum v4l2_mpeg_audio_encoding {
371 	V4L2_MPEG_AUDIO_ENCODING_LAYER_1 = 0,
372 	V4L2_MPEG_AUDIO_ENCODING_LAYER_2 = 1,
373 	V4L2_MPEG_AUDIO_ENCODING_LAYER_3 = 2,
374 	V4L2_MPEG_AUDIO_ENCODING_AAC     = 3,
375 	V4L2_MPEG_AUDIO_ENCODING_AC3     = 4,
376 };
377 #define V4L2_CID_MPEG_AUDIO_L1_BITRATE		(V4L2_CID_CODEC_BASE+102)
378 enum v4l2_mpeg_audio_l1_bitrate {
379 	V4L2_MPEG_AUDIO_L1_BITRATE_32K  = 0,
380 	V4L2_MPEG_AUDIO_L1_BITRATE_64K  = 1,
381 	V4L2_MPEG_AUDIO_L1_BITRATE_96K  = 2,
382 	V4L2_MPEG_AUDIO_L1_BITRATE_128K = 3,
383 	V4L2_MPEG_AUDIO_L1_BITRATE_160K = 4,
384 	V4L2_MPEG_AUDIO_L1_BITRATE_192K = 5,
385 	V4L2_MPEG_AUDIO_L1_BITRATE_224K = 6,
386 	V4L2_MPEG_AUDIO_L1_BITRATE_256K = 7,
387 	V4L2_MPEG_AUDIO_L1_BITRATE_288K = 8,
388 	V4L2_MPEG_AUDIO_L1_BITRATE_320K = 9,
389 	V4L2_MPEG_AUDIO_L1_BITRATE_352K = 10,
390 	V4L2_MPEG_AUDIO_L1_BITRATE_384K = 11,
391 	V4L2_MPEG_AUDIO_L1_BITRATE_416K = 12,
392 	V4L2_MPEG_AUDIO_L1_BITRATE_448K = 13,
393 };
394 #define V4L2_CID_MPEG_AUDIO_L2_BITRATE		(V4L2_CID_CODEC_BASE+103)
395 enum v4l2_mpeg_audio_l2_bitrate {
396 	V4L2_MPEG_AUDIO_L2_BITRATE_32K  = 0,
397 	V4L2_MPEG_AUDIO_L2_BITRATE_48K  = 1,
398 	V4L2_MPEG_AUDIO_L2_BITRATE_56K  = 2,
399 	V4L2_MPEG_AUDIO_L2_BITRATE_64K  = 3,
400 	V4L2_MPEG_AUDIO_L2_BITRATE_80K  = 4,
401 	V4L2_MPEG_AUDIO_L2_BITRATE_96K  = 5,
402 	V4L2_MPEG_AUDIO_L2_BITRATE_112K = 6,
403 	V4L2_MPEG_AUDIO_L2_BITRATE_128K = 7,
404 	V4L2_MPEG_AUDIO_L2_BITRATE_160K = 8,
405 	V4L2_MPEG_AUDIO_L2_BITRATE_192K = 9,
406 	V4L2_MPEG_AUDIO_L2_BITRATE_224K = 10,
407 	V4L2_MPEG_AUDIO_L2_BITRATE_256K = 11,
408 	V4L2_MPEG_AUDIO_L2_BITRATE_320K = 12,
409 	V4L2_MPEG_AUDIO_L2_BITRATE_384K = 13,
410 };
411 #define V4L2_CID_MPEG_AUDIO_L3_BITRATE		(V4L2_CID_CODEC_BASE+104)
412 enum v4l2_mpeg_audio_l3_bitrate {
413 	V4L2_MPEG_AUDIO_L3_BITRATE_32K  = 0,
414 	V4L2_MPEG_AUDIO_L3_BITRATE_40K  = 1,
415 	V4L2_MPEG_AUDIO_L3_BITRATE_48K  = 2,
416 	V4L2_MPEG_AUDIO_L3_BITRATE_56K  = 3,
417 	V4L2_MPEG_AUDIO_L3_BITRATE_64K  = 4,
418 	V4L2_MPEG_AUDIO_L3_BITRATE_80K  = 5,
419 	V4L2_MPEG_AUDIO_L3_BITRATE_96K  = 6,
420 	V4L2_MPEG_AUDIO_L3_BITRATE_112K = 7,
421 	V4L2_MPEG_AUDIO_L3_BITRATE_128K = 8,
422 	V4L2_MPEG_AUDIO_L3_BITRATE_160K = 9,
423 	V4L2_MPEG_AUDIO_L3_BITRATE_192K = 10,
424 	V4L2_MPEG_AUDIO_L3_BITRATE_224K = 11,
425 	V4L2_MPEG_AUDIO_L3_BITRATE_256K = 12,
426 	V4L2_MPEG_AUDIO_L3_BITRATE_320K = 13,
427 };
428 #define V4L2_CID_MPEG_AUDIO_MODE		(V4L2_CID_CODEC_BASE+105)
429 enum v4l2_mpeg_audio_mode {
430 	V4L2_MPEG_AUDIO_MODE_STEREO       = 0,
431 	V4L2_MPEG_AUDIO_MODE_JOINT_STEREO = 1,
432 	V4L2_MPEG_AUDIO_MODE_DUAL         = 2,
433 	V4L2_MPEG_AUDIO_MODE_MONO         = 3,
434 };
435 #define V4L2_CID_MPEG_AUDIO_MODE_EXTENSION	(V4L2_CID_CODEC_BASE+106)
436 enum v4l2_mpeg_audio_mode_extension {
437 	V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_4  = 0,
438 	V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_8  = 1,
439 	V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_12 = 2,
440 	V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_16 = 3,
441 };
442 #define V4L2_CID_MPEG_AUDIO_EMPHASIS		(V4L2_CID_CODEC_BASE+107)
443 enum v4l2_mpeg_audio_emphasis {
444 	V4L2_MPEG_AUDIO_EMPHASIS_NONE         = 0,
445 	V4L2_MPEG_AUDIO_EMPHASIS_50_DIV_15_uS = 1,
446 	V4L2_MPEG_AUDIO_EMPHASIS_CCITT_J17    = 2,
447 };
448 #define V4L2_CID_MPEG_AUDIO_CRC			(V4L2_CID_CODEC_BASE+108)
449 enum v4l2_mpeg_audio_crc {
450 	V4L2_MPEG_AUDIO_CRC_NONE  = 0,
451 	V4L2_MPEG_AUDIO_CRC_CRC16 = 1,
452 };
453 #define V4L2_CID_MPEG_AUDIO_MUTE		(V4L2_CID_CODEC_BASE+109)
454 #define V4L2_CID_MPEG_AUDIO_AAC_BITRATE		(V4L2_CID_CODEC_BASE+110)
455 #define V4L2_CID_MPEG_AUDIO_AC3_BITRATE		(V4L2_CID_CODEC_BASE+111)
456 enum v4l2_mpeg_audio_ac3_bitrate {
457 	V4L2_MPEG_AUDIO_AC3_BITRATE_32K  = 0,
458 	V4L2_MPEG_AUDIO_AC3_BITRATE_40K  = 1,
459 	V4L2_MPEG_AUDIO_AC3_BITRATE_48K  = 2,
460 	V4L2_MPEG_AUDIO_AC3_BITRATE_56K  = 3,
461 	V4L2_MPEG_AUDIO_AC3_BITRATE_64K  = 4,
462 	V4L2_MPEG_AUDIO_AC3_BITRATE_80K  = 5,
463 	V4L2_MPEG_AUDIO_AC3_BITRATE_96K  = 6,
464 	V4L2_MPEG_AUDIO_AC3_BITRATE_112K = 7,
465 	V4L2_MPEG_AUDIO_AC3_BITRATE_128K = 8,
466 	V4L2_MPEG_AUDIO_AC3_BITRATE_160K = 9,
467 	V4L2_MPEG_AUDIO_AC3_BITRATE_192K = 10,
468 	V4L2_MPEG_AUDIO_AC3_BITRATE_224K = 11,
469 	V4L2_MPEG_AUDIO_AC3_BITRATE_256K = 12,
470 	V4L2_MPEG_AUDIO_AC3_BITRATE_320K = 13,
471 	V4L2_MPEG_AUDIO_AC3_BITRATE_384K = 14,
472 	V4L2_MPEG_AUDIO_AC3_BITRATE_448K = 15,
473 	V4L2_MPEG_AUDIO_AC3_BITRATE_512K = 16,
474 	V4L2_MPEG_AUDIO_AC3_BITRATE_576K = 17,
475 	V4L2_MPEG_AUDIO_AC3_BITRATE_640K = 18,
476 };
477 #define V4L2_CID_MPEG_AUDIO_DEC_PLAYBACK	(V4L2_CID_CODEC_BASE+112)
478 enum v4l2_mpeg_audio_dec_playback {
479 	V4L2_MPEG_AUDIO_DEC_PLAYBACK_AUTO	    = 0,
480 	V4L2_MPEG_AUDIO_DEC_PLAYBACK_STEREO	    = 1,
481 	V4L2_MPEG_AUDIO_DEC_PLAYBACK_LEFT	    = 2,
482 	V4L2_MPEG_AUDIO_DEC_PLAYBACK_RIGHT	    = 3,
483 	V4L2_MPEG_AUDIO_DEC_PLAYBACK_MONO	    = 4,
484 	V4L2_MPEG_AUDIO_DEC_PLAYBACK_SWAPPED_STEREO = 5,
485 };
486 #define V4L2_CID_MPEG_AUDIO_DEC_MULTILINGUAL_PLAYBACK (V4L2_CID_CODEC_BASE+113)
487 
488 /*  MPEG video controls specific to multiplexed streams */
489 #define V4L2_CID_MPEG_VIDEO_ENCODING		(V4L2_CID_CODEC_BASE+200)
490 enum v4l2_mpeg_video_encoding {
491 	V4L2_MPEG_VIDEO_ENCODING_MPEG_1     = 0,
492 	V4L2_MPEG_VIDEO_ENCODING_MPEG_2     = 1,
493 	V4L2_MPEG_VIDEO_ENCODING_MPEG_4_AVC = 2,
494 };
495 #define V4L2_CID_MPEG_VIDEO_ASPECT		(V4L2_CID_CODEC_BASE+201)
496 enum v4l2_mpeg_video_aspect {
497 	V4L2_MPEG_VIDEO_ASPECT_1x1     = 0,
498 	V4L2_MPEG_VIDEO_ASPECT_4x3     = 1,
499 	V4L2_MPEG_VIDEO_ASPECT_16x9    = 2,
500 	V4L2_MPEG_VIDEO_ASPECT_221x100 = 3,
501 };
502 #define V4L2_CID_MPEG_VIDEO_B_FRAMES		(V4L2_CID_CODEC_BASE+202)
503 #define V4L2_CID_MPEG_VIDEO_GOP_SIZE		(V4L2_CID_CODEC_BASE+203)
504 #define V4L2_CID_MPEG_VIDEO_GOP_CLOSURE		(V4L2_CID_CODEC_BASE+204)
505 #define V4L2_CID_MPEG_VIDEO_PULLDOWN		(V4L2_CID_CODEC_BASE+205)
506 #define V4L2_CID_MPEG_VIDEO_BITRATE_MODE	(V4L2_CID_CODEC_BASE+206)
507 enum v4l2_mpeg_video_bitrate_mode {
508 	V4L2_MPEG_VIDEO_BITRATE_MODE_VBR = 0,
509 	V4L2_MPEG_VIDEO_BITRATE_MODE_CBR = 1,
510 	V4L2_MPEG_VIDEO_BITRATE_MODE_CQ  = 2,
511 };
512 #define V4L2_CID_MPEG_VIDEO_BITRATE		(V4L2_CID_CODEC_BASE+207)
513 #define V4L2_CID_MPEG_VIDEO_BITRATE_PEAK	(V4L2_CID_CODEC_BASE+208)
514 #define V4L2_CID_MPEG_VIDEO_TEMPORAL_DECIMATION (V4L2_CID_CODEC_BASE+209)
515 #define V4L2_CID_MPEG_VIDEO_MUTE		(V4L2_CID_CODEC_BASE+210)
516 #define V4L2_CID_MPEG_VIDEO_MUTE_YUV		(V4L2_CID_CODEC_BASE+211)
517 #define V4L2_CID_MPEG_VIDEO_DECODER_SLICE_INTERFACE		(V4L2_CID_CODEC_BASE+212)
518 #define V4L2_CID_MPEG_VIDEO_DECODER_MPEG4_DEBLOCK_FILTER	(V4L2_CID_CODEC_BASE+213)
519 #define V4L2_CID_MPEG_VIDEO_CYCLIC_INTRA_REFRESH_MB		(V4L2_CID_CODEC_BASE+214)
520 #define V4L2_CID_MPEG_VIDEO_FRAME_RC_ENABLE			(V4L2_CID_CODEC_BASE+215)
521 #define V4L2_CID_MPEG_VIDEO_HEADER_MODE				(V4L2_CID_CODEC_BASE+216)
522 enum v4l2_mpeg_video_header_mode {
523 	V4L2_MPEG_VIDEO_HEADER_MODE_SEPARATE			= 0,
524 	V4L2_MPEG_VIDEO_HEADER_MODE_JOINED_WITH_1ST_FRAME	= 1,
525 
526 };
527 #define V4L2_CID_MPEG_VIDEO_MAX_REF_PIC			(V4L2_CID_CODEC_BASE+217)
528 #define V4L2_CID_MPEG_VIDEO_MB_RC_ENABLE		(V4L2_CID_CODEC_BASE+218)
529 #define V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_BYTES	(V4L2_CID_CODEC_BASE+219)
530 #define V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_MB		(V4L2_CID_CODEC_BASE+220)
531 #define V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE		(V4L2_CID_CODEC_BASE+221)
532 enum v4l2_mpeg_video_multi_slice_mode {
533 	V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_SINGLE		= 0,
534 	V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_MAX_MB		= 1,
535 	V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_MAX_BYTES	= 2,
536 	/* Kept for backwards compatibility reasons. Stupid typo... */
537 	V4L2_MPEG_VIDEO_MULTI_SICE_MODE_MAX_MB		= 1,
538 	V4L2_MPEG_VIDEO_MULTI_SICE_MODE_MAX_BYTES	= 2,
539 };
540 #define V4L2_CID_MPEG_VIDEO_VBV_SIZE			(V4L2_CID_CODEC_BASE+222)
541 #define V4L2_CID_MPEG_VIDEO_DEC_PTS			(V4L2_CID_CODEC_BASE+223)
542 #define V4L2_CID_MPEG_VIDEO_DEC_FRAME			(V4L2_CID_CODEC_BASE+224)
543 #define V4L2_CID_MPEG_VIDEO_VBV_DELAY			(V4L2_CID_CODEC_BASE+225)
544 #define V4L2_CID_MPEG_VIDEO_REPEAT_SEQ_HEADER		(V4L2_CID_CODEC_BASE+226)
545 #define V4L2_CID_MPEG_VIDEO_MV_H_SEARCH_RANGE		(V4L2_CID_CODEC_BASE+227)
546 #define V4L2_CID_MPEG_VIDEO_MV_V_SEARCH_RANGE		(V4L2_CID_CODEC_BASE+228)
547 #define V4L2_CID_MPEG_VIDEO_FORCE_KEY_FRAME		(V4L2_CID_CODEC_BASE+229)
548 #define V4L2_CID_MPEG_VIDEO_BASELAYER_PRIORITY_ID	(V4L2_CID_CODEC_BASE+230)
549 #define V4L2_CID_MPEG_VIDEO_AU_DELIMITER		(V4L2_CID_CODEC_BASE+231)
550 #define V4L2_CID_MPEG_VIDEO_LTR_COUNT			(V4L2_CID_CODEC_BASE+232)
551 #define V4L2_CID_MPEG_VIDEO_FRAME_LTR_INDEX		(V4L2_CID_CODEC_BASE+233)
552 #define V4L2_CID_MPEG_VIDEO_USE_LTR_FRAMES		(V4L2_CID_CODEC_BASE+234)
553 #define V4L2_CID_MPEG_VIDEO_DEC_CONCEAL_COLOR		(V4L2_CID_CODEC_BASE+235)
554 #define V4L2_CID_MPEG_VIDEO_INTRA_REFRESH_PERIOD	(V4L2_CID_CODEC_BASE+236)
555 #define V4L2_CID_MPEG_VIDEO_INTRA_REFRESH_PERIOD_TYPE	(V4L2_CID_CODEC_BASE+237)
556 enum v4l2_mpeg_video_intra_refresh_period_type {
557 	V4L2_CID_MPEG_VIDEO_INTRA_REFRESH_PERIOD_TYPE_RANDOM	= 0,
558 	V4L2_CID_MPEG_VIDEO_INTRA_REFRESH_PERIOD_TYPE_CYCLIC	= 1,
559 };
560 
561 /* CIDs for the MPEG-2 Part 2 (H.262) codec */
562 #define V4L2_CID_MPEG_VIDEO_MPEG2_LEVEL			(V4L2_CID_CODEC_BASE+270)
563 enum v4l2_mpeg_video_mpeg2_level {
564 	V4L2_MPEG_VIDEO_MPEG2_LEVEL_LOW		= 0,
565 	V4L2_MPEG_VIDEO_MPEG2_LEVEL_MAIN	= 1,
566 	V4L2_MPEG_VIDEO_MPEG2_LEVEL_HIGH_1440	= 2,
567 	V4L2_MPEG_VIDEO_MPEG2_LEVEL_HIGH	= 3,
568 };
569 #define V4L2_CID_MPEG_VIDEO_MPEG2_PROFILE		(V4L2_CID_CODEC_BASE+271)
570 enum v4l2_mpeg_video_mpeg2_profile {
571 	V4L2_MPEG_VIDEO_MPEG2_PROFILE_SIMPLE				= 0,
572 	V4L2_MPEG_VIDEO_MPEG2_PROFILE_MAIN				= 1,
573 	V4L2_MPEG_VIDEO_MPEG2_PROFILE_SNR_SCALABLE			= 2,
574 	V4L2_MPEG_VIDEO_MPEG2_PROFILE_SPATIALLY_SCALABLE		= 3,
575 	V4L2_MPEG_VIDEO_MPEG2_PROFILE_HIGH				= 4,
576 	V4L2_MPEG_VIDEO_MPEG2_PROFILE_MULTIVIEW				= 5,
577 };
578 
579 /* CIDs for the FWHT codec as used by the vicodec driver. */
580 #define V4L2_CID_FWHT_I_FRAME_QP             (V4L2_CID_CODEC_BASE + 290)
581 #define V4L2_CID_FWHT_P_FRAME_QP             (V4L2_CID_CODEC_BASE + 291)
582 
583 #define V4L2_CID_MPEG_VIDEO_H263_I_FRAME_QP		(V4L2_CID_CODEC_BASE+300)
584 #define V4L2_CID_MPEG_VIDEO_H263_P_FRAME_QP		(V4L2_CID_CODEC_BASE+301)
585 #define V4L2_CID_MPEG_VIDEO_H263_B_FRAME_QP		(V4L2_CID_CODEC_BASE+302)
586 #define V4L2_CID_MPEG_VIDEO_H263_MIN_QP			(V4L2_CID_CODEC_BASE+303)
587 #define V4L2_CID_MPEG_VIDEO_H263_MAX_QP			(V4L2_CID_CODEC_BASE+304)
588 #define V4L2_CID_MPEG_VIDEO_H264_I_FRAME_QP		(V4L2_CID_CODEC_BASE+350)
589 #define V4L2_CID_MPEG_VIDEO_H264_P_FRAME_QP		(V4L2_CID_CODEC_BASE+351)
590 #define V4L2_CID_MPEG_VIDEO_H264_B_FRAME_QP		(V4L2_CID_CODEC_BASE+352)
591 #define V4L2_CID_MPEG_VIDEO_H264_MIN_QP			(V4L2_CID_CODEC_BASE+353)
592 #define V4L2_CID_MPEG_VIDEO_H264_MAX_QP			(V4L2_CID_CODEC_BASE+354)
593 #define V4L2_CID_MPEG_VIDEO_H264_8X8_TRANSFORM		(V4L2_CID_CODEC_BASE+355)
594 #define V4L2_CID_MPEG_VIDEO_H264_CPB_SIZE		(V4L2_CID_CODEC_BASE+356)
595 #define V4L2_CID_MPEG_VIDEO_H264_ENTROPY_MODE		(V4L2_CID_CODEC_BASE+357)
596 enum v4l2_mpeg_video_h264_entropy_mode {
597 	V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CAVLC	= 0,
598 	V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CABAC	= 1,
599 };
600 #define V4L2_CID_MPEG_VIDEO_H264_I_PERIOD		(V4L2_CID_CODEC_BASE+358)
601 #define V4L2_CID_MPEG_VIDEO_H264_LEVEL			(V4L2_CID_CODEC_BASE+359)
602 enum v4l2_mpeg_video_h264_level {
603 	V4L2_MPEG_VIDEO_H264_LEVEL_1_0	= 0,
604 	V4L2_MPEG_VIDEO_H264_LEVEL_1B	= 1,
605 	V4L2_MPEG_VIDEO_H264_LEVEL_1_1	= 2,
606 	V4L2_MPEG_VIDEO_H264_LEVEL_1_2	= 3,
607 	V4L2_MPEG_VIDEO_H264_LEVEL_1_3	= 4,
608 	V4L2_MPEG_VIDEO_H264_LEVEL_2_0	= 5,
609 	V4L2_MPEG_VIDEO_H264_LEVEL_2_1	= 6,
610 	V4L2_MPEG_VIDEO_H264_LEVEL_2_2	= 7,
611 	V4L2_MPEG_VIDEO_H264_LEVEL_3_0	= 8,
612 	V4L2_MPEG_VIDEO_H264_LEVEL_3_1	= 9,
613 	V4L2_MPEG_VIDEO_H264_LEVEL_3_2	= 10,
614 	V4L2_MPEG_VIDEO_H264_LEVEL_4_0	= 11,
615 	V4L2_MPEG_VIDEO_H264_LEVEL_4_1	= 12,
616 	V4L2_MPEG_VIDEO_H264_LEVEL_4_2	= 13,
617 	V4L2_MPEG_VIDEO_H264_LEVEL_5_0	= 14,
618 	V4L2_MPEG_VIDEO_H264_LEVEL_5_1	= 15,
619 	V4L2_MPEG_VIDEO_H264_LEVEL_5_2	= 16,
620 	V4L2_MPEG_VIDEO_H264_LEVEL_6_0	= 17,
621 	V4L2_MPEG_VIDEO_H264_LEVEL_6_1	= 18,
622 	V4L2_MPEG_VIDEO_H264_LEVEL_6_2	= 19,
623 };
624 #define V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_ALPHA	(V4L2_CID_CODEC_BASE+360)
625 #define V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_BETA	(V4L2_CID_CODEC_BASE+361)
626 #define V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_MODE	(V4L2_CID_CODEC_BASE+362)
627 enum v4l2_mpeg_video_h264_loop_filter_mode {
628 	V4L2_MPEG_VIDEO_H264_LOOP_FILTER_MODE_ENABLED				= 0,
629 	V4L2_MPEG_VIDEO_H264_LOOP_FILTER_MODE_DISABLED				= 1,
630 	V4L2_MPEG_VIDEO_H264_LOOP_FILTER_MODE_DISABLED_AT_SLICE_BOUNDARY	= 2,
631 };
632 #define V4L2_CID_MPEG_VIDEO_H264_PROFILE		(V4L2_CID_CODEC_BASE+363)
633 enum v4l2_mpeg_video_h264_profile {
634 	V4L2_MPEG_VIDEO_H264_PROFILE_BASELINE			= 0,
635 	V4L2_MPEG_VIDEO_H264_PROFILE_CONSTRAINED_BASELINE	= 1,
636 	V4L2_MPEG_VIDEO_H264_PROFILE_MAIN			= 2,
637 	V4L2_MPEG_VIDEO_H264_PROFILE_EXTENDED			= 3,
638 	V4L2_MPEG_VIDEO_H264_PROFILE_HIGH			= 4,
639 	V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_10			= 5,
640 	V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_422			= 6,
641 	V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_444_PREDICTIVE	= 7,
642 	V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_10_INTRA		= 8,
643 	V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_422_INTRA		= 9,
644 	V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_444_INTRA		= 10,
645 	V4L2_MPEG_VIDEO_H264_PROFILE_CAVLC_444_INTRA		= 11,
646 	V4L2_MPEG_VIDEO_H264_PROFILE_SCALABLE_BASELINE		= 12,
647 	V4L2_MPEG_VIDEO_H264_PROFILE_SCALABLE_HIGH		= 13,
648 	V4L2_MPEG_VIDEO_H264_PROFILE_SCALABLE_HIGH_INTRA	= 14,
649 	V4L2_MPEG_VIDEO_H264_PROFILE_STEREO_HIGH		= 15,
650 	V4L2_MPEG_VIDEO_H264_PROFILE_MULTIVIEW_HIGH		= 16,
651 	V4L2_MPEG_VIDEO_H264_PROFILE_CONSTRAINED_HIGH		= 17,
652 };
653 #define V4L2_CID_MPEG_VIDEO_H264_VUI_EXT_SAR_HEIGHT	(V4L2_CID_CODEC_BASE+364)
654 #define V4L2_CID_MPEG_VIDEO_H264_VUI_EXT_SAR_WIDTH	(V4L2_CID_CODEC_BASE+365)
655 #define V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_ENABLE		(V4L2_CID_CODEC_BASE+366)
656 #define V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_IDC		(V4L2_CID_CODEC_BASE+367)
657 enum v4l2_mpeg_video_h264_vui_sar_idc {
658 	V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_UNSPECIFIED	= 0,
659 	V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_1x1		= 1,
660 	V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_12x11		= 2,
661 	V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_10x11		= 3,
662 	V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_16x11		= 4,
663 	V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_40x33		= 5,
664 	V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_24x11		= 6,
665 	V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_20x11		= 7,
666 	V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_32x11		= 8,
667 	V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_80x33		= 9,
668 	V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_18x11		= 10,
669 	V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_15x11		= 11,
670 	V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_64x33		= 12,
671 	V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_160x99		= 13,
672 	V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_4x3		= 14,
673 	V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_3x2		= 15,
674 	V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_2x1		= 16,
675 	V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_EXTENDED	= 17,
676 };
677 #define V4L2_CID_MPEG_VIDEO_H264_SEI_FRAME_PACKING		(V4L2_CID_CODEC_BASE+368)
678 #define V4L2_CID_MPEG_VIDEO_H264_SEI_FP_CURRENT_FRAME_0		(V4L2_CID_CODEC_BASE+369)
679 #define V4L2_CID_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE	(V4L2_CID_CODEC_BASE+370)
680 enum v4l2_mpeg_video_h264_sei_fp_arrangement_type {
681 	V4L2_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE_CHECKERBOARD	= 0,
682 	V4L2_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE_COLUMN		= 1,
683 	V4L2_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE_ROW		= 2,
684 	V4L2_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE_SIDE_BY_SIDE	= 3,
685 	V4L2_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE_TOP_BOTTOM		= 4,
686 	V4L2_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE_TEMPORAL		= 5,
687 };
688 #define V4L2_CID_MPEG_VIDEO_H264_FMO			(V4L2_CID_CODEC_BASE+371)
689 #define V4L2_CID_MPEG_VIDEO_H264_FMO_MAP_TYPE		(V4L2_CID_CODEC_BASE+372)
690 enum v4l2_mpeg_video_h264_fmo_map_type {
691 	V4L2_MPEG_VIDEO_H264_FMO_MAP_TYPE_INTERLEAVED_SLICES		= 0,
692 	V4L2_MPEG_VIDEO_H264_FMO_MAP_TYPE_SCATTERED_SLICES		= 1,
693 	V4L2_MPEG_VIDEO_H264_FMO_MAP_TYPE_FOREGROUND_WITH_LEFT_OVER	= 2,
694 	V4L2_MPEG_VIDEO_H264_FMO_MAP_TYPE_BOX_OUT			= 3,
695 	V4L2_MPEG_VIDEO_H264_FMO_MAP_TYPE_RASTER_SCAN			= 4,
696 	V4L2_MPEG_VIDEO_H264_FMO_MAP_TYPE_WIPE_SCAN			= 5,
697 	V4L2_MPEG_VIDEO_H264_FMO_MAP_TYPE_EXPLICIT			= 6,
698 };
699 #define V4L2_CID_MPEG_VIDEO_H264_FMO_SLICE_GROUP	(V4L2_CID_CODEC_BASE+373)
700 #define V4L2_CID_MPEG_VIDEO_H264_FMO_CHANGE_DIRECTION	(V4L2_CID_CODEC_BASE+374)
701 enum v4l2_mpeg_video_h264_fmo_change_dir {
702 	V4L2_MPEG_VIDEO_H264_FMO_CHANGE_DIR_RIGHT	= 0,
703 	V4L2_MPEG_VIDEO_H264_FMO_CHANGE_DIR_LEFT	= 1,
704 };
705 #define V4L2_CID_MPEG_VIDEO_H264_FMO_CHANGE_RATE	(V4L2_CID_CODEC_BASE+375)
706 #define V4L2_CID_MPEG_VIDEO_H264_FMO_RUN_LENGTH		(V4L2_CID_CODEC_BASE+376)
707 #define V4L2_CID_MPEG_VIDEO_H264_ASO			(V4L2_CID_CODEC_BASE+377)
708 #define V4L2_CID_MPEG_VIDEO_H264_ASO_SLICE_ORDER	(V4L2_CID_CODEC_BASE+378)
709 #define V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING		(V4L2_CID_CODEC_BASE+379)
710 #define V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_TYPE	(V4L2_CID_CODEC_BASE+380)
711 enum v4l2_mpeg_video_h264_hierarchical_coding_type {
712 	V4L2_MPEG_VIDEO_H264_HIERARCHICAL_CODING_B	= 0,
713 	V4L2_MPEG_VIDEO_H264_HIERARCHICAL_CODING_P	= 1,
714 };
715 #define V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_LAYER	(V4L2_CID_CODEC_BASE+381)
716 #define V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_LAYER_QP	(V4L2_CID_CODEC_BASE+382)
717 #define V4L2_CID_MPEG_VIDEO_H264_CONSTRAINED_INTRA_PREDICTION	(V4L2_CID_CODEC_BASE+383)
718 #define V4L2_CID_MPEG_VIDEO_H264_CHROMA_QP_INDEX_OFFSET		(V4L2_CID_CODEC_BASE+384)
719 #define V4L2_CID_MPEG_VIDEO_H264_I_FRAME_MIN_QP	(V4L2_CID_CODEC_BASE+385)
720 #define V4L2_CID_MPEG_VIDEO_H264_I_FRAME_MAX_QP	(V4L2_CID_CODEC_BASE+386)
721 #define V4L2_CID_MPEG_VIDEO_H264_P_FRAME_MIN_QP	(V4L2_CID_CODEC_BASE+387)
722 #define V4L2_CID_MPEG_VIDEO_H264_P_FRAME_MAX_QP	(V4L2_CID_CODEC_BASE+388)
723 #define V4L2_CID_MPEG_VIDEO_H264_B_FRAME_MIN_QP	(V4L2_CID_CODEC_BASE+389)
724 #define V4L2_CID_MPEG_VIDEO_H264_B_FRAME_MAX_QP	(V4L2_CID_CODEC_BASE+390)
725 #define V4L2_CID_MPEG_VIDEO_H264_HIER_CODING_L0_BR	(V4L2_CID_CODEC_BASE+391)
726 #define V4L2_CID_MPEG_VIDEO_H264_HIER_CODING_L1_BR	(V4L2_CID_CODEC_BASE+392)
727 #define V4L2_CID_MPEG_VIDEO_H264_HIER_CODING_L2_BR	(V4L2_CID_CODEC_BASE+393)
728 #define V4L2_CID_MPEG_VIDEO_H264_HIER_CODING_L3_BR	(V4L2_CID_CODEC_BASE+394)
729 #define V4L2_CID_MPEG_VIDEO_H264_HIER_CODING_L4_BR	(V4L2_CID_CODEC_BASE+395)
730 #define V4L2_CID_MPEG_VIDEO_H264_HIER_CODING_L5_BR	(V4L2_CID_CODEC_BASE+396)
731 #define V4L2_CID_MPEG_VIDEO_H264_HIER_CODING_L6_BR	(V4L2_CID_CODEC_BASE+397)
732 #define V4L2_CID_MPEG_VIDEO_MPEG4_I_FRAME_QP	(V4L2_CID_CODEC_BASE+400)
733 #define V4L2_CID_MPEG_VIDEO_MPEG4_P_FRAME_QP	(V4L2_CID_CODEC_BASE+401)
734 #define V4L2_CID_MPEG_VIDEO_MPEG4_B_FRAME_QP	(V4L2_CID_CODEC_BASE+402)
735 #define V4L2_CID_MPEG_VIDEO_MPEG4_MIN_QP	(V4L2_CID_CODEC_BASE+403)
736 #define V4L2_CID_MPEG_VIDEO_MPEG4_MAX_QP	(V4L2_CID_CODEC_BASE+404)
737 #define V4L2_CID_MPEG_VIDEO_MPEG4_LEVEL		(V4L2_CID_CODEC_BASE+405)
738 enum v4l2_mpeg_video_mpeg4_level {
739 	V4L2_MPEG_VIDEO_MPEG4_LEVEL_0	= 0,
740 	V4L2_MPEG_VIDEO_MPEG4_LEVEL_0B	= 1,
741 	V4L2_MPEG_VIDEO_MPEG4_LEVEL_1	= 2,
742 	V4L2_MPEG_VIDEO_MPEG4_LEVEL_2	= 3,
743 	V4L2_MPEG_VIDEO_MPEG4_LEVEL_3	= 4,
744 	V4L2_MPEG_VIDEO_MPEG4_LEVEL_3B	= 5,
745 	V4L2_MPEG_VIDEO_MPEG4_LEVEL_4	= 6,
746 	V4L2_MPEG_VIDEO_MPEG4_LEVEL_5	= 7,
747 };
748 #define V4L2_CID_MPEG_VIDEO_MPEG4_PROFILE	(V4L2_CID_CODEC_BASE+406)
749 enum v4l2_mpeg_video_mpeg4_profile {
750 	V4L2_MPEG_VIDEO_MPEG4_PROFILE_SIMPLE				= 0,
751 	V4L2_MPEG_VIDEO_MPEG4_PROFILE_ADVANCED_SIMPLE			= 1,
752 	V4L2_MPEG_VIDEO_MPEG4_PROFILE_CORE				= 2,
753 	V4L2_MPEG_VIDEO_MPEG4_PROFILE_SIMPLE_SCALABLE			= 3,
754 	V4L2_MPEG_VIDEO_MPEG4_PROFILE_ADVANCED_CODING_EFFICIENCY	= 4,
755 };
756 #define V4L2_CID_MPEG_VIDEO_MPEG4_QPEL		(V4L2_CID_CODEC_BASE+407)
757 
758 /*  Control IDs for VP8 streams
759  *  Although VP8 is not part of MPEG we add these controls to the MPEG class
760  *  as that class is already handling other video compression standards
761  */
762 #define V4L2_CID_MPEG_VIDEO_VPX_NUM_PARTITIONS		(V4L2_CID_CODEC_BASE+500)
763 enum v4l2_vp8_num_partitions {
764 	V4L2_CID_MPEG_VIDEO_VPX_1_PARTITION	= 0,
765 	V4L2_CID_MPEG_VIDEO_VPX_2_PARTITIONS	= 1,
766 	V4L2_CID_MPEG_VIDEO_VPX_4_PARTITIONS	= 2,
767 	V4L2_CID_MPEG_VIDEO_VPX_8_PARTITIONS	= 3,
768 };
769 #define V4L2_CID_MPEG_VIDEO_VPX_IMD_DISABLE_4X4		(V4L2_CID_CODEC_BASE+501)
770 #define V4L2_CID_MPEG_VIDEO_VPX_NUM_REF_FRAMES		(V4L2_CID_CODEC_BASE+502)
771 enum v4l2_vp8_num_ref_frames {
772 	V4L2_CID_MPEG_VIDEO_VPX_1_REF_FRAME	= 0,
773 	V4L2_CID_MPEG_VIDEO_VPX_2_REF_FRAME	= 1,
774 	V4L2_CID_MPEG_VIDEO_VPX_3_REF_FRAME	= 2,
775 };
776 #define V4L2_CID_MPEG_VIDEO_VPX_FILTER_LEVEL		(V4L2_CID_CODEC_BASE+503)
777 #define V4L2_CID_MPEG_VIDEO_VPX_FILTER_SHARPNESS	(V4L2_CID_CODEC_BASE+504)
778 #define V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_REF_PERIOD	(V4L2_CID_CODEC_BASE+505)
779 #define V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_SEL	(V4L2_CID_CODEC_BASE+506)
780 enum v4l2_vp8_golden_frame_sel {
781 	V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_USE_PREV		= 0,
782 	V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_USE_REF_PERIOD	= 1,
783 };
784 #define V4L2_CID_MPEG_VIDEO_VPX_MIN_QP			(V4L2_CID_CODEC_BASE+507)
785 #define V4L2_CID_MPEG_VIDEO_VPX_MAX_QP			(V4L2_CID_CODEC_BASE+508)
786 #define V4L2_CID_MPEG_VIDEO_VPX_I_FRAME_QP		(V4L2_CID_CODEC_BASE+509)
787 #define V4L2_CID_MPEG_VIDEO_VPX_P_FRAME_QP		(V4L2_CID_CODEC_BASE+510)
788 
789 #define V4L2_CID_MPEG_VIDEO_VP8_PROFILE			(V4L2_CID_CODEC_BASE+511)
790 enum v4l2_mpeg_video_vp8_profile {
791 	V4L2_MPEG_VIDEO_VP8_PROFILE_0				= 0,
792 	V4L2_MPEG_VIDEO_VP8_PROFILE_1				= 1,
793 	V4L2_MPEG_VIDEO_VP8_PROFILE_2				= 2,
794 	V4L2_MPEG_VIDEO_VP8_PROFILE_3				= 3,
795 };
796 /* Deprecated alias for compatibility reasons. */
797 #define V4L2_CID_MPEG_VIDEO_VPX_PROFILE	V4L2_CID_MPEG_VIDEO_VP8_PROFILE
798 #define V4L2_CID_MPEG_VIDEO_VP9_PROFILE			(V4L2_CID_CODEC_BASE+512)
799 enum v4l2_mpeg_video_vp9_profile {
800 	V4L2_MPEG_VIDEO_VP9_PROFILE_0				= 0,
801 	V4L2_MPEG_VIDEO_VP9_PROFILE_1				= 1,
802 	V4L2_MPEG_VIDEO_VP9_PROFILE_2				= 2,
803 	V4L2_MPEG_VIDEO_VP9_PROFILE_3				= 3,
804 };
805 #define V4L2_CID_MPEG_VIDEO_VP9_LEVEL			(V4L2_CID_CODEC_BASE+513)
806 enum v4l2_mpeg_video_vp9_level {
807 	V4L2_MPEG_VIDEO_VP9_LEVEL_1_0	= 0,
808 	V4L2_MPEG_VIDEO_VP9_LEVEL_1_1	= 1,
809 	V4L2_MPEG_VIDEO_VP9_LEVEL_2_0	= 2,
810 	V4L2_MPEG_VIDEO_VP9_LEVEL_2_1	= 3,
811 	V4L2_MPEG_VIDEO_VP9_LEVEL_3_0	= 4,
812 	V4L2_MPEG_VIDEO_VP9_LEVEL_3_1	= 5,
813 	V4L2_MPEG_VIDEO_VP9_LEVEL_4_0	= 6,
814 	V4L2_MPEG_VIDEO_VP9_LEVEL_4_1	= 7,
815 	V4L2_MPEG_VIDEO_VP9_LEVEL_5_0	= 8,
816 	V4L2_MPEG_VIDEO_VP9_LEVEL_5_1	= 9,
817 	V4L2_MPEG_VIDEO_VP9_LEVEL_5_2	= 10,
818 	V4L2_MPEG_VIDEO_VP9_LEVEL_6_0	= 11,
819 	V4L2_MPEG_VIDEO_VP9_LEVEL_6_1	= 12,
820 	V4L2_MPEG_VIDEO_VP9_LEVEL_6_2	= 13,
821 };
822 
823 /* CIDs for HEVC encoding. */
824 
825 #define V4L2_CID_MPEG_VIDEO_HEVC_MIN_QP		(V4L2_CID_CODEC_BASE + 600)
826 #define V4L2_CID_MPEG_VIDEO_HEVC_MAX_QP		(V4L2_CID_CODEC_BASE + 601)
827 #define V4L2_CID_MPEG_VIDEO_HEVC_I_FRAME_QP	(V4L2_CID_CODEC_BASE + 602)
828 #define V4L2_CID_MPEG_VIDEO_HEVC_P_FRAME_QP	(V4L2_CID_CODEC_BASE + 603)
829 #define V4L2_CID_MPEG_VIDEO_HEVC_B_FRAME_QP	(V4L2_CID_CODEC_BASE + 604)
830 #define V4L2_CID_MPEG_VIDEO_HEVC_HIER_QP	(V4L2_CID_CODEC_BASE + 605)
831 #define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_TYPE (V4L2_CID_CODEC_BASE + 606)
832 enum v4l2_mpeg_video_hevc_hier_coding_type {
833 	V4L2_MPEG_VIDEO_HEVC_HIERARCHICAL_CODING_B	= 0,
834 	V4L2_MPEG_VIDEO_HEVC_HIERARCHICAL_CODING_P	= 1,
835 };
836 #define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_LAYER	(V4L2_CID_CODEC_BASE + 607)
837 #define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L0_QP	(V4L2_CID_CODEC_BASE + 608)
838 #define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L1_QP	(V4L2_CID_CODEC_BASE + 609)
839 #define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L2_QP	(V4L2_CID_CODEC_BASE + 610)
840 #define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L3_QP	(V4L2_CID_CODEC_BASE + 611)
841 #define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L4_QP	(V4L2_CID_CODEC_BASE + 612)
842 #define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L5_QP	(V4L2_CID_CODEC_BASE + 613)
843 #define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L6_QP	(V4L2_CID_CODEC_BASE + 614)
844 #define V4L2_CID_MPEG_VIDEO_HEVC_PROFILE	(V4L2_CID_CODEC_BASE + 615)
845 enum v4l2_mpeg_video_hevc_profile {
846 	V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN = 0,
847 	V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN_STILL_PICTURE = 1,
848 	V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN_10 = 2,
849 };
850 #define V4L2_CID_MPEG_VIDEO_HEVC_LEVEL		(V4L2_CID_CODEC_BASE + 616)
851 enum v4l2_mpeg_video_hevc_level {
852 	V4L2_MPEG_VIDEO_HEVC_LEVEL_1	= 0,
853 	V4L2_MPEG_VIDEO_HEVC_LEVEL_2	= 1,
854 	V4L2_MPEG_VIDEO_HEVC_LEVEL_2_1	= 2,
855 	V4L2_MPEG_VIDEO_HEVC_LEVEL_3	= 3,
856 	V4L2_MPEG_VIDEO_HEVC_LEVEL_3_1	= 4,
857 	V4L2_MPEG_VIDEO_HEVC_LEVEL_4	= 5,
858 	V4L2_MPEG_VIDEO_HEVC_LEVEL_4_1	= 6,
859 	V4L2_MPEG_VIDEO_HEVC_LEVEL_5	= 7,
860 	V4L2_MPEG_VIDEO_HEVC_LEVEL_5_1	= 8,
861 	V4L2_MPEG_VIDEO_HEVC_LEVEL_5_2	= 9,
862 	V4L2_MPEG_VIDEO_HEVC_LEVEL_6	= 10,
863 	V4L2_MPEG_VIDEO_HEVC_LEVEL_6_1	= 11,
864 	V4L2_MPEG_VIDEO_HEVC_LEVEL_6_2	= 12,
865 };
866 #define V4L2_CID_MPEG_VIDEO_HEVC_FRAME_RATE_RESOLUTION	(V4L2_CID_CODEC_BASE + 617)
867 #define V4L2_CID_MPEG_VIDEO_HEVC_TIER			(V4L2_CID_CODEC_BASE + 618)
868 enum v4l2_mpeg_video_hevc_tier {
869 	V4L2_MPEG_VIDEO_HEVC_TIER_MAIN = 0,
870 	V4L2_MPEG_VIDEO_HEVC_TIER_HIGH = 1,
871 };
872 #define V4L2_CID_MPEG_VIDEO_HEVC_MAX_PARTITION_DEPTH	(V4L2_CID_CODEC_BASE + 619)
873 #define V4L2_CID_MPEG_VIDEO_HEVC_LOOP_FILTER_MODE	(V4L2_CID_CODEC_BASE + 620)
874 enum v4l2_cid_mpeg_video_hevc_loop_filter_mode {
875 	V4L2_MPEG_VIDEO_HEVC_LOOP_FILTER_MODE_DISABLED			 = 0,
876 	V4L2_MPEG_VIDEO_HEVC_LOOP_FILTER_MODE_ENABLED			 = 1,
877 	V4L2_MPEG_VIDEO_HEVC_LOOP_FILTER_MODE_DISABLED_AT_SLICE_BOUNDARY = 2,
878 };
879 #define V4L2_CID_MPEG_VIDEO_HEVC_LF_BETA_OFFSET_DIV2	(V4L2_CID_CODEC_BASE + 621)
880 #define V4L2_CID_MPEG_VIDEO_HEVC_LF_TC_OFFSET_DIV2	(V4L2_CID_CODEC_BASE + 622)
881 #define V4L2_CID_MPEG_VIDEO_HEVC_REFRESH_TYPE		(V4L2_CID_CODEC_BASE + 623)
882 enum v4l2_cid_mpeg_video_hevc_refresh_type {
883 	V4L2_MPEG_VIDEO_HEVC_REFRESH_NONE		= 0,
884 	V4L2_MPEG_VIDEO_HEVC_REFRESH_CRA		= 1,
885 	V4L2_MPEG_VIDEO_HEVC_REFRESH_IDR		= 2,
886 };
887 #define V4L2_CID_MPEG_VIDEO_HEVC_REFRESH_PERIOD		(V4L2_CID_CODEC_BASE + 624)
888 #define V4L2_CID_MPEG_VIDEO_HEVC_LOSSLESS_CU		(V4L2_CID_CODEC_BASE + 625)
889 #define V4L2_CID_MPEG_VIDEO_HEVC_CONST_INTRA_PRED	(V4L2_CID_CODEC_BASE + 626)
890 #define V4L2_CID_MPEG_VIDEO_HEVC_WAVEFRONT		(V4L2_CID_CODEC_BASE + 627)
891 #define V4L2_CID_MPEG_VIDEO_HEVC_GENERAL_PB		(V4L2_CID_CODEC_BASE + 628)
892 #define V4L2_CID_MPEG_VIDEO_HEVC_TEMPORAL_ID		(V4L2_CID_CODEC_BASE + 629)
893 #define V4L2_CID_MPEG_VIDEO_HEVC_STRONG_SMOOTHING	(V4L2_CID_CODEC_BASE + 630)
894 #define V4L2_CID_MPEG_VIDEO_HEVC_MAX_NUM_MERGE_MV_MINUS1	(V4L2_CID_CODEC_BASE + 631)
895 #define V4L2_CID_MPEG_VIDEO_HEVC_INTRA_PU_SPLIT		(V4L2_CID_CODEC_BASE + 632)
896 #define V4L2_CID_MPEG_VIDEO_HEVC_TMV_PREDICTION		(V4L2_CID_CODEC_BASE + 633)
897 #define V4L2_CID_MPEG_VIDEO_HEVC_WITHOUT_STARTCODE	(V4L2_CID_CODEC_BASE + 634)
898 #define V4L2_CID_MPEG_VIDEO_HEVC_SIZE_OF_LENGTH_FIELD	(V4L2_CID_CODEC_BASE + 635)
899 enum v4l2_cid_mpeg_video_hevc_size_of_length_field {
900 	V4L2_MPEG_VIDEO_HEVC_SIZE_0		= 0,
901 	V4L2_MPEG_VIDEO_HEVC_SIZE_1		= 1,
902 	V4L2_MPEG_VIDEO_HEVC_SIZE_2		= 2,
903 	V4L2_MPEG_VIDEO_HEVC_SIZE_4		= 3,
904 };
905 #define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L0_BR	(V4L2_CID_CODEC_BASE + 636)
906 #define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L1_BR	(V4L2_CID_CODEC_BASE + 637)
907 #define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L2_BR	(V4L2_CID_CODEC_BASE + 638)
908 #define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L3_BR	(V4L2_CID_CODEC_BASE + 639)
909 #define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L4_BR	(V4L2_CID_CODEC_BASE + 640)
910 #define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L5_BR	(V4L2_CID_CODEC_BASE + 641)
911 #define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L6_BR	(V4L2_CID_CODEC_BASE + 642)
912 #define V4L2_CID_MPEG_VIDEO_REF_NUMBER_FOR_PFRAMES	(V4L2_CID_CODEC_BASE + 643)
913 #define V4L2_CID_MPEG_VIDEO_PREPEND_SPSPPS_TO_IDR	(V4L2_CID_CODEC_BASE + 644)
914 #define V4L2_CID_MPEG_VIDEO_CONSTANT_QUALITY		(V4L2_CID_CODEC_BASE + 645)
915 #define V4L2_CID_MPEG_VIDEO_FRAME_SKIP_MODE		(V4L2_CID_CODEC_BASE + 646)
916 enum v4l2_mpeg_video_frame_skip_mode {
917 	V4L2_MPEG_VIDEO_FRAME_SKIP_MODE_DISABLED	= 0,
918 	V4L2_MPEG_VIDEO_FRAME_SKIP_MODE_LEVEL_LIMIT	= 1,
919 	V4L2_MPEG_VIDEO_FRAME_SKIP_MODE_BUF_LIMIT	= 2,
920 };
921 
922 #define V4L2_CID_MPEG_VIDEO_HEVC_I_FRAME_MIN_QP        (V4L2_CID_CODEC_BASE + 647)
923 #define V4L2_CID_MPEG_VIDEO_HEVC_I_FRAME_MAX_QP        (V4L2_CID_CODEC_BASE + 648)
924 #define V4L2_CID_MPEG_VIDEO_HEVC_P_FRAME_MIN_QP        (V4L2_CID_CODEC_BASE + 649)
925 #define V4L2_CID_MPEG_VIDEO_HEVC_P_FRAME_MAX_QP        (V4L2_CID_CODEC_BASE + 650)
926 #define V4L2_CID_MPEG_VIDEO_HEVC_B_FRAME_MIN_QP        (V4L2_CID_CODEC_BASE + 651)
927 #define V4L2_CID_MPEG_VIDEO_HEVC_B_FRAME_MAX_QP        (V4L2_CID_CODEC_BASE + 652)
928 
929 #define V4L2_CID_MPEG_VIDEO_DEC_DISPLAY_DELAY		(V4L2_CID_CODEC_BASE + 653)
930 #define V4L2_CID_MPEG_VIDEO_DEC_DISPLAY_DELAY_ENABLE	(V4L2_CID_CODEC_BASE + 654)
931 
932 #define V4L2_CID_MPEG_VIDEO_AV1_PROFILE (V4L2_CID_CODEC_BASE + 655)
933 /**
934  * enum v4l2_mpeg_video_av1_profile - AV1 profiles
935  *
936  * @V4L2_MPEG_VIDEO_AV1_PROFILE_MAIN: compliant decoders must be able to decode
937  * streams with seq_profile equal to 0.
938  * @V4L2_MPEG_VIDEO_AV1_PROFILE_HIGH: compliant decoders must be able to decode
939  * streams with seq_profile equal less than or equal to 1.
940  * @V4L2_MPEG_VIDEO_AV1_PROFILE_PROFESSIONAL: compliant decoders must be able to
941  * decode streams with seq_profile less than or equal to 2.
942  *
943  * Conveys the highest profile a decoder can work with.
944  */
945 enum v4l2_mpeg_video_av1_profile {
946 	V4L2_MPEG_VIDEO_AV1_PROFILE_MAIN = 0,
947 	V4L2_MPEG_VIDEO_AV1_PROFILE_HIGH = 1,
948 	V4L2_MPEG_VIDEO_AV1_PROFILE_PROFESSIONAL = 2,
949 };
950 
951 #define V4L2_CID_MPEG_VIDEO_AV1_LEVEL (V4L2_CID_CODEC_BASE + 656)
952 /**
953  * enum v4l2_mpeg_video_av1_level - AV1 levels
954  *
955  * @V4L2_MPEG_VIDEO_AV1_LEVEL_2_0: Level 2.0.
956  * @V4L2_MPEG_VIDEO_AV1_LEVEL_2_1: Level 2.1.
957  * @V4L2_MPEG_VIDEO_AV1_LEVEL_2_2: Level 2.2.
958  * @V4L2_MPEG_VIDEO_AV1_LEVEL_2_3: Level 2.3.
959  * @V4L2_MPEG_VIDEO_AV1_LEVEL_3_0: Level 3.0.
960  * @V4L2_MPEG_VIDEO_AV1_LEVEL_3_1: Level 3.1.
961  * @V4L2_MPEG_VIDEO_AV1_LEVEL_3_2: Level 3.2.
962  * @V4L2_MPEG_VIDEO_AV1_LEVEL_3_3: Level 3.3.
963  * @V4L2_MPEG_VIDEO_AV1_LEVEL_4_0: Level 4.0.
964  * @V4L2_MPEG_VIDEO_AV1_LEVEL_4_1: Level 4.1.
965  * @V4L2_MPEG_VIDEO_AV1_LEVEL_4_2: Level 4.2.
966  * @V4L2_MPEG_VIDEO_AV1_LEVEL_4_3: Level 4.3.
967  * @V4L2_MPEG_VIDEO_AV1_LEVEL_5_0: Level 5.0.
968  * @V4L2_MPEG_VIDEO_AV1_LEVEL_5_1: Level 5.1.
969  * @V4L2_MPEG_VIDEO_AV1_LEVEL_5_2: Level 5.2.
970  * @V4L2_MPEG_VIDEO_AV1_LEVEL_5_3: Level 5.3.
971  * @V4L2_MPEG_VIDEO_AV1_LEVEL_6_0: Level 6.0.
972  * @V4L2_MPEG_VIDEO_AV1_LEVEL_6_1: Level 6.1.
973  * @V4L2_MPEG_VIDEO_AV1_LEVEL_6_2: Level 6.2.
974  * @V4L2_MPEG_VIDEO_AV1_LEVEL_6_3: Level 6.3.
975  * @V4L2_MPEG_VIDEO_AV1_LEVEL_7_0: Level 7.0.
976  * @V4L2_MPEG_VIDEO_AV1_LEVEL_7_1: Level 7.1.
977  * @V4L2_MPEG_VIDEO_AV1_LEVEL_7_2: Level 7.2.
978  * @V4L2_MPEG_VIDEO_AV1_LEVEL_7_3: Level 7.3.
979  *
980  * Conveys the highest level a decoder can work with.
981  */
982 enum v4l2_mpeg_video_av1_level {
983 	V4L2_MPEG_VIDEO_AV1_LEVEL_2_0 = 0,
984 	V4L2_MPEG_VIDEO_AV1_LEVEL_2_1 = 1,
985 	V4L2_MPEG_VIDEO_AV1_LEVEL_2_2 = 2,
986 	V4L2_MPEG_VIDEO_AV1_LEVEL_2_3 = 3,
987 
988 	V4L2_MPEG_VIDEO_AV1_LEVEL_3_0 = 4,
989 	V4L2_MPEG_VIDEO_AV1_LEVEL_3_1 = 5,
990 	V4L2_MPEG_VIDEO_AV1_LEVEL_3_2 = 6,
991 	V4L2_MPEG_VIDEO_AV1_LEVEL_3_3 = 7,
992 
993 	V4L2_MPEG_VIDEO_AV1_LEVEL_4_0 = 8,
994 	V4L2_MPEG_VIDEO_AV1_LEVEL_4_1 = 9,
995 	V4L2_MPEG_VIDEO_AV1_LEVEL_4_2 = 10,
996 	V4L2_MPEG_VIDEO_AV1_LEVEL_4_3 = 11,
997 
998 	V4L2_MPEG_VIDEO_AV1_LEVEL_5_0 = 12,
999 	V4L2_MPEG_VIDEO_AV1_LEVEL_5_1 = 13,
1000 	V4L2_MPEG_VIDEO_AV1_LEVEL_5_2 = 14,
1001 	V4L2_MPEG_VIDEO_AV1_LEVEL_5_3 = 15,
1002 
1003 	V4L2_MPEG_VIDEO_AV1_LEVEL_6_0 = 16,
1004 	V4L2_MPEG_VIDEO_AV1_LEVEL_6_1 = 17,
1005 	V4L2_MPEG_VIDEO_AV1_LEVEL_6_2 = 18,
1006 	V4L2_MPEG_VIDEO_AV1_LEVEL_6_3 = 19,
1007 
1008 	V4L2_MPEG_VIDEO_AV1_LEVEL_7_0 = 20,
1009 	V4L2_MPEG_VIDEO_AV1_LEVEL_7_1 = 21,
1010 	V4L2_MPEG_VIDEO_AV1_LEVEL_7_2 = 22,
1011 	V4L2_MPEG_VIDEO_AV1_LEVEL_7_3 = 23
1012 };
1013 
1014 #define V4L2_CID_MPEG_VIDEO_AVERAGE_QP  (V4L2_CID_CODEC_BASE + 657)
1015 
1016 /*  MPEG-class control IDs specific to the CX2341x driver as defined by V4L2 */
1017 #define V4L2_CID_CODEC_CX2341X_BASE				(V4L2_CTRL_CLASS_CODEC | 0x1000)
1018 #define V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE		(V4L2_CID_CODEC_CX2341X_BASE+0)
1019 enum v4l2_mpeg_cx2341x_video_spatial_filter_mode {
1020 	V4L2_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE_MANUAL = 0,
1021 	V4L2_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE_AUTO   = 1,
1022 };
1023 #define V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER		(V4L2_CID_CODEC_CX2341X_BASE+1)
1024 #define V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE	(V4L2_CID_CODEC_CX2341X_BASE+2)
1025 enum v4l2_mpeg_cx2341x_video_luma_spatial_filter_type {
1026 	V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_OFF                  = 0,
1027 	V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_1D_HOR               = 1,
1028 	V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_1D_VERT              = 2,
1029 	V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_2D_HV_SEPARABLE      = 3,
1030 	V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_2D_SYM_NON_SEPARABLE = 4,
1031 };
1032 #define V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE	(V4L2_CID_CODEC_CX2341X_BASE+3)
1033 enum v4l2_mpeg_cx2341x_video_chroma_spatial_filter_type {
1034 	V4L2_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE_OFF    = 0,
1035 	V4L2_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE_1D_HOR = 1,
1036 };
1037 #define V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE	(V4L2_CID_CODEC_CX2341X_BASE+4)
1038 enum v4l2_mpeg_cx2341x_video_temporal_filter_mode {
1039 	V4L2_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE_MANUAL = 0,
1040 	V4L2_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE_AUTO   = 1,
1041 };
1042 #define V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER		(V4L2_CID_CODEC_CX2341X_BASE+5)
1043 #define V4L2_CID_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE		(V4L2_CID_CODEC_CX2341X_BASE+6)
1044 enum v4l2_mpeg_cx2341x_video_median_filter_type {
1045 	V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_OFF      = 0,
1046 	V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_HOR      = 1,
1047 	V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_VERT     = 2,
1048 	V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_HOR_VERT = 3,
1049 	V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_DIAG     = 4,
1050 };
1051 #define V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_BOTTOM	(V4L2_CID_CODEC_CX2341X_BASE+7)
1052 #define V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_TOP	(V4L2_CID_CODEC_CX2341X_BASE+8)
1053 #define V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_BOTTOM	(V4L2_CID_CODEC_CX2341X_BASE+9)
1054 #define V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_TOP	(V4L2_CID_CODEC_CX2341X_BASE+10)
1055 #define V4L2_CID_MPEG_CX2341X_STREAM_INSERT_NAV_PACKETS		(V4L2_CID_CODEC_CX2341X_BASE+11)
1056 
1057 /*  MPEG-class control IDs specific to the Samsung MFC 5.1 driver as defined by V4L2 */
1058 #define V4L2_CID_CODEC_MFC51_BASE				(V4L2_CTRL_CLASS_CODEC | 0x1100)
1059 
1060 #define V4L2_CID_MPEG_MFC51_VIDEO_DECODER_H264_DISPLAY_DELAY		(V4L2_CID_CODEC_MFC51_BASE+0)
1061 #define V4L2_CID_MPEG_MFC51_VIDEO_DECODER_H264_DISPLAY_DELAY_ENABLE	(V4L2_CID_CODEC_MFC51_BASE+1)
1062 #define V4L2_CID_MPEG_MFC51_VIDEO_FRAME_SKIP_MODE			(V4L2_CID_CODEC_MFC51_BASE+2)
1063 enum v4l2_mpeg_mfc51_video_frame_skip_mode {
1064 	V4L2_MPEG_MFC51_VIDEO_FRAME_SKIP_MODE_DISABLED		= 0,
1065 	V4L2_MPEG_MFC51_VIDEO_FRAME_SKIP_MODE_LEVEL_LIMIT	= 1,
1066 	V4L2_MPEG_MFC51_VIDEO_FRAME_SKIP_MODE_BUF_LIMIT		= 2,
1067 };
1068 #define V4L2_CID_MPEG_MFC51_VIDEO_FORCE_FRAME_TYPE			(V4L2_CID_CODEC_MFC51_BASE+3)
1069 enum v4l2_mpeg_mfc51_video_force_frame_type {
1070 	V4L2_MPEG_MFC51_VIDEO_FORCE_FRAME_TYPE_DISABLED		= 0,
1071 	V4L2_MPEG_MFC51_VIDEO_FORCE_FRAME_TYPE_I_FRAME		= 1,
1072 	V4L2_MPEG_MFC51_VIDEO_FORCE_FRAME_TYPE_NOT_CODED	= 2,
1073 };
1074 #define V4L2_CID_MPEG_MFC51_VIDEO_PADDING				(V4L2_CID_CODEC_MFC51_BASE+4)
1075 #define V4L2_CID_MPEG_MFC51_VIDEO_PADDING_YUV				(V4L2_CID_CODEC_MFC51_BASE+5)
1076 #define V4L2_CID_MPEG_MFC51_VIDEO_RC_FIXED_TARGET_BIT			(V4L2_CID_CODEC_MFC51_BASE+6)
1077 #define V4L2_CID_MPEG_MFC51_VIDEO_RC_REACTION_COEFF			(V4L2_CID_CODEC_MFC51_BASE+7)
1078 #define V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_ACTIVITY		(V4L2_CID_CODEC_MFC51_BASE+50)
1079 #define V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_DARK			(V4L2_CID_CODEC_MFC51_BASE+51)
1080 #define V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_SMOOTH		(V4L2_CID_CODEC_MFC51_BASE+52)
1081 #define V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_STATIC		(V4L2_CID_CODEC_MFC51_BASE+53)
1082 #define V4L2_CID_MPEG_MFC51_VIDEO_H264_NUM_REF_PIC_FOR_P		(V4L2_CID_CODEC_MFC51_BASE+54)
1083 
1084 /*  Camera class control IDs */
1085 
1086 #define V4L2_CID_CAMERA_CLASS_BASE	(V4L2_CTRL_CLASS_CAMERA | 0x900)
1087 #define V4L2_CID_CAMERA_CLASS		(V4L2_CTRL_CLASS_CAMERA | 1)
1088 
1089 #define V4L2_CID_EXPOSURE_AUTO			(V4L2_CID_CAMERA_CLASS_BASE+1)
1090 enum  v4l2_exposure_auto_type {
1091 	V4L2_EXPOSURE_AUTO = 0,
1092 	V4L2_EXPOSURE_MANUAL = 1,
1093 	V4L2_EXPOSURE_SHUTTER_PRIORITY = 2,
1094 	V4L2_EXPOSURE_APERTURE_PRIORITY = 3
1095 };
1096 #define V4L2_CID_EXPOSURE_ABSOLUTE		(V4L2_CID_CAMERA_CLASS_BASE+2)
1097 #define V4L2_CID_EXPOSURE_AUTO_PRIORITY		(V4L2_CID_CAMERA_CLASS_BASE+3)
1098 
1099 #define V4L2_CID_PAN_RELATIVE			(V4L2_CID_CAMERA_CLASS_BASE+4)
1100 #define V4L2_CID_TILT_RELATIVE			(V4L2_CID_CAMERA_CLASS_BASE+5)
1101 #define V4L2_CID_PAN_RESET			(V4L2_CID_CAMERA_CLASS_BASE+6)
1102 #define V4L2_CID_TILT_RESET			(V4L2_CID_CAMERA_CLASS_BASE+7)
1103 
1104 #define V4L2_CID_PAN_ABSOLUTE			(V4L2_CID_CAMERA_CLASS_BASE+8)
1105 #define V4L2_CID_TILT_ABSOLUTE			(V4L2_CID_CAMERA_CLASS_BASE+9)
1106 
1107 #define V4L2_CID_FOCUS_ABSOLUTE			(V4L2_CID_CAMERA_CLASS_BASE+10)
1108 #define V4L2_CID_FOCUS_RELATIVE			(V4L2_CID_CAMERA_CLASS_BASE+11)
1109 #define V4L2_CID_FOCUS_AUTO			(V4L2_CID_CAMERA_CLASS_BASE+12)
1110 
1111 #define V4L2_CID_ZOOM_ABSOLUTE			(V4L2_CID_CAMERA_CLASS_BASE+13)
1112 #define V4L2_CID_ZOOM_RELATIVE			(V4L2_CID_CAMERA_CLASS_BASE+14)
1113 #define V4L2_CID_ZOOM_CONTINUOUS		(V4L2_CID_CAMERA_CLASS_BASE+15)
1114 
1115 #define V4L2_CID_PRIVACY			(V4L2_CID_CAMERA_CLASS_BASE+16)
1116 
1117 #define V4L2_CID_IRIS_ABSOLUTE			(V4L2_CID_CAMERA_CLASS_BASE+17)
1118 #define V4L2_CID_IRIS_RELATIVE			(V4L2_CID_CAMERA_CLASS_BASE+18)
1119 
1120 #define V4L2_CID_AUTO_EXPOSURE_BIAS		(V4L2_CID_CAMERA_CLASS_BASE+19)
1121 
1122 #define V4L2_CID_AUTO_N_PRESET_WHITE_BALANCE	(V4L2_CID_CAMERA_CLASS_BASE+20)
1123 enum v4l2_auto_n_preset_white_balance {
1124 	V4L2_WHITE_BALANCE_MANUAL		= 0,
1125 	V4L2_WHITE_BALANCE_AUTO			= 1,
1126 	V4L2_WHITE_BALANCE_INCANDESCENT		= 2,
1127 	V4L2_WHITE_BALANCE_FLUORESCENT		= 3,
1128 	V4L2_WHITE_BALANCE_FLUORESCENT_H	= 4,
1129 	V4L2_WHITE_BALANCE_HORIZON		= 5,
1130 	V4L2_WHITE_BALANCE_DAYLIGHT		= 6,
1131 	V4L2_WHITE_BALANCE_FLASH		= 7,
1132 	V4L2_WHITE_BALANCE_CLOUDY		= 8,
1133 	V4L2_WHITE_BALANCE_SHADE		= 9,
1134 };
1135 
1136 #define V4L2_CID_WIDE_DYNAMIC_RANGE		(V4L2_CID_CAMERA_CLASS_BASE+21)
1137 #define V4L2_CID_IMAGE_STABILIZATION		(V4L2_CID_CAMERA_CLASS_BASE+22)
1138 
1139 #define V4L2_CID_ISO_SENSITIVITY		(V4L2_CID_CAMERA_CLASS_BASE+23)
1140 #define V4L2_CID_ISO_SENSITIVITY_AUTO		(V4L2_CID_CAMERA_CLASS_BASE+24)
1141 enum v4l2_iso_sensitivity_auto_type {
1142 	V4L2_ISO_SENSITIVITY_MANUAL		= 0,
1143 	V4L2_ISO_SENSITIVITY_AUTO		= 1,
1144 };
1145 
1146 #define V4L2_CID_EXPOSURE_METERING		(V4L2_CID_CAMERA_CLASS_BASE+25)
1147 enum v4l2_exposure_metering {
1148 	V4L2_EXPOSURE_METERING_AVERAGE		= 0,
1149 	V4L2_EXPOSURE_METERING_CENTER_WEIGHTED	= 1,
1150 	V4L2_EXPOSURE_METERING_SPOT		= 2,
1151 	V4L2_EXPOSURE_METERING_MATRIX		= 3,
1152 };
1153 
1154 #define V4L2_CID_SCENE_MODE			(V4L2_CID_CAMERA_CLASS_BASE+26)
1155 enum v4l2_scene_mode {
1156 	V4L2_SCENE_MODE_NONE			= 0,
1157 	V4L2_SCENE_MODE_BACKLIGHT		= 1,
1158 	V4L2_SCENE_MODE_BEACH_SNOW		= 2,
1159 	V4L2_SCENE_MODE_CANDLE_LIGHT		= 3,
1160 	V4L2_SCENE_MODE_DAWN_DUSK		= 4,
1161 	V4L2_SCENE_MODE_FALL_COLORS		= 5,
1162 	V4L2_SCENE_MODE_FIREWORKS		= 6,
1163 	V4L2_SCENE_MODE_LANDSCAPE		= 7,
1164 	V4L2_SCENE_MODE_NIGHT			= 8,
1165 	V4L2_SCENE_MODE_PARTY_INDOOR		= 9,
1166 	V4L2_SCENE_MODE_PORTRAIT		= 10,
1167 	V4L2_SCENE_MODE_SPORTS			= 11,
1168 	V4L2_SCENE_MODE_SUNSET			= 12,
1169 	V4L2_SCENE_MODE_TEXT			= 13,
1170 };
1171 
1172 #define V4L2_CID_3A_LOCK			(V4L2_CID_CAMERA_CLASS_BASE+27)
1173 #define V4L2_LOCK_EXPOSURE			(1 << 0)
1174 #define V4L2_LOCK_WHITE_BALANCE			(1 << 1)
1175 #define V4L2_LOCK_FOCUS				(1 << 2)
1176 
1177 #define V4L2_CID_AUTO_FOCUS_START		(V4L2_CID_CAMERA_CLASS_BASE+28)
1178 #define V4L2_CID_AUTO_FOCUS_STOP		(V4L2_CID_CAMERA_CLASS_BASE+29)
1179 #define V4L2_CID_AUTO_FOCUS_STATUS		(V4L2_CID_CAMERA_CLASS_BASE+30)
1180 #define V4L2_AUTO_FOCUS_STATUS_IDLE		(0 << 0)
1181 #define V4L2_AUTO_FOCUS_STATUS_BUSY		(1 << 0)
1182 #define V4L2_AUTO_FOCUS_STATUS_REACHED		(1 << 1)
1183 #define V4L2_AUTO_FOCUS_STATUS_FAILED		(1 << 2)
1184 
1185 #define V4L2_CID_AUTO_FOCUS_RANGE		(V4L2_CID_CAMERA_CLASS_BASE+31)
1186 enum v4l2_auto_focus_range {
1187 	V4L2_AUTO_FOCUS_RANGE_AUTO		= 0,
1188 	V4L2_AUTO_FOCUS_RANGE_NORMAL		= 1,
1189 	V4L2_AUTO_FOCUS_RANGE_MACRO		= 2,
1190 	V4L2_AUTO_FOCUS_RANGE_INFINITY		= 3,
1191 };
1192 
1193 #define V4L2_CID_PAN_SPEED			(V4L2_CID_CAMERA_CLASS_BASE+32)
1194 #define V4L2_CID_TILT_SPEED			(V4L2_CID_CAMERA_CLASS_BASE+33)
1195 
1196 #define V4L2_CID_CAMERA_ORIENTATION		(V4L2_CID_CAMERA_CLASS_BASE+34)
1197 #define V4L2_CAMERA_ORIENTATION_FRONT		0
1198 #define V4L2_CAMERA_ORIENTATION_BACK		1
1199 #define V4L2_CAMERA_ORIENTATION_EXTERNAL	2
1200 
1201 #define V4L2_CID_CAMERA_SENSOR_ROTATION		(V4L2_CID_CAMERA_CLASS_BASE+35)
1202 
1203 #define V4L2_CID_HDR_SENSOR_MODE		(V4L2_CID_CAMERA_CLASS_BASE+36)
1204 
1205 /* FM Modulator class control IDs */
1206 
1207 #define V4L2_CID_FM_TX_CLASS_BASE		(V4L2_CTRL_CLASS_FM_TX | 0x900)
1208 #define V4L2_CID_FM_TX_CLASS			(V4L2_CTRL_CLASS_FM_TX | 1)
1209 
1210 #define V4L2_CID_RDS_TX_DEVIATION		(V4L2_CID_FM_TX_CLASS_BASE + 1)
1211 #define V4L2_CID_RDS_TX_PI			(V4L2_CID_FM_TX_CLASS_BASE + 2)
1212 #define V4L2_CID_RDS_TX_PTY			(V4L2_CID_FM_TX_CLASS_BASE + 3)
1213 #define V4L2_CID_RDS_TX_PS_NAME			(V4L2_CID_FM_TX_CLASS_BASE + 5)
1214 #define V4L2_CID_RDS_TX_RADIO_TEXT		(V4L2_CID_FM_TX_CLASS_BASE + 6)
1215 #define V4L2_CID_RDS_TX_MONO_STEREO		(V4L2_CID_FM_TX_CLASS_BASE + 7)
1216 #define V4L2_CID_RDS_TX_ARTIFICIAL_HEAD		(V4L2_CID_FM_TX_CLASS_BASE + 8)
1217 #define V4L2_CID_RDS_TX_COMPRESSED		(V4L2_CID_FM_TX_CLASS_BASE + 9)
1218 #define V4L2_CID_RDS_TX_DYNAMIC_PTY		(V4L2_CID_FM_TX_CLASS_BASE + 10)
1219 #define V4L2_CID_RDS_TX_TRAFFIC_ANNOUNCEMENT	(V4L2_CID_FM_TX_CLASS_BASE + 11)
1220 #define V4L2_CID_RDS_TX_TRAFFIC_PROGRAM		(V4L2_CID_FM_TX_CLASS_BASE + 12)
1221 #define V4L2_CID_RDS_TX_MUSIC_SPEECH		(V4L2_CID_FM_TX_CLASS_BASE + 13)
1222 #define V4L2_CID_RDS_TX_ALT_FREQS_ENABLE	(V4L2_CID_FM_TX_CLASS_BASE + 14)
1223 #define V4L2_CID_RDS_TX_ALT_FREQS		(V4L2_CID_FM_TX_CLASS_BASE + 15)
1224 
1225 #define V4L2_CID_AUDIO_LIMITER_ENABLED		(V4L2_CID_FM_TX_CLASS_BASE + 64)
1226 #define V4L2_CID_AUDIO_LIMITER_RELEASE_TIME	(V4L2_CID_FM_TX_CLASS_BASE + 65)
1227 #define V4L2_CID_AUDIO_LIMITER_DEVIATION	(V4L2_CID_FM_TX_CLASS_BASE + 66)
1228 
1229 #define V4L2_CID_AUDIO_COMPRESSION_ENABLED	(V4L2_CID_FM_TX_CLASS_BASE + 80)
1230 #define V4L2_CID_AUDIO_COMPRESSION_GAIN		(V4L2_CID_FM_TX_CLASS_BASE + 81)
1231 #define V4L2_CID_AUDIO_COMPRESSION_THRESHOLD	(V4L2_CID_FM_TX_CLASS_BASE + 82)
1232 #define V4L2_CID_AUDIO_COMPRESSION_ATTACK_TIME	(V4L2_CID_FM_TX_CLASS_BASE + 83)
1233 #define V4L2_CID_AUDIO_COMPRESSION_RELEASE_TIME	(V4L2_CID_FM_TX_CLASS_BASE + 84)
1234 
1235 #define V4L2_CID_PILOT_TONE_ENABLED		(V4L2_CID_FM_TX_CLASS_BASE + 96)
1236 #define V4L2_CID_PILOT_TONE_DEVIATION		(V4L2_CID_FM_TX_CLASS_BASE + 97)
1237 #define V4L2_CID_PILOT_TONE_FREQUENCY		(V4L2_CID_FM_TX_CLASS_BASE + 98)
1238 
1239 #define V4L2_CID_TUNE_PREEMPHASIS		(V4L2_CID_FM_TX_CLASS_BASE + 112)
1240 enum v4l2_preemphasis {
1241 	V4L2_PREEMPHASIS_DISABLED	= 0,
1242 	V4L2_PREEMPHASIS_50_uS		= 1,
1243 	V4L2_PREEMPHASIS_75_uS		= 2,
1244 };
1245 #define V4L2_CID_TUNE_POWER_LEVEL		(V4L2_CID_FM_TX_CLASS_BASE + 113)
1246 #define V4L2_CID_TUNE_ANTENNA_CAPACITOR		(V4L2_CID_FM_TX_CLASS_BASE + 114)
1247 
1248 
1249 /* Flash and privacy (indicator) light controls */
1250 
1251 #define V4L2_CID_FLASH_CLASS_BASE		(V4L2_CTRL_CLASS_FLASH | 0x900)
1252 #define V4L2_CID_FLASH_CLASS			(V4L2_CTRL_CLASS_FLASH | 1)
1253 
1254 #define V4L2_CID_FLASH_LED_MODE			(V4L2_CID_FLASH_CLASS_BASE + 1)
1255 enum v4l2_flash_led_mode {
1256 	V4L2_FLASH_LED_MODE_NONE,
1257 	V4L2_FLASH_LED_MODE_FLASH,
1258 	V4L2_FLASH_LED_MODE_TORCH,
1259 };
1260 
1261 #define V4L2_CID_FLASH_STROBE_SOURCE		(V4L2_CID_FLASH_CLASS_BASE + 2)
1262 enum v4l2_flash_strobe_source {
1263 	V4L2_FLASH_STROBE_SOURCE_SOFTWARE,
1264 	V4L2_FLASH_STROBE_SOURCE_EXTERNAL,
1265 };
1266 
1267 #define V4L2_CID_FLASH_STROBE			(V4L2_CID_FLASH_CLASS_BASE + 3)
1268 #define V4L2_CID_FLASH_STROBE_STOP		(V4L2_CID_FLASH_CLASS_BASE + 4)
1269 #define V4L2_CID_FLASH_STROBE_STATUS		(V4L2_CID_FLASH_CLASS_BASE + 5)
1270 
1271 #define V4L2_CID_FLASH_TIMEOUT			(V4L2_CID_FLASH_CLASS_BASE + 6)
1272 #define V4L2_CID_FLASH_INTENSITY		(V4L2_CID_FLASH_CLASS_BASE + 7)
1273 #define V4L2_CID_FLASH_TORCH_INTENSITY		(V4L2_CID_FLASH_CLASS_BASE + 8)
1274 #define V4L2_CID_FLASH_INDICATOR_INTENSITY	(V4L2_CID_FLASH_CLASS_BASE + 9)
1275 
1276 #define V4L2_CID_FLASH_FAULT			(V4L2_CID_FLASH_CLASS_BASE + 10)
1277 #define V4L2_FLASH_FAULT_OVER_VOLTAGE		(1 << 0)
1278 #define V4L2_FLASH_FAULT_TIMEOUT		(1 << 1)
1279 #define V4L2_FLASH_FAULT_OVER_TEMPERATURE	(1 << 2)
1280 #define V4L2_FLASH_FAULT_SHORT_CIRCUIT		(1 << 3)
1281 #define V4L2_FLASH_FAULT_OVER_CURRENT		(1 << 4)
1282 #define V4L2_FLASH_FAULT_INDICATOR		(1 << 5)
1283 #define V4L2_FLASH_FAULT_UNDER_VOLTAGE		(1 << 6)
1284 #define V4L2_FLASH_FAULT_INPUT_VOLTAGE		(1 << 7)
1285 #define V4L2_FLASH_FAULT_LED_OVER_TEMPERATURE	(1 << 8)
1286 
1287 #define V4L2_CID_FLASH_CHARGE			(V4L2_CID_FLASH_CLASS_BASE + 11)
1288 #define V4L2_CID_FLASH_READY			(V4L2_CID_FLASH_CLASS_BASE + 12)
1289 
1290 
1291 /* JPEG-class control IDs */
1292 
1293 #define V4L2_CID_JPEG_CLASS_BASE		(V4L2_CTRL_CLASS_JPEG | 0x900)
1294 #define V4L2_CID_JPEG_CLASS			(V4L2_CTRL_CLASS_JPEG | 1)
1295 
1296 #define	V4L2_CID_JPEG_CHROMA_SUBSAMPLING	(V4L2_CID_JPEG_CLASS_BASE + 1)
1297 enum v4l2_jpeg_chroma_subsampling {
1298 	V4L2_JPEG_CHROMA_SUBSAMPLING_444	= 0,
1299 	V4L2_JPEG_CHROMA_SUBSAMPLING_422	= 1,
1300 	V4L2_JPEG_CHROMA_SUBSAMPLING_420	= 2,
1301 	V4L2_JPEG_CHROMA_SUBSAMPLING_411	= 3,
1302 	V4L2_JPEG_CHROMA_SUBSAMPLING_410	= 4,
1303 	V4L2_JPEG_CHROMA_SUBSAMPLING_GRAY	= 5,
1304 };
1305 #define	V4L2_CID_JPEG_RESTART_INTERVAL		(V4L2_CID_JPEG_CLASS_BASE + 2)
1306 #define	V4L2_CID_JPEG_COMPRESSION_QUALITY	(V4L2_CID_JPEG_CLASS_BASE + 3)
1307 
1308 #define	V4L2_CID_JPEG_ACTIVE_MARKER		(V4L2_CID_JPEG_CLASS_BASE + 4)
1309 #define	V4L2_JPEG_ACTIVE_MARKER_APP0		(1 << 0)
1310 #define	V4L2_JPEG_ACTIVE_MARKER_APP1		(1 << 1)
1311 #define	V4L2_JPEG_ACTIVE_MARKER_COM		(1 << 16)
1312 #define	V4L2_JPEG_ACTIVE_MARKER_DQT		(1 << 17)
1313 #define	V4L2_JPEG_ACTIVE_MARKER_DHT		(1 << 18)
1314 
1315 
1316 /* Image source controls */
1317 #define V4L2_CID_IMAGE_SOURCE_CLASS_BASE	(V4L2_CTRL_CLASS_IMAGE_SOURCE | 0x900)
1318 #define V4L2_CID_IMAGE_SOURCE_CLASS		(V4L2_CTRL_CLASS_IMAGE_SOURCE | 1)
1319 
1320 #define V4L2_CID_VBLANK				(V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 1)
1321 #define V4L2_CID_HBLANK				(V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 2)
1322 #define V4L2_CID_ANALOGUE_GAIN			(V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 3)
1323 #define V4L2_CID_TEST_PATTERN_RED		(V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 4)
1324 #define V4L2_CID_TEST_PATTERN_GREENR		(V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 5)
1325 #define V4L2_CID_TEST_PATTERN_BLUE		(V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 6)
1326 #define V4L2_CID_TEST_PATTERN_GREENB		(V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 7)
1327 #define V4L2_CID_UNIT_CELL_SIZE			(V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 8)
1328 #define V4L2_CID_NOTIFY_GAINS			(V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 9)
1329 
1330 
1331 /* Image processing controls */
1332 
1333 #define V4L2_CID_IMAGE_PROC_CLASS_BASE		(V4L2_CTRL_CLASS_IMAGE_PROC | 0x900)
1334 #define V4L2_CID_IMAGE_PROC_CLASS		(V4L2_CTRL_CLASS_IMAGE_PROC | 1)
1335 
1336 #define V4L2_CID_LINK_FREQ			(V4L2_CID_IMAGE_PROC_CLASS_BASE + 1)
1337 #define V4L2_CID_PIXEL_RATE			(V4L2_CID_IMAGE_PROC_CLASS_BASE + 2)
1338 #define V4L2_CID_TEST_PATTERN			(V4L2_CID_IMAGE_PROC_CLASS_BASE + 3)
1339 #define V4L2_CID_DEINTERLACING_MODE		(V4L2_CID_IMAGE_PROC_CLASS_BASE + 4)
1340 #define V4L2_CID_DIGITAL_GAIN			(V4L2_CID_IMAGE_PROC_CLASS_BASE + 5)
1341 
1342 /*  DV-class control IDs defined by V4L2 */
1343 #define V4L2_CID_DV_CLASS_BASE			(V4L2_CTRL_CLASS_DV | 0x900)
1344 #define V4L2_CID_DV_CLASS			(V4L2_CTRL_CLASS_DV | 1)
1345 
1346 #define	V4L2_CID_DV_TX_HOTPLUG			(V4L2_CID_DV_CLASS_BASE + 1)
1347 #define	V4L2_CID_DV_TX_RXSENSE			(V4L2_CID_DV_CLASS_BASE + 2)
1348 #define	V4L2_CID_DV_TX_EDID_PRESENT		(V4L2_CID_DV_CLASS_BASE + 3)
1349 #define	V4L2_CID_DV_TX_MODE			(V4L2_CID_DV_CLASS_BASE + 4)
1350 enum v4l2_dv_tx_mode {
1351 	V4L2_DV_TX_MODE_DVI_D	= 0,
1352 	V4L2_DV_TX_MODE_HDMI	= 1,
1353 };
1354 #define V4L2_CID_DV_TX_RGB_RANGE		(V4L2_CID_DV_CLASS_BASE + 5)
1355 enum v4l2_dv_rgb_range {
1356 	V4L2_DV_RGB_RANGE_AUTO	  = 0,
1357 	V4L2_DV_RGB_RANGE_LIMITED = 1,
1358 	V4L2_DV_RGB_RANGE_FULL	  = 2,
1359 };
1360 
1361 #define V4L2_CID_DV_TX_IT_CONTENT_TYPE		(V4L2_CID_DV_CLASS_BASE + 6)
1362 enum v4l2_dv_it_content_type {
1363 	V4L2_DV_IT_CONTENT_TYPE_GRAPHICS  = 0,
1364 	V4L2_DV_IT_CONTENT_TYPE_PHOTO	  = 1,
1365 	V4L2_DV_IT_CONTENT_TYPE_CINEMA	  = 2,
1366 	V4L2_DV_IT_CONTENT_TYPE_GAME	  = 3,
1367 	V4L2_DV_IT_CONTENT_TYPE_NO_ITC	  = 4,
1368 };
1369 
1370 #define	V4L2_CID_DV_RX_POWER_PRESENT		(V4L2_CID_DV_CLASS_BASE + 100)
1371 #define V4L2_CID_DV_RX_RGB_RANGE		(V4L2_CID_DV_CLASS_BASE + 101)
1372 #define V4L2_CID_DV_RX_IT_CONTENT_TYPE		(V4L2_CID_DV_CLASS_BASE + 102)
1373 
1374 #define V4L2_CID_FM_RX_CLASS_BASE		(V4L2_CTRL_CLASS_FM_RX | 0x900)
1375 #define V4L2_CID_FM_RX_CLASS			(V4L2_CTRL_CLASS_FM_RX | 1)
1376 
1377 #define V4L2_CID_TUNE_DEEMPHASIS		(V4L2_CID_FM_RX_CLASS_BASE + 1)
1378 enum v4l2_deemphasis {
1379 	V4L2_DEEMPHASIS_DISABLED	= V4L2_PREEMPHASIS_DISABLED,
1380 	V4L2_DEEMPHASIS_50_uS		= V4L2_PREEMPHASIS_50_uS,
1381 	V4L2_DEEMPHASIS_75_uS		= V4L2_PREEMPHASIS_75_uS,
1382 };
1383 
1384 #define V4L2_CID_RDS_RECEPTION			(V4L2_CID_FM_RX_CLASS_BASE + 2)
1385 #define V4L2_CID_RDS_RX_PTY			(V4L2_CID_FM_RX_CLASS_BASE + 3)
1386 #define V4L2_CID_RDS_RX_PS_NAME			(V4L2_CID_FM_RX_CLASS_BASE + 4)
1387 #define V4L2_CID_RDS_RX_RADIO_TEXT		(V4L2_CID_FM_RX_CLASS_BASE + 5)
1388 #define V4L2_CID_RDS_RX_TRAFFIC_ANNOUNCEMENT	(V4L2_CID_FM_RX_CLASS_BASE + 6)
1389 #define V4L2_CID_RDS_RX_TRAFFIC_PROGRAM		(V4L2_CID_FM_RX_CLASS_BASE + 7)
1390 #define V4L2_CID_RDS_RX_MUSIC_SPEECH		(V4L2_CID_FM_RX_CLASS_BASE + 8)
1391 
1392 #define V4L2_CID_RF_TUNER_CLASS_BASE		(V4L2_CTRL_CLASS_RF_TUNER | 0x900)
1393 #define V4L2_CID_RF_TUNER_CLASS			(V4L2_CTRL_CLASS_RF_TUNER | 1)
1394 
1395 #define V4L2_CID_RF_TUNER_BANDWIDTH_AUTO	(V4L2_CID_RF_TUNER_CLASS_BASE + 11)
1396 #define V4L2_CID_RF_TUNER_BANDWIDTH		(V4L2_CID_RF_TUNER_CLASS_BASE + 12)
1397 #define V4L2_CID_RF_TUNER_RF_GAIN		(V4L2_CID_RF_TUNER_CLASS_BASE + 32)
1398 #define V4L2_CID_RF_TUNER_LNA_GAIN_AUTO		(V4L2_CID_RF_TUNER_CLASS_BASE + 41)
1399 #define V4L2_CID_RF_TUNER_LNA_GAIN		(V4L2_CID_RF_TUNER_CLASS_BASE + 42)
1400 #define V4L2_CID_RF_TUNER_MIXER_GAIN_AUTO	(V4L2_CID_RF_TUNER_CLASS_BASE + 51)
1401 #define V4L2_CID_RF_TUNER_MIXER_GAIN		(V4L2_CID_RF_TUNER_CLASS_BASE + 52)
1402 #define V4L2_CID_RF_TUNER_IF_GAIN_AUTO		(V4L2_CID_RF_TUNER_CLASS_BASE + 61)
1403 #define V4L2_CID_RF_TUNER_IF_GAIN		(V4L2_CID_RF_TUNER_CLASS_BASE + 62)
1404 #define V4L2_CID_RF_TUNER_PLL_LOCK			(V4L2_CID_RF_TUNER_CLASS_BASE + 91)
1405 
1406 
1407 /*  Detection-class control IDs defined by V4L2 */
1408 #define V4L2_CID_DETECT_CLASS_BASE		(V4L2_CTRL_CLASS_DETECT | 0x900)
1409 #define V4L2_CID_DETECT_CLASS			(V4L2_CTRL_CLASS_DETECT | 1)
1410 
1411 #define V4L2_CID_DETECT_MD_MODE			(V4L2_CID_DETECT_CLASS_BASE + 1)
1412 enum v4l2_detect_md_mode {
1413 	V4L2_DETECT_MD_MODE_DISABLED		= 0,
1414 	V4L2_DETECT_MD_MODE_GLOBAL		= 1,
1415 	V4L2_DETECT_MD_MODE_THRESHOLD_GRID	= 2,
1416 	V4L2_DETECT_MD_MODE_REGION_GRID		= 3,
1417 };
1418 #define V4L2_CID_DETECT_MD_GLOBAL_THRESHOLD	(V4L2_CID_DETECT_CLASS_BASE + 2)
1419 #define V4L2_CID_DETECT_MD_THRESHOLD_GRID	(V4L2_CID_DETECT_CLASS_BASE + 3)
1420 #define V4L2_CID_DETECT_MD_REGION_GRID		(V4L2_CID_DETECT_CLASS_BASE + 4)
1421 
1422 
1423 /*  Stateless CODECs controls */
1424 #define V4L2_CID_CODEC_STATELESS_BASE          (V4L2_CTRL_CLASS_CODEC_STATELESS | 0x900)
1425 #define V4L2_CID_CODEC_STATELESS_CLASS         (V4L2_CTRL_CLASS_CODEC_STATELESS | 1)
1426 
1427 #define V4L2_CID_STATELESS_H264_DECODE_MODE	(V4L2_CID_CODEC_STATELESS_BASE + 0)
1428 /**
1429  * enum v4l2_stateless_h264_decode_mode - Decoding mode
1430  *
1431  * @V4L2_STATELESS_H264_DECODE_MODE_SLICE_BASED: indicates that decoding
1432  * is performed one slice at a time. In this mode,
1433  * V4L2_CID_STATELESS_H264_SLICE_PARAMS must contain the parsed slice
1434  * parameters and the OUTPUT buffer must contain a single slice.
1435  * V4L2_BUF_CAP_SUPPORTS_M2M_HOLD_CAPTURE_BUF feature is used
1436  * in order to support multislice frames.
1437  * @V4L2_STATELESS_H264_DECODE_MODE_FRAME_BASED: indicates that
1438  * decoding is performed per frame. The OUTPUT buffer must contain
1439  * all slices and also both fields. This mode is typically supported
1440  * by device drivers that are able to parse the slice(s) header(s)
1441  * in hardware. When this mode is selected,
1442  * V4L2_CID_STATELESS_H264_SLICE_PARAMS is not used.
1443  */
1444 enum v4l2_stateless_h264_decode_mode {
1445 	V4L2_STATELESS_H264_DECODE_MODE_SLICE_BASED,
1446 	V4L2_STATELESS_H264_DECODE_MODE_FRAME_BASED,
1447 };
1448 
1449 #define V4L2_CID_STATELESS_H264_START_CODE	(V4L2_CID_CODEC_STATELESS_BASE + 1)
1450 /**
1451  * enum v4l2_stateless_h264_start_code - Start code
1452  *
1453  * @V4L2_STATELESS_H264_START_CODE_NONE: slices are passed
1454  * to the driver without any start code.
1455  * @V4L2_STATELESS_H264_START_CODE_ANNEX_B: slices are passed
1456  * to the driver with an Annex B start code prefix
1457  * (legal start codes can be 3-bytes 0x000001 or 4-bytes 0x00000001).
1458  * This mode is typically supported by device drivers that parse
1459  * the start code in hardware.
1460  */
1461 enum v4l2_stateless_h264_start_code {
1462 	V4L2_STATELESS_H264_START_CODE_NONE,
1463 	V4L2_STATELESS_H264_START_CODE_ANNEX_B,
1464 };
1465 
1466 #define V4L2_H264_SPS_CONSTRAINT_SET0_FLAG			0x01
1467 #define V4L2_H264_SPS_CONSTRAINT_SET1_FLAG			0x02
1468 #define V4L2_H264_SPS_CONSTRAINT_SET2_FLAG			0x04
1469 #define V4L2_H264_SPS_CONSTRAINT_SET3_FLAG			0x08
1470 #define V4L2_H264_SPS_CONSTRAINT_SET4_FLAG			0x10
1471 #define V4L2_H264_SPS_CONSTRAINT_SET5_FLAG			0x20
1472 
1473 #define V4L2_H264_SPS_FLAG_SEPARATE_COLOUR_PLANE		0x01
1474 #define V4L2_H264_SPS_FLAG_QPPRIME_Y_ZERO_TRANSFORM_BYPASS	0x02
1475 #define V4L2_H264_SPS_FLAG_DELTA_PIC_ORDER_ALWAYS_ZERO		0x04
1476 #define V4L2_H264_SPS_FLAG_GAPS_IN_FRAME_NUM_VALUE_ALLOWED	0x08
1477 #define V4L2_H264_SPS_FLAG_FRAME_MBS_ONLY			0x10
1478 #define V4L2_H264_SPS_FLAG_MB_ADAPTIVE_FRAME_FIELD		0x20
1479 #define V4L2_H264_SPS_FLAG_DIRECT_8X8_INFERENCE			0x40
1480 
1481 #define V4L2_H264_SPS_HAS_CHROMA_FORMAT(sps) \
1482 	((sps)->profile_idc == 100 || (sps)->profile_idc == 110 || \
1483 	 (sps)->profile_idc == 122 || (sps)->profile_idc == 244 || \
1484 	 (sps)->profile_idc == 44  || (sps)->profile_idc == 83  || \
1485 	 (sps)->profile_idc == 86  || (sps)->profile_idc == 118 || \
1486 	 (sps)->profile_idc == 128 || (sps)->profile_idc == 138 || \
1487 	 (sps)->profile_idc == 139 || (sps)->profile_idc == 134 || \
1488 	 (sps)->profile_idc == 135)
1489 
1490 #define V4L2_CID_STATELESS_H264_SPS		(V4L2_CID_CODEC_STATELESS_BASE + 2)
1491 /**
1492  * struct v4l2_ctrl_h264_sps - H264 sequence parameter set
1493  *
1494  * All the members on this sequence parameter set structure match the
1495  * sequence parameter set syntax as specified by the H264 specification.
1496  *
1497  * @profile_idc: see H264 specification.
1498  * @constraint_set_flags: see H264 specification.
1499  * @level_idc: see H264 specification.
1500  * @seq_parameter_set_id: see H264 specification.
1501  * @chroma_format_idc: see H264 specification.
1502  * @bit_depth_luma_minus8: see H264 specification.
1503  * @bit_depth_chroma_minus8: see H264 specification.
1504  * @log2_max_frame_num_minus4: see H264 specification.
1505  * @pic_order_cnt_type: see H264 specification.
1506  * @log2_max_pic_order_cnt_lsb_minus4: see H264 specification.
1507  * @max_num_ref_frames: see H264 specification.
1508  * @num_ref_frames_in_pic_order_cnt_cycle: see H264 specification.
1509  * @offset_for_ref_frame: see H264 specification.
1510  * @offset_for_non_ref_pic: see H264 specification.
1511  * @offset_for_top_to_bottom_field: see H264 specification.
1512  * @pic_width_in_mbs_minus1: see H264 specification.
1513  * @pic_height_in_map_units_minus1: see H264 specification.
1514  * @flags: see V4L2_H264_SPS_FLAG_{}.
1515  */
1516 struct v4l2_ctrl_h264_sps {
1517 	u_int8_t profile_idc;
1518 	u_int8_t constraint_set_flags;
1519 	u_int8_t level_idc;
1520 	u_int8_t seq_parameter_set_id;
1521 	u_int8_t chroma_format_idc;
1522 	u_int8_t bit_depth_luma_minus8;
1523 	u_int8_t bit_depth_chroma_minus8;
1524 	u_int8_t log2_max_frame_num_minus4;
1525 	u_int8_t pic_order_cnt_type;
1526 	u_int8_t log2_max_pic_order_cnt_lsb_minus4;
1527 	u_int8_t max_num_ref_frames;
1528 	u_int8_t num_ref_frames_in_pic_order_cnt_cycle;
1529 	int32_t offset_for_ref_frame[255];
1530 	int32_t offset_for_non_ref_pic;
1531 	int32_t offset_for_top_to_bottom_field;
1532 	u_int16_t pic_width_in_mbs_minus1;
1533 	u_int16_t pic_height_in_map_units_minus1;
1534 	u_int32_t flags;
1535 };
1536 
1537 #define V4L2_H264_PPS_FLAG_ENTROPY_CODING_MODE				0x0001
1538 #define V4L2_H264_PPS_FLAG_BOTTOM_FIELD_PIC_ORDER_IN_FRAME_PRESENT	0x0002
1539 #define V4L2_H264_PPS_FLAG_WEIGHTED_PRED				0x0004
1540 #define V4L2_H264_PPS_FLAG_DEBLOCKING_FILTER_CONTROL_PRESENT		0x0008
1541 #define V4L2_H264_PPS_FLAG_CONSTRAINED_INTRA_PRED			0x0010
1542 #define V4L2_H264_PPS_FLAG_REDUNDANT_PIC_CNT_PRESENT			0x0020
1543 #define V4L2_H264_PPS_FLAG_TRANSFORM_8X8_MODE				0x0040
1544 #define V4L2_H264_PPS_FLAG_SCALING_MATRIX_PRESENT			0x0080
1545 
1546 #define V4L2_CID_STATELESS_H264_PPS		(V4L2_CID_CODEC_STATELESS_BASE + 3)
1547 /**
1548  * struct v4l2_ctrl_h264_pps - H264 picture parameter set
1549  *
1550  * Except where noted, all the members on this picture parameter set
1551  * structure match the picture parameter set syntax as specified
1552  * by the H264 specification.
1553  *
1554  * In particular, V4L2_H264_PPS_FLAG_SCALING_MATRIX_PRESENT flag
1555  * has a specific meaning. This flag should be set if a non-flat
1556  * scaling matrix applies to the picture. In this case, applications
1557  * are expected to use V4L2_CID_STATELESS_H264_SCALING_MATRIX,
1558  * to pass the values of the non-flat matrices.
1559  *
1560  * @pic_parameter_set_id: see H264 specification.
1561  * @seq_parameter_set_id: see H264 specification.
1562  * @num_slice_groups_minus1: see H264 specification.
1563  * @num_ref_idx_l0_default_active_minus1: see H264 specification.
1564  * @num_ref_idx_l1_default_active_minus1: see H264 specification.
1565  * @weighted_bipred_idc: see H264 specification.
1566  * @pic_init_qp_minus26: see H264 specification.
1567  * @pic_init_qs_minus26: see H264 specification.
1568  * @chroma_qp_index_offset: see H264 specification.
1569  * @second_chroma_qp_index_offset: see H264 specification.
1570  * @flags: see V4L2_H264_PPS_FLAG_{}.
1571  */
1572 struct v4l2_ctrl_h264_pps {
1573 	u_int8_t pic_parameter_set_id;
1574 	u_int8_t seq_parameter_set_id;
1575 	u_int8_t num_slice_groups_minus1;
1576 	u_int8_t num_ref_idx_l0_default_active_minus1;
1577 	u_int8_t num_ref_idx_l1_default_active_minus1;
1578 	u_int8_t weighted_bipred_idc;
1579 	int8_t pic_init_qp_minus26;
1580 	int8_t pic_init_qs_minus26;
1581 	int8_t chroma_qp_index_offset;
1582 	int8_t second_chroma_qp_index_offset;
1583 	u_int16_t flags;
1584 };
1585 
1586 #define V4L2_CID_STATELESS_H264_SCALING_MATRIX	(V4L2_CID_CODEC_STATELESS_BASE + 4)
1587 /**
1588  * struct v4l2_ctrl_h264_scaling_matrix - H264 scaling matrices
1589  *
1590  * @scaling_list_4x4: scaling matrix after applying the inverse
1591  * scanning process. Expected list order is Intra Y, Intra Cb,
1592  * Intra Cr, Inter Y, Inter Cb, Inter Cr. The values on each
1593  * scaling list are expected in raster scan order.
1594  * @scaling_list_8x8: scaling matrix after applying the inverse
1595  * scanning process. Expected list order is Intra Y, Inter Y,
1596  * Intra Cb, Inter Cb, Intra Cr, Inter Cr. The values on each
1597  * scaling list are expected in raster scan order.
1598  *
1599  * Note that the list order is different for the 4x4 and 8x8
1600  * matrices as per the H264 specification, see table 7-2 "Assignment
1601  * of mnemonic names to scaling list indices and specification of
1602  * fall-back rule".
1603  */
1604 struct v4l2_ctrl_h264_scaling_matrix {
1605 	u_int8_t scaling_list_4x4[6][16];
1606 	u_int8_t scaling_list_8x8[6][64];
1607 };
1608 
1609 struct v4l2_h264_weight_factors {
1610 	int16_t luma_weight[32];
1611 	int16_t luma_offset[32];
1612 	int16_t chroma_weight[32][2];
1613 	int16_t chroma_offset[32][2];
1614 };
1615 
1616 #define V4L2_H264_CTRL_PRED_WEIGHTS_REQUIRED(pps, slice) \
1617 	((((pps)->flags & V4L2_H264_PPS_FLAG_WEIGHTED_PRED) && \
1618 	 ((slice)->slice_type == V4L2_H264_SLICE_TYPE_P || \
1619 	  (slice)->slice_type == V4L2_H264_SLICE_TYPE_SP)) || \
1620 	 ((pps)->weighted_bipred_idc == 1 && \
1621 	  (slice)->slice_type == V4L2_H264_SLICE_TYPE_B))
1622 
1623 #define V4L2_CID_STATELESS_H264_PRED_WEIGHTS	(V4L2_CID_CODEC_STATELESS_BASE + 5)
1624 /**
1625  * struct v4l2_ctrl_h264_pred_weights - Prediction weight table
1626  *
1627  * Prediction weight table, which matches the syntax specified
1628  * by the H264 specification.
1629  *
1630  * @luma_log2_weight_denom: see H264 specification.
1631  * @chroma_log2_weight_denom: see H264 specification.
1632  * @weight_factors: luma and chroma weight factors.
1633  */
1634 struct v4l2_ctrl_h264_pred_weights {
1635 	u_int16_t luma_log2_weight_denom;
1636 	u_int16_t chroma_log2_weight_denom;
1637 	struct v4l2_h264_weight_factors weight_factors[2];
1638 };
1639 
1640 #define V4L2_H264_SLICE_TYPE_P				0
1641 #define V4L2_H264_SLICE_TYPE_B				1
1642 #define V4L2_H264_SLICE_TYPE_I				2
1643 #define V4L2_H264_SLICE_TYPE_SP				3
1644 #define V4L2_H264_SLICE_TYPE_SI				4
1645 
1646 #define V4L2_H264_SLICE_FLAG_DIRECT_SPATIAL_MV_PRED	0x01
1647 #define V4L2_H264_SLICE_FLAG_SP_FOR_SWITCH		0x02
1648 
1649 #define V4L2_H264_TOP_FIELD_REF				0x1
1650 #define V4L2_H264_BOTTOM_FIELD_REF			0x2
1651 #define V4L2_H264_FRAME_REF				0x3
1652 
1653 /**
1654  * struct v4l2_h264_reference - H264 picture reference
1655  *
1656  * @fields: indicates how the picture is referenced.
1657  * Valid values are V4L2_H264_{}_REF.
1658  * @index: index into v4l2_ctrl_h264_decode_params.dpb[].
1659  */
1660 struct v4l2_h264_reference {
1661 	u_int8_t fields;
1662 	u_int8_t index;
1663 };
1664 
1665 /*
1666  * Maximum DPB size, as specified by section 'A.3.1 Level limits
1667  * common to the Baseline, Main, and Extended profiles'.
1668  */
1669 #define V4L2_H264_NUM_DPB_ENTRIES 16
1670 #define V4L2_H264_REF_LIST_LEN (2 * V4L2_H264_NUM_DPB_ENTRIES)
1671 
1672 #define V4L2_CID_STATELESS_H264_SLICE_PARAMS	(V4L2_CID_CODEC_STATELESS_BASE + 6)
1673 /**
1674  * struct v4l2_ctrl_h264_slice_params - H264 slice parameters
1675  *
1676  * This structure holds the H264 syntax elements that are specified
1677  * as non-invariant for the slices in a given frame.
1678  *
1679  * Slice invariant syntax elements are contained in struct
1680  * v4l2_ctrl_h264_decode_params. This is done to reduce the API surface
1681  * on frame-based decoders, where slice header parsing is done by the
1682  * hardware.
1683  *
1684  * Slice invariant syntax elements are specified in specification section
1685  * "7.4.3 Slice header semantics".
1686  *
1687  * Except where noted, the members on this struct match the slice header syntax.
1688  *
1689  * @header_bit_size: offset in bits to slice_data() from the beginning of this slice.
1690  * @first_mb_in_slice: see H264 specification.
1691  * @slice_type: see H264 specification.
1692  * @colour_plane_id: see H264 specification.
1693  * @redundant_pic_cnt: see H264 specification.
1694  * @cabac_init_idc: see H264 specification.
1695  * @slice_qp_delta: see H264 specification.
1696  * @slice_qs_delta: see H264 specification.
1697  * @disable_deblocking_filter_idc: see H264 specification.
1698  * @slice_alpha_c0_offset_div2: see H264 specification.
1699  * @slice_beta_offset_div2: see H264 specification.
1700  * @num_ref_idx_l0_active_minus1: see H264 specification.
1701  * @num_ref_idx_l1_active_minus1: see H264 specification.
1702  * @reserved: padding field. Should be zeroed by applications.
1703  * @ref_pic_list0: reference picture list 0 after applying the per-slice modifications.
1704  * @ref_pic_list1: reference picture list 1 after applying the per-slice modifications.
1705  * @flags: see V4L2_H264_SLICE_FLAG_{}.
1706  */
1707 struct v4l2_ctrl_h264_slice_params {
1708 	u_int32_t header_bit_size;
1709 	u_int32_t first_mb_in_slice;
1710 	u_int8_t slice_type;
1711 	u_int8_t colour_plane_id;
1712 	u_int8_t redundant_pic_cnt;
1713 	u_int8_t cabac_init_idc;
1714 	int8_t slice_qp_delta;
1715 	int8_t slice_qs_delta;
1716 	u_int8_t disable_deblocking_filter_idc;
1717 	int8_t slice_alpha_c0_offset_div2;
1718 	int8_t slice_beta_offset_div2;
1719 	u_int8_t num_ref_idx_l0_active_minus1;
1720 	u_int8_t num_ref_idx_l1_active_minus1;
1721 
1722 	u_int8_t reserved;
1723 
1724 	struct v4l2_h264_reference ref_pic_list0[V4L2_H264_REF_LIST_LEN];
1725 	struct v4l2_h264_reference ref_pic_list1[V4L2_H264_REF_LIST_LEN];
1726 
1727 	u_int32_t flags;
1728 };
1729 
1730 #define V4L2_H264_DPB_ENTRY_FLAG_VALID		0x01
1731 #define V4L2_H264_DPB_ENTRY_FLAG_ACTIVE		0x02
1732 #define V4L2_H264_DPB_ENTRY_FLAG_LONG_TERM	0x04
1733 #define V4L2_H264_DPB_ENTRY_FLAG_FIELD		0x08
1734 
1735 /**
1736  * struct v4l2_h264_dpb_entry - H264 decoded picture buffer entry
1737  *
1738  * @reference_ts: timestamp of the V4L2 capture buffer to use as reference.
1739  * The timestamp refers to the timestamp field in struct v4l2_buffer.
1740  * Use v4l2_timeval_to_ns() to convert the struct timeval to a u_int64_t.
1741  * @pic_num: matches PicNum variable assigned during the reference
1742  * picture lists construction process.
1743  * @frame_num: frame identifier which matches frame_num syntax element.
1744  * @fields: indicates how the DPB entry is referenced. Valid values are
1745  * V4L2_H264_{}_REF.
1746  * @reserved: padding field. Should be zeroed by applications.
1747  * @top_field_order_cnt: matches TopFieldOrderCnt picture value.
1748  * @bottom_field_order_cnt: matches BottomFieldOrderCnt picture value.
1749  * Note that picture field is indicated by v4l2_buffer.field.
1750  * @flags: see V4L2_H264_DPB_ENTRY_FLAG_{}.
1751  */
1752 struct v4l2_h264_dpb_entry {
1753 	u_int64_t reference_ts;
1754 	u_int32_t pic_num;
1755 	u_int16_t frame_num;
1756 	u_int8_t fields;
1757 	u_int8_t reserved[5];
1758 	int32_t top_field_order_cnt;
1759 	int32_t bottom_field_order_cnt;
1760 	u_int32_t flags;
1761 };
1762 
1763 #define V4L2_H264_DECODE_PARAM_FLAG_IDR_PIC		0x01
1764 #define V4L2_H264_DECODE_PARAM_FLAG_FIELD_PIC		0x02
1765 #define V4L2_H264_DECODE_PARAM_FLAG_BOTTOM_FIELD	0x04
1766 #define V4L2_H264_DECODE_PARAM_FLAG_PFRAME		0x08
1767 #define V4L2_H264_DECODE_PARAM_FLAG_BFRAME		0x10
1768 
1769 #define V4L2_CID_STATELESS_H264_DECODE_PARAMS	(V4L2_CID_CODEC_STATELESS_BASE + 7)
1770 /**
1771  * struct v4l2_ctrl_h264_decode_params - H264 decoding parameters
1772  *
1773  * @dpb: decoded picture buffer.
1774  * @nal_ref_idc: slice header syntax element.
1775  * @frame_num: slice header syntax element.
1776  * @top_field_order_cnt: matches TopFieldOrderCnt picture value.
1777  * @bottom_field_order_cnt: matches BottomFieldOrderCnt picture value.
1778  * Note that picture field is indicated by v4l2_buffer.field.
1779  * @idr_pic_id: slice header syntax element.
1780  * @pic_order_cnt_lsb: slice header syntax element.
1781  * @delta_pic_order_cnt_bottom: slice header syntax element.
1782  * @delta_pic_order_cnt0: slice header syntax element.
1783  * @delta_pic_order_cnt1: slice header syntax element.
1784  * @dec_ref_pic_marking_bit_size: size in bits of dec_ref_pic_marking()
1785  * syntax element.
1786  * @pic_order_cnt_bit_size: size in bits of pic order count syntax.
1787  * @slice_group_change_cycle: slice header syntax element.
1788  * @reserved: padding field. Should be zeroed by applications.
1789  * @flags: see V4L2_H264_DECODE_PARAM_FLAG_{}.
1790  */
1791 struct v4l2_ctrl_h264_decode_params {
1792 	struct v4l2_h264_dpb_entry dpb[V4L2_H264_NUM_DPB_ENTRIES];
1793 	u_int16_t nal_ref_idc;
1794 	u_int16_t frame_num;
1795 	int32_t top_field_order_cnt;
1796 	int32_t bottom_field_order_cnt;
1797 	u_int16_t idr_pic_id;
1798 	u_int16_t pic_order_cnt_lsb;
1799 	int32_t delta_pic_order_cnt_bottom;
1800 	int32_t delta_pic_order_cnt0;
1801 	int32_t delta_pic_order_cnt1;
1802 	u_int32_t dec_ref_pic_marking_bit_size;
1803 	u_int32_t pic_order_cnt_bit_size;
1804 	u_int32_t slice_group_change_cycle;
1805 
1806 	u_int32_t reserved;
1807 	u_int32_t flags;
1808 };
1809 
1810 
1811 /* Stateless FWHT control, used by the vicodec driver */
1812 
1813 /* Current FWHT version */
1814 #define V4L2_FWHT_VERSION			3
1815 
1816 /* Set if this is an interlaced format */
1817 #define V4L2_FWHT_FL_IS_INTERLACED		_BITUL(0)
1818 /* Set if this is a bottom-first (NTSC) interlaced format */
1819 #define V4L2_FWHT_FL_IS_BOTTOM_FIRST		_BITUL(1)
1820 /* Set if each 'frame' contains just one field */
1821 #define V4L2_FWHT_FL_IS_ALTERNATE		_BITUL(2)
1822 /*
1823  * If V4L2_FWHT_FL_IS_ALTERNATE was set, then this is set if this
1824  * 'frame' is the bottom field, else it is the top field.
1825  */
1826 #define V4L2_FWHT_FL_IS_BOTTOM_FIELD		_BITUL(3)
1827 /* Set if the Y' plane is uncompressed */
1828 #define V4L2_FWHT_FL_LUMA_IS_UNCOMPRESSED	_BITUL(4)
1829 /* Set if the Cb plane is uncompressed */
1830 #define V4L2_FWHT_FL_CB_IS_UNCOMPRESSED		_BITUL(5)
1831 /* Set if the Cr plane is uncompressed */
1832 #define V4L2_FWHT_FL_CR_IS_UNCOMPRESSED		_BITUL(6)
1833 /* Set if the chroma plane is full height, if cleared it is half height */
1834 #define V4L2_FWHT_FL_CHROMA_FULL_HEIGHT		_BITUL(7)
1835 /* Set if the chroma plane is full width, if cleared it is half width */
1836 #define V4L2_FWHT_FL_CHROMA_FULL_WIDTH		_BITUL(8)
1837 /* Set if the alpha plane is uncompressed */
1838 #define V4L2_FWHT_FL_ALPHA_IS_UNCOMPRESSED	_BITUL(9)
1839 /* Set if this is an I Frame */
1840 #define V4L2_FWHT_FL_I_FRAME			_BITUL(10)
1841 
1842 /* A 4-values flag - the number of components - 1 */
1843 #define V4L2_FWHT_FL_COMPONENTS_NUM_MSK		GENMASK(18, 16)
1844 #define V4L2_FWHT_FL_COMPONENTS_NUM_OFFSET	16
1845 
1846 /* A 4-values flag - the pixel encoding type */
1847 #define V4L2_FWHT_FL_PIXENC_MSK			GENMASK(20, 19)
1848 #define V4L2_FWHT_FL_PIXENC_OFFSET		19
1849 #define V4L2_FWHT_FL_PIXENC_YUV			(1 << V4L2_FWHT_FL_PIXENC_OFFSET)
1850 #define V4L2_FWHT_FL_PIXENC_RGB			(2 << V4L2_FWHT_FL_PIXENC_OFFSET)
1851 #define V4L2_FWHT_FL_PIXENC_HSV			(3 << V4L2_FWHT_FL_PIXENC_OFFSET)
1852 
1853 #define V4L2_CID_STATELESS_FWHT_PARAMS		(V4L2_CID_CODEC_STATELESS_BASE + 100)
1854 /**
1855  * struct v4l2_ctrl_fwht_params - FWHT parameters
1856  *
1857  * @backward_ref_ts: timestamp of the V4L2 capture buffer to use as reference.
1858  * The timestamp refers to the timestamp field in struct v4l2_buffer.
1859  * Use v4l2_timeval_to_ns() to convert the struct timeval to a u_int64_t.
1860  * @version: must be V4L2_FWHT_VERSION.
1861  * @width: width of frame.
1862  * @height: height of frame.
1863  * @flags: FWHT flags (see V4L2_FWHT_FL_*).
1864  * @colorspace: the colorspace (enum v4l2_colorspace).
1865  * @xfer_func: the transfer function (enum v4l2_xfer_func).
1866  * @ycbcr_enc: the Y'CbCr encoding (enum v4l2_ycbcr_encoding).
1867  * @quantization: the quantization (enum v4l2_quantization).
1868  */
1869 struct v4l2_ctrl_fwht_params {
1870 	u_int64_t backward_ref_ts;
1871 	u_int32_t version;
1872 	u_int32_t width;
1873 	u_int32_t height;
1874 	u_int32_t flags;
1875 	u_int32_t colorspace;
1876 	u_int32_t xfer_func;
1877 	u_int32_t ycbcr_enc;
1878 	u_int32_t quantization;
1879 };
1880 
1881 /* Stateless VP8 control */
1882 
1883 #define V4L2_VP8_SEGMENT_FLAG_ENABLED              0x01
1884 #define V4L2_VP8_SEGMENT_FLAG_UPDATE_MAP           0x02
1885 #define V4L2_VP8_SEGMENT_FLAG_UPDATE_FEATURE_DATA  0x04
1886 #define V4L2_VP8_SEGMENT_FLAG_DELTA_VALUE_MODE     0x08
1887 
1888 /**
1889  * struct v4l2_vp8_segment - VP8 segment-based adjustments parameters
1890  *
1891  * @quant_update: update values for the segment quantizer.
1892  * @lf_update: update values for the loop filter level.
1893  * @segment_probs: branch probabilities of the segment_id decoding tree.
1894  * @padding: padding field. Should be zeroed by applications.
1895  * @flags: see V4L2_VP8_SEGMENT_FLAG_{}.
1896  *
1897  * This structure contains segment-based adjustments related parameters.
1898  * See the 'update_segmentation()' part of the frame header syntax,
1899  * and section '9.3. Segment-Based Adjustments' of the VP8 specification
1900  * for more details.
1901  */
1902 struct v4l2_vp8_segment {
1903 	int8_t quant_update[4];
1904 	int8_t lf_update[4];
1905 	u_int8_t segment_probs[3];
1906 	u_int8_t padding;
1907 	u_int32_t flags;
1908 };
1909 
1910 #define V4L2_VP8_LF_ADJ_ENABLE	0x01
1911 #define V4L2_VP8_LF_DELTA_UPDATE	0x02
1912 #define V4L2_VP8_LF_FILTER_TYPE_SIMPLE	0x04
1913 
1914 /**
1915  * struct v4l2_vp8_loop_filter - VP8 loop filter parameters
1916  *
1917  * @ref_frm_delta: Reference frame signed delta values.
1918  * @mb_mode_delta: MB prediction mode signed delta values.
1919  * @sharpness_level: matches sharpness_level syntax element.
1920  * @level: matches loop_filter_level syntax element.
1921  * @padding: padding field. Should be zeroed by applications.
1922  * @flags: see V4L2_VP8_LF_{}.
1923  *
1924  * This structure contains loop filter related parameters.
1925  * See the 'mb_lf_adjustments()' part of the frame header syntax,
1926  * and section '9.4. Loop Filter Type and Levels' of the VP8 specification
1927  * for more details.
1928  */
1929 struct v4l2_vp8_loop_filter {
1930 	int8_t ref_frm_delta[4];
1931 	int8_t mb_mode_delta[4];
1932 	u_int8_t sharpness_level;
1933 	u_int8_t level;
1934 	u_int16_t padding;
1935 	u_int32_t flags;
1936 };
1937 
1938 /**
1939  * struct v4l2_vp8_quantization - VP8 quantizattion indices
1940  *
1941  * @y_ac_qi: luma AC coefficient table index.
1942  * @y_dc_delta: luma DC delta vaue.
1943  * @y2_dc_delta: y2 block DC delta value.
1944  * @y2_ac_delta: y2 block AC delta value.
1945  * @uv_dc_delta: chroma DC delta value.
1946  * @uv_ac_delta: chroma AC delta value.
1947  * @padding: padding field. Should be zeroed by applications.
1948  *
1949  * This structure contains the quantization indices present
1950  * in 'quant_indices()' part of the frame header syntax.
1951  * See section '9.6. Dequantization Indices' of the VP8 specification
1952  * for more details.
1953  */
1954 struct v4l2_vp8_quantization {
1955 	u_int8_t y_ac_qi;
1956 	int8_t y_dc_delta;
1957 	int8_t y2_dc_delta;
1958 	int8_t y2_ac_delta;
1959 	int8_t uv_dc_delta;
1960 	int8_t uv_ac_delta;
1961 	u_int16_t padding;
1962 };
1963 
1964 #define V4L2_VP8_COEFF_PROB_CNT 11
1965 #define V4L2_VP8_MV_PROB_CNT 19
1966 
1967 /**
1968  * struct v4l2_vp8_entropy - VP8 update probabilities
1969  *
1970  * @coeff_probs: coefficient probability update values.
1971  * @y_mode_probs: luma intra-prediction probabilities.
1972  * @uv_mode_probs: chroma intra-prediction probabilities.
1973  * @mv_probs: mv decoding probability.
1974  * @padding: padding field. Should be zeroed by applications.
1975  *
1976  * This structure contains the update probabilities present in
1977  * 'token_prob_update()' and 'mv_prob_update()' part of the frame header.
1978  * See section '17.2. Probability Updates' of the VP8 specification
1979  * for more details.
1980  */
1981 struct v4l2_vp8_entropy {
1982 	u_int8_t coeff_probs[4][8][3][V4L2_VP8_COEFF_PROB_CNT];
1983 	u_int8_t y_mode_probs[4];
1984 	u_int8_t uv_mode_probs[3];
1985 	u_int8_t mv_probs[2][V4L2_VP8_MV_PROB_CNT];
1986 	u_int8_t padding[3];
1987 };
1988 
1989 /**
1990  * struct v4l2_vp8_entropy_coder_state - VP8 boolean coder state
1991  *
1992  * @range: coder state value for "Range"
1993  * @value: coder state value for "Value"
1994  * @bit_count: number of bits left in range "Value".
1995  * @padding: padding field. Should be zeroed by applications.
1996  *
1997  * This structure contains the state for the boolean coder, as
1998  * explained in section '7. Boolean Entropy Decoder' of the VP8 specification.
1999  */
2000 struct v4l2_vp8_entropy_coder_state {
2001 	u_int8_t range;
2002 	u_int8_t value;
2003 	u_int8_t bit_count;
2004 	u_int8_t padding;
2005 };
2006 
2007 #define V4L2_VP8_FRAME_FLAG_KEY_FRAME		0x01
2008 #define V4L2_VP8_FRAME_FLAG_EXPERIMENTAL		0x02
2009 #define V4L2_VP8_FRAME_FLAG_SHOW_FRAME		0x04
2010 #define V4L2_VP8_FRAME_FLAG_MB_NO_SKIP_COEFF	0x08
2011 #define V4L2_VP8_FRAME_FLAG_SIGN_BIAS_GOLDEN	0x10
2012 #define V4L2_VP8_FRAME_FLAG_SIGN_BIAS_ALT	0x20
2013 
2014 #define V4L2_VP8_FRAME_IS_KEY_FRAME(hdr) \
2015 	(!!((hdr)->flags & V4L2_VP8_FRAME_FLAG_KEY_FRAME))
2016 
2017 #define V4L2_CID_STATELESS_VP8_FRAME (V4L2_CID_CODEC_STATELESS_BASE + 200)
2018 /**
2019  * struct v4l2_ctrl_vp8_frame - VP8 frame parameters
2020  *
2021  * @segment: segmentation parameters. See &v4l2_vp8_segment for more details
2022  * @lf: loop filter parameters. See &v4l2_vp8_loop_filter for more details
2023  * @quant: quantization parameters. See &v4l2_vp8_quantization for more details
2024  * @entropy: update probabilities. See &v4l2_vp8_entropy for more details
2025  * @coder_state: boolean coder state. See &v4l2_vp8_entropy_coder_state for more details
2026  * @width: frame width.
2027  * @height: frame height.
2028  * @horizontal_scale: horizontal scaling factor.
2029  * @vertical_scale: vertical scaling factor.
2030  * @version: bitstream version.
2031  * @prob_skip_false: frame header syntax element.
2032  * @prob_intra: frame header syntax element.
2033  * @prob_last: frame header syntax element.
2034  * @prob_gf: frame header syntax element.
2035  * @num_dct_parts: number of DCT coefficients partitions.
2036  * @first_part_size: size of the first partition, i.e. the control partition.
2037  * @first_part_header_bits: size in bits of the first partition header portion.
2038  * @dct_part_sizes: DCT coefficients sizes.
2039  * @last_frame_ts: "last" reference buffer timestamp.
2040  * The timestamp refers to the timestamp field in struct v4l2_buffer.
2041  * Use v4l2_timeval_to_ns() to convert the struct timeval to a u_int64_t.
2042  * @golden_frame_ts: "golden" reference buffer timestamp.
2043  * @alt_frame_ts: "alt" reference buffer timestamp.
2044  * @flags: see V4L2_VP8_FRAME_FLAG_{}.
2045  */
2046 struct v4l2_ctrl_vp8_frame {
2047 	struct v4l2_vp8_segment segment;
2048 	struct v4l2_vp8_loop_filter lf;
2049 	struct v4l2_vp8_quantization quant;
2050 	struct v4l2_vp8_entropy entropy;
2051 	struct v4l2_vp8_entropy_coder_state coder_state;
2052 
2053 	u_int16_t width;
2054 	u_int16_t height;
2055 
2056 	u_int8_t horizontal_scale;
2057 	u_int8_t vertical_scale;
2058 
2059 	u_int8_t version;
2060 	u_int8_t prob_skip_false;
2061 	u_int8_t prob_intra;
2062 	u_int8_t prob_last;
2063 	u_int8_t prob_gf;
2064 	u_int8_t num_dct_parts;
2065 
2066 	u_int32_t first_part_size;
2067 	u_int32_t first_part_header_bits;
2068 	u_int32_t dct_part_sizes[8];
2069 
2070 	u_int64_t last_frame_ts;
2071 	u_int64_t golden_frame_ts;
2072 	u_int64_t alt_frame_ts;
2073 
2074 	u_int64_t flags;
2075 };
2076 
2077 /* Stateless MPEG-2 controls */
2078 
2079 #define V4L2_MPEG2_SEQ_FLAG_PROGRESSIVE	0x01
2080 
2081 #define V4L2_CID_STATELESS_MPEG2_SEQUENCE (V4L2_CID_CODEC_STATELESS_BASE+220)
2082 /**
2083  * struct v4l2_ctrl_mpeg2_sequence - MPEG-2 sequence header
2084  *
2085  * All the members on this structure match the sequence header and sequence
2086  * extension syntaxes as specified by the MPEG-2 specification.
2087  *
2088  * Fields horizontal_size, vertical_size and vbv_buffer_size are a
2089  * combination of respective _value and extension syntax elements,
2090  * as described in section 6.3.3 "Sequence header".
2091  *
2092  * @horizontal_size: combination of elements horizontal_size_value and
2093  * horizontal_size_extension.
2094  * @vertical_size: combination of elements vertical_size_value and
2095  * vertical_size_extension.
2096  * @vbv_buffer_size: combination of elements vbv_buffer_size_value and
2097  * vbv_buffer_size_extension.
2098  * @profile_and_level_indication: see MPEG-2 specification.
2099  * @chroma_format: see MPEG-2 specification.
2100  * @flags: see V4L2_MPEG2_SEQ_FLAG_{}.
2101  */
2102 struct v4l2_ctrl_mpeg2_sequence {
2103 	u_int16_t	horizontal_size;
2104 	u_int16_t	vertical_size;
2105 	u_int32_t	vbv_buffer_size;
2106 	u_int16_t	profile_and_level_indication;
2107 	u_int8_t	chroma_format;
2108 	u_int8_t	flags;
2109 };
2110 
2111 #define V4L2_MPEG2_PIC_CODING_TYPE_I			1
2112 #define V4L2_MPEG2_PIC_CODING_TYPE_P			2
2113 #define V4L2_MPEG2_PIC_CODING_TYPE_B			3
2114 #define V4L2_MPEG2_PIC_CODING_TYPE_D			4
2115 
2116 #define V4L2_MPEG2_PIC_TOP_FIELD			0x1
2117 #define V4L2_MPEG2_PIC_BOTTOM_FIELD			0x2
2118 #define V4L2_MPEG2_PIC_FRAME				0x3
2119 
2120 #define V4L2_MPEG2_PIC_FLAG_TOP_FIELD_FIRST		0x0001
2121 #define V4L2_MPEG2_PIC_FLAG_FRAME_PRED_DCT		0x0002
2122 #define V4L2_MPEG2_PIC_FLAG_CONCEALMENT_MV		0x0004
2123 #define V4L2_MPEG2_PIC_FLAG_Q_SCALE_TYPE		0x0008
2124 #define V4L2_MPEG2_PIC_FLAG_INTRA_VLC			0x0010
2125 #define V4L2_MPEG2_PIC_FLAG_ALT_SCAN			0x0020
2126 #define V4L2_MPEG2_PIC_FLAG_REPEAT_FIRST		0x0040
2127 #define V4L2_MPEG2_PIC_FLAG_PROGRESSIVE			0x0080
2128 
2129 #define V4L2_CID_STATELESS_MPEG2_PICTURE (V4L2_CID_CODEC_STATELESS_BASE+221)
2130 /**
2131  * struct v4l2_ctrl_mpeg2_picture - MPEG-2 picture header
2132  *
2133  * All the members on this structure match the picture header and picture
2134  * coding extension syntaxes as specified by the MPEG-2 specification.
2135  *
2136  * @backward_ref_ts: timestamp of the V4L2 capture buffer to use as
2137  * reference for backward prediction.
2138  * @forward_ref_ts: timestamp of the V4L2 capture buffer to use as
2139  * reference for forward prediction. These timestamp refers to the
2140  * timestamp field in struct v4l2_buffer. Use v4l2_timeval_to_ns()
2141  * to convert the struct timeval to a u_int64_t.
2142  * @flags: see V4L2_MPEG2_PIC_FLAG_{}.
2143  * @f_code: see MPEG-2 specification.
2144  * @picture_coding_type: see MPEG-2 specification.
2145  * @picture_structure: see V4L2_MPEG2_PIC_{}_FIELD.
2146  * @intra_dc_precision: see MPEG-2 specification.
2147  * @reserved: padding field. Should be zeroed by applications.
2148  */
2149 struct v4l2_ctrl_mpeg2_picture {
2150 	u_int64_t	backward_ref_ts;
2151 	u_int64_t	forward_ref_ts;
2152 	u_int32_t	flags;
2153 	u_int8_t	f_code[2][2];
2154 	u_int8_t	picture_coding_type;
2155 	u_int8_t	picture_structure;
2156 	u_int8_t	intra_dc_precision;
2157 	u_int8_t	reserved[5];
2158 };
2159 
2160 #define V4L2_CID_STATELESS_MPEG2_QUANTISATION (V4L2_CID_CODEC_STATELESS_BASE+222)
2161 /**
2162  * struct v4l2_ctrl_mpeg2_quantisation - MPEG-2 quantisation
2163  *
2164  * Quantisation matrices as specified by section 6.3.7
2165  * "Quant matrix extension".
2166  *
2167  * @intra_quantiser_matrix: The quantisation matrix coefficients
2168  * for intra-coded frames, in zigzag scanning order. It is relevant
2169  * for both luma and chroma components, although it can be superseded
2170  * by the chroma-specific matrix for non-4:2:0 YUV formats.
2171  * @non_intra_quantiser_matrix: The quantisation matrix coefficients
2172  * for non-intra-coded frames, in zigzag scanning order. It is relevant
2173  * for both luma and chroma components, although it can be superseded
2174  * by the chroma-specific matrix for non-4:2:0 YUV formats.
2175  * @chroma_intra_quantiser_matrix: The quantisation matrix coefficients
2176  * for the chominance component of intra-coded frames, in zigzag scanning
2177  * order. Only relevant for 4:2:2 and 4:4:4 YUV formats.
2178  * @chroma_non_intra_quantiser_matrix: The quantisation matrix coefficients
2179  * for the chrominance component of non-intra-coded frames, in zigzag scanning
2180  * order. Only relevant for 4:2:2 and 4:4:4 YUV formats.
2181  */
2182 struct v4l2_ctrl_mpeg2_quantisation {
2183 	u_int8_t	intra_quantiser_matrix[64];
2184 	u_int8_t	non_intra_quantiser_matrix[64];
2185 	u_int8_t	chroma_intra_quantiser_matrix[64];
2186 	u_int8_t	chroma_non_intra_quantiser_matrix[64];
2187 };
2188 
2189 #define V4L2_CID_STATELESS_HEVC_SPS		(V4L2_CID_CODEC_STATELESS_BASE + 400)
2190 #define V4L2_CID_STATELESS_HEVC_PPS		(V4L2_CID_CODEC_STATELESS_BASE + 401)
2191 #define V4L2_CID_STATELESS_HEVC_SLICE_PARAMS	(V4L2_CID_CODEC_STATELESS_BASE + 402)
2192 #define V4L2_CID_STATELESS_HEVC_SCALING_MATRIX	(V4L2_CID_CODEC_STATELESS_BASE + 403)
2193 #define V4L2_CID_STATELESS_HEVC_DECODE_PARAMS	(V4L2_CID_CODEC_STATELESS_BASE + 404)
2194 #define V4L2_CID_STATELESS_HEVC_DECODE_MODE	(V4L2_CID_CODEC_STATELESS_BASE + 405)
2195 #define V4L2_CID_STATELESS_HEVC_START_CODE	(V4L2_CID_CODEC_STATELESS_BASE + 406)
2196 #define V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS (V4L2_CID_CODEC_STATELESS_BASE + 407)
2197 
2198 enum v4l2_stateless_hevc_decode_mode {
2199 	V4L2_STATELESS_HEVC_DECODE_MODE_SLICE_BASED,
2200 	V4L2_STATELESS_HEVC_DECODE_MODE_FRAME_BASED,
2201 };
2202 
2203 enum v4l2_stateless_hevc_start_code {
2204 	V4L2_STATELESS_HEVC_START_CODE_NONE,
2205 	V4L2_STATELESS_HEVC_START_CODE_ANNEX_B,
2206 };
2207 
2208 #define V4L2_HEVC_SLICE_TYPE_B	0
2209 #define V4L2_HEVC_SLICE_TYPE_P	1
2210 #define V4L2_HEVC_SLICE_TYPE_I	2
2211 
2212 #define V4L2_HEVC_SPS_FLAG_SEPARATE_COLOUR_PLANE		(1ULL << 0)
2213 #define V4L2_HEVC_SPS_FLAG_SCALING_LIST_ENABLED			(1ULL << 1)
2214 #define V4L2_HEVC_SPS_FLAG_AMP_ENABLED				(1ULL << 2)
2215 #define V4L2_HEVC_SPS_FLAG_SAMPLE_ADAPTIVE_OFFSET		(1ULL << 3)
2216 #define V4L2_HEVC_SPS_FLAG_PCM_ENABLED				(1ULL << 4)
2217 #define V4L2_HEVC_SPS_FLAG_PCM_LOOP_FILTER_DISABLED		(1ULL << 5)
2218 #define V4L2_HEVC_SPS_FLAG_LONG_TERM_REF_PICS_PRESENT		(1ULL << 6)
2219 #define V4L2_HEVC_SPS_FLAG_SPS_TEMPORAL_MVP_ENABLED		(1ULL << 7)
2220 #define V4L2_HEVC_SPS_FLAG_STRONG_INTRA_SMOOTHING_ENABLED	(1ULL << 8)
2221 
2222 /**
2223  * struct v4l2_ctrl_hevc_sps - ITU-T Rec. H.265: Sequence parameter set
2224  *
2225  * @video_parameter_set_id: specifies the value of the
2226  *			vps_video_parameter_set_id of the active VPS
2227  * @seq_parameter_set_id: provides an identifier for the SPS for
2228  *			  reference by other syntax elements
2229  * @pic_width_in_luma_samples:	specifies the width of each decoded picture
2230  *				in units of luma samples
2231  * @pic_height_in_luma_samples: specifies the height of each decoded picture
2232  *				in units of luma samples
2233  * @bit_depth_luma_minus8: this value plus 8specifies the bit depth of the
2234  *                         samples of the luma array
2235  * @bit_depth_chroma_minus8: this value plus 8 specifies the bit depth of the
2236  *                           samples of the chroma arrays
2237  * @log2_max_pic_order_cnt_lsb_minus4: this value plus 4 specifies the value of
2238  *                                     the variable MaxPicOrderCntLsb
2239  * @sps_max_dec_pic_buffering_minus1: this value plus 1 specifies the maximum
2240  *                                    required size of the decoded picture
2241  *                                    buffer for the codec video sequence
2242  * @sps_max_num_reorder_pics: indicates the maximum allowed number of pictures
2243  * @sps_max_latency_increase_plus1: not equal to 0 is used to compute the
2244  *				    value of SpsMaxLatencyPictures array
2245  * @log2_min_luma_coding_block_size_minus3: plus 3 specifies the minimum
2246  *					    luma coding block size
2247  * @log2_diff_max_min_luma_coding_block_size: specifies the difference between
2248  *					      the maximum and minimum luma
2249  *					      coding block size
2250  * @log2_min_luma_transform_block_size_minus2: plus 2 specifies the minimum luma
2251  *					       transform block size
2252  * @log2_diff_max_min_luma_transform_block_size: specifies the difference between
2253  *						 the maximum and minimum luma
2254  *						 transform block size
2255  * @max_transform_hierarchy_depth_inter: specifies the maximum hierarchy
2256  *					 depth for transform units of
2257  *					 coding units coded in inter
2258  *					 prediction mode
2259  * @max_transform_hierarchy_depth_intra: specifies the maximum hierarchy
2260  *					 depth for transform units of
2261  *					 coding units coded in intra
2262  *					 prediction mode
2263  * @pcm_sample_bit_depth_luma_minus1: this value plus 1 specifies the number of
2264  *                                    bits used to represent each of PCM sample
2265  *                                    values of the luma component
2266  * @pcm_sample_bit_depth_chroma_minus1: this value plus 1 specifies the number
2267  *                                      of bits used to represent each of PCM
2268  *                                      sample values of the chroma components
2269  * @log2_min_pcm_luma_coding_block_size_minus3: this value plus 3 specifies the
2270  *                                              minimum size of coding blocks
2271  * @log2_diff_max_min_pcm_luma_coding_block_size: specifies the difference between
2272  *						  the maximum and minimum size of
2273  *						  coding blocks
2274  * @num_short_term_ref_pic_sets: specifies the number of st_ref_pic_set()
2275  *				 syntax structures included in the SPS
2276  * @num_long_term_ref_pics_sps: specifies the number of candidate long-term
2277  *				reference pictures that are specified in the SPS
2278  * @chroma_format_idc: specifies the chroma sampling
2279  * @sps_max_sub_layers_minus1: this value plus 1 specifies the maximum number
2280  *                             of temporal sub-layers
2281  * @reserved: padding field. Should be zeroed by applications.
2282  * @flags: see V4L2_HEVC_SPS_FLAG_{}
2283  */
2284 struct v4l2_ctrl_hevc_sps {
2285 	u_int8_t	video_parameter_set_id;
2286 	u_int8_t	seq_parameter_set_id;
2287 	u_int16_t	pic_width_in_luma_samples;
2288 	u_int16_t	pic_height_in_luma_samples;
2289 	u_int8_t	bit_depth_luma_minus8;
2290 	u_int8_t	bit_depth_chroma_minus8;
2291 	u_int8_t	log2_max_pic_order_cnt_lsb_minus4;
2292 	u_int8_t	sps_max_dec_pic_buffering_minus1;
2293 	u_int8_t	sps_max_num_reorder_pics;
2294 	u_int8_t	sps_max_latency_increase_plus1;
2295 	u_int8_t	log2_min_luma_coding_block_size_minus3;
2296 	u_int8_t	log2_diff_max_min_luma_coding_block_size;
2297 	u_int8_t	log2_min_luma_transform_block_size_minus2;
2298 	u_int8_t	log2_diff_max_min_luma_transform_block_size;
2299 	u_int8_t	max_transform_hierarchy_depth_inter;
2300 	u_int8_t	max_transform_hierarchy_depth_intra;
2301 	u_int8_t	pcm_sample_bit_depth_luma_minus1;
2302 	u_int8_t	pcm_sample_bit_depth_chroma_minus1;
2303 	u_int8_t	log2_min_pcm_luma_coding_block_size_minus3;
2304 	u_int8_t	log2_diff_max_min_pcm_luma_coding_block_size;
2305 	u_int8_t	num_short_term_ref_pic_sets;
2306 	u_int8_t	num_long_term_ref_pics_sps;
2307 	u_int8_t	chroma_format_idc;
2308 	u_int8_t	sps_max_sub_layers_minus1;
2309 
2310 	u_int8_t	reserved[6];
2311 	u_int64_t	flags;
2312 };
2313 
2314 #define V4L2_HEVC_PPS_FLAG_DEPENDENT_SLICE_SEGMENT_ENABLED	(1ULL << 0)
2315 #define V4L2_HEVC_PPS_FLAG_OUTPUT_FLAG_PRESENT			(1ULL << 1)
2316 #define V4L2_HEVC_PPS_FLAG_SIGN_DATA_HIDING_ENABLED		(1ULL << 2)
2317 #define V4L2_HEVC_PPS_FLAG_CABAC_INIT_PRESENT			(1ULL << 3)
2318 #define V4L2_HEVC_PPS_FLAG_CONSTRAINED_INTRA_PRED		(1ULL << 4)
2319 #define V4L2_HEVC_PPS_FLAG_TRANSFORM_SKIP_ENABLED		(1ULL << 5)
2320 #define V4L2_HEVC_PPS_FLAG_CU_QP_DELTA_ENABLED			(1ULL << 6)
2321 #define V4L2_HEVC_PPS_FLAG_PPS_SLICE_CHROMA_QP_OFFSETS_PRESENT	(1ULL << 7)
2322 #define V4L2_HEVC_PPS_FLAG_WEIGHTED_PRED			(1ULL << 8)
2323 #define V4L2_HEVC_PPS_FLAG_WEIGHTED_BIPRED			(1ULL << 9)
2324 #define V4L2_HEVC_PPS_FLAG_TRANSQUANT_BYPASS_ENABLED		(1ULL << 10)
2325 #define V4L2_HEVC_PPS_FLAG_TILES_ENABLED			(1ULL << 11)
2326 #define V4L2_HEVC_PPS_FLAG_ENTROPY_CODING_SYNC_ENABLED		(1ULL << 12)
2327 #define V4L2_HEVC_PPS_FLAG_LOOP_FILTER_ACROSS_TILES_ENABLED	(1ULL << 13)
2328 #define V4L2_HEVC_PPS_FLAG_PPS_LOOP_FILTER_ACROSS_SLICES_ENABLED (1ULL << 14)
2329 #define V4L2_HEVC_PPS_FLAG_DEBLOCKING_FILTER_OVERRIDE_ENABLED	(1ULL << 15)
2330 #define V4L2_HEVC_PPS_FLAG_PPS_DISABLE_DEBLOCKING_FILTER	(1ULL << 16)
2331 #define V4L2_HEVC_PPS_FLAG_LISTS_MODIFICATION_PRESENT		(1ULL << 17)
2332 #define V4L2_HEVC_PPS_FLAG_SLICE_SEGMENT_HEADER_EXTENSION_PRESENT (1ULL << 18)
2333 #define V4L2_HEVC_PPS_FLAG_DEBLOCKING_FILTER_CONTROL_PRESENT	(1ULL << 19)
2334 #define V4L2_HEVC_PPS_FLAG_UNIFORM_SPACING			(1ULL << 20)
2335 
2336 /**
2337  * struct v4l2_ctrl_hevc_pps - ITU-T Rec. H.265: Picture parameter set
2338  *
2339  * @pic_parameter_set_id: identifies the PPS for reference by other
2340  *			  syntax elements
2341  * @num_extra_slice_header_bits: specifies the number of extra slice header
2342  *				 bits that are present in the slice header RBSP
2343  *				 for coded pictures referring to the PPS.
2344  * @num_ref_idx_l0_default_active_minus1: this value plus 1 specifies the
2345  *                                        inferred value of num_ref_idx_l0_active_minus1
2346  * @num_ref_idx_l1_default_active_minus1: this value plus 1 specifies the
2347  *                                        inferred value of num_ref_idx_l1_active_minus1
2348  * @init_qp_minus26: this value plus 26 specifies the initial value of SliceQp Y for
2349  *		     each slice referring to the PPS
2350  * @diff_cu_qp_delta_depth: specifies the difference between the luma coding
2351  *			    tree block size and the minimum luma coding block
2352  *			    size of coding units that convey cu_qp_delta_abs
2353  *			    and cu_qp_delta_sign_flag
2354  * @pps_cb_qp_offset: specify the offsets to the luma quantization parameter Cb
2355  * @pps_cr_qp_offset: specify the offsets to the luma quantization parameter Cr
2356  * @num_tile_columns_minus1: this value plus 1 specifies the number of tile columns
2357  *			     partitioning the picture
2358  * @num_tile_rows_minus1: this value plus 1 specifies the number of tile rows partitioning
2359  *			  the picture
2360  * @column_width_minus1: this value plus 1 specifies the width of the each tile column in
2361  *			 units of coding tree blocks
2362  * @row_height_minus1: this value plus 1 specifies the height of the each tile row in
2363  *		       units of coding tree blocks
2364  * @pps_beta_offset_div2: specify the default deblocking parameter offsets for
2365  *			  beta divided by 2
2366  * @pps_tc_offset_div2: specify the default deblocking parameter offsets for tC
2367  *			divided by 2
2368  * @log2_parallel_merge_level_minus2: this value plus 2 specifies the value of
2369  *                                    the variable Log2ParMrgLevel
2370  * @reserved: padding field. Should be zeroed by applications.
2371  * @flags: see V4L2_HEVC_PPS_FLAG_{}
2372  */
2373 struct v4l2_ctrl_hevc_pps {
2374 	u_int8_t	pic_parameter_set_id;
2375 	u_int8_t	num_extra_slice_header_bits;
2376 	u_int8_t	num_ref_idx_l0_default_active_minus1;
2377 	u_int8_t	num_ref_idx_l1_default_active_minus1;
2378 	int8_t	init_qp_minus26;
2379 	u_int8_t	diff_cu_qp_delta_depth;
2380 	int8_t	pps_cb_qp_offset;
2381 	int8_t	pps_cr_qp_offset;
2382 	u_int8_t	num_tile_columns_minus1;
2383 	u_int8_t	num_tile_rows_minus1;
2384 	u_int8_t	column_width_minus1[20];
2385 	u_int8_t	row_height_minus1[22];
2386 	int8_t	pps_beta_offset_div2;
2387 	int8_t	pps_tc_offset_div2;
2388 	u_int8_t	log2_parallel_merge_level_minus2;
2389 	u_int8_t	reserved;
2390 	u_int64_t	flags;
2391 };
2392 
2393 #define V4L2_HEVC_DPB_ENTRY_LONG_TERM_REFERENCE	0x01
2394 
2395 #define V4L2_HEVC_SEI_PIC_STRUCT_FRAME				0
2396 #define V4L2_HEVC_SEI_PIC_STRUCT_TOP_FIELD			1
2397 #define V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_FIELD			2
2398 #define V4L2_HEVC_SEI_PIC_STRUCT_TOP_BOTTOM			3
2399 #define V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_TOP			4
2400 #define V4L2_HEVC_SEI_PIC_STRUCT_TOP_BOTTOM_TOP			5
2401 #define V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_TOP_BOTTOM		6
2402 #define V4L2_HEVC_SEI_PIC_STRUCT_FRAME_DOUBLING			7
2403 #define V4L2_HEVC_SEI_PIC_STRUCT_FRAME_TRIPLING			8
2404 #define V4L2_HEVC_SEI_PIC_STRUCT_TOP_PAIRED_PREVIOUS_BOTTOM	9
2405 #define V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_PAIRED_PREVIOUS_TOP	10
2406 #define V4L2_HEVC_SEI_PIC_STRUCT_TOP_PAIRED_NEXT_BOTTOM		11
2407 #define V4L2_HEVC_SEI_PIC_STRUCT_BOTTOM_PAIRED_NEXT_TOP		12
2408 
2409 #define V4L2_HEVC_DPB_ENTRIES_NUM_MAX		16
2410 
2411 /**
2412  * struct v4l2_hevc_dpb_entry - HEVC decoded picture buffer entry
2413  *
2414  * @timestamp: timestamp of the V4L2 capture buffer to use as reference.
2415  * @flags: long term flag for the reference frame
2416  * @field_pic: whether the reference is a field picture or a frame.
2417  * @reserved: padding field. Should be zeroed by applications.
2418  * @pic_order_cnt_val: the picture order count of the current picture.
2419  */
2420 struct v4l2_hevc_dpb_entry {
2421 	u_int64_t	timestamp;
2422 	u_int8_t	flags;
2423 	u_int8_t	field_pic;
2424 	u_int16_t	reserved;
2425 	int32_t	pic_order_cnt_val;
2426 };
2427 
2428 /**
2429  * struct v4l2_hevc_pred_weight_table - HEVC weighted prediction parameters
2430  *
2431  * @delta_luma_weight_l0: the difference of the weighting factor applied
2432  *			  to the luma prediction value for list 0
2433  * @luma_offset_l0: the additive offset applied to the luma prediction value
2434  *		    for list 0
2435  * @delta_chroma_weight_l0: the difference of the weighting factor applied
2436  *			    to the chroma prediction values for list 0
2437  * @chroma_offset_l0: the difference of the additive offset applied to
2438  *		      the chroma prediction values for list 0
2439  * @delta_luma_weight_l1: the difference of the weighting factor applied
2440  *			  to the luma prediction value for list 1
2441  * @luma_offset_l1: the additive offset applied to the luma prediction value
2442  *		    for list 1
2443  * @delta_chroma_weight_l1: the difference of the weighting factor applied
2444  *			    to the chroma prediction values for list 1
2445  * @chroma_offset_l1: the difference of the additive offset applied to
2446  *		      the chroma prediction values for list 1
2447  * @luma_log2_weight_denom: the base 2 logarithm of the denominator for
2448  *			    all luma weighting factors
2449  * @delta_chroma_log2_weight_denom: the difference of the base 2 logarithm
2450  *				    of the denominator for all chroma
2451  *				    weighting factors
2452  */
2453 struct v4l2_hevc_pred_weight_table {
2454 	int8_t	delta_luma_weight_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
2455 	int8_t	luma_offset_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
2456 	int8_t	delta_chroma_weight_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2];
2457 	int8_t	chroma_offset_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2];
2458 
2459 	int8_t	delta_luma_weight_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
2460 	int8_t	luma_offset_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
2461 	int8_t	delta_chroma_weight_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2];
2462 	int8_t	chroma_offset_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2];
2463 
2464 	u_int8_t	luma_log2_weight_denom;
2465 	int8_t	delta_chroma_log2_weight_denom;
2466 };
2467 
2468 #define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_SAO_LUMA		(1ULL << 0)
2469 #define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_SAO_CHROMA		(1ULL << 1)
2470 #define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_TEMPORAL_MVP_ENABLED	(1ULL << 2)
2471 #define V4L2_HEVC_SLICE_PARAMS_FLAG_MVD_L1_ZERO			(1ULL << 3)
2472 #define V4L2_HEVC_SLICE_PARAMS_FLAG_CABAC_INIT			(1ULL << 4)
2473 #define V4L2_HEVC_SLICE_PARAMS_FLAG_COLLOCATED_FROM_L0		(1ULL << 5)
2474 #define V4L2_HEVC_SLICE_PARAMS_FLAG_USE_INTEGER_MV		(1ULL << 6)
2475 #define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_DEBLOCKING_FILTER_DISABLED (1ULL << 7)
2476 #define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_LOOP_FILTER_ACROSS_SLICES_ENABLED (1ULL << 8)
2477 #define V4L2_HEVC_SLICE_PARAMS_FLAG_DEPENDENT_SLICE_SEGMENT	(1ULL << 9)
2478 
2479 /**
2480  * struct v4l2_ctrl_hevc_slice_params - HEVC slice parameters
2481  *
2482  * This control is a dynamically sized 1-dimensional array,
2483  * V4L2_CTRL_FLAG_DYNAMIC_ARRAY flag must be set when using it.
2484  *
2485  * @bit_size: size (in bits) of the current slice data
2486  * @data_byte_offset: offset (in bytes) to the video data in the current slice data
2487  * @num_entry_point_offsets: specifies the number of entry point offset syntax
2488  *			     elements in the slice header.
2489  * @nal_unit_type: specifies the coding type of the slice (B, P or I)
2490  * @nuh_temporal_id_plus1: minus 1 specifies a temporal identifier for the NAL unit
2491  * @slice_type: see V4L2_HEVC_SLICE_TYPE_{}
2492  * @colour_plane_id: specifies the colour plane associated with the current slice
2493  * @slice_pic_order_cnt: specifies the picture order count
2494  * @num_ref_idx_l0_active_minus1: this value plus 1 specifies the maximum
2495  *                                reference index for reference picture list 0
2496  *                                that may be used to decode the slice
2497  * @num_ref_idx_l1_active_minus1: this value plus 1 specifies the maximum
2498  *                                reference index for reference picture list 1
2499  *                                that may be used to decode the slice
2500  * @collocated_ref_idx: specifies the reference index of the collocated picture used
2501  *			for temporal motion vector prediction
2502  * @five_minus_max_num_merge_cand: specifies the maximum number of merging
2503  *				   motion vector prediction candidates supported in
2504  *				   the slice subtracted from 5
2505  * @slice_qp_delta: specifies the initial value of QpY to be used for the coding
2506  *		    blocks in the slice
2507  * @slice_cb_qp_offset: specifies a difference to be added to the value of pps_cb_qp_offset
2508  * @slice_cr_qp_offset: specifies a difference to be added to the value of pps_cr_qp_offset
2509  * @slice_act_y_qp_offset: screen content extension parameters
2510  * @slice_act_cb_qp_offset: screen content extension parameters
2511  * @slice_act_cr_qp_offset: screen content extension parameters
2512  * @slice_beta_offset_div2: specify the deblocking parameter offsets for beta divided by 2
2513  * @slice_tc_offset_div2: specify the deblocking parameter offsets for tC divided by 2
2514  * @pic_struct: indicates whether a picture should be displayed as a frame or as one or
2515  *		more fields
2516  * @reserved0: padding field. Should be zeroed by applications.
2517  * @slice_segment_addr: specifies the address of the first coding tree block in
2518  *			the slice segment
2519  * @ref_idx_l0: the list of L0 reference elements as indices in the DPB
2520  * @ref_idx_l1: the list of L1 reference elements as indices in the DPB
2521  * @short_term_ref_pic_set_size: specifies the size of short-term reference
2522  *				 pictures set included in the SPS
2523  * @long_term_ref_pic_set_size: specifies the size of long-term reference
2524  *				pictures set include in the SPS
2525  * @pred_weight_table: the prediction weight coefficients for inter-picture
2526  *		       prediction
2527  * @reserved1: padding field. Should be zeroed by applications.
2528  * @flags: see V4L2_HEVC_SLICE_PARAMS_FLAG_{}
2529  */
2530 struct v4l2_ctrl_hevc_slice_params {
2531 	u_int32_t	bit_size;
2532 	u_int32_t	data_byte_offset;
2533 	u_int32_t	num_entry_point_offsets;
2534 
2535 	/* ISO/IEC 23008-2, ITU-T Rec. H.265: NAL unit header */
2536 	u_int8_t	nal_unit_type;
2537 	u_int8_t	nuh_temporal_id_plus1;
2538 
2539 	/* ISO/IEC 23008-2, ITU-T Rec. H.265: General slice segment header */
2540 	u_int8_t	slice_type;
2541 	u_int8_t	colour_plane_id;
2542 	int32_t	slice_pic_order_cnt;
2543 	u_int8_t	num_ref_idx_l0_active_minus1;
2544 	u_int8_t	num_ref_idx_l1_active_minus1;
2545 	u_int8_t	collocated_ref_idx;
2546 	u_int8_t	five_minus_max_num_merge_cand;
2547 	int8_t	slice_qp_delta;
2548 	int8_t	slice_cb_qp_offset;
2549 	int8_t	slice_cr_qp_offset;
2550 	int8_t	slice_act_y_qp_offset;
2551 	int8_t	slice_act_cb_qp_offset;
2552 	int8_t	slice_act_cr_qp_offset;
2553 	int8_t	slice_beta_offset_div2;
2554 	int8_t	slice_tc_offset_div2;
2555 
2556 	/* ISO/IEC 23008-2, ITU-T Rec. H.265: Picture timing SEI message */
2557 	u_int8_t	pic_struct;
2558 
2559 	u_int8_t	reserved0[3];
2560 	/* ISO/IEC 23008-2, ITU-T Rec. H.265: General slice segment header */
2561 	u_int32_t	slice_segment_addr;
2562 	u_int8_t	ref_idx_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
2563 	u_int8_t	ref_idx_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
2564 	u_int16_t	short_term_ref_pic_set_size;
2565 	u_int16_t	long_term_ref_pic_set_size;
2566 
2567 	/* ISO/IEC 23008-2, ITU-T Rec. H.265: Weighted prediction parameter */
2568 	struct v4l2_hevc_pred_weight_table pred_weight_table;
2569 
2570 	u_int8_t	reserved1[2];
2571 	u_int64_t	flags;
2572 };
2573 
2574 #define V4L2_HEVC_DECODE_PARAM_FLAG_IRAP_PIC		0x1
2575 #define V4L2_HEVC_DECODE_PARAM_FLAG_IDR_PIC		0x2
2576 #define V4L2_HEVC_DECODE_PARAM_FLAG_NO_OUTPUT_OF_PRIOR  0x4
2577 
2578 /**
2579  * struct v4l2_ctrl_hevc_decode_params - HEVC decode parameters
2580  *
2581  * @pic_order_cnt_val: picture order count
2582  * @short_term_ref_pic_set_size: specifies the size of short-term reference
2583  *				 pictures set included in the SPS of the first slice
2584  * @long_term_ref_pic_set_size: specifies the size of long-term reference
2585  *				pictures set include in the SPS of the first slice
2586  * @num_active_dpb_entries: the number of entries in dpb
2587  * @num_poc_st_curr_before: the number of reference pictures in the short-term
2588  *			    set that come before the current frame
2589  * @num_poc_st_curr_after: the number of reference pictures in the short-term
2590  *			   set that come after the current frame
2591  * @num_poc_lt_curr: the number of reference pictures in the long-term set
2592  * @poc_st_curr_before: provides the index of the short term before references
2593  *			in DPB array
2594  * @poc_st_curr_after: provides the index of the short term after references
2595  *		       in DPB array
2596  * @poc_lt_curr: provides the index of the long term references in DPB array
2597  * @num_delta_pocs_of_ref_rps_idx: same as the derived value NumDeltaPocs[RefRpsIdx],
2598  *				   can be used to parse the RPS data in slice headers
2599  *				   instead of skipping it with @short_term_ref_pic_set_size.
2600  * @reserved: padding field. Should be zeroed by applications.
2601  * @dpb: the decoded picture buffer, for meta-data about reference frames
2602  * @flags: see V4L2_HEVC_DECODE_PARAM_FLAG_{}
2603  */
2604 struct v4l2_ctrl_hevc_decode_params {
2605 	int32_t	pic_order_cnt_val;
2606 	u_int16_t	short_term_ref_pic_set_size;
2607 	u_int16_t	long_term_ref_pic_set_size;
2608 	u_int8_t	num_active_dpb_entries;
2609 	u_int8_t	num_poc_st_curr_before;
2610 	u_int8_t	num_poc_st_curr_after;
2611 	u_int8_t	num_poc_lt_curr;
2612 	u_int8_t	poc_st_curr_before[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
2613 	u_int8_t	poc_st_curr_after[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
2614 	u_int8_t	poc_lt_curr[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
2615 	u_int8_t	num_delta_pocs_of_ref_rps_idx;
2616 	u_int8_t	reserved[3];
2617 	struct	v4l2_hevc_dpb_entry dpb[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
2618 	u_int64_t	flags;
2619 };
2620 
2621 /**
2622  * struct v4l2_ctrl_hevc_scaling_matrix - HEVC scaling lists parameters
2623  *
2624  * @scaling_list_4x4: scaling list is used for the scaling process for
2625  *		      transform coefficients. The values on each scaling
2626  *		      list are expected in raster scan order
2627  * @scaling_list_8x8: scaling list is used for the scaling process for
2628  *		      transform coefficients. The values on each scaling
2629  *		      list are expected in raster scan order
2630  * @scaling_list_16x16:	scaling list is used for the scaling process for
2631  *			transform coefficients. The values on each scaling
2632  *			list are expected in raster scan order
2633  * @scaling_list_32x32:	scaling list is used for the scaling process for
2634  *			transform coefficients. The values on each scaling
2635  *			list are expected in raster scan order
2636  * @scaling_list_dc_coef_16x16:	scaling list is used for the scaling process
2637  *				for transform coefficients. The values on each
2638  *				scaling list are expected in raster scan order.
2639  * @scaling_list_dc_coef_32x32:	scaling list is used for the scaling process
2640  *				for transform coefficients. The values on each
2641  *				scaling list are expected in raster scan order.
2642  */
2643 struct v4l2_ctrl_hevc_scaling_matrix {
2644 	u_int8_t	scaling_list_4x4[6][16];
2645 	u_int8_t	scaling_list_8x8[6][64];
2646 	u_int8_t	scaling_list_16x16[6][64];
2647 	u_int8_t	scaling_list_32x32[2][64];
2648 	u_int8_t	scaling_list_dc_coef_16x16[6];
2649 	u_int8_t	scaling_list_dc_coef_32x32[2];
2650 };
2651 
2652 #define V4L2_CID_COLORIMETRY_CLASS_BASE	(V4L2_CTRL_CLASS_COLORIMETRY | 0x900)
2653 #define V4L2_CID_COLORIMETRY_CLASS	(V4L2_CTRL_CLASS_COLORIMETRY | 1)
2654 
2655 #define V4L2_CID_COLORIMETRY_HDR10_CLL_INFO	(V4L2_CID_COLORIMETRY_CLASS_BASE + 0)
2656 
2657 struct v4l2_ctrl_hdr10_cll_info {
2658 	u_int16_t max_content_light_level;
2659 	u_int16_t max_pic_average_light_level;
2660 };
2661 
2662 #define V4L2_CID_COLORIMETRY_HDR10_MASTERING_DISPLAY	(V4L2_CID_COLORIMETRY_CLASS_BASE + 1)
2663 
2664 #define V4L2_HDR10_MASTERING_PRIMARIES_X_LOW	5
2665 #define V4L2_HDR10_MASTERING_PRIMARIES_X_HIGH	37000
2666 #define V4L2_HDR10_MASTERING_PRIMARIES_Y_LOW	5
2667 #define V4L2_HDR10_MASTERING_PRIMARIES_Y_HIGH	42000
2668 #define V4L2_HDR10_MASTERING_WHITE_POINT_X_LOW	5
2669 #define V4L2_HDR10_MASTERING_WHITE_POINT_X_HIGH	37000
2670 #define V4L2_HDR10_MASTERING_WHITE_POINT_Y_LOW	5
2671 #define V4L2_HDR10_MASTERING_WHITE_POINT_Y_HIGH	42000
2672 #define V4L2_HDR10_MASTERING_MAX_LUMA_LOW	50000
2673 #define V4L2_HDR10_MASTERING_MAX_LUMA_HIGH	100000000
2674 #define V4L2_HDR10_MASTERING_MIN_LUMA_LOW	1
2675 #define V4L2_HDR10_MASTERING_MIN_LUMA_HIGH	50000
2676 
2677 struct v4l2_ctrl_hdr10_mastering_display {
2678 	u_int16_t display_primaries_x[3];
2679 	u_int16_t display_primaries_y[3];
2680 	u_int16_t white_point_x;
2681 	u_int16_t white_point_y;
2682 	u_int32_t max_display_mastering_luminance;
2683 	u_int32_t min_display_mastering_luminance;
2684 };
2685 
2686 /* Stateless VP9 controls */
2687 
2688 #define V4L2_VP9_LOOP_FILTER_FLAG_DELTA_ENABLED	0x1
2689 #define	V4L2_VP9_LOOP_FILTER_FLAG_DELTA_UPDATE	0x2
2690 
2691 /**
2692  * struct v4l2_vp9_loop_filter - VP9 loop filter parameters
2693  *
2694  * @ref_deltas: contains the adjustment needed for the filter level based on the
2695  * chosen reference frame. If this syntax element is not present in the bitstream,
2696  * users should pass its last value.
2697  * @mode_deltas: contains the adjustment needed for the filter level based on the
2698  * chosen mode.	If this syntax element is not present in the bitstream, users should
2699  * pass its last value.
2700  * @level: indicates the loop filter strength.
2701  * @sharpness: indicates the sharpness level.
2702  * @flags: combination of V4L2_VP9_LOOP_FILTER_FLAG_{} flags.
2703  * @reserved: padding field. Should be zeroed by applications.
2704  *
2705  * This structure contains all loop filter related parameters. See sections
2706  * '7.2.8 Loop filter semantics' of the VP9 specification for more details.
2707  */
2708 struct v4l2_vp9_loop_filter {
2709 	int8_t ref_deltas[4];
2710 	int8_t mode_deltas[2];
2711 	u_int8_t level;
2712 	u_int8_t sharpness;
2713 	u_int8_t flags;
2714 	u_int8_t reserved[7];
2715 };
2716 
2717 /**
2718  * struct v4l2_vp9_quantization - VP9 quantization parameters
2719  *
2720  * @base_q_idx: indicates the base frame qindex.
2721  * @delta_q_y_dc: indicates the Y DC quantizer relative to base_q_idx.
2722  * @delta_q_uv_dc: indicates the UV DC quantizer relative to base_q_idx.
2723  * @delta_q_uv_ac: indicates the UV AC quantizer relative to base_q_idx.
2724  * @reserved: padding field. Should be zeroed by applications.
2725  *
2726  * Encodes the quantization parameters. See section '7.2.9 Quantization params
2727  * syntax' of the VP9 specification for more details.
2728  */
2729 struct v4l2_vp9_quantization {
2730 	u_int8_t base_q_idx;
2731 	int8_t delta_q_y_dc;
2732 	int8_t delta_q_uv_dc;
2733 	int8_t delta_q_uv_ac;
2734 	u_int8_t reserved[4];
2735 };
2736 
2737 #define V4L2_VP9_SEGMENTATION_FLAG_ENABLED		0x01
2738 #define V4L2_VP9_SEGMENTATION_FLAG_UPDATE_MAP		0x02
2739 #define V4L2_VP9_SEGMENTATION_FLAG_TEMPORAL_UPDATE	0x04
2740 #define V4L2_VP9_SEGMENTATION_FLAG_UPDATE_DATA		0x08
2741 #define V4L2_VP9_SEGMENTATION_FLAG_ABS_OR_DELTA_UPDATE	0x10
2742 
2743 #define V4L2_VP9_SEG_LVL_ALT_Q				0
2744 #define V4L2_VP9_SEG_LVL_ALT_L				1
2745 #define V4L2_VP9_SEG_LVL_REF_FRAME			2
2746 #define V4L2_VP9_SEG_LVL_SKIP				3
2747 #define V4L2_VP9_SEG_LVL_MAX				4
2748 
2749 #define V4L2_VP9_SEGMENT_FEATURE_ENABLED(id)	(1 << (id))
2750 #define V4L2_VP9_SEGMENT_FEATURE_ENABLED_MASK	0xf
2751 
2752 /**
2753  * struct v4l2_vp9_segmentation - VP9 segmentation parameters
2754  *
2755  * @feature_data: data attached to each feature. Data entry is only valid if
2756  * the feature is enabled. The array shall be indexed with segment number as
2757  * the first dimension (0..7) and one of V4L2_VP9_SEG_{} as the second dimension.
2758  * @feature_enabled: bitmask defining which features are enabled in each segment.
2759  * The value for each segment is a combination of V4L2_VP9_SEGMENT_FEATURE_ENABLED(id)
2760  * values where id is one of V4L2_VP9_SEG_LVL_{}.
2761  * @tree_probs: specifies the probability values to be used when decoding a
2762  * Segment-ID. See '5.15. Segmentation map' section of the VP9 specification
2763  * for more details.
2764  * @pred_probs: specifies the probability values to be used when decoding a
2765  * Predicted-Segment-ID. See '6.4.14. Get segment id syntax' section of :ref:`vp9`
2766  * for more details.
2767  * @flags: combination of V4L2_VP9_SEGMENTATION_FLAG_{} flags.
2768  * @reserved: padding field. Should be zeroed by applications.
2769  *
2770  * Encodes the quantization parameters. See section '7.2.10 Segmentation params syntax' of
2771  * the VP9 specification for more details.
2772  */
2773 struct v4l2_vp9_segmentation {
2774 	int16_t feature_data[8][4];
2775 	u_int8_t feature_enabled[8];
2776 	u_int8_t tree_probs[7];
2777 	u_int8_t pred_probs[3];
2778 	u_int8_t flags;
2779 	u_int8_t reserved[5];
2780 };
2781 
2782 #define V4L2_VP9_FRAME_FLAG_KEY_FRAME			0x001
2783 #define V4L2_VP9_FRAME_FLAG_SHOW_FRAME			0x002
2784 #define V4L2_VP9_FRAME_FLAG_ERROR_RESILIENT		0x004
2785 #define V4L2_VP9_FRAME_FLAG_INTRA_ONLY			0x008
2786 #define V4L2_VP9_FRAME_FLAG_ALLOW_HIGH_PREC_MV		0x010
2787 #define V4L2_VP9_FRAME_FLAG_REFRESH_FRAME_CTX		0x020
2788 #define V4L2_VP9_FRAME_FLAG_PARALLEL_DEC_MODE		0x040
2789 #define V4L2_VP9_FRAME_FLAG_X_SUBSAMPLING		0x080
2790 #define V4L2_VP9_FRAME_FLAG_Y_SUBSAMPLING		0x100
2791 #define V4L2_VP9_FRAME_FLAG_COLOR_RANGE_FULL_SWING	0x200
2792 
2793 #define V4L2_VP9_SIGN_BIAS_LAST				0x1
2794 #define V4L2_VP9_SIGN_BIAS_GOLDEN			0x2
2795 #define V4L2_VP9_SIGN_BIAS_ALT				0x4
2796 
2797 #define V4L2_VP9_RESET_FRAME_CTX_NONE			0
2798 #define V4L2_VP9_RESET_FRAME_CTX_SPEC			1
2799 #define V4L2_VP9_RESET_FRAME_CTX_ALL			2
2800 
2801 #define V4L2_VP9_INTERP_FILTER_EIGHTTAP			0
2802 #define V4L2_VP9_INTERP_FILTER_EIGHTTAP_SMOOTH		1
2803 #define V4L2_VP9_INTERP_FILTER_EIGHTTAP_SHARP		2
2804 #define V4L2_VP9_INTERP_FILTER_BILINEAR			3
2805 #define V4L2_VP9_INTERP_FILTER_SWITCHABLE		4
2806 
2807 #define V4L2_VP9_REFERENCE_MODE_SINGLE_REFERENCE	0
2808 #define V4L2_VP9_REFERENCE_MODE_COMPOUND_REFERENCE	1
2809 #define V4L2_VP9_REFERENCE_MODE_SELECT			2
2810 
2811 #define V4L2_VP9_PROFILE_MAX				3
2812 
2813 #define V4L2_CID_STATELESS_VP9_FRAME	(V4L2_CID_CODEC_STATELESS_BASE + 300)
2814 /**
2815  * struct v4l2_ctrl_vp9_frame - VP9 frame decoding control
2816  *
2817  * @lf: loop filter parameters. See &v4l2_vp9_loop_filter for more details.
2818  * @quant: quantization parameters. See &v4l2_vp9_quantization for more details.
2819  * @seg: segmentation parameters. See &v4l2_vp9_segmentation for more details.
2820  * @flags: combination of V4L2_VP9_FRAME_FLAG_{} flags.
2821  * @compressed_header_size: compressed header size in bytes.
2822  * @uncompressed_header_size: uncompressed header size in bytes.
2823  * @frame_width_minus_1: add 1 to it and you'll get the frame width expressed in pixels.
2824  * @frame_height_minus_1: add 1 to it and you'll get the frame height expressed in pixels.
2825  * @render_width_minus_1: add 1 to it and you'll get the expected render width expressed in
2826  * pixels. This is not used during the decoding process but might be used by HW scalers
2827  * to prepare a frame that's ready for scanout.
2828  * @render_height_minus_1: add 1 to it and you'll get the expected render height expressed in
2829  * pixels. This is not used during the decoding process but might be used by HW scalers
2830  * to prepare a frame that's ready for scanout.
2831  * @last_frame_ts: "last" reference buffer timestamp.
2832  * The timestamp refers to the timestamp field in struct v4l2_buffer.
2833  * Use v4l2_timeval_to_ns() to convert the struct timeval to a u_int64_t.
2834  * @golden_frame_ts: "golden" reference buffer timestamp.
2835  * The timestamp refers to the timestamp field in struct v4l2_buffer.
2836  * Use v4l2_timeval_to_ns() to convert the struct timeval to a u_int64_t.
2837  * @alt_frame_ts: "alt" reference buffer timestamp.
2838  * The timestamp refers to the timestamp field in struct v4l2_buffer.
2839  * Use v4l2_timeval_to_ns() to convert the struct timeval to a u_int64_t.
2840  * @ref_frame_sign_bias: a bitfield specifying whether the sign bias is set for a given
2841  * reference frame. Either of V4L2_VP9_SIGN_BIAS_{}.
2842  * @reset_frame_context: specifies whether the frame context should be reset to default values.
2843  * Either of V4L2_VP9_RESET_FRAME_CTX_{}.
2844  * @frame_context_idx: frame context that should be used/updated.
2845  * @profile: VP9 profile. Can be 0, 1, 2 or 3.
2846  * @bit_depth: bits per components. Can be 8, 10 or 12. Note that not all profiles support
2847  * 10 and/or 12 bits depths.
2848  * @interpolation_filter: specifies the filter selection used for performing inter prediction.
2849  * Set to one of V4L2_VP9_INTERP_FILTER_{}.
2850  * @tile_cols_log2: specifies the base 2 logarithm of the width of each tile (where the width
2851  * is measured in units of 8x8 blocks). Shall be less than or equal to 6.
2852  * @tile_rows_log2: specifies the base 2 logarithm of the height of each tile (where the height
2853  * is measured in units of 8x8 blocks).
2854  * @reference_mode: specifies the type of inter prediction to be used.
2855  * Set to one of V4L2_VP9_REFERENCE_MODE_{}.
2856  * @reserved: padding field. Should be zeroed by applications.
2857  */
2858 struct v4l2_ctrl_vp9_frame {
2859 	struct v4l2_vp9_loop_filter lf;
2860 	struct v4l2_vp9_quantization quant;
2861 	struct v4l2_vp9_segmentation seg;
2862 	u_int32_t flags;
2863 	u_int16_t compressed_header_size;
2864 	u_int16_t uncompressed_header_size;
2865 	u_int16_t frame_width_minus_1;
2866 	u_int16_t frame_height_minus_1;
2867 	u_int16_t render_width_minus_1;
2868 	u_int16_t render_height_minus_1;
2869 	u_int64_t last_frame_ts;
2870 	u_int64_t golden_frame_ts;
2871 	u_int64_t alt_frame_ts;
2872 	u_int8_t ref_frame_sign_bias;
2873 	u_int8_t reset_frame_context;
2874 	u_int8_t frame_context_idx;
2875 	u_int8_t profile;
2876 	u_int8_t bit_depth;
2877 	u_int8_t interpolation_filter;
2878 	u_int8_t tile_cols_log2;
2879 	u_int8_t tile_rows_log2;
2880 	u_int8_t reference_mode;
2881 	u_int8_t reserved[7];
2882 };
2883 
2884 #define V4L2_VP9_NUM_FRAME_CTX	4
2885 
2886 /**
2887  * struct v4l2_vp9_mv_probs - VP9 Motion vector probability updates
2888  * @joint: motion vector joint probability updates.
2889  * @sign: motion vector sign probability updates.
2890  * @classes: motion vector class probability updates.
2891  * @class0_bit: motion vector class0 bit probability updates.
2892  * @bits: motion vector bits probability updates.
2893  * @class0_fr: motion vector class0 fractional bit probability updates.
2894  * @fr: motion vector fractional bit probability updates.
2895  * @class0_hp: motion vector class0 high precision fractional bit probability updates.
2896  * @hp: motion vector high precision fractional bit probability updates.
2897  *
2898  * This structure contains new values of motion vector probabilities.
2899  * A value of zero in an array element means there is no update of the relevant probability.
2900  * See `struct v4l2_vp9_prob_updates` for details.
2901  */
2902 struct v4l2_vp9_mv_probs {
2903 	u_int8_t joint[3];
2904 	u_int8_t sign[2];
2905 	u_int8_t classes[2][10];
2906 	u_int8_t class0_bit[2];
2907 	u_int8_t bits[2][10];
2908 	u_int8_t class0_fr[2][2][3];
2909 	u_int8_t fr[2][3];
2910 	u_int8_t class0_hp[2];
2911 	u_int8_t hp[2];
2912 };
2913 
2914 #define V4L2_CID_STATELESS_VP9_COMPRESSED_HDR	(V4L2_CID_CODEC_STATELESS_BASE + 301)
2915 
2916 #define V4L2_VP9_TX_MODE_ONLY_4X4			0
2917 #define V4L2_VP9_TX_MODE_ALLOW_8X8			1
2918 #define V4L2_VP9_TX_MODE_ALLOW_16X16			2
2919 #define V4L2_VP9_TX_MODE_ALLOW_32X32			3
2920 #define V4L2_VP9_TX_MODE_SELECT				4
2921 
2922 /**
2923  * struct v4l2_ctrl_vp9_compressed_hdr - VP9 probability updates control
2924  * @tx_mode: specifies the TX mode. Set to one of V4L2_VP9_TX_MODE_{}.
2925  * @tx8: TX 8x8 probability updates.
2926  * @tx16: TX 16x16 probability updates.
2927  * @tx32: TX 32x32 probability updates.
2928  * @coef: coefficient probability updates.
2929  * @skip: skip probability updates.
2930  * @inter_mode: inter mode probability updates.
2931  * @interp_filter: interpolation filter probability updates.
2932  * @is_inter: is inter-block probability updates.
2933  * @comp_mode: compound prediction mode probability updates.
2934  * @single_ref: single ref probability updates.
2935  * @comp_ref: compound ref probability updates.
2936  * @y_mode: Y prediction mode probability updates.
2937  * @uv_mode: UV prediction mode probability updates.
2938  * @partition: partition probability updates.
2939  * @mv: motion vector probability updates.
2940  *
2941  * This structure holds the probabilities update as parsed in the compressed
2942  * header (Spec 6.3). These values represent the value of probability update after
2943  * being translated with inv_map_table[] (see 6.3.5). A value of zero in an array element
2944  * means that there is no update of the relevant probability.
2945  *
2946  * This control is optional and needs to be used when dealing with the hardware which is
2947  * not capable of parsing the compressed header itself. Only drivers which need it will
2948  * implement it.
2949  */
2950 struct v4l2_ctrl_vp9_compressed_hdr {
2951 	u_int8_t tx_mode;
2952 	u_int8_t tx8[2][1];
2953 	u_int8_t tx16[2][2];
2954 	u_int8_t tx32[2][3];
2955 	u_int8_t coef[4][2][2][6][6][3];
2956 	u_int8_t skip[3];
2957 	u_int8_t inter_mode[7][3];
2958 	u_int8_t interp_filter[4][2];
2959 	u_int8_t is_inter[4];
2960 	u_int8_t comp_mode[5];
2961 	u_int8_t single_ref[5][2];
2962 	u_int8_t comp_ref[5];
2963 	u_int8_t y_mode[4][9];
2964 	u_int8_t uv_mode[10][9];
2965 	u_int8_t partition[16][3];
2966 
2967 	struct v4l2_vp9_mv_probs mv;
2968 };
2969 
2970 /* Stateless AV1 controls */
2971 
2972 #define V4L2_AV1_TOTAL_REFS_PER_FRAME	8
2973 #define V4L2_AV1_CDEF_MAX		8
2974 #define V4L2_AV1_NUM_PLANES_MAX		3 /* 1 if monochrome, 3 otherwise */
2975 #define V4L2_AV1_MAX_SEGMENTS		8
2976 #define V4L2_AV1_MAX_OPERATING_POINTS	(1 << 5) /* 5 bits to encode */
2977 #define V4L2_AV1_REFS_PER_FRAME		7
2978 #define V4L2_AV1_MAX_NUM_Y_POINTS	(1 << 4) /* 4 bits to encode */
2979 #define V4L2_AV1_MAX_NUM_CB_POINTS	(1 << 4) /* 4 bits to encode */
2980 #define V4L2_AV1_MAX_NUM_CR_POINTS	(1 << 4) /* 4 bits to encode */
2981 #define V4L2_AV1_AR_COEFFS_SIZE		25 /* (2 * 3 * (3 + 1)) + 1 */
2982 #define V4L2_AV1_MAX_NUM_PLANES		3
2983 #define V4L2_AV1_MAX_TILE_COLS		64
2984 #define V4L2_AV1_MAX_TILE_ROWS		64
2985 #define V4L2_AV1_MAX_TILE_COUNT		512
2986 
2987 #define V4L2_AV1_SEQUENCE_FLAG_STILL_PICTURE		  0x00000001
2988 #define V4L2_AV1_SEQUENCE_FLAG_USE_128X128_SUPERBLOCK	  0x00000002
2989 #define V4L2_AV1_SEQUENCE_FLAG_ENABLE_FILTER_INTRA	  0x00000004
2990 #define V4L2_AV1_SEQUENCE_FLAG_ENABLE_INTRA_EDGE_FILTER   0x00000008
2991 #define V4L2_AV1_SEQUENCE_FLAG_ENABLE_INTERINTRA_COMPOUND 0x00000010
2992 #define V4L2_AV1_SEQUENCE_FLAG_ENABLE_MASKED_COMPOUND	  0x00000020
2993 #define V4L2_AV1_SEQUENCE_FLAG_ENABLE_WARPED_MOTION	  0x00000040
2994 #define V4L2_AV1_SEQUENCE_FLAG_ENABLE_DUAL_FILTER	  0x00000080
2995 #define V4L2_AV1_SEQUENCE_FLAG_ENABLE_ORDER_HINT	  0x00000100
2996 #define V4L2_AV1_SEQUENCE_FLAG_ENABLE_JNT_COMP		  0x00000200
2997 #define V4L2_AV1_SEQUENCE_FLAG_ENABLE_REF_FRAME_MVS	  0x00000400
2998 #define V4L2_AV1_SEQUENCE_FLAG_ENABLE_SUPERRES		  0x00000800
2999 #define V4L2_AV1_SEQUENCE_FLAG_ENABLE_CDEF		  0x00001000
3000 #define V4L2_AV1_SEQUENCE_FLAG_ENABLE_RESTORATION	  0x00002000
3001 #define V4L2_AV1_SEQUENCE_FLAG_MONO_CHROME		  0x00004000
3002 #define V4L2_AV1_SEQUENCE_FLAG_COLOR_RANGE		  0x00008000
3003 #define V4L2_AV1_SEQUENCE_FLAG_SUBSAMPLING_X		  0x00010000
3004 #define V4L2_AV1_SEQUENCE_FLAG_SUBSAMPLING_Y		  0x00020000
3005 #define V4L2_AV1_SEQUENCE_FLAG_FILM_GRAIN_PARAMS_PRESENT  0x00040000
3006 #define V4L2_AV1_SEQUENCE_FLAG_SEPARATE_UV_DELTA_Q	  0x00080000
3007 
3008 #define V4L2_CID_STATELESS_AV1_SEQUENCE (V4L2_CID_CODEC_STATELESS_BASE + 500)
3009 /**
3010  * struct v4l2_ctrl_av1_sequence - AV1 Sequence
3011  *
3012  * Represents an AV1 Sequence OBU. See section 5.5 "Sequence header OBU syntax"
3013  * for more details.
3014  *
3015  * @flags: See V4L2_AV1_SEQUENCE_FLAG_{}.
3016  * @seq_profile: specifies the features that can be used in the coded video
3017  * sequence.
3018  * @order_hint_bits: specifies the number of bits used for the order_hint field
3019  * at each frame.
3020  * @bit_depth: the bitdepth to use for the sequence as described in section
3021  * 5.5.2 "Color config syntax".
3022  * @reserved: padding field. Should be zeroed by applications.
3023  * @max_frame_width_minus_1: specifies the maximum frame width minus 1 for the
3024  * frames represented by this sequence header.
3025  * @max_frame_height_minus_1: specifies the maximum frame height minus 1 for the
3026  * frames represented by this sequence header.
3027  */
3028 struct v4l2_ctrl_av1_sequence {
3029 	u_int32_t flags;
3030 	u_int8_t seq_profile;
3031 	u_int8_t order_hint_bits;
3032 	u_int8_t bit_depth;
3033 	u_int8_t reserved;
3034 	u_int16_t max_frame_width_minus_1;
3035 	u_int16_t max_frame_height_minus_1;
3036 };
3037 
3038 #define V4L2_CID_STATELESS_AV1_TILE_GROUP_ENTRY (V4L2_CID_CODEC_STATELESS_BASE + 501)
3039 /**
3040  * struct v4l2_ctrl_av1_tile_group_entry - AV1 Tile Group entry
3041  *
3042  * Represents a single AV1 tile inside an AV1 Tile Group. Note that MiRowStart,
3043  * MiRowEnd, MiColStart and MiColEnd can be retrieved from struct
3044  * v4l2_av1_tile_info in struct v4l2_ctrl_av1_frame using tile_row and
3045  * tile_col. See section 6.10.1 "General tile group OBU semantics" for more
3046  * details.
3047  *
3048  * @tile_offset: offset from the OBU data, i.e. where the coded tile data
3049  * actually starts.
3050  * @tile_size: specifies the size in bytes of the coded tile. Equivalent to
3051  * "TileSize" in the AV1 Specification.
3052  * @tile_row: specifies the row of the current tile. Equivalent to "TileRow" in
3053  * the AV1 Specification.
3054  * @tile_col: specifies the col of the current tile. Equivalent to "TileCol" in
3055  * the AV1 Specification.
3056  */
3057 struct v4l2_ctrl_av1_tile_group_entry {
3058 	u_int32_t tile_offset;
3059 	u_int32_t tile_size;
3060 	u_int32_t tile_row;
3061 	u_int32_t tile_col;
3062 };
3063 
3064 /**
3065  * enum v4l2_av1_warp_model - AV1 Warp Model as described in section 3
3066  * "Symbols and abbreviated terms" of the AV1 Specification.
3067  *
3068  * @V4L2_AV1_WARP_MODEL_IDENTITY: Warp model is just an identity transform.
3069  * @V4L2_AV1_WARP_MODEL_TRANSLATION: Warp model is a pure translation.
3070  * @V4L2_AV1_WARP_MODEL_ROTZOOM: Warp model is a rotation + symmetric zoom +
3071  * translation.
3072  * @V4L2_AV1_WARP_MODEL_AFFINE: Warp model is a general affine transform.
3073  */
3074 enum v4l2_av1_warp_model {
3075 	V4L2_AV1_WARP_MODEL_IDENTITY = 0,
3076 	V4L2_AV1_WARP_MODEL_TRANSLATION = 1,
3077 	V4L2_AV1_WARP_MODEL_ROTZOOM = 2,
3078 	V4L2_AV1_WARP_MODEL_AFFINE = 3,
3079 };
3080 
3081 /**
3082  * enum v4l2_av1_reference_frame - AV1 reference frames
3083  *
3084  * @V4L2_AV1_REF_INTRA_FRAME: Intra Frame Reference
3085  * @V4L2_AV1_REF_LAST_FRAME: Last Reference Frame
3086  * @V4L2_AV1_REF_LAST2_FRAME: Last2 Reference Frame
3087  * @V4L2_AV1_REF_LAST3_FRAME: Last3 Reference Frame
3088  * @V4L2_AV1_REF_GOLDEN_FRAME: Golden Reference Frame
3089  * @V4L2_AV1_REF_BWDREF_FRAME: BWD Reference Frame
3090  * @V4L2_AV1_REF_ALTREF2_FRAME: Alternative2 Reference Frame
3091  * @V4L2_AV1_REF_ALTREF_FRAME: Alternative Reference Frame
3092  */
3093 enum v4l2_av1_reference_frame {
3094 	V4L2_AV1_REF_INTRA_FRAME = 0,
3095 	V4L2_AV1_REF_LAST_FRAME = 1,
3096 	V4L2_AV1_REF_LAST2_FRAME = 2,
3097 	V4L2_AV1_REF_LAST3_FRAME = 3,
3098 	V4L2_AV1_REF_GOLDEN_FRAME = 4,
3099 	V4L2_AV1_REF_BWDREF_FRAME = 5,
3100 	V4L2_AV1_REF_ALTREF2_FRAME = 6,
3101 	V4L2_AV1_REF_ALTREF_FRAME = 7,
3102 };
3103 
3104 #define V4L2_AV1_GLOBAL_MOTION_IS_INVALID(ref) (1 << (ref))
3105 
3106 #define V4L2_AV1_GLOBAL_MOTION_FLAG_IS_GLOBAL	   0x1
3107 #define V4L2_AV1_GLOBAL_MOTION_FLAG_IS_ROT_ZOOM	   0x2
3108 #define V4L2_AV1_GLOBAL_MOTION_FLAG_IS_TRANSLATION 0x4
3109 /**
3110  * struct v4l2_av1_global_motion - AV1 Global Motion parameters as described in
3111  * section 6.8.17 "Global motion params semantics" of the AV1 specification.
3112  *
3113  * @flags: A bitfield containing the flags per reference frame. See
3114  * V4L2_AV1_GLOBAL_MOTION_FLAG_{}
3115  * @type: The type of global motion transform used.
3116  * @params: this field has the same meaning as "gm_params" in the AV1
3117  * specification.
3118  * @invalid: bitfield indicating whether the global motion params are invalid
3119  * for a given reference frame. See section 7.11.3.6 Setup shear process and
3120  * the variable "warpValid". Use V4L2_AV1_GLOBAL_MOTION_IS_INVALID(ref) to
3121  * create a suitable mask.
3122  * @reserved: padding field. Should be zeroed by applications.
3123  */
3124 
3125 struct v4l2_av1_global_motion {
3126 	u_int8_t flags[V4L2_AV1_TOTAL_REFS_PER_FRAME];
3127 	enum v4l2_av1_warp_model type[V4L2_AV1_TOTAL_REFS_PER_FRAME];
3128 	int32_t params[V4L2_AV1_TOTAL_REFS_PER_FRAME][6];
3129 	u_int8_t invalid;
3130 	u_int8_t reserved[3];
3131 };
3132 
3133 /**
3134  * enum v4l2_av1_frame_restoration_type - AV1 Frame Restoration Type
3135  * @V4L2_AV1_FRAME_RESTORE_NONE: no filtering is applied.
3136  * @V4L2_AV1_FRAME_RESTORE_WIENER: Wiener filter process is invoked.
3137  * @V4L2_AV1_FRAME_RESTORE_SGRPROJ: self guided filter process is invoked.
3138  * @V4L2_AV1_FRAME_RESTORE_SWITCHABLE: restoration filter is swichtable.
3139  */
3140 enum v4l2_av1_frame_restoration_type {
3141 	V4L2_AV1_FRAME_RESTORE_NONE = 0,
3142 	V4L2_AV1_FRAME_RESTORE_WIENER = 1,
3143 	V4L2_AV1_FRAME_RESTORE_SGRPROJ = 2,
3144 	V4L2_AV1_FRAME_RESTORE_SWITCHABLE = 3,
3145 };
3146 
3147 #define V4L2_AV1_LOOP_RESTORATION_FLAG_USES_LR		0x1
3148 #define V4L2_AV1_LOOP_RESTORATION_FLAG_USES_CHROMA_LR	0x2
3149 
3150 /**
3151  * struct v4l2_av1_loop_restoration - AV1 Loop Restauration as described in
3152  * section 6.10.15 "Loop restoration params semantics" of the AV1 specification.
3153  *
3154  * @flags: See V4L2_AV1_LOOP_RESTORATION_FLAG_{}.
3155  * @lr_unit_shift: specifies if the luma restoration size should be halved.
3156  * @lr_uv_shift: specifies if the chroma size should be half the luma size.
3157  * @reserved: padding field. Should be zeroed by applications.
3158  * @frame_restoration_type: specifies the type of restoration used for each
3159  * plane. See enum v4l2_av1_frame_restoration_type.
3160  * @loop_restoration_size: specifies the size of loop restoration units in units
3161  * of samples in the current plane.
3162  */
3163 struct v4l2_av1_loop_restoration {
3164 	u_int8_t flags;
3165 	u_int8_t lr_unit_shift;
3166 	u_int8_t lr_uv_shift;
3167 	u_int8_t reserved;
3168 	enum v4l2_av1_frame_restoration_type frame_restoration_type[V4L2_AV1_NUM_PLANES_MAX];
3169 	u_int32_t loop_restoration_size[V4L2_AV1_MAX_NUM_PLANES];
3170 };
3171 
3172 /**
3173  * struct v4l2_av1_cdef - AV1 CDEF params semantics as described in section
3174  * 6.10.14 "CDEF params semantics" of the AV1 specification
3175  *
3176  * @damping_minus_3: controls the amount of damping in the deringing filter.
3177  * @bits: specifies the number of bits needed to specify which CDEF filter to
3178  * apply.
3179  * @y_pri_strength: specifies the strength of the primary filter.
3180  * @y_sec_strength: specifies the strength of the secondary filter.
3181  * @uv_pri_strength: specifies the strength of the primary filter.
3182  * @uv_sec_strength: specifies the strength of the secondary filter.
3183  */
3184 struct v4l2_av1_cdef {
3185 	u_int8_t damping_minus_3;
3186 	u_int8_t bits;
3187 	u_int8_t y_pri_strength[V4L2_AV1_CDEF_MAX];
3188 	u_int8_t y_sec_strength[V4L2_AV1_CDEF_MAX];
3189 	u_int8_t uv_pri_strength[V4L2_AV1_CDEF_MAX];
3190 	u_int8_t uv_sec_strength[V4L2_AV1_CDEF_MAX];
3191 };
3192 
3193 #define V4L2_AV1_SEGMENTATION_FLAG_ENABLED	   0x1
3194 #define V4L2_AV1_SEGMENTATION_FLAG_UPDATE_MAP	   0x2
3195 #define V4L2_AV1_SEGMENTATION_FLAG_TEMPORAL_UPDATE 0x4
3196 #define V4L2_AV1_SEGMENTATION_FLAG_UPDATE_DATA	   0x8
3197 #define V4L2_AV1_SEGMENTATION_FLAG_SEG_ID_PRE_SKIP 0x10
3198 
3199 /**
3200  * enum v4l2_av1_segment_feature - AV1 segment features as described in section
3201  * 3 "Symbols and abbreviated terms" of the AV1 specification.
3202  *
3203  * @V4L2_AV1_SEG_LVL_ALT_Q: Index for quantizer segment feature.
3204  * @V4L2_AV1_SEG_LVL_ALT_LF_Y_V: Index for vertical luma loop filter segment
3205  * feature.
3206  * @V4L2_AV1_SEG_LVL_REF_FRAME: Index for reference frame segment feature.
3207  * @V4L2_AV1_SEG_LVL_REF_SKIP: Index for skip segment feature.
3208  * @V4L2_AV1_SEG_LVL_REF_GLOBALMV: Index for global mv feature.
3209  * @V4L2_AV1_SEG_LVL_MAX: Number of segment features.
3210  */
3211 enum v4l2_av1_segment_feature {
3212 	V4L2_AV1_SEG_LVL_ALT_Q = 0,
3213 	V4L2_AV1_SEG_LVL_ALT_LF_Y_V = 1,
3214 	V4L2_AV1_SEG_LVL_REF_FRAME = 5,
3215 	V4L2_AV1_SEG_LVL_REF_SKIP = 6,
3216 	V4L2_AV1_SEG_LVL_REF_GLOBALMV = 7,
3217 	V4L2_AV1_SEG_LVL_MAX = 8
3218 };
3219 
3220 #define V4L2_AV1_SEGMENT_FEATURE_ENABLED(id)	(1 << (id))
3221 
3222 /**
3223  * struct v4l2_av1_segmentation - AV1 Segmentation params as defined in section
3224  * 6.8.13 "Segmentation params semantics" of the AV1 specification.
3225  *
3226  * @flags: see V4L2_AV1_SEGMENTATION_FLAG_{}.
3227  * @last_active_seg_id: indicates the highest numbered segment id that has some
3228  * enabled feature. This is used when decoding the segment id to only decode
3229  * choices corresponding to used segments.
3230  * @feature_enabled: bitmask defining which features are enabled in each
3231  * segment. Use V4L2_AV1_SEGMENT_FEATURE_ENABLED to build a suitable mask.
3232  * @feature_data: data attached to each feature. Data entry is only valid if the
3233  * feature is enabled
3234  */
3235 struct v4l2_av1_segmentation {
3236 	u_int8_t flags;
3237 	u_int8_t last_active_seg_id;
3238 	u_int8_t feature_enabled[V4L2_AV1_MAX_SEGMENTS];
3239 	int16_t feature_data[V4L2_AV1_MAX_SEGMENTS][V4L2_AV1_SEG_LVL_MAX];
3240 };
3241 
3242 #define V4L2_AV1_LOOP_FILTER_FLAG_DELTA_ENABLED    0x1
3243 #define V4L2_AV1_LOOP_FILTER_FLAG_DELTA_UPDATE     0x2
3244 #define V4L2_AV1_LOOP_FILTER_FLAG_DELTA_LF_PRESENT 0x4
3245 #define V4L2_AV1_LOOP_FILTER_FLAG_DELTA_LF_MULTI   0x8
3246 
3247 /**
3248  * struct v4l2_av1_loop_filter - AV1 Loop filter params as defined in section
3249  * 6.8.10 "Loop filter semantics" and 6.8.16 "Loop filter delta parameters
3250  * semantics" of the AV1 specification.
3251  *
3252  * @flags: see V4L2_AV1_LOOP_FILTER_FLAG_{}
3253  * @level: an array containing loop filter strength values. Different loop
3254  * filter strength values from the array are used depending on the image plane
3255  * being filtered, and the edge direction (vertical or horizontal) being
3256  * filtered.
3257  * @sharpness: indicates the sharpness level. The loop_filter_level and
3258  * loop_filter_sharpness together determine when a block edge is filtered, and
3259  * by how much the filtering can change the sample values. The loop filter
3260  * process is described in section 7.14 of the AV1 specification.
3261  * @ref_deltas: contains the adjustment needed for the filter level based on the
3262  * chosen reference frame. If this syntax element is not present, it maintains
3263  * its previous value.
3264  * @mode_deltas: contains the adjustment needed for the filter level based on
3265  * the chosen mode. If this syntax element is not present, it maintains its
3266  * previous value.
3267  * @delta_lf_res: specifies the left shift which should be applied to decoded
3268  * loop filter delta values.
3269  */
3270 struct v4l2_av1_loop_filter {
3271 	u_int8_t flags;
3272 	u_int8_t level[4];
3273 	u_int8_t sharpness;
3274 	int8_t ref_deltas[V4L2_AV1_TOTAL_REFS_PER_FRAME];
3275 	int8_t mode_deltas[2];
3276 	u_int8_t delta_lf_res;
3277 };
3278 
3279 #define V4L2_AV1_QUANTIZATION_FLAG_DIFF_UV_DELTA   0x1
3280 #define V4L2_AV1_QUANTIZATION_FLAG_USING_QMATRIX   0x2
3281 #define V4L2_AV1_QUANTIZATION_FLAG_DELTA_Q_PRESENT 0x4
3282 
3283 /**
3284  * struct v4l2_av1_quantization - AV1 Quantization params as defined in section
3285  * 6.8.11 "Quantization params semantics" of the AV1 specification.
3286  *
3287  * @flags: see V4L2_AV1_QUANTIZATION_FLAG_{}
3288  * @base_q_idx: indicates the base frame qindex. This is used for Y AC
3289  * coefficients and as the base value for the other quantizers.
3290  * @delta_q_y_dc: indicates the Y DC quantizer relative to base_q_idx.
3291  * @delta_q_u_dc: indicates the U DC quantizer relative to base_q_idx.
3292  * @delta_q_u_ac: indicates the U AC quantizer relative to base_q_idx.
3293  * @delta_q_v_dc: indicates the V DC quantizer relative to base_q_idx.
3294  * @delta_q_v_ac: indicates the V AC quantizer relative to base_q_idx.
3295  * @qm_y: specifies the level in the quantizer matrix that should be used for
3296  * luma plane decoding.
3297  * @qm_u: specifies the level in the quantizer matrix that should be used for
3298  * chroma U plane decoding.
3299  * @qm_v: specifies the level in the quantizer matrix that should be used for
3300  * chroma V plane decoding.
3301  * @delta_q_res: specifies the left shift which should be applied to decoded
3302  * quantizer index delta values.
3303  */
3304 struct v4l2_av1_quantization {
3305 	u_int8_t flags;
3306 	u_int8_t base_q_idx;
3307 	int8_t delta_q_y_dc;
3308 	int8_t delta_q_u_dc;
3309 	int8_t delta_q_u_ac;
3310 	int8_t delta_q_v_dc;
3311 	int8_t delta_q_v_ac;
3312 	u_int8_t qm_y;
3313 	u_int8_t qm_u;
3314 	u_int8_t qm_v;
3315 	u_int8_t delta_q_res;
3316 };
3317 
3318 #define V4L2_AV1_TILE_INFO_FLAG_UNIFORM_TILE_SPACING	0x1
3319 
3320 /**
3321  * struct v4l2_av1_tile_info - AV1 Tile info as defined in section 6.8.14 "Tile
3322  * info semantics" of the AV1 specification.
3323  *
3324  * @flags: see V4L2_AV1_TILE_INFO_FLAG_{}
3325  * @context_update_tile_id: specifies which tile to use for the CDF update.
3326  * @tile_rows: specifies the number of tiles down the frame.
3327  * @tile_cols: specifies the number of tiles across the frame.
3328  * @mi_col_starts: an array specifying the start column (in units of 4x4 luma
3329  * samples) for each tile across the image.
3330  * @mi_row_starts: an array specifying the start row (in units of 4x4 luma
3331  * samples) for each tile down the image.
3332  * @width_in_sbs_minus_1: specifies the width of a tile minus 1 in units of
3333  * superblocks.
3334  * @height_in_sbs_minus_1:  specifies the height of a tile minus 1 in units of
3335  * superblocks.
3336  * @tile_size_bytes: specifies the number of bytes needed to code each tile
3337  * size.
3338  * @reserved: padding field. Should be zeroed by applications.
3339  */
3340 struct v4l2_av1_tile_info {
3341 	u_int8_t flags;
3342 	u_int8_t context_update_tile_id;
3343 	u_int8_t tile_cols;
3344 	u_int8_t tile_rows;
3345 	u_int32_t mi_col_starts[V4L2_AV1_MAX_TILE_COLS + 1];
3346 	u_int32_t mi_row_starts[V4L2_AV1_MAX_TILE_ROWS + 1];
3347 	u_int32_t width_in_sbs_minus_1[V4L2_AV1_MAX_TILE_COLS];
3348 	u_int32_t height_in_sbs_minus_1[V4L2_AV1_MAX_TILE_ROWS];
3349 	u_int8_t tile_size_bytes;
3350 	u_int8_t reserved[3];
3351 };
3352 
3353 /**
3354  * enum v4l2_av1_frame_type - AV1 Frame Type
3355  *
3356  * @V4L2_AV1_KEY_FRAME: Key frame
3357  * @V4L2_AV1_INTER_FRAME: Inter frame
3358  * @V4L2_AV1_INTRA_ONLY_FRAME: Intra-only frame
3359  * @V4L2_AV1_SWITCH_FRAME: Switch frame
3360  */
3361 enum v4l2_av1_frame_type {
3362 	V4L2_AV1_KEY_FRAME = 0,
3363 	V4L2_AV1_INTER_FRAME = 1,
3364 	V4L2_AV1_INTRA_ONLY_FRAME = 2,
3365 	V4L2_AV1_SWITCH_FRAME = 3
3366 };
3367 
3368 /**
3369  * enum v4l2_av1_interpolation_filter - AV1 interpolation filter types
3370  *
3371  * @V4L2_AV1_INTERPOLATION_FILTER_EIGHTTAP: eight tap filter
3372  * @V4L2_AV1_INTERPOLATION_FILTER_EIGHTTAP_SMOOTH: eight tap smooth filter
3373  * @V4L2_AV1_INTERPOLATION_FILTER_EIGHTTAP_SHARP: eight tap sharp filter
3374  * @V4L2_AV1_INTERPOLATION_FILTER_BILINEAR: bilinear filter
3375  * @V4L2_AV1_INTERPOLATION_FILTER_SWITCHABLE: filter selection is signaled at
3376  * the block level
3377  *
3378  * See section 6.8.9 "Interpolation filter semantics" of the AV1 specification
3379  * for more details.
3380  */
3381 enum v4l2_av1_interpolation_filter {
3382 	V4L2_AV1_INTERPOLATION_FILTER_EIGHTTAP = 0,
3383 	V4L2_AV1_INTERPOLATION_FILTER_EIGHTTAP_SMOOTH = 1,
3384 	V4L2_AV1_INTERPOLATION_FILTER_EIGHTTAP_SHARP = 2,
3385 	V4L2_AV1_INTERPOLATION_FILTER_BILINEAR = 3,
3386 	V4L2_AV1_INTERPOLATION_FILTER_SWITCHABLE = 4,
3387 };
3388 
3389 /**
3390  * enum v4l2_av1_tx_mode - AV1 Tx mode as described in section 6.8.21 "TX mode
3391  * semantics" of the AV1 specification.
3392  * @V4L2_AV1_TX_MODE_ONLY_4X4: the inverse transform will use only 4x4
3393  * transforms
3394  * @V4L2_AV1_TX_MODE_LARGEST: the inverse transform will use the largest
3395  * transform size that fits inside the block
3396  * @V4L2_AV1_TX_MODE_SELECT: the choice of transform size is specified
3397  * explicitly for each block.
3398  */
3399 enum v4l2_av1_tx_mode {
3400 	V4L2_AV1_TX_MODE_ONLY_4X4 = 0,
3401 	V4L2_AV1_TX_MODE_LARGEST = 1,
3402 	V4L2_AV1_TX_MODE_SELECT = 2
3403 };
3404 
3405 #define V4L2_AV1_FRAME_FLAG_SHOW_FRAME			 0x00000001
3406 #define V4L2_AV1_FRAME_FLAG_SHOWABLE_FRAME		 0x00000002
3407 #define V4L2_AV1_FRAME_FLAG_ERROR_RESILIENT_MODE	 0x00000004
3408 #define V4L2_AV1_FRAME_FLAG_DISABLE_CDF_UPDATE		 0x00000008
3409 #define V4L2_AV1_FRAME_FLAG_ALLOW_SCREEN_CONTENT_TOOLS	 0x00000010
3410 #define V4L2_AV1_FRAME_FLAG_FORCE_INTEGER_MV		 0x00000020
3411 #define V4L2_AV1_FRAME_FLAG_ALLOW_INTRABC		 0x00000040
3412 #define V4L2_AV1_FRAME_FLAG_USE_SUPERRES		 0x00000080
3413 #define V4L2_AV1_FRAME_FLAG_ALLOW_HIGH_PRECISION_MV	 0x00000100
3414 #define V4L2_AV1_FRAME_FLAG_IS_MOTION_MODE_SWITCHABLE	 0x00000200
3415 #define V4L2_AV1_FRAME_FLAG_USE_REF_FRAME_MVS		 0x00000400
3416 #define V4L2_AV1_FRAME_FLAG_DISABLE_FRAME_END_UPDATE_CDF 0x00000800
3417 #define V4L2_AV1_FRAME_FLAG_ALLOW_WARPED_MOTION		 0x00001000
3418 #define V4L2_AV1_FRAME_FLAG_REFERENCE_SELECT		 0x00002000
3419 #define V4L2_AV1_FRAME_FLAG_REDUCED_TX_SET		 0x00004000
3420 #define V4L2_AV1_FRAME_FLAG_SKIP_MODE_ALLOWED		 0x00008000
3421 #define V4L2_AV1_FRAME_FLAG_SKIP_MODE_PRESENT		 0x00010000
3422 #define V4L2_AV1_FRAME_FLAG_FRAME_SIZE_OVERRIDE		 0x00020000
3423 #define V4L2_AV1_FRAME_FLAG_BUFFER_REMOVAL_TIME_PRESENT	 0x00040000
3424 #define V4L2_AV1_FRAME_FLAG_FRAME_REFS_SHORT_SIGNALING	 0x00080000
3425 
3426 #define V4L2_CID_STATELESS_AV1_FRAME (V4L2_CID_CODEC_STATELESS_BASE + 502)
3427 /**
3428  * struct v4l2_ctrl_av1_frame - Represents an AV1 Frame Header OBU.
3429  *
3430  * @tile_info: tile info
3431  * @quantization: quantization params
3432  * @segmentation: segmentation params
3433  * @superres_denom: the denominator for the upscaling ratio.
3434  * @loop_filter: loop filter params
3435  * @cdef: cdef params
3436  * @skip_mode_frame: specifies the frames to use for compound prediction when
3437  * skip_mode is equal to 1.
3438  * @primary_ref_frame: specifies which reference frame contains the CDF values
3439  * and other state that should be loaded at the start of the frame.
3440  * @loop_restoration: loop restoration params
3441  * @global_motion: global motion params
3442  * @flags: see V4L2_AV1_FRAME_FLAG_{}
3443  * @frame_type: specifies the AV1 frame type
3444  * @order_hint: specifies OrderHintBits least significant bits of the expected
3445  * output order for this frame.
3446  * @upscaled_width: the upscaled width.
3447  * @interpolation_filter: specifies the filter selection used for performing
3448  * inter prediction.
3449  * @tx_mode: specifies how the transform size is determined.
3450  * @frame_width_minus_1: add 1 to get the frame's width.
3451  * @frame_height_minus_1: add 1 to get the frame's height
3452  * @render_width_minus_1: add 1 to get the render width of the frame in luma
3453  * samples.
3454  * @render_height_minus_1: add 1 to get the render height of the frame in luma
3455  * samples.
3456  * @current_frame_id: specifies the frame id number for the current frame. Frame
3457  * id numbers are additional information that do not affect the decoding
3458  * process, but provide decoders with a way of detecting missing reference
3459  * frames so that appropriate action can be taken.
3460  * @buffer_removal_time: specifies the frame removal time in units of DecCT clock
3461  * ticks counted from the removal time of the last random access point for
3462  * operating point opNum.
3463  * @reserved: padding field. Should be zeroed by applications.
3464  * @order_hints: specifies the expected output order hint for each reference
3465  * frame. This field corresponds to the OrderHints variable from the
3466  * specification (section 5.9.2 "Uncompressed header syntax"). As such, this is
3467  * only used for non-intra frames and ignored otherwise. order_hints[0] is
3468  * always ignored.
3469  * @reference_frame_ts: the V4L2 timestamp of the reference frame slots.
3470  * @ref_frame_idx: used to index into @reference_frame_ts when decoding
3471  * inter-frames. The meaning of this array is the same as in the specification.
3472  * The timestamp refers to the timestamp field in struct v4l2_buffer. Use
3473  * v4l2_timeval_to_ns() to convert the struct timeval to a u_int64_t.
3474  * @refresh_frame_flags: contains a bitmask that specifies which reference frame
3475  * slots will be updated with the current frame after it is decoded.
3476  */
3477 struct v4l2_ctrl_av1_frame {
3478 	struct v4l2_av1_tile_info tile_info;
3479 	struct v4l2_av1_quantization quantization;
3480 	u_int8_t superres_denom;
3481 	struct v4l2_av1_segmentation segmentation;
3482 	struct v4l2_av1_loop_filter loop_filter;
3483 	struct v4l2_av1_cdef cdef;
3484 	u_int8_t skip_mode_frame[2];
3485 	u_int8_t primary_ref_frame;
3486 	struct v4l2_av1_loop_restoration loop_restoration;
3487 	struct v4l2_av1_global_motion global_motion;
3488 	u_int32_t flags;
3489 	enum v4l2_av1_frame_type frame_type;
3490 	u_int32_t order_hint;
3491 	u_int32_t upscaled_width;
3492 	enum v4l2_av1_interpolation_filter interpolation_filter;
3493 	enum v4l2_av1_tx_mode tx_mode;
3494 	u_int32_t frame_width_minus_1;
3495 	u_int32_t frame_height_minus_1;
3496 	u_int16_t render_width_minus_1;
3497 	u_int16_t render_height_minus_1;
3498 
3499 	u_int32_t current_frame_id;
3500 	u_int32_t buffer_removal_time[V4L2_AV1_MAX_OPERATING_POINTS];
3501 	u_int8_t reserved[4];
3502 	u_int32_t order_hints[V4L2_AV1_TOTAL_REFS_PER_FRAME];
3503 	u_int64_t reference_frame_ts[V4L2_AV1_TOTAL_REFS_PER_FRAME];
3504 	int8_t ref_frame_idx[V4L2_AV1_REFS_PER_FRAME];
3505 	u_int8_t refresh_frame_flags;
3506 };
3507 
3508 #define V4L2_AV1_FILM_GRAIN_FLAG_APPLY_GRAIN 0x1
3509 #define V4L2_AV1_FILM_GRAIN_FLAG_UPDATE_GRAIN 0x2
3510 #define V4L2_AV1_FILM_GRAIN_FLAG_CHROMA_SCALING_FROM_LUMA 0x4
3511 #define V4L2_AV1_FILM_GRAIN_FLAG_OVERLAP 0x8
3512 #define V4L2_AV1_FILM_GRAIN_FLAG_CLIP_TO_RESTRICTED_RANGE 0x10
3513 
3514 #define V4L2_CID_STATELESS_AV1_FILM_GRAIN (V4L2_CID_CODEC_STATELESS_BASE + 505)
3515 /**
3516  * struct v4l2_ctrl_av1_film_grain - AV1 Film Grain parameters.
3517  *
3518  * Film grain parameters as specified by section 6.8.20 of the AV1 Specification.
3519  *
3520  * @flags: see V4L2_AV1_FILM_GRAIN_{}.
3521  * @cr_mult: represents a multiplier for the cr component used in derivation of
3522  * the input index to the cr component scaling function.
3523  * @grain_seed: specifies the starting value for the pseudo-random numbers used
3524  * during film grain synthesis.
3525  * @film_grain_params_ref_idx: indicates which reference frame contains the
3526  * film grain parameters to be used for this frame.
3527  * @num_y_points: specifies the number of points for the piece-wise linear
3528  * scaling function of the luma component.
3529  * @point_y_value: represents the x (luma value) coordinate for the i-th point
3530  * of the piecewise linear scaling function for luma component. The values are
3531  * signaled on the scale of 0..255. In case of 10 bit video, these values
3532  * correspond to luma values divided by 4. In case of 12 bit video, these values
3533  * correspond to luma values divided by 16.
3534  * @point_y_scaling:  represents the scaling (output) value for the i-th point
3535  * of the piecewise linear scaling function for luma component.
3536  * @num_cb_points: specifies the number of points for the piece-wise linear
3537  * scaling function of the cb component.
3538  * @point_cb_value: represents the x coordinate for the i-th point of the
3539  * piece-wise linear scaling function for cb component. The values are signaled
3540  * on the scale of 0..255.
3541  * @point_cb_scaling: represents the scaling (output) value for the i-th point
3542  * of the piecewise linear scaling function for cb component.
3543  * @num_cr_points: specifies represents the number of points for the piece-wise
3544  * linear scaling function of the cr component.
3545  * @point_cr_value:  represents the x coordinate for the i-th point of the
3546  * piece-wise linear scaling function for cr component. The values are signaled
3547  * on the scale of 0..255.
3548  * @point_cr_scaling:  represents the scaling (output) value for the i-th point
3549  * of the piecewise linear scaling function for cr component.
3550  * @grain_scaling_minus_8: represents the shift – 8 applied to the values of the
3551  * chroma component. The grain_scaling_minus_8 can take values of 0..3 and
3552  * determines the range and quantization step of the standard deviation of film
3553  * grain.
3554  * @ar_coeff_lag: specifies the number of auto-regressive coefficients for luma
3555  * and chroma.
3556  * @ar_coeffs_y_plus_128: specifies auto-regressive coefficients used for the Y
3557  * plane.
3558  * @ar_coeffs_cb_plus_128: specifies auto-regressive coefficients used for the U
3559  * plane.
3560  * @ar_coeffs_cr_plus_128: specifies auto-regressive coefficients used for the V
3561  * plane.
3562  * @ar_coeff_shift_minus_6: specifies the range of the auto-regressive
3563  * coefficients. Values of 0, 1, 2, and 3 correspond to the ranges for
3564  * auto-regressive coefficients of [-2, 2), [-1, 1), [-0.5, 0.5) and [-0.25,
3565  * 0.25) respectively.
3566  * @grain_scale_shift: specifies how much the Gaussian random numbers should be
3567  * scaled down during the grain synthesis process.
3568  * @cb_mult: represents a multiplier for the cb component used in derivation of
3569  * the input index to the cb component scaling function.
3570  * @cb_luma_mult: represents a multiplier for the average luma component used in
3571  * derivation of the input index to the cb component scaling function.
3572  * @cr_luma_mult: represents a multiplier for the average luma component used in
3573  * derivation of the input index to the cr component scaling function.
3574  * @cb_offset: represents an offset used in derivation of the input index to the
3575  * cb component scaling function.
3576  * @cr_offset: represents an offset used in derivation of the input index to the
3577  * cr component scaling function.
3578  * @reserved: padding field. Should be zeroed by applications.
3579  */
3580 struct v4l2_ctrl_av1_film_grain {
3581 	u_int8_t flags;
3582 	u_int8_t cr_mult;
3583 	u_int16_t grain_seed;
3584 	u_int8_t film_grain_params_ref_idx;
3585 	u_int8_t num_y_points;
3586 	u_int8_t point_y_value[V4L2_AV1_MAX_NUM_Y_POINTS];
3587 	u_int8_t point_y_scaling[V4L2_AV1_MAX_NUM_Y_POINTS];
3588 	u_int8_t num_cb_points;
3589 	u_int8_t point_cb_value[V4L2_AV1_MAX_NUM_CB_POINTS];
3590 	u_int8_t point_cb_scaling[V4L2_AV1_MAX_NUM_CB_POINTS];
3591 	u_int8_t num_cr_points;
3592 	u_int8_t point_cr_value[V4L2_AV1_MAX_NUM_CR_POINTS];
3593 	u_int8_t point_cr_scaling[V4L2_AV1_MAX_NUM_CR_POINTS];
3594 	u_int8_t grain_scaling_minus_8;
3595 	u_int8_t ar_coeff_lag;
3596 	u_int8_t ar_coeffs_y_plus_128[V4L2_AV1_AR_COEFFS_SIZE];
3597 	u_int8_t ar_coeffs_cb_plus_128[V4L2_AV1_AR_COEFFS_SIZE];
3598 	u_int8_t ar_coeffs_cr_plus_128[V4L2_AV1_AR_COEFFS_SIZE];
3599 	u_int8_t ar_coeff_shift_minus_6;
3600 	u_int8_t grain_scale_shift;
3601 	u_int8_t cb_mult;
3602 	u_int8_t cb_luma_mult;
3603 	u_int8_t cr_luma_mult;
3604 	u_int16_t cb_offset;
3605 	u_int16_t cr_offset;
3606 	u_int8_t reserved[4];
3607 };
3608 
3609 /* MPEG-compression definitions kept for backwards compatibility */
3610 #define V4L2_CTRL_CLASS_MPEG            V4L2_CTRL_CLASS_CODEC
3611 #define V4L2_CID_MPEG_CLASS             V4L2_CID_CODEC_CLASS
3612 #define V4L2_CID_MPEG_BASE              V4L2_CID_CODEC_BASE
3613 #define V4L2_CID_MPEG_CX2341X_BASE      V4L2_CID_CODEC_CX2341X_BASE
3614 #define V4L2_CID_MPEG_MFC51_BASE        V4L2_CID_CODEC_MFC51_BASE
3615 /*
3616  * End of v4l2-controls.h
3617  */
3618 
3619 #ifndef __user
3620 #define __user
3621 #endif
3622 
3623 /*
3624  * Common stuff for both V4L1 and V4L2
3625  * Moved from videodev.h
3626  */
3627 #define VIDEO_MAX_FRAME               32
3628 #define VIDEO_MAX_PLANES               8
3629 
3630 /*
3631  *	M I S C E L L A N E O U S
3632  */
3633 
3634 /*  Four-character-code (FOURCC) */
3635 #define v4l2_fourcc(a, b, c, d)\
3636 	((u_int32_t)(a) | ((u_int32_t)(b) << 8) | ((u_int32_t)(c) << 16) | ((u_int32_t)(d) << 24))
3637 #define v4l2_fourcc_be(a, b, c, d)	(v4l2_fourcc(a, b, c, d) | (1U << 31))
3638 
3639 /*
3640  *	E N U M S
3641  */
3642 enum v4l2_field {
3643 	V4L2_FIELD_ANY           = 0, /* driver can choose from none,
3644 					 top, bottom, interlaced
3645 					 depending on whatever it thinks
3646 					 is approximate ... */
3647 	V4L2_FIELD_NONE          = 1, /* this device has no fields ... */
3648 	V4L2_FIELD_TOP           = 2, /* top field only */
3649 	V4L2_FIELD_BOTTOM        = 3, /* bottom field only */
3650 	V4L2_FIELD_INTERLACED    = 4, /* both fields interlaced */
3651 	V4L2_FIELD_SEQ_TB        = 5, /* both fields sequential into one
3652 					 buffer, top-bottom order */
3653 	V4L2_FIELD_SEQ_BT        = 6, /* same as above + bottom-top order */
3654 	V4L2_FIELD_ALTERNATE     = 7, /* both fields alternating into
3655 					 separate buffers */
3656 	V4L2_FIELD_INTERLACED_TB = 8, /* both fields interlaced, top field
3657 					 first and the top field is
3658 					 transmitted first */
3659 	V4L2_FIELD_INTERLACED_BT = 9, /* both fields interlaced, top field
3660 					 first and the bottom field is
3661 					 transmitted first */
3662 };
3663 #define V4L2_FIELD_HAS_TOP(field)	\
3664 	((field) == V4L2_FIELD_TOP	||\
3665 	 (field) == V4L2_FIELD_INTERLACED ||\
3666 	 (field) == V4L2_FIELD_INTERLACED_TB ||\
3667 	 (field) == V4L2_FIELD_INTERLACED_BT ||\
3668 	 (field) == V4L2_FIELD_SEQ_TB	||\
3669 	 (field) == V4L2_FIELD_SEQ_BT)
3670 #define V4L2_FIELD_HAS_BOTTOM(field)	\
3671 	((field) == V4L2_FIELD_BOTTOM	||\
3672 	 (field) == V4L2_FIELD_INTERLACED ||\
3673 	 (field) == V4L2_FIELD_INTERLACED_TB ||\
3674 	 (field) == V4L2_FIELD_INTERLACED_BT ||\
3675 	 (field) == V4L2_FIELD_SEQ_TB	||\
3676 	 (field) == V4L2_FIELD_SEQ_BT)
3677 #define V4L2_FIELD_HAS_BOTH(field)	\
3678 	((field) == V4L2_FIELD_INTERLACED ||\
3679 	 (field) == V4L2_FIELD_INTERLACED_TB ||\
3680 	 (field) == V4L2_FIELD_INTERLACED_BT ||\
3681 	 (field) == V4L2_FIELD_SEQ_TB ||\
3682 	 (field) == V4L2_FIELD_SEQ_BT)
3683 #define V4L2_FIELD_HAS_T_OR_B(field)	\
3684 	((field) == V4L2_FIELD_BOTTOM ||\
3685 	 (field) == V4L2_FIELD_TOP ||\
3686 	 (field) == V4L2_FIELD_ALTERNATE)
3687 #define V4L2_FIELD_IS_INTERLACED(field) \
3688 	((field) == V4L2_FIELD_INTERLACED ||\
3689 	 (field) == V4L2_FIELD_INTERLACED_TB ||\
3690 	 (field) == V4L2_FIELD_INTERLACED_BT)
3691 #define V4L2_FIELD_IS_SEQUENTIAL(field) \
3692 	((field) == V4L2_FIELD_SEQ_TB ||\
3693 	 (field) == V4L2_FIELD_SEQ_BT)
3694 
3695 enum v4l2_buf_type {
3696 	V4L2_BUF_TYPE_VIDEO_CAPTURE        = 1,
3697 	V4L2_BUF_TYPE_VIDEO_OUTPUT         = 2,
3698 	V4L2_BUF_TYPE_VIDEO_OVERLAY        = 3,
3699 	V4L2_BUF_TYPE_VBI_CAPTURE          = 4,
3700 	V4L2_BUF_TYPE_VBI_OUTPUT           = 5,
3701 	V4L2_BUF_TYPE_SLICED_VBI_CAPTURE   = 6,
3702 	V4L2_BUF_TYPE_SLICED_VBI_OUTPUT    = 7,
3703 	V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY = 8,
3704 	V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE = 9,
3705 	V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE  = 10,
3706 	V4L2_BUF_TYPE_SDR_CAPTURE          = 11,
3707 	V4L2_BUF_TYPE_SDR_OUTPUT           = 12,
3708 	V4L2_BUF_TYPE_META_CAPTURE         = 13,
3709 	V4L2_BUF_TYPE_META_OUTPUT	   = 14,
3710 	/* Deprecated, do not use */
3711 	V4L2_BUF_TYPE_PRIVATE              = 0x80,
3712 };
3713 
3714 #define V4L2_TYPE_IS_MULTIPLANAR(type)			\
3715 	((type) == V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE	\
3716 	 || (type) == V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE)
3717 
3718 #define V4L2_TYPE_IS_OUTPUT(type)				\
3719 	((type) == V4L2_BUF_TYPE_VIDEO_OUTPUT			\
3720 	 || (type) == V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE		\
3721 	 || (type) == V4L2_BUF_TYPE_VIDEO_OVERLAY		\
3722 	 || (type) == V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY	\
3723 	 || (type) == V4L2_BUF_TYPE_VBI_OUTPUT			\
3724 	 || (type) == V4L2_BUF_TYPE_SLICED_VBI_OUTPUT		\
3725 	 || (type) == V4L2_BUF_TYPE_SDR_OUTPUT			\
3726 	 || (type) == V4L2_BUF_TYPE_META_OUTPUT)
3727 
3728 #define V4L2_TYPE_IS_CAPTURE(type) (!V4L2_TYPE_IS_OUTPUT(type))
3729 
3730 enum v4l2_tuner_type {
3731 	V4L2_TUNER_RADIO	     = 1,
3732 	V4L2_TUNER_ANALOG_TV	     = 2,
3733 	V4L2_TUNER_DIGITAL_TV	     = 3,
3734 	V4L2_TUNER_SDR               = 4,
3735 	V4L2_TUNER_RF                = 5,
3736 };
3737 
3738 /* Deprecated, do not use */
3739 #define V4L2_TUNER_ADC  V4L2_TUNER_SDR
3740 
3741 enum v4l2_memory {
3742 	V4L2_MEMORY_MMAP             = 1,
3743 	V4L2_MEMORY_USERPTR          = 2,
3744 	V4L2_MEMORY_OVERLAY          = 3,
3745 	V4L2_MEMORY_DMABUF           = 4,
3746 };
3747 
3748 /* see also http://vektor.theorem.ca/graphics/ycbcr/ */
3749 enum v4l2_colorspace {
3750 	/*
3751 	 * Default colorspace, i.e. let the driver figure it out.
3752 	 * Can only be used with video capture.
3753 	 */
3754 	V4L2_COLORSPACE_DEFAULT       = 0,
3755 
3756 	/* SMPTE 170M: used for broadcast NTSC/PAL SDTV */
3757 	V4L2_COLORSPACE_SMPTE170M     = 1,
3758 
3759 	/* Obsolete pre-1998 SMPTE 240M HDTV standard, superseded by Rec 709 */
3760 	V4L2_COLORSPACE_SMPTE240M     = 2,
3761 
3762 	/* Rec.709: used for HDTV */
3763 	V4L2_COLORSPACE_REC709        = 3,
3764 
3765 	/*
3766 	 * Deprecated, do not use. No driver will ever return this. This was
3767 	 * based on a misunderstanding of the bt878 datasheet.
3768 	 */
3769 	V4L2_COLORSPACE_BT878         = 4,
3770 
3771 	/*
3772 	 * NTSC 1953 colorspace. This only makes sense when dealing with
3773 	 * really, really old NTSC recordings. Superseded by SMPTE 170M.
3774 	 */
3775 	V4L2_COLORSPACE_470_SYSTEM_M  = 5,
3776 
3777 	/*
3778 	 * EBU Tech 3213 PAL/SECAM colorspace.
3779 	 */
3780 	V4L2_COLORSPACE_470_SYSTEM_BG = 6,
3781 
3782 	/*
3783 	 * Effectively shorthand for V4L2_COLORSPACE_SRGB, V4L2_YCBCR_ENC_601
3784 	 * and V4L2_QUANTIZATION_FULL_RANGE. To be used for (Motion-)JPEG.
3785 	 */
3786 	V4L2_COLORSPACE_JPEG          = 7,
3787 
3788 	/* For RGB colorspaces such as produces by most webcams. */
3789 	V4L2_COLORSPACE_SRGB          = 8,
3790 
3791 	/* opRGB colorspace */
3792 	V4L2_COLORSPACE_OPRGB         = 9,
3793 
3794 	/* BT.2020 colorspace, used for UHDTV. */
3795 	V4L2_COLORSPACE_BT2020        = 10,
3796 
3797 	/* Raw colorspace: for RAW unprocessed images */
3798 	V4L2_COLORSPACE_RAW           = 11,
3799 
3800 	/* DCI-P3 colorspace, used by cinema projectors */
3801 	V4L2_COLORSPACE_DCI_P3        = 12,
3802 };
3803 
3804 /*
3805  * Determine how COLORSPACE_DEFAULT should map to a proper colorspace.
3806  * This depends on whether this is a SDTV image (use SMPTE 170M), an
3807  * HDTV image (use Rec. 709), or something else (use sRGB).
3808  */
3809 #define V4L2_MAP_COLORSPACE_DEFAULT(is_sdtv, is_hdtv) \
3810 	((is_sdtv) ? V4L2_COLORSPACE_SMPTE170M : \
3811 	 ((is_hdtv) ? V4L2_COLORSPACE_REC709 : V4L2_COLORSPACE_SRGB))
3812 
3813 enum v4l2_xfer_func {
3814 	/*
3815 	 * Mapping of V4L2_XFER_FUNC_DEFAULT to actual transfer functions
3816 	 * for the various colorspaces:
3817 	 *
3818 	 * V4L2_COLORSPACE_SMPTE170M, V4L2_COLORSPACE_470_SYSTEM_M,
3819 	 * V4L2_COLORSPACE_470_SYSTEM_BG, V4L2_COLORSPACE_REC709 and
3820 	 * V4L2_COLORSPACE_BT2020: V4L2_XFER_FUNC_709
3821 	 *
3822 	 * V4L2_COLORSPACE_SRGB, V4L2_COLORSPACE_JPEG: V4L2_XFER_FUNC_SRGB
3823 	 *
3824 	 * V4L2_COLORSPACE_OPRGB: V4L2_XFER_FUNC_OPRGB
3825 	 *
3826 	 * V4L2_COLORSPACE_SMPTE240M: V4L2_XFER_FUNC_SMPTE240M
3827 	 *
3828 	 * V4L2_COLORSPACE_RAW: V4L2_XFER_FUNC_NONE
3829 	 *
3830 	 * V4L2_COLORSPACE_DCI_P3: V4L2_XFER_FUNC_DCI_P3
3831 	 */
3832 	V4L2_XFER_FUNC_DEFAULT     = 0,
3833 	V4L2_XFER_FUNC_709         = 1,
3834 	V4L2_XFER_FUNC_SRGB        = 2,
3835 	V4L2_XFER_FUNC_OPRGB       = 3,
3836 	V4L2_XFER_FUNC_SMPTE240M   = 4,
3837 	V4L2_XFER_FUNC_NONE        = 5,
3838 	V4L2_XFER_FUNC_DCI_P3      = 6,
3839 	V4L2_XFER_FUNC_SMPTE2084   = 7,
3840 };
3841 
3842 /*
3843  * Determine how XFER_FUNC_DEFAULT should map to a proper transfer function.
3844  * This depends on the colorspace.
3845  */
3846 #define V4L2_MAP_XFER_FUNC_DEFAULT(colsp) \
3847 	((colsp) == V4L2_COLORSPACE_OPRGB ? V4L2_XFER_FUNC_OPRGB : \
3848 	 ((colsp) == V4L2_COLORSPACE_SMPTE240M ? V4L2_XFER_FUNC_SMPTE240M : \
3849 	  ((colsp) == V4L2_COLORSPACE_DCI_P3 ? V4L2_XFER_FUNC_DCI_P3 : \
3850 	   ((colsp) == V4L2_COLORSPACE_RAW ? V4L2_XFER_FUNC_NONE : \
3851 	    ((colsp) == V4L2_COLORSPACE_SRGB || (colsp) == V4L2_COLORSPACE_JPEG ? \
3852 	     V4L2_XFER_FUNC_SRGB : V4L2_XFER_FUNC_709)))))
3853 
3854 enum v4l2_ycbcr_encoding {
3855 	/*
3856 	 * Mapping of V4L2_YCBCR_ENC_DEFAULT to actual encodings for the
3857 	 * various colorspaces:
3858 	 *
3859 	 * V4L2_COLORSPACE_SMPTE170M, V4L2_COLORSPACE_470_SYSTEM_M,
3860 	 * V4L2_COLORSPACE_470_SYSTEM_BG, V4L2_COLORSPACE_SRGB,
3861 	 * V4L2_COLORSPACE_OPRGB and V4L2_COLORSPACE_JPEG: V4L2_YCBCR_ENC_601
3862 	 *
3863 	 * V4L2_COLORSPACE_REC709 and V4L2_COLORSPACE_DCI_P3: V4L2_YCBCR_ENC_709
3864 	 *
3865 	 * V4L2_COLORSPACE_BT2020: V4L2_YCBCR_ENC_BT2020
3866 	 *
3867 	 * V4L2_COLORSPACE_SMPTE240M: V4L2_YCBCR_ENC_SMPTE240M
3868 	 */
3869 	V4L2_YCBCR_ENC_DEFAULT        = 0,
3870 
3871 	/* ITU-R 601 -- SDTV */
3872 	V4L2_YCBCR_ENC_601            = 1,
3873 
3874 	/* Rec. 709 -- HDTV */
3875 	V4L2_YCBCR_ENC_709            = 2,
3876 
3877 	/* ITU-R 601/EN 61966-2-4 Extended Gamut -- SDTV */
3878 	V4L2_YCBCR_ENC_XV601          = 3,
3879 
3880 	/* Rec. 709/EN 61966-2-4 Extended Gamut -- HDTV */
3881 	V4L2_YCBCR_ENC_XV709          = 4,
3882 
3883 	/*
3884 	 * sYCC (Y'CbCr encoding of sRGB), identical to ENC_601. It was added
3885 	 * originally due to a misunderstanding of the sYCC standard. It should
3886 	 * not be used, instead use V4L2_YCBCR_ENC_601.
3887 	 */
3888 	V4L2_YCBCR_ENC_SYCC           = 5,
3889 
3890 	/* BT.2020 Non-constant Luminance Y'CbCr */
3891 	V4L2_YCBCR_ENC_BT2020         = 6,
3892 
3893 	/* BT.2020 Constant Luminance Y'CbcCrc */
3894 	V4L2_YCBCR_ENC_BT2020_CONST_LUM = 7,
3895 
3896 	/* SMPTE 240M -- Obsolete HDTV */
3897 	V4L2_YCBCR_ENC_SMPTE240M      = 8,
3898 };
3899 
3900 /*
3901  * enum v4l2_hsv_encoding values should not collide with the ones from
3902  * enum v4l2_ycbcr_encoding.
3903  */
3904 enum v4l2_hsv_encoding {
3905 
3906 	/* Hue mapped to 0 - 179 */
3907 	V4L2_HSV_ENC_180		= 128,
3908 
3909 	/* Hue mapped to 0-255 */
3910 	V4L2_HSV_ENC_256		= 129,
3911 };
3912 
3913 /*
3914  * Determine how YCBCR_ENC_DEFAULT should map to a proper Y'CbCr encoding.
3915  * This depends on the colorspace.
3916  */
3917 #define V4L2_MAP_YCBCR_ENC_DEFAULT(colsp) \
3918 	(((colsp) == V4L2_COLORSPACE_REC709 || \
3919 	  (colsp) == V4L2_COLORSPACE_DCI_P3) ? V4L2_YCBCR_ENC_709 : \
3920 	 ((colsp) == V4L2_COLORSPACE_BT2020 ? V4L2_YCBCR_ENC_BT2020 : \
3921 	  ((colsp) == V4L2_COLORSPACE_SMPTE240M ? V4L2_YCBCR_ENC_SMPTE240M : \
3922 	   V4L2_YCBCR_ENC_601)))
3923 
3924 enum v4l2_quantization {
3925 	/*
3926 	 * The default for R'G'B' quantization is always full range.
3927 	 * For Y'CbCr the quantization is always limited range, except
3928 	 * for COLORSPACE_JPEG: this is full range.
3929 	 */
3930 	V4L2_QUANTIZATION_DEFAULT     = 0,
3931 	V4L2_QUANTIZATION_FULL_RANGE  = 1,
3932 	V4L2_QUANTIZATION_LIM_RANGE   = 2,
3933 };
3934 
3935 /*
3936  * Determine how QUANTIZATION_DEFAULT should map to a proper quantization.
3937  * This depends on whether the image is RGB or not, the colorspace.
3938  * The Y'CbCr encoding is not used anymore, but is still there for backwards
3939  * compatibility.
3940  */
3941 #define V4L2_MAP_QUANTIZATION_DEFAULT(is_rgb_or_hsv, colsp, ycbcr_enc) \
3942 	(((is_rgb_or_hsv) || (colsp) == V4L2_COLORSPACE_JPEG) ? \
3943 	 V4L2_QUANTIZATION_FULL_RANGE : V4L2_QUANTIZATION_LIM_RANGE)
3944 
3945 /*
3946  * Deprecated names for opRGB colorspace (IEC 61966-2-5)
3947  *
3948  * WARNING: Please don't use these deprecated defines in your code, as
3949  * there is a chance we have to remove them in the future.
3950  */
3951 #define V4L2_COLORSPACE_ADOBERGB V4L2_COLORSPACE_OPRGB
3952 #define V4L2_XFER_FUNC_ADOBERGB  V4L2_XFER_FUNC_OPRGB
3953 
3954 enum v4l2_priority {
3955 	V4L2_PRIORITY_UNSET       = 0,  /* not initialized */
3956 	V4L2_PRIORITY_BACKGROUND  = 1,
3957 	V4L2_PRIORITY_INTERACTIVE = 2,
3958 	V4L2_PRIORITY_RECORD      = 3,
3959 	V4L2_PRIORITY_DEFAULT     = V4L2_PRIORITY_INTERACTIVE,
3960 };
3961 
3962 struct v4l2_rect {
3963 	int32_t   left;
3964 	int32_t   top;
3965 	u_int32_t   width;
3966 	u_int32_t   height;
3967 };
3968 
3969 struct v4l2_fract {
3970 	u_int32_t   numerator;
3971 	u_int32_t   denominator;
3972 };
3973 
3974 struct v4l2_area {
3975 	u_int32_t   width;
3976 	u_int32_t   height;
3977 };
3978 
3979 /**
3980   * struct v4l2_capability - Describes V4L2 device caps returned by VIDIOC_QUERYCAP
3981   *
3982   * @driver:	   name of the driver module (e.g. "bttv")
3983   * @card:	   name of the card (e.g. "Hauppauge WinTV")
3984   * @bus_info:	   name of the bus (e.g. "PCI:" + pci_name(pci_dev) )
3985   * @version:	   KERNEL_VERSION
3986   * @capabilities: capabilities of the physical device as a whole
3987   * @device_caps:  capabilities accessed via this particular device (node)
3988   * @reserved:	   reserved fields for future extensions
3989   */
3990 struct v4l2_capability {
3991 	u_int8_t	driver[16];
3992 	u_int8_t	card[32];
3993 	u_int8_t	bus_info[32];
3994 	u_int32_t   version;
3995 	u_int32_t	capabilities;
3996 	u_int32_t	device_caps;
3997 	u_int32_t	reserved[3];
3998 };
3999 
4000 /* Values for 'capabilities' field */
4001 #define V4L2_CAP_VIDEO_CAPTURE		0x00000001  /* Is a video capture device */
4002 #define V4L2_CAP_VIDEO_OUTPUT		0x00000002  /* Is a video output device */
4003 #define V4L2_CAP_VIDEO_OVERLAY		0x00000004  /* Can do video overlay */
4004 #define V4L2_CAP_VBI_CAPTURE		0x00000010  /* Is a raw VBI capture device */
4005 #define V4L2_CAP_VBI_OUTPUT		0x00000020  /* Is a raw VBI output device */
4006 #define V4L2_CAP_SLICED_VBI_CAPTURE	0x00000040  /* Is a sliced VBI capture device */
4007 #define V4L2_CAP_SLICED_VBI_OUTPUT	0x00000080  /* Is a sliced VBI output device */
4008 #define V4L2_CAP_RDS_CAPTURE		0x00000100  /* RDS data capture */
4009 #define V4L2_CAP_VIDEO_OUTPUT_OVERLAY	0x00000200  /* Can do video output overlay */
4010 #define V4L2_CAP_HW_FREQ_SEEK		0x00000400  /* Can do hardware frequency seek  */
4011 #define V4L2_CAP_RDS_OUTPUT		0x00000800  /* Is an RDS encoder */
4012 
4013 /* Is a video capture device that supports multiplanar formats */
4014 #define V4L2_CAP_VIDEO_CAPTURE_MPLANE	0x00001000
4015 /* Is a video output device that supports multiplanar formats */
4016 #define V4L2_CAP_VIDEO_OUTPUT_MPLANE	0x00002000
4017 /* Is a video mem-to-mem device that supports multiplanar formats */
4018 #define V4L2_CAP_VIDEO_M2M_MPLANE	0x00004000
4019 /* Is a video mem-to-mem device */
4020 #define V4L2_CAP_VIDEO_M2M		0x00008000
4021 
4022 #define V4L2_CAP_TUNER			0x00010000  /* has a tuner */
4023 #define V4L2_CAP_AUDIO			0x00020000  /* has audio support */
4024 #define V4L2_CAP_RADIO			0x00040000  /* is a radio device */
4025 #define V4L2_CAP_MODULATOR		0x00080000  /* has a modulator */
4026 
4027 #define V4L2_CAP_SDR_CAPTURE		0x00100000  /* Is a SDR capture device */
4028 #define V4L2_CAP_EXT_PIX_FORMAT		0x00200000  /* Supports the extended pixel format */
4029 #define V4L2_CAP_SDR_OUTPUT		0x00400000  /* Is a SDR output device */
4030 #define V4L2_CAP_META_CAPTURE		0x00800000  /* Is a metadata capture device */
4031 
4032 #define V4L2_CAP_READWRITE              0x01000000  /* read/write systemcalls */
4033 #define V4L2_CAP_EDID			0x02000000  /* Is an EDID-only device */
4034 #define V4L2_CAP_STREAMING              0x04000000  /* streaming I/O ioctls */
4035 #define V4L2_CAP_META_OUTPUT		0x08000000  /* Is a metadata output device */
4036 
4037 #define V4L2_CAP_TOUCH                  0x10000000  /* Is a touch device */
4038 
4039 #define V4L2_CAP_IO_MC			0x20000000  /* Is input/output controlled by the media controller */
4040 
4041 #define V4L2_CAP_DEVICE_CAPS            0x80000000  /* sets device capabilities field */
4042 
4043 /*
4044  *	V I D E O   I M A G E   F O R M A T
4045  */
4046 struct v4l2_pix_format {
4047 	u_int32_t			width;
4048 	u_int32_t			height;
4049 	u_int32_t			pixelformat;
4050 	u_int32_t			field;		/* enum v4l2_field */
4051 	u_int32_t			bytesperline;	/* for padding, zero if unused */
4052 	u_int32_t			sizeimage;
4053 	u_int32_t			colorspace;	/* enum v4l2_colorspace */
4054 	u_int32_t			priv;		/* private data, depends on pixelformat */
4055 	u_int32_t			flags;		/* format flags (V4L2_PIX_FMT_FLAG_*) */
4056 	union {
4057 		/* enum v4l2_ycbcr_encoding */
4058 		u_int32_t			ycbcr_enc;
4059 		/* enum v4l2_hsv_encoding */
4060 		u_int32_t			hsv_enc;
4061 	};
4062 	u_int32_t			quantization;	/* enum v4l2_quantization */
4063 	u_int32_t			xfer_func;	/* enum v4l2_xfer_func */
4064 };
4065 
4066 /*      Pixel format         FOURCC                          depth  Description  */
4067 
4068 /* RGB formats (1 or 2 bytes per pixel) */
4069 #define V4L2_PIX_FMT_RGB332  v4l2_fourcc('R', 'G', 'B', '1') /*  8  RGB-3-3-2     */
4070 #define V4L2_PIX_FMT_RGB444  v4l2_fourcc('R', '4', '4', '4') /* 16  xxxxrrrr ggggbbbb */
4071 #define V4L2_PIX_FMT_ARGB444 v4l2_fourcc('A', 'R', '1', '2') /* 16  aaaarrrr ggggbbbb */
4072 #define V4L2_PIX_FMT_XRGB444 v4l2_fourcc('X', 'R', '1', '2') /* 16  xxxxrrrr ggggbbbb */
4073 #define V4L2_PIX_FMT_RGBA444 v4l2_fourcc('R', 'A', '1', '2') /* 16  rrrrgggg bbbbaaaa */
4074 #define V4L2_PIX_FMT_RGBX444 v4l2_fourcc('R', 'X', '1', '2') /* 16  rrrrgggg bbbbxxxx */
4075 #define V4L2_PIX_FMT_ABGR444 v4l2_fourcc('A', 'B', '1', '2') /* 16  aaaabbbb ggggrrrr */
4076 #define V4L2_PIX_FMT_XBGR444 v4l2_fourcc('X', 'B', '1', '2') /* 16  xxxxbbbb ggggrrrr */
4077 #define V4L2_PIX_FMT_BGRA444 v4l2_fourcc('G', 'A', '1', '2') /* 16  bbbbgggg rrrraaaa */
4078 #define V4L2_PIX_FMT_BGRX444 v4l2_fourcc('B', 'X', '1', '2') /* 16  bbbbgggg rrrrxxxx */
4079 #define V4L2_PIX_FMT_RGB555  v4l2_fourcc('R', 'G', 'B', 'O') /* 16  RGB-5-5-5     */
4080 #define V4L2_PIX_FMT_ARGB555 v4l2_fourcc('A', 'R', '1', '5') /* 16  ARGB-1-5-5-5  */
4081 #define V4L2_PIX_FMT_XRGB555 v4l2_fourcc('X', 'R', '1', '5') /* 16  XRGB-1-5-5-5  */
4082 #define V4L2_PIX_FMT_RGBA555 v4l2_fourcc('R', 'A', '1', '5') /* 16  RGBA-5-5-5-1  */
4083 #define V4L2_PIX_FMT_RGBX555 v4l2_fourcc('R', 'X', '1', '5') /* 16  RGBX-5-5-5-1  */
4084 #define V4L2_PIX_FMT_ABGR555 v4l2_fourcc('A', 'B', '1', '5') /* 16  ABGR-1-5-5-5  */
4085 #define V4L2_PIX_FMT_XBGR555 v4l2_fourcc('X', 'B', '1', '5') /* 16  XBGR-1-5-5-5  */
4086 #define V4L2_PIX_FMT_BGRA555 v4l2_fourcc('B', 'A', '1', '5') /* 16  BGRA-5-5-5-1  */
4087 #define V4L2_PIX_FMT_BGRX555 v4l2_fourcc('B', 'X', '1', '5') /* 16  BGRX-5-5-5-1  */
4088 #define V4L2_PIX_FMT_RGB565  v4l2_fourcc('R', 'G', 'B', 'P') /* 16  RGB-5-6-5     */
4089 #define V4L2_PIX_FMT_RGB555X v4l2_fourcc('R', 'G', 'B', 'Q') /* 16  RGB-5-5-5 BE  */
4090 #define V4L2_PIX_FMT_ARGB555X v4l2_fourcc_be('A', 'R', '1', '5') /* 16  ARGB-5-5-5 BE */
4091 #define V4L2_PIX_FMT_XRGB555X v4l2_fourcc_be('X', 'R', '1', '5') /* 16  XRGB-5-5-5 BE */
4092 #define V4L2_PIX_FMT_RGB565X v4l2_fourcc('R', 'G', 'B', 'R') /* 16  RGB-5-6-5 BE  */
4093 
4094 /* RGB formats (3 or 4 bytes per pixel) */
4095 #define V4L2_PIX_FMT_BGR666  v4l2_fourcc('B', 'G', 'R', 'H') /* 18  BGR-6-6-6	  */
4096 #define V4L2_PIX_FMT_BGR24   v4l2_fourcc('B', 'G', 'R', '3') /* 24  BGR-8-8-8     */
4097 #define V4L2_PIX_FMT_RGB24   v4l2_fourcc('R', 'G', 'B', '3') /* 24  RGB-8-8-8     */
4098 #define V4L2_PIX_FMT_BGR32   v4l2_fourcc('B', 'G', 'R', '4') /* 32  BGR-8-8-8-8   */
4099 #define V4L2_PIX_FMT_ABGR32  v4l2_fourcc('A', 'R', '2', '4') /* 32  BGRA-8-8-8-8  */
4100 #define V4L2_PIX_FMT_XBGR32  v4l2_fourcc('X', 'R', '2', '4') /* 32  BGRX-8-8-8-8  */
4101 #define V4L2_PIX_FMT_BGRA32  v4l2_fourcc('R', 'A', '2', '4') /* 32  ABGR-8-8-8-8  */
4102 #define V4L2_PIX_FMT_BGRX32  v4l2_fourcc('R', 'X', '2', '4') /* 32  XBGR-8-8-8-8  */
4103 #define V4L2_PIX_FMT_RGB32   v4l2_fourcc('R', 'G', 'B', '4') /* 32  RGB-8-8-8-8   */
4104 #define V4L2_PIX_FMT_RGBA32  v4l2_fourcc('A', 'B', '2', '4') /* 32  RGBA-8-8-8-8  */
4105 #define V4L2_PIX_FMT_RGBX32  v4l2_fourcc('X', 'B', '2', '4') /* 32  RGBX-8-8-8-8  */
4106 #define V4L2_PIX_FMT_ARGB32  v4l2_fourcc('B', 'A', '2', '4') /* 32  ARGB-8-8-8-8  */
4107 #define V4L2_PIX_FMT_XRGB32  v4l2_fourcc('B', 'X', '2', '4') /* 32  XRGB-8-8-8-8  */
4108 #define V4L2_PIX_FMT_RGBX1010102 v4l2_fourcc('R', 'X', '3', '0') /* 32  RGBX-10-10-10-2 */
4109 #define V4L2_PIX_FMT_RGBA1010102 v4l2_fourcc('R', 'A', '3', '0') /* 32  RGBA-10-10-10-2 */
4110 #define V4L2_PIX_FMT_ARGB2101010 v4l2_fourcc('A', 'R', '3', '0') /* 32  ARGB-2-10-10-10 */
4111 
4112 /* RGB formats (6 or 8 bytes per pixel) */
4113 #define V4L2_PIX_FMT_BGR48_12    v4l2_fourcc('B', '3', '1', '2') /* 48  BGR 12-bit per component */
4114 #define V4L2_PIX_FMT_BGR48       v4l2_fourcc('B', 'G', 'R', '6') /* 48  BGR 16-bit per component */
4115 #define V4L2_PIX_FMT_RGB48       v4l2_fourcc('R', 'G', 'B', '6') /* 48  RGB 16-bit per component */
4116 #define V4L2_PIX_FMT_ABGR64_12   v4l2_fourcc('B', '4', '1', '2') /* 64  BGRA 12-bit per component */
4117 
4118 /* Grey formats */
4119 #define V4L2_PIX_FMT_GREY    v4l2_fourcc('G', 'R', 'E', 'Y') /*  8  Greyscale     */
4120 #define V4L2_PIX_FMT_Y4      v4l2_fourcc('Y', '0', '4', ' ') /*  4  Greyscale     */
4121 #define V4L2_PIX_FMT_Y6      v4l2_fourcc('Y', '0', '6', ' ') /*  6  Greyscale     */
4122 #define V4L2_PIX_FMT_Y10     v4l2_fourcc('Y', '1', '0', ' ') /* 10  Greyscale     */
4123 #define V4L2_PIX_FMT_Y12     v4l2_fourcc('Y', '1', '2', ' ') /* 12  Greyscale     */
4124 #define V4L2_PIX_FMT_Y012    v4l2_fourcc('Y', '0', '1', '2') /* 12  Greyscale     */
4125 #define V4L2_PIX_FMT_Y14     v4l2_fourcc('Y', '1', '4', ' ') /* 14  Greyscale     */
4126 #define V4L2_PIX_FMT_Y16     v4l2_fourcc('Y', '1', '6', ' ') /* 16  Greyscale     */
4127 #define V4L2_PIX_FMT_Y16_BE  v4l2_fourcc_be('Y', '1', '6', ' ') /* 16  Greyscale BE  */
4128 
4129 /* Grey bit-packed formats */
4130 #define V4L2_PIX_FMT_Y10BPACK    v4l2_fourcc('Y', '1', '0', 'B') /* 10  Greyscale bit-packed */
4131 #define V4L2_PIX_FMT_Y10P    v4l2_fourcc('Y', '1', '0', 'P') /* 10  Greyscale, MIPI RAW10 packed */
4132 #define V4L2_PIX_FMT_IPU3_Y10		v4l2_fourcc('i', 'p', '3', 'y') /* IPU3 packed 10-bit greyscale */
4133 #define V4L2_PIX_FMT_Y12P    v4l2_fourcc('Y', '1', '2', 'P') /* 12  Greyscale, MIPI RAW12 packed */
4134 #define V4L2_PIX_FMT_Y14P    v4l2_fourcc('Y', '1', '4', 'P') /* 14  Greyscale, MIPI RAW14 packed */
4135 
4136 /* Palette formats */
4137 #define V4L2_PIX_FMT_PAL8    v4l2_fourcc('P', 'A', 'L', '8') /*  8  8-bit palette */
4138 
4139 /* Chrominance formats */
4140 #define V4L2_PIX_FMT_UV8     v4l2_fourcc('U', 'V', '8', ' ') /*  8  UV 4:4 */
4141 
4142 /* Luminance+Chrominance formats */
4143 #define V4L2_PIX_FMT_YUYV    v4l2_fourcc('Y', 'U', 'Y', 'V') /* 16  YUV 4:2:2     */
4144 #define V4L2_PIX_FMT_YYUV    v4l2_fourcc('Y', 'Y', 'U', 'V') /* 16  YUV 4:2:2     */
4145 #define V4L2_PIX_FMT_YVYU    v4l2_fourcc('Y', 'V', 'Y', 'U') /* 16 YVU 4:2:2 */
4146 #define V4L2_PIX_FMT_UYVY    v4l2_fourcc('U', 'Y', 'V', 'Y') /* 16  YUV 4:2:2     */
4147 #define V4L2_PIX_FMT_VYUY    v4l2_fourcc('V', 'Y', 'U', 'Y') /* 16  YUV 4:2:2     */
4148 #define V4L2_PIX_FMT_Y41P    v4l2_fourcc('Y', '4', '1', 'P') /* 12  YUV 4:1:1     */
4149 #define V4L2_PIX_FMT_YUV444  v4l2_fourcc('Y', '4', '4', '4') /* 16  xxxxyyyy uuuuvvvv */
4150 #define V4L2_PIX_FMT_YUV555  v4l2_fourcc('Y', 'U', 'V', 'O') /* 16  YUV-5-5-5     */
4151 #define V4L2_PIX_FMT_YUV565  v4l2_fourcc('Y', 'U', 'V', 'P') /* 16  YUV-5-6-5     */
4152 #define V4L2_PIX_FMT_YUV24   v4l2_fourcc('Y', 'U', 'V', '3') /* 24  YUV-8-8-8     */
4153 #define V4L2_PIX_FMT_YUV32   v4l2_fourcc('Y', 'U', 'V', '4') /* 32  YUV-8-8-8-8   */
4154 #define V4L2_PIX_FMT_AYUV32  v4l2_fourcc('A', 'Y', 'U', 'V') /* 32  AYUV-8-8-8-8  */
4155 #define V4L2_PIX_FMT_XYUV32  v4l2_fourcc('X', 'Y', 'U', 'V') /* 32  XYUV-8-8-8-8  */
4156 #define V4L2_PIX_FMT_VUYA32  v4l2_fourcc('V', 'U', 'Y', 'A') /* 32  VUYA-8-8-8-8  */
4157 #define V4L2_PIX_FMT_VUYX32  v4l2_fourcc('V', 'U', 'Y', 'X') /* 32  VUYX-8-8-8-8  */
4158 #define V4L2_PIX_FMT_YUVA32  v4l2_fourcc('Y', 'U', 'V', 'A') /* 32  YUVA-8-8-8-8  */
4159 #define V4L2_PIX_FMT_YUVX32  v4l2_fourcc('Y', 'U', 'V', 'X') /* 32  YUVX-8-8-8-8  */
4160 #define V4L2_PIX_FMT_M420    v4l2_fourcc('M', '4', '2', '0') /* 12  YUV 4:2:0 2 lines y, 1 line uv interleaved */
4161 #define V4L2_PIX_FMT_YUV48_12    v4l2_fourcc('Y', '3', '1', '2') /* 48  YUV 4:4:4 12-bit per component */
4162 
4163 /*
4164  * YCbCr packed format. For each Y2xx format, xx bits of valid data occupy the MSBs
4165  * of the 16 bit components, and 16-xx bits of zero padding occupy the LSBs.
4166  */
4167 #define V4L2_PIX_FMT_Y210    v4l2_fourcc('Y', '2', '1', '0') /* 32  YUYV 4:2:2 */
4168 #define V4L2_PIX_FMT_Y212    v4l2_fourcc('Y', '2', '1', '2') /* 32  YUYV 4:2:2 */
4169 #define V4L2_PIX_FMT_Y216    v4l2_fourcc('Y', '2', '1', '6') /* 32  YUYV 4:2:2 */
4170 
4171 /* two planes -- one Y, one Cr + Cb interleaved  */
4172 #define V4L2_PIX_FMT_NV12    v4l2_fourcc('N', 'V', '1', '2') /* 12  Y/CbCr 4:2:0  */
4173 #define V4L2_PIX_FMT_NV21    v4l2_fourcc('N', 'V', '2', '1') /* 12  Y/CrCb 4:2:0  */
4174 #define V4L2_PIX_FMT_NV16    v4l2_fourcc('N', 'V', '1', '6') /* 16  Y/CbCr 4:2:2  */
4175 #define V4L2_PIX_FMT_NV61    v4l2_fourcc('N', 'V', '6', '1') /* 16  Y/CrCb 4:2:2  */
4176 #define V4L2_PIX_FMT_NV24    v4l2_fourcc('N', 'V', '2', '4') /* 24  Y/CbCr 4:4:4  */
4177 #define V4L2_PIX_FMT_NV42    v4l2_fourcc('N', 'V', '4', '2') /* 24  Y/CrCb 4:4:4  */
4178 #define V4L2_PIX_FMT_P010    v4l2_fourcc('P', '0', '1', '0') /* 24  Y/CbCr 4:2:0 10-bit per component */
4179 #define V4L2_PIX_FMT_P012    v4l2_fourcc('P', '0', '1', '2') /* 24  Y/CbCr 4:2:0 12-bit per component */
4180 
4181 /* two non contiguous planes - one Y, one Cr + Cb interleaved  */
4182 #define V4L2_PIX_FMT_NV12M   v4l2_fourcc('N', 'M', '1', '2') /* 12  Y/CbCr 4:2:0  */
4183 #define V4L2_PIX_FMT_NV21M   v4l2_fourcc('N', 'M', '2', '1') /* 21  Y/CrCb 4:2:0  */
4184 #define V4L2_PIX_FMT_NV16M   v4l2_fourcc('N', 'M', '1', '6') /* 16  Y/CbCr 4:2:2  */
4185 #define V4L2_PIX_FMT_NV61M   v4l2_fourcc('N', 'M', '6', '1') /* 16  Y/CrCb 4:2:2  */
4186 #define V4L2_PIX_FMT_P012M   v4l2_fourcc('P', 'M', '1', '2') /* 24  Y/CbCr 4:2:0 12-bit per component */
4187 
4188 /* three planes - Y Cb, Cr */
4189 #define V4L2_PIX_FMT_YUV410  v4l2_fourcc('Y', 'U', 'V', '9') /*  9  YUV 4:1:0     */
4190 #define V4L2_PIX_FMT_YVU410  v4l2_fourcc('Y', 'V', 'U', '9') /*  9  YVU 4:1:0     */
4191 #define V4L2_PIX_FMT_YUV411P v4l2_fourcc('4', '1', '1', 'P') /* 12  YVU411 planar */
4192 #define V4L2_PIX_FMT_YUV420  v4l2_fourcc('Y', 'U', '1', '2') /* 12  YUV 4:2:0     */
4193 #define V4L2_PIX_FMT_YVU420  v4l2_fourcc('Y', 'V', '1', '2') /* 12  YVU 4:2:0     */
4194 #define V4L2_PIX_FMT_YUV422P v4l2_fourcc('4', '2', '2', 'P') /* 16  YVU422 planar */
4195 
4196 /* three non contiguous planes - Y, Cb, Cr */
4197 #define V4L2_PIX_FMT_YUV420M v4l2_fourcc('Y', 'M', '1', '2') /* 12  YUV420 planar */
4198 #define V4L2_PIX_FMT_YVU420M v4l2_fourcc('Y', 'M', '2', '1') /* 12  YVU420 planar */
4199 #define V4L2_PIX_FMT_YUV422M v4l2_fourcc('Y', 'M', '1', '6') /* 16  YUV422 planar */
4200 #define V4L2_PIX_FMT_YVU422M v4l2_fourcc('Y', 'M', '6', '1') /* 16  YVU422 planar */
4201 #define V4L2_PIX_FMT_YUV444M v4l2_fourcc('Y', 'M', '2', '4') /* 24  YUV444 planar */
4202 #define V4L2_PIX_FMT_YVU444M v4l2_fourcc('Y', 'M', '4', '2') /* 24  YVU444 planar */
4203 
4204 /* Tiled YUV formats */
4205 #define V4L2_PIX_FMT_NV12_4L4 v4l2_fourcc('V', 'T', '1', '2')   /* 12  Y/CbCr 4:2:0  4x4 tiles */
4206 #define V4L2_PIX_FMT_NV12_16L16 v4l2_fourcc('H', 'M', '1', '2') /* 12  Y/CbCr 4:2:0 16x16 tiles */
4207 #define V4L2_PIX_FMT_NV12_32L32 v4l2_fourcc('S', 'T', '1', '2') /* 12  Y/CbCr 4:2:0 32x32 tiles */
4208 #define V4L2_PIX_FMT_NV15_4L4 v4l2_fourcc('V', 'T', '1', '5') /* 15 Y/CbCr 4:2:0 10-bit 4x4 tiles */
4209 #define V4L2_PIX_FMT_P010_4L4 v4l2_fourcc('T', '0', '1', '0') /* 12  Y/CbCr 4:2:0 10-bit 4x4 macroblocks */
4210 #define V4L2_PIX_FMT_NV12_8L128       v4l2_fourcc('A', 'T', '1', '2') /* Y/CbCr 4:2:0 8x128 tiles */
4211 #define V4L2_PIX_FMT_NV12_10BE_8L128  v4l2_fourcc_be('A', 'X', '1', '2') /* Y/CbCr 4:2:0 10-bit 8x128 tiles */
4212 
4213 /* Tiled YUV formats, non contiguous planes */
4214 #define V4L2_PIX_FMT_NV12MT  v4l2_fourcc('T', 'M', '1', '2') /* 12  Y/CbCr 4:2:0 64x32 tiles */
4215 #define V4L2_PIX_FMT_NV12MT_16X16 v4l2_fourcc('V', 'M', '1', '2') /* 12  Y/CbCr 4:2:0 16x16 tiles */
4216 #define V4L2_PIX_FMT_NV12M_8L128      v4l2_fourcc('N', 'A', '1', '2') /* Y/CbCr 4:2:0 8x128 tiles */
4217 #define V4L2_PIX_FMT_NV12M_10BE_8L128 v4l2_fourcc_be('N', 'T', '1', '2') /* Y/CbCr 4:2:0 10-bit 8x128 tiles */
4218 
4219 /* Bayer formats - see http://www.siliconimaging.com/RGB%20Bayer.htm */
4220 #define V4L2_PIX_FMT_SBGGR8  v4l2_fourcc('B', 'A', '8', '1') /*  8  BGBG.. GRGR.. */
4221 #define V4L2_PIX_FMT_SGBRG8  v4l2_fourcc('G', 'B', 'R', 'G') /*  8  GBGB.. RGRG.. */
4222 #define V4L2_PIX_FMT_SGRBG8  v4l2_fourcc('G', 'R', 'B', 'G') /*  8  GRGR.. BGBG.. */
4223 #define V4L2_PIX_FMT_SRGGB8  v4l2_fourcc('R', 'G', 'G', 'B') /*  8  RGRG.. GBGB.. */
4224 #define V4L2_PIX_FMT_SBGGR10 v4l2_fourcc('B', 'G', '1', '0') /* 10  BGBG.. GRGR.. */
4225 #define V4L2_PIX_FMT_SGBRG10 v4l2_fourcc('G', 'B', '1', '0') /* 10  GBGB.. RGRG.. */
4226 #define V4L2_PIX_FMT_SGRBG10 v4l2_fourcc('B', 'A', '1', '0') /* 10  GRGR.. BGBG.. */
4227 #define V4L2_PIX_FMT_SRGGB10 v4l2_fourcc('R', 'G', '1', '0') /* 10  RGRG.. GBGB.. */
4228 	/* 10bit raw bayer packed, 5 bytes for every 4 pixels */
4229 #define V4L2_PIX_FMT_SBGGR10P v4l2_fourcc('p', 'B', 'A', 'A')
4230 #define V4L2_PIX_FMT_SGBRG10P v4l2_fourcc('p', 'G', 'A', 'A')
4231 #define V4L2_PIX_FMT_SGRBG10P v4l2_fourcc('p', 'g', 'A', 'A')
4232 #define V4L2_PIX_FMT_SRGGB10P v4l2_fourcc('p', 'R', 'A', 'A')
4233 	/* 10bit raw bayer a-law compressed to 8 bits */
4234 #define V4L2_PIX_FMT_SBGGR10ALAW8 v4l2_fourcc('a', 'B', 'A', '8')
4235 #define V4L2_PIX_FMT_SGBRG10ALAW8 v4l2_fourcc('a', 'G', 'A', '8')
4236 #define V4L2_PIX_FMT_SGRBG10ALAW8 v4l2_fourcc('a', 'g', 'A', '8')
4237 #define V4L2_PIX_FMT_SRGGB10ALAW8 v4l2_fourcc('a', 'R', 'A', '8')
4238 	/* 10bit raw bayer DPCM compressed to 8 bits */
4239 #define V4L2_PIX_FMT_SBGGR10DPCM8 v4l2_fourcc('b', 'B', 'A', '8')
4240 #define V4L2_PIX_FMT_SGBRG10DPCM8 v4l2_fourcc('b', 'G', 'A', '8')
4241 #define V4L2_PIX_FMT_SGRBG10DPCM8 v4l2_fourcc('B', 'D', '1', '0')
4242 #define V4L2_PIX_FMT_SRGGB10DPCM8 v4l2_fourcc('b', 'R', 'A', '8')
4243 #define V4L2_PIX_FMT_SBGGR12 v4l2_fourcc('B', 'G', '1', '2') /* 12  BGBG.. GRGR.. */
4244 #define V4L2_PIX_FMT_SGBRG12 v4l2_fourcc('G', 'B', '1', '2') /* 12  GBGB.. RGRG.. */
4245 #define V4L2_PIX_FMT_SGRBG12 v4l2_fourcc('B', 'A', '1', '2') /* 12  GRGR.. BGBG.. */
4246 #define V4L2_PIX_FMT_SRGGB12 v4l2_fourcc('R', 'G', '1', '2') /* 12  RGRG.. GBGB.. */
4247 	/* 12bit raw bayer packed, 6 bytes for every 4 pixels */
4248 #define V4L2_PIX_FMT_SBGGR12P v4l2_fourcc('p', 'B', 'C', 'C')
4249 #define V4L2_PIX_FMT_SGBRG12P v4l2_fourcc('p', 'G', 'C', 'C')
4250 #define V4L2_PIX_FMT_SGRBG12P v4l2_fourcc('p', 'g', 'C', 'C')
4251 #define V4L2_PIX_FMT_SRGGB12P v4l2_fourcc('p', 'R', 'C', 'C')
4252 #define V4L2_PIX_FMT_SBGGR14 v4l2_fourcc('B', 'G', '1', '4') /* 14  BGBG.. GRGR.. */
4253 #define V4L2_PIX_FMT_SGBRG14 v4l2_fourcc('G', 'B', '1', '4') /* 14  GBGB.. RGRG.. */
4254 #define V4L2_PIX_FMT_SGRBG14 v4l2_fourcc('G', 'R', '1', '4') /* 14  GRGR.. BGBG.. */
4255 #define V4L2_PIX_FMT_SRGGB14 v4l2_fourcc('R', 'G', '1', '4') /* 14  RGRG.. GBGB.. */
4256 	/* 14bit raw bayer packed, 7 bytes for every 4 pixels */
4257 #define V4L2_PIX_FMT_SBGGR14P v4l2_fourcc('p', 'B', 'E', 'E')
4258 #define V4L2_PIX_FMT_SGBRG14P v4l2_fourcc('p', 'G', 'E', 'E')
4259 #define V4L2_PIX_FMT_SGRBG14P v4l2_fourcc('p', 'g', 'E', 'E')
4260 #define V4L2_PIX_FMT_SRGGB14P v4l2_fourcc('p', 'R', 'E', 'E')
4261 #define V4L2_PIX_FMT_SBGGR16 v4l2_fourcc('B', 'Y', 'R', '2') /* 16  BGBG.. GRGR.. */
4262 #define V4L2_PIX_FMT_SGBRG16 v4l2_fourcc('G', 'B', '1', '6') /* 16  GBGB.. RGRG.. */
4263 #define V4L2_PIX_FMT_SGRBG16 v4l2_fourcc('G', 'R', '1', '6') /* 16  GRGR.. BGBG.. */
4264 #define V4L2_PIX_FMT_SRGGB16 v4l2_fourcc('R', 'G', '1', '6') /* 16  RGRG.. GBGB.. */
4265 
4266 /* HSV formats */
4267 #define V4L2_PIX_FMT_HSV24 v4l2_fourcc('H', 'S', 'V', '3')
4268 #define V4L2_PIX_FMT_HSV32 v4l2_fourcc('H', 'S', 'V', '4')
4269 
4270 /* compressed formats */
4271 #define V4L2_PIX_FMT_MJPEG    v4l2_fourcc('M', 'J', 'P', 'G') /* Motion-JPEG   */
4272 #define V4L2_PIX_FMT_JPEG     v4l2_fourcc('J', 'P', 'E', 'G') /* JFIF JPEG     */
4273 #define V4L2_PIX_FMT_DV       v4l2_fourcc('d', 'v', 's', 'd') /* 1394          */
4274 #define V4L2_PIX_FMT_MPEG     v4l2_fourcc('M', 'P', 'E', 'G') /* MPEG-1/2/4 Multiplexed */
4275 #define V4L2_PIX_FMT_H264     v4l2_fourcc('H', '2', '6', '4') /* H264 with start codes */
4276 #define V4L2_PIX_FMT_H264_NO_SC v4l2_fourcc('A', 'V', 'C', '1') /* H264 without start codes */
4277 #define V4L2_PIX_FMT_H264_MVC v4l2_fourcc('M', '2', '6', '4') /* H264 MVC */
4278 #define V4L2_PIX_FMT_H263     v4l2_fourcc('H', '2', '6', '3') /* H263          */
4279 #define V4L2_PIX_FMT_MPEG1    v4l2_fourcc('M', 'P', 'G', '1') /* MPEG-1 ES     */
4280 #define V4L2_PIX_FMT_MPEG2    v4l2_fourcc('M', 'P', 'G', '2') /* MPEG-2 ES     */
4281 #define V4L2_PIX_FMT_MPEG2_SLICE v4l2_fourcc('M', 'G', '2', 'S') /* MPEG-2 parsed slice data */
4282 #define V4L2_PIX_FMT_MPEG4    v4l2_fourcc('M', 'P', 'G', '4') /* MPEG-4 part 2 ES */
4283 #define V4L2_PIX_FMT_XVID     v4l2_fourcc('X', 'V', 'I', 'D') /* Xvid           */
4284 #define V4L2_PIX_FMT_VC1_ANNEX_G v4l2_fourcc('V', 'C', '1', 'G') /* SMPTE 421M Annex G compliant stream */
4285 #define V4L2_PIX_FMT_VC1_ANNEX_L v4l2_fourcc('V', 'C', '1', 'L') /* SMPTE 421M Annex L compliant stream */
4286 #define V4L2_PIX_FMT_VP8      v4l2_fourcc('V', 'P', '8', '0') /* VP8 */
4287 #define V4L2_PIX_FMT_VP8_FRAME v4l2_fourcc('V', 'P', '8', 'F') /* VP8 parsed frame */
4288 #define V4L2_PIX_FMT_VP9      v4l2_fourcc('V', 'P', '9', '0') /* VP9 */
4289 #define V4L2_PIX_FMT_VP9_FRAME v4l2_fourcc('V', 'P', '9', 'F') /* VP9 parsed frame */
4290 #define V4L2_PIX_FMT_HEVC     v4l2_fourcc('H', 'E', 'V', 'C') /* HEVC aka H.265 */
4291 #define V4L2_PIX_FMT_FWHT     v4l2_fourcc('F', 'W', 'H', 'T') /* Fast Walsh Hadamard Transform (vicodec) */
4292 #define V4L2_PIX_FMT_FWHT_STATELESS     v4l2_fourcc('S', 'F', 'W', 'H') /* Stateless FWHT (vicodec) */
4293 #define V4L2_PIX_FMT_H264_SLICE v4l2_fourcc('S', '2', '6', '4') /* H264 parsed slices */
4294 #define V4L2_PIX_FMT_HEVC_SLICE v4l2_fourcc('S', '2', '6', '5') /* HEVC parsed slices */
4295 #define V4L2_PIX_FMT_AV1_FRAME v4l2_fourcc('A', 'V', '1', 'F') /* AV1 parsed frame */
4296 #define V4L2_PIX_FMT_SPK      v4l2_fourcc('S', 'P', 'K', '0') /* Sorenson Spark */
4297 #define V4L2_PIX_FMT_RV30     v4l2_fourcc('R', 'V', '3', '0') /* RealVideo 8 */
4298 #define V4L2_PIX_FMT_RV40     v4l2_fourcc('R', 'V', '4', '0') /* RealVideo 9 & 10 */
4299 
4300 /*  Vendor-specific formats   */
4301 #define V4L2_PIX_FMT_CPIA1    v4l2_fourcc('C', 'P', 'I', 'A') /* cpia1 YUV */
4302 #define V4L2_PIX_FMT_WNVA     v4l2_fourcc('W', 'N', 'V', 'A') /* Winnov hw compress */
4303 #define V4L2_PIX_FMT_SN9C10X  v4l2_fourcc('S', '9', '1', '0') /* SN9C10x compression */
4304 #define V4L2_PIX_FMT_SN9C20X_I420 v4l2_fourcc('S', '9', '2', '0') /* SN9C20x YUV 4:2:0 */
4305 #define V4L2_PIX_FMT_PWC1     v4l2_fourcc('P', 'W', 'C', '1') /* pwc older webcam */
4306 #define V4L2_PIX_FMT_PWC2     v4l2_fourcc('P', 'W', 'C', '2') /* pwc newer webcam */
4307 #define V4L2_PIX_FMT_ET61X251 v4l2_fourcc('E', '6', '2', '5') /* ET61X251 compression */
4308 #define V4L2_PIX_FMT_SPCA501  v4l2_fourcc('S', '5', '0', '1') /* YUYV per line */
4309 #define V4L2_PIX_FMT_SPCA505  v4l2_fourcc('S', '5', '0', '5') /* YYUV per line */
4310 #define V4L2_PIX_FMT_SPCA508  v4l2_fourcc('S', '5', '0', '8') /* YUVY per line */
4311 #define V4L2_PIX_FMT_SPCA561  v4l2_fourcc('S', '5', '6', '1') /* compressed GBRG bayer */
4312 #define V4L2_PIX_FMT_PAC207   v4l2_fourcc('P', '2', '0', '7') /* compressed BGGR bayer */
4313 #define V4L2_PIX_FMT_MR97310A v4l2_fourcc('M', '3', '1', '0') /* compressed BGGR bayer */
4314 #define V4L2_PIX_FMT_JL2005BCD v4l2_fourcc('J', 'L', '2', '0') /* compressed RGGB bayer */
4315 #define V4L2_PIX_FMT_SN9C2028 v4l2_fourcc('S', 'O', 'N', 'X') /* compressed GBRG bayer */
4316 #define V4L2_PIX_FMT_SQ905C   v4l2_fourcc('9', '0', '5', 'C') /* compressed RGGB bayer */
4317 #define V4L2_PIX_FMT_PJPG     v4l2_fourcc('P', 'J', 'P', 'G') /* Pixart 73xx JPEG */
4318 #define V4L2_PIX_FMT_OV511    v4l2_fourcc('O', '5', '1', '1') /* ov511 JPEG */
4319 #define V4L2_PIX_FMT_OV518    v4l2_fourcc('O', '5', '1', '8') /* ov518 JPEG */
4320 #define V4L2_PIX_FMT_STV0680  v4l2_fourcc('S', '6', '8', '0') /* stv0680 bayer */
4321 #define V4L2_PIX_FMT_TM6000   v4l2_fourcc('T', 'M', '6', '0') /* tm5600/tm60x0 */
4322 #define V4L2_PIX_FMT_CIT_YYVYUY v4l2_fourcc('C', 'I', 'T', 'V') /* one line of Y then 1 line of VYUY */
4323 #define V4L2_PIX_FMT_KONICA420  v4l2_fourcc('K', 'O', 'N', 'I') /* YUV420 planar in blocks of 256 pixels */
4324 #define V4L2_PIX_FMT_JPGL	v4l2_fourcc('J', 'P', 'G', 'L') /* JPEG-Lite */
4325 #define V4L2_PIX_FMT_SE401      v4l2_fourcc('S', '4', '0', '1') /* se401 janggu compressed rgb */
4326 #define V4L2_PIX_FMT_S5C_UYVY_JPG v4l2_fourcc('S', '5', 'C', 'I') /* S5C73M3 interleaved UYVY/JPEG */
4327 #define V4L2_PIX_FMT_Y8I      v4l2_fourcc('Y', '8', 'I', ' ') /* Greyscale 8-bit L/R interleaved */
4328 #define V4L2_PIX_FMT_Y12I     v4l2_fourcc('Y', '1', '2', 'I') /* Greyscale 12-bit L/R interleaved */
4329 #define V4L2_PIX_FMT_Y16I     v4l2_fourcc('Y', '1', '6', 'I') /* Greyscale 16-bit L/R interleaved */
4330 #define V4L2_PIX_FMT_Z16      v4l2_fourcc('Z', '1', '6', ' ') /* Depth data 16-bit */
4331 #define V4L2_PIX_FMT_MT21C    v4l2_fourcc('M', 'T', '2', '1') /* Mediatek compressed block mode  */
4332 #define V4L2_PIX_FMT_MM21     v4l2_fourcc('M', 'M', '2', '1') /* Mediatek 8-bit block mode, two non-contiguous planes */
4333 #define V4L2_PIX_FMT_MT2110T  v4l2_fourcc('M', 'T', '2', 'T') /* Mediatek 10-bit block tile mode */
4334 #define V4L2_PIX_FMT_MT2110R  v4l2_fourcc('M', 'T', '2', 'R') /* Mediatek 10-bit block raster mode */
4335 #define V4L2_PIX_FMT_INZI     v4l2_fourcc('I', 'N', 'Z', 'I') /* Intel Planar Greyscale 10-bit and Depth 16-bit */
4336 #define V4L2_PIX_FMT_CNF4     v4l2_fourcc('C', 'N', 'F', '4') /* Intel 4-bit packed depth confidence information */
4337 #define V4L2_PIX_FMT_HI240    v4l2_fourcc('H', 'I', '2', '4') /* BTTV 8-bit dithered RGB */
4338 #define V4L2_PIX_FMT_QC08C    v4l2_fourcc('Q', '0', '8', 'C') /* Qualcomm 8-bit compressed */
4339 #define V4L2_PIX_FMT_QC10C    v4l2_fourcc('Q', '1', '0', 'C') /* Qualcomm 10-bit compressed */
4340 #define V4L2_PIX_FMT_AJPG     v4l2_fourcc('A', 'J', 'P', 'G') /* Aspeed JPEG */
4341 #define V4L2_PIX_FMT_HEXTILE  v4l2_fourcc('H', 'X', 'T', 'L') /* Hextile compressed */
4342 
4343 /* 10bit raw packed, 32 bytes for every 25 pixels, last LSB 6 bits unused */
4344 #define V4L2_PIX_FMT_IPU3_SBGGR10	v4l2_fourcc('i', 'p', '3', 'b') /* IPU3 packed 10-bit BGGR bayer */
4345 #define V4L2_PIX_FMT_IPU3_SGBRG10	v4l2_fourcc('i', 'p', '3', 'g') /* IPU3 packed 10-bit GBRG bayer */
4346 #define V4L2_PIX_FMT_IPU3_SGRBG10	v4l2_fourcc('i', 'p', '3', 'G') /* IPU3 packed 10-bit GRBG bayer */
4347 #define V4L2_PIX_FMT_IPU3_SRGGB10	v4l2_fourcc('i', 'p', '3', 'r') /* IPU3 packed 10-bit RGGB bayer */
4348 
4349 /* Raspberry Pi PiSP compressed formats. */
4350 #define V4L2_PIX_FMT_PISP_COMP1_RGGB	v4l2_fourcc('P', 'C', '1', 'R') /* PiSP 8-bit mode 1 compressed RGGB bayer */
4351 #define V4L2_PIX_FMT_PISP_COMP1_GRBG	v4l2_fourcc('P', 'C', '1', 'G') /* PiSP 8-bit mode 1 compressed GRBG bayer */
4352 #define V4L2_PIX_FMT_PISP_COMP1_GBRG	v4l2_fourcc('P', 'C', '1', 'g') /* PiSP 8-bit mode 1 compressed GBRG bayer */
4353 #define V4L2_PIX_FMT_PISP_COMP1_BGGR	v4l2_fourcc('P', 'C', '1', 'B') /* PiSP 8-bit mode 1 compressed BGGR bayer */
4354 #define V4L2_PIX_FMT_PISP_COMP1_MONO	v4l2_fourcc('P', 'C', '1', 'M') /* PiSP 8-bit mode 1 compressed monochrome */
4355 #define V4L2_PIX_FMT_PISP_COMP2_RGGB	v4l2_fourcc('P', 'C', '2', 'R') /* PiSP 8-bit mode 2 compressed RGGB bayer */
4356 #define V4L2_PIX_FMT_PISP_COMP2_GRBG	v4l2_fourcc('P', 'C', '2', 'G') /* PiSP 8-bit mode 2 compressed GRBG bayer */
4357 #define V4L2_PIX_FMT_PISP_COMP2_GBRG	v4l2_fourcc('P', 'C', '2', 'g') /* PiSP 8-bit mode 2 compressed GBRG bayer */
4358 #define V4L2_PIX_FMT_PISP_COMP2_BGGR	v4l2_fourcc('P', 'C', '2', 'B') /* PiSP 8-bit mode 2 compressed BGGR bayer */
4359 #define V4L2_PIX_FMT_PISP_COMP2_MONO	v4l2_fourcc('P', 'C', '2', 'M') /* PiSP 8-bit mode 2 compressed monochrome */
4360 
4361 /* SDR formats - used only for Software Defined Radio devices */
4362 #define V4L2_SDR_FMT_CU8          v4l2_fourcc('C', 'U', '0', '8') /* IQ u8 */
4363 #define V4L2_SDR_FMT_CU16LE       v4l2_fourcc('C', 'U', '1', '6') /* IQ u16le */
4364 #define V4L2_SDR_FMT_CS8          v4l2_fourcc('C', 'S', '0', '8') /* complex s8 */
4365 #define V4L2_SDR_FMT_CS14LE       v4l2_fourcc('C', 'S', '1', '4') /* complex s14le */
4366 #define V4L2_SDR_FMT_RU12LE       v4l2_fourcc('R', 'U', '1', '2') /* real u12le */
4367 #define V4L2_SDR_FMT_PCU16BE	  v4l2_fourcc('P', 'C', '1', '6') /* planar complex u16be */
4368 #define V4L2_SDR_FMT_PCU18BE	  v4l2_fourcc('P', 'C', '1', '8') /* planar complex u18be */
4369 #define V4L2_SDR_FMT_PCU20BE	  v4l2_fourcc('P', 'C', '2', '0') /* planar complex u20be */
4370 
4371 /* Touch formats - used for Touch devices */
4372 #define V4L2_TCH_FMT_DELTA_TD16	v4l2_fourcc('T', 'D', '1', '6') /* 16-bit signed deltas */
4373 #define V4L2_TCH_FMT_DELTA_TD08	v4l2_fourcc('T', 'D', '0', '8') /* 8-bit signed deltas */
4374 #define V4L2_TCH_FMT_TU16	v4l2_fourcc('T', 'U', '1', '6') /* 16-bit unsigned touch data */
4375 #define V4L2_TCH_FMT_TU08	v4l2_fourcc('T', 'U', '0', '8') /* 8-bit unsigned touch data */
4376 
4377 /* Meta-data formats */
4378 #define V4L2_META_FMT_VSP1_HGO    v4l2_fourcc('V', 'S', 'P', 'H') /* R-Car VSP1 1-D Histogram */
4379 #define V4L2_META_FMT_VSP1_HGT    v4l2_fourcc('V', 'S', 'P', 'T') /* R-Car VSP1 2-D Histogram */
4380 #define V4L2_META_FMT_UVC         v4l2_fourcc('U', 'V', 'C', 'H') /* UVC Payload Header metadata */
4381 #define V4L2_META_FMT_D4XX        v4l2_fourcc('D', '4', 'X', 'X') /* D4XX Payload Header metadata */
4382 #define V4L2_META_FMT_VIVID	  v4l2_fourcc('V', 'I', 'V', 'D') /* Vivid Metadata */
4383 
4384 /* Vendor specific - used for RK_ISP1 camera sub-system */
4385 #define V4L2_META_FMT_RK_ISP1_PARAMS	v4l2_fourcc('R', 'K', '1', 'P') /* Rockchip ISP1 3A Parameters */
4386 #define V4L2_META_FMT_RK_ISP1_STAT_3A	v4l2_fourcc('R', 'K', '1', 'S') /* Rockchip ISP1 3A Statistics */
4387 #define V4L2_META_FMT_RK_ISP1_EXT_PARAMS	v4l2_fourcc('R', 'K', '1', 'E') /* Rockchip ISP1 3a Extensible Parameters */
4388 
4389 /* Vendor specific - used for RaspberryPi PiSP */
4390 #define V4L2_META_FMT_RPI_BE_CFG	v4l2_fourcc('R', 'P', 'B', 'C') /* PiSP BE configuration */
4391 #define V4L2_META_FMT_RPI_FE_CFG	v4l2_fourcc('R', 'P', 'F', 'C') /* PiSP FE configuration */
4392 #define V4L2_META_FMT_RPI_FE_STATS	v4l2_fourcc('R', 'P', 'F', 'S') /* PiSP FE stats */
4393 
4394 /* priv field value to indicates that subsequent fields are valid. */
4395 #define V4L2_PIX_FMT_PRIV_MAGIC		0xfeedcafe
4396 
4397 /* Flags */
4398 #define V4L2_PIX_FMT_FLAG_PREMUL_ALPHA	0x00000001
4399 #define V4L2_PIX_FMT_FLAG_SET_CSC	0x00000002
4400 
4401 /*
4402  *	F O R M A T   E N U M E R A T I O N
4403  */
4404 struct v4l2_fmtdesc {
4405 	u_int32_t		    index;             /* Format number      */
4406 	u_int32_t		    type;              /* enum v4l2_buf_type */
4407 	u_int32_t               flags;
4408 	u_int8_t		    description[32];   /* Description string */
4409 	u_int32_t		    pixelformat;       /* Format fourcc      */
4410 	u_int32_t		    mbus_code;		/* Media bus code    */
4411 	u_int32_t		    reserved[3];
4412 };
4413 
4414 #define V4L2_FMT_FLAG_COMPRESSED		0x0001
4415 #define V4L2_FMT_FLAG_EMULATED			0x0002
4416 #define V4L2_FMT_FLAG_CONTINUOUS_BYTESTREAM	0x0004
4417 #define V4L2_FMT_FLAG_DYN_RESOLUTION		0x0008
4418 #define V4L2_FMT_FLAG_ENC_CAP_FRAME_INTERVAL	0x0010
4419 #define V4L2_FMT_FLAG_CSC_COLORSPACE		0x0020
4420 #define V4L2_FMT_FLAG_CSC_XFER_FUNC		0x0040
4421 #define V4L2_FMT_FLAG_CSC_YCBCR_ENC		0x0080
4422 #define V4L2_FMT_FLAG_CSC_HSV_ENC		V4L2_FMT_FLAG_CSC_YCBCR_ENC
4423 #define V4L2_FMT_FLAG_CSC_QUANTIZATION		0x0100
4424 #define V4L2_FMT_FLAG_META_LINE_BASED		0x0200
4425 
4426 /*  Format description flag, to be ORed with the index */
4427 #define V4L2_FMTDESC_FLAG_ENUM_ALL		0x80000000
4428 
4429 	/* Frame Size and frame rate enumeration */
4430 /*
4431  *	F R A M E   S I Z E   E N U M E R A T I O N
4432  */
4433 enum v4l2_frmsizetypes {
4434 	V4L2_FRMSIZE_TYPE_DISCRETE	= 1,
4435 	V4L2_FRMSIZE_TYPE_CONTINUOUS	= 2,
4436 	V4L2_FRMSIZE_TYPE_STEPWISE	= 3,
4437 };
4438 
4439 struct v4l2_frmsize_discrete {
4440 	u_int32_t			width;		/* Frame width [pixel] */
4441 	u_int32_t			height;		/* Frame height [pixel] */
4442 };
4443 
4444 struct v4l2_frmsize_stepwise {
4445 	u_int32_t			min_width;	/* Minimum frame width [pixel] */
4446 	u_int32_t			max_width;	/* Maximum frame width [pixel] */
4447 	u_int32_t			step_width;	/* Frame width step size [pixel] */
4448 	u_int32_t			min_height;	/* Minimum frame height [pixel] */
4449 	u_int32_t			max_height;	/* Maximum frame height [pixel] */
4450 	u_int32_t			step_height;	/* Frame height step size [pixel] */
4451 };
4452 
4453 struct v4l2_frmsizeenum {
4454 	u_int32_t			index;		/* Frame size number */
4455 	u_int32_t			pixel_format;	/* Pixel format */
4456 	u_int32_t			type;		/* Frame size type the device supports. */
4457 
4458 	union {					/* Frame size */
4459 		struct v4l2_frmsize_discrete	discrete;
4460 		struct v4l2_frmsize_stepwise	stepwise;
4461 	};
4462 
4463 	u_int32_t   reserved[2];			/* Reserved space for future use */
4464 };
4465 
4466 /*
4467  *	F R A M E   R A T E   E N U M E R A T I O N
4468  */
4469 enum v4l2_frmivaltypes {
4470 	V4L2_FRMIVAL_TYPE_DISCRETE	= 1,
4471 	V4L2_FRMIVAL_TYPE_CONTINUOUS	= 2,
4472 	V4L2_FRMIVAL_TYPE_STEPWISE	= 3,
4473 };
4474 
4475 struct v4l2_frmival_stepwise {
4476 	struct v4l2_fract	min;		/* Minimum frame interval [s] */
4477 	struct v4l2_fract	max;		/* Maximum frame interval [s] */
4478 	struct v4l2_fract	step;		/* Frame interval step size [s] */
4479 };
4480 
4481 struct v4l2_frmivalenum {
4482 	u_int32_t			index;		/* Frame format index */
4483 	u_int32_t			pixel_format;	/* Pixel format */
4484 	u_int32_t			width;		/* Frame width */
4485 	u_int32_t			height;		/* Frame height */
4486 	u_int32_t			type;		/* Frame interval type the device supports. */
4487 
4488 	union {					/* Frame interval */
4489 		struct v4l2_fract		discrete;
4490 		struct v4l2_frmival_stepwise	stepwise;
4491 	};
4492 
4493 	u_int32_t	reserved[2];			/* Reserved space for future use */
4494 };
4495 
4496 /*
4497  *	T I M E C O D E
4498  */
4499 struct v4l2_timecode {
4500 	u_int32_t	type;
4501 	u_int32_t	flags;
4502 	u_int8_t	frames;
4503 	u_int8_t	seconds;
4504 	u_int8_t	minutes;
4505 	u_int8_t	hours;
4506 	u_int8_t	userbits[4];
4507 };
4508 
4509 /*  Type  */
4510 #define V4L2_TC_TYPE_24FPS		1
4511 #define V4L2_TC_TYPE_25FPS		2
4512 #define V4L2_TC_TYPE_30FPS		3
4513 #define V4L2_TC_TYPE_50FPS		4
4514 #define V4L2_TC_TYPE_60FPS		5
4515 
4516 /*  Flags  */
4517 #define V4L2_TC_FLAG_DROPFRAME		0x0001 /* "drop-frame" mode */
4518 #define V4L2_TC_FLAG_COLORFRAME		0x0002
4519 #define V4L2_TC_USERBITS_field		0x000C
4520 #define V4L2_TC_USERBITS_USERDEFINED	0x0000
4521 #define V4L2_TC_USERBITS_8BITCHARS	0x0008
4522 /* The above is based on SMPTE timecodes */
4523 
4524 struct v4l2_jpegcompression {
4525 	int quality;
4526 
4527 	int  APPn;              /* Number of APP segment to be written,
4528 				 * must be 0..15 */
4529 	int  APP_len;           /* Length of data in JPEG APPn segment */
4530 	char APP_data[60];      /* Data in the JPEG APPn segment. */
4531 
4532 	int  COM_len;           /* Length of data in JPEG COM segment */
4533 	char COM_data[60];      /* Data in JPEG COM segment */
4534 
4535 	u_int32_t jpeg_markers;     /* Which markers should go into the JPEG
4536 				 * output. Unless you exactly know what
4537 				 * you do, leave them untouched.
4538 				 * Including less markers will make the
4539 				 * resulting code smaller, but there will
4540 				 * be fewer applications which can read it.
4541 				 * The presence of the APP and COM marker
4542 				 * is influenced by APP_len and COM_len
4543 				 * ONLY, not by this property! */
4544 
4545 #define V4L2_JPEG_MARKER_DHT (1<<3)    /* Define Huffman Tables */
4546 #define V4L2_JPEG_MARKER_DQT (1<<4)    /* Define Quantization Tables */
4547 #define V4L2_JPEG_MARKER_DRI (1<<5)    /* Define Restart Interval */
4548 #define V4L2_JPEG_MARKER_COM (1<<6)    /* Comment segment */
4549 #define V4L2_JPEG_MARKER_APP (1<<7)    /* App segment, driver will
4550 					* always use APP0 */
4551 };
4552 
4553 /*
4554  *	M E M O R Y - M A P P I N G   B U F F E R S
4555  */
4556 
4557 struct v4l2_requestbuffers {
4558 	u_int32_t			count;
4559 	u_int32_t			type;		/* enum v4l2_buf_type */
4560 	u_int32_t			memory;		/* enum v4l2_memory */
4561 	u_int32_t			capabilities;
4562 	u_int8_t			flags;
4563 	u_int8_t			reserved[3];
4564 };
4565 
4566 #define V4L2_MEMORY_FLAG_NON_COHERENT			(1 << 0)
4567 
4568 /* capabilities for struct v4l2_requestbuffers and v4l2_create_buffers */
4569 #define V4L2_BUF_CAP_SUPPORTS_MMAP			(1 << 0)
4570 #define V4L2_BUF_CAP_SUPPORTS_USERPTR			(1 << 1)
4571 #define V4L2_BUF_CAP_SUPPORTS_DMABUF			(1 << 2)
4572 #define V4L2_BUF_CAP_SUPPORTS_REQUESTS			(1 << 3)
4573 #define V4L2_BUF_CAP_SUPPORTS_ORPHANED_BUFS		(1 << 4)
4574 #define V4L2_BUF_CAP_SUPPORTS_M2M_HOLD_CAPTURE_BUF	(1 << 5)
4575 #define V4L2_BUF_CAP_SUPPORTS_MMAP_CACHE_HINTS		(1 << 6)
4576 #define V4L2_BUF_CAP_SUPPORTS_MAX_NUM_BUFFERS		(1 << 7)
4577 #define V4L2_BUF_CAP_SUPPORTS_REMOVE_BUFS		(1 << 8)
4578 
4579 /**
4580  * struct v4l2_plane - plane info for multi-planar buffers
4581  * @bytesused:		number of bytes occupied by data in the plane (payload)
4582  * @length:		size of this plane (NOT the payload) in bytes
4583  * @m.mem_offset:	when memory in the associated struct v4l2_buffer is
4584  *			V4L2_MEMORY_MMAP, equals the offset from the start of
4585  *			the device memory for this plane (or is a "cookie" that
4586  *			should be passed to mmap() called on the video node)
4587  * @m.userptr:		when memory is V4L2_MEMORY_USERPTR, a userspace pointer
4588  *			pointing to this plane
4589  * @m.fd:		when memory is V4L2_MEMORY_DMABUF, a userspace file
4590  *			descriptor associated with this plane
4591  * @m:			union of @mem_offset, @userptr and @fd
4592  * @data_offset:	offset in the plane to the start of data; usually 0,
4593  *			unless there is a header in front of the data
4594  * @reserved:		drivers and applications must zero this array
4595  *
4596  * Multi-planar buffers consist of one or more planes, e.g. an YCbCr buffer
4597  * with two planes can have one plane for Y, and another for interleaved CbCr
4598  * components. Each plane can reside in a separate memory buffer, or even in
4599  * a completely separate memory node (e.g. in embedded devices).
4600  */
4601 struct v4l2_plane {
4602 	u_int32_t			bytesused;
4603 	u_int32_t			length;
4604 	union {
4605 		u_int32_t		mem_offset;
4606 		unsigned long	userptr;
4607 		int32_t		fd;
4608 	} m;
4609 	u_int32_t			data_offset;
4610 	u_int32_t			reserved[11];
4611 };
4612 
4613 /**
4614  * struct v4l2_buffer - video buffer info
4615  * @index:	id number of the buffer
4616  * @type:	enum v4l2_buf_type; buffer type (type == *_MPLANE for
4617  *		multiplanar buffers);
4618  * @bytesused:	number of bytes occupied by data in the buffer (payload);
4619  *		unused (set to 0) for multiplanar buffers
4620  * @flags:	buffer informational flags
4621  * @field:	enum v4l2_field; field order of the image in the buffer
4622  * @timestamp:	frame timestamp
4623  * @timecode:	frame timecode
4624  * @sequence:	sequence count of this frame
4625  * @memory:	enum v4l2_memory; the method, in which the actual video data is
4626  *		passed
4627  * @m.offset:	for non-multiplanar buffers with memory == V4L2_MEMORY_MMAP;
4628  *		offset from the start of the device memory for this plane,
4629  *		(or a "cookie" that should be passed to mmap() as offset)
4630  * @m.userptr:	for non-multiplanar buffers with memory == V4L2_MEMORY_USERPTR;
4631  *		a userspace pointer pointing to this buffer
4632  * @m.fd:		for non-multiplanar buffers with memory == V4L2_MEMORY_DMABUF;
4633  *		a userspace file descriptor associated with this buffer
4634  * @m.planes:	for multiplanar buffers; userspace pointer to the array of plane
4635  *		info structs for this buffer
4636  * @m:		union of @offset, @userptr, @planes and @fd
4637  * @length:	size in bytes of the buffer (NOT its payload) for single-plane
4638  *		buffers (when type != *_MPLANE); number of elements in the
4639  *		planes array for multi-plane buffers
4640  * @reserved2:	drivers and applications must zero this field
4641  * @request_fd: fd of the request that this buffer should use
4642  * @reserved:	for backwards compatibility with applications that do not know
4643  *		about @request_fd
4644  *
4645  * Contains data exchanged by application and driver using one of the Streaming
4646  * I/O methods.
4647  */
4648 struct v4l2_buffer {
4649 	u_int32_t			index;
4650 	u_int32_t			type;
4651 	u_int32_t			bytesused;
4652 	u_int32_t			flags;
4653 	u_int32_t			field;
4654 	struct timeval			timestamp;
4655 	struct v4l2_timecode		timecode;
4656 	u_int32_t			sequence;
4657 
4658 	/* memory location */
4659 	u_int32_t			memory;
4660 	union {
4661 		u_int32_t       offset;
4662 		unsigned long   userptr;
4663 		struct v4l2_plane *planes;
4664 		int32_t		fd;
4665 	} m;
4666 	u_int32_t			length;
4667 	u_int32_t			reserved2;
4668 	union {
4669 		int32_t			request_fd;
4670 		u_int32_t		reserved;
4671 	};
4672 };
4673 
4674 /**
4675  * v4l2_timeval_to_ns - Convert timeval to nanoseconds
4676  * @tv:		pointer to the timeval variable to be converted
4677  *
4678  * Returns the scalar nanosecond representation of the timeval
4679  * parameter.
4680  */
v4l2_timeval_to_ns(const struct timeval * tv)4681 static inline u_int64_t v4l2_timeval_to_ns(const struct timeval *tv)
4682 {
4683 	return (u_int64_t)tv->tv_sec * 1000000000ULL + tv->tv_usec * 1000;
4684 }
4685 
4686 /*  Flags for 'flags' field */
4687 /* Buffer is mapped (flag) */
4688 #define V4L2_BUF_FLAG_MAPPED			0x00000001
4689 /* Buffer is queued for processing */
4690 #define V4L2_BUF_FLAG_QUEUED			0x00000002
4691 /* Buffer is ready */
4692 #define V4L2_BUF_FLAG_DONE			0x00000004
4693 /* Image is a keyframe (I-frame) */
4694 #define V4L2_BUF_FLAG_KEYFRAME			0x00000008
4695 /* Image is a P-frame */
4696 #define V4L2_BUF_FLAG_PFRAME			0x00000010
4697 /* Image is a B-frame */
4698 #define V4L2_BUF_FLAG_BFRAME			0x00000020
4699 /* Buffer is ready, but the data contained within is corrupted. */
4700 #define V4L2_BUF_FLAG_ERROR			0x00000040
4701 /* Buffer is added to an unqueued request */
4702 #define V4L2_BUF_FLAG_IN_REQUEST		0x00000080
4703 /* timecode field is valid */
4704 #define V4L2_BUF_FLAG_TIMECODE			0x00000100
4705 /* Don't return the capture buffer until OUTPUT timestamp changes */
4706 #define V4L2_BUF_FLAG_M2M_HOLD_CAPTURE_BUF	0x00000200
4707 /* Buffer is prepared for queuing */
4708 #define V4L2_BUF_FLAG_PREPARED			0x00000400
4709 /* Cache handling flags */
4710 #define V4L2_BUF_FLAG_NO_CACHE_INVALIDATE	0x00000800
4711 #define V4L2_BUF_FLAG_NO_CACHE_CLEAN		0x00001000
4712 /* Timestamp type */
4713 #define V4L2_BUF_FLAG_TIMESTAMP_MASK		0x0000e000
4714 #define V4L2_BUF_FLAG_TIMESTAMP_UNKNOWN		0x00000000
4715 #define V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC	0x00002000
4716 #define V4L2_BUF_FLAG_TIMESTAMP_COPY		0x00004000
4717 /* Timestamp sources. */
4718 #define V4L2_BUF_FLAG_TSTAMP_SRC_MASK		0x00070000
4719 #define V4L2_BUF_FLAG_TSTAMP_SRC_EOF		0x00000000
4720 #define V4L2_BUF_FLAG_TSTAMP_SRC_SOE		0x00010000
4721 /* mem2mem encoder/decoder */
4722 #define V4L2_BUF_FLAG_LAST			0x00100000
4723 /* request_fd is valid */
4724 #define V4L2_BUF_FLAG_REQUEST_FD		0x00800000
4725 
4726 /**
4727  * struct v4l2_exportbuffer - export of video buffer as DMABUF file descriptor
4728  *
4729  * @index:	id number of the buffer
4730  * @type:	enum v4l2_buf_type; buffer type (type == *_MPLANE for
4731  *		multiplanar buffers);
4732  * @plane:	index of the plane to be exported, 0 for single plane queues
4733  * @flags:	flags for newly created file, currently only O_CLOEXEC is
4734  *		supported, refer to manual of open syscall for more details
4735  * @fd:		file descriptor associated with DMABUF (set by driver)
4736  * @reserved:	drivers and applications must zero this array
4737  *
4738  * Contains data used for exporting a video buffer as DMABUF file descriptor.
4739  * The buffer is identified by a 'cookie' returned by VIDIOC_QUERYBUF
4740  * (identical to the cookie used to mmap() the buffer to userspace). All
4741  * reserved fields must be set to zero. The field reserved0 is expected to
4742  * become a structure 'type' allowing an alternative layout of the structure
4743  * content. Therefore this field should not be used for any other extensions.
4744  */
4745 struct v4l2_exportbuffer {
4746 	u_int32_t		type; /* enum v4l2_buf_type */
4747 	u_int32_t		index;
4748 	u_int32_t		plane;
4749 	u_int32_t		flags;
4750 	int32_t		fd;
4751 	u_int32_t		reserved[11];
4752 };
4753 
4754 /*
4755  *	O V E R L A Y   P R E V I E W
4756  */
4757 struct v4l2_framebuffer {
4758 	u_int32_t			capability;
4759 	u_int32_t			flags;
4760 /* FIXME: in theory we should pass something like PCI device + memory
4761  * region + offset instead of some physical address */
4762 	void                    *base;
4763 	struct {
4764 		u_int32_t		width;
4765 		u_int32_t		height;
4766 		u_int32_t		pixelformat;
4767 		u_int32_t		field;		/* enum v4l2_field */
4768 		u_int32_t		bytesperline;	/* for padding, zero if unused */
4769 		u_int32_t		sizeimage;
4770 		u_int32_t		colorspace;	/* enum v4l2_colorspace */
4771 		u_int32_t		priv;		/* reserved field, set to 0 */
4772 	} fmt;
4773 };
4774 /*  Flags for the 'capability' field. Read only */
4775 #define V4L2_FBUF_CAP_EXTERNOVERLAY	0x0001
4776 #define V4L2_FBUF_CAP_CHROMAKEY		0x0002
4777 #define V4L2_FBUF_CAP_LIST_CLIPPING     0x0004
4778 #define V4L2_FBUF_CAP_BITMAP_CLIPPING	0x0008
4779 #define V4L2_FBUF_CAP_LOCAL_ALPHA	0x0010
4780 #define V4L2_FBUF_CAP_GLOBAL_ALPHA	0x0020
4781 #define V4L2_FBUF_CAP_LOCAL_INV_ALPHA	0x0040
4782 #define V4L2_FBUF_CAP_SRC_CHROMAKEY	0x0080
4783 /*  Flags for the 'flags' field. */
4784 #define V4L2_FBUF_FLAG_PRIMARY		0x0001
4785 #define V4L2_FBUF_FLAG_OVERLAY		0x0002
4786 #define V4L2_FBUF_FLAG_CHROMAKEY	0x0004
4787 #define V4L2_FBUF_FLAG_LOCAL_ALPHA	0x0008
4788 #define V4L2_FBUF_FLAG_GLOBAL_ALPHA	0x0010
4789 #define V4L2_FBUF_FLAG_LOCAL_INV_ALPHA	0x0020
4790 #define V4L2_FBUF_FLAG_SRC_CHROMAKEY	0x0040
4791 
4792 struct v4l2_clip {
4793 	struct v4l2_rect        c;
4794 	struct v4l2_clip	__user *next;
4795 };
4796 
4797 struct v4l2_window {
4798 	struct v4l2_rect        w;
4799 	u_int32_t			field;	 /* enum v4l2_field */
4800 	u_int32_t			chromakey;
4801 	struct v4l2_clip	*clips;
4802 	u_int32_t			clipcount;
4803 	void			__user *bitmap;
4804 	u_int8_t                    global_alpha;
4805 };
4806 
4807 /*
4808  *	C A P T U R E   P A R A M E T E R S
4809  */
4810 struct v4l2_captureparm {
4811 	u_int32_t		   capability;	  /*  Supported modes */
4812 	u_int32_t		   capturemode;	  /*  Current mode */
4813 	struct v4l2_fract  timeperframe;  /*  Time per frame in seconds */
4814 	u_int32_t		   extendedmode;  /*  Driver-specific extensions */
4815 	u_int32_t              readbuffers;   /*  # of buffers for read */
4816 	u_int32_t		   reserved[4];
4817 };
4818 
4819 /*  Flags for 'capability' and 'capturemode' fields */
4820 #define V4L2_MODE_HIGHQUALITY	0x0001	/*  High quality imaging mode */
4821 #define V4L2_CAP_TIMEPERFRAME	0x1000	/*  timeperframe field is supported */
4822 
4823 struct v4l2_outputparm {
4824 	u_int32_t		   capability;	 /*  Supported modes */
4825 	u_int32_t		   outputmode;	 /*  Current mode */
4826 	struct v4l2_fract  timeperframe; /*  Time per frame in seconds */
4827 	u_int32_t		   extendedmode; /*  Driver-specific extensions */
4828 	u_int32_t              writebuffers; /*  # of buffers for write */
4829 	u_int32_t		   reserved[4];
4830 };
4831 
4832 /*
4833  *	I N P U T   I M A G E   C R O P P I N G
4834  */
4835 struct v4l2_cropcap {
4836 	u_int32_t			type;	/* enum v4l2_buf_type */
4837 	struct v4l2_rect        bounds;
4838 	struct v4l2_rect        defrect;
4839 	struct v4l2_fract       pixelaspect;
4840 };
4841 
4842 struct v4l2_crop {
4843 	u_int32_t			type;	/* enum v4l2_buf_type */
4844 	struct v4l2_rect        c;
4845 };
4846 
4847 /**
4848  * struct v4l2_selection - selection info
4849  * @type:	buffer type (do not use *_MPLANE types)
4850  * @target:	Selection target, used to choose one of possible rectangles;
4851  *		defined in v4l2-common.h; V4L2_SEL_TGT_* .
4852  * @flags:	constraints flags, defined in v4l2-common.h; V4L2_SEL_FLAG_*.
4853  * @r:		coordinates of selection window
4854  * @reserved:	for future use, rounds structure size to 64 bytes, set to zero
4855  *
4856  * Hardware may use multiple helper windows to process a video stream.
4857  * The structure is used to exchange this selection areas between
4858  * an application and a driver.
4859  */
4860 struct v4l2_selection {
4861 	u_int32_t			type;
4862 	u_int32_t			target;
4863 	u_int32_t                   flags;
4864 	struct v4l2_rect        r;
4865 	u_int32_t                   reserved[9];
4866 };
4867 
4868 
4869 /*
4870  *      A N A L O G   V I D E O   S T A N D A R D
4871  */
4872 
4873 typedef u_int64_t v4l2_std_id;
4874 
4875 /*
4876  * Attention: Keep the V4L2_STD_* bit definitions in sync with
4877  * include/dt-bindings/display/sdtv-standards.h SDTV_STD_* bit definitions.
4878  */
4879 /* one bit for each */
4880 #define V4L2_STD_PAL_B          ((v4l2_std_id)0x00000001)
4881 #define V4L2_STD_PAL_B1         ((v4l2_std_id)0x00000002)
4882 #define V4L2_STD_PAL_G          ((v4l2_std_id)0x00000004)
4883 #define V4L2_STD_PAL_H          ((v4l2_std_id)0x00000008)
4884 #define V4L2_STD_PAL_I          ((v4l2_std_id)0x00000010)
4885 #define V4L2_STD_PAL_D          ((v4l2_std_id)0x00000020)
4886 #define V4L2_STD_PAL_D1         ((v4l2_std_id)0x00000040)
4887 #define V4L2_STD_PAL_K          ((v4l2_std_id)0x00000080)
4888 
4889 #define V4L2_STD_PAL_M          ((v4l2_std_id)0x00000100)
4890 #define V4L2_STD_PAL_N          ((v4l2_std_id)0x00000200)
4891 #define V4L2_STD_PAL_Nc         ((v4l2_std_id)0x00000400)
4892 #define V4L2_STD_PAL_60         ((v4l2_std_id)0x00000800)
4893 
4894 #define V4L2_STD_NTSC_M         ((v4l2_std_id)0x00001000)	/* BTSC */
4895 #define V4L2_STD_NTSC_M_JP      ((v4l2_std_id)0x00002000)	/* EIA-J */
4896 #define V4L2_STD_NTSC_443       ((v4l2_std_id)0x00004000)
4897 #define V4L2_STD_NTSC_M_KR      ((v4l2_std_id)0x00008000)	/* FM A2 */
4898 
4899 #define V4L2_STD_SECAM_B        ((v4l2_std_id)0x00010000)
4900 #define V4L2_STD_SECAM_D        ((v4l2_std_id)0x00020000)
4901 #define V4L2_STD_SECAM_G        ((v4l2_std_id)0x00040000)
4902 #define V4L2_STD_SECAM_H        ((v4l2_std_id)0x00080000)
4903 #define V4L2_STD_SECAM_K        ((v4l2_std_id)0x00100000)
4904 #define V4L2_STD_SECAM_K1       ((v4l2_std_id)0x00200000)
4905 #define V4L2_STD_SECAM_L        ((v4l2_std_id)0x00400000)
4906 #define V4L2_STD_SECAM_LC       ((v4l2_std_id)0x00800000)
4907 
4908 /* ATSC/HDTV */
4909 #define V4L2_STD_ATSC_8_VSB     ((v4l2_std_id)0x01000000)
4910 #define V4L2_STD_ATSC_16_VSB    ((v4l2_std_id)0x02000000)
4911 
4912 /* FIXME:
4913    Although std_id is 64 bits, there is an issue on PPC32 architecture that
4914    makes switch(u_int64_t) to break. So, there's a hack on v4l2-common.c rounding
4915    this value to 32 bits.
4916    As, currently, the max value is for V4L2_STD_ATSC_16_VSB (30 bits wide),
4917    it should work fine. However, if needed to add more than two standards,
4918    v4l2-common.c should be fixed.
4919  */
4920 
4921 /*
4922  * Some macros to merge video standards in order to make live easier for the
4923  * drivers and V4L2 applications
4924  */
4925 
4926 /*
4927  * "Common" NTSC/M - It should be noticed that V4L2_STD_NTSC_443 is
4928  * Missing here.
4929  */
4930 #define V4L2_STD_NTSC           (V4L2_STD_NTSC_M	|\
4931 				 V4L2_STD_NTSC_M_JP     |\
4932 				 V4L2_STD_NTSC_M_KR)
4933 /* Secam macros */
4934 #define V4L2_STD_SECAM_DK	(V4L2_STD_SECAM_D	|\
4935 				 V4L2_STD_SECAM_K	|\
4936 				 V4L2_STD_SECAM_K1)
4937 /* All Secam Standards */
4938 #define V4L2_STD_SECAM		(V4L2_STD_SECAM_B	|\
4939 				 V4L2_STD_SECAM_G	|\
4940 				 V4L2_STD_SECAM_H	|\
4941 				 V4L2_STD_SECAM_DK	|\
4942 				 V4L2_STD_SECAM_L       |\
4943 				 V4L2_STD_SECAM_LC)
4944 /* PAL macros */
4945 #define V4L2_STD_PAL_BG		(V4L2_STD_PAL_B		|\
4946 				 V4L2_STD_PAL_B1	|\
4947 				 V4L2_STD_PAL_G)
4948 #define V4L2_STD_PAL_DK		(V4L2_STD_PAL_D		|\
4949 				 V4L2_STD_PAL_D1	|\
4950 				 V4L2_STD_PAL_K)
4951 /*
4952  * "Common" PAL - This macro is there to be compatible with the old
4953  * V4L1 concept of "PAL": /BGDKHI.
4954  * Several PAL standards are missing here: /M, /N and /Nc
4955  */
4956 #define V4L2_STD_PAL		(V4L2_STD_PAL_BG	|\
4957 				 V4L2_STD_PAL_DK	|\
4958 				 V4L2_STD_PAL_H		|\
4959 				 V4L2_STD_PAL_I)
4960 /* Chroma "agnostic" standards */
4961 #define V4L2_STD_B		(V4L2_STD_PAL_B		|\
4962 				 V4L2_STD_PAL_B1	|\
4963 				 V4L2_STD_SECAM_B)
4964 #define V4L2_STD_G		(V4L2_STD_PAL_G		|\
4965 				 V4L2_STD_SECAM_G)
4966 #define V4L2_STD_H		(V4L2_STD_PAL_H		|\
4967 				 V4L2_STD_SECAM_H)
4968 #define V4L2_STD_L		(V4L2_STD_SECAM_L	|\
4969 				 V4L2_STD_SECAM_LC)
4970 #define V4L2_STD_GH		(V4L2_STD_G		|\
4971 				 V4L2_STD_H)
4972 #define V4L2_STD_DK		(V4L2_STD_PAL_DK	|\
4973 				 V4L2_STD_SECAM_DK)
4974 #define V4L2_STD_BG		(V4L2_STD_B		|\
4975 				 V4L2_STD_G)
4976 #define V4L2_STD_MN		(V4L2_STD_PAL_M		|\
4977 				 V4L2_STD_PAL_N		|\
4978 				 V4L2_STD_PAL_Nc	|\
4979 				 V4L2_STD_NTSC)
4980 
4981 /* Standards where MTS/BTSC stereo could be found */
4982 #define V4L2_STD_MTS		(V4L2_STD_NTSC_M	|\
4983 				 V4L2_STD_PAL_M		|\
4984 				 V4L2_STD_PAL_N		|\
4985 				 V4L2_STD_PAL_Nc)
4986 
4987 /* Standards for Countries with 60Hz Line frequency */
4988 #define V4L2_STD_525_60		(V4L2_STD_PAL_M		|\
4989 				 V4L2_STD_PAL_60	|\
4990 				 V4L2_STD_NTSC		|\
4991 				 V4L2_STD_NTSC_443)
4992 /* Standards for Countries with 50Hz Line frequency */
4993 #define V4L2_STD_625_50		(V4L2_STD_PAL		|\
4994 				 V4L2_STD_PAL_N		|\
4995 				 V4L2_STD_PAL_Nc	|\
4996 				 V4L2_STD_SECAM)
4997 
4998 #define V4L2_STD_ATSC           (V4L2_STD_ATSC_8_VSB    |\
4999 				 V4L2_STD_ATSC_16_VSB)
5000 /* Macros with none and all analog standards */
5001 #define V4L2_STD_UNKNOWN        0
5002 #define V4L2_STD_ALL            (V4L2_STD_525_60	|\
5003 				 V4L2_STD_625_50)
5004 
5005 struct v4l2_standard {
5006 	u_int32_t		     index;
5007 	v4l2_std_id          id;
5008 	u_int8_t		     name[24];
5009 	struct v4l2_fract    frameperiod; /* Frames, not fields */
5010 	u_int32_t		     framelines;
5011 	u_int32_t		     reserved[4];
5012 };
5013 
5014 /*
5015  *	D V	B T	T I M I N G S
5016  */
5017 
5018 /** struct v4l2_bt_timings - BT.656/BT.1120 timing data
5019  * @width:	total width of the active video in pixels
5020  * @height:	total height of the active video in lines
5021  * @interlaced:	Interlaced or progressive
5022  * @polarities:	Positive or negative polarities
5023  * @pixelclock:	Pixel clock in HZ. Ex. 74.25MHz->74250000
5024  * @hfrontporch:Horizontal front porch in pixels
5025  * @hsync:	Horizontal Sync length in pixels
5026  * @hbackporch:	Horizontal back porch in pixels
5027  * @vfrontporch:Vertical front porch in lines
5028  * @vsync:	Vertical Sync length in lines
5029  * @vbackporch:	Vertical back porch in lines
5030  * @il_vfrontporch:Vertical front porch for the even field
5031  *		(aka field 2) of interlaced field formats
5032  * @il_vsync:	Vertical Sync length for the even field
5033  *		(aka field 2) of interlaced field formats
5034  * @il_vbackporch:Vertical back porch for the even field
5035  *		(aka field 2) of interlaced field formats
5036  * @standards:	Standards the timing belongs to
5037  * @flags:	Flags
5038  * @picture_aspect: The picture aspect ratio (hor/vert).
5039  * @cea861_vic:	VIC code as per the CEA-861 standard.
5040  * @hdmi_vic:	VIC code as per the HDMI standard.
5041  * @reserved:	Reserved fields, must be zeroed.
5042  *
5043  * A note regarding vertical interlaced timings: height refers to the total
5044  * height of the active video frame (= two fields). The blanking timings refer
5045  * to the blanking of each field. So the height of the total frame is
5046  * calculated as follows:
5047  *
5048  * tot_height = height + vfrontporch + vsync + vbackporch +
5049  *                       il_vfrontporch + il_vsync + il_vbackporch
5050  *
5051  * The active height of each field is height / 2.
5052  */
5053 struct v4l2_bt_timings {
5054 	u_int32_t	width;
5055 	u_int32_t	height;
5056 	u_int32_t	interlaced;
5057 	u_int32_t	polarities;
5058 	u_int64_t	pixelclock;
5059 	u_int32_t	hfrontporch;
5060 	u_int32_t	hsync;
5061 	u_int32_t	hbackporch;
5062 	u_int32_t	vfrontporch;
5063 	u_int32_t	vsync;
5064 	u_int32_t	vbackporch;
5065 	u_int32_t	il_vfrontporch;
5066 	u_int32_t	il_vsync;
5067 	u_int32_t	il_vbackporch;
5068 	u_int32_t	standards;
5069 	u_int32_t	flags;
5070 	struct v4l2_fract picture_aspect;
5071 	u_int8_t	cea861_vic;
5072 	u_int8_t	hdmi_vic;
5073 	u_int8_t	reserved[46];
5074 } __attribute__ ((packed));
5075 
5076 /* Interlaced or progressive format */
5077 #define	V4L2_DV_PROGRESSIVE	0
5078 #define	V4L2_DV_INTERLACED	1
5079 
5080 /* Polarities. If bit is not set, it is assumed to be negative polarity */
5081 #define V4L2_DV_VSYNC_POS_POL	0x00000001
5082 #define V4L2_DV_HSYNC_POS_POL	0x00000002
5083 
5084 /* Timings standards */
5085 #define V4L2_DV_BT_STD_CEA861	(1 << 0)  /* CEA-861 Digital TV Profile */
5086 #define V4L2_DV_BT_STD_DMT	(1 << 1)  /* VESA Discrete Monitor Timings */
5087 #define V4L2_DV_BT_STD_CVT	(1 << 2)  /* VESA Coordinated Video Timings */
5088 #define V4L2_DV_BT_STD_GTF	(1 << 3)  /* VESA Generalized Timings Formula */
5089 #define V4L2_DV_BT_STD_SDI	(1 << 4)  /* SDI Timings */
5090 
5091 /* Flags */
5092 
5093 /*
5094  * CVT/GTF specific: timing uses reduced blanking (CVT) or the 'Secondary
5095  * GTF' curve (GTF). In both cases the horizontal and/or vertical blanking
5096  * intervals are reduced, allowing a higher resolution over the same
5097  * bandwidth. This is a read-only flag.
5098  */
5099 #define V4L2_DV_FL_REDUCED_BLANKING		(1 << 0)
5100 /*
5101  * CEA-861 specific: set for CEA-861 formats with a framerate of a multiple
5102  * of six. These formats can be optionally played at 1 / 1.001 speed.
5103  * This is a read-only flag.
5104  */
5105 #define V4L2_DV_FL_CAN_REDUCE_FPS		(1 << 1)
5106 /*
5107  * CEA-861 specific: only valid for video transmitters, the flag is cleared
5108  * by receivers.
5109  * If the framerate of the format is a multiple of six, then the pixelclock
5110  * used to set up the transmitter is divided by 1.001 to make it compatible
5111  * with 60 Hz based standards such as NTSC and PAL-M that use a framerate of
5112  * 29.97 Hz. Otherwise this flag is cleared. If the transmitter can't generate
5113  * such frequencies, then the flag will also be cleared.
5114  */
5115 #define V4L2_DV_FL_REDUCED_FPS			(1 << 2)
5116 /*
5117  * Specific to interlaced formats: if set, then field 1 is really one half-line
5118  * longer and field 2 is really one half-line shorter, so each field has
5119  * exactly the same number of half-lines. Whether half-lines can be detected
5120  * or used depends on the hardware.
5121  */
5122 #define V4L2_DV_FL_HALF_LINE			(1 << 3)
5123 /*
5124  * If set, then this is a Consumer Electronics (CE) video format. Such formats
5125  * differ from other formats (commonly called IT formats) in that if RGB
5126  * encoding is used then by default the RGB values use limited range (i.e.
5127  * use the range 16-235) as opposed to 0-255. All formats defined in CEA-861
5128  * except for the 640x480 format are CE formats.
5129  */
5130 #define V4L2_DV_FL_IS_CE_VIDEO			(1 << 4)
5131 /* Some formats like SMPTE-125M have an interlaced signal with a odd
5132  * total height. For these formats, if this flag is set, the first
5133  * field has the extra line. If not, it is the second field.
5134  */
5135 #define V4L2_DV_FL_FIRST_FIELD_EXTRA_LINE	(1 << 5)
5136 /*
5137  * If set, then the picture_aspect field is valid. Otherwise assume that the
5138  * pixels are square, so the picture aspect ratio is the same as the width to
5139  * height ratio.
5140  */
5141 #define V4L2_DV_FL_HAS_PICTURE_ASPECT		(1 << 6)
5142 /*
5143  * If set, then the cea861_vic field is valid and contains the Video
5144  * Identification Code as per the CEA-861 standard.
5145  */
5146 #define V4L2_DV_FL_HAS_CEA861_VIC		(1 << 7)
5147 /*
5148  * If set, then the hdmi_vic field is valid and contains the Video
5149  * Identification Code as per the HDMI standard (HDMI Vendor Specific
5150  * InfoFrame).
5151  */
5152 #define V4L2_DV_FL_HAS_HDMI_VIC			(1 << 8)
5153 /*
5154  * CEA-861 specific: only valid for video receivers.
5155  * If set, then HW can detect the difference between regular FPS and
5156  * 1000/1001 FPS. Note: This flag is only valid for HDMI VIC codes with
5157  * the V4L2_DV_FL_CAN_REDUCE_FPS flag set.
5158  */
5159 #define V4L2_DV_FL_CAN_DETECT_REDUCED_FPS	(1 << 9)
5160 
5161 /* A few useful defines to calculate the total blanking and frame sizes */
5162 #define V4L2_DV_BT_BLANKING_WIDTH(bt) \
5163 	((bt)->hfrontporch + (bt)->hsync + (bt)->hbackporch)
5164 #define V4L2_DV_BT_FRAME_WIDTH(bt) \
5165 	((bt)->width + V4L2_DV_BT_BLANKING_WIDTH(bt))
5166 #define V4L2_DV_BT_BLANKING_HEIGHT(bt) \
5167 	((bt)->vfrontporch + (bt)->vsync + (bt)->vbackporch + \
5168 	 ((bt)->interlaced ? \
5169 	  ((bt)->il_vfrontporch + (bt)->il_vsync + (bt)->il_vbackporch) : 0))
5170 #define V4L2_DV_BT_FRAME_HEIGHT(bt) \
5171 	((bt)->height + V4L2_DV_BT_BLANKING_HEIGHT(bt))
5172 
5173 /** struct v4l2_dv_timings - DV timings
5174  * @type:	the type of the timings
5175  * @bt:	BT656/1120 timings
5176  */
5177 struct v4l2_dv_timings {
5178 	u_int32_t type;
5179 	union {
5180 		struct v4l2_bt_timings	bt;
5181 		u_int32_t	reserved[32];
5182 	};
5183 } __attribute__ ((packed));
5184 
5185 /* Values for the type field */
5186 #define V4L2_DV_BT_656_1120	0	/* BT.656/1120 timing type */
5187 
5188 
5189 /** struct v4l2_enum_dv_timings - DV timings enumeration
5190  * @index:	enumeration index
5191  * @pad:	the pad number for which to enumerate timings (used with
5192  *		v4l-subdev nodes only)
5193  * @reserved:	must be zeroed
5194  * @timings:	the timings for the given index
5195  */
5196 struct v4l2_enum_dv_timings {
5197 	u_int32_t index;
5198 	u_int32_t pad;
5199 	u_int32_t reserved[2];
5200 	struct v4l2_dv_timings timings;
5201 };
5202 
5203 /** struct v4l2_bt_timings_cap - BT.656/BT.1120 timing capabilities
5204  * @min_width:		width in pixels
5205  * @max_width:		width in pixels
5206  * @min_height:		height in lines
5207  * @max_height:		height in lines
5208  * @min_pixelclock:	Pixel clock in HZ. Ex. 74.25MHz->74250000
5209  * @max_pixelclock:	Pixel clock in HZ. Ex. 74.25MHz->74250000
5210  * @standards:		Supported standards
5211  * @capabilities:	Supported capabilities
5212  * @reserved:		Must be zeroed
5213  */
5214 struct v4l2_bt_timings_cap {
5215 	u_int32_t	min_width;
5216 	u_int32_t	max_width;
5217 	u_int32_t	min_height;
5218 	u_int32_t	max_height;
5219 	u_int64_t	min_pixelclock;
5220 	u_int64_t	max_pixelclock;
5221 	u_int32_t	standards;
5222 	u_int32_t	capabilities;
5223 	u_int32_t	reserved[16];
5224 } __attribute__ ((packed));
5225 
5226 /* Supports interlaced formats */
5227 #define V4L2_DV_BT_CAP_INTERLACED	(1 << 0)
5228 /* Supports progressive formats */
5229 #define V4L2_DV_BT_CAP_PROGRESSIVE	(1 << 1)
5230 /* Supports CVT/GTF reduced blanking */
5231 #define V4L2_DV_BT_CAP_REDUCED_BLANKING	(1 << 2)
5232 /* Supports custom formats */
5233 #define V4L2_DV_BT_CAP_CUSTOM		(1 << 3)
5234 
5235 /** struct v4l2_dv_timings_cap - DV timings capabilities
5236  * @type:	the type of the timings (same as in struct v4l2_dv_timings)
5237  * @pad:	the pad number for which to query capabilities (used with
5238  *		v4l-subdev nodes only)
5239  * @bt:		the BT656/1120 timings capabilities
5240  */
5241 struct v4l2_dv_timings_cap {
5242 	u_int32_t type;
5243 	u_int32_t pad;
5244 	u_int32_t reserved[2];
5245 	union {
5246 		struct v4l2_bt_timings_cap bt;
5247 		u_int32_t raw_data[32];
5248 	};
5249 };
5250 
5251 
5252 /*
5253  *	V I D E O   I N P U T S
5254  */
5255 struct v4l2_input {
5256 	u_int32_t	     index;		/*  Which input */
5257 	u_int8_t	     name[32];		/*  Label */
5258 	u_int32_t	     type;		/*  Type of input */
5259 	u_int32_t	     audioset;		/*  Associated audios (bitfield) */
5260 	u_int32_t        tuner;             /*  Tuner index */
5261 	v4l2_std_id  std;
5262 	u_int32_t	     status;
5263 	u_int32_t	     capabilities;
5264 	u_int32_t	     reserved[3];
5265 };
5266 
5267 /*  Values for the 'type' field */
5268 #define V4L2_INPUT_TYPE_TUNER		1
5269 #define V4L2_INPUT_TYPE_CAMERA		2
5270 #define V4L2_INPUT_TYPE_TOUCH		3
5271 
5272 /* field 'status' - general */
5273 #define V4L2_IN_ST_NO_POWER    0x00000001  /* Attached device is off */
5274 #define V4L2_IN_ST_NO_SIGNAL   0x00000002
5275 #define V4L2_IN_ST_NO_COLOR    0x00000004
5276 
5277 /* field 'status' - sensor orientation */
5278 /* If sensor is mounted upside down set both bits */
5279 #define V4L2_IN_ST_HFLIP       0x00000010 /* Frames are flipped horizontally */
5280 #define V4L2_IN_ST_VFLIP       0x00000020 /* Frames are flipped vertically */
5281 
5282 /* field 'status' - analog */
5283 #define V4L2_IN_ST_NO_H_LOCK   0x00000100  /* No horizontal sync lock */
5284 #define V4L2_IN_ST_COLOR_KILL  0x00000200  /* Color killer is active */
5285 #define V4L2_IN_ST_NO_V_LOCK   0x00000400  /* No vertical sync lock */
5286 #define V4L2_IN_ST_NO_STD_LOCK 0x00000800  /* No standard format lock */
5287 
5288 /* field 'status' - digital */
5289 #define V4L2_IN_ST_NO_SYNC     0x00010000  /* No synchronization lock */
5290 #define V4L2_IN_ST_NO_EQU      0x00020000  /* No equalizer lock */
5291 #define V4L2_IN_ST_NO_CARRIER  0x00040000  /* Carrier recovery failed */
5292 
5293 /* field 'status' - VCR and set-top box */
5294 #define V4L2_IN_ST_MACROVISION 0x01000000  /* Macrovision detected */
5295 #define V4L2_IN_ST_NO_ACCESS   0x02000000  /* Conditional access denied */
5296 #define V4L2_IN_ST_VTR         0x04000000  /* VTR time constant */
5297 
5298 /* capabilities flags */
5299 #define V4L2_IN_CAP_DV_TIMINGS		0x00000002 /* Supports S_DV_TIMINGS */
5300 #define V4L2_IN_CAP_CUSTOM_TIMINGS	V4L2_IN_CAP_DV_TIMINGS /* For compatibility */
5301 #define V4L2_IN_CAP_STD			0x00000004 /* Supports S_STD */
5302 #define V4L2_IN_CAP_NATIVE_SIZE		0x00000008 /* Supports setting native size */
5303 
5304 /*
5305  *	V I D E O   O U T P U T S
5306  */
5307 struct v4l2_output {
5308 	u_int32_t	     index;		/*  Which output */
5309 	u_int8_t	     name[32];		/*  Label */
5310 	u_int32_t	     type;		/*  Type of output */
5311 	u_int32_t	     audioset;		/*  Associated audios (bitfield) */
5312 	u_int32_t	     modulator;         /*  Associated modulator */
5313 	v4l2_std_id  std;
5314 	u_int32_t	     capabilities;
5315 	u_int32_t	     reserved[3];
5316 };
5317 /*  Values for the 'type' field */
5318 #define V4L2_OUTPUT_TYPE_MODULATOR		1
5319 #define V4L2_OUTPUT_TYPE_ANALOG			2
5320 #define V4L2_OUTPUT_TYPE_ANALOGVGAOVERLAY	3
5321 
5322 /* capabilities flags */
5323 #define V4L2_OUT_CAP_DV_TIMINGS		0x00000002 /* Supports S_DV_TIMINGS */
5324 #define V4L2_OUT_CAP_CUSTOM_TIMINGS	V4L2_OUT_CAP_DV_TIMINGS /* For compatibility */
5325 #define V4L2_OUT_CAP_STD		0x00000004 /* Supports S_STD */
5326 #define V4L2_OUT_CAP_NATIVE_SIZE	0x00000008 /* Supports setting native size */
5327 
5328 /*
5329  *	C O N T R O L S
5330  */
5331 struct v4l2_control {
5332 	u_int32_t		     id;
5333 	int32_t		     value;
5334 };
5335 
5336 struct v4l2_ext_control {
5337 	u_int32_t id;
5338 	u_int32_t size;
5339 	u_int32_t reserved2[1];
5340 	union {
5341 		int32_t value;
5342 		int64_t value64;
5343 		char __user *string;
5344 		u_int8_t __user *p_u8;
5345 		u_int16_t __user *p_u16;
5346 		u_int32_t __user *p_u32;
5347 		int32_t __user *p_s32;
5348 		int64_t __user *p_s64;
5349 		struct v4l2_area __user *p_area;
5350 		struct v4l2_ctrl_h264_sps __user *p_h264_sps;
5351 		struct v4l2_ctrl_h264_pps __user *p_h264_pps;
5352 		struct v4l2_ctrl_h264_scaling_matrix __user *p_h264_scaling_matrix;
5353 		struct v4l2_ctrl_h264_pred_weights __user *p_h264_pred_weights;
5354 		struct v4l2_ctrl_h264_slice_params __user *p_h264_slice_params;
5355 		struct v4l2_ctrl_h264_decode_params __user *p_h264_decode_params;
5356 		struct v4l2_ctrl_fwht_params __user *p_fwht_params;
5357 		struct v4l2_ctrl_vp8_frame __user *p_vp8_frame;
5358 		struct v4l2_ctrl_mpeg2_sequence __user *p_mpeg2_sequence;
5359 		struct v4l2_ctrl_mpeg2_picture __user *p_mpeg2_picture;
5360 		struct v4l2_ctrl_mpeg2_quantisation __user *p_mpeg2_quantisation;
5361 		struct v4l2_ctrl_vp9_compressed_hdr __user *p_vp9_compressed_hdr_probs;
5362 		struct v4l2_ctrl_vp9_frame __user *p_vp9_frame;
5363 		struct v4l2_ctrl_hevc_sps __user *p_hevc_sps;
5364 		struct v4l2_ctrl_hevc_pps __user *p_hevc_pps;
5365 		struct v4l2_ctrl_hevc_slice_params __user *p_hevc_slice_params;
5366 		struct v4l2_ctrl_hevc_scaling_matrix __user *p_hevc_scaling_matrix;
5367 		struct v4l2_ctrl_hevc_decode_params __user *p_hevc_decode_params;
5368 		struct v4l2_ctrl_av1_sequence __user *p_av1_sequence;
5369 		struct v4l2_ctrl_av1_tile_group_entry __user *p_av1_tile_group_entry;
5370 		struct v4l2_ctrl_av1_frame __user *p_av1_frame;
5371 		struct v4l2_ctrl_av1_film_grain __user *p_av1_film_grain;
5372 		struct v4l2_ctrl_hdr10_cll_info __user *p_hdr10_cll_info;
5373 		struct v4l2_ctrl_hdr10_mastering_display __user *p_hdr10_mastering_display;
5374 		void __user *ptr;
5375 	} __attribute__ ((packed));
5376 } __attribute__ ((packed));
5377 
5378 struct v4l2_ext_controls {
5379 	union {
5380 		u_int32_t ctrl_class;
5381 		u_int32_t which;
5382 	};
5383 	u_int32_t count;
5384 	u_int32_t error_idx;
5385 	int32_t request_fd;
5386 	u_int32_t reserved[1];
5387 	struct v4l2_ext_control *controls;
5388 };
5389 
5390 #define V4L2_CTRL_ID_MASK	  (0x0fffffff)
5391 #define V4L2_CTRL_ID2CLASS(id)    ((id) & 0x0fff0000UL)
5392 #define V4L2_CTRL_ID2WHICH(id)    ((id) & 0x0fff0000UL)
5393 #define V4L2_CTRL_DRIVER_PRIV(id) (((id) & 0xffff) >= 0x1000)
5394 #define V4L2_CTRL_MAX_DIMS	  (4)
5395 #define V4L2_CTRL_WHICH_CUR_VAL   0
5396 #define V4L2_CTRL_WHICH_DEF_VAL   0x0f000000
5397 #define V4L2_CTRL_WHICH_REQUEST_VAL 0x0f010000
5398 
5399 enum v4l2_ctrl_type {
5400 	V4L2_CTRL_TYPE_INTEGER	     = 1,
5401 	V4L2_CTRL_TYPE_BOOLEAN	     = 2,
5402 	V4L2_CTRL_TYPE_MENU	     = 3,
5403 	V4L2_CTRL_TYPE_BUTTON	     = 4,
5404 	V4L2_CTRL_TYPE_INTEGER64     = 5,
5405 	V4L2_CTRL_TYPE_CTRL_CLASS    = 6,
5406 	V4L2_CTRL_TYPE_STRING        = 7,
5407 	V4L2_CTRL_TYPE_BITMASK       = 8,
5408 	V4L2_CTRL_TYPE_INTEGER_MENU  = 9,
5409 
5410 	/* Compound types are >= 0x0100 */
5411 	V4L2_CTRL_COMPOUND_TYPES     = 0x0100,
5412 	V4L2_CTRL_TYPE_U8	     = 0x0100,
5413 	V4L2_CTRL_TYPE_U16	     = 0x0101,
5414 	V4L2_CTRL_TYPE_U32	     = 0x0102,
5415 	V4L2_CTRL_TYPE_AREA          = 0x0106,
5416 
5417 	V4L2_CTRL_TYPE_HDR10_CLL_INFO		= 0x0110,
5418 	V4L2_CTRL_TYPE_HDR10_MASTERING_DISPLAY	= 0x0111,
5419 
5420 	V4L2_CTRL_TYPE_H264_SPS             = 0x0200,
5421 	V4L2_CTRL_TYPE_H264_PPS		    = 0x0201,
5422 	V4L2_CTRL_TYPE_H264_SCALING_MATRIX  = 0x0202,
5423 	V4L2_CTRL_TYPE_H264_SLICE_PARAMS    = 0x0203,
5424 	V4L2_CTRL_TYPE_H264_DECODE_PARAMS   = 0x0204,
5425 	V4L2_CTRL_TYPE_H264_PRED_WEIGHTS    = 0x0205,
5426 
5427 	V4L2_CTRL_TYPE_FWHT_PARAMS	    = 0x0220,
5428 
5429 	V4L2_CTRL_TYPE_VP8_FRAME            = 0x0240,
5430 
5431 	V4L2_CTRL_TYPE_MPEG2_QUANTISATION   = 0x0250,
5432 	V4L2_CTRL_TYPE_MPEG2_SEQUENCE       = 0x0251,
5433 	V4L2_CTRL_TYPE_MPEG2_PICTURE        = 0x0252,
5434 
5435 	V4L2_CTRL_TYPE_VP9_COMPRESSED_HDR	= 0x0260,
5436 	V4L2_CTRL_TYPE_VP9_FRAME		= 0x0261,
5437 
5438 	V4L2_CTRL_TYPE_HEVC_SPS			= 0x0270,
5439 	V4L2_CTRL_TYPE_HEVC_PPS			= 0x0271,
5440 	V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS	= 0x0272,
5441 	V4L2_CTRL_TYPE_HEVC_SCALING_MATRIX	= 0x0273,
5442 	V4L2_CTRL_TYPE_HEVC_DECODE_PARAMS	= 0x0274,
5443 
5444 	V4L2_CTRL_TYPE_AV1_SEQUENCE	    = 0x280,
5445 	V4L2_CTRL_TYPE_AV1_TILE_GROUP_ENTRY = 0x281,
5446 	V4L2_CTRL_TYPE_AV1_FRAME	    = 0x282,
5447 	V4L2_CTRL_TYPE_AV1_FILM_GRAIN	    = 0x283,
5448 };
5449 
5450 /*  Used in the VIDIOC_QUERYCTRL ioctl for querying controls */
5451 struct v4l2_queryctrl {
5452 	u_int32_t		     id;
5453 	u_int32_t		     type;	/* enum v4l2_ctrl_type */
5454 	u_int8_t		     name[32];	/* Whatever */
5455 	int32_t		     minimum;	/* Note signedness */
5456 	int32_t		     maximum;
5457 	int32_t		     step;
5458 	int32_t		     default_value;
5459 	u_int32_t                flags;
5460 	u_int32_t		     reserved[2];
5461 };
5462 
5463 /*  Used in the VIDIOC_QUERY_EXT_CTRL ioctl for querying extended controls */
5464 struct v4l2_query_ext_ctrl {
5465 	u_int32_t		     id;
5466 	u_int32_t		     type;
5467 	char		     name[32];
5468 	int64_t		     minimum;
5469 	int64_t		     maximum;
5470 	u_int64_t		     step;
5471 	int64_t		     default_value;
5472 	u_int32_t                flags;
5473 	u_int32_t                elem_size;
5474 	u_int32_t                elems;
5475 	u_int32_t                nr_of_dims;
5476 	u_int32_t                dims[V4L2_CTRL_MAX_DIMS];
5477 	u_int32_t		     reserved[32];
5478 };
5479 
5480 /*  Used in the VIDIOC_QUERYMENU ioctl for querying menu items */
5481 struct v4l2_querymenu {
5482 	u_int32_t		id;
5483 	u_int32_t		index;
5484 	union {
5485 		u_int8_t	name[32];	/* Whatever */
5486 		int64_t	value;
5487 	};
5488 	u_int32_t		reserved;
5489 } __attribute__ ((packed));
5490 
5491 /*  Control flags  */
5492 #define V4L2_CTRL_FLAG_DISABLED		0x0001
5493 #define V4L2_CTRL_FLAG_GRABBED		0x0002
5494 #define V4L2_CTRL_FLAG_READ_ONLY	0x0004
5495 #define V4L2_CTRL_FLAG_UPDATE		0x0008
5496 #define V4L2_CTRL_FLAG_INACTIVE		0x0010
5497 #define V4L2_CTRL_FLAG_SLIDER		0x0020
5498 #define V4L2_CTRL_FLAG_WRITE_ONLY	0x0040
5499 #define V4L2_CTRL_FLAG_VOLATILE		0x0080
5500 #define V4L2_CTRL_FLAG_HAS_PAYLOAD	0x0100
5501 #define V4L2_CTRL_FLAG_EXECUTE_ON_WRITE	0x0200
5502 #define V4L2_CTRL_FLAG_MODIFY_LAYOUT	0x0400
5503 #define V4L2_CTRL_FLAG_DYNAMIC_ARRAY	0x0800
5504 
5505 /*  Query flags, to be ORed with the control ID */
5506 #define V4L2_CTRL_FLAG_NEXT_CTRL	0x80000000
5507 #define V4L2_CTRL_FLAG_NEXT_COMPOUND	0x40000000
5508 
5509 /*  User-class control IDs defined by V4L2 */
5510 #define V4L2_CID_MAX_CTRLS		1024
5511 /*  IDs reserved for driver specific controls */
5512 #define V4L2_CID_PRIVATE_BASE		0x08000000
5513 
5514 
5515 /*
5516  *	T U N I N G
5517  */
5518 struct v4l2_tuner {
5519 	u_int32_t                   index;
5520 	u_int8_t			name[32];
5521 	u_int32_t			type;	/* enum v4l2_tuner_type */
5522 	u_int32_t			capability;
5523 	u_int32_t			rangelow;
5524 	u_int32_t			rangehigh;
5525 	u_int32_t			rxsubchans;
5526 	u_int32_t			audmode;
5527 	int32_t			signal;
5528 	int32_t			afc;
5529 	u_int32_t			reserved[4];
5530 };
5531 
5532 struct v4l2_modulator {
5533 	u_int32_t			index;
5534 	u_int8_t			name[32];
5535 	u_int32_t			capability;
5536 	u_int32_t			rangelow;
5537 	u_int32_t			rangehigh;
5538 	u_int32_t			txsubchans;
5539 	u_int32_t			type;	/* enum v4l2_tuner_type */
5540 	u_int32_t			reserved[3];
5541 };
5542 
5543 /*  Flags for the 'capability' field */
5544 #define V4L2_TUNER_CAP_LOW		0x0001
5545 #define V4L2_TUNER_CAP_NORM		0x0002
5546 #define V4L2_TUNER_CAP_HWSEEK_BOUNDED	0x0004
5547 #define V4L2_TUNER_CAP_HWSEEK_WRAP	0x0008
5548 #define V4L2_TUNER_CAP_STEREO		0x0010
5549 #define V4L2_TUNER_CAP_LANG2		0x0020
5550 #define V4L2_TUNER_CAP_SAP		0x0020
5551 #define V4L2_TUNER_CAP_LANG1		0x0040
5552 #define V4L2_TUNER_CAP_RDS		0x0080
5553 #define V4L2_TUNER_CAP_RDS_BLOCK_IO	0x0100
5554 #define V4L2_TUNER_CAP_RDS_CONTROLS	0x0200
5555 #define V4L2_TUNER_CAP_FREQ_BANDS	0x0400
5556 #define V4L2_TUNER_CAP_HWSEEK_PROG_LIM	0x0800
5557 #define V4L2_TUNER_CAP_1HZ		0x1000
5558 
5559 /*  Flags for the 'rxsubchans' field */
5560 #define V4L2_TUNER_SUB_MONO		0x0001
5561 #define V4L2_TUNER_SUB_STEREO		0x0002
5562 #define V4L2_TUNER_SUB_LANG2		0x0004
5563 #define V4L2_TUNER_SUB_SAP		0x0004
5564 #define V4L2_TUNER_SUB_LANG1		0x0008
5565 #define V4L2_TUNER_SUB_RDS		0x0010
5566 
5567 /*  Values for the 'audmode' field */
5568 #define V4L2_TUNER_MODE_MONO		0x0000
5569 #define V4L2_TUNER_MODE_STEREO		0x0001
5570 #define V4L2_TUNER_MODE_LANG2		0x0002
5571 #define V4L2_TUNER_MODE_SAP		0x0002
5572 #define V4L2_TUNER_MODE_LANG1		0x0003
5573 #define V4L2_TUNER_MODE_LANG1_LANG2	0x0004
5574 
5575 struct v4l2_frequency {
5576 	u_int32_t	tuner;
5577 	u_int32_t	type;	/* enum v4l2_tuner_type */
5578 	u_int32_t	frequency;
5579 	u_int32_t	reserved[8];
5580 };
5581 
5582 #define V4L2_BAND_MODULATION_VSB	(1 << 1)
5583 #define V4L2_BAND_MODULATION_FM		(1 << 2)
5584 #define V4L2_BAND_MODULATION_AM		(1 << 3)
5585 
5586 struct v4l2_frequency_band {
5587 	u_int32_t	tuner;
5588 	u_int32_t	type;	/* enum v4l2_tuner_type */
5589 	u_int32_t	index;
5590 	u_int32_t	capability;
5591 	u_int32_t	rangelow;
5592 	u_int32_t	rangehigh;
5593 	u_int32_t	modulation;
5594 	u_int32_t	reserved[9];
5595 };
5596 
5597 struct v4l2_hw_freq_seek {
5598 	u_int32_t	tuner;
5599 	u_int32_t	type;	/* enum v4l2_tuner_type */
5600 	u_int32_t	seek_upward;
5601 	u_int32_t	wrap_around;
5602 	u_int32_t	spacing;
5603 	u_int32_t	rangelow;
5604 	u_int32_t	rangehigh;
5605 	u_int32_t	reserved[5];
5606 };
5607 
5608 /*
5609  *	R D S
5610  */
5611 
5612 struct v4l2_rds_data {
5613 	u_int8_t	lsb;
5614 	u_int8_t	msb;
5615 	u_int8_t	block;
5616 } __attribute__ ((packed));
5617 
5618 #define V4L2_RDS_BLOCK_MSK	 0x7
5619 #define V4L2_RDS_BLOCK_A	 0
5620 #define V4L2_RDS_BLOCK_B	 1
5621 #define V4L2_RDS_BLOCK_C	 2
5622 #define V4L2_RDS_BLOCK_D	 3
5623 #define V4L2_RDS_BLOCK_C_ALT	 4
5624 #define V4L2_RDS_BLOCK_INVALID	 7
5625 
5626 #define V4L2_RDS_BLOCK_CORRECTED 0x40
5627 #define V4L2_RDS_BLOCK_ERROR	 0x80
5628 
5629 /*
5630  *	A U D I O
5631  */
5632 struct v4l2_audio {
5633 	u_int32_t	index;
5634 	u_int8_t	name[32];
5635 	u_int32_t	capability;
5636 	u_int32_t	mode;
5637 	u_int32_t	reserved[2];
5638 };
5639 
5640 /*  Flags for the 'capability' field */
5641 #define V4L2_AUDCAP_STEREO		0x00001
5642 #define V4L2_AUDCAP_AVL			0x00002
5643 
5644 /*  Flags for the 'mode' field */
5645 #define V4L2_AUDMODE_AVL		0x00001
5646 
5647 struct v4l2_audioout {
5648 	u_int32_t	index;
5649 	u_int8_t	name[32];
5650 	u_int32_t	capability;
5651 	u_int32_t	mode;
5652 	u_int32_t	reserved[2];
5653 };
5654 
5655 /*
5656  *	M P E G   S E R V I C E S
5657  */
5658 #if 1
5659 #define V4L2_ENC_IDX_FRAME_I    (0)
5660 #define V4L2_ENC_IDX_FRAME_P    (1)
5661 #define V4L2_ENC_IDX_FRAME_B    (2)
5662 #define V4L2_ENC_IDX_FRAME_MASK (0xf)
5663 
5664 struct v4l2_enc_idx_entry {
5665 	u_int64_t offset;
5666 	u_int64_t pts;
5667 	u_int32_t length;
5668 	u_int32_t flags;
5669 	u_int32_t reserved[2];
5670 };
5671 
5672 #define V4L2_ENC_IDX_ENTRIES (64)
5673 struct v4l2_enc_idx {
5674 	u_int32_t entries;
5675 	u_int32_t entries_cap;
5676 	u_int32_t reserved[4];
5677 	struct v4l2_enc_idx_entry entry[V4L2_ENC_IDX_ENTRIES];
5678 };
5679 
5680 
5681 #define V4L2_ENC_CMD_START      (0)
5682 #define V4L2_ENC_CMD_STOP       (1)
5683 #define V4L2_ENC_CMD_PAUSE      (2)
5684 #define V4L2_ENC_CMD_RESUME     (3)
5685 
5686 /* Flags for V4L2_ENC_CMD_STOP */
5687 #define V4L2_ENC_CMD_STOP_AT_GOP_END    (1 << 0)
5688 
5689 struct v4l2_encoder_cmd {
5690 	u_int32_t cmd;
5691 	u_int32_t flags;
5692 	union {
5693 		struct {
5694 			u_int32_t data[8];
5695 		} raw;
5696 	};
5697 };
5698 
5699 /* Decoder commands */
5700 #define V4L2_DEC_CMD_START       (0)
5701 #define V4L2_DEC_CMD_STOP        (1)
5702 #define V4L2_DEC_CMD_PAUSE       (2)
5703 #define V4L2_DEC_CMD_RESUME      (3)
5704 #define V4L2_DEC_CMD_FLUSH       (4)
5705 
5706 /* Flags for V4L2_DEC_CMD_START */
5707 #define V4L2_DEC_CMD_START_MUTE_AUDIO	(1 << 0)
5708 
5709 /* Flags for V4L2_DEC_CMD_PAUSE */
5710 #define V4L2_DEC_CMD_PAUSE_TO_BLACK	(1 << 0)
5711 
5712 /* Flags for V4L2_DEC_CMD_STOP */
5713 #define V4L2_DEC_CMD_STOP_TO_BLACK	(1 << 0)
5714 #define V4L2_DEC_CMD_STOP_IMMEDIATELY	(1 << 1)
5715 
5716 /* Play format requirements (returned by the driver): */
5717 
5718 /* The decoder has no special format requirements */
5719 #define V4L2_DEC_START_FMT_NONE		(0)
5720 /* The decoder requires full GOPs */
5721 #define V4L2_DEC_START_FMT_GOP		(1)
5722 
5723 /* The structure must be zeroed before use by the application
5724    This ensures it can be extended safely in the future. */
5725 struct v4l2_decoder_cmd {
5726 	u_int32_t cmd;
5727 	u_int32_t flags;
5728 	union {
5729 		struct {
5730 			u_int64_t pts;
5731 		} stop;
5732 
5733 		struct {
5734 			/* 0 or 1000 specifies normal speed,
5735 			   1 specifies forward single stepping,
5736 			   -1 specifies backward single stepping,
5737 			   >1: playback at speed/1000 of the normal speed,
5738 			   <-1: reverse playback at (-speed/1000) of the normal speed. */
5739 			int32_t speed;
5740 			u_int32_t format;
5741 		} start;
5742 
5743 		struct {
5744 			u_int32_t data[16];
5745 		} raw;
5746 	};
5747 };
5748 #endif
5749 
5750 
5751 /*
5752  *	D A T A   S E R V I C E S   ( V B I )
5753  *
5754  *	Data services API by Michael Schimek
5755  */
5756 
5757 /* Raw VBI */
5758 struct v4l2_vbi_format {
5759 	u_int32_t	sampling_rate;		/* in 1 Hz */
5760 	u_int32_t	offset;
5761 	u_int32_t	samples_per_line;
5762 	u_int32_t	sample_format;		/* V4L2_PIX_FMT_* */
5763 	int32_t	start[2];
5764 	u_int32_t	count[2];
5765 	u_int32_t	flags;			/* V4L2_VBI_* */
5766 	u_int32_t	reserved[2];		/* must be zero */
5767 };
5768 
5769 /*  VBI flags  */
5770 #define V4L2_VBI_UNSYNC		(1 << 0)
5771 #define V4L2_VBI_INTERLACED	(1 << 1)
5772 
5773 /* ITU-R start lines for each field */
5774 #define V4L2_VBI_ITU_525_F1_START (1)
5775 #define V4L2_VBI_ITU_525_F2_START (264)
5776 #define V4L2_VBI_ITU_625_F1_START (1)
5777 #define V4L2_VBI_ITU_625_F2_START (314)
5778 
5779 /* Sliced VBI
5780  *
5781  *    This implements is a proposal V4L2 API to allow SLICED VBI
5782  * required for some hardware encoders. It should change without
5783  * notice in the definitive implementation.
5784  */
5785 
5786 struct v4l2_sliced_vbi_format {
5787 	u_int16_t   service_set;
5788 	/* service_lines[0][...] specifies lines 0-23 (1-23 used) of the first field
5789 	   service_lines[1][...] specifies lines 0-23 (1-23 used) of the second field
5790 				 (equals frame lines 313-336 for 625 line video
5791 				  standards, 263-286 for 525 line standards) */
5792 	u_int16_t   service_lines[2][24];
5793 	u_int32_t   io_size;
5794 	u_int32_t   reserved[2];            /* must be zero */
5795 };
5796 
5797 /* Teletext World System Teletext
5798    (WST), defined on ITU-R BT.653-2 */
5799 #define V4L2_SLICED_TELETEXT_B          (0x0001)
5800 /* Video Program System, defined on ETS 300 231*/
5801 #define V4L2_SLICED_VPS                 (0x0400)
5802 /* Closed Caption, defined on EIA-608 */
5803 #define V4L2_SLICED_CAPTION_525         (0x1000)
5804 /* Wide Screen System, defined on ITU-R BT1119.1 */
5805 #define V4L2_SLICED_WSS_625             (0x4000)
5806 
5807 #define V4L2_SLICED_VBI_525             (V4L2_SLICED_CAPTION_525)
5808 #define V4L2_SLICED_VBI_625             (V4L2_SLICED_TELETEXT_B | V4L2_SLICED_VPS | V4L2_SLICED_WSS_625)
5809 
5810 struct v4l2_sliced_vbi_cap {
5811 	u_int16_t   service_set;
5812 	/* service_lines[0][...] specifies lines 0-23 (1-23 used) of the first field
5813 	   service_lines[1][...] specifies lines 0-23 (1-23 used) of the second field
5814 				 (equals frame lines 313-336 for 625 line video
5815 				  standards, 263-286 for 525 line standards) */
5816 	u_int16_t   service_lines[2][24];
5817 	u_int32_t	type;		/* enum v4l2_buf_type */
5818 	u_int32_t   reserved[3];    /* must be 0 */
5819 };
5820 
5821 struct v4l2_sliced_vbi_data {
5822 	u_int32_t   id;
5823 	u_int32_t   field;          /* 0: first field, 1: second field */
5824 	u_int32_t   line;           /* 1-23 */
5825 	u_int32_t   reserved;       /* must be 0 */
5826 	u_int8_t    data[48];
5827 };
5828 
5829 /*
5830  * Sliced VBI data inserted into MPEG Streams
5831  */
5832 
5833 /*
5834  * V4L2_MPEG_STREAM_VBI_FMT_IVTV:
5835  *
5836  * Structure of payload contained in an MPEG 2 Private Stream 1 PES Packet in an
5837  * MPEG-2 Program Pack that contains V4L2_MPEG_STREAM_VBI_FMT_IVTV Sliced VBI
5838  * data
5839  *
5840  * Note, the MPEG-2 Program Pack and Private Stream 1 PES packet header
5841  * definitions are not included here.  See the MPEG-2 specifications for details
5842  * on these headers.
5843  */
5844 
5845 /* Line type IDs */
5846 #define V4L2_MPEG_VBI_IVTV_TELETEXT_B     (1)
5847 #define V4L2_MPEG_VBI_IVTV_CAPTION_525    (4)
5848 #define V4L2_MPEG_VBI_IVTV_WSS_625        (5)
5849 #define V4L2_MPEG_VBI_IVTV_VPS            (7)
5850 
5851 struct v4l2_mpeg_vbi_itv0_line {
5852 	u_int8_t id;	/* One of V4L2_MPEG_VBI_IVTV_* above */
5853 	u_int8_t data[42];	/* Sliced VBI data for the line */
5854 } __attribute__ ((packed));
5855 
5856 struct v4l2_mpeg_vbi_itv0 {
5857 	u_int32_t linemask[2]; /* Bitmasks of VBI service lines present */
5858 	struct v4l2_mpeg_vbi_itv0_line line[35];
5859 } __attribute__ ((packed));
5860 
5861 struct v4l2_mpeg_vbi_ITV0 {
5862 	struct v4l2_mpeg_vbi_itv0_line line[36];
5863 } __attribute__ ((packed));
5864 
5865 #define V4L2_MPEG_VBI_IVTV_MAGIC0	"itv0"
5866 #define V4L2_MPEG_VBI_IVTV_MAGIC1	"ITV0"
5867 
5868 struct v4l2_mpeg_vbi_fmt_ivtv {
5869 	u_int8_t magic[4];
5870 	union {
5871 		struct v4l2_mpeg_vbi_itv0 itv0;
5872 		struct v4l2_mpeg_vbi_ITV0 ITV0;
5873 	};
5874 } __attribute__ ((packed));
5875 
5876 /*
5877  *	A G G R E G A T E   S T R U C T U R E S
5878  */
5879 
5880 /**
5881  * struct v4l2_plane_pix_format - additional, per-plane format definition
5882  * @sizeimage:		maximum size in bytes required for data, for which
5883  *			this plane will be used
5884  * @bytesperline:	distance in bytes between the leftmost pixels in two
5885  *			adjacent lines
5886  * @reserved:		drivers and applications must zero this array
5887  */
5888 struct v4l2_plane_pix_format {
5889 	u_int32_t		sizeimage;
5890 	u_int32_t		bytesperline;
5891 	u_int16_t		reserved[6];
5892 } __attribute__ ((packed));
5893 
5894 /**
5895  * struct v4l2_pix_format_mplane - multiplanar format definition
5896  * @width:		image width in pixels
5897  * @height:		image height in pixels
5898  * @pixelformat:	little endian four character code (fourcc)
5899  * @field:		enum v4l2_field; field order (for interlaced video)
5900  * @colorspace:		enum v4l2_colorspace; supplemental to pixelformat
5901  * @plane_fmt:		per-plane information
5902  * @num_planes:		number of planes for this format
5903  * @flags:		format flags (V4L2_PIX_FMT_FLAG_*)
5904  * @ycbcr_enc:		enum v4l2_ycbcr_encoding, Y'CbCr encoding
5905  * @hsv_enc:		enum v4l2_hsv_encoding, HSV encoding
5906  * @quantization:	enum v4l2_quantization, colorspace quantization
5907  * @xfer_func:		enum v4l2_xfer_func, colorspace transfer function
5908  * @reserved:		drivers and applications must zero this array
5909  */
5910 struct v4l2_pix_format_mplane {
5911 	u_int32_t				width;
5912 	u_int32_t				height;
5913 	u_int32_t				pixelformat;
5914 	u_int32_t				field;
5915 	u_int32_t				colorspace;
5916 
5917 	struct v4l2_plane_pix_format	plane_fmt[VIDEO_MAX_PLANES];
5918 	u_int8_t				num_planes;
5919 	u_int8_t				flags;
5920 	 union {
5921 		u_int8_t				ycbcr_enc;
5922 		u_int8_t				hsv_enc;
5923 	};
5924 	u_int8_t				quantization;
5925 	u_int8_t				xfer_func;
5926 	u_int8_t				reserved[7];
5927 } __attribute__ ((packed));
5928 
5929 /**
5930  * struct v4l2_sdr_format - SDR format definition
5931  * @pixelformat:	little endian four character code (fourcc)
5932  * @buffersize:		maximum size in bytes required for data
5933  * @reserved:		drivers and applications must zero this array
5934  */
5935 struct v4l2_sdr_format {
5936 	u_int32_t				pixelformat;
5937 	u_int32_t				buffersize;
5938 	u_int8_t				reserved[24];
5939 } __attribute__ ((packed));
5940 
5941 /**
5942  * struct v4l2_meta_format - metadata format definition
5943  * @dataformat:		little endian four character code (fourcc)
5944  * @buffersize:		maximum size in bytes required for data
5945  * @width:		number of data units of data per line (valid for line
5946  *			based formats only, see format documentation)
5947  * @height:		number of lines of data per buffer (valid for line based
5948  *			formats only)
5949  * @bytesperline:	offset between the beginnings of two adjacent lines in
5950  *			bytes (valid for line based formats only)
5951  */
5952 struct v4l2_meta_format {
5953 	u_int32_t				dataformat;
5954 	u_int32_t				buffersize;
5955 	u_int32_t				width;
5956 	u_int32_t				height;
5957 	u_int32_t				bytesperline;
5958 } __attribute__ ((packed));
5959 
5960 /**
5961  * struct v4l2_format - stream data format
5962  * @type:		enum v4l2_buf_type; type of the data stream
5963  * @fmt.pix:		definition of an image format
5964  * @fmt.pix_mp:		definition of a multiplanar image format
5965  * @fmt.win:		definition of an overlaid image
5966  * @fmt.vbi:		raw VBI capture or output parameters
5967  * @fmt.sliced:		sliced VBI capture or output parameters
5968  * @fmt.raw_data:	placeholder for future extensions and custom formats
5969  * @fmt:		union of @pix, @pix_mp, @win, @vbi, @sliced, @sdr,
5970  *			@meta and @raw_data
5971  */
5972 struct v4l2_format {
5973 	u_int32_t	 type;
5974 	union {
5975 		struct v4l2_pix_format		pix;     /* V4L2_BUF_TYPE_VIDEO_CAPTURE */
5976 		struct v4l2_pix_format_mplane	pix_mp;  /* V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE */
5977 		struct v4l2_window		win;     /* V4L2_BUF_TYPE_VIDEO_OVERLAY */
5978 		struct v4l2_vbi_format		vbi;     /* V4L2_BUF_TYPE_VBI_CAPTURE */
5979 		struct v4l2_sliced_vbi_format	sliced;  /* V4L2_BUF_TYPE_SLICED_VBI_CAPTURE */
5980 		struct v4l2_sdr_format		sdr;     /* V4L2_BUF_TYPE_SDR_CAPTURE */
5981 		struct v4l2_meta_format		meta;    /* V4L2_BUF_TYPE_META_CAPTURE */
5982 		u_int8_t	raw_data[200];                   /* user-defined */
5983 	} fmt;
5984 };
5985 
5986 /*	Stream type-dependent parameters
5987  */
5988 struct v4l2_streamparm {
5989 	u_int32_t	 type;			/* enum v4l2_buf_type */
5990 	union {
5991 		struct v4l2_captureparm	capture;
5992 		struct v4l2_outputparm	output;
5993 		u_int8_t	raw_data[200];  /* user-defined */
5994 	} parm;
5995 };
5996 
5997 /*
5998  *	E V E N T S
5999  */
6000 
6001 #define V4L2_EVENT_ALL				0
6002 #define V4L2_EVENT_VSYNC			1
6003 #define V4L2_EVENT_EOS				2
6004 #define V4L2_EVENT_CTRL				3
6005 #define V4L2_EVENT_FRAME_SYNC			4
6006 #define V4L2_EVENT_SOURCE_CHANGE		5
6007 #define V4L2_EVENT_MOTION_DET			6
6008 #define V4L2_EVENT_PRIVATE_START		0x08000000
6009 
6010 /* Payload for V4L2_EVENT_VSYNC */
6011 struct v4l2_event_vsync {
6012 	/* Can be V4L2_FIELD_ANY, _NONE, _TOP or _BOTTOM */
6013 	u_int8_t field;
6014 } __attribute__ ((packed));
6015 
6016 /* Payload for V4L2_EVENT_CTRL */
6017 #define V4L2_EVENT_CTRL_CH_VALUE		(1 << 0)
6018 #define V4L2_EVENT_CTRL_CH_FLAGS		(1 << 1)
6019 #define V4L2_EVENT_CTRL_CH_RANGE		(1 << 2)
6020 #define V4L2_EVENT_CTRL_CH_DIMENSIONS		(1 << 3)
6021 
6022 struct v4l2_event_ctrl {
6023 	u_int32_t changes;
6024 	u_int32_t type;
6025 	union {
6026 		int32_t value;
6027 		int64_t value64;
6028 	};
6029 	u_int32_t flags;
6030 	int32_t minimum;
6031 	int32_t maximum;
6032 	int32_t step;
6033 	int32_t default_value;
6034 };
6035 
6036 struct v4l2_event_frame_sync {
6037 	u_int32_t frame_sequence;
6038 };
6039 
6040 #define V4L2_EVENT_SRC_CH_RESOLUTION		(1 << 0)
6041 
6042 struct v4l2_event_src_change {
6043 	u_int32_t changes;
6044 };
6045 
6046 #define V4L2_EVENT_MD_FL_HAVE_FRAME_SEQ	(1 << 0)
6047 
6048 /**
6049  * struct v4l2_event_motion_det - motion detection event
6050  * @flags:             if V4L2_EVENT_MD_FL_HAVE_FRAME_SEQ is set, then the
6051  *                     frame_sequence field is valid.
6052  * @frame_sequence:    the frame sequence number associated with this event.
6053  * @region_mask:       which regions detected motion.
6054  */
6055 struct v4l2_event_motion_det {
6056 	u_int32_t flags;
6057 	u_int32_t frame_sequence;
6058 	u_int32_t region_mask;
6059 };
6060 
6061 struct v4l2_event {
6062 	u_int32_t				type;
6063 	union {
6064 		struct v4l2_event_vsync		vsync;
6065 		struct v4l2_event_ctrl		ctrl;
6066 		struct v4l2_event_frame_sync	frame_sync;
6067 		struct v4l2_event_src_change	src_change;
6068 		struct v4l2_event_motion_det	motion_det;
6069 		u_int8_t			data[64];
6070 	} u;
6071 	u_int32_t				pending;
6072 	u_int32_t				sequence;
6073 	struct timespec				timestamp;
6074 	u_int32_t				id;
6075 	u_int32_t				reserved[8];
6076 };
6077 
6078 #define V4L2_EVENT_SUB_FL_SEND_INITIAL		(1 << 0)
6079 #define V4L2_EVENT_SUB_FL_ALLOW_FEEDBACK	(1 << 1)
6080 
6081 struct v4l2_event_subscription {
6082 	u_int32_t				type;
6083 	u_int32_t				id;
6084 	u_int32_t				flags;
6085 	u_int32_t				reserved[5];
6086 };
6087 
6088 /*
6089  *	A D V A N C E D   D E B U G G I N G
6090  *
6091  *	NOTE: EXPERIMENTAL API, NEVER RELY ON THIS IN APPLICATIONS!
6092  *	FOR DEBUGGING, TESTING AND INTERNAL USE ONLY!
6093  */
6094 
6095 /* VIDIOC_DBG_G_REGISTER and VIDIOC_DBG_S_REGISTER */
6096 
6097 #define V4L2_CHIP_MATCH_BRIDGE      0  /* Match against chip ID on the bridge (0 for the bridge) */
6098 #define V4L2_CHIP_MATCH_SUBDEV      4  /* Match against subdev index */
6099 
6100 /* The following four defines are no longer in use */
6101 #define V4L2_CHIP_MATCH_HOST V4L2_CHIP_MATCH_BRIDGE
6102 #define V4L2_CHIP_MATCH_I2C_DRIVER  1  /* Match against I2C driver name */
6103 #define V4L2_CHIP_MATCH_I2C_ADDR    2  /* Match against I2C 7-bit address */
6104 #define V4L2_CHIP_MATCH_AC97        3  /* Match against ancillary AC97 chip */
6105 
6106 struct v4l2_dbg_match {
6107 	u_int32_t type; /* Match type */
6108 	union {     /* Match this chip, meaning determined by type */
6109 		u_int32_t addr;
6110 		char name[32];
6111 	};
6112 } __attribute__ ((packed));
6113 
6114 struct v4l2_dbg_register {
6115 	struct v4l2_dbg_match match;
6116 	u_int32_t size;	/* register size in bytes */
6117 	u_int64_t reg;
6118 	u_int64_t val;
6119 } __attribute__ ((packed));
6120 
6121 #define V4L2_CHIP_FL_READABLE (1 << 0)
6122 #define V4L2_CHIP_FL_WRITABLE (1 << 1)
6123 
6124 /* VIDIOC_DBG_G_CHIP_INFO */
6125 struct v4l2_dbg_chip_info {
6126 	struct v4l2_dbg_match match;
6127 	char name[32];
6128 	u_int32_t flags;
6129 	u_int32_t reserved[32];
6130 } __attribute__ ((packed));
6131 
6132 /**
6133  * struct v4l2_create_buffers - VIDIOC_CREATE_BUFS argument
6134  * @index:	on return, index of the first created buffer
6135  * @count:	entry: number of requested buffers,
6136  *		return: number of created buffers
6137  * @memory:	enum v4l2_memory; buffer memory type
6138  * @format:	frame format, for which buffers are requested
6139  * @capabilities: capabilities of this buffer type.
6140  * @flags:	additional buffer management attributes (ignored unless the
6141  *		queue has V4L2_BUF_CAP_SUPPORTS_MMAP_CACHE_HINTS capability
6142  *		and configured for MMAP streaming I/O).
6143  * @max_num_buffers: if V4L2_BUF_CAP_SUPPORTS_MAX_NUM_BUFFERS capability flag is set
6144  *		this field indicate the maximum possible number of buffers
6145  *		for this queue.
6146  * @reserved:	future extensions
6147  */
6148 struct v4l2_create_buffers {
6149 	u_int32_t			index;
6150 	u_int32_t			count;
6151 	u_int32_t			memory;
6152 	struct v4l2_format		format;
6153 	u_int32_t			capabilities;
6154 	u_int32_t			flags;
6155 	u_int32_t			max_num_buffers;
6156 	u_int32_t			reserved[5];
6157 };
6158 
6159 /**
6160  * struct v4l2_remove_buffers - VIDIOC_REMOVE_BUFS argument
6161  * @index:	the first buffer to be removed
6162  * @count:	number of buffers to removed
6163  * @type:	enum v4l2_buf_type
6164  * @reserved:	future extensions
6165  */
6166 struct v4l2_remove_buffers {
6167 	u_int32_t			index;
6168 	u_int32_t			count;
6169 	u_int32_t			type;
6170 	u_int32_t			reserved[13];
6171 };
6172 
6173 /*
6174  *	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
6175  *
6176  */
6177 #define VIDIOC_QUERYCAP		 _IOR('V',  0, struct v4l2_capability)
6178 #define VIDIOC_ENUM_FMT         _IOWR('V',  2, struct v4l2_fmtdesc)
6179 #define VIDIOC_G_FMT		_IOWR('V',  4, struct v4l2_format)
6180 #define VIDIOC_S_FMT		_IOWR('V',  5, struct v4l2_format)
6181 #define VIDIOC_REQBUFS		_IOWR('V',  8, struct v4l2_requestbuffers)
6182 #define VIDIOC_QUERYBUF		_IOWR('V',  9, struct v4l2_buffer)
6183 #define VIDIOC_G_FBUF		 _IOR('V', 10, struct v4l2_framebuffer)
6184 #define VIDIOC_S_FBUF		 _IOW('V', 11, struct v4l2_framebuffer)
6185 #define VIDIOC_OVERLAY		 _IOW('V', 14, int)
6186 #define VIDIOC_QBUF		_IOWR('V', 15, struct v4l2_buffer)
6187 #define VIDIOC_EXPBUF		_IOWR('V', 16, struct v4l2_exportbuffer)
6188 #define VIDIOC_DQBUF		_IOWR('V', 17, struct v4l2_buffer)
6189 #define VIDIOC_STREAMON		 _IOW('V', 18, int)
6190 #define VIDIOC_STREAMOFF	 _IOW('V', 19, int)
6191 #define VIDIOC_G_PARM		_IOWR('V', 21, struct v4l2_streamparm)
6192 #define VIDIOC_S_PARM		_IOWR('V', 22, struct v4l2_streamparm)
6193 #define VIDIOC_G_STD		 _IOR('V', 23, v4l2_std_id)
6194 #define VIDIOC_S_STD		 _IOW('V', 24, v4l2_std_id)
6195 #define VIDIOC_ENUMSTD		_IOWR('V', 25, struct v4l2_standard)
6196 #define VIDIOC_ENUMINPUT	_IOWR('V', 26, struct v4l2_input)
6197 #define VIDIOC_G_CTRL		_IOWR('V', 27, struct v4l2_control)
6198 #define VIDIOC_S_CTRL		_IOWR('V', 28, struct v4l2_control)
6199 #define VIDIOC_G_TUNER		_IOWR('V', 29, struct v4l2_tuner)
6200 #define VIDIOC_S_TUNER		 _IOW('V', 30, struct v4l2_tuner)
6201 #define VIDIOC_G_AUDIO		 _IOR('V', 33, struct v4l2_audio)
6202 #define VIDIOC_S_AUDIO		 _IOW('V', 34, struct v4l2_audio)
6203 #define VIDIOC_QUERYCTRL	_IOWR('V', 36, struct v4l2_queryctrl)
6204 #define VIDIOC_QUERYMENU	_IOWR('V', 37, struct v4l2_querymenu)
6205 #define VIDIOC_G_INPUT		 _IOR('V', 38, int)
6206 #define VIDIOC_S_INPUT		_IOWR('V', 39, int)
6207 #define VIDIOC_G_EDID		_IOWR('V', 40, struct v4l2_edid)
6208 #define VIDIOC_S_EDID		_IOWR('V', 41, struct v4l2_edid)
6209 #define VIDIOC_G_OUTPUT		 _IOR('V', 46, int)
6210 #define VIDIOC_S_OUTPUT		_IOWR('V', 47, int)
6211 #define VIDIOC_ENUMOUTPUT	_IOWR('V', 48, struct v4l2_output)
6212 #define VIDIOC_G_AUDOUT		 _IOR('V', 49, struct v4l2_audioout)
6213 #define VIDIOC_S_AUDOUT		 _IOW('V', 50, struct v4l2_audioout)
6214 #define VIDIOC_G_MODULATOR	_IOWR('V', 54, struct v4l2_modulator)
6215 #define VIDIOC_S_MODULATOR	 _IOW('V', 55, struct v4l2_modulator)
6216 #define VIDIOC_G_FREQUENCY	_IOWR('V', 56, struct v4l2_frequency)
6217 #define VIDIOC_S_FREQUENCY	 _IOW('V', 57, struct v4l2_frequency)
6218 #define VIDIOC_CROPCAP		_IOWR('V', 58, struct v4l2_cropcap)
6219 #define VIDIOC_G_CROP		_IOWR('V', 59, struct v4l2_crop)
6220 #define VIDIOC_S_CROP		 _IOW('V', 60, struct v4l2_crop)
6221 #define VIDIOC_G_JPEGCOMP	 _IOR('V', 61, struct v4l2_jpegcompression)
6222 #define VIDIOC_S_JPEGCOMP	 _IOW('V', 62, struct v4l2_jpegcompression)
6223 #define VIDIOC_QUERYSTD		 _IOR('V', 63, v4l2_std_id)
6224 #define VIDIOC_TRY_FMT		_IOWR('V', 64, struct v4l2_format)
6225 #define VIDIOC_ENUMAUDIO	_IOWR('V', 65, struct v4l2_audio)
6226 #define VIDIOC_ENUMAUDOUT	_IOWR('V', 66, struct v4l2_audioout)
6227 #define VIDIOC_G_PRIORITY	 _IOR('V', 67, u_int32_t) /* enum v4l2_priority */
6228 #define VIDIOC_S_PRIORITY	 _IOW('V', 68, u_int32_t) /* enum v4l2_priority */
6229 #define VIDIOC_G_SLICED_VBI_CAP _IOWR('V', 69, struct v4l2_sliced_vbi_cap)
6230 #define VIDIOC_LOG_STATUS         _IO('V', 70)
6231 #define VIDIOC_G_EXT_CTRLS	_IOWR('V', 71, struct v4l2_ext_controls)
6232 #define VIDIOC_S_EXT_CTRLS	_IOWR('V', 72, struct v4l2_ext_controls)
6233 #define VIDIOC_TRY_EXT_CTRLS	_IOWR('V', 73, struct v4l2_ext_controls)
6234 #define VIDIOC_ENUM_FRAMESIZES	_IOWR('V', 74, struct v4l2_frmsizeenum)
6235 #define VIDIOC_ENUM_FRAMEINTERVALS _IOWR('V', 75, struct v4l2_frmivalenum)
6236 #define VIDIOC_G_ENC_INDEX       _IOR('V', 76, struct v4l2_enc_idx)
6237 #define VIDIOC_ENCODER_CMD      _IOWR('V', 77, struct v4l2_encoder_cmd)
6238 #define VIDIOC_TRY_ENCODER_CMD  _IOWR('V', 78, struct v4l2_encoder_cmd)
6239 
6240 /*
6241  * Experimental, meant for debugging, testing and internal use.
6242  * Only implemented if CONFIG_VIDEO_ADV_DEBUG is defined.
6243  * You must be root to use these ioctls. Never use these in applications!
6244  */
6245 #define	VIDIOC_DBG_S_REGISTER	 _IOW('V', 79, struct v4l2_dbg_register)
6246 #define	VIDIOC_DBG_G_REGISTER	_IOWR('V', 80, struct v4l2_dbg_register)
6247 
6248 #define VIDIOC_S_HW_FREQ_SEEK	 _IOW('V', 82, struct v4l2_hw_freq_seek)
6249 #define	VIDIOC_S_DV_TIMINGS	_IOWR('V', 87, struct v4l2_dv_timings)
6250 #define	VIDIOC_G_DV_TIMINGS	_IOWR('V', 88, struct v4l2_dv_timings)
6251 #define	VIDIOC_DQEVENT		 _IOR('V', 89, struct v4l2_event)
6252 #define	VIDIOC_SUBSCRIBE_EVENT	 _IOW('V', 90, struct v4l2_event_subscription)
6253 #define	VIDIOC_UNSUBSCRIBE_EVENT _IOW('V', 91, struct v4l2_event_subscription)
6254 #define VIDIOC_CREATE_BUFS	_IOWR('V', 92, struct v4l2_create_buffers)
6255 #define VIDIOC_PREPARE_BUF	_IOWR('V', 93, struct v4l2_buffer)
6256 #define VIDIOC_G_SELECTION	_IOWR('V', 94, struct v4l2_selection)
6257 #define VIDIOC_S_SELECTION	_IOWR('V', 95, struct v4l2_selection)
6258 #define VIDIOC_DECODER_CMD	_IOWR('V', 96, struct v4l2_decoder_cmd)
6259 #define VIDIOC_TRY_DECODER_CMD	_IOWR('V', 97, struct v4l2_decoder_cmd)
6260 #define VIDIOC_ENUM_DV_TIMINGS  _IOWR('V', 98, struct v4l2_enum_dv_timings)
6261 #define VIDIOC_QUERY_DV_TIMINGS  _IOR('V', 99, struct v4l2_dv_timings)
6262 #define VIDIOC_DV_TIMINGS_CAP   _IOWR('V', 100, struct v4l2_dv_timings_cap)
6263 #define VIDIOC_ENUM_FREQ_BANDS	_IOWR('V', 101, struct v4l2_frequency_band)
6264 
6265 /*
6266  * Experimental, meant for debugging, testing and internal use.
6267  * Never use this in applications!
6268  */
6269 #define VIDIOC_DBG_G_CHIP_INFO  _IOWR('V', 102, struct v4l2_dbg_chip_info)
6270 
6271 #define VIDIOC_QUERY_EXT_CTRL	_IOWR('V', 103, struct v4l2_query_ext_ctrl)
6272 #define VIDIOC_REMOVE_BUFS	_IOWR('V', 104, struct v4l2_remove_buffers)
6273 
6274 
6275 /* Reminder: when adding new ioctls please add support for them to
6276    drivers/media/v4l2-core/v4l2-compat-ioctl32.c as well! */
6277 
6278 #define BASE_VIDIOC_PRIVATE	192		/* 192-255 are private */
6279 
6280 /* Deprecated definitions kept for backwards compatibility */
6281 #define V4L2_PIX_FMT_HM12 V4L2_PIX_FMT_NV12_16L16
6282 #define V4L2_PIX_FMT_SUNXI_TILED_NV12 V4L2_PIX_FMT_NV12_32L32
6283 /*
6284  * This capability was never implemented, anyone using this cap should drop it
6285  * from their code.
6286  */
6287 #define V4L2_CAP_ASYNCIO 0x02000000
6288 
6289 #endif /* _SYS_VIDEOIO_H_ */
6290