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 (expand / 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,14 +1,14 @@ @@ -1,14 +1,14 @@
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
@@ -31,31 +31,36 @@ NEWHEADER!= ${GREP} V4L2_SEL_TGT_CROP /u @@ -31,31 +31,36 @@ NEWHEADER!= ${GREP} V4L2_SEL_TGT_CROP /u
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

cvs diff -r1.23 -r1.24 pkgsrc/graphics/libv4l/distinfo (expand / 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 (expand / 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
@@ -47,66 +47,69 @@ @@ -47,66 +47,69 @@
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 */
@@ -136,57 +139,68 @@ enum v4l2_field { @@ -136,57 +139,68 @@ enum v4l2_field {
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 {
@@ -216,43 +230,41 @@ enum v4l2_colorspace { @@ -216,43 +230,41 @@ enum v4l2_colorspace {
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.
@@ -264,64 +276,64 @@ enum v4l2_colorspace { @@ -264,64 +276,64 @@ enum v4l2_colorspace {
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 */
@@ -368,66 +380,81 @@ enum v4l2_hsv_encoding { @@ -368,66 +380,81 @@ enum v4l2_hsv_encoding {
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];
@@ -464,29 +491,32 @@ struct v4l2_capability { @@ -464,29 +491,32 @@ struct v4l2_capability {
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 */
@@ -494,114 +524,146 @@ struct v4l2_pix_format { @@ -494,114 +524,146 @@ struct v4l2_pix_format {
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')
@@ -615,53 +677,68 @@ struct v4l2_pix_format { @@ -615,53 +677,68 @@ struct v4l2_pix_format {
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 */
@@ -674,27 +751,30 @@ struct v4l2_pix_format { @@ -674,27 +751,30 @@ struct v4l2_pix_format {
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 */
@@ -702,47 +782,63 @@ struct v4l2_pix_format { @@ -702,47 +782,63 @@ struct v4l2_pix_format {
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] */
@@ -851,47 +947,81 @@ struct v4l2_jpegcompression { @@ -851,47 +947,81 @@ struct v4l2_jpegcompression {
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;
@@ -913,100 +1043,133 @@ struct v4l2_plane { @@ -913,100 +1043,133 @@ struct v4l2_plane {
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;
@@ -1044,36 +1207,36 @@ struct v4l2_framebuffer { @@ -1044,36 +1207,36 @@ struct v4l2_framebuffer {
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];
@@ -1125,26 +1288,30 @@ struct v4l2_selection { @@ -1125,26 +1288,30 @@ struct v4l2_selection {
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)
@@ -1399,26 +1566,33 @@ struct v4l2_bt_timings { @@ -1399,26 +1566,33 @@ struct v4l2_bt_timings {
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
@@ -1581,73 +1755,111 @@ struct v4l2_output { @@ -1581,73 +1755,111 @@ struct v4l2_output {
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];
@@ -1883,26 +2095,27 @@ struct v4l2_encoder_cmd { @@ -1883,26 +2095,27 @@ struct v4l2_encoder_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
@@ -2064,96 +2277,102 @@ struct v4l2_mpeg_vbi_fmt_ivtv { @@ -2064,96 +2277,102 @@ struct v4l2_mpeg_vbi_fmt_ivtv {
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;
@@ -2235,27 +2454,31 @@ struct v4l2_event_motion_det { @@ -2235,27 +2454,31 @@ struct v4l2_event_motion_det {
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};
@@ -2301,42 +2524,47 @@ struct v4l2_dbg_chip_info { @@ -2301,42 +2524,47 @@ struct 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)
@@ -2417,14 +2645,20 @@ struct v4l2_create_buffers { @@ -2417,14 +2645,20 @@ struct v4l2_create_buffers {
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 (expand / 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 (expand / 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 (expand / 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 (expand / 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), \