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