Tue May 17 11:55:23 2022 UTC ()
libv4l: SunOS support.

This also updates the Linux headers so may improve compatibility on other OS.


(jperkin)
diff -r1.22 -r1.23 pkgsrc/graphics/libv4l/Makefile
diff -r1.23 -r1.24 pkgsrc/graphics/libv4l/distinfo
diff -r0 -r1.1 pkgsrc/graphics/libv4l/files/v4l2-controls.h
diff -r1.1 -r1.2 pkgsrc/graphics/libv4l/files/videodev2.h
diff -r1.1 -r1.2 pkgsrc/graphics/libv4l/patches/patch-lib_libv4l1_libv4l1.c
diff -r1.1 -r1.2 pkgsrc/graphics/libv4l/patches/patch-lib_libv4l2_libv4l2.c
diff -r1.1 -r1.2 pkgsrc/graphics/libv4l/patches/patch-lib_libv4l2rds_libv4l2rds.c
diff -r1.1 -r1.2 pkgsrc/graphics/libv4l/patches/patch-lib_libv4lconvert_libv4lsyscall-priv.h

cvs diff -r1.22 -r1.23 pkgsrc/graphics/libv4l/Makefile (switch to unified diff)

--- pkgsrc/graphics/libv4l/Makefile 2021/11/01 20:35:16 1.22
+++ pkgsrc/graphics/libv4l/Makefile 2022/05/17 11:55:23 1.23
@@ -1,71 +1,76 @@ @@ -1,71 +1,76 @@
1# $NetBSD: Makefile,v 1.22 2021/11/01 20:35:16 wiz Exp $ 1# $NetBSD: Makefile,v 1.23 2022/05/17 11:55:23 jperkin Exp $
2 2
3LIBV4L_VERS= 1.22.1 3LIBV4L_VERS= 1.22.1
4DISTNAME= v4l-utils-${LIBV4L_VERS} 4DISTNAME= v4l-utils-${LIBV4L_VERS}
5CATEGORIES= graphics 5CATEGORIES= graphics
6PKGNAME= libv4l-${LIBV4L_VERS} 6PKGNAME= libv4l-${LIBV4L_VERS}
7MASTER_SITES= https://www.linuxtv.org/downloads/v4l-utils/ 7MASTER_SITES= https://www.linuxtv.org/downloads/v4l-utils/
8EXTRACT_SUFX= .tar.bz2 8EXTRACT_SUFX= .tar.bz2
9 9
10MAINTAINER= pkgsrc-users@NetBSD.org 10MAINTAINER= pkgsrc-users@NetBSD.org
11#HOMEPAGE= http://people.atrpms.net/~hdegoede/ 11#HOMEPAGE= http://people.atrpms.net/~hdegoede/
12COMMENT= Video4Linux userspace library 12COMMENT= Video4Linux userspace library
13LICENSE= gnu-gpl-v2 13LICENSE= gnu-gpl-v2
14 14
15FORTIFY_SUPPORTED= no 15FORTIFY_SUPPORTED= no
16GNU_CONFIGURE= yes 16GNU_CONFIGURE= yes
17USE_GCC_RUNTIME= yes 17USE_GCC_RUNTIME= yes
18USE_LANGUAGES= c c++ 18USE_LANGUAGES= c c++
19USE_LIBTOOL= yes 19USE_LIBTOOL= yes
20USE_TOOLS+= gmake 20USE_TOOLS+= gmake
21 21
22CONFIGURE_ARGS+= --disable-libdvbv5 22CONFIGURE_ARGS+= --disable-libdvbv5
23CONFIGURE_ARGS+= --disable-nls 23CONFIGURE_ARGS+= --disable-nls
24CONFIGURE_ARGS+= --disable-v4l-utils 24CONFIGURE_ARGS+= --disable-v4l-utils
25 25
26.include "../../mk/bsd.prefs.mk" 26.include "../../mk/bsd.prefs.mk"
27 27
28.if ${OPSYS} == "NetBSD" || ${OPSYS} == "DragonFly" 28.if ${OPSYS} == "NetBSD" || ${OPSYS} == "DragonFly"
29NEWHEADER!= ${GREP} V4L2_SEL_TGT_CROP /usr/include/sys/videoio.h > /dev/null 2>&1 || echo "no" 29NEWHEADER!= ${GREP} V4L2_SEL_TGT_CROP /usr/include/sys/videoio.h > /dev/null 2>&1 || echo "no"
30.endif 30.endif
31 31
32.if (${OPSYS} == "NetBSD" || ${OPSYS} == "DragonFly") && !exists(/usr/include/sys/videoio.h) 32.if (${OPSYS} == "NetBSD" || ${OPSYS} == "DragonFly") && !exists(/usr/include/sys/videoio.h)
33PLIST.needs_videoio= yes 33PLIST.needs_videoio= yes
34INSTALLATION_DIRS+= include/sys 34INSTALLATION_DIRS+= include/sys
35 35
36pre-configure: 36pre-configure:
37 ${MKDIR} ${BUILDLINK_DIR}/include/sys 37 ${MKDIR} ${BUILDLINK_DIR}/include/sys
38 cp ${FILESDIR}/videoio.h ${BUILDLINK_DIR}/include/sys 38 cp ${FILESDIR}/videoio.h ${BUILDLINK_DIR}/include/sys
39 39
40post-install: 40post-install:
41 ${INSTALL_DATA} ${FILESDIR}/videoio.h ${DESTDIR}${PREFIX}/include/sys 41 ${INSTALL_DATA} ${FILESDIR}/videoio.h ${DESTDIR}${PREFIX}/include/sys
42 42
43.elif (${OPSYS} == "NetBSD" || ${OPSYS} == "DragonFly") && ${NEWHEADER} == "no" 43.elif (${OPSYS} == "NetBSD" || ${OPSYS} == "DragonFly") && ${NEWHEADER} == "no"
44 
45pre-configure: 44pre-configure:
46 ${MKDIR} ${BUILDLINK_DIR}/include/sys 45 ${MKDIR} ${BUILDLINK_DIR}/include/sys
47 cp ${FILESDIR}/videoio.h ${BUILDLINK_DIR}/include/sys 46 cp ${FILESDIR}/videoio.h ${BUILDLINK_DIR}/include/sys
48 47
 48.elif ${OPSYS} == "SunOS"
 49pre-configure:
 50 ${MKDIR} ${BUILDLINK_DIR}/include/linux
 51 cp ${FILESDIR}/videodev2.h ${BUILDLINK_DIR}/include/linux
 52 cp ${FILESDIR}/v4l2-controls.h ${BUILDLINK_DIR}/include/linux
 53
49.elif ${OPSYS} == "Linux" && !exists(/usr/include/linux/videodev.h) 54.elif ${OPSYS} == "Linux" && !exists(/usr/include/linux/videodev.h)
50pre-configure: 55pre-configure:
51 ${MKDIR} ${BUILDLINK_DIR}/include/linux 56 ${MKDIR} ${BUILDLINK_DIR}/include/linux
52 cp ${FILESDIR}/videodev.h ${BUILDLINK_DIR}/include/linux 57 cp ${FILESDIR}/videodev.h ${BUILDLINK_DIR}/include/linux
53 ${LN} -sf ${BUILDLINK_DIR}/include/linux/videodev.h \ 58 ${LN} -sf ${BUILDLINK_DIR}/include/linux/videodev.h \
54 ${BUILDLINK_DIR}/include/ 59 ${BUILDLINK_DIR}/include/
55 cp ${FILESDIR}/videodev2.h ${BUILDLINK_DIR}/include/linux 60 cp ${FILESDIR}/videodev2.h ${BUILDLINK_DIR}/include/linux
56 ${LN} -sf ${BUILDLINK_DIR}/include/linux/videodev2.h \ 61 ${LN} -sf ${BUILDLINK_DIR}/include/linux/videodev2.h \
57 ${BUILDLINK_DIR}/include/ 62 ${BUILDLINK_DIR}/include/
58.endif 63.endif
59 64
60PLIST_VARS= needs_videoio 65PLIST_VARS= needs_videoio
61 66
62.include "../../mk/compiler.mk" 67.include "../../mk/compiler.mk"
63 68
64.if !empty(PKGSRC_COMPILER:Mclang) || !empty(CC_VERSION:Mgcc-[6-9]*) || !empty(CC_VERSION:Mgcc-1[0-9].*) 69.if !empty(PKGSRC_COMPILER:Mclang) || !empty(CC_VERSION:Mgcc-[6-9]*) || !empty(CC_VERSION:Mgcc-1[0-9].*)
65CPPFLAGS.SunOS+= -D_XOPEN_SOURCE=600 70CPPFLAGS.SunOS+= -D_XOPEN_SOURCE=600
66.else 71.else
67CPPFLAGS.SunOS+= -D_XOPEN_SOURCE=500 72CPPFLAGS.SunOS+= -D_XOPEN_SOURCE=500
68.endif 73.endif
69 74
70.include "../../mk/pthread.buildlink3.mk" 75.include "../../mk/pthread.buildlink3.mk"
71.include "../../mk/bsd.pkg.mk" 76.include "../../mk/bsd.pkg.mk"

cvs diff -r1.23 -r1.24 pkgsrc/graphics/libv4l/distinfo (switch to unified diff)

--- pkgsrc/graphics/libv4l/distinfo 2021/11/01 20:35:16 1.23
+++ pkgsrc/graphics/libv4l/distinfo 2022/05/17 11:55:23 1.24
@@ -1,18 +1,18 @@ @@ -1,18 +1,18 @@
1$NetBSD: distinfo,v 1.23 2021/11/01 20:35:16 wiz Exp $ 1$NetBSD: distinfo,v 1.24 2022/05/17 11:55:23 jperkin Exp $
2 2
3BLAKE2s (v4l-utils-1.22.1.tar.bz2) = 3cf8ea5dc9b3ea40ab80a866134c209e479e8518d4bfc0ad4ead2f7f9db0265d 3BLAKE2s (v4l-utils-1.22.1.tar.bz2) = 3cf8ea5dc9b3ea40ab80a866134c209e479e8518d4bfc0ad4ead2f7f9db0265d
4SHA512 (v4l-utils-1.22.1.tar.bz2) = 8a634d8995d13f453dfaf90ca5d0dfb26f2f4b10a0d200d76a949c46f77040d12fc0a5b35e05d7b1ba68bcfc85a445be5a5ab1d4a7d4eabfe3a254038ccc6170 4SHA512 (v4l-utils-1.22.1.tar.bz2) = 8a634d8995d13f453dfaf90ca5d0dfb26f2f4b10a0d200d76a949c46f77040d12fc0a5b35e05d7b1ba68bcfc85a445be5a5ab1d4a7d4eabfe3a254038ccc6170
5Size (v4l-utils-1.22.1.tar.bz2) = 2086238 bytes 5Size (v4l-utils-1.22.1.tar.bz2) = 2086238 bytes
6SHA1 (patch-configure) = 2e3cb8299ea079d4c8fde7577402e7e731abe17d 6SHA1 (patch-configure) = 2e3cb8299ea079d4c8fde7577402e7e731abe17d
7SHA1 (patch-lib_include_libv4l1-videodev.h) = 84256cb64dd755b8a12edd9844bc362c35f10dd4 7SHA1 (patch-lib_include_libv4l1-videodev.h) = 84256cb64dd755b8a12edd9844bc362c35f10dd4
8SHA1 (patch-lib_include_libv4l2rds.h) = ca375e9bac291c8cc295a3393e0497eb12a01cb9 8SHA1 (patch-lib_include_libv4l2rds.h) = ca375e9bac291c8cc295a3393e0497eb12a01cb9
9SHA1 (patch-lib_include_libv4lconvert.h) = e5807fa26d4e73a001f829640902cf22c14b6dfe 9SHA1 (patch-lib_include_libv4lconvert.h) = e5807fa26d4e73a001f829640902cf22c14b6dfe
10SHA1 (patch-lib_libv4l-mplane_libv4l-mplane.c) = df0d6f863ce3b7ff4b2ad87b8cd348785d0200c7 10SHA1 (patch-lib_libv4l-mplane_libv4l-mplane.c) = df0d6f863ce3b7ff4b2ad87b8cd348785d0200c7
11SHA1 (patch-lib_libv4l1_libv4l1.c) = 9aa0fd6dccd372f81e409c6ac0768be94957ab31 11SHA1 (patch-lib_libv4l1_libv4l1.c) = f495eedb0efc9cb1e088984aa0fb06d65ffe3841
12SHA1 (patch-lib_libv4l2_libv4l2.c) = f086f39fd25684f91be773637d1922416d224dc4 12SHA1 (patch-lib_libv4l2_libv4l2.c) = 14146c0b195d1ab3edbde39156478d4b4c146a73
13SHA1 (patch-lib_libv4l2_log.c) = bcab0be4b49a38271bbc2b4a1d56f9289a471d40 13SHA1 (patch-lib_libv4l2_log.c) = bcab0be4b49a38271bbc2b4a1d56f9289a471d40
14SHA1 (patch-lib_libv4l2_v4l2convert.c) = f5fefb20f83005b0f91010af6ec9b7f9f76fabe0 14SHA1 (patch-lib_libv4l2_v4l2convert.c) = f5fefb20f83005b0f91010af6ec9b7f9f76fabe0
15SHA1 (patch-lib_libv4l2rds_libv4l2rds.c) = f6779f323a64bb12ea14829241363f2fc0f9ee2c 15SHA1 (patch-lib_libv4l2rds_libv4l2rds.c) = 004cd1a91a6212d2458518166654d2269106eb04
16SHA1 (patch-lib_libv4lconvert_control_libv4lcontrol.c) = e4a96570f22d837bbf7248231464a143c339e8ea 16SHA1 (patch-lib_libv4lconvert_control_libv4lcontrol.c) = e4a96570f22d837bbf7248231464a143c339e8ea
17SHA1 (patch-lib_libv4lconvert_libv4lsyscall-priv.h) = 2795b366f05365bf7a7caa142ff4b93b38603787 17SHA1 (patch-lib_libv4lconvert_libv4lsyscall-priv.h) = c6dfcc4d84fb1553ebd0396e1b4a9e7e4f43417a
18SHA1 (patch-lib_libv4lconvert_processing_libv4lprocessing.h) = ecb02a055df546eb0f4bcea96f1a55e312495cdd 18SHA1 (patch-lib_libv4lconvert_processing_libv4lprocessing.h) = ecb02a055df546eb0f4bcea96f1a55e312495cdd

File Added: pkgsrc/graphics/libv4l/files/v4l2-controls.h
/* SPDX-License-Identifier: ((GPL-2.0+ WITH Linux-syscall-note) OR BSD-3-Clause) */
/*
 *  Video for Linux Two controls header file
 *
 *  Copyright (C) 1999-2012 the contributors
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  Alternatively you can redistribute this file under the terms of the
 *  BSD license as stated below:
 *
 *  Redistribution and use in source and binary forms, with or without
 *  modification, are permitted provided that the following conditions
 *  are met:
 *  1. Redistributions of source code must retain the above copyright
 *     notice, this list of conditions and the following disclaimer.
 *  2. Redistributions in binary form must reproduce the above copyright
 *     notice, this list of conditions and the following disclaimer in
 *     the documentation and/or other materials provided with the
 *     distribution.
 *  3. The names of its contributors may not be used to endorse or promote
 *     products derived from this software without specific prior written
 *     permission.
 *
 *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 *  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
 *  TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 *  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 *  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 *  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 *  The contents of this header was split off from videodev2.h. All control
 *  definitions should be added to this header, which is included by
 *  videodev2.h.
 */

#ifndef __LINUX_V4L2_CONTROLS_H
#define __LINUX_V4L2_CONTROLS_H

#if defined(__linux)
#include <linux/const.h>
#include <linux/types.h>
#endif

/* Control classes */
#define V4L2_CTRL_CLASS_USER		0x00980000	/* Old-style 'user' controls */
#define V4L2_CTRL_CLASS_CODEC		0x00990000	/* Stateful codec controls */
#define V4L2_CTRL_CLASS_CAMERA		0x009a0000	/* Camera class controls */
#define V4L2_CTRL_CLASS_FM_TX		0x009b0000	/* FM Modulator controls */
#define V4L2_CTRL_CLASS_FLASH		0x009c0000	/* Camera flash controls */
#define V4L2_CTRL_CLASS_JPEG		0x009d0000	/* JPEG-compression controls */
#define V4L2_CTRL_CLASS_IMAGE_SOURCE	0x009e0000	/* Image source controls */
#define V4L2_CTRL_CLASS_IMAGE_PROC	0x009f0000	/* Image processing controls */
#define V4L2_CTRL_CLASS_DV		0x00a00000	/* Digital Video controls */
#define V4L2_CTRL_CLASS_FM_RX		0x00a10000	/* FM Receiver controls */
#define V4L2_CTRL_CLASS_RF_TUNER	0x00a20000	/* RF tuner controls */
#define V4L2_CTRL_CLASS_DETECT		0x00a30000	/* Detection controls */
#define V4L2_CTRL_CLASS_CODEC_STATELESS 0x00a40000	/* Stateless codecs controls */
#define V4L2_CTRL_CLASS_COLORIMETRY	0x00a50000	/* Colorimetry controls */

/* User-class control IDs */

#define V4L2_CID_BASE			(V4L2_CTRL_CLASS_USER | 0x900)
#define V4L2_CID_USER_BASE		V4L2_CID_BASE
#define V4L2_CID_USER_CLASS		(V4L2_CTRL_CLASS_USER | 1)
#define V4L2_CID_BRIGHTNESS		(V4L2_CID_BASE+0)
#define V4L2_CID_CONTRAST		(V4L2_CID_BASE+1)
#define V4L2_CID_SATURATION		(V4L2_CID_BASE+2)
#define V4L2_CID_HUE			(V4L2_CID_BASE+3)
#define V4L2_CID_AUDIO_VOLUME		(V4L2_CID_BASE+5)
#define V4L2_CID_AUDIO_BALANCE		(V4L2_CID_BASE+6)
#define V4L2_CID_AUDIO_BASS		(V4L2_CID_BASE+7)
#define V4L2_CID_AUDIO_TREBLE		(V4L2_CID_BASE+8)
#define V4L2_CID_AUDIO_MUTE		(V4L2_CID_BASE+9)
#define V4L2_CID_AUDIO_LOUDNESS		(V4L2_CID_BASE+10)
#define V4L2_CID_BLACK_LEVEL		(V4L2_CID_BASE+11) /* Deprecated */
#define V4L2_CID_AUTO_WHITE_BALANCE	(V4L2_CID_BASE+12)
#define V4L2_CID_DO_WHITE_BALANCE	(V4L2_CID_BASE+13)
#define V4L2_CID_RED_BALANCE		(V4L2_CID_BASE+14)
#define V4L2_CID_BLUE_BALANCE		(V4L2_CID_BASE+15)
#define V4L2_CID_GAMMA			(V4L2_CID_BASE+16)
#define V4L2_CID_WHITENESS		(V4L2_CID_GAMMA) /* Deprecated */
#define V4L2_CID_EXPOSURE		(V4L2_CID_BASE+17)
#define V4L2_CID_AUTOGAIN		(V4L2_CID_BASE+18)
#define V4L2_CID_GAIN			(V4L2_CID_BASE+19)
#define V4L2_CID_HFLIP			(V4L2_CID_BASE+20)
#define V4L2_CID_VFLIP			(V4L2_CID_BASE+21)

#define V4L2_CID_POWER_LINE_FREQUENCY	(V4L2_CID_BASE+24)
enum v4l2_power_line_frequency {
	V4L2_CID_POWER_LINE_FREQUENCY_DISABLED	= 0,
	V4L2_CID_POWER_LINE_FREQUENCY_50HZ	= 1,
	V4L2_CID_POWER_LINE_FREQUENCY_60HZ	= 2,
	V4L2_CID_POWER_LINE_FREQUENCY_AUTO	= 3,
};
#define V4L2_CID_HUE_AUTO			(V4L2_CID_BASE+25)
#define V4L2_CID_WHITE_BALANCE_TEMPERATURE	(V4L2_CID_BASE+26)
#define V4L2_CID_SHARPNESS			(V4L2_CID_BASE+27)
#define V4L2_CID_BACKLIGHT_COMPENSATION		(V4L2_CID_BASE+28)
#define V4L2_CID_CHROMA_AGC                     (V4L2_CID_BASE+29)
#define V4L2_CID_COLOR_KILLER                   (V4L2_CID_BASE+30)
#define V4L2_CID_COLORFX			(V4L2_CID_BASE+31)
enum v4l2_colorfx {
	V4L2_COLORFX_NONE			= 0,
	V4L2_COLORFX_BW				= 1,
	V4L2_COLORFX_SEPIA			= 2,
	V4L2_COLORFX_NEGATIVE			= 3,
	V4L2_COLORFX_EMBOSS			= 4,
	V4L2_COLORFX_SKETCH			= 5,
	V4L2_COLORFX_SKY_BLUE			= 6,
	V4L2_COLORFX_GRASS_GREEN		= 7,
	V4L2_COLORFX_SKIN_WHITEN		= 8,
	V4L2_COLORFX_VIVID			= 9,
	V4L2_COLORFX_AQUA			= 10,
	V4L2_COLORFX_ART_FREEZE			= 11,
	V4L2_COLORFX_SILHOUETTE			= 12,
	V4L2_COLORFX_SOLARIZATION		= 13,
	V4L2_COLORFX_ANTIQUE			= 14,
	V4L2_COLORFX_SET_CBCR			= 15,
	V4L2_COLORFX_SET_RGB			= 16,
};
#define V4L2_CID_AUTOBRIGHTNESS			(V4L2_CID_BASE+32)
#define V4L2_CID_BAND_STOP_FILTER		(V4L2_CID_BASE+33)

#define V4L2_CID_ROTATE				(V4L2_CID_BASE+34)
#define V4L2_CID_BG_COLOR			(V4L2_CID_BASE+35)

#define V4L2_CID_CHROMA_GAIN                    (V4L2_CID_BASE+36)

#define V4L2_CID_ILLUMINATORS_1			(V4L2_CID_BASE+37)
#define V4L2_CID_ILLUMINATORS_2			(V4L2_CID_BASE+38)

#define V4L2_CID_MIN_BUFFERS_FOR_CAPTURE	(V4L2_CID_BASE+39)
#define V4L2_CID_MIN_BUFFERS_FOR_OUTPUT		(V4L2_CID_BASE+40)

#define V4L2_CID_ALPHA_COMPONENT		(V4L2_CID_BASE+41)
#define V4L2_CID_COLORFX_CBCR			(V4L2_CID_BASE+42)
#define V4L2_CID_COLORFX_RGB			(V4L2_CID_BASE+43)

/* last CID + 1 */
#define V4L2_CID_LASTP1                         (V4L2_CID_BASE+44)

/* USER-class private control IDs */

/* The base for the meye driver controls. See linux/meye.h for the list
 * of controls. We reserve 16 controls for this driver. */
#define V4L2_CID_USER_MEYE_BASE			(V4L2_CID_USER_BASE + 0x1000)

/* The base for the bttv driver controls.
 * We reserve 32 controls for this driver. */
#define V4L2_CID_USER_BTTV_BASE			(V4L2_CID_USER_BASE + 0x1010)


/* The base for the s2255 driver controls.
 * We reserve 16 controls for this driver. */
#define V4L2_CID_USER_S2255_BASE		(V4L2_CID_USER_BASE + 0x1030)

/*
 * The base for the si476x driver controls. See include/media/drv-intf/si476x.h
 * for the list of controls. Total of 16 controls is reserved for this driver
 */
#define V4L2_CID_USER_SI476X_BASE		(V4L2_CID_USER_BASE + 0x1040)

/* The base for the TI VPE driver controls. Total of 16 controls is reserved for
 * this driver */
#define V4L2_CID_USER_TI_VPE_BASE		(V4L2_CID_USER_BASE + 0x1050)

/* The base for the saa7134 driver controls.
 * We reserve 16 controls for this driver. */
#define V4L2_CID_USER_SAA7134_BASE		(V4L2_CID_USER_BASE + 0x1060)

/* The base for the adv7180 driver controls.
 * We reserve 16 controls for this driver. */
#define V4L2_CID_USER_ADV7180_BASE		(V4L2_CID_USER_BASE + 0x1070)

/* The base for the tc358743 driver controls.
 * We reserve 16 controls for this driver. */
#define V4L2_CID_USER_TC358743_BASE		(V4L2_CID_USER_BASE + 0x1080)

/* The base for the max217x driver controls.
 * We reserve 32 controls for this driver
 */
#define V4L2_CID_USER_MAX217X_BASE		(V4L2_CID_USER_BASE + 0x1090)

/* The base for the imx driver controls.
 * We reserve 16 controls for this driver. */
#define V4L2_CID_USER_IMX_BASE			(V4L2_CID_USER_BASE + 0x10b0)

/*
 * The base for the atmel isc driver controls.
 * We reserve 32 controls for this driver.
 */
#define V4L2_CID_USER_ATMEL_ISC_BASE		(V4L2_CID_USER_BASE + 0x10c0)

/*
 * The base for the CODA driver controls.
 * We reserve 16 controls for this driver.
 */
#define V4L2_CID_USER_CODA_BASE			(V4L2_CID_USER_BASE + 0x10e0)
/*
 * The base for MIPI CCS driver controls.
 * We reserve 128 controls for this driver.
 */
#define V4L2_CID_USER_CCS_BASE			(V4L2_CID_USER_BASE + 0x10f0)
/*
 * The base for Allegro driver controls.
 * We reserve 16 controls for this driver.
 */
#define V4L2_CID_USER_ALLEGRO_BASE		(V4L2_CID_USER_BASE + 0x1170)

/*
 * The base for the isl7998x driver controls.
 * We reserve 16 controls for this driver.
 */
#define V4L2_CID_USER_ISL7998X_BASE		(V4L2_CID_USER_BASE + 0x1180)

/* MPEG-class control IDs */
/* The MPEG controls are applicable to all codec controls
 * and the 'MPEG' part of the define is historical */

#define V4L2_CID_CODEC_BASE			(V4L2_CTRL_CLASS_CODEC | 0x900)
#define V4L2_CID_CODEC_CLASS			(V4L2_CTRL_CLASS_CODEC | 1)

/*  MPEG streams, specific to multiplexed streams */
#define V4L2_CID_MPEG_STREAM_TYPE		(V4L2_CID_CODEC_BASE+0)
enum v4l2_mpeg_stream_type {
	V4L2_MPEG_STREAM_TYPE_MPEG2_PS   = 0, /* MPEG-2 program stream */
	V4L2_MPEG_STREAM_TYPE_MPEG2_TS   = 1, /* MPEG-2 transport stream */
	V4L2_MPEG_STREAM_TYPE_MPEG1_SS   = 2, /* MPEG-1 system stream */
	V4L2_MPEG_STREAM_TYPE_MPEG2_DVD  = 3, /* MPEG-2 DVD-compatible stream */
	V4L2_MPEG_STREAM_TYPE_MPEG1_VCD  = 4, /* MPEG-1 VCD-compatible stream */
	V4L2_MPEG_STREAM_TYPE_MPEG2_SVCD = 5, /* MPEG-2 SVCD-compatible stream */
};
#define V4L2_CID_MPEG_STREAM_PID_PMT		(V4L2_CID_CODEC_BASE+1)
#define V4L2_CID_MPEG_STREAM_PID_AUDIO		(V4L2_CID_CODEC_BASE+2)
#define V4L2_CID_MPEG_STREAM_PID_VIDEO		(V4L2_CID_CODEC_BASE+3)
#define V4L2_CID_MPEG_STREAM_PID_PCR		(V4L2_CID_CODEC_BASE+4)
#define V4L2_CID_MPEG_STREAM_PES_ID_AUDIO	(V4L2_CID_CODEC_BASE+5)
#define V4L2_CID_MPEG_STREAM_PES_ID_VIDEO	(V4L2_CID_CODEC_BASE+6)
#define V4L2_CID_MPEG_STREAM_VBI_FMT		(V4L2_CID_CODEC_BASE+7)
enum v4l2_mpeg_stream_vbi_fmt {
	V4L2_MPEG_STREAM_VBI_FMT_NONE = 0,  /* No VBI in the MPEG stream */
	V4L2_MPEG_STREAM_VBI_FMT_IVTV = 1,  /* VBI in private packets, IVTV format */
};

/*  MPEG audio controls specific to multiplexed streams  */
#define V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ	(V4L2_CID_CODEC_BASE+100)
enum v4l2_mpeg_audio_sampling_freq {
	V4L2_MPEG_AUDIO_SAMPLING_FREQ_44100 = 0,
	V4L2_MPEG_AUDIO_SAMPLING_FREQ_48000 = 1,
	V4L2_MPEG_AUDIO_SAMPLING_FREQ_32000 = 2,
};
#define V4L2_CID_MPEG_AUDIO_ENCODING		(V4L2_CID_CODEC_BASE+101)
enum v4l2_mpeg_audio_encoding {
	V4L2_MPEG_AUDIO_ENCODING_LAYER_1 = 0,
	V4L2_MPEG_AUDIO_ENCODING_LAYER_2 = 1,
	V4L2_MPEG_AUDIO_ENCODING_LAYER_3 = 2,
	V4L2_MPEG_AUDIO_ENCODING_AAC     = 3,
	V4L2_MPEG_AUDIO_ENCODING_AC3     = 4,
};
#define V4L2_CID_MPEG_AUDIO_L1_BITRATE		(V4L2_CID_CODEC_BASE+102)
enum v4l2_mpeg_audio_l1_bitrate {
	V4L2_MPEG_AUDIO_L1_BITRATE_32K  = 0,
	V4L2_MPEG_AUDIO_L1_BITRATE_64K  = 1,
	V4L2_MPEG_AUDIO_L1_BITRATE_96K  = 2,
	V4L2_MPEG_AUDIO_L1_BITRATE_128K = 3,
	V4L2_MPEG_AUDIO_L1_BITRATE_160K = 4,
	V4L2_MPEG_AUDIO_L1_BITRATE_192K = 5,
	V4L2_MPEG_AUDIO_L1_BITRATE_224K = 6,
	V4L2_MPEG_AUDIO_L1_BITRATE_256K = 7,
	V4L2_MPEG_AUDIO_L1_BITRATE_288K = 8,
	V4L2_MPEG_AUDIO_L1_BITRATE_320K = 9,
	V4L2_MPEG_AUDIO_L1_BITRATE_352K = 10,
	V4L2_MPEG_AUDIO_L1_BITRATE_384K = 11,
	V4L2_MPEG_AUDIO_L1_BITRATE_416K = 12,
	V4L2_MPEG_AUDIO_L1_BITRATE_448K = 13,
};
#define V4L2_CID_MPEG_AUDIO_L2_BITRATE		(V4L2_CID_CODEC_BASE+103)
enum v4l2_mpeg_audio_l2_bitrate {
	V4L2_MPEG_AUDIO_L2_BITRATE_32K  = 0,
	V4L2_MPEG_AUDIO_L2_BITRATE_48K  = 1,
	V4L2_MPEG_AUDIO_L2_BITRATE_56K  = 2,
	V4L2_MPEG_AUDIO_L2_BITRATE_64K  = 3,
	V4L2_MPEG_AUDIO_L2_BITRATE_80K  = 4,
	V4L2_MPEG_AUDIO_L2_BITRATE_96K  = 5,
	V4L2_MPEG_AUDIO_L2_BITRATE_112K = 6,
	V4L2_MPEG_AUDIO_L2_BITRATE_128K = 7,
	V4L2_MPEG_AUDIO_L2_BITRATE_160K = 8,
	V4L2_MPEG_AUDIO_L2_BITRATE_192K = 9,
	V4L2_MPEG_AUDIO_L2_BITRATE_224K = 10,
	V4L2_MPEG_AUDIO_L2_BITRATE_256K = 11,
	V4L2_MPEG_AUDIO_L2_BITRATE_320K = 12,
	V4L2_MPEG_AUDIO_L2_BITRATE_384K = 13,
};
#define V4L2_CID_MPEG_AUDIO_L3_BITRATE		(V4L2_CID_CODEC_BASE+104)
enum v4l2_mpeg_audio_l3_bitrate {
	V4L2_MPEG_AUDIO_L3_BITRATE_32K  = 0,
	V4L2_MPEG_AUDIO_L3_BITRATE_40K  = 1,
	V4L2_MPEG_AUDIO_L3_BITRATE_48K  = 2,
	V4L2_MPEG_AUDIO_L3_BITRATE_56K  = 3,
	V4L2_MPEG_AUDIO_L3_BITRATE_64K  = 4,
	V4L2_MPEG_AUDIO_L3_BITRATE_80K  = 5,
	V4L2_MPEG_AUDIO_L3_BITRATE_96K  = 6,
	V4L2_MPEG_AUDIO_L3_BITRATE_112K = 7,
	V4L2_MPEG_AUDIO_L3_BITRATE_128K = 8,
	V4L2_MPEG_AUDIO_L3_BITRATE_160K = 9,
	V4L2_MPEG_AUDIO_L3_BITRATE_192K = 10,
	V4L2_MPEG_AUDIO_L3_BITRATE_224K = 11,
	V4L2_MPEG_AUDIO_L3_BITRATE_256K = 12,
	V4L2_MPEG_AUDIO_L3_BITRATE_320K = 13,
};
#define V4L2_CID_MPEG_AUDIO_MODE		(V4L2_CID_CODEC_BASE+105)
enum v4l2_mpeg_audio_mode {
	V4L2_MPEG_AUDIO_MODE_STEREO       = 0,
	V4L2_MPEG_AUDIO_MODE_JOINT_STEREO = 1,
	V4L2_MPEG_AUDIO_MODE_DUAL         = 2,
	V4L2_MPEG_AUDIO_MODE_MONO         = 3,
};
#define V4L2_CID_MPEG_AUDIO_MODE_EXTENSION	(V4L2_CID_CODEC_BASE+106)
enum v4l2_mpeg_audio_mode_extension {
	V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_4  = 0,
	V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_8  = 1,
	V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_12 = 2,
	V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_16 = 3,
};
#define V4L2_CID_MPEG_AUDIO_EMPHASIS		(V4L2_CID_CODEC_BASE+107)
enum v4l2_mpeg_audio_emphasis {
	V4L2_MPEG_AUDIO_EMPHASIS_NONE         = 0,
	V4L2_MPEG_AUDIO_EMPHASIS_50_DIV_15_uS = 1,
	V4L2_MPEG_AUDIO_EMPHASIS_CCITT_J17    = 2,
};
#define V4L2_CID_MPEG_AUDIO_CRC			(V4L2_CID_CODEC_BASE+108)
enum v4l2_mpeg_audio_crc {
	V4L2_MPEG_AUDIO_CRC_NONE  = 0,
	V4L2_MPEG_AUDIO_CRC_CRC16 = 1,
};
#define V4L2_CID_MPEG_AUDIO_MUTE		(V4L2_CID_CODEC_BASE+109)
#define V4L2_CID_MPEG_AUDIO_AAC_BITRATE		(V4L2_CID_CODEC_BASE+110)
#define V4L2_CID_MPEG_AUDIO_AC3_BITRATE		(V4L2_CID_CODEC_BASE+111)
enum v4l2_mpeg_audio_ac3_bitrate {
	V4L2_MPEG_AUDIO_AC3_BITRATE_32K  = 0,
	V4L2_MPEG_AUDIO_AC3_BITRATE_40K  = 1,
	V4L2_MPEG_AUDIO_AC3_BITRATE_48K  = 2,
	V4L2_MPEG_AUDIO_AC3_BITRATE_56K  = 3,
	V4L2_MPEG_AUDIO_AC3_BITRATE_64K  = 4,
	V4L2_MPEG_AUDIO_AC3_BITRATE_80K  = 5,
	V4L2_MPEG_AUDIO_AC3_BITRATE_96K  = 6,
	V4L2_MPEG_AUDIO_AC3_BITRATE_112K = 7,
	V4L2_MPEG_AUDIO_AC3_BITRATE_128K = 8,
	V4L2_MPEG_AUDIO_AC3_BITRATE_160K = 9,
	V4L2_MPEG_AUDIO_AC3_BITRATE_192K = 10,
	V4L2_MPEG_AUDIO_AC3_BITRATE_224K = 11,
	V4L2_MPEG_AUDIO_AC3_BITRATE_256K = 12,
	V4L2_MPEG_AUDIO_AC3_BITRATE_320K = 13,
	V4L2_MPEG_AUDIO_AC3_BITRATE_384K = 14,
	V4L2_MPEG_AUDIO_AC3_BITRATE_448K = 15,
	V4L2_MPEG_AUDIO_AC3_BITRATE_512K = 16,
	V4L2_MPEG_AUDIO_AC3_BITRATE_576K = 17,
	V4L2_MPEG_AUDIO_AC3_BITRATE_640K = 18,
};
#define V4L2_CID_MPEG_AUDIO_DEC_PLAYBACK	(V4L2_CID_CODEC_BASE+112)
enum v4l2_mpeg_audio_dec_playback {
	V4L2_MPEG_AUDIO_DEC_PLAYBACK_AUTO	    = 0,
	V4L2_MPEG_AUDIO_DEC_PLAYBACK_STEREO	    = 1,
	V4L2_MPEG_AUDIO_DEC_PLAYBACK_LEFT	    = 2,
	V4L2_MPEG_AUDIO_DEC_PLAYBACK_RIGHT	    = 3,
	V4L2_MPEG_AUDIO_DEC_PLAYBACK_MONO	    = 4,
	V4L2_MPEG_AUDIO_DEC_PLAYBACK_SWAPPED_STEREO = 5,
};
#define V4L2_CID_MPEG_AUDIO_DEC_MULTILINGUAL_PLAYBACK (V4L2_CID_CODEC_BASE+113)

/*  MPEG video controls specific to multiplexed streams */
#define V4L2_CID_MPEG_VIDEO_ENCODING		(V4L2_CID_CODEC_BASE+200)
enum v4l2_mpeg_video_encoding {
	V4L2_MPEG_VIDEO_ENCODING_MPEG_1     = 0,
	V4L2_MPEG_VIDEO_ENCODING_MPEG_2     = 1,
	V4L2_MPEG_VIDEO_ENCODING_MPEG_4_AVC = 2,
};
#define V4L2_CID_MPEG_VIDEO_ASPECT		(V4L2_CID_CODEC_BASE+201)
enum v4l2_mpeg_video_aspect {
	V4L2_MPEG_VIDEO_ASPECT_1x1     = 0,
	V4L2_MPEG_VIDEO_ASPECT_4x3     = 1,
	V4L2_MPEG_VIDEO_ASPECT_16x9    = 2,
	V4L2_MPEG_VIDEO_ASPECT_221x100 = 3,
};
#define V4L2_CID_MPEG_VIDEO_B_FRAMES		(V4L2_CID_CODEC_BASE+202)
#define V4L2_CID_MPEG_VIDEO_GOP_SIZE		(V4L2_CID_CODEC_BASE+203)
#define V4L2_CID_MPEG_VIDEO_GOP_CLOSURE		(V4L2_CID_CODEC_BASE+204)
#define V4L2_CID_MPEG_VIDEO_PULLDOWN		(V4L2_CID_CODEC_BASE+205)
#define V4L2_CID_MPEG_VIDEO_BITRATE_MODE	(V4L2_CID_CODEC_BASE+206)
enum v4l2_mpeg_video_bitrate_mode {
	V4L2_MPEG_VIDEO_BITRATE_MODE_VBR = 0,
	V4L2_MPEG_VIDEO_BITRATE_MODE_CBR = 1,
	V4L2_MPEG_VIDEO_BITRATE_MODE_CQ  = 2,
};
#define V4L2_CID_MPEG_VIDEO_BITRATE		(V4L2_CID_CODEC_BASE+207)
#define V4L2_CID_MPEG_VIDEO_BITRATE_PEAK	(V4L2_CID_CODEC_BASE+208)
#define V4L2_CID_MPEG_VIDEO_TEMPORAL_DECIMATION (V4L2_CID_CODEC_BASE+209)
#define V4L2_CID_MPEG_VIDEO_MUTE		(V4L2_CID_CODEC_BASE+210)
#define V4L2_CID_MPEG_VIDEO_MUTE_YUV		(V4L2_CID_CODEC_BASE+211)
#define V4L2_CID_MPEG_VIDEO_DECODER_SLICE_INTERFACE		(V4L2_CID_CODEC_BASE+212)
#define V4L2_CID_MPEG_VIDEO_DECODER_MPEG4_DEBLOCK_FILTER	(V4L2_CID_CODEC_BASE+213)
#define V4L2_CID_MPEG_VIDEO_CYCLIC_INTRA_REFRESH_MB		(V4L2_CID_CODEC_BASE+214)
#define V4L2_CID_MPEG_VIDEO_FRAME_RC_ENABLE			(V4L2_CID_CODEC_BASE+215)
#define V4L2_CID_MPEG_VIDEO_HEADER_MODE				(V4L2_CID_CODEC_BASE+216)
enum v4l2_mpeg_video_header_mode {
	V4L2_MPEG_VIDEO_HEADER_MODE_SEPARATE			= 0,
	V4L2_MPEG_VIDEO_HEADER_MODE_JOINED_WITH_1ST_FRAME	= 1,

};
#define V4L2_CID_MPEG_VIDEO_MAX_REF_PIC			(V4L2_CID_CODEC_BASE+217)
#define V4L2_CID_MPEG_VIDEO_MB_RC_ENABLE		(V4L2_CID_CODEC_BASE+218)
#define V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_BYTES	(V4L2_CID_CODEC_BASE+219)
#define V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_MB		(V4L2_CID_CODEC_BASE+220)
#define V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE		(V4L2_CID_CODEC_BASE+221)
enum v4l2_mpeg_video_multi_slice_mode {
	V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_SINGLE		= 0,
	V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_MAX_MB		= 1,
	V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_MAX_BYTES	= 2,
#ifndef __KERNEL__
	/* Kept for backwards compatibility reasons. Stupid typo... */
	V4L2_MPEG_VIDEO_MULTI_SICE_MODE_MAX_MB		= 1,
	V4L2_MPEG_VIDEO_MULTI_SICE_MODE_MAX_BYTES	= 2,
#endif
};
#define V4L2_CID_MPEG_VIDEO_VBV_SIZE			(V4L2_CID_CODEC_BASE+222)
#define V4L2_CID_MPEG_VIDEO_DEC_PTS			(V4L2_CID_CODEC_BASE+223)
#define V4L2_CID_MPEG_VIDEO_DEC_FRAME			(V4L2_CID_CODEC_BASE+224)
#define V4L2_CID_MPEG_VIDEO_VBV_DELAY			(V4L2_CID_CODEC_BASE+225)
#define V4L2_CID_MPEG_VIDEO_REPEAT_SEQ_HEADER		(V4L2_CID_CODEC_BASE+226)
#define V4L2_CID_MPEG_VIDEO_MV_H_SEARCH_RANGE		(V4L2_CID_CODEC_BASE+227)
#define V4L2_CID_MPEG_VIDEO_MV_V_SEARCH_RANGE		(V4L2_CID_CODEC_BASE+228)
#define V4L2_CID_MPEG_VIDEO_FORCE_KEY_FRAME		(V4L2_CID_CODEC_BASE+229)
#define V4L2_CID_MPEG_VIDEO_BASELAYER_PRIORITY_ID	(V4L2_CID_CODEC_BASE+230)
#define V4L2_CID_MPEG_VIDEO_AU_DELIMITER		(V4L2_CID_CODEC_BASE+231)
#define V4L2_CID_MPEG_VIDEO_LTR_COUNT			(V4L2_CID_CODEC_BASE+232)
#define V4L2_CID_MPEG_VIDEO_FRAME_LTR_INDEX		(V4L2_CID_CODEC_BASE+233)
#define V4L2_CID_MPEG_VIDEO_USE_LTR_FRAMES		(V4L2_CID_CODEC_BASE+234)
#define V4L2_CID_MPEG_VIDEO_DEC_CONCEAL_COLOR		(V4L2_CID_CODEC_BASE+235)
#define V4L2_CID_MPEG_VIDEO_INTRA_REFRESH_PERIOD	(V4L2_CID_CODEC_BASE+236)

/* CIDs for the MPEG-2 Part 2 (H.262) codec */
#define V4L2_CID_MPEG_VIDEO_MPEG2_LEVEL			(V4L2_CID_CODEC_BASE+270)
enum v4l2_mpeg_video_mpeg2_level {
	V4L2_MPEG_VIDEO_MPEG2_LEVEL_LOW		= 0,
	V4L2_MPEG_VIDEO_MPEG2_LEVEL_MAIN	= 1,
	V4L2_MPEG_VIDEO_MPEG2_LEVEL_HIGH_1440	= 2,
	V4L2_MPEG_VIDEO_MPEG2_LEVEL_HIGH	= 3,
};
#define V4L2_CID_MPEG_VIDEO_MPEG2_PROFILE		(V4L2_CID_CODEC_BASE+271)
enum v4l2_mpeg_video_mpeg2_profile {
	V4L2_MPEG_VIDEO_MPEG2_PROFILE_SIMPLE				= 0,
	V4L2_MPEG_VIDEO_MPEG2_PROFILE_MAIN				= 1,
	V4L2_MPEG_VIDEO_MPEG2_PROFILE_SNR_SCALABLE			= 2,
	V4L2_MPEG_VIDEO_MPEG2_PROFILE_SPATIALLY_SCALABLE		= 3,
	V4L2_MPEG_VIDEO_MPEG2_PROFILE_HIGH				= 4,
	V4L2_MPEG_VIDEO_MPEG2_PROFILE_MULTIVIEW				= 5,
};

/* CIDs for the FWHT codec as used by the vicodec driver. */
#define V4L2_CID_FWHT_I_FRAME_QP             (V4L2_CID_CODEC_BASE + 290)
#define V4L2_CID_FWHT_P_FRAME_QP             (V4L2_CID_CODEC_BASE + 291)

#define V4L2_CID_MPEG_VIDEO_H263_I_FRAME_QP		(V4L2_CID_CODEC_BASE+300)
#define V4L2_CID_MPEG_VIDEO_H263_P_FRAME_QP		(V4L2_CID_CODEC_BASE+301)
#define V4L2_CID_MPEG_VIDEO_H263_B_FRAME_QP		(V4L2_CID_CODEC_BASE+302)
#define V4L2_CID_MPEG_VIDEO_H263_MIN_QP			(V4L2_CID_CODEC_BASE+303)
#define V4L2_CID_MPEG_VIDEO_H263_MAX_QP			(V4L2_CID_CODEC_BASE+304)
#define V4L2_CID_MPEG_VIDEO_H264_I_FRAME_QP		(V4L2_CID_CODEC_BASE+350)
#define V4L2_CID_MPEG_VIDEO_H264_P_FRAME_QP		(V4L2_CID_CODEC_BASE+351)
#define V4L2_CID_MPEG_VIDEO_H264_B_FRAME_QP		(V4L2_CID_CODEC_BASE+352)
#define V4L2_CID_MPEG_VIDEO_H264_MIN_QP			(V4L2_CID_CODEC_BASE+353)
#define V4L2_CID_MPEG_VIDEO_H264_MAX_QP			(V4L2_CID_CODEC_BASE+354)
#define V4L2_CID_MPEG_VIDEO_H264_8X8_TRANSFORM		(V4L2_CID_CODEC_BASE+355)
#define V4L2_CID_MPEG_VIDEO_H264_CPB_SIZE		(V4L2_CID_CODEC_BASE+356)
#define V4L2_CID_MPEG_VIDEO_H264_ENTROPY_MODE		(V4L2_CID_CODEC_BASE+357)
enum v4l2_mpeg_video_h264_entropy_mode {
	V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CAVLC	= 0,
	V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CABAC	= 1,
};
#define V4L2_CID_MPEG_VIDEO_H264_I_PERIOD		(V4L2_CID_CODEC_BASE+358)
#define V4L2_CID_MPEG_VIDEO_H264_LEVEL			(V4L2_CID_CODEC_BASE+359)
enum v4l2_mpeg_video_h264_level {
	V4L2_MPEG_VIDEO_H264_LEVEL_1_0	= 0,
	V4L2_MPEG_VIDEO_H264_LEVEL_1B	= 1,
	V4L2_MPEG_VIDEO_H264_LEVEL_1_1	= 2,
	V4L2_MPEG_VIDEO_H264_LEVEL_1_2	= 3,
	V4L2_MPEG_VIDEO_H264_LEVEL_1_3	= 4,
	V4L2_MPEG_VIDEO_H264_LEVEL_2_0	= 5,
	V4L2_MPEG_VIDEO_H264_LEVEL_2_1	= 6,
	V4L2_MPEG_VIDEO_H264_LEVEL_2_2	= 7,
	V4L2_MPEG_VIDEO_H264_LEVEL_3_0	= 8,
	V4L2_MPEG_VIDEO_H264_LEVEL_3_1	= 9,
	V4L2_MPEG_VIDEO_H264_LEVEL_3_2	= 10,
	V4L2_MPEG_VIDEO_H264_LEVEL_4_0	= 11,
	V4L2_MPEG_VIDEO_H264_LEVEL_4_1	= 12,
	V4L2_MPEG_VIDEO_H264_LEVEL_4_2	= 13,
	V4L2_MPEG_VIDEO_H264_LEVEL_5_0	= 14,
	V4L2_MPEG_VIDEO_H264_LEVEL_5_1	= 15,
	V4L2_MPEG_VIDEO_H264_LEVEL_5_2	= 16,
	V4L2_MPEG_VIDEO_H264_LEVEL_6_0	= 17,
	V4L2_MPEG_VIDEO_H264_LEVEL_6_1	= 18,
	V4L2_MPEG_VIDEO_H264_LEVEL_6_2	= 19,
};
#define V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_ALPHA	(V4L2_CID_CODEC_BASE+360)
#define V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_BETA	(V4L2_CID_CODEC_BASE+361)
#define V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_MODE	(V4L2_CID_CODEC_BASE+362)
enum v4l2_mpeg_video_h264_loop_filter_mode {
	V4L2_MPEG_VIDEO_H264_LOOP_FILTER_MODE_ENABLED				= 0,
	V4L2_MPEG_VIDEO_H264_LOOP_FILTER_MODE_DISABLED				= 1,
	V4L2_MPEG_VIDEO_H264_LOOP_FILTER_MODE_DISABLED_AT_SLICE_BOUNDARY	= 2,
};
#define V4L2_CID_MPEG_VIDEO_H264_PROFILE		(V4L2_CID_CODEC_BASE+363)
enum v4l2_mpeg_video_h264_profile {
	V4L2_MPEG_VIDEO_H264_PROFILE_BASELINE			= 0,
	V4L2_MPEG_VIDEO_H264_PROFILE_CONSTRAINED_BASELINE	= 1,
	V4L2_MPEG_VIDEO_H264_PROFILE_MAIN			= 2,
	V4L2_MPEG_VIDEO_H264_PROFILE_EXTENDED			= 3,
	V4L2_MPEG_VIDEO_H264_PROFILE_HIGH			= 4,
	V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_10			= 5,
	V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_422			= 6,
	V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_444_PREDICTIVE	= 7,
	V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_10_INTRA		= 8,
	V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_422_INTRA		= 9,
	V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_444_INTRA		= 10,
	V4L2_MPEG_VIDEO_H264_PROFILE_CAVLC_444_INTRA		= 11,
	V4L2_MPEG_VIDEO_H264_PROFILE_SCALABLE_BASELINE		= 12,
	V4L2_MPEG_VIDEO_H264_PROFILE_SCALABLE_HIGH		= 13,
	V4L2_MPEG_VIDEO_H264_PROFILE_SCALABLE_HIGH_INTRA	= 14,
	V4L2_MPEG_VIDEO_H264_PROFILE_STEREO_HIGH		= 15,
	V4L2_MPEG_VIDEO_H264_PROFILE_MULTIVIEW_HIGH		= 16,
	V4L2_MPEG_VIDEO_H264_PROFILE_CONSTRAINED_HIGH		= 17,
};
#define V4L2_CID_MPEG_VIDEO_H264_VUI_EXT_SAR_HEIGHT	(V4L2_CID_CODEC_BASE+364)
#define V4L2_CID_MPEG_VIDEO_H264_VUI_EXT_SAR_WIDTH	(V4L2_CID_CODEC_BASE+365)
#define V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_ENABLE		(V4L2_CID_CODEC_BASE+366)
#define V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_IDC		(V4L2_CID_CODEC_BASE+367)
enum v4l2_mpeg_video_h264_vui_sar_idc {
	V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_UNSPECIFIED	= 0,
	V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_1x1		= 1,
	V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_12x11		= 2,
	V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_10x11		= 3,
	V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_16x11		= 4,
	V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_40x33		= 5,
	V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_24x11		= 6,
	V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_20x11		= 7,
	V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_32x11		= 8,
	V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_80x33		= 9,
	V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_18x11		= 10,
	V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_15x11		= 11,
	V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_64x33		= 12,
	V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_160x99		= 13,
	V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_4x3		= 14,
	V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_3x2		= 15,
	V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_2x1		= 16,
	V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_EXTENDED	= 17,
};
#define V4L2_CID_MPEG_VIDEO_H264_SEI_FRAME_PACKING		(V4L2_CID_CODEC_BASE+368)
#define V4L2_CID_MPEG_VIDEO_H264_SEI_FP_CURRENT_FRAME_0		(V4L2_CID_CODEC_BASE+369)
#define V4L2_CID_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE	(V4L2_CID_CODEC_BASE+370)
enum v4l2_mpeg_video_h264_sei_fp_arrangement_type {
	V4L2_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE_CHECKERBOARD	= 0,
	V4L2_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE_COLUMN		= 1,
	V4L2_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE_ROW		= 2,
	V4L2_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE_SIDE_BY_SIDE	= 3,
	V4L2_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE_TOP_BOTTOM		= 4,
	V4L2_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE_TEMPORAL		= 5,
};
#define V4L2_CID_MPEG_VIDEO_H264_FMO			(V4L2_CID_CODEC_BASE+371)
#define V4L2_CID_MPEG_VIDEO_H264_FMO_MAP_TYPE		(V4L2_CID_CODEC_BASE+372)
enum v4l2_mpeg_video_h264_fmo_map_type {
	V4L2_MPEG_VIDEO_H264_FMO_MAP_TYPE_INTERLEAVED_SLICES		= 0,
	V4L2_MPEG_VIDEO_H264_FMO_MAP_TYPE_SCATTERED_SLICES		= 1,
	V4L2_MPEG_VIDEO_H264_FMO_MAP_TYPE_FOREGROUND_WITH_LEFT_OVER	= 2,
	V4L2_MPEG_VIDEO_H264_FMO_MAP_TYPE_BOX_OUT			= 3,
	V4L2_MPEG_VIDEO_H264_FMO_MAP_TYPE_RASTER_SCAN			= 4,
	V4L2_MPEG_VIDEO_H264_FMO_MAP_TYPE_WIPE_SCAN			= 5,
	V4L2_MPEG_VIDEO_H264_FMO_MAP_TYPE_EXPLICIT			= 6,
};
#define V4L2_CID_MPEG_VIDEO_H264_FMO_SLICE_GROUP	(V4L2_CID_CODEC_BASE+373)
#define V4L2_CID_MPEG_VIDEO_H264_FMO_CHANGE_DIRECTION	(V4L2_CID_CODEC_BASE+374)
enum v4l2_mpeg_video_h264_fmo_change_dir {
	V4L2_MPEG_VIDEO_H264_FMO_CHANGE_DIR_RIGHT	= 0,
	V4L2_MPEG_VIDEO_H264_FMO_CHANGE_DIR_LEFT	= 1,
};
#define V4L2_CID_MPEG_VIDEO_H264_FMO_CHANGE_RATE	(V4L2_CID_CODEC_BASE+375)
#define V4L2_CID_MPEG_VIDEO_H264_FMO_RUN_LENGTH		(V4L2_CID_CODEC_BASE+376)
#define V4L2_CID_MPEG_VIDEO_H264_ASO			(V4L2_CID_CODEC_BASE+377)
#define V4L2_CID_MPEG_VIDEO_H264_ASO_SLICE_ORDER	(V4L2_CID_CODEC_BASE+378)
#define V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING		(V4L2_CID_CODEC_BASE+379)
#define V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_TYPE	(V4L2_CID_CODEC_BASE+380)
enum v4l2_mpeg_video_h264_hierarchical_coding_type {
	V4L2_MPEG_VIDEO_H264_HIERARCHICAL_CODING_B	= 0,
	V4L2_MPEG_VIDEO_H264_HIERARCHICAL_CODING_P	= 1,
};
#define V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_LAYER	(V4L2_CID_CODEC_BASE+381)
#define V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_LAYER_QP	(V4L2_CID_CODEC_BASE+382)
#define V4L2_CID_MPEG_VIDEO_H264_CONSTRAINED_INTRA_PREDICTION	(V4L2_CID_CODEC_BASE+383)
#define V4L2_CID_MPEG_VIDEO_H264_CHROMA_QP_INDEX_OFFSET		(V4L2_CID_CODEC_BASE+384)
#define V4L2_CID_MPEG_VIDEO_H264_I_FRAME_MIN_QP	(V4L2_CID_CODEC_BASE+385)
#define V4L2_CID_MPEG_VIDEO_H264_I_FRAME_MAX_QP	(V4L2_CID_CODEC_BASE+386)
#define V4L2_CID_MPEG_VIDEO_H264_P_FRAME_MIN_QP	(V4L2_CID_CODEC_BASE+387)
#define V4L2_CID_MPEG_VIDEO_H264_P_FRAME_MAX_QP	(V4L2_CID_CODEC_BASE+388)
#define V4L2_CID_MPEG_VIDEO_H264_B_FRAME_MIN_QP	(V4L2_CID_CODEC_BASE+389)
#define V4L2_CID_MPEG_VIDEO_H264_B_FRAME_MAX_QP	(V4L2_CID_CODEC_BASE+390)
#define V4L2_CID_MPEG_VIDEO_H264_HIER_CODING_L0_BR	(V4L2_CID_CODEC_BASE+391)
#define V4L2_CID_MPEG_VIDEO_H264_HIER_CODING_L1_BR	(V4L2_CID_CODEC_BASE+392)
#define V4L2_CID_MPEG_VIDEO_H264_HIER_CODING_L2_BR	(V4L2_CID_CODEC_BASE+393)
#define V4L2_CID_MPEG_VIDEO_H264_HIER_CODING_L3_BR	(V4L2_CID_CODEC_BASE+394)
#define V4L2_CID_MPEG_VIDEO_H264_HIER_CODING_L4_BR	(V4L2_CID_CODEC_BASE+395)
#define V4L2_CID_MPEG_VIDEO_H264_HIER_CODING_L5_BR	(V4L2_CID_CODEC_BASE+396)
#define V4L2_CID_MPEG_VIDEO_H264_HIER_CODING_L6_BR	(V4L2_CID_CODEC_BASE+397)
#define V4L2_CID_MPEG_VIDEO_MPEG4_I_FRAME_QP	(V4L2_CID_CODEC_BASE+400)
#define V4L2_CID_MPEG_VIDEO_MPEG4_P_FRAME_QP	(V4L2_CID_CODEC_BASE+401)
#define V4L2_CID_MPEG_VIDEO_MPEG4_B_FRAME_QP	(V4L2_CID_CODEC_BASE+402)
#define V4L2_CID_MPEG_VIDEO_MPEG4_MIN_QP	(V4L2_CID_CODEC_BASE+403)
#define V4L2_CID_MPEG_VIDEO_MPEG4_MAX_QP	(V4L2_CID_CODEC_BASE+404)
#define V4L2_CID_MPEG_VIDEO_MPEG4_LEVEL		(V4L2_CID_CODEC_BASE+405)
enum v4l2_mpeg_video_mpeg4_level {
	V4L2_MPEG_VIDEO_MPEG4_LEVEL_0	= 0,
	V4L2_MPEG_VIDEO_MPEG4_LEVEL_0B	= 1,
	V4L2_MPEG_VIDEO_MPEG4_LEVEL_1	= 2,
	V4L2_MPEG_VIDEO_MPEG4_LEVEL_2	= 3,
	V4L2_MPEG_VIDEO_MPEG4_LEVEL_3	= 4,
	V4L2_MPEG_VIDEO_MPEG4_LEVEL_3B	= 5,
	V4L2_MPEG_VIDEO_MPEG4_LEVEL_4	= 6,
	V4L2_MPEG_VIDEO_MPEG4_LEVEL_5	= 7,
};
#define V4L2_CID_MPEG_VIDEO_MPEG4_PROFILE	(V4L2_CID_CODEC_BASE+406)
enum v4l2_mpeg_video_mpeg4_profile {
	V4L2_MPEG_VIDEO_MPEG4_PROFILE_SIMPLE				= 0,
	V4L2_MPEG_VIDEO_MPEG4_PROFILE_ADVANCED_SIMPLE			= 1,
	V4L2_MPEG_VIDEO_MPEG4_PROFILE_CORE				= 2,
	V4L2_MPEG_VIDEO_MPEG4_PROFILE_SIMPLE_SCALABLE			= 3,
	V4L2_MPEG_VIDEO_MPEG4_PROFILE_ADVANCED_CODING_EFFICIENCY	= 4,
};
#define V4L2_CID_MPEG_VIDEO_MPEG4_QPEL		(V4L2_CID_CODEC_BASE+407)

/*  Control IDs for VP8 streams
 *  Although VP8 is not part of MPEG we add these controls to the MPEG class
 *  as that class is already handling other video compression standards
 */
#define V4L2_CID_MPEG_VIDEO_VPX_NUM_PARTITIONS		(V4L2_CID_CODEC_BASE+500)
enum v4l2_vp8_num_partitions {
	V4L2_CID_MPEG_VIDEO_VPX_1_PARTITION	= 0,
	V4L2_CID_MPEG_VIDEO_VPX_2_PARTITIONS	= 1,
	V4L2_CID_MPEG_VIDEO_VPX_4_PARTITIONS	= 2,
	V4L2_CID_MPEG_VIDEO_VPX_8_PARTITIONS	= 3,
};
#define V4L2_CID_MPEG_VIDEO_VPX_IMD_DISABLE_4X4		(V4L2_CID_CODEC_BASE+501)
#define V4L2_CID_MPEG_VIDEO_VPX_NUM_REF_FRAMES		(V4L2_CID_CODEC_BASE+502)
enum v4l2_vp8_num_ref_frames {
	V4L2_CID_MPEG_VIDEO_VPX_1_REF_FRAME	= 0,
	V4L2_CID_MPEG_VIDEO_VPX_2_REF_FRAME	= 1,
	V4L2_CID_MPEG_VIDEO_VPX_3_REF_FRAME	= 2,
};
#define V4L2_CID_MPEG_VIDEO_VPX_FILTER_LEVEL		(V4L2_CID_CODEC_BASE+503)
#define V4L2_CID_MPEG_VIDEO_VPX_FILTER_SHARPNESS	(V4L2_CID_CODEC_BASE+504)
#define V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_REF_PERIOD	(V4L2_CID_CODEC_BASE+505)
#define V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_SEL	(V4L2_CID_CODEC_BASE+506)
enum v4l2_vp8_golden_frame_sel {
	V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_USE_PREV		= 0,
	V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_USE_REF_PERIOD	= 1,
};
#define V4L2_CID_MPEG_VIDEO_VPX_MIN_QP			(V4L2_CID_CODEC_BASE+507)
#define V4L2_CID_MPEG_VIDEO_VPX_MAX_QP			(V4L2_CID_CODEC_BASE+508)
#define V4L2_CID_MPEG_VIDEO_VPX_I_FRAME_QP		(V4L2_CID_CODEC_BASE+509)
#define V4L2_CID_MPEG_VIDEO_VPX_P_FRAME_QP		(V4L2_CID_CODEC_BASE+510)

#define V4L2_CID_MPEG_VIDEO_VP8_PROFILE			(V4L2_CID_CODEC_BASE+511)
enum v4l2_mpeg_video_vp8_profile {
	V4L2_MPEG_VIDEO_VP8_PROFILE_0				= 0,
	V4L2_MPEG_VIDEO_VP8_PROFILE_1				= 1,
	V4L2_MPEG_VIDEO_VP8_PROFILE_2				= 2,
	V4L2_MPEG_VIDEO_VP8_PROFILE_3				= 3,
};
/* Deprecated alias for compatibility reasons. */
#define V4L2_CID_MPEG_VIDEO_VPX_PROFILE	V4L2_CID_MPEG_VIDEO_VP8_PROFILE
#define V4L2_CID_MPEG_VIDEO_VP9_PROFILE			(V4L2_CID_CODEC_BASE+512)
enum v4l2_mpeg_video_vp9_profile {
	V4L2_MPEG_VIDEO_VP9_PROFILE_0				= 0,
	V4L2_MPEG_VIDEO_VP9_PROFILE_1				= 1,
	V4L2_MPEG_VIDEO_VP9_PROFILE_2				= 2,
	V4L2_MPEG_VIDEO_VP9_PROFILE_3				= 3,
};
#define V4L2_CID_MPEG_VIDEO_VP9_LEVEL			(V4L2_CID_CODEC_BASE+513)
enum v4l2_mpeg_video_vp9_level {
	V4L2_MPEG_VIDEO_VP9_LEVEL_1_0	= 0,
	V4L2_MPEG_VIDEO_VP9_LEVEL_1_1	= 1,
	V4L2_MPEG_VIDEO_VP9_LEVEL_2_0	= 2,
	V4L2_MPEG_VIDEO_VP9_LEVEL_2_1	= 3,
	V4L2_MPEG_VIDEO_VP9_LEVEL_3_0	= 4,
	V4L2_MPEG_VIDEO_VP9_LEVEL_3_1	= 5,
	V4L2_MPEG_VIDEO_VP9_LEVEL_4_0	= 6,
	V4L2_MPEG_VIDEO_VP9_LEVEL_4_1	= 7,
	V4L2_MPEG_VIDEO_VP9_LEVEL_5_0	= 8,
	V4L2_MPEG_VIDEO_VP9_LEVEL_5_1	= 9,
	V4L2_MPEG_VIDEO_VP9_LEVEL_5_2	= 10,
	V4L2_MPEG_VIDEO_VP9_LEVEL_6_0	= 11,
	V4L2_MPEG_VIDEO_VP9_LEVEL_6_1	= 12,
	V4L2_MPEG_VIDEO_VP9_LEVEL_6_2	= 13,
};

/* CIDs for HEVC encoding. */

#define V4L2_CID_MPEG_VIDEO_HEVC_MIN_QP		(V4L2_CID_CODEC_BASE + 600)
#define V4L2_CID_MPEG_VIDEO_HEVC_MAX_QP		(V4L2_CID_CODEC_BASE + 601)
#define V4L2_CID_MPEG_VIDEO_HEVC_I_FRAME_QP	(V4L2_CID_CODEC_BASE + 602)
#define V4L2_CID_MPEG_VIDEO_HEVC_P_FRAME_QP	(V4L2_CID_CODEC_BASE + 603)
#define V4L2_CID_MPEG_VIDEO_HEVC_B_FRAME_QP	(V4L2_CID_CODEC_BASE + 604)
#define V4L2_CID_MPEG_VIDEO_HEVC_HIER_QP	(V4L2_CID_CODEC_BASE + 605)
#define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_TYPE (V4L2_CID_CODEC_BASE + 606)
enum v4l2_mpeg_video_hevc_hier_coding_type {
	V4L2_MPEG_VIDEO_HEVC_HIERARCHICAL_CODING_B	= 0,
	V4L2_MPEG_VIDEO_HEVC_HIERARCHICAL_CODING_P	= 1,
};
#define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_LAYER	(V4L2_CID_CODEC_BASE + 607)
#define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L0_QP	(V4L2_CID_CODEC_BASE + 608)
#define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L1_QP	(V4L2_CID_CODEC_BASE + 609)
#define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L2_QP	(V4L2_CID_CODEC_BASE + 610)
#define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L3_QP	(V4L2_CID_CODEC_BASE + 611)
#define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L4_QP	(V4L2_CID_CODEC_BASE + 612)
#define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L5_QP	(V4L2_CID_CODEC_BASE + 613)
#define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L6_QP	(V4L2_CID_CODEC_BASE + 614)
#define V4L2_CID_MPEG_VIDEO_HEVC_PROFILE	(V4L2_CID_CODEC_BASE + 615)
enum v4l2_mpeg_video_hevc_profile {
	V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN = 0,
	V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN_STILL_PICTURE = 1,
	V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN_10 = 2,
};
#define V4L2_CID_MPEG_VIDEO_HEVC_LEVEL		(V4L2_CID_CODEC_BASE + 616)
enum v4l2_mpeg_video_hevc_level {
	V4L2_MPEG_VIDEO_HEVC_LEVEL_1	= 0,
	V4L2_MPEG_VIDEO_HEVC_LEVEL_2	= 1,
	V4L2_MPEG_VIDEO_HEVC_LEVEL_2_1	= 2,
	V4L2_MPEG_VIDEO_HEVC_LEVEL_3	= 3,
	V4L2_MPEG_VIDEO_HEVC_LEVEL_3_1	= 4,
	V4L2_MPEG_VIDEO_HEVC_LEVEL_4	= 5,
	V4L2_MPEG_VIDEO_HEVC_LEVEL_4_1	= 6,
	V4L2_MPEG_VIDEO_HEVC_LEVEL_5	= 7,
	V4L2_MPEG_VIDEO_HEVC_LEVEL_5_1	= 8,
	V4L2_MPEG_VIDEO_HEVC_LEVEL_5_2	= 9,
	V4L2_MPEG_VIDEO_HEVC_LEVEL_6	= 10,
	V4L2_MPEG_VIDEO_HEVC_LEVEL_6_1	= 11,
	V4L2_MPEG_VIDEO_HEVC_LEVEL_6_2	= 12,
};
#define V4L2_CID_MPEG_VIDEO_HEVC_FRAME_RATE_RESOLUTION	(V4L2_CID_CODEC_BASE + 617)
#define V4L2_CID_MPEG_VIDEO_HEVC_TIER			(V4L2_CID_CODEC_BASE + 618)
enum v4l2_mpeg_video_hevc_tier {
	V4L2_MPEG_VIDEO_HEVC_TIER_MAIN = 0,
	V4L2_MPEG_VIDEO_HEVC_TIER_HIGH = 1,
};
#define V4L2_CID_MPEG_VIDEO_HEVC_MAX_PARTITION_DEPTH	(V4L2_CID_CODEC_BASE + 619)
#define V4L2_CID_MPEG_VIDEO_HEVC_LOOP_FILTER_MODE	(V4L2_CID_CODEC_BASE + 620)
enum v4l2_cid_mpeg_video_hevc_loop_filter_mode {
	V4L2_MPEG_VIDEO_HEVC_LOOP_FILTER_MODE_DISABLED			 = 0,
	V4L2_MPEG_VIDEO_HEVC_LOOP_FILTER_MODE_ENABLED			 = 1,
	V4L2_MPEG_VIDEO_HEVC_LOOP_FILTER_MODE_DISABLED_AT_SLICE_BOUNDARY = 2,
};
#define V4L2_CID_MPEG_VIDEO_HEVC_LF_BETA_OFFSET_DIV2	(V4L2_CID_CODEC_BASE + 621)
#define V4L2_CID_MPEG_VIDEO_HEVC_LF_TC_OFFSET_DIV2	(V4L2_CID_CODEC_BASE + 622)
#define V4L2_CID_MPEG_VIDEO_HEVC_REFRESH_TYPE		(V4L2_CID_CODEC_BASE + 623)
enum v4l2_cid_mpeg_video_hevc_refresh_type {
	V4L2_MPEG_VIDEO_HEVC_REFRESH_NONE		= 0,
	V4L2_MPEG_VIDEO_HEVC_REFRESH_CRA		= 1,
	V4L2_MPEG_VIDEO_HEVC_REFRESH_IDR		= 2,
};
#define V4L2_CID_MPEG_VIDEO_HEVC_REFRESH_PERIOD		(V4L2_CID_CODEC_BASE + 624)
#define V4L2_CID_MPEG_VIDEO_HEVC_LOSSLESS_CU		(V4L2_CID_CODEC_BASE + 625)
#define V4L2_CID_MPEG_VIDEO_HEVC_CONST_INTRA_PRED	(V4L2_CID_CODEC_BASE + 626)
#define V4L2_CID_MPEG_VIDEO_HEVC_WAVEFRONT		(V4L2_CID_CODEC_BASE + 627)
#define V4L2_CID_MPEG_VIDEO_HEVC_GENERAL_PB		(V4L2_CID_CODEC_BASE + 628)
#define V4L2_CID_MPEG_VIDEO_HEVC_TEMPORAL_ID		(V4L2_CID_CODEC_BASE + 629)
#define V4L2_CID_MPEG_VIDEO_HEVC_STRONG_SMOOTHING	(V4L2_CID_CODEC_BASE + 630)
#define V4L2_CID_MPEG_VIDEO_HEVC_MAX_NUM_MERGE_MV_MINUS1	(V4L2_CID_CODEC_BASE + 631)
#define V4L2_CID_MPEG_VIDEO_HEVC_INTRA_PU_SPLIT		(V4L2_CID_CODEC_BASE + 632)
#define V4L2_CID_MPEG_VIDEO_HEVC_TMV_PREDICTION		(V4L2_CID_CODEC_BASE + 633)
#define V4L2_CID_MPEG_VIDEO_HEVC_WITHOUT_STARTCODE	(V4L2_CID_CODEC_BASE + 634)
#define V4L2_CID_MPEG_VIDEO_HEVC_SIZE_OF_LENGTH_FIELD	(V4L2_CID_CODEC_BASE + 635)
enum v4l2_cid_mpeg_video_hevc_size_of_length_field {
	V4L2_MPEG_VIDEO_HEVC_SIZE_0		= 0,
	V4L2_MPEG_VIDEO_HEVC_SIZE_1		= 1,
	V4L2_MPEG_VIDEO_HEVC_SIZE_2		= 2,
	V4L2_MPEG_VIDEO_HEVC_SIZE_4		= 3,
};
#define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L0_BR	(V4L2_CID_CODEC_BASE + 636)
#define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L1_BR	(V4L2_CID_CODEC_BASE + 637)
#define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L2_BR	(V4L2_CID_CODEC_BASE + 638)
#define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L3_BR	(V4L2_CID_CODEC_BASE + 639)
#define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L4_BR	(V4L2_CID_CODEC_BASE + 640)
#define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L5_BR	(V4L2_CID_CODEC_BASE + 641)
#define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L6_BR	(V4L2_CID_CODEC_BASE + 642)
#define V4L2_CID_MPEG_VIDEO_REF_NUMBER_FOR_PFRAMES	(V4L2_CID_CODEC_BASE + 643)
#define V4L2_CID_MPEG_VIDEO_PREPEND_SPSPPS_TO_IDR	(V4L2_CID_CODEC_BASE + 644)
#define V4L2_CID_MPEG_VIDEO_CONSTANT_QUALITY		(V4L2_CID_CODEC_BASE + 645)
#define V4L2_CID_MPEG_VIDEO_FRAME_SKIP_MODE		(V4L2_CID_CODEC_BASE + 646)
enum v4l2_mpeg_video_frame_skip_mode {
	V4L2_MPEG_VIDEO_FRAME_SKIP_MODE_DISABLED	= 0,
	V4L2_MPEG_VIDEO_FRAME_SKIP_MODE_LEVEL_LIMIT	= 1,
	V4L2_MPEG_VIDEO_FRAME_SKIP_MODE_BUF_LIMIT	= 2,
};

#define V4L2_CID_MPEG_VIDEO_HEVC_I_FRAME_MIN_QP        (V4L2_CID_CODEC_BASE + 647)
#define V4L2_CID_MPEG_VIDEO_HEVC_I_FRAME_MAX_QP        (V4L2_CID_CODEC_BASE + 648)
#define V4L2_CID_MPEG_VIDEO_HEVC_P_FRAME_MIN_QP        (V4L2_CID_CODEC_BASE + 649)
#define V4L2_CID_MPEG_VIDEO_HEVC_P_FRAME_MAX_QP        (V4L2_CID_CODEC_BASE + 650)
#define V4L2_CID_MPEG_VIDEO_HEVC_B_FRAME_MIN_QP        (V4L2_CID_CODEC_BASE + 651)
#define V4L2_CID_MPEG_VIDEO_HEVC_B_FRAME_MAX_QP        (V4L2_CID_CODEC_BASE + 652)

#define V4L2_CID_MPEG_VIDEO_DEC_DISPLAY_DELAY		(V4L2_CID_CODEC_BASE + 653)
#define V4L2_CID_MPEG_VIDEO_DEC_DISPLAY_DELAY_ENABLE	(V4L2_CID_CODEC_BASE + 654)

/*  MPEG-class control IDs specific to the CX2341x driver as defined by V4L2 */
#define V4L2_CID_CODEC_CX2341X_BASE				(V4L2_CTRL_CLASS_CODEC | 0x1000)
#define V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE		(V4L2_CID_CODEC_CX2341X_BASE+0)
enum v4l2_mpeg_cx2341x_video_spatial_filter_mode {
	V4L2_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE_MANUAL = 0,
	V4L2_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE_AUTO   = 1,
};
#define V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER		(V4L2_CID_CODEC_CX2341X_BASE+1)
#define V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE	(V4L2_CID_CODEC_CX2341X_BASE+2)
enum v4l2_mpeg_cx2341x_video_luma_spatial_filter_type {
	V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_OFF                  = 0,
	V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_1D_HOR               = 1,
	V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_1D_VERT              = 2,
	V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_2D_HV_SEPARABLE      = 3,
	V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_2D_SYM_NON_SEPARABLE = 4,
};
#define V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE	(V4L2_CID_CODEC_CX2341X_BASE+3)
enum v4l2_mpeg_cx2341x_video_chroma_spatial_filter_type {
	V4L2_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE_OFF    = 0,
	V4L2_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE_1D_HOR = 1,
};
#define V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE	(V4L2_CID_CODEC_CX2341X_BASE+4)
enum v4l2_mpeg_cx2341x_video_temporal_filter_mode {
	V4L2_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE_MANUAL = 0,
	V4L2_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE_AUTO   = 1,
};
#define V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER		(V4L2_CID_CODEC_CX2341X_BASE+5)
#define V4L2_CID_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE		(V4L2_CID_CODEC_CX2341X_BASE+6)
enum v4l2_mpeg_cx2341x_video_median_filter_type {
	V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_OFF      = 0,
	V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_HOR      = 1,
	V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_VERT     = 2,
	V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_HOR_VERT = 3,
	V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_DIAG     = 4,
};
#define V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_BOTTOM	(V4L2_CID_CODEC_CX2341X_BASE+7)
#define V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_TOP	(V4L2_CID_CODEC_CX2341X_BASE+8)
#define V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_BOTTOM	(V4L2_CID_CODEC_CX2341X_BASE+9)
#define V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_TOP	(V4L2_CID_CODEC_CX2341X_BASE+10)
#define V4L2_CID_MPEG_CX2341X_STREAM_INSERT_NAV_PACKETS		(V4L2_CID_CODEC_CX2341X_BASE+11)

/*  MPEG-class control IDs specific to the Samsung MFC 5.1 driver as defined by V4L2 */
#define V4L2_CID_CODEC_MFC51_BASE				(V4L2_CTRL_CLASS_CODEC | 0x1100)

#define V4L2_CID_MPEG_MFC51_VIDEO_DECODER_H264_DISPLAY_DELAY		(V4L2_CID_CODEC_MFC51_BASE+0)
#define V4L2_CID_MPEG_MFC51_VIDEO_DECODER_H264_DISPLAY_DELAY_ENABLE	(V4L2_CID_CODEC_MFC51_BASE+1)
#define V4L2_CID_MPEG_MFC51_VIDEO_FRAME_SKIP_MODE			(V4L2_CID_CODEC_MFC51_BASE+2)
enum v4l2_mpeg_mfc51_video_frame_skip_mode {
	V4L2_MPEG_MFC51_VIDEO_FRAME_SKIP_MODE_DISABLED		= 0,
	V4L2_MPEG_MFC51_VIDEO_FRAME_SKIP_MODE_LEVEL_LIMIT	= 1,
	V4L2_MPEG_MFC51_VIDEO_FRAME_SKIP_MODE_BUF_LIMIT		= 2,
};
#define V4L2_CID_MPEG_MFC51_VIDEO_FORCE_FRAME_TYPE			(V4L2_CID_CODEC_MFC51_BASE+3)
enum v4l2_mpeg_mfc51_video_force_frame_type {
	V4L2_MPEG_MFC51_VIDEO_FORCE_FRAME_TYPE_DISABLED		= 0,
	V4L2_MPEG_MFC51_VIDEO_FORCE_FRAME_TYPE_I_FRAME		= 1,
	V4L2_MPEG_MFC51_VIDEO_FORCE_FRAME_TYPE_NOT_CODED	= 2,
};
#define V4L2_CID_MPEG_MFC51_VIDEO_PADDING				(V4L2_CID_CODEC_MFC51_BASE+4)
#define V4L2_CID_MPEG_MFC51_VIDEO_PADDING_YUV				(V4L2_CID_CODEC_MFC51_BASE+5)
#define V4L2_CID_MPEG_MFC51_VIDEO_RC_FIXED_TARGET_BIT			(V4L2_CID_CODEC_MFC51_BASE+6)
#define V4L2_CID_MPEG_MFC51_VIDEO_RC_REACTION_COEFF			(V4L2_CID_CODEC_MFC51_BASE+7)
#define V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_ACTIVITY		(V4L2_CID_CODEC_MFC51_BASE+50)
#define V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_DARK			(V4L2_CID_CODEC_MFC51_BASE+51)
#define V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_SMOOTH		(V4L2_CID_CODEC_MFC51_BASE+52)
#define V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_STATIC		(V4L2_CID_CODEC_MFC51_BASE+53)
#define V4L2_CID_MPEG_MFC51_VIDEO_H264_NUM_REF_PIC_FOR_P		(V4L2_CID_CODEC_MFC51_BASE+54)

/*  Camera class control IDs */

#define V4L2_CID_CAMERA_CLASS_BASE	(V4L2_CTRL_CLASS_CAMERA | 0x900)
#define V4L2_CID_CAMERA_CLASS		(V4L2_CTRL_CLASS_CAMERA | 1)

#define V4L2_CID_EXPOSURE_AUTO			(V4L2_CID_CAMERA_CLASS_BASE+1)
enum  v4l2_exposure_auto_type {
	V4L2_EXPOSURE_AUTO = 0,
	V4L2_EXPOSURE_MANUAL = 1,
	V4L2_EXPOSURE_SHUTTER_PRIORITY = 2,
	V4L2_EXPOSURE_APERTURE_PRIORITY = 3
};
#define V4L2_CID_EXPOSURE_ABSOLUTE		(V4L2_CID_CAMERA_CLASS_BASE+2)
#define V4L2_CID_EXPOSURE_AUTO_PRIORITY		(V4L2_CID_CAMERA_CLASS_BASE+3)

#define V4L2_CID_PAN_RELATIVE			(V4L2_CID_CAMERA_CLASS_BASE+4)
#define V4L2_CID_TILT_RELATIVE			(V4L2_CID_CAMERA_CLASS_BASE+5)
#define V4L2_CID_PAN_RESET			(V4L2_CID_CAMERA_CLASS_BASE+6)
#define V4L2_CID_TILT_RESET			(V4L2_CID_CAMERA_CLASS_BASE+7)

#define V4L2_CID_PAN_ABSOLUTE			(V4L2_CID_CAMERA_CLASS_BASE+8)
#define V4L2_CID_TILT_ABSOLUTE			(V4L2_CID_CAMERA_CLASS_BASE+9)

#define V4L2_CID_FOCUS_ABSOLUTE			(V4L2_CID_CAMERA_CLASS_BASE+10)
#define V4L2_CID_FOCUS_RELATIVE			(V4L2_CID_CAMERA_CLASS_BASE+11)
#define V4L2_CID_FOCUS_AUTO			(V4L2_CID_CAMERA_CLASS_BASE+12)

#define V4L2_CID_ZOOM_ABSOLUTE			(V4L2_CID_CAMERA_CLASS_BASE+13)
#define V4L2_CID_ZOOM_RELATIVE			(V4L2_CID_CAMERA_CLASS_BASE+14)
#define V4L2_CID_ZOOM_CONTINUOUS		(V4L2_CID_CAMERA_CLASS_BASE+15)

#define V4L2_CID_PRIVACY			(V4L2_CID_CAMERA_CLASS_BASE+16)

#define V4L2_CID_IRIS_ABSOLUTE			(V4L2_CID_CAMERA_CLASS_BASE+17)
#define V4L2_CID_IRIS_RELATIVE			(V4L2_CID_CAMERA_CLASS_BASE+18)

#define V4L2_CID_AUTO_EXPOSURE_BIAS		(V4L2_CID_CAMERA_CLASS_BASE+19)

#define V4L2_CID_AUTO_N_PRESET_WHITE_BALANCE	(V4L2_CID_CAMERA_CLASS_BASE+20)
enum v4l2_auto_n_preset_white_balance {
	V4L2_WHITE_BALANCE_MANUAL		= 0,
	V4L2_WHITE_BALANCE_AUTO			= 1,
	V4L2_WHITE_BALANCE_INCANDESCENT		= 2,
	V4L2_WHITE_BALANCE_FLUORESCENT		= 3,
	V4L2_WHITE_BALANCE_FLUORESCENT_H	= 4,
	V4L2_WHITE_BALANCE_HORIZON		= 5,
	V4L2_WHITE_BALANCE_DAYLIGHT		= 6,
	V4L2_WHITE_BALANCE_FLASH		= 7,
	V4L2_WHITE_BALANCE_CLOUDY		= 8,
	V4L2_WHITE_BALANCE_SHADE		= 9,
};

#define V4L2_CID_WIDE_DYNAMIC_RANGE		(V4L2_CID_CAMERA_CLASS_BASE+21)
#define V4L2_CID_IMAGE_STABILIZATION		(V4L2_CID_CAMERA_CLASS_BASE+22)

#define V4L2_CID_ISO_SENSITIVITY		(V4L2_CID_CAMERA_CLASS_BASE+23)
#define V4L2_CID_ISO_SENSITIVITY_AUTO		(V4L2_CID_CAMERA_CLASS_BASE+24)
enum v4l2_iso_sensitivity_auto_type {
	V4L2_ISO_SENSITIVITY_MANUAL		= 0,
	V4L2_ISO_SENSITIVITY_AUTO		= 1,
};

#define V4L2_CID_EXPOSURE_METERING		(V4L2_CID_CAMERA_CLASS_BASE+25)
enum v4l2_exposure_metering {
	V4L2_EXPOSURE_METERING_AVERAGE		= 0,
	V4L2_EXPOSURE_METERING_CENTER_WEIGHTED	= 1,
	V4L2_EXPOSURE_METERING_SPOT		= 2,
	V4L2_EXPOSURE_METERING_MATRIX		= 3,
};

#define V4L2_CID_SCENE_MODE			(V4L2_CID_CAMERA_CLASS_BASE+26)
enum v4l2_scene_mode {
	V4L2_SCENE_MODE_NONE			= 0,
	V4L2_SCENE_MODE_BACKLIGHT		= 1,
	V4L2_SCENE_MODE_BEACH_SNOW		= 2,
	V4L2_SCENE_MODE_CANDLE_LIGHT		= 3,
	V4L2_SCENE_MODE_DAWN_DUSK		= 4,
	V4L2_SCENE_MODE_FALL_COLORS		= 5,
	V4L2_SCENE_MODE_FIREWORKS		= 6,
	V4L2_SCENE_MODE_LANDSCAPE		= 7,
	V4L2_SCENE_MODE_NIGHT			= 8,
	V4L2_SCENE_MODE_PARTY_INDOOR		= 9,
	V4L2_SCENE_MODE_PORTRAIT		= 10,
	V4L2_SCENE_MODE_SPORTS			= 11,
	V4L2_SCENE_MODE_SUNSET			= 12,
	V4L2_SCENE_MODE_TEXT			= 13,
};

#define V4L2_CID_3A_LOCK			(V4L2_CID_CAMERA_CLASS_BASE+27)
#define V4L2_LOCK_EXPOSURE			(1 << 0)
#define V4L2_LOCK_WHITE_BALANCE			(1 << 1)
#define V4L2_LOCK_FOCUS				(1 << 2)

#define V4L2_CID_AUTO_FOCUS_START		(V4L2_CID_CAMERA_CLASS_BASE+28)
#define V4L2_CID_AUTO_FOCUS_STOP		(V4L2_CID_CAMERA_CLASS_BASE+29)
#define V4L2_CID_AUTO_FOCUS_STATUS		(V4L2_CID_CAMERA_CLASS_BASE+30)
#define V4L2_AUTO_FOCUS_STATUS_IDLE		(0 << 0)
#define V4L2_AUTO_FOCUS_STATUS_BUSY		(1 << 0)
#define V4L2_AUTO_FOCUS_STATUS_REACHED		(1 << 1)
#define V4L2_AUTO_FOCUS_STATUS_FAILED		(1 << 2)

#define V4L2_CID_AUTO_FOCUS_RANGE		(V4L2_CID_CAMERA_CLASS_BASE+31)
enum v4l2_auto_focus_range {
	V4L2_AUTO_FOCUS_RANGE_AUTO		= 0,
	V4L2_AUTO_FOCUS_RANGE_NORMAL		= 1,
	V4L2_AUTO_FOCUS_RANGE_MACRO		= 2,
	V4L2_AUTO_FOCUS_RANGE_INFINITY		= 3,
};

#define V4L2_CID_PAN_SPEED			(V4L2_CID_CAMERA_CLASS_BASE+32)
#define V4L2_CID_TILT_SPEED			(V4L2_CID_CAMERA_CLASS_BASE+33)

#define V4L2_CID_CAMERA_ORIENTATION		(V4L2_CID_CAMERA_CLASS_BASE+34)
#define V4L2_CAMERA_ORIENTATION_FRONT		0
#define V4L2_CAMERA_ORIENTATION_BACK		1
#define V4L2_CAMERA_ORIENTATION_EXTERNAL	2

#define V4L2_CID_CAMERA_SENSOR_ROTATION		(V4L2_CID_CAMERA_CLASS_BASE+35)

/* FM Modulator class control IDs */

#define V4L2_CID_FM_TX_CLASS_BASE		(V4L2_CTRL_CLASS_FM_TX | 0x900)
#define V4L2_CID_FM_TX_CLASS			(V4L2_CTRL_CLASS_FM_TX | 1)

#define V4L2_CID_RDS_TX_DEVIATION		(V4L2_CID_FM_TX_CLASS_BASE + 1)
#define V4L2_CID_RDS_TX_PI			(V4L2_CID_FM_TX_CLASS_BASE + 2)
#define V4L2_CID_RDS_TX_PTY			(V4L2_CID_FM_TX_CLASS_BASE + 3)
#define V4L2_CID_RDS_TX_PS_NAME			(V4L2_CID_FM_TX_CLASS_BASE + 5)
#define V4L2_CID_RDS_TX_RADIO_TEXT		(V4L2_CID_FM_TX_CLASS_BASE + 6)
#define V4L2_CID_RDS_TX_MONO_STEREO		(V4L2_CID_FM_TX_CLASS_BASE + 7)
#define V4L2_CID_RDS_TX_ARTIFICIAL_HEAD		(V4L2_CID_FM_TX_CLASS_BASE + 8)
#define V4L2_CID_RDS_TX_COMPRESSED		(V4L2_CID_FM_TX_CLASS_BASE + 9)
#define V4L2_CID_RDS_TX_DYNAMIC_PTY		(V4L2_CID_FM_TX_CLASS_BASE + 10)
#define V4L2_CID_RDS_TX_TRAFFIC_ANNOUNCEMENT	(V4L2_CID_FM_TX_CLASS_BASE + 11)
#define V4L2_CID_RDS_TX_TRAFFIC_PROGRAM		(V4L2_CID_FM_TX_CLASS_BASE + 12)
#define V4L2_CID_RDS_TX_MUSIC_SPEECH		(V4L2_CID_FM_TX_CLASS_BASE + 13)
#define V4L2_CID_RDS_TX_ALT_FREQS_ENABLE	(V4L2_CID_FM_TX_CLASS_BASE + 14)
#define V4L2_CID_RDS_TX_ALT_FREQS		(V4L2_CID_FM_TX_CLASS_BASE + 15)

#define V4L2_CID_AUDIO_LIMITER_ENABLED		(V4L2_CID_FM_TX_CLASS_BASE + 64)
#define V4L2_CID_AUDIO_LIMITER_RELEASE_TIME	(V4L2_CID_FM_TX_CLASS_BASE + 65)
#define V4L2_CID_AUDIO_LIMITER_DEVIATION	(V4L2_CID_FM_TX_CLASS_BASE + 66)

#define V4L2_CID_AUDIO_COMPRESSION_ENABLED	(V4L2_CID_FM_TX_CLASS_BASE + 80)
#define V4L2_CID_AUDIO_COMPRESSION_GAIN		(V4L2_CID_FM_TX_CLASS_BASE + 81)
#define V4L2_CID_AUDIO_COMPRESSION_THRESHOLD	(V4L2_CID_FM_TX_CLASS_BASE + 82)
#define V4L2_CID_AUDIO_COMPRESSION_ATTACK_TIME	(V4L2_CID_FM_TX_CLASS_BASE + 83)
#define V4L2_CID_AUDIO_COMPRESSION_RELEASE_TIME	(V4L2_CID_FM_TX_CLASS_BASE + 84)

#define V4L2_CID_PILOT_TONE_ENABLED		(V4L2_CID_FM_TX_CLASS_BASE + 96)
#define V4L2_CID_PILOT_TONE_DEVIATION		(V4L2_CID_FM_TX_CLASS_BASE + 97)
#define V4L2_CID_PILOT_TONE_FREQUENCY		(V4L2_CID_FM_TX_CLASS_BASE + 98)

#define V4L2_CID_TUNE_PREEMPHASIS		(V4L2_CID_FM_TX_CLASS_BASE + 112)
enum v4l2_preemphasis {
	V4L2_PREEMPHASIS_DISABLED	= 0,
	V4L2_PREEMPHASIS_50_uS		= 1,
	V4L2_PREEMPHASIS_75_uS		= 2,
};
#define V4L2_CID_TUNE_POWER_LEVEL		(V4L2_CID_FM_TX_CLASS_BASE + 113)
#define V4L2_CID_TUNE_ANTENNA_CAPACITOR		(V4L2_CID_FM_TX_CLASS_BASE + 114)


/* Flash and privacy (indicator) light controls */

#define V4L2_CID_FLASH_CLASS_BASE		(V4L2_CTRL_CLASS_FLASH | 0x900)
#define V4L2_CID_FLASH_CLASS			(V4L2_CTRL_CLASS_FLASH | 1)

#define V4L2_CID_FLASH_LED_MODE			(V4L2_CID_FLASH_CLASS_BASE + 1)
enum v4l2_flash_led_mode {
	V4L2_FLASH_LED_MODE_NONE,
	V4L2_FLASH_LED_MODE_FLASH,
	V4L2_FLASH_LED_MODE_TORCH,
};

#define V4L2_CID_FLASH_STROBE_SOURCE		(V4L2_CID_FLASH_CLASS_BASE + 2)
enum v4l2_flash_strobe_source {
	V4L2_FLASH_STROBE_SOURCE_SOFTWARE,
	V4L2_FLASH_STROBE_SOURCE_EXTERNAL,
};

#define V4L2_CID_FLASH_STROBE			(V4L2_CID_FLASH_CLASS_BASE + 3)
#define V4L2_CID_FLASH_STROBE_STOP		(V4L2_CID_FLASH_CLASS_BASE + 4)
#define V4L2_CID_FLASH_STROBE_STATUS		(V4L2_CID_FLASH_CLASS_BASE + 5)

#define V4L2_CID_FLASH_TIMEOUT			(V4L2_CID_FLASH_CLASS_BASE + 6)
#define V4L2_CID_FLASH_INTENSITY		(V4L2_CID_FLASH_CLASS_BASE + 7)
#define V4L2_CID_FLASH_TORCH_INTENSITY		(V4L2_CID_FLASH_CLASS_BASE + 8)
#define V4L2_CID_FLASH_INDICATOR_INTENSITY	(V4L2_CID_FLASH_CLASS_BASE + 9)

#define V4L2_CID_FLASH_FAULT			(V4L2_CID_FLASH_CLASS_BASE + 10)
#define V4L2_FLASH_FAULT_OVER_VOLTAGE		(1 << 0)
#define V4L2_FLASH_FAULT_TIMEOUT		(1 << 1)
#define V4L2_FLASH_FAULT_OVER_TEMPERATURE	(1 << 2)
#define V4L2_FLASH_FAULT_SHORT_CIRCUIT		(1 << 3)
#define V4L2_FLASH_FAULT_OVER_CURRENT		(1 << 4)
#define V4L2_FLASH_FAULT_INDICATOR		(1 << 5)
#define V4L2_FLASH_FAULT_UNDER_VOLTAGE		(1 << 6)
#define V4L2_FLASH_FAULT_INPUT_VOLTAGE		(1 << 7)
#define V4L2_FLASH_FAULT_LED_OVER_TEMPERATURE	(1 << 8)

#define V4L2_CID_FLASH_CHARGE			(V4L2_CID_FLASH_CLASS_BASE + 11)
#define V4L2_CID_FLASH_READY			(V4L2_CID_FLASH_CLASS_BASE + 12)


/* JPEG-class control IDs */

#define V4L2_CID_JPEG_CLASS_BASE		(V4L2_CTRL_CLASS_JPEG | 0x900)
#define V4L2_CID_JPEG_CLASS			(V4L2_CTRL_CLASS_JPEG | 1)

#define	V4L2_CID_JPEG_CHROMA_SUBSAMPLING	(V4L2_CID_JPEG_CLASS_BASE + 1)
enum v4l2_jpeg_chroma_subsampling {
	V4L2_JPEG_CHROMA_SUBSAMPLING_444	= 0,
	V4L2_JPEG_CHROMA_SUBSAMPLING_422	= 1,
	V4L2_JPEG_CHROMA_SUBSAMPLING_420	= 2,
	V4L2_JPEG_CHROMA_SUBSAMPLING_411	= 3,
	V4L2_JPEG_CHROMA_SUBSAMPLING_410	= 4,
	V4L2_JPEG_CHROMA_SUBSAMPLING_GRAY	= 5,
};
#define	V4L2_CID_JPEG_RESTART_INTERVAL		(V4L2_CID_JPEG_CLASS_BASE + 2)
#define	V4L2_CID_JPEG_COMPRESSION_QUALITY	(V4L2_CID_JPEG_CLASS_BASE + 3)

#define	V4L2_CID_JPEG_ACTIVE_MARKER		(V4L2_CID_JPEG_CLASS_BASE + 4)
#define	V4L2_JPEG_ACTIVE_MARKER_APP0		(1 << 0)
#define	V4L2_JPEG_ACTIVE_MARKER_APP1		(1 << 1)
#define	V4L2_JPEG_ACTIVE_MARKER_COM		(1 << 16)
#define	V4L2_JPEG_ACTIVE_MARKER_DQT		(1 << 17)
#define	V4L2_JPEG_ACTIVE_MARKER_DHT		(1 << 18)


/* Image source controls */
#define V4L2_CID_IMAGE_SOURCE_CLASS_BASE	(V4L2_CTRL_CLASS_IMAGE_SOURCE | 0x900)
#define V4L2_CID_IMAGE_SOURCE_CLASS		(V4L2_CTRL_CLASS_IMAGE_SOURCE | 1)

#define V4L2_CID_VBLANK				(V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 1)
#define V4L2_CID_HBLANK				(V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 2)
#define V4L2_CID_ANALOGUE_GAIN			(V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 3)
#define V4L2_CID_TEST_PATTERN_RED		(V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 4)
#define V4L2_CID_TEST_PATTERN_GREENR		(V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 5)
#define V4L2_CID_TEST_PATTERN_BLUE		(V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 6)
#define V4L2_CID_TEST_PATTERN_GREENB		(V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 7)
#define V4L2_CID_UNIT_CELL_SIZE			(V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 8)
#define V4L2_CID_NOTIFY_GAINS			(V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 9)


/* Image processing controls */

#define V4L2_CID_IMAGE_PROC_CLASS_BASE		(V4L2_CTRL_CLASS_IMAGE_PROC | 0x900)
#define V4L2_CID_IMAGE_PROC_CLASS		(V4L2_CTRL_CLASS_IMAGE_PROC | 1)

#define V4L2_CID_LINK_FREQ			(V4L2_CID_IMAGE_PROC_CLASS_BASE + 1)
#define V4L2_CID_PIXEL_RATE			(V4L2_CID_IMAGE_PROC_CLASS_BASE + 2)
#define V4L2_CID_TEST_PATTERN			(V4L2_CID_IMAGE_PROC_CLASS_BASE + 3)
#define V4L2_CID_DEINTERLACING_MODE		(V4L2_CID_IMAGE_PROC_CLASS_BASE + 4)
#define V4L2_CID_DIGITAL_GAIN			(V4L2_CID_IMAGE_PROC_CLASS_BASE + 5)

/*  DV-class control IDs defined by V4L2 */
#define V4L2_CID_DV_CLASS_BASE			(V4L2_CTRL_CLASS_DV | 0x900)
#define V4L2_CID_DV_CLASS			(V4L2_CTRL_CLASS_DV | 1)

#define	V4L2_CID_DV_TX_HOTPLUG			(V4L2_CID_DV_CLASS_BASE + 1)
#define	V4L2_CID_DV_TX_RXSENSE			(V4L2_CID_DV_CLASS_BASE + 2)
#define	V4L2_CID_DV_TX_EDID_PRESENT		(V4L2_CID_DV_CLASS_BASE + 3)
#define	V4L2_CID_DV_TX_MODE			(V4L2_CID_DV_CLASS_BASE + 4)
enum v4l2_dv_tx_mode {
	V4L2_DV_TX_MODE_DVI_D	= 0,
	V4L2_DV_TX_MODE_HDMI	= 1,
};
#define V4L2_CID_DV_TX_RGB_RANGE		(V4L2_CID_DV_CLASS_BASE + 5)
enum v4l2_dv_rgb_range {
	V4L2_DV_RGB_RANGE_AUTO	  = 0,
	V4L2_DV_RGB_RANGE_LIMITED = 1,
	V4L2_DV_RGB_RANGE_FULL	  = 2,
};

#define V4L2_CID_DV_TX_IT_CONTENT_TYPE		(V4L2_CID_DV_CLASS_BASE + 6)
enum v4l2_dv_it_content_type {
	V4L2_DV_IT_CONTENT_TYPE_GRAPHICS  = 0,
	V4L2_DV_IT_CONTENT_TYPE_PHOTO	  = 1,
	V4L2_DV_IT_CONTENT_TYPE_CINEMA	  = 2,
	V4L2_DV_IT_CONTENT_TYPE_GAME	  = 3,
	V4L2_DV_IT_CONTENT_TYPE_NO_ITC	  = 4,
};

#define	V4L2_CID_DV_RX_POWER_PRESENT		(V4L2_CID_DV_CLASS_BASE + 100)
#define V4L2_CID_DV_RX_RGB_RANGE		(V4L2_CID_DV_CLASS_BASE + 101)
#define V4L2_CID_DV_RX_IT_CONTENT_TYPE		(V4L2_CID_DV_CLASS_BASE + 102)

#define V4L2_CID_FM_RX_CLASS_BASE		(V4L2_CTRL_CLASS_FM_RX | 0x900)
#define V4L2_CID_FM_RX_CLASS			(V4L2_CTRL_CLASS_FM_RX | 1)

#define V4L2_CID_TUNE_DEEMPHASIS		(V4L2_CID_FM_RX_CLASS_BASE + 1)
enum v4l2_deemphasis {
	V4L2_DEEMPHASIS_DISABLED	= V4L2_PREEMPHASIS_DISABLED,
	V4L2_DEEMPHASIS_50_uS		= V4L2_PREEMPHASIS_50_uS,
	V4L2_DEEMPHASIS_75_uS		= V4L2_PREEMPHASIS_75_uS,
};

#define V4L2_CID_RDS_RECEPTION			(V4L2_CID_FM_RX_CLASS_BASE + 2)
#define V4L2_CID_RDS_RX_PTY			(V4L2_CID_FM_RX_CLASS_BASE + 3)
#define V4L2_CID_RDS_RX_PS_NAME			(V4L2_CID_FM_RX_CLASS_BASE + 4)
#define V4L2_CID_RDS_RX_RADIO_TEXT		(V4L2_CID_FM_RX_CLASS_BASE + 5)
#define V4L2_CID_RDS_RX_TRAFFIC_ANNOUNCEMENT	(V4L2_CID_FM_RX_CLASS_BASE + 6)
#define V4L2_CID_RDS_RX_TRAFFIC_PROGRAM		(V4L2_CID_FM_RX_CLASS_BASE + 7)
#define V4L2_CID_RDS_RX_MUSIC_SPEECH		(V4L2_CID_FM_RX_CLASS_BASE + 8)

#define V4L2_CID_RF_TUNER_CLASS_BASE		(V4L2_CTRL_CLASS_RF_TUNER | 0x900)
#define V4L2_CID_RF_TUNER_CLASS			(V4L2_CTRL_CLASS_RF_TUNER | 1)

#define V4L2_CID_RF_TUNER_BANDWIDTH_AUTO	(V4L2_CID_RF_TUNER_CLASS_BASE + 11)
#define V4L2_CID_RF_TUNER_BANDWIDTH		(V4L2_CID_RF_TUNER_CLASS_BASE + 12)
#define V4L2_CID_RF_TUNER_RF_GAIN		(V4L2_CID_RF_TUNER_CLASS_BASE + 32)
#define V4L2_CID_RF_TUNER_LNA_GAIN_AUTO		(V4L2_CID_RF_TUNER_CLASS_BASE + 41)
#define V4L2_CID_RF_TUNER_LNA_GAIN		(V4L2_CID_RF_TUNER_CLASS_BASE + 42)
#define V4L2_CID_RF_TUNER_MIXER_GAIN_AUTO	(V4L2_CID_RF_TUNER_CLASS_BASE + 51)
#define V4L2_CID_RF_TUNER_MIXER_GAIN		(V4L2_CID_RF_TUNER_CLASS_BASE + 52)
#define V4L2_CID_RF_TUNER_IF_GAIN_AUTO		(V4L2_CID_RF_TUNER_CLASS_BASE + 61)
#define V4L2_CID_RF_TUNER_IF_GAIN		(V4L2_CID_RF_TUNER_CLASS_BASE + 62)
#define V4L2_CID_RF_TUNER_PLL_LOCK			(V4L2_CID_RF_TUNER_CLASS_BASE + 91)


/*  Detection-class control IDs defined by V4L2 */
#define V4L2_CID_DETECT_CLASS_BASE		(V4L2_CTRL_CLASS_DETECT | 0x900)
#define V4L2_CID_DETECT_CLASS			(V4L2_CTRL_CLASS_DETECT | 1)

#define V4L2_CID_DETECT_MD_MODE			(V4L2_CID_DETECT_CLASS_BASE + 1)
enum v4l2_detect_md_mode {
	V4L2_DETECT_MD_MODE_DISABLED		= 0,
	V4L2_DETECT_MD_MODE_GLOBAL		= 1,
	V4L2_DETECT_MD_MODE_THRESHOLD_GRID	= 2,
	V4L2_DETECT_MD_MODE_REGION_GRID		= 3,
};
#define V4L2_CID_DETECT_MD_GLOBAL_THRESHOLD	(V4L2_CID_DETECT_CLASS_BASE + 2)
#define V4L2_CID_DETECT_MD_THRESHOLD_GRID	(V4L2_CID_DETECT_CLASS_BASE + 3)
#define V4L2_CID_DETECT_MD_REGION_GRID		(V4L2_CID_DETECT_CLASS_BASE + 4)


/*  Stateless CODECs controls */
#define V4L2_CID_CODEC_STATELESS_BASE          (V4L2_CTRL_CLASS_CODEC_STATELESS | 0x900)
#define V4L2_CID_CODEC_STATELESS_CLASS         (V4L2_CTRL_CLASS_CODEC_STATELESS | 1)

#define V4L2_CID_STATELESS_H264_DECODE_MODE	(V4L2_CID_CODEC_STATELESS_BASE + 0)
/**
 * enum v4l2_stateless_h264_decode_mode - Decoding mode
 *
 * @V4L2_STATELESS_H264_DECODE_MODE_SLICE_BASED: indicates that decoding
 * is performed one slice at a time. In this mode,
 * V4L2_CID_STATELESS_H264_SLICE_PARAMS must contain the parsed slice
 * parameters and the OUTPUT buffer must contain a single slice.
 * V4L2_BUF_CAP_SUPPORTS_M2M_HOLD_CAPTURE_BUF feature is used
 * in order to support multislice frames.
 * @V4L2_STATELESS_H264_DECODE_MODE_FRAME_BASED: indicates that
 * decoding is performed per frame. The OUTPUT buffer must contain
 * all slices and also both fields. This mode is typically supported
 * by device drivers that are able to parse the slice(s) header(s)
 * in hardware. When this mode is selected,
 * V4L2_CID_STATELESS_H264_SLICE_PARAMS is not used.
 */
enum v4l2_stateless_h264_decode_mode {
	V4L2_STATELESS_H264_DECODE_MODE_SLICE_BASED,
	V4L2_STATELESS_H264_DECODE_MODE_FRAME_BASED,
};

#define V4L2_CID_STATELESS_H264_START_CODE	(V4L2_CID_CODEC_STATELESS_BASE + 1)
/**
 * enum v4l2_stateless_h264_start_code - Start code
 *
 * @V4L2_STATELESS_H264_START_CODE_NONE: slices are passed
 * to the driver without any start code.
 * @V4L2_STATELESS_H264_START_CODE_ANNEX_B: slices are passed
 * to the driver with an Annex B start code prefix
 * (legal start codes can be 3-bytes 0x000001 or 4-bytes 0x00000001).
 * This mode is typically supported by device drivers that parse
 * the start code in hardware.
 */
enum v4l2_stateless_h264_start_code {
	V4L2_STATELESS_H264_START_CODE_NONE,
	V4L2_STATELESS_H264_START_CODE_ANNEX_B,
};

#define V4L2_H264_SPS_CONSTRAINT_SET0_FLAG			0x01
#define V4L2_H264_SPS_CONSTRAINT_SET1_FLAG			0x02
#define V4L2_H264_SPS_CONSTRAINT_SET2_FLAG			0x04
#define V4L2_H264_SPS_CONSTRAINT_SET3_FLAG			0x08
#define V4L2_H264_SPS_CONSTRAINT_SET4_FLAG			0x10
#define V4L2_H264_SPS_CONSTRAINT_SET5_FLAG			0x20

#define V4L2_H264_SPS_FLAG_SEPARATE_COLOUR_PLANE		0x01
#define V4L2_H264_SPS_FLAG_QPPRIME_Y_ZERO_TRANSFORM_BYPASS	0x02
#define V4L2_H264_SPS_FLAG_DELTA_PIC_ORDER_ALWAYS_ZERO		0x04
#define V4L2_H264_SPS_FLAG_GAPS_IN_FRAME_NUM_VALUE_ALLOWED	0x08
#define V4L2_H264_SPS_FLAG_FRAME_MBS_ONLY			0x10
#define V4L2_H264_SPS_FLAG_MB_ADAPTIVE_FRAME_FIELD		0x20
#define V4L2_H264_SPS_FLAG_DIRECT_8X8_INFERENCE			0x40

#define V4L2_H264_SPS_HAS_CHROMA_FORMAT(sps) \
	((sps)->profile_idc == 100 || (sps)->profile_idc == 110 || \
	 (sps)->profile_idc == 122 || (sps)->profile_idc == 244 || \
	 (sps)->profile_idc == 44  || (sps)->profile_idc == 83  || \
	 (sps)->profile_idc == 86  || (sps)->profile_idc == 118 || \
	 (sps)->profile_idc == 128 || (sps)->profile_idc == 138 || \
	 (sps)->profile_idc == 139 || (sps)->profile_idc == 134 || \
	 (sps)->profile_idc == 135)

#define V4L2_CID_STATELESS_H264_SPS		(V4L2_CID_CODEC_STATELESS_BASE + 2)
/**
 * struct v4l2_ctrl_h264_sps - H264 sequence parameter set
 *
 * All the members on this sequence parameter set structure match the
 * sequence parameter set syntax as specified by the H264 specification.
 *
 * @profile_idc: see H264 specification.
 * @constraint_set_flags: see H264 specification.
 * @level_idc: see H264 specification.
 * @seq_parameter_set_id: see H264 specification.
 * @chroma_format_idc: see H264 specification.
 * @bit_depth_luma_minus8: see H264 specification.
 * @bit_depth_chroma_minus8: see H264 specification.
 * @log2_max_frame_num_minus4: see H264 specification.
 * @pic_order_cnt_type: see H264 specification.
 * @log2_max_pic_order_cnt_lsb_minus4: see H264 specification.
 * @max_num_ref_frames: see H264 specification.
 * @num_ref_frames_in_pic_order_cnt_cycle: see H264 specification.
 * @offset_for_ref_frame: see H264 specification.
 * @offset_for_non_ref_pic: see H264 specification.
 * @offset_for_top_to_bottom_field: see H264 specification.
 * @pic_width_in_mbs_minus1: see H264 specification.
 * @pic_height_in_map_units_minus1: see H264 specification.
 * @flags: see V4L2_H264_SPS_FLAG_{}.
 */
struct v4l2_ctrl_h264_sps {
	__u8 profile_idc;
	__u8 constraint_set_flags;
	__u8 level_idc;
	__u8 seq_parameter_set_id;
	__u8 chroma_format_idc;
	__u8 bit_depth_luma_minus8;
	__u8 bit_depth_chroma_minus8;
	__u8 log2_max_frame_num_minus4;
	__u8 pic_order_cnt_type;
	__u8 log2_max_pic_order_cnt_lsb_minus4;
	__u8 max_num_ref_frames;
	__u8 num_ref_frames_in_pic_order_cnt_cycle;
	__s32 offset_for_ref_frame[255];
	__s32 offset_for_non_ref_pic;
	__s32 offset_for_top_to_bottom_field;
	__u16 pic_width_in_mbs_minus1;
	__u16 pic_height_in_map_units_minus1;
	__u32 flags;
};

#define V4L2_H264_PPS_FLAG_ENTROPY_CODING_MODE				0x0001
#define V4L2_H264_PPS_FLAG_BOTTOM_FIELD_PIC_ORDER_IN_FRAME_PRESENT	0x0002
#define V4L2_H264_PPS_FLAG_WEIGHTED_PRED				0x0004
#define V4L2_H264_PPS_FLAG_DEBLOCKING_FILTER_CONTROL_PRESENT		0x0008
#define V4L2_H264_PPS_FLAG_CONSTRAINED_INTRA_PRED			0x0010
#define V4L2_H264_PPS_FLAG_REDUNDANT_PIC_CNT_PRESENT			0x0020
#define V4L2_H264_PPS_FLAG_TRANSFORM_8X8_MODE				0x0040
#define V4L2_H264_PPS_FLAG_SCALING_MATRIX_PRESENT			0x0080

#define V4L2_CID_STATELESS_H264_PPS		(V4L2_CID_CODEC_STATELESS_BASE + 3)
/**
 * struct v4l2_ctrl_h264_pps - H264 picture parameter set
 *
 * Except where noted, all the members on this picture parameter set
 * structure match the picture parameter set syntax as specified
 * by the H264 specification.
 *
 * In particular, V4L2_H264_PPS_FLAG_SCALING_MATRIX_PRESENT flag
 * has a specific meaning. This flag should be set if a non-flat
 * scaling matrix applies to the picture. In this case, applications
 * are expected to use V4L2_CID_STATELESS_H264_SCALING_MATRIX,
 * to pass the values of the non-flat matrices.
 *
 * @pic_parameter_set_id: see H264 specification.
 * @seq_parameter_set_id: see H264 specification.
 * @num_slice_groups_minus1: see H264 specification.
 * @num_ref_idx_l0_default_active_minus1: see H264 specification.
 * @num_ref_idx_l1_default_active_minus1: see H264 specification.
 * @weighted_bipred_idc: see H264 specification.
 * @pic_init_qp_minus26: see H264 specification.
 * @pic_init_qs_minus26: see H264 specification.
 * @chroma_qp_index_offset: see H264 specification.
 * @second_chroma_qp_index_offset: see H264 specification.
 * @flags: see V4L2_H264_PPS_FLAG_{}.
 */
struct v4l2_ctrl_h264_pps {
	__u8 pic_parameter_set_id;
	__u8 seq_parameter_set_id;
	__u8 num_slice_groups_minus1;
	__u8 num_ref_idx_l0_default_active_minus1;
	__u8 num_ref_idx_l1_default_active_minus1;
	__u8 weighted_bipred_idc;
	__s8 pic_init_qp_minus26;
	__s8 pic_init_qs_minus26;
	__s8 chroma_qp_index_offset;
	__s8 second_chroma_qp_index_offset;
	__u16 flags;
};

#define V4L2_CID_STATELESS_H264_SCALING_MATRIX	(V4L2_CID_CODEC_STATELESS_BASE + 4)
/**
 * struct v4l2_ctrl_h264_scaling_matrix - H264 scaling matrices
 *
 * @scaling_list_4x4: scaling matrix after applying the inverse
 * scanning process. Expected list order is Intra Y, Intra Cb,
 * Intra Cr, Inter Y, Inter Cb, Inter Cr. The values on each
 * scaling list are expected in raster scan order.
 * @scaling_list_8x8: scaling matrix after applying the inverse
 * scanning process. Expected list order is Intra Y, Inter Y,
 * Intra Cb, Inter Cb, Intra Cr, Inter Cr. The values on each
 * scaling list are expected in raster scan order.
 *
 * Note that the list order is different for the 4x4 and 8x8
 * matrices as per the H264 specification, see table 7-2 "Assignment
 * of mnemonic names to scaling list indices and specification of
 * fall-back rule".
 */
struct v4l2_ctrl_h264_scaling_matrix {
	__u8 scaling_list_4x4[6][16];
	__u8 scaling_list_8x8[6][64];
};

struct v4l2_h264_weight_factors {
	__s16 luma_weight[32];
	__s16 luma_offset[32];
	__s16 chroma_weight[32][2];
	__s16 chroma_offset[32][2];
};

#define V4L2_H264_CTRL_PRED_WEIGHTS_REQUIRED(pps, slice) \
	((((pps)->flags & V4L2_H264_PPS_FLAG_WEIGHTED_PRED) && \
	 ((slice)->slice_type == V4L2_H264_SLICE_TYPE_P || \
	  (slice)->slice_type == V4L2_H264_SLICE_TYPE_SP)) || \
	 ((pps)->weighted_bipred_idc == 1 && \
	  (slice)->slice_type == V4L2_H264_SLICE_TYPE_B))

#define V4L2_CID_STATELESS_H264_PRED_WEIGHTS	(V4L2_CID_CODEC_STATELESS_BASE + 5)
/**
 * struct v4l2_ctrl_h264_pred_weights - Prediction weight table
 *
 * Prediction weight table, which matches the syntax specified
 * by the H264 specification.
 *
 * @luma_log2_weight_denom: see H264 specification.
 * @chroma_log2_weight_denom: see H264 specification.
 * @weight_factors: luma and chroma weight factors.
 */
struct v4l2_ctrl_h264_pred_weights {
	__u16 luma_log2_weight_denom;
	__u16 chroma_log2_weight_denom;
	struct v4l2_h264_weight_factors weight_factors[2];
};

#define V4L2_H264_SLICE_TYPE_P				0
#define V4L2_H264_SLICE_TYPE_B				1
#define V4L2_H264_SLICE_TYPE_I				2
#define V4L2_H264_SLICE_TYPE_SP				3
#define V4L2_H264_SLICE_TYPE_SI				4

#define V4L2_H264_SLICE_FLAG_DIRECT_SPATIAL_MV_PRED	0x01
#define V4L2_H264_SLICE_FLAG_SP_FOR_SWITCH		0x02

#define V4L2_H264_TOP_FIELD_REF				0x1
#define V4L2_H264_BOTTOM_FIELD_REF			0x2
#define V4L2_H264_FRAME_REF				0x3

/**
 * struct v4l2_h264_reference - H264 picture reference
 *
 * @fields: indicates how the picture is referenced.
 * Valid values are V4L2_H264_{}_REF.
 * @index: index into v4l2_ctrl_h264_decode_params.dpb[].
 */
struct v4l2_h264_reference {
	__u8 fields;
	__u8 index;
};

/*
 * Maximum DPB size, as specified by section 'A.3.1 Level limits
 * common to the Baseline, Main, and Extended profiles'.
 */
#define V4L2_H264_NUM_DPB_ENTRIES 16
#define V4L2_H264_REF_LIST_LEN (2 * V4L2_H264_NUM_DPB_ENTRIES)

#define V4L2_CID_STATELESS_H264_SLICE_PARAMS	(V4L2_CID_CODEC_STATELESS_BASE + 6)
/**
 * struct v4l2_ctrl_h264_slice_params - H264 slice parameters
 *
 * This structure holds the H264 syntax elements that are specified
 * as non-invariant for the slices in a given frame.
 *
 * Slice invariant syntax elements are contained in struct
 * v4l2_ctrl_h264_decode_params. This is done to reduce the API surface
 * on frame-based decoders, where slice header parsing is done by the
 * hardware.
 *
 * Slice invariant syntax elements are specified in specification section
 * "7.4.3 Slice header semantics".
 *
 * Except where noted, the members on this struct match the slice header syntax.
 *
 * @header_bit_size: offset in bits to slice_data() from the beginning of this slice.
 * @first_mb_in_slice: see H264 specification.
 * @slice_type: see H264 specification.
 * @colour_plane_id: see H264 specification.
 * @redundant_pic_cnt: see H264 specification.
 * @cabac_init_idc: see H264 specification.
 * @slice_qp_delta: see H264 specification.
 * @slice_qs_delta: see H264 specification.
 * @disable_deblocking_filter_idc: see H264 specification.
 * @slice_alpha_c0_offset_div2: see H264 specification.
 * @slice_beta_offset_div2: see H264 specification.
 * @num_ref_idx_l0_active_minus1: see H264 specification.
 * @num_ref_idx_l1_active_minus1: see H264 specification.
 * @reserved: padding field. Should be zeroed by applications.
 * @ref_pic_list0: reference picture list 0 after applying the per-slice modifications.
 * @ref_pic_list1: reference picture list 1 after applying the per-slice modifications.
 * @flags: see V4L2_H264_SLICE_FLAG_{}.
 */
struct v4l2_ctrl_h264_slice_params {
	__u32 header_bit_size;
	__u32 first_mb_in_slice;
	__u8 slice_type;
	__u8 colour_plane_id;
	__u8 redundant_pic_cnt;
	__u8 cabac_init_idc;
	__s8 slice_qp_delta;
	__s8 slice_qs_delta;
	__u8 disable_deblocking_filter_idc;
	__s8 slice_alpha_c0_offset_div2;
	__s8 slice_beta_offset_div2;
	__u8 num_ref_idx_l0_active_minus1;
	__u8 num_ref_idx_l1_active_minus1;

	__u8 reserved;

	struct v4l2_h264_reference ref_pic_list0[V4L2_H264_REF_LIST_LEN];
	struct v4l2_h264_reference ref_pic_list1[V4L2_H264_REF_LIST_LEN];

	__u32 flags;
};

#define V4L2_H264_DPB_ENTRY_FLAG_VALID		0x01
#define V4L2_H264_DPB_ENTRY_FLAG_ACTIVE		0x02
#define V4L2_H264_DPB_ENTRY_FLAG_LONG_TERM	0x04
#define V4L2_H264_DPB_ENTRY_FLAG_FIELD		0x08

/**
 * struct v4l2_h264_dpb_entry - H264 decoded picture buffer entry
 *
 * @reference_ts: timestamp of the V4L2 capture buffer to use as reference.
 * The timestamp refers to the timestamp field in struct v4l2_buffer.
 * Use v4l2_timeval_to_ns() to convert the struct timeval to a __u64.
 * @pic_num: matches PicNum variable assigned during the reference
 * picture lists construction process.
 * @frame_num: frame identifier which matches frame_num syntax element.
 * @fields: indicates how the DPB entry is referenced. Valid values are
 * V4L2_H264_{}_REF.
 * @reserved: padding field. Should be zeroed by applications.
 * @top_field_order_cnt: matches TopFieldOrderCnt picture value.
 * @bottom_field_order_cnt: matches BottomFieldOrderCnt picture value.
 * Note that picture field is indicated by v4l2_buffer.field.
 * @flags: see V4L2_H264_DPB_ENTRY_FLAG_{}.
 */
struct v4l2_h264_dpb_entry {
	__u64 reference_ts;
	__u32 pic_num;
	__u16 frame_num;
	__u8 fields;
	__u8 reserved[5];
	__s32 top_field_order_cnt;
	__s32 bottom_field_order_cnt;
	__u32 flags;
};

#define V4L2_H264_DECODE_PARAM_FLAG_IDR_PIC		0x01
#define V4L2_H264_DECODE_PARAM_FLAG_FIELD_PIC		0x02
#define V4L2_H264_DECODE_PARAM_FLAG_BOTTOM_FIELD	0x04
#define V4L2_H264_DECODE_PARAM_FLAG_PFRAME		0x08
#define V4L2_H264_DECODE_PARAM_FLAG_BFRAME		0x10

#define V4L2_CID_STATELESS_H264_DECODE_PARAMS	(V4L2_CID_CODEC_STATELESS_BASE + 7)
/**
 * struct v4l2_ctrl_h264_decode_params - H264 decoding parameters
 *
 * @dpb: decoded picture buffer.
 * @nal_ref_idc: slice header syntax element.
 * @frame_num: slice header syntax element.
 * @top_field_order_cnt: matches TopFieldOrderCnt picture value.
 * @bottom_field_order_cnt: matches BottomFieldOrderCnt picture value.
 * Note that picture field is indicated by v4l2_buffer.field.
 * @idr_pic_id: slice header syntax element.
 * @pic_order_cnt_lsb: slice header syntax element.
 * @delta_pic_order_cnt_bottom: slice header syntax element.
 * @delta_pic_order_cnt0: slice header syntax element.
 * @delta_pic_order_cnt1: slice header syntax element.
 * @dec_ref_pic_marking_bit_size: size in bits of dec_ref_pic_marking()
 * syntax element.
 * @pic_order_cnt_bit_size: size in bits of pic order count syntax.
 * @slice_group_change_cycle: slice header syntax element.
 * @reserved: padding field. Should be zeroed by applications.
 * @flags: see V4L2_H264_DECODE_PARAM_FLAG_{}.
 */
struct v4l2_ctrl_h264_decode_params {
	struct v4l2_h264_dpb_entry dpb[V4L2_H264_NUM_DPB_ENTRIES];
	__u16 nal_ref_idc;
	__u16 frame_num;
	__s32 top_field_order_cnt;
	__s32 bottom_field_order_cnt;
	__u16 idr_pic_id;
	__u16 pic_order_cnt_lsb;
	__s32 delta_pic_order_cnt_bottom;
	__s32 delta_pic_order_cnt0;
	__s32 delta_pic_order_cnt1;
	__u32 dec_ref_pic_marking_bit_size;
	__u32 pic_order_cnt_bit_size;
	__u32 slice_group_change_cycle;

	__u32 reserved;
	__u32 flags;
};


/* Stateless FWHT control, used by the vicodec driver */

/* Current FWHT version */
#define V4L2_FWHT_VERSION			3

/* Set if this is an interlaced format */
#define V4L2_FWHT_FL_IS_INTERLACED		_BITUL(0)
/* Set if this is a bottom-first (NTSC) interlaced format */
#define V4L2_FWHT_FL_IS_BOTTOM_FIRST		_BITUL(1)
/* Set if each 'frame' contains just one field */
#define V4L2_FWHT_FL_IS_ALTERNATE		_BITUL(2)
/*
 * If V4L2_FWHT_FL_IS_ALTERNATE was set, then this is set if this
 * 'frame' is the bottom field, else it is the top field.
 */
#define V4L2_FWHT_FL_IS_BOTTOM_FIELD		_BITUL(3)
/* Set if the Y' plane is uncompressed */
#define V4L2_FWHT_FL_LUMA_IS_UNCOMPRESSED	_BITUL(4)
/* Set if the Cb plane is uncompressed */
#define V4L2_FWHT_FL_CB_IS_UNCOMPRESSED		_BITUL(5)
/* Set if the Cr plane is uncompressed */
#define V4L2_FWHT_FL_CR_IS_UNCOMPRESSED		_BITUL(6)
/* Set if the chroma plane is full height, if cleared it is half height */
#define V4L2_FWHT_FL_CHROMA_FULL_HEIGHT		_BITUL(7)
/* Set if the chroma plane is full width, if cleared it is half width */
#define V4L2_FWHT_FL_CHROMA_FULL_WIDTH		_BITUL(8)
/* Set if the alpha plane is uncompressed */
#define V4L2_FWHT_FL_ALPHA_IS_UNCOMPRESSED	_BITUL(9)
/* Set if this is an I Frame */
#define V4L2_FWHT_FL_I_FRAME			_BITUL(10)

/* A 4-values flag - the number of components - 1 */
#define V4L2_FWHT_FL_COMPONENTS_NUM_MSK		GENMASK(18, 16)
#define V4L2_FWHT_FL_COMPONENTS_NUM_OFFSET	16

/* A 4-values flag - the pixel encoding type */
#define V4L2_FWHT_FL_PIXENC_MSK			GENMASK(20, 19)
#define V4L2_FWHT_FL_PIXENC_OFFSET		19
#define V4L2_FWHT_FL_PIXENC_YUV			(1 << V4L2_FWHT_FL_PIXENC_OFFSET)
#define V4L2_FWHT_FL_PIXENC_RGB			(2 << V4L2_FWHT_FL_PIXENC_OFFSET)
#define V4L2_FWHT_FL_PIXENC_HSV			(3 << V4L2_FWHT_FL_PIXENC_OFFSET)

#define V4L2_CID_STATELESS_FWHT_PARAMS		(V4L2_CID_CODEC_STATELESS_BASE + 100)
/**
 * struct v4l2_ctrl_fwht_params - FWHT parameters
 *
 * @backward_ref_ts: timestamp of the V4L2 capture buffer to use as reference.
 * The timestamp refers to the timestamp field in struct v4l2_buffer.
 * Use v4l2_timeval_to_ns() to convert the struct timeval to a __u64.
 * @version: must be V4L2_FWHT_VERSION.
 * @width: width of frame.
 * @height: height of frame.
 * @flags: FWHT flags (see V4L2_FWHT_FL_*).
 * @colorspace: the colorspace (enum v4l2_colorspace).
 * @xfer_func: the transfer function (enum v4l2_xfer_func).
 * @ycbcr_enc: the Y'CbCr encoding (enum v4l2_ycbcr_encoding).
 * @quantization: the quantization (enum v4l2_quantization).
 */
struct v4l2_ctrl_fwht_params {
	__u64 backward_ref_ts;
	__u32 version;
	__u32 width;
	__u32 height;
	__u32 flags;
	__u32 colorspace;
	__u32 xfer_func;
	__u32 ycbcr_enc;
	__u32 quantization;
};

/* Stateless VP8 control */

#define V4L2_VP8_SEGMENT_FLAG_ENABLED              0x01
#define V4L2_VP8_SEGMENT_FLAG_UPDATE_MAP           0x02
#define V4L2_VP8_SEGMENT_FLAG_UPDATE_FEATURE_DATA  0x04
#define V4L2_VP8_SEGMENT_FLAG_DELTA_VALUE_MODE     0x08

/**
 * struct v4l2_vp8_segment - VP8 segment-based adjustments parameters
 *
 * @quant_update: update values for the segment quantizer.
 * @lf_update: update values for the loop filter level.
 * @segment_probs: branch probabilities of the segment_id decoding tree.
 * @padding: padding field. Should be zeroed by applications.
 * @flags: see V4L2_VP8_SEGMENT_FLAG_{}.
 *
 * This structure contains segment-based adjustments related parameters.
 * See the 'update_segmentation()' part of the frame header syntax,
 * and section '9.3. Segment-Based Adjustments' of the VP8 specification
 * for more details.
 */
struct v4l2_vp8_segment {
	__s8 quant_update[4];
	__s8 lf_update[4];
	__u8 segment_probs[3];
	__u8 padding;
	__u32 flags;
};

#define V4L2_VP8_LF_ADJ_ENABLE	0x01
#define V4L2_VP8_LF_DELTA_UPDATE	0x02
#define V4L2_VP8_LF_FILTER_TYPE_SIMPLE	0x04

/**
 * struct v4l2_vp8_loop_filter - VP8 loop filter parameters
 *
 * @ref_frm_delta: Reference frame signed delta values.
 * @mb_mode_delta: MB prediction mode signed delta values.
 * @sharpness_level: matches sharpness_level syntax element.
 * @level: matches loop_filter_level syntax element.
 * @padding: padding field. Should be zeroed by applications.
 * @flags: see V4L2_VP8_LF_FLAG_{}.
 *
 * This structure contains loop filter related parameters.
 * See the 'mb_lf_adjustments()' part of the frame header syntax,
 * and section '9.4. Loop Filter Type and Levels' of the VP8 specification
 * for more details.
 */
struct v4l2_vp8_loop_filter {
	__s8 ref_frm_delta[4];
	__s8 mb_mode_delta[4];
	__u8 sharpness_level;
	__u8 level;
	__u16 padding;
	__u32 flags;
};

/**
 * struct v4l2_vp8_quantization - VP8 quantizattion indices
 *
 * @y_ac_qi: luma AC coefficient table index.
 * @y_dc_delta: luma DC delta vaue.
 * @y2_dc_delta: y2 block DC delta value.
 * @y2_ac_delta: y2 block AC delta value.
 * @uv_dc_delta: chroma DC delta value.
 * @uv_ac_delta: chroma AC delta value.
 * @padding: padding field. Should be zeroed by applications.
 *
 * This structure contains the quantization indices present
 * in 'quant_indices()' part of the frame header syntax.
 * See section '9.6. Dequantization Indices' of the VP8 specification
 * for more details.
 */
struct v4l2_vp8_quantization {
	__u8 y_ac_qi;
	__s8 y_dc_delta;
	__s8 y2_dc_delta;
	__s8 y2_ac_delta;
	__s8 uv_dc_delta;
	__s8 uv_ac_delta;
	__u16 padding;
};

#define V4L2_VP8_COEFF_PROB_CNT 11
#define V4L2_VP8_MV_PROB_CNT 19

/**
 * struct v4l2_vp8_entropy - VP8 update probabilities
 *
 * @coeff_probs: coefficient probability update values.
 * @y_mode_probs: luma intra-prediction probabilities.
 * @uv_mode_probs: chroma intra-prediction probabilities.
 * @mv_probs: mv decoding probability.
 * @padding: padding field. Should be zeroed by applications.
 *
 * This structure contains the update probabilities present in
 * 'token_prob_update()' and 'mv_prob_update()' part of the frame header.
 * See section '17.2. Probability Updates' of the VP8 specification
 * for more details.
 */
struct v4l2_vp8_entropy {
	__u8 coeff_probs[4][8][3][V4L2_VP8_COEFF_PROB_CNT];
	__u8 y_mode_probs[4];
	__u8 uv_mode_probs[3];
	__u8 mv_probs[2][V4L2_VP8_MV_PROB_CNT];
	__u8 padding[3];
};

/**
 * struct v4l2_vp8_entropy_coder_state - VP8 boolean coder state
 *
 * @range: coder state value for "Range"
 * @value: coder state value for "Value"
 * @bit_count: number of bits left in range "Value".
 * @padding: padding field. Should be zeroed by applications.
 *
 * This structure contains the state for the boolean coder, as
 * explained in section '7. Boolean Entropy Decoder' of the VP8 specification.
 */
struct v4l2_vp8_entropy_coder_state {
	__u8 range;
	__u8 value;
	__u8 bit_count;
	__u8 padding;
};

#define V4L2_VP8_FRAME_FLAG_KEY_FRAME		0x01
#define V4L2_VP8_FRAME_FLAG_EXPERIMENTAL		0x02
#define V4L2_VP8_FRAME_FLAG_SHOW_FRAME		0x04
#define V4L2_VP8_FRAME_FLAG_MB_NO_SKIP_COEFF	0x08
#define V4L2_VP8_FRAME_FLAG_SIGN_BIAS_GOLDEN	0x10
#define V4L2_VP8_FRAME_FLAG_SIGN_BIAS_ALT	0x20

#define V4L2_VP8_FRAME_IS_KEY_FRAME(hdr) \
	(!!((hdr)->flags & V4L2_VP8_FRAME_FLAG_KEY_FRAME))

#define V4L2_CID_STATELESS_VP8_FRAME (V4L2_CID_CODEC_STATELESS_BASE + 200)
/**
 * struct v4l2_ctrl_vp8_frame - VP8 frame parameters
 *
 * @segment: segmentation parameters. See &v4l2_vp8_segment for more details
 * @lf: loop filter parameters. See &v4l2_vp8_loop_filter for more details
 * @quant: quantization parameters. See &v4l2_vp8_quantization for more details
 * @entropy: update probabilities. See &v4l2_vp8_entropy for more details
 * @coder_state: boolean coder state. See &v4l2_vp8_entropy_coder_state for more details
 * @width: frame width.
 * @height: frame height.
 * @horizontal_scale: horizontal scaling factor.
 * @vertical_scale: vertical scaling factor.
 * @version: bitstream version.
 * @prob_skip_false: frame header syntax element.
 * @prob_intra: frame header syntax element.
 * @prob_last: frame header syntax element.
 * @prob_gf: frame header syntax element.
 * @num_dct_parts: number of DCT coefficients partitions.
 * @first_part_size: size of the first partition, i.e. the control partition.
 * @first_part_header_bits: size in bits of the first partition header portion.
 * @dct_part_sizes: DCT coefficients sizes.
 * @last_frame_ts: "last" reference buffer timestamp.
 * The timestamp refers to the timestamp field in struct v4l2_buffer.
 * Use v4l2_timeval_to_ns() to convert the struct timeval to a __u64.
 * @golden_frame_ts: "golden" reference buffer timestamp.
 * @alt_frame_ts: "alt" reference buffer timestamp.
 * @flags: see V4L2_VP8_FRAME_FLAG_{}.
 */
struct v4l2_ctrl_vp8_frame {
	struct v4l2_vp8_segment segment;
	struct v4l2_vp8_loop_filter lf;
	struct v4l2_vp8_quantization quant;
	struct v4l2_vp8_entropy entropy;
	struct v4l2_vp8_entropy_coder_state coder_state;

	__u16 width;
	__u16 height;

	__u8 horizontal_scale;
	__u8 vertical_scale;

	__u8 version;
	__u8 prob_skip_false;
	__u8 prob_intra;
	__u8 prob_last;
	__u8 prob_gf;
	__u8 num_dct_parts;

	__u32 first_part_size;
	__u32 first_part_header_bits;
	__u32 dct_part_sizes[8];

	__u64 last_frame_ts;
	__u64 golden_frame_ts;
	__u64 alt_frame_ts;

	__u64 flags;
};

/* Stateless MPEG-2 controls */

#define V4L2_MPEG2_SEQ_FLAG_PROGRESSIVE	0x01

#define V4L2_CID_STATELESS_MPEG2_SEQUENCE (V4L2_CID_CODEC_STATELESS_BASE+220)
/**
 * struct v4l2_ctrl_mpeg2_sequence - MPEG-2 sequence header
 *
 * All the members on this structure match the sequence header and sequence
 * extension syntaxes as specified by the MPEG-2 specification.
 *
 * Fields horizontal_size, vertical_size and vbv_buffer_size are a
 * combination of respective _value and extension syntax elements,
 * as described in section 6.3.3 "Sequence header".
 *
 * @horizontal_size: combination of elements horizontal_size_value and
 * horizontal_size_extension.
 * @vertical_size: combination of elements vertical_size_value and
 * vertical_size_extension.
 * @vbv_buffer_size: combination of elements vbv_buffer_size_value and
 * vbv_buffer_size_extension.
 * @profile_and_level_indication: see MPEG-2 specification.
 * @chroma_format: see MPEG-2 specification.
 * @flags: see V4L2_MPEG2_SEQ_FLAG_{}.
 */
struct v4l2_ctrl_mpeg2_sequence {
	__u16	horizontal_size;
	__u16	vertical_size;
	__u32	vbv_buffer_size;
	__u16	profile_and_level_indication;
	__u8	chroma_format;
	__u8	flags;
};

#define V4L2_MPEG2_PIC_CODING_TYPE_I			1
#define V4L2_MPEG2_PIC_CODING_TYPE_P			2
#define V4L2_MPEG2_PIC_CODING_TYPE_B			3
#define V4L2_MPEG2_PIC_CODING_TYPE_D			4

#define V4L2_MPEG2_PIC_TOP_FIELD			0x1
#define V4L2_MPEG2_PIC_BOTTOM_FIELD			0x2
#define V4L2_MPEG2_PIC_FRAME				0x3

#define V4L2_MPEG2_PIC_FLAG_TOP_FIELD_FIRST		0x0001
#define V4L2_MPEG2_PIC_FLAG_FRAME_PRED_DCT		0x0002
#define V4L2_MPEG2_PIC_FLAG_CONCEALMENT_MV		0x0004
#define V4L2_MPEG2_PIC_FLAG_Q_SCALE_TYPE		0x0008
#define V4L2_MPEG2_PIC_FLAG_INTRA_VLC			0x0010
#define V4L2_MPEG2_PIC_FLAG_ALT_SCAN			0x0020
#define V4L2_MPEG2_PIC_FLAG_REPEAT_FIRST		0x0040
#define V4L2_MPEG2_PIC_FLAG_PROGRESSIVE			0x0080

#define V4L2_CID_STATELESS_MPEG2_PICTURE (V4L2_CID_CODEC_STATELESS_BASE+221)
/**
 * struct v4l2_ctrl_mpeg2_picture - MPEG-2 picture header
 *
 * All the members on this structure match the picture header and picture
 * coding extension syntaxes as specified by the MPEG-2 specification.
 *
 * @backward_ref_ts: timestamp of the V4L2 capture buffer to use as
 * reference for backward prediction.
 * @forward_ref_ts: timestamp of the V4L2 capture buffer to use as
 * reference for forward prediction. These timestamp refers to the
 * timestamp field in struct v4l2_buffer. Use v4l2_timeval_to_ns()
 * to convert the struct timeval to a __u64.
 * @flags: see V4L2_MPEG2_PIC_FLAG_{}.
 * @f_code: see MPEG-2 specification.
 * @picture_coding_type: see MPEG-2 specification.
 * @picture_structure: see V4L2_MPEG2_PIC_{}_FIELD.
 * @intra_dc_precision: see MPEG-2 specification.
 * @reserved: padding field. Should be zeroed by applications.
 */
struct v4l2_ctrl_mpeg2_picture {
	__u64	backward_ref_ts;
	__u64	forward_ref_ts;
	__u32	flags;
	__u8	f_code[2][2];
	__u8	picture_coding_type;
	__u8	picture_structure;
	__u8	intra_dc_precision;
	__u8	reserved[5];
};

#define V4L2_CID_STATELESS_MPEG2_QUANTISATION (V4L2_CID_CODEC_STATELESS_BASE+222)
/**
 * struct v4l2_ctrl_mpeg2_quantisation - MPEG-2 quantisation
 *
 * Quantisation matrices as specified by section 6.3.7
 * "Quant matrix extension".
 *
 * @intra_quantiser_matrix: The quantisation matrix coefficients
 * for intra-coded frames, in zigzag scanning order. It is relevant
 * for both luma and chroma components, although it can be superseded
 * by the chroma-specific matrix for non-4:2:0 YUV formats.
 * @non_intra_quantiser_matrix: The quantisation matrix coefficients
 * for non-intra-coded frames, in zigzag scanning order. It is relevant
 * for both luma and chroma components, although it can be superseded
 * by the chroma-specific matrix for non-4:2:0 YUV formats.
 * @chroma_intra_quantiser_matrix: The quantisation matrix coefficients
 * for the chominance component of intra-coded frames, in zigzag scanning
 * order. Only relevant for 4:2:2 and 4:4:4 YUV formats.
 * @chroma_non_intra_quantiser_matrix: The quantisation matrix coefficients
 * for the chrominance component of non-intra-coded frames, in zigzag scanning
 * order. Only relevant for 4:2:2 and 4:4:4 YUV formats.
 */
struct v4l2_ctrl_mpeg2_quantisation {
	__u8	intra_quantiser_matrix[64];
	__u8	non_intra_quantiser_matrix[64];
	__u8	chroma_intra_quantiser_matrix[64];
	__u8	chroma_non_intra_quantiser_matrix[64];
};

#define V4L2_CID_COLORIMETRY_CLASS_BASE	(V4L2_CTRL_CLASS_COLORIMETRY | 0x900)
#define V4L2_CID_COLORIMETRY_CLASS	(V4L2_CTRL_CLASS_COLORIMETRY | 1)

#define V4L2_CID_COLORIMETRY_HDR10_CLL_INFO	(V4L2_CID_COLORIMETRY_CLASS_BASE + 0)

struct v4l2_ctrl_hdr10_cll_info {
	__u16 max_content_light_level;
	__u16 max_pic_average_light_level;
};

#define V4L2_CID_COLORIMETRY_HDR10_MASTERING_DISPLAY	(V4L2_CID_COLORIMETRY_CLASS_BASE + 1)

#define V4L2_HDR10_MASTERING_PRIMARIES_X_LOW	5
#define V4L2_HDR10_MASTERING_PRIMARIES_X_HIGH	37000
#define V4L2_HDR10_MASTERING_PRIMARIES_Y_LOW	5
#define V4L2_HDR10_MASTERING_PRIMARIES_Y_HIGH	42000
#define V4L2_HDR10_MASTERING_WHITE_POINT_X_LOW	5
#define V4L2_HDR10_MASTERING_WHITE_POINT_X_HIGH	37000
#define V4L2_HDR10_MASTERING_WHITE_POINT_Y_LOW	5
#define V4L2_HDR10_MASTERING_WHITE_POINT_Y_HIGH	42000
#define V4L2_HDR10_MASTERING_MAX_LUMA_LOW	50000
#define V4L2_HDR10_MASTERING_MAX_LUMA_HIGH	100000000
#define V4L2_HDR10_MASTERING_MIN_LUMA_LOW	1
#define V4L2_HDR10_MASTERING_MIN_LUMA_HIGH	50000

struct v4l2_ctrl_hdr10_mastering_display {
	__u16 display_primaries_x[3];
	__u16 display_primaries_y[3];
	__u16 white_point_x;
	__u16 white_point_y;
	__u32 max_display_mastering_luminance;
	__u32 min_display_mastering_luminance;
};

/* Stateless VP9 controls */

#define V4L2_VP9_LOOP_FILTER_FLAG_DELTA_ENABLED	0x1
#define	V4L2_VP9_LOOP_FILTER_FLAG_DELTA_UPDATE	0x2

/**
 * struct v4l2_vp9_loop_filter - VP9 loop filter parameters
 *
 * @ref_deltas: contains the adjustment needed for the filter level based on the
 * chosen reference frame. If this syntax element is not present in the bitstream,
 * users should pass its last value.
 * @mode_deltas: contains the adjustment needed for the filter level based on the
 * chosen mode.	If this syntax element is not present in the bitstream, users should
 * pass its last value.
 * @level: indicates the loop filter strength.
 * @sharpness: indicates the sharpness level.
 * @flags: combination of V4L2_VP9_LOOP_FILTER_FLAG_{} flags.
 * @reserved: padding field. Should be zeroed by applications.
 *
 * This structure contains all loop filter related parameters. See sections
 * '7.2.8 Loop filter semantics' of the VP9 specification for more details.
 */
struct v4l2_vp9_loop_filter {
	__s8 ref_deltas[4];
	__s8 mode_deltas[2];
	__u8 level;
	__u8 sharpness;
	__u8 flags;
	__u8 reserved[7];
};

/**
 * struct v4l2_vp9_quantization - VP9 quantization parameters
 *
 * @base_q_idx: indicates the base frame qindex.
 * @delta_q_y_dc: indicates the Y DC quantizer relative to base_q_idx.
 * @delta_q_uv_dc: indicates the UV DC quantizer relative to base_q_idx.
 * @delta_q_uv_ac: indicates the UV AC quantizer relative to base_q_idx.
 * @reserved: padding field. Should be zeroed by applications.
 *
 * Encodes the quantization parameters. See section '7.2.9 Quantization params
 * syntax' of the VP9 specification for more details.
 */
struct v4l2_vp9_quantization {
	__u8 base_q_idx;
	__s8 delta_q_y_dc;
	__s8 delta_q_uv_dc;
	__s8 delta_q_uv_ac;
	__u8 reserved[4];
};

#define V4L2_VP9_SEGMENTATION_FLAG_ENABLED		0x01
#define V4L2_VP9_SEGMENTATION_FLAG_UPDATE_MAP		0x02
#define V4L2_VP9_SEGMENTATION_FLAG_TEMPORAL_UPDATE	0x04
#define V4L2_VP9_SEGMENTATION_FLAG_UPDATE_DATA		0x08
#define V4L2_VP9_SEGMENTATION_FLAG_ABS_OR_DELTA_UPDATE	0x10

#define V4L2_VP9_SEG_LVL_ALT_Q				0
#define V4L2_VP9_SEG_LVL_ALT_L				1
#define V4L2_VP9_SEG_LVL_REF_FRAME			2
#define V4L2_VP9_SEG_LVL_SKIP				3
#define V4L2_VP9_SEG_LVL_MAX				4

#define V4L2_VP9_SEGMENT_FEATURE_ENABLED(id)	(1 << (id))
#define V4L2_VP9_SEGMENT_FEATURE_ENABLED_MASK	0xf

/**
 * struct v4l2_vp9_segmentation - VP9 segmentation parameters
 *
 * @feature_data: data attached to each feature. Data entry is only valid if
 * the feature is enabled. The array shall be indexed with segment number as
 * the first dimension (0..7) and one of V4L2_VP9_SEG_{} as the second dimension.
 * @feature_enabled: bitmask defining which features are enabled in each segment.
 * The value for each segment is a combination of V4L2_VP9_SEGMENT_FEATURE_ENABLED(id)
 * values where id is one of V4L2_VP9_SEG_LVL_{}.
 * @tree_probs: specifies the probability values to be used when decoding a
 * Segment-ID. See '5.15. Segmentation map' section of the VP9 specification
 * for more details.
 * @pred_probs: specifies the probability values to be used when decoding a
 * Predicted-Segment-ID. See '6.4.14. Get segment id syntax' section of :ref:`vp9`
 * for more details.
 * @flags: combination of V4L2_VP9_SEGMENTATION_FLAG_{} flags.
 * @reserved: padding field. Should be zeroed by applications.
 *
 * Encodes the quantization parameters. See section '7.2.10 Segmentation params syntax' of
 * the VP9 specification for more details.
 */
struct v4l2_vp9_segmentation {
	__s16 feature_data[8][4];
	__u8 feature_enabled[8];
	__u8 tree_probs[7];
	__u8 pred_probs[3];
	__u8 flags;
	__u8 reserved[5];
};

#define V4L2_VP9_FRAME_FLAG_KEY_FRAME			0x001
#define V4L2_VP9_FRAME_FLAG_SHOW_FRAME			0x002
#define V4L2_VP9_FRAME_FLAG_ERROR_RESILIENT		0x004
#define V4L2_VP9_FRAME_FLAG_INTRA_ONLY			0x008
#define V4L2_VP9_FRAME_FLAG_ALLOW_HIGH_PREC_MV		0x010
#define V4L2_VP9_FRAME_FLAG_REFRESH_FRAME_CTX		0x020
#define V4L2_VP9_FRAME_FLAG_PARALLEL_DEC_MODE		0x040
#define V4L2_VP9_FRAME_FLAG_X_SUBSAMPLING		0x080
#define V4L2_VP9_FRAME_FLAG_Y_SUBSAMPLING		0x100
#define V4L2_VP9_FRAME_FLAG_COLOR_RANGE_FULL_SWING	0x200

#define V4L2_VP9_SIGN_BIAS_LAST				0x1
#define V4L2_VP9_SIGN_BIAS_GOLDEN			0x2
#define V4L2_VP9_SIGN_BIAS_ALT				0x4

#define V4L2_VP9_RESET_FRAME_CTX_NONE			0
#define V4L2_VP9_RESET_FRAME_CTX_SPEC			1
#define V4L2_VP9_RESET_FRAME_CTX_ALL			2

#define V4L2_VP9_INTERP_FILTER_EIGHTTAP			0
#define V4L2_VP9_INTERP_FILTER_EIGHTTAP_SMOOTH		1
#define V4L2_VP9_INTERP_FILTER_EIGHTTAP_SHARP		2
#define V4L2_VP9_INTERP_FILTER_BILINEAR			3
#define V4L2_VP9_INTERP_FILTER_SWITCHABLE		4

#define V4L2_VP9_REFERENCE_MODE_SINGLE_REFERENCE	0
#define V4L2_VP9_REFERENCE_MODE_COMPOUND_REFERENCE	1
#define V4L2_VP9_REFERENCE_MODE_SELECT			2

#define V4L2_VP9_PROFILE_MAX				3

#define V4L2_CID_STATELESS_VP9_FRAME	(V4L2_CID_CODEC_STATELESS_BASE + 300)
/**
 * struct v4l2_ctrl_vp9_frame - VP9 frame decoding control
 *
 * @lf: loop filter parameters. See &v4l2_vp9_loop_filter for more details.
 * @quant: quantization parameters. See &v4l2_vp9_quantization for more details.
 * @seg: segmentation parameters. See &v4l2_vp9_segmentation for more details.
 * @flags: combination of V4L2_VP9_FRAME_FLAG_{} flags.
 * @compressed_header_size: compressed header size in bytes.
 * @uncompressed_header_size: uncompressed header size in bytes.
 * @frame_width_minus_1: add 1 to it and you'll get the frame width expressed in pixels.
 * @frame_height_minus_1: add 1 to it and you'll get the frame height expressed in pixels.
 * @render_width_minus_1: add 1 to it and you'll get the expected render width expressed in
 * pixels. This is not used during the decoding process but might be used by HW scalers
 * to prepare a frame that's ready for scanout.
 * @render_height_minus_1: add 1 to it and you'll get the expected render height expressed in
 * pixels. This is not used during the decoding process but might be used by HW scalers
 * to prepare a frame that's ready for scanout.
 * @last_frame_ts: "last" reference buffer timestamp.
 * The timestamp refers to the timestamp field in struct v4l2_buffer.
 * Use v4l2_timeval_to_ns() to convert the struct timeval to a __u64.
 * @golden_frame_ts: "golden" reference buffer timestamp.
 * The timestamp refers to the timestamp field in struct v4l2_buffer.
 * Use v4l2_timeval_to_ns() to convert the struct timeval to a __u64.
 * @alt_frame_ts: "alt" reference buffer timestamp.
 * The timestamp refers to the timestamp field in struct v4l2_buffer.
 * Use v4l2_timeval_to_ns() to convert the struct timeval to a __u64.
 * @ref_frame_sign_bias: a bitfield specifying whether the sign bias is set for a given
 * reference frame. Either of V4L2_VP9_SIGN_BIAS_{}.
 * @reset_frame_context: specifies whether the frame context should be reset to default values.
 * Either of V4L2_VP9_RESET_FRAME_CTX_{}.
 * @frame_context_idx: frame context that should be used/updated.
 * @profile: VP9 profile. Can be 0, 1, 2 or 3.
 * @bit_depth: bits per components. Can be 8, 10 or 12. Note that not all profiles support
 * 10 and/or 12 bits depths.
 * @interpolation_filter: specifies the filter selection used for performing inter prediction.
 * Set to one of V4L2_VP9_INTERP_FILTER_{}.
 * @tile_cols_log2: specifies the base 2 logarithm of the width of each tile (where the width
 * is measured in units of 8x8 blocks). Shall be less than or equal to 6.
 * @tile_rows_log2: specifies the base 2 logarithm of the height of each tile (where the height
 * is measured in units of 8x8 blocks).
 * @reference_mode: specifies the type of inter prediction to be used.
 * Set to one of V4L2_VP9_REFERENCE_MODE_{}.
 * @reserved: padding field. Should be zeroed by applications.
 */
struct v4l2_ctrl_vp9_frame {
	struct v4l2_vp9_loop_filter lf;
	struct v4l2_vp9_quantization quant;
	struct v4l2_vp9_segmentation seg;
	__u32 flags;
	__u16 compressed_header_size;
	__u16 uncompressed_header_size;
	__u16 frame_width_minus_1;
	__u16 frame_height_minus_1;
	__u16 render_width_minus_1;
	__u16 render_height_minus_1;
	__u64 last_frame_ts;
	__u64 golden_frame_ts;
	__u64 alt_frame_ts;
	__u8 ref_frame_sign_bias;
	__u8 reset_frame_context;
	__u8 frame_context_idx;
	__u8 profile;
	__u8 bit_depth;
	__u8 interpolation_filter;
	__u8 tile_cols_log2;
	__u8 tile_rows_log2;
	__u8 reference_mode;
	__u8 reserved[7];
};

#define V4L2_VP9_NUM_FRAME_CTX	4

/**
 * struct v4l2_vp9_mv_probs - VP9 Motion vector probability updates
 * @joint: motion vector joint probability updates.
 * @sign: motion vector sign probability updates.
 * @classes: motion vector class probability updates.
 * @class0_bit: motion vector class0 bit probability updates.
 * @bits: motion vector bits probability updates.
 * @class0_fr: motion vector class0 fractional bit probability updates.
 * @fr: motion vector fractional bit probability updates.
 * @class0_hp: motion vector class0 high precision fractional bit probability updates.
 * @hp: motion vector high precision fractional bit probability updates.
 *
 * This structure contains new values of motion vector probabilities.
 * A value of zero in an array element means there is no update of the relevant probability.
 * See `struct v4l2_vp9_prob_updates` for details.
 */
struct v4l2_vp9_mv_probs {
	__u8 joint[3];
	__u8 sign[2];
	__u8 classes[2][10];
	__u8 class0_bit[2];
	__u8 bits[2][10];
	__u8 class0_fr[2][2][3];
	__u8 fr[2][3];
	__u8 class0_hp[2];
	__u8 hp[2];
};

#define V4L2_CID_STATELESS_VP9_COMPRESSED_HDR	(V4L2_CID_CODEC_STATELESS_BASE + 301)

#define V4L2_VP9_TX_MODE_ONLY_4X4			0
#define V4L2_VP9_TX_MODE_ALLOW_8X8			1
#define V4L2_VP9_TX_MODE_ALLOW_16X16			2
#define V4L2_VP9_TX_MODE_ALLOW_32X32			3
#define V4L2_VP9_TX_MODE_SELECT				4

/**
 * struct v4l2_ctrl_vp9_compressed_hdr - VP9 probability updates control
 * @tx_mode: specifies the TX mode. Set to one of V4L2_VP9_TX_MODE_{}.
 * @tx8: TX 8x8 probability updates.
 * @tx16: TX 16x16 probability updates.
 * @tx32: TX 32x32 probability updates.
 * @coef: coefficient probability updates.
 * @skip: skip probability updates.
 * @inter_mode: inter mode probability updates.
 * @interp_filter: interpolation filter probability updates.
 * @is_inter: is inter-block probability updates.
 * @comp_mode: compound prediction mode probability updates.
 * @single_ref: single ref probability updates.
 * @comp_ref: compound ref probability updates.
 * @y_mode: Y prediction mode probability updates.
 * @uv_mode: UV prediction mode probability updates.
 * @partition: partition probability updates.
 * @mv: motion vector probability updates.
 *
 * This structure holds the probabilities update as parsed in the compressed
 * header (Spec 6.3). These values represent the value of probability update after
 * being translated with inv_map_table[] (see 6.3.5). A value of zero in an array element
 * means that there is no update of the relevant probability.
 *
 * This control is optional and needs to be used when dealing with the hardware which is
 * not capable of parsing the compressed header itself. Only drivers which need it will
 * implement it.
 */
struct v4l2_ctrl_vp9_compressed_hdr {
	__u8 tx_mode;
	__u8 tx8[2][1];
	__u8 tx16[2][2];
	__u8 tx32[2][3];
	__u8 coef[4][2][2][6][6][3];
	__u8 skip[3];
	__u8 inter_mode[7][3];
	__u8 interp_filter[4][2];
	__u8 is_inter[4];
	__u8 comp_mode[5];
	__u8 single_ref[5][2];
	__u8 comp_ref[5];
	__u8 y_mode[4][9];
	__u8 uv_mode[10][9];
	__u8 partition[16][3];

	struct v4l2_vp9_mv_probs mv;
};

/* MPEG-compression definitions kept for backwards compatibility */
#ifndef __KERNEL__
#define V4L2_CTRL_CLASS_MPEG            V4L2_CTRL_CLASS_CODEC
#define V4L2_CID_MPEG_CLASS             V4L2_CID_CODEC_CLASS
#define V4L2_CID_MPEG_BASE              V4L2_CID_CODEC_BASE
#define V4L2_CID_MPEG_CX2341X_BASE      V4L2_CID_CODEC_CX2341X_BASE
#define V4L2_CID_MPEG_MFC51_BASE        V4L2_CID_CODEC_MFC51_BASE
#endif

#endif

cvs diff -r1.1 -r1.2 pkgsrc/graphics/libv4l/files/videodev2.h (switch to unified diff)

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

cvs diff -r1.1 -r1.2 pkgsrc/graphics/libv4l/patches/patch-lib_libv4l1_libv4l1.c (switch to unified diff)

--- pkgsrc/graphics/libv4l/patches/patch-lib_libv4l1_libv4l1.c 2020/09/02 09:54:33 1.1
+++ pkgsrc/graphics/libv4l/patches/patch-lib_libv4l1_libv4l1.c 2022/05/17 11:55:23 1.2
@@ -1,13 +1,27 @@ @@ -1,13 +1,27 @@
1$NetBSD: patch-lib_libv4l1_libv4l1.c,v 1.1 2020/09/02 09:54:33 ryoon Exp $ 1$NetBSD: patch-lib_libv4l1_libv4l1.c,v 1.2 2022/05/17 11:55:23 jperkin Exp $
2 2
3--- lib/libv4l1/libv4l1.c.orig 2017-01-22 17:33:34.000000000 +0000 3Support NetBSD and SunOS.
 4
 5--- lib/libv4l1/libv4l1.c.orig 2020-05-02 12:16:20.000000000 +0000
4+++ lib/libv4l1/libv4l1.c 6+++ lib/libv4l1/libv4l1.c
5@@ -58,7 +58,7 @@ 7@@ -58,7 +58,7 @@
6 #include <sys/types.h> 8 #include <sys/types.h>
7 #include <sys/mman.h> 9 #include <sys/mman.h>
8 #include "../libv4lconvert/libv4lsyscall-priv.h" 10 #include "../libv4lconvert/libv4lsyscall-priv.h"
9-#if defined(__OpenBSD__) 11-#if defined(__OpenBSD__)
10+#if defined(__OpenBSD__) || defined(__NetBSD__) 12+#if defined(__OpenBSD__) || defined(__NetBSD__)
11 #include <sys/videoio.h> 13 #include <sys/videoio.h>
12 #else 14 #else
13 #include <linux/videodev2.h> 15 #include <linux/videodev2.h>
 16@@ -472,7 +472,11 @@ int v4l1_dup(int fd)
 17 int index = v4l1_get_index(fd);
 18
 19 if (index == -1)
 20+#ifdef __sun
 21+ return syscall(SYS_fcntl, fd, F_DUPFD, 0);
 22+#else
 23 return syscall(SYS_dup, fd);
 24+#endif
 25
 26 devices[index].open_count++;
 27

cvs diff -r1.1 -r1.2 pkgsrc/graphics/libv4l/patches/patch-lib_libv4l2_libv4l2.c (switch to unified diff)

--- pkgsrc/graphics/libv4l/patches/patch-lib_libv4l2_libv4l2.c 2020/09/02 09:54:33 1.1
+++ pkgsrc/graphics/libv4l/patches/patch-lib_libv4l2_libv4l2.c 2022/05/17 11:55:23 1.2
@@ -1,26 +1,40 @@ @@ -1,26 +1,40 @@
1$NetBSD: patch-lib_libv4l2_libv4l2.c,v 1.1 2020/09/02 09:54:33 ryoon Exp $ 1$NetBSD: patch-lib_libv4l2_libv4l2.c,v 1.2 2022/05/17 11:55:23 jperkin Exp $
2 2
3--- lib/libv4l2/libv4l2.c.orig 2017-12-27 13:50:55.000000000 +0000 3Support SunOS.
 4
 5--- lib/libv4l2/libv4l2.c.orig 2020-05-02 12:16:20.000000000 +0000
4+++ lib/libv4l2/libv4l2.c 6+++ lib/libv4l2/libv4l2.c
5@@ -1144,7 +1144,9 @@ int v4l2_ioctl(int fd, unsigned long int 7@@ -880,7 +880,11 @@ int v4l2_dup(int fd)
 8 int index = v4l2_get_index(fd);
 9
 10 if (index == -1)
 11+#ifdef __sun
 12+ return syscall(SYS_fcntl, fd, F_DUPFD, 0);
 13+#else
 14 return syscall(SYS_dup, fd);
 15+#endif
 16
 17 devices[index].open_count++;
 18
 19@@ -1144,7 +1148,9 @@ int v4l2_ioctl(int fd, unsigned long int
6 break; 20 break;
7 case VIDIOC_S_STD: 21 case VIDIOC_S_STD:
8 case VIDIOC_S_INPUT: 22 case VIDIOC_S_INPUT:
9+#ifdef VIDIOC_S_DV_TIMINGS 23+#ifdef VIDIOC_S_DV_TIMINGS
10 case VIDIOC_S_DV_TIMINGS: 24 case VIDIOC_S_DV_TIMINGS:
11+#endif 25+#endif
12 is_capture_request = 1; 26 is_capture_request = 1;
13 stream_needs_locking = 1; 27 stream_needs_locking = 1;
14 break;  28 break;
15@@ -1255,7 +1257,10 @@ no_capture_request: 29@@ -1255,7 +1261,10 @@ no_capture_request:
16  30
17 case VIDIOC_S_STD: 31 case VIDIOC_S_STD:
18 case VIDIOC_S_INPUT: 32 case VIDIOC_S_INPUT:
19- case VIDIOC_S_DV_TIMINGS: { 33- case VIDIOC_S_DV_TIMINGS: {
20+#ifdef VIDIOC_S_DV_TIMINGS 34+#ifdef VIDIOC_S_DV_TIMINGS
21+ case VIDIOC_S_DV_TIMINGS: 35+ case VIDIOC_S_DV_TIMINGS:
22+#endif 36+#endif
23+ { 37+ {
24 struct v4l2_format src_fmt = { 0 }; 38 struct v4l2_format src_fmt = { 0 };
25 unsigned int orig_dest_pixelformat = 39 unsigned int orig_dest_pixelformat =
26 devices[index].dest_fmt.fmt.pix.pixelformat; 40 devices[index].dest_fmt.fmt.pix.pixelformat;

cvs diff -r1.1 -r1.2 pkgsrc/graphics/libv4l/patches/patch-lib_libv4l2rds_libv4l2rds.c (switch to unified diff)

--- pkgsrc/graphics/libv4l/patches/patch-lib_libv4l2rds_libv4l2rds.c 2020/09/02 09:54:33 1.1
+++ pkgsrc/graphics/libv4l/patches/patch-lib_libv4l2rds_libv4l2rds.c 2022/05/17 11:55:23 1.2
@@ -1,13 +1,28 @@ @@ -1,13 +1,28 @@
1$NetBSD: patch-lib_libv4l2rds_libv4l2rds.c,v 1.1 2020/09/02 09:54:33 ryoon Exp $ 1$NetBSD: patch-lib_libv4l2rds_libv4l2rds.c,v 1.2 2022/05/17 11:55:23 jperkin Exp $
2 2
3--- lib/libv4l2rds/libv4l2rds.c.orig 2017-01-22 17:33:34.000000000 +0000 3Support NetBSD and SunOS.
 4
 5--- lib/libv4l2rds/libv4l2rds.c.orig 2020-05-14 09:23:59.000000000 +0000
4+++ lib/libv4l2rds/libv4l2rds.c 6+++ lib/libv4l2rds/libv4l2rds.c
5@@ -27,7 +27,7 @@ 7@@ -14,7 +14,7 @@
6 #include <sys/types.h> 8 #include <sys/types.h>
7 #include <sys/mman.h> 9 #include <sys/mman.h>
8  10
9-#if defined(__OpenBSD__) 11-#if defined(__OpenBSD__)
10+#if defined(__OpenBSD__) || defined(__NetBSD__) 12+#if defined(__OpenBSD__) || defined(__NetBSD__)
11 #include <sys/videoio.h> 13 #include <sys/videoio.h>
12 #else 14 #else
13 #include <linux/videodev2.h> 15 #include <linux/videodev2.h>
 16@@ -1039,10 +1039,12 @@ static time_t rds_decode_mjd(const struc
 17 new_time.tm_year = y;
 18 /* offset (submitted by RDS) that was used to compute the local time,
 19 * expressed in multiples of half hours, bit 5 indicates -/+ */
 20+#if !defined(__sun)
 21 if (priv_state->utc_offset & 0x20)
 22 new_time.tm_gmtoff = -offset * 1800;
 23 else
 24 new_time.tm_gmtoff = offset * 1800;
 25+#endif
 26
 27 /* convert tm struct to time_t value and return it */
 28 return mktime(&new_time);

cvs diff -r1.1 -r1.2 pkgsrc/graphics/libv4l/patches/patch-lib_libv4lconvert_libv4lsyscall-priv.h (switch to unified diff)

--- pkgsrc/graphics/libv4l/patches/patch-lib_libv4lconvert_libv4lsyscall-priv.h 2020/09/02 09:54:33 1.1
+++ pkgsrc/graphics/libv4l/patches/patch-lib_libv4lconvert_libv4lsyscall-priv.h 2022/05/17 11:55:23 1.2
@@ -1,28 +1,51 @@ @@ -1,28 +1,51 @@
1$NetBSD: patch-lib_libv4lconvert_libv4lsyscall-priv.h,v 1.1 2020/09/02 09:54:33 ryoon Exp $ 1$NetBSD: patch-lib_libv4lconvert_libv4lsyscall-priv.h,v 1.2 2022/05/17 11:55:23 jperkin Exp $
 2
 3Support NetBSD and SunOS.
2 4
3--- lib/libv4lconvert/libv4lsyscall-priv.h.orig 2017-01-22 17:33:34.000000000 +0000 5--- lib/libv4lconvert/libv4lsyscall-priv.h.orig 2017-01-22 17:33:34.000000000 +0000
4+++ lib/libv4lconvert/libv4lsyscall-priv.h 6+++ lib/libv4lconvert/libv4lsyscall-priv.h
5@@ -59,11 +59,10 @@ 7@@ -59,11 +59,10 @@
6 #define _IOC_NR(cmd) ((cmd) & 0xFF) 8 #define _IOC_NR(cmd) ((cmd) & 0xFF)
7 #define _IOC_TYPE(cmd) IOCGROUP(cmd) 9 #define _IOC_TYPE(cmd) IOCGROUP(cmd)
8 #define _IOC_SIZE(cmd) IOCPARM_LEN(cmd) 10 #define _IOC_SIZE(cmd) IOCPARM_LEN(cmd)
9-#define MAP_ANONYMOUS MAP_ANON 11-#define MAP_ANONYMOUS MAP_ANON
10 #define MMAP2_PAGE_SHIFT 0 12 #define MMAP2_PAGE_SHIFT 0
11 #endif 13 #endif
12  14
13-#if defined(__OpenBSD__) 15-#if defined(__OpenBSD__)
14+#if defined(__OpenBSD__) || defined(__NetBSD__) 16+#if defined(__OpenBSD__) || defined(__NetBSD__)
15 #include <sys/syscall.h> 17 #include <sys/syscall.h>
16 #include <sys/types.h> 18 #include <sys/types.h>
17 #include <sys/ioctl.h> 19 #include <sys/ioctl.h>
18@@ -111,6 +110,10 @@ register_t __syscall(quad_t, ...); 20@@ -72,6 +71,16 @@
 21 #define MMAP2_PAGE_SHIFT 0
 22 #endif
 23
 24+#if defined(__sun)
 25+#include <sys/syscall.h>
 26+#include <sys/types.h>
 27+#include <sys/ioccom.h>
 28+#include <sys/ioctl.h>
 29+#define _IOC_NR(cmd) ((cmd) & 0x100)
 30+#define _IOC_TYPE(cmd) 'V' /* XXX: hack */
 31+#define MMAP2_PAGE_SHIFT 0
 32+#endif
 33+
 34 #undef SYS_OPEN
 35 #undef SYS_CLOSE
 36 #undef SYS_IOCTL
 37@@ -111,6 +120,14 @@ register_t __syscall(quad_t, ...);
19 #define SYS_MMAP(addr, len, prot, flags, fd, offset) \ 38 #define SYS_MMAP(addr, len, prot, flags, fd, offset) \
20 __syscall((quad_t)SYS_mmap, (void *)(addr), (size_t)(len), \ 39 __syscall((quad_t)SYS_mmap, (void *)(addr), (size_t)(len), \
21 (int)(prot), (int)(flags), (int)(fd), 0, (off_t)(offset)) 40 (int)(prot), (int)(flags), (int)(fd), 0, (off_t)(offset))
22+#elif defined(__NetBSD__) 41+#elif defined(__NetBSD__)
23+#define SYS_MMAP(addr, len, prot, flags, fd, offset) \ 42+#define SYS_MMAP(addr, len, prot, flags, fd, offset) \
24+ __syscall((quad_t)SYS_mmap, (void *)(addr), (size_t)(len), \ 43+ __syscall((quad_t)SYS_mmap, (void *)(addr), (size_t)(len), \
25+ (int)(prot), (int)(flags), (int)(fd), 0, (off_t)(offset)) 44+ (int)(prot), (int)(flags), (int)(fd), 0, (off_t)(offset))
 45+#elif defined(__sun)
 46+#define SYS_MMAP(addr, len, prot, flags, fd, offset) \
 47+ syscall(SYS_mmap, (void *)(addr), (size_t)(len), \
 48+ (int)(prot), (int)(flags), (int)(fd), 0, (off_t)(offset))
26 #else 49 #else
27 #define SYS_MMAP(addr, len, prot, flags, fd, off) \ 50 #define SYS_MMAP(addr, len, prot, flags, fd, off) \
28 syscall(SYS_mmap2, (void *)(addr), (size_t)(len), \ 51 syscall(SYS_mmap2, (void *)(addr), (size_t)(len), \