1b711ef9cSBaptiste Daroussin /*- 2b711ef9cSBaptiste Daroussin * SPDX-License-Identifier: BSD-3-Clause 3b711ef9cSBaptiste Daroussin * 4b711ef9cSBaptiste Daroussin * Video for Linux Two header file 5b711ef9cSBaptiste Daroussin * 6b711ef9cSBaptiste Daroussin * Copyright (C) 1999-2012 the contributors 7b711ef9cSBaptiste Daroussin * Copyright (C) 2012 Nokia Corporation 8b711ef9cSBaptiste Daroussin * Contact: Sakari Ailus <sakari.ailus@iki.fi> 9b711ef9cSBaptiste Daroussin * 10b711ef9cSBaptiste Daroussin * Redistribution and use in source and binary forms, with or without 11b711ef9cSBaptiste Daroussin * modification, are permitted provided that the following conditions 12b711ef9cSBaptiste Daroussin * are met: 13b711ef9cSBaptiste Daroussin * 1. Redistributions of source code must retain the above copyright 14b711ef9cSBaptiste Daroussin * notice, this list of conditions and the following disclaimer. 15b711ef9cSBaptiste Daroussin * 2. Redistributions in binary form must reproduce the above copyright 16b711ef9cSBaptiste Daroussin * notice, this list of conditions and the following disclaimer in 17b711ef9cSBaptiste Daroussin * the documentation and/or other materials provided with the 18b711ef9cSBaptiste Daroussin * distribution. 19b711ef9cSBaptiste Daroussin * 3. The names of its contributors may not be used to endorse or promote 20b711ef9cSBaptiste Daroussin * products derived from this software without specific prior written 21b711ef9cSBaptiste Daroussin * permission. 22b711ef9cSBaptiste Daroussin * 23b711ef9cSBaptiste Daroussin * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 24b711ef9cSBaptiste Daroussin * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 25b711ef9cSBaptiste Daroussin * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 26b711ef9cSBaptiste Daroussin * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 27b711ef9cSBaptiste Daroussin * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 28b711ef9cSBaptiste Daroussin * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED 29b711ef9cSBaptiste Daroussin * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 30b711ef9cSBaptiste Daroussin * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 31b711ef9cSBaptiste Daroussin * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 32b711ef9cSBaptiste Daroussin * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 33b711ef9cSBaptiste Daroussin * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 34b711ef9cSBaptiste Daroussin * 35b711ef9cSBaptiste Daroussin * Minimal V4L2 definitions for the FreeBSD UVC driver. 36b711ef9cSBaptiste Daroussin * Extracted from OpenBSD sys/videoio.h. 37b711ef9cSBaptiste Daroussin */ 38b711ef9cSBaptiste Daroussin 39b711ef9cSBaptiste Daroussin #ifndef _UVIDEO_V4L2_H_ 40b711ef9cSBaptiste Daroussin #define _UVIDEO_V4L2_H_ 41b711ef9cSBaptiste Daroussin 42b711ef9cSBaptiste Daroussin #include <sys/types.h> 43b711ef9cSBaptiste Daroussin #include <sys/ioccom.h> 44b711ef9cSBaptiste Daroussin #include <sys/time.h> 45b711ef9cSBaptiste Daroussin 46b711ef9cSBaptiste Daroussin /* 47b711ef9cSBaptiste Daroussin * Four-character-code (FOURCC) 48b711ef9cSBaptiste Daroussin */ 49b711ef9cSBaptiste Daroussin #define v4l2_fourcc(a, b, c, d) \ 50b711ef9cSBaptiste Daroussin ((u_int32_t)(a) | ((u_int32_t)(b) << 8) | \ 51b711ef9cSBaptiste Daroussin ((u_int32_t)(c) << 16) | ((u_int32_t)(d) << 24)) 52b711ef9cSBaptiste Daroussin 53b711ef9cSBaptiste Daroussin /* 54b711ef9cSBaptiste Daroussin * Enums 55b711ef9cSBaptiste Daroussin */ 56b711ef9cSBaptiste Daroussin enum v4l2_field { 57b711ef9cSBaptiste Daroussin V4L2_FIELD_ANY = 0, 58b711ef9cSBaptiste Daroussin V4L2_FIELD_NONE = 1, 59b711ef9cSBaptiste Daroussin V4L2_FIELD_TOP = 2, 60b711ef9cSBaptiste Daroussin V4L2_FIELD_BOTTOM = 3, 61b711ef9cSBaptiste Daroussin V4L2_FIELD_INTERLACED = 4, 62b711ef9cSBaptiste Daroussin V4L2_FIELD_SEQ_TB = 5, 63b711ef9cSBaptiste Daroussin V4L2_FIELD_SEQ_BT = 6, 64b711ef9cSBaptiste Daroussin V4L2_FIELD_ALTERNATE = 7, 65b711ef9cSBaptiste Daroussin V4L2_FIELD_INTERLACED_TB = 8, 66b711ef9cSBaptiste Daroussin V4L2_FIELD_INTERLACED_BT = 9, 67b711ef9cSBaptiste Daroussin }; 68b711ef9cSBaptiste Daroussin 69b711ef9cSBaptiste Daroussin enum v4l2_buf_type { 70b711ef9cSBaptiste Daroussin V4L2_BUF_TYPE_VIDEO_CAPTURE = 1, 71b711ef9cSBaptiste Daroussin V4L2_BUF_TYPE_VIDEO_OUTPUT = 2, 72b711ef9cSBaptiste Daroussin V4L2_BUF_TYPE_VIDEO_OVERLAY = 3, 73b711ef9cSBaptiste Daroussin V4L2_BUF_TYPE_VBI_CAPTURE = 4, 74b711ef9cSBaptiste Daroussin V4L2_BUF_TYPE_VBI_OUTPUT = 5, 75b711ef9cSBaptiste Daroussin V4L2_BUF_TYPE_SLICED_VBI_CAPTURE = 6, 76b711ef9cSBaptiste Daroussin V4L2_BUF_TYPE_SLICED_VBI_OUTPUT = 7, 77b711ef9cSBaptiste Daroussin V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY = 8, 78b711ef9cSBaptiste Daroussin V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE = 9, 79b711ef9cSBaptiste Daroussin V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE = 10, 80b711ef9cSBaptiste Daroussin V4L2_BUF_TYPE_SDR_CAPTURE = 11, 81b711ef9cSBaptiste Daroussin V4L2_BUF_TYPE_SDR_OUTPUT = 12, 82b711ef9cSBaptiste Daroussin V4L2_BUF_TYPE_META_CAPTURE = 13, 83b711ef9cSBaptiste Daroussin V4L2_BUF_TYPE_META_OUTPUT = 14, 84b711ef9cSBaptiste Daroussin /* Deprecated, do not use */ 85b711ef9cSBaptiste Daroussin V4L2_BUF_TYPE_PRIVATE = 0x80, 86b711ef9cSBaptiste Daroussin }; 87b711ef9cSBaptiste Daroussin 88b711ef9cSBaptiste Daroussin enum v4l2_memory { 89b711ef9cSBaptiste Daroussin V4L2_MEMORY_MMAP = 1, 90b711ef9cSBaptiste Daroussin V4L2_MEMORY_USERPTR = 2, 91b711ef9cSBaptiste Daroussin V4L2_MEMORY_OVERLAY = 3, 92b711ef9cSBaptiste Daroussin V4L2_MEMORY_DMABUF = 4, 93b711ef9cSBaptiste Daroussin }; 94b711ef9cSBaptiste Daroussin 95b711ef9cSBaptiste Daroussin enum v4l2_colorspace { 96b711ef9cSBaptiste Daroussin V4L2_COLORSPACE_DEFAULT = 0, 97b711ef9cSBaptiste Daroussin V4L2_COLORSPACE_SMPTE170M = 1, 98b711ef9cSBaptiste Daroussin V4L2_COLORSPACE_SMPTE240M = 2, 99b711ef9cSBaptiste Daroussin V4L2_COLORSPACE_REC709 = 3, 100b711ef9cSBaptiste Daroussin V4L2_COLORSPACE_BT878 = 4, 101b711ef9cSBaptiste Daroussin V4L2_COLORSPACE_470_SYSTEM_M = 5, 102b711ef9cSBaptiste Daroussin V4L2_COLORSPACE_470_SYSTEM_BG = 6, 103b711ef9cSBaptiste Daroussin V4L2_COLORSPACE_JPEG = 7, 104b711ef9cSBaptiste Daroussin V4L2_COLORSPACE_SRGB = 8, 105b711ef9cSBaptiste Daroussin V4L2_COLORSPACE_OPRGB = 9, 106b711ef9cSBaptiste Daroussin V4L2_COLORSPACE_BT2020 = 10, 107b711ef9cSBaptiste Daroussin V4L2_COLORSPACE_RAW = 11, 108b711ef9cSBaptiste Daroussin V4L2_COLORSPACE_DCI_P3 = 12, 109b711ef9cSBaptiste Daroussin }; 110b711ef9cSBaptiste Daroussin 111b711ef9cSBaptiste Daroussin enum v4l2_xfer_func { 112b711ef9cSBaptiste Daroussin V4L2_XFER_FUNC_DEFAULT = 0, 113b711ef9cSBaptiste Daroussin V4L2_XFER_FUNC_709 = 1, 114b711ef9cSBaptiste Daroussin V4L2_XFER_FUNC_SRGB = 2, 115b711ef9cSBaptiste Daroussin V4L2_XFER_FUNC_OPRGB = 3, 116b711ef9cSBaptiste Daroussin V4L2_XFER_FUNC_SMPTE240M = 4, 117b711ef9cSBaptiste Daroussin V4L2_XFER_FUNC_NONE = 5, 118b711ef9cSBaptiste Daroussin V4L2_XFER_FUNC_DCI_P3 = 6, 119b711ef9cSBaptiste Daroussin V4L2_XFER_FUNC_SMPTE2084 = 7, 120b711ef9cSBaptiste Daroussin }; 121b711ef9cSBaptiste Daroussin 122b711ef9cSBaptiste Daroussin enum v4l2_ycbcr_encoding { 123b711ef9cSBaptiste Daroussin V4L2_YCBCR_ENC_DEFAULT = 0, 124b711ef9cSBaptiste Daroussin V4L2_YCBCR_ENC_601 = 1, 125b711ef9cSBaptiste Daroussin V4L2_YCBCR_ENC_709 = 2, 126b711ef9cSBaptiste Daroussin V4L2_YCBCR_ENC_XV601 = 3, 127b711ef9cSBaptiste Daroussin V4L2_YCBCR_ENC_XV709 = 4, 128b711ef9cSBaptiste Daroussin V4L2_YCBCR_ENC_SYCC = 5, 129b711ef9cSBaptiste Daroussin V4L2_YCBCR_ENC_BT2020 = 6, 130b711ef9cSBaptiste Daroussin V4L2_YCBCR_ENC_BT2020_CONST_LUM = 7, 131b711ef9cSBaptiste Daroussin V4L2_YCBCR_ENC_SMPTE240M = 8, 132b711ef9cSBaptiste Daroussin }; 133b711ef9cSBaptiste Daroussin 134b711ef9cSBaptiste Daroussin enum v4l2_ctrl_type { 135b711ef9cSBaptiste Daroussin V4L2_CTRL_TYPE_INTEGER = 1, 136b711ef9cSBaptiste Daroussin V4L2_CTRL_TYPE_BOOLEAN = 2, 137b711ef9cSBaptiste Daroussin V4L2_CTRL_TYPE_MENU = 3, 138b711ef9cSBaptiste Daroussin V4L2_CTRL_TYPE_BUTTON = 4, 139b711ef9cSBaptiste Daroussin V4L2_CTRL_TYPE_INTEGER64 = 5, 140b711ef9cSBaptiste Daroussin V4L2_CTRL_TYPE_CTRL_CLASS = 6, 141b711ef9cSBaptiste Daroussin V4L2_CTRL_TYPE_STRING = 7, 142b711ef9cSBaptiste Daroussin V4L2_CTRL_TYPE_BITMASK = 8, 143b711ef9cSBaptiste Daroussin V4L2_CTRL_TYPE_INTEGER_MENU = 9, 144b711ef9cSBaptiste Daroussin }; 145b711ef9cSBaptiste Daroussin 146b711ef9cSBaptiste Daroussin enum v4l2_frmsizetypes { 147b711ef9cSBaptiste Daroussin V4L2_FRMSIZE_TYPE_DISCRETE = 1, 148b711ef9cSBaptiste Daroussin V4L2_FRMSIZE_TYPE_CONTINUOUS = 2, 149b711ef9cSBaptiste Daroussin V4L2_FRMSIZE_TYPE_STEPWISE = 3, 150b711ef9cSBaptiste Daroussin }; 151b711ef9cSBaptiste Daroussin 152b711ef9cSBaptiste Daroussin enum v4l2_frmivaltypes { 153b711ef9cSBaptiste Daroussin V4L2_FRMIVAL_TYPE_DISCRETE = 1, 154b711ef9cSBaptiste Daroussin V4L2_FRMIVAL_TYPE_CONTINUOUS = 2, 155b711ef9cSBaptiste Daroussin V4L2_FRMIVAL_TYPE_STEPWISE = 3, 156b711ef9cSBaptiste Daroussin }; 157b711ef9cSBaptiste Daroussin 158b711ef9cSBaptiste Daroussin /* 159b711ef9cSBaptiste Daroussin * Structures 160b711ef9cSBaptiste Daroussin */ 161b711ef9cSBaptiste Daroussin struct v4l2_fract { 162b711ef9cSBaptiste Daroussin u_int32_t numerator; 163b711ef9cSBaptiste Daroussin u_int32_t denominator; 164b711ef9cSBaptiste Daroussin }; 165b711ef9cSBaptiste Daroussin 166b711ef9cSBaptiste Daroussin struct v4l2_capability { 167b711ef9cSBaptiste Daroussin u_int8_t driver[16]; 168b711ef9cSBaptiste Daroussin u_int8_t card[32]; 169b711ef9cSBaptiste Daroussin u_int8_t bus_info[32]; 170b711ef9cSBaptiste Daroussin u_int32_t version; 171b711ef9cSBaptiste Daroussin u_int32_t capabilities; 172b711ef9cSBaptiste Daroussin u_int32_t device_caps; 173b711ef9cSBaptiste Daroussin u_int32_t reserved[3]; 174b711ef9cSBaptiste Daroussin }; 175b711ef9cSBaptiste Daroussin 176b711ef9cSBaptiste Daroussin struct v4l2_pix_format { 177b711ef9cSBaptiste Daroussin u_int32_t width; 178b711ef9cSBaptiste Daroussin u_int32_t height; 179b711ef9cSBaptiste Daroussin u_int32_t pixelformat; 180b711ef9cSBaptiste Daroussin u_int32_t field; /* enum v4l2_field */ 181b711ef9cSBaptiste Daroussin u_int32_t bytesperline; /* for padding, zero if unused */ 182b711ef9cSBaptiste Daroussin u_int32_t sizeimage; 183b711ef9cSBaptiste Daroussin u_int32_t colorspace; /* enum v4l2_colorspace */ 184b711ef9cSBaptiste Daroussin u_int32_t priv; /* private data, depends on pixelformat */ 185b711ef9cSBaptiste Daroussin u_int32_t flags; /* format flags (V4L2_PIX_FMT_FLAG_*) */ 186b711ef9cSBaptiste Daroussin union { 187b711ef9cSBaptiste Daroussin /* enum v4l2_ycbcr_encoding */ 188b711ef9cSBaptiste Daroussin u_int32_t ycbcr_enc; 189b711ef9cSBaptiste Daroussin /* enum v4l2_hsv_encoding */ 190b711ef9cSBaptiste Daroussin u_int32_t hsv_enc; 191b711ef9cSBaptiste Daroussin }; 192b711ef9cSBaptiste Daroussin u_int32_t quantization; /* enum v4l2_quantization */ 193b711ef9cSBaptiste Daroussin u_int32_t xfer_func; /* enum v4l2_xfer_func */ 194b711ef9cSBaptiste Daroussin }; 195b711ef9cSBaptiste Daroussin 196b711ef9cSBaptiste Daroussin /* 197b711ef9cSBaptiste Daroussin * v4l2_format: the system header (v4l_compat) includes struct v4l2_window 198b711ef9cSBaptiste Daroussin * (which contains a pointer) in the fmt union, forcing 8-byte alignment. 199b711ef9cSBaptiste Daroussin * This creates 4 bytes of implicit padding after 'type' on LP64. 200b711ef9cSBaptiste Daroussin * We must match this layout for ioctl ABI compatibility. 201b711ef9cSBaptiste Daroussin * Total size: 4 (type) + 4 (pad) + 200 (union) = 208. 202b711ef9cSBaptiste Daroussin */ 203b711ef9cSBaptiste Daroussin struct v4l2_format { 204b711ef9cSBaptiste Daroussin u_int32_t type; 205b711ef9cSBaptiste Daroussin u_int32_t _pad; 206b711ef9cSBaptiste Daroussin union { 207b711ef9cSBaptiste Daroussin struct v4l2_pix_format pix; 208b711ef9cSBaptiste Daroussin u_int8_t raw_data[200]; 209b711ef9cSBaptiste Daroussin } fmt; 210b711ef9cSBaptiste Daroussin }; 211b711ef9cSBaptiste Daroussin 212b711ef9cSBaptiste Daroussin struct v4l2_fmtdesc { 213b711ef9cSBaptiste Daroussin u_int32_t index; /* Format number */ 214b711ef9cSBaptiste Daroussin u_int32_t type; /* enum v4l2_buf_type */ 215b711ef9cSBaptiste Daroussin u_int32_t flags; 216b711ef9cSBaptiste Daroussin u_int8_t description[32]; /* Description string */ 217b711ef9cSBaptiste Daroussin u_int32_t pixelformat; /* Format fourcc */ 218b711ef9cSBaptiste Daroussin u_int32_t mbus_code; /* Media bus code */ 219b711ef9cSBaptiste Daroussin u_int32_t reserved[3]; 220b711ef9cSBaptiste Daroussin }; 221b711ef9cSBaptiste Daroussin 222b711ef9cSBaptiste Daroussin struct v4l2_timecode { 223b711ef9cSBaptiste Daroussin u_int32_t type; 224b711ef9cSBaptiste Daroussin u_int32_t flags; 225b711ef9cSBaptiste Daroussin u_int8_t frames; 226b711ef9cSBaptiste Daroussin u_int8_t seconds; 227b711ef9cSBaptiste Daroussin u_int8_t minutes; 228b711ef9cSBaptiste Daroussin u_int8_t hours; 229b711ef9cSBaptiste Daroussin u_int8_t userbits[4]; 230b711ef9cSBaptiste Daroussin }; 231b711ef9cSBaptiste Daroussin 232b711ef9cSBaptiste Daroussin struct v4l2_buffer { 233b711ef9cSBaptiste Daroussin u_int32_t index; 234b711ef9cSBaptiste Daroussin u_int32_t type; 235b711ef9cSBaptiste Daroussin u_int32_t bytesused; 236b711ef9cSBaptiste Daroussin u_int32_t flags; 237b711ef9cSBaptiste Daroussin u_int32_t field; 238b711ef9cSBaptiste Daroussin struct timeval timestamp; 239b711ef9cSBaptiste Daroussin struct v4l2_timecode timecode; 240b711ef9cSBaptiste Daroussin u_int32_t sequence; 241b711ef9cSBaptiste Daroussin 242b711ef9cSBaptiste Daroussin /* memory location */ 243b711ef9cSBaptiste Daroussin u_int32_t memory; 244b711ef9cSBaptiste Daroussin union { 245b711ef9cSBaptiste Daroussin u_int32_t offset; 246b711ef9cSBaptiste Daroussin unsigned long userptr; 247b711ef9cSBaptiste Daroussin int32_t fd; 248b711ef9cSBaptiste Daroussin } m; 249b711ef9cSBaptiste Daroussin u_int32_t length; 250b711ef9cSBaptiste Daroussin u_int32_t reserved2; 251b711ef9cSBaptiste Daroussin union { 252b711ef9cSBaptiste Daroussin int32_t request_fd; 253b711ef9cSBaptiste Daroussin u_int32_t reserved; 254b711ef9cSBaptiste Daroussin }; 255b711ef9cSBaptiste Daroussin }; 256b711ef9cSBaptiste Daroussin 257b711ef9cSBaptiste Daroussin struct v4l2_requestbuffers { 258b711ef9cSBaptiste Daroussin u_int32_t count; 259b711ef9cSBaptiste Daroussin u_int32_t type; /* enum v4l2_buf_type */ 260b711ef9cSBaptiste Daroussin u_int32_t memory; /* enum v4l2_memory */ 261b711ef9cSBaptiste Daroussin u_int32_t capabilities; 262b711ef9cSBaptiste Daroussin u_int8_t flags; 263b711ef9cSBaptiste Daroussin u_int8_t reserved[3]; 264b711ef9cSBaptiste Daroussin }; 265b711ef9cSBaptiste Daroussin 266b711ef9cSBaptiste Daroussin struct v4l2_captureparm { 267b711ef9cSBaptiste Daroussin u_int32_t capability; /* Supported modes */ 268b711ef9cSBaptiste Daroussin u_int32_t capturemode; /* Current mode */ 269b711ef9cSBaptiste Daroussin struct v4l2_fract timeperframe; /* Time per frame in seconds */ 270b711ef9cSBaptiste Daroussin u_int32_t extendedmode; /* Driver-specific extensions */ 271b711ef9cSBaptiste Daroussin u_int32_t readbuffers; /* # of buffers for read */ 272b711ef9cSBaptiste Daroussin u_int32_t reserved[4]; 273b711ef9cSBaptiste Daroussin }; 274b711ef9cSBaptiste Daroussin 275b711ef9cSBaptiste Daroussin /* Simplified v4l2_streamparm: only the capture member is included */ 276b711ef9cSBaptiste Daroussin struct v4l2_streamparm { 277b711ef9cSBaptiste Daroussin u_int32_t type; /* enum v4l2_buf_type */ 278b711ef9cSBaptiste Daroussin union { 279b711ef9cSBaptiste Daroussin struct v4l2_captureparm capture; 280b711ef9cSBaptiste Daroussin u_int8_t raw_data[200]; 281b711ef9cSBaptiste Daroussin } parm; 282b711ef9cSBaptiste Daroussin }; 283b711ef9cSBaptiste Daroussin 284b711ef9cSBaptiste Daroussin struct v4l2_input { 285b711ef9cSBaptiste Daroussin u_int32_t index; /* Which input */ 286b711ef9cSBaptiste Daroussin u_int8_t name[32]; /* Label */ 287b711ef9cSBaptiste Daroussin u_int32_t type; /* Type of input */ 288b711ef9cSBaptiste Daroussin u_int32_t audioset; /* Associated audios (bitfield) */ 289b711ef9cSBaptiste Daroussin u_int32_t tuner; /* Tuner index */ 290b711ef9cSBaptiste Daroussin u_int64_t std; 291b711ef9cSBaptiste Daroussin u_int32_t status; 292b711ef9cSBaptiste Daroussin u_int32_t capabilities; 293b711ef9cSBaptiste Daroussin u_int32_t reserved[3]; 294b711ef9cSBaptiste Daroussin }; 295b711ef9cSBaptiste Daroussin 296b711ef9cSBaptiste Daroussin struct v4l2_control { 297b711ef9cSBaptiste Daroussin u_int32_t id; 298b711ef9cSBaptiste Daroussin int32_t value; 299b711ef9cSBaptiste Daroussin }; 300b711ef9cSBaptiste Daroussin 301b711ef9cSBaptiste Daroussin struct v4l2_queryctrl { 302b711ef9cSBaptiste Daroussin u_int32_t id; 303b711ef9cSBaptiste Daroussin u_int32_t type; /* enum v4l2_ctrl_type */ 304b711ef9cSBaptiste Daroussin u_int8_t name[32]; /* Whatever */ 305b711ef9cSBaptiste Daroussin int32_t minimum; /* Note signedness */ 306b711ef9cSBaptiste Daroussin int32_t maximum; 307b711ef9cSBaptiste Daroussin int32_t step; 308b711ef9cSBaptiste Daroussin int32_t default_value; 309b711ef9cSBaptiste Daroussin u_int32_t flags; 310b711ef9cSBaptiste Daroussin u_int32_t reserved[2]; 311b711ef9cSBaptiste Daroussin }; 312b711ef9cSBaptiste Daroussin 313b711ef9cSBaptiste Daroussin struct v4l2_frmsize_discrete { 314b711ef9cSBaptiste Daroussin u_int32_t width; /* Frame width [pixel] */ 315b711ef9cSBaptiste Daroussin u_int32_t height; /* Frame height [pixel] */ 316b711ef9cSBaptiste Daroussin }; 317b711ef9cSBaptiste Daroussin 318b711ef9cSBaptiste Daroussin struct v4l2_frmsize_stepwise { 319b711ef9cSBaptiste Daroussin u_int32_t min_width; /* Minimum frame width [pixel] */ 320b711ef9cSBaptiste Daroussin u_int32_t max_width; /* Maximum frame width [pixel] */ 321b711ef9cSBaptiste Daroussin u_int32_t step_width; /* Frame width step size [pixel] */ 322b711ef9cSBaptiste Daroussin u_int32_t min_height; /* Minimum frame height [pixel] */ 323b711ef9cSBaptiste Daroussin u_int32_t max_height; /* Maximum frame height [pixel] */ 324b711ef9cSBaptiste Daroussin u_int32_t step_height; /* Frame height step size [pixel] */ 325b711ef9cSBaptiste Daroussin }; 326b711ef9cSBaptiste Daroussin 327b711ef9cSBaptiste Daroussin struct v4l2_frmsizeenum { 328b711ef9cSBaptiste Daroussin u_int32_t index; /* Frame size number */ 329b711ef9cSBaptiste Daroussin u_int32_t pixel_format; /* Pixel format */ 330b711ef9cSBaptiste Daroussin u_int32_t type; /* Frame size type the device supports. */ 331b711ef9cSBaptiste Daroussin 332b711ef9cSBaptiste Daroussin union { /* Frame size */ 333b711ef9cSBaptiste Daroussin struct v4l2_frmsize_discrete discrete; 334b711ef9cSBaptiste Daroussin struct v4l2_frmsize_stepwise stepwise; 335b711ef9cSBaptiste Daroussin }; 336b711ef9cSBaptiste Daroussin 337b711ef9cSBaptiste Daroussin u_int32_t reserved[2]; /* Reserved space for future use */ 338b711ef9cSBaptiste Daroussin }; 339b711ef9cSBaptiste Daroussin 340b711ef9cSBaptiste Daroussin struct v4l2_frmival_stepwise { 341b711ef9cSBaptiste Daroussin struct v4l2_fract min; /* Minimum frame interval [s] */ 342b711ef9cSBaptiste Daroussin struct v4l2_fract max; /* Maximum frame interval [s] */ 343b711ef9cSBaptiste Daroussin struct v4l2_fract step; /* Frame interval step size [s] */ 344b711ef9cSBaptiste Daroussin }; 345b711ef9cSBaptiste Daroussin 346b711ef9cSBaptiste Daroussin struct v4l2_frmivalenum { 347b711ef9cSBaptiste Daroussin u_int32_t index; /* Frame format index */ 348b711ef9cSBaptiste Daroussin u_int32_t pixel_format; /* Pixel format */ 349b711ef9cSBaptiste Daroussin u_int32_t width; /* Frame width */ 350b711ef9cSBaptiste Daroussin u_int32_t height; /* Frame height */ 351b711ef9cSBaptiste Daroussin u_int32_t type; /* Frame interval type the device supports. */ 352b711ef9cSBaptiste Daroussin 353b711ef9cSBaptiste Daroussin union { /* Frame interval */ 354b711ef9cSBaptiste Daroussin struct v4l2_fract discrete; 355b711ef9cSBaptiste Daroussin struct v4l2_frmival_stepwise stepwise; 356b711ef9cSBaptiste Daroussin }; 357b711ef9cSBaptiste Daroussin 358b711ef9cSBaptiste Daroussin u_int32_t reserved[2]; /* Reserved space for future use */ 359b711ef9cSBaptiste Daroussin }; 360b711ef9cSBaptiste Daroussin 361b711ef9cSBaptiste Daroussin /* 362b711ef9cSBaptiste Daroussin * Pixel formats 363b711ef9cSBaptiste Daroussin */ 364b711ef9cSBaptiste Daroussin 365b711ef9cSBaptiste Daroussin /* Luminance+Chrominance formats */ 366b711ef9cSBaptiste Daroussin #define V4L2_PIX_FMT_YUYV v4l2_fourcc('Y', 'U', 'Y', 'V') 367*8bc06ffbSBaptiste Daroussin #define V4L2_PIX_FMT_UYVY v4l2_fourcc('U', 'Y', 'V', 'Y') 368*8bc06ffbSBaptiste Daroussin #define V4L2_PIX_FMT_NV12 v4l2_fourcc('N', 'V', '1', '2') 369*8bc06ffbSBaptiste Daroussin #define V4L2_PIX_FMT_NV21 v4l2_fourcc('N', 'V', '2', '1') 370*8bc06ffbSBaptiste Daroussin #define V4L2_PIX_FMT_M420 v4l2_fourcc('M', '4', '2', '0') 371b711ef9cSBaptiste Daroussin #define V4L2_PIX_FMT_YVU420 v4l2_fourcc('Y', 'V', '1', '2') 372b711ef9cSBaptiste Daroussin #define V4L2_PIX_FMT_YUV420 v4l2_fourcc('Y', 'U', '1', '2') 373b711ef9cSBaptiste Daroussin 374b711ef9cSBaptiste Daroussin /* Compressed formats */ 375b711ef9cSBaptiste Daroussin #define V4L2_PIX_FMT_MJPEG v4l2_fourcc('M', 'J', 'P', 'G') 376b711ef9cSBaptiste Daroussin #define V4L2_PIX_FMT_H264 v4l2_fourcc('H', '2', '6', '4') 377b711ef9cSBaptiste Daroussin #define V4L2_PIX_FMT_HEVC v4l2_fourcc('H', 'E', 'V', 'C') 378b711ef9cSBaptiste Daroussin 379b711ef9cSBaptiste Daroussin /* Grey formats */ 380b711ef9cSBaptiste Daroussin #define V4L2_PIX_FMT_GREY v4l2_fourcc('G', 'R', 'E', 'Y') 381b711ef9cSBaptiste Daroussin #define V4L2_PIX_FMT_Y10 v4l2_fourcc('Y', '1', '0', ' ') 382*8bc06ffbSBaptiste Daroussin #define V4L2_PIX_FMT_Y12 v4l2_fourcc('Y', '1', '2', ' ') 383*8bc06ffbSBaptiste Daroussin #define V4L2_PIX_FMT_Y16 v4l2_fourcc('Y', '1', '6', ' ') 384b711ef9cSBaptiste Daroussin 385b711ef9cSBaptiste Daroussin /* RGB formats */ 386b711ef9cSBaptiste Daroussin #define V4L2_PIX_FMT_RGB565 v4l2_fourcc('R', 'G', 'B', 'P') 387b711ef9cSBaptiste Daroussin #define V4L2_PIX_FMT_BGR24 v4l2_fourcc('B', 'G', 'R', '3') 388b711ef9cSBaptiste Daroussin #define V4L2_PIX_FMT_XBGR32 v4l2_fourcc('X', 'R', '2', '4') 389b711ef9cSBaptiste Daroussin 390b711ef9cSBaptiste Daroussin /* Bayer formats */ 391b711ef9cSBaptiste Daroussin #define V4L2_PIX_FMT_SBGGR8 v4l2_fourcc('B', 'A', '8', '1') 392b711ef9cSBaptiste Daroussin #define V4L2_PIX_FMT_SGBRG8 v4l2_fourcc('G', 'B', 'R', 'G') 393b711ef9cSBaptiste Daroussin #define V4L2_PIX_FMT_SGRBG8 v4l2_fourcc('G', 'R', 'B', 'G') 394b711ef9cSBaptiste Daroussin #define V4L2_PIX_FMT_SRGGB8 v4l2_fourcc('R', 'G', 'G', 'B') 395b711ef9cSBaptiste Daroussin #define V4L2_PIX_FMT_SBGGR16 v4l2_fourcc('B', 'Y', 'R', '2') 396b711ef9cSBaptiste Daroussin #define V4L2_PIX_FMT_SGBRG16 v4l2_fourcc('G', 'B', '1', '6') 397b711ef9cSBaptiste Daroussin #define V4L2_PIX_FMT_SRGGB16 v4l2_fourcc('R', 'G', '1', '6') 398b711ef9cSBaptiste Daroussin #define V4L2_PIX_FMT_SGRBG16 v4l2_fourcc('G', 'R', '1', '6') 399b711ef9cSBaptiste Daroussin #define V4L2_PIX_FMT_SRGGB10P v4l2_fourcc('p', 'R', 'A', 'A') 400b711ef9cSBaptiste Daroussin 401b711ef9cSBaptiste Daroussin /* Depth format */ 402b711ef9cSBaptiste Daroussin #define V4L2_PIX_FMT_Z16 v4l2_fourcc('Z', '1', '6', ' ') 403b711ef9cSBaptiste Daroussin 404b711ef9cSBaptiste Daroussin /* 405b711ef9cSBaptiste Daroussin * Capability flags 406b711ef9cSBaptiste Daroussin */ 407b711ef9cSBaptiste Daroussin #define V4L2_CAP_VIDEO_CAPTURE 0x00000001 408b711ef9cSBaptiste Daroussin #define V4L2_CAP_STREAMING 0x04000000 409b711ef9cSBaptiste Daroussin #define V4L2_CAP_EXT_PIX_FORMAT 0x00200000 410b711ef9cSBaptiste Daroussin #define V4L2_CAP_READWRITE 0x01000000 411b711ef9cSBaptiste Daroussin #define V4L2_CAP_DEVICE_CAPS 0x80000000 412b711ef9cSBaptiste Daroussin #define V4L2_CAP_TIMEPERFRAME 0x1000 413b711ef9cSBaptiste Daroussin 414b711ef9cSBaptiste Daroussin /* 415b711ef9cSBaptiste Daroussin * Buffer flags 416b711ef9cSBaptiste Daroussin */ 417b711ef9cSBaptiste Daroussin #define V4L2_BUF_FLAG_MAPPED 0x00000001 418b711ef9cSBaptiste Daroussin #define V4L2_BUF_FLAG_QUEUED 0x00000002 419b711ef9cSBaptiste Daroussin #define V4L2_BUF_FLAG_DONE 0x00000004 420b711ef9cSBaptiste Daroussin #define V4L2_BUF_FLAG_ERROR 0x00000040 421b711ef9cSBaptiste Daroussin #define V4L2_BUF_FLAG_TIMESTAMP_MASK 0x0000e000 422b711ef9cSBaptiste Daroussin #define V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC 0x00002000 423b711ef9cSBaptiste Daroussin #define V4L2_BUF_FLAG_TSTAMP_SRC_MASK 0x00070000 424b711ef9cSBaptiste Daroussin #define V4L2_BUF_FLAG_TSTAMP_SRC_EOF 0x00000000 425b711ef9cSBaptiste Daroussin #define V4L2_BUF_FLAG_TIMECODE 0x00000100 426b711ef9cSBaptiste Daroussin 427b711ef9cSBaptiste Daroussin /* 428b711ef9cSBaptiste Daroussin * Format flags 429b711ef9cSBaptiste Daroussin */ 430b711ef9cSBaptiste Daroussin #define V4L2_FMT_FLAG_COMPRESSED 0x0001 431b711ef9cSBaptiste Daroussin 432b711ef9cSBaptiste Daroussin /* 433b711ef9cSBaptiste Daroussin * Buffer capabilities 434b711ef9cSBaptiste Daroussin */ 435b711ef9cSBaptiste Daroussin #define V4L2_BUF_CAP_SUPPORTS_MMAP (1 << 0) 436b711ef9cSBaptiste Daroussin 437b711ef9cSBaptiste Daroussin /* 438b711ef9cSBaptiste Daroussin * Input types 439b711ef9cSBaptiste Daroussin */ 440b711ef9cSBaptiste Daroussin #define V4L2_INPUT_TYPE_CAMERA 2 441b711ef9cSBaptiste Daroussin 442b711ef9cSBaptiste Daroussin /* 443b711ef9cSBaptiste Daroussin * Control IDs 444b711ef9cSBaptiste Daroussin */ 445b711ef9cSBaptiste Daroussin #define V4L2_CTRL_CLASS_USER 0x00980000 446b711ef9cSBaptiste Daroussin #define V4L2_CID_BASE (V4L2_CTRL_CLASS_USER | 0x900) 447b711ef9cSBaptiste Daroussin #define V4L2_CID_BRIGHTNESS (V4L2_CID_BASE + 0) 448b711ef9cSBaptiste Daroussin #define V4L2_CID_CONTRAST (V4L2_CID_BASE + 1) 449b711ef9cSBaptiste Daroussin #define V4L2_CID_SATURATION (V4L2_CID_BASE + 2) 450b711ef9cSBaptiste Daroussin #define V4L2_CID_HUE (V4L2_CID_BASE + 3) 451b711ef9cSBaptiste Daroussin #define V4L2_CID_AUTO_WHITE_BALANCE (V4L2_CID_BASE + 12) 452b711ef9cSBaptiste Daroussin #define V4L2_CID_RED_BALANCE (V4L2_CID_BASE + 14) 453b711ef9cSBaptiste Daroussin #define V4L2_CID_BLUE_BALANCE (V4L2_CID_BASE + 15) 454b711ef9cSBaptiste Daroussin #define V4L2_CID_GAMMA (V4L2_CID_BASE + 16) 455b711ef9cSBaptiste Daroussin #define V4L2_CID_GAIN (V4L2_CID_BASE + 19) 456b711ef9cSBaptiste Daroussin #define V4L2_CID_POWER_LINE_FREQUENCY (V4L2_CID_BASE + 24) 457b711ef9cSBaptiste Daroussin #define V4L2_CID_HUE_AUTO (V4L2_CID_BASE + 25) 458b711ef9cSBaptiste Daroussin #define V4L2_CID_WHITE_BALANCE_TEMPERATURE (V4L2_CID_BASE + 26) 459b711ef9cSBaptiste Daroussin #define V4L2_CID_SHARPNESS (V4L2_CID_BASE + 27) 460b711ef9cSBaptiste Daroussin #define V4L2_CID_BACKLIGHT_COMPENSATION (V4L2_CID_BASE + 28) 461b711ef9cSBaptiste Daroussin 462d0450cbeSBaptiste Daroussin #define V4L2_CID_CAMERA_CLASS_BASE 0x009a0000 463d0450cbeSBaptiste Daroussin #define V4L2_CID_EXPOSURE_AUTO (V4L2_CID_CAMERA_CLASS_BASE + 1) 464d0450cbeSBaptiste Daroussin #define V4L2_CID_EXPOSURE_ABSOLUTE (V4L2_CID_CAMERA_CLASS_BASE + 2) 465d0450cbeSBaptiste Daroussin #define V4L2_CID_EXPOSURE_AUTO_PRIORITY (V4L2_CID_CAMERA_CLASS_BASE + 3) 466d0450cbeSBaptiste Daroussin #define V4L2_CID_FOCUS_ABSOLUTE (V4L2_CID_CAMERA_CLASS_BASE + 4) 467d0450cbeSBaptiste Daroussin #define V4L2_CID_FOCUS_RELATIVE (V4L2_CID_CAMERA_CLASS_BASE + 5) 468d0450cbeSBaptiste Daroussin #define V4L2_CID_PAN_ABSOLUTE (V4L2_CID_CAMERA_CLASS_BASE + 8) 469d0450cbeSBaptiste Daroussin #define V4L2_CID_TILT_ABSOLUTE (V4L2_CID_CAMERA_CLASS_BASE + 9) 470d0450cbeSBaptiste Daroussin #define V4L2_CID_FOCUS_AUTO (V4L2_CID_CAMERA_CLASS_BASE + 12) 471d0450cbeSBaptiste Daroussin #define V4L2_CID_ZOOM_ABSOLUTE (V4L2_CID_CAMERA_CLASS_BASE + 13) 472d0450cbeSBaptiste Daroussin #define V4L2_CID_ZOOM_CONTINUOUS (V4L2_CID_CAMERA_CLASS_BASE + 15) 473d0450cbeSBaptiste Daroussin #define V4L2_CID_PRIVACY (V4L2_CID_CAMERA_CLASS_BASE + 16) 474d0450cbeSBaptiste Daroussin 475b711ef9cSBaptiste Daroussin /* 476b711ef9cSBaptiste Daroussin * V4L2 ioctl definitions 477b711ef9cSBaptiste Daroussin */ 478b711ef9cSBaptiste Daroussin #define VIDIOC_QUERYCAP _IOR('V', 0, struct v4l2_capability) 479b711ef9cSBaptiste Daroussin #define VIDIOC_ENUM_FMT _IOWR('V', 2, struct v4l2_fmtdesc) 480b711ef9cSBaptiste Daroussin #define VIDIOC_G_FMT _IOWR('V', 4, struct v4l2_format) 481b711ef9cSBaptiste Daroussin #define VIDIOC_S_FMT _IOWR('V', 5, struct v4l2_format) 482b711ef9cSBaptiste Daroussin #define VIDIOC_REQBUFS _IOWR('V', 8, struct v4l2_requestbuffers) 483b711ef9cSBaptiste Daroussin #define VIDIOC_QUERYBUF _IOWR('V', 9, struct v4l2_buffer) 484b711ef9cSBaptiste Daroussin #define VIDIOC_QBUF _IOWR('V', 15, struct v4l2_buffer) 485b711ef9cSBaptiste Daroussin #define VIDIOC_DQBUF _IOWR('V', 17, struct v4l2_buffer) 486b711ef9cSBaptiste Daroussin #define VIDIOC_STREAMON _IOW('V', 18, int) 487b711ef9cSBaptiste Daroussin #define VIDIOC_STREAMOFF _IOW('V', 19, int) 488b711ef9cSBaptiste Daroussin #define VIDIOC_G_PARM _IOWR('V', 21, struct v4l2_streamparm) 489b711ef9cSBaptiste Daroussin #define VIDIOC_S_PARM _IOWR('V', 22, struct v4l2_streamparm) 490b711ef9cSBaptiste Daroussin #define VIDIOC_ENUMINPUT _IOWR('V', 26, struct v4l2_input) 491b711ef9cSBaptiste Daroussin #define VIDIOC_G_CTRL _IOWR('V', 27, struct v4l2_control) 492b711ef9cSBaptiste Daroussin #define VIDIOC_S_CTRL _IOWR('V', 28, struct v4l2_control) 493b711ef9cSBaptiste Daroussin #define VIDIOC_QUERYCTRL _IOWR('V', 36, struct v4l2_queryctrl) 494b711ef9cSBaptiste Daroussin #define VIDIOC_G_INPUT _IOR('V', 38, int) 495b711ef9cSBaptiste Daroussin #define VIDIOC_S_INPUT _IOWR('V', 39, int) 496b711ef9cSBaptiste Daroussin #define VIDIOC_G_PRIORITY _IOR('V', 67, u_int32_t) 497b711ef9cSBaptiste Daroussin #define VIDIOC_S_PRIORITY _IOW('V', 68, u_int32_t) 498b711ef9cSBaptiste Daroussin #define VIDIOC_TRY_FMT _IOWR('V', 64, struct v4l2_format) 499b711ef9cSBaptiste Daroussin #define VIDIOC_ENUM_FRAMESIZES _IOWR('V', 74, struct v4l2_frmsizeenum) 500b711ef9cSBaptiste Daroussin #define VIDIOC_ENUM_FRAMEINTERVALS _IOWR('V', 75, struct v4l2_frmivalenum) 501b711ef9cSBaptiste Daroussin 502b711ef9cSBaptiste Daroussin #endif /* _UVIDEO_V4L2_H_ */ 503