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