The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/sys/videoio.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*      $OpenBSD: videoio.h,v 1.17 2020/11/20 05:27:29 mglocker Exp $   */
    2 /*
    3  *  Video for Linux Two header file
    4  *
    5  *  Copyright (C) 1999-2012 the contributors
    6  *  Copyright (C) 2012 Nokia Corporation
    7  *  Contact: Sakari Ailus <sakari.ailus@iki.fi>
    8  *
    9  *  This program is free software; you can redistribute it and/or modify
   10  *  it under the terms of the GNU General Public License as published by
   11  *  the Free Software Foundation; either version 2 of the License, or
   12  *  (at your option) any later version.
   13  *
   14  *  This program is distributed in the hope that it will be useful,
   15  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
   16  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   17  *  GNU General Public License for more details.
   18  *
   19  *  Alternatively you can redistribute this file under the terms of the
   20  *  BSD license as stated below:
   21  *
   22  *  Redistribution and use in source and binary forms, with or without
   23  *  modification, are permitted provided that the following conditions
   24  *  are met:
   25  *  1. Redistributions of source code must retain the above copyright
   26  *     notice, this list of conditions and the following disclaimer.
   27  *  2. Redistributions in binary form must reproduce the above copyright
   28  *     notice, this list of conditions and the following disclaimer in
   29  *     the documentation and/or other materials provided with the
   30  *     distribution.
   31  *  3. The names of its contributors may not be used to endorse or promote
   32  *     products derived from this software without specific prior written
   33  *     permission.
   34  *
   35  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
   36  *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
   37  *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
   38  *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
   39  *  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   40  *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
   41  *  TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
   42  *  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
   43  *  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
   44  *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
   45  *  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   46  *
   47  *      Header file for v4l or V4L2 drivers and applications
   48  * with public API.
   49  * All kernel-specific stuff were moved to media/v4l2-dev.h, so
   50  * no #if __KERNEL tests are allowed here
   51  *
   52  *      See https://linuxtv.org for more info
   53  *
   54  *      Author: Bill Dirks <bill@thedirks.org>
   55  *              Justin Schoeman
   56  *              Hans Verkuil <hverkuil@xs4all.nl>
   57  *              et al.
   58  */
   59 
   60 #ifndef _SYS_VIDEOIO_H_
   61 #define _SYS_VIDEOIO_H_
   62 #include <sys/time.h>
   63 #include <sys/types.h>
   64 #include <sys/ioccom.h>
   65 /* Inline #include <linux/v4l2-common.h>
   66  * (v4l2-common.h was split off from videodev2.h and has the same BSD license.)
   67  *
   68  * Begin of v4l2-common.h
   69  */
   70 /*
   71  *
   72  * Selection interface definitions
   73  *
   74  */
   75 
   76 /* Current cropping area */
   77 #define V4L2_SEL_TGT_CROP               0x0000
   78 /* Default cropping area */
   79 #define V4L2_SEL_TGT_CROP_DEFAULT       0x0001
   80 /* Cropping bounds */
   81 #define V4L2_SEL_TGT_CROP_BOUNDS        0x0002
   82 /* Native frame size */
   83 #define V4L2_SEL_TGT_NATIVE_SIZE        0x0003
   84 /* Current composing area */
   85 #define V4L2_SEL_TGT_COMPOSE            0x0100
   86 /* Default composing area */
   87 #define V4L2_SEL_TGT_COMPOSE_DEFAULT    0x0101
   88 /* Composing bounds */
   89 #define V4L2_SEL_TGT_COMPOSE_BOUNDS     0x0102
   90 /* Current composing area plus all padding pixels */
   91 #define V4L2_SEL_TGT_COMPOSE_PADDED     0x0103
   92 
   93 /* Backward compatibility target definitions --- to be removed. */
   94 #define V4L2_SEL_TGT_CROP_ACTIVE        V4L2_SEL_TGT_CROP
   95 #define V4L2_SEL_TGT_COMPOSE_ACTIVE     V4L2_SEL_TGT_COMPOSE
   96 #define V4L2_SUBDEV_SEL_TGT_CROP_ACTUAL V4L2_SEL_TGT_CROP
   97 #define V4L2_SUBDEV_SEL_TGT_COMPOSE_ACTUAL V4L2_SEL_TGT_COMPOSE
   98 #define V4L2_SUBDEV_SEL_TGT_CROP_BOUNDS V4L2_SEL_TGT_CROP_BOUNDS
   99 #define V4L2_SUBDEV_SEL_TGT_COMPOSE_BOUNDS V4L2_SEL_TGT_COMPOSE_BOUNDS
  100 
  101 /* Selection flags */
  102 #define V4L2_SEL_FLAG_GE                (1 << 0)
  103 #define V4L2_SEL_FLAG_LE                (1 << 1)
  104 #define V4L2_SEL_FLAG_KEEP_CONFIG       (1 << 2)
  105 
  106 /* Backward compatibility flag definitions --- to be removed. */
  107 #define V4L2_SUBDEV_SEL_FLAG_SIZE_GE    V4L2_SEL_FLAG_GE
  108 #define V4L2_SUBDEV_SEL_FLAG_SIZE_LE    V4L2_SEL_FLAG_LE
  109 #define V4L2_SUBDEV_SEL_FLAG_KEEP_CONFIG V4L2_SEL_FLAG_KEEP_CONFIG
  110 
  111 struct v4l2_edid {
  112         u_int32_t pad;
  113         u_int32_t start_block;
  114         u_int32_t blocks;
  115         u_int32_t reserved[5];
  116         u_int8_t  *edid;
  117 };
  118 /*
  119  * End of v4l2-common.h
  120  */
  121 /* Inline #include <linux/v4l2-controls.h>
  122  * (v4l2-controls.h was split off from videodev2.h and has the same BSD license.)
  123  *
  124  * Begin of v4l2-controls.h
  125  */
  126 /* Control classes */
  127 #define V4L2_CTRL_CLASS_USER            0x00980000      /* Old-style 'user' controls */
  128 #define V4L2_CTRL_CLASS_MPEG            0x00990000      /* MPEG-compression controls */
  129 #define V4L2_CTRL_CLASS_CAMERA          0x009a0000      /* Camera class controls */
  130 #define V4L2_CTRL_CLASS_FM_TX           0x009b0000      /* FM Modulator controls */
  131 #define V4L2_CTRL_CLASS_FLASH           0x009c0000      /* Camera flash controls */
  132 #define V4L2_CTRL_CLASS_JPEG            0x009d0000      /* JPEG-compression controls */
  133 #define V4L2_CTRL_CLASS_IMAGE_SOURCE    0x009e0000      /* Image source controls */
  134 #define V4L2_CTRL_CLASS_IMAGE_PROC      0x009f0000      /* Image processing controls */
  135 #define V4L2_CTRL_CLASS_DV              0x00a00000      /* Digital Video controls */
  136 #define V4L2_CTRL_CLASS_FM_RX           0x00a10000      /* FM Receiver controls */
  137 #define V4L2_CTRL_CLASS_RF_TUNER        0x00a20000      /* RF tuner controls */
  138 #define V4L2_CTRL_CLASS_DETECT          0x00a30000      /* Detection controls */
  139 
  140 /* User-class control IDs */
  141 
  142 #define V4L2_CID_BASE                   (V4L2_CTRL_CLASS_USER | 0x900)
  143 #define V4L2_CID_USER_BASE              V4L2_CID_BASE
  144 #define V4L2_CID_USER_CLASS             (V4L2_CTRL_CLASS_USER | 1)
  145 #define V4L2_CID_BRIGHTNESS             (V4L2_CID_BASE+0)
  146 #define V4L2_CID_CONTRAST               (V4L2_CID_BASE+1)
  147 #define V4L2_CID_SATURATION             (V4L2_CID_BASE+2)
  148 #define V4L2_CID_HUE                    (V4L2_CID_BASE+3)
  149 #define V4L2_CID_AUDIO_VOLUME           (V4L2_CID_BASE+5)
  150 #define V4L2_CID_AUDIO_BALANCE          (V4L2_CID_BASE+6)
  151 #define V4L2_CID_AUDIO_BASS             (V4L2_CID_BASE+7)
  152 #define V4L2_CID_AUDIO_TREBLE           (V4L2_CID_BASE+8)
  153 #define V4L2_CID_AUDIO_MUTE             (V4L2_CID_BASE+9)
  154 #define V4L2_CID_AUDIO_LOUDNESS         (V4L2_CID_BASE+10)
  155 #define V4L2_CID_BLACK_LEVEL            (V4L2_CID_BASE+11) /* Deprecated */
  156 #define V4L2_CID_AUTO_WHITE_BALANCE     (V4L2_CID_BASE+12)
  157 #define V4L2_CID_DO_WHITE_BALANCE       (V4L2_CID_BASE+13)
  158 #define V4L2_CID_RED_BALANCE            (V4L2_CID_BASE+14)
  159 #define V4L2_CID_BLUE_BALANCE           (V4L2_CID_BASE+15)
  160 #define V4L2_CID_GAMMA                  (V4L2_CID_BASE+16)
  161 #define V4L2_CID_WHITENESS              (V4L2_CID_GAMMA) /* Deprecated */
  162 #define V4L2_CID_EXPOSURE               (V4L2_CID_BASE+17)
  163 #define V4L2_CID_AUTOGAIN               (V4L2_CID_BASE+18)
  164 #define V4L2_CID_GAIN                   (V4L2_CID_BASE+19)
  165 #define V4L2_CID_HFLIP                  (V4L2_CID_BASE+20)
  166 #define V4L2_CID_VFLIP                  (V4L2_CID_BASE+21)
  167 
  168 #define V4L2_CID_POWER_LINE_FREQUENCY   (V4L2_CID_BASE+24)
  169 enum v4l2_power_line_frequency {
  170         V4L2_CID_POWER_LINE_FREQUENCY_DISABLED  = 0,
  171         V4L2_CID_POWER_LINE_FREQUENCY_50HZ      = 1,
  172         V4L2_CID_POWER_LINE_FREQUENCY_60HZ      = 2,
  173         V4L2_CID_POWER_LINE_FREQUENCY_AUTO      = 3,
  174 };
  175 #define V4L2_CID_HUE_AUTO                       (V4L2_CID_BASE+25)
  176 #define V4L2_CID_WHITE_BALANCE_TEMPERATURE      (V4L2_CID_BASE+26)
  177 #define V4L2_CID_SHARPNESS                      (V4L2_CID_BASE+27)
  178 #define V4L2_CID_BACKLIGHT_COMPENSATION         (V4L2_CID_BASE+28)
  179 #define V4L2_CID_CHROMA_AGC                     (V4L2_CID_BASE+29)
  180 #define V4L2_CID_COLOR_KILLER                   (V4L2_CID_BASE+30)
  181 #define V4L2_CID_COLORFX                        (V4L2_CID_BASE+31)
  182 enum v4l2_colorfx {
  183         V4L2_COLORFX_NONE                       = 0,
  184         V4L2_COLORFX_BW                         = 1,
  185         V4L2_COLORFX_SEPIA                      = 2,
  186         V4L2_COLORFX_NEGATIVE                   = 3,
  187         V4L2_COLORFX_EMBOSS                     = 4,
  188         V4L2_COLORFX_SKETCH                     = 5,
  189         V4L2_COLORFX_SKY_BLUE                   = 6,
  190         V4L2_COLORFX_GRASS_GREEN                = 7,
  191         V4L2_COLORFX_SKIN_WHITEN                = 8,
  192         V4L2_COLORFX_VIVID                      = 9,
  193         V4L2_COLORFX_AQUA                       = 10,
  194         V4L2_COLORFX_ART_FREEZE                 = 11,
  195         V4L2_COLORFX_SILHOUETTE                 = 12,
  196         V4L2_COLORFX_SOLARIZATION               = 13,
  197         V4L2_COLORFX_ANTIQUE                    = 14,
  198         V4L2_COLORFX_SET_CBCR                   = 15,
  199 };
  200 #define V4L2_CID_AUTOBRIGHTNESS                 (V4L2_CID_BASE+32)
  201 #define V4L2_CID_BAND_STOP_FILTER               (V4L2_CID_BASE+33)
  202 
  203 #define V4L2_CID_ROTATE                         (V4L2_CID_BASE+34)
  204 #define V4L2_CID_BG_COLOR                       (V4L2_CID_BASE+35)
  205 
  206 #define V4L2_CID_CHROMA_GAIN                    (V4L2_CID_BASE+36)
  207 
  208 #define V4L2_CID_ILLUMINATORS_1                 (V4L2_CID_BASE+37)
  209 #define V4L2_CID_ILLUMINATORS_2                 (V4L2_CID_BASE+38)
  210 
  211 #define V4L2_CID_MIN_BUFFERS_FOR_CAPTURE        (V4L2_CID_BASE+39)
  212 #define V4L2_CID_MIN_BUFFERS_FOR_OUTPUT         (V4L2_CID_BASE+40)
  213 
  214 #define V4L2_CID_ALPHA_COMPONENT                (V4L2_CID_BASE+41)
  215 #define V4L2_CID_COLORFX_CBCR                   (V4L2_CID_BASE+42)
  216 
  217 /* last CID + 1 */
  218 #define V4L2_CID_LASTP1                         (V4L2_CID_BASE+43)
  219 
  220 /* USER-class private control IDs */
  221 
  222 /* The base for the meye driver controls. See linux/meye.h for the list
  223  * of controls. We reserve 16 controls for this driver. */
  224 #define V4L2_CID_USER_MEYE_BASE                 (V4L2_CID_USER_BASE + 0x1000)
  225 
  226 /* The base for the bttv driver controls.
  227  * We reserve 32 controls for this driver. */
  228 #define V4L2_CID_USER_BTTV_BASE                 (V4L2_CID_USER_BASE + 0x1010)
  229 
  230 
  231 /* The base for the s2255 driver controls.
  232  * We reserve 16 controls for this driver. */
  233 #define V4L2_CID_USER_S2255_BASE                (V4L2_CID_USER_BASE + 0x1030)
  234 
  235 /*
  236  * The base for the si476x driver controls. See include/media/drv-intf/si476x.h
  237  * for the list of controls. Total of 16 controls is reserved for this driver
  238  */
  239 #define V4L2_CID_USER_SI476X_BASE               (V4L2_CID_USER_BASE + 0x1040)
  240 
  241 /* The base for the TI VPE driver controls. Total of 16 controls is reserved for
  242  * this driver */
  243 #define V4L2_CID_USER_TI_VPE_BASE               (V4L2_CID_USER_BASE + 0x1050)
  244 
  245 /* The base for the saa7134 driver controls.
  246  * We reserve 16 controls for this driver. */
  247 #define V4L2_CID_USER_SAA7134_BASE              (V4L2_CID_USER_BASE + 0x1060)
  248 
  249 /* The base for the adv7180 driver controls.
  250  * We reserve 16 controls for this driver. */
  251 #define V4L2_CID_USER_ADV7180_BASE              (V4L2_CID_USER_BASE + 0x1070)
  252 
  253 /* The base for the tc358743 driver controls.
  254  * We reserve 16 controls for this driver. */
  255 #define V4L2_CID_USER_TC358743_BASE             (V4L2_CID_USER_BASE + 0x1080)
  256 
  257 /* MPEG-class control IDs */
  258 /* The MPEG controls are applicable to all codec controls
  259  * and the 'MPEG' part of the define is historical */
  260 
  261 #define V4L2_CID_MPEG_BASE                      (V4L2_CTRL_CLASS_MPEG | 0x900)
  262 #define V4L2_CID_MPEG_CLASS                     (V4L2_CTRL_CLASS_MPEG | 1)
  263 
  264 /*  MPEG streams, specific to multiplexed streams */
  265 #define V4L2_CID_MPEG_STREAM_TYPE               (V4L2_CID_MPEG_BASE+0)
  266 enum v4l2_mpeg_stream_type {
  267         V4L2_MPEG_STREAM_TYPE_MPEG2_PS   = 0, /* MPEG-2 program stream */
  268         V4L2_MPEG_STREAM_TYPE_MPEG2_TS   = 1, /* MPEG-2 transport stream */
  269         V4L2_MPEG_STREAM_TYPE_MPEG1_SS   = 2, /* MPEG-1 system stream */
  270         V4L2_MPEG_STREAM_TYPE_MPEG2_DVD  = 3, /* MPEG-2 DVD-compatible stream */
  271         V4L2_MPEG_STREAM_TYPE_MPEG1_VCD  = 4, /* MPEG-1 VCD-compatible stream */
  272         V4L2_MPEG_STREAM_TYPE_MPEG2_SVCD = 5, /* MPEG-2 SVCD-compatible stream */
  273 };
  274 #define V4L2_CID_MPEG_STREAM_PID_PMT            (V4L2_CID_MPEG_BASE+1)
  275 #define V4L2_CID_MPEG_STREAM_PID_AUDIO          (V4L2_CID_MPEG_BASE+2)
  276 #define V4L2_CID_MPEG_STREAM_PID_VIDEO          (V4L2_CID_MPEG_BASE+3)
  277 #define V4L2_CID_MPEG_STREAM_PID_PCR            (V4L2_CID_MPEG_BASE+4)
  278 #define V4L2_CID_MPEG_STREAM_PES_ID_AUDIO       (V4L2_CID_MPEG_BASE+5)
  279 #define V4L2_CID_MPEG_STREAM_PES_ID_VIDEO       (V4L2_CID_MPEG_BASE+6)
  280 #define V4L2_CID_MPEG_STREAM_VBI_FMT            (V4L2_CID_MPEG_BASE+7)
  281 enum v4l2_mpeg_stream_vbi_fmt {
  282         V4L2_MPEG_STREAM_VBI_FMT_NONE = 0,  /* No VBI in the MPEG stream */
  283         V4L2_MPEG_STREAM_VBI_FMT_IVTV = 1,  /* VBI in private packets, IVTV format */
  284 };
  285 
  286 /*  MPEG audio controls specific to multiplexed streams  */
  287 #define V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ       (V4L2_CID_MPEG_BASE+100)
  288 enum v4l2_mpeg_audio_sampling_freq {
  289         V4L2_MPEG_AUDIO_SAMPLING_FREQ_44100 = 0,
  290         V4L2_MPEG_AUDIO_SAMPLING_FREQ_48000 = 1,
  291         V4L2_MPEG_AUDIO_SAMPLING_FREQ_32000 = 2,
  292 };
  293 #define V4L2_CID_MPEG_AUDIO_ENCODING            (V4L2_CID_MPEG_BASE+101)
  294 enum v4l2_mpeg_audio_encoding {
  295         V4L2_MPEG_AUDIO_ENCODING_LAYER_1 = 0,
  296         V4L2_MPEG_AUDIO_ENCODING_LAYER_2 = 1,
  297         V4L2_MPEG_AUDIO_ENCODING_LAYER_3 = 2,
  298         V4L2_MPEG_AUDIO_ENCODING_AAC     = 3,
  299         V4L2_MPEG_AUDIO_ENCODING_AC3     = 4,
  300 };
  301 #define V4L2_CID_MPEG_AUDIO_L1_BITRATE          (V4L2_CID_MPEG_BASE+102)
  302 enum v4l2_mpeg_audio_l1_bitrate {
  303         V4L2_MPEG_AUDIO_L1_BITRATE_32K  = 0,
  304         V4L2_MPEG_AUDIO_L1_BITRATE_64K  = 1,
  305         V4L2_MPEG_AUDIO_L1_BITRATE_96K  = 2,
  306         V4L2_MPEG_AUDIO_L1_BITRATE_128K = 3,
  307         V4L2_MPEG_AUDIO_L1_BITRATE_160K = 4,
  308         V4L2_MPEG_AUDIO_L1_BITRATE_192K = 5,
  309         V4L2_MPEG_AUDIO_L1_BITRATE_224K = 6,
  310         V4L2_MPEG_AUDIO_L1_BITRATE_256K = 7,
  311         V4L2_MPEG_AUDIO_L1_BITRATE_288K = 8,
  312         V4L2_MPEG_AUDIO_L1_BITRATE_320K = 9,
  313         V4L2_MPEG_AUDIO_L1_BITRATE_352K = 10,
  314         V4L2_MPEG_AUDIO_L1_BITRATE_384K = 11,
  315         V4L2_MPEG_AUDIO_L1_BITRATE_416K = 12,
  316         V4L2_MPEG_AUDIO_L1_BITRATE_448K = 13,
  317 };
  318 #define V4L2_CID_MPEG_AUDIO_L2_BITRATE          (V4L2_CID_MPEG_BASE+103)
  319 enum v4l2_mpeg_audio_l2_bitrate {
  320         V4L2_MPEG_AUDIO_L2_BITRATE_32K  = 0,
  321         V4L2_MPEG_AUDIO_L2_BITRATE_48K  = 1,
  322         V4L2_MPEG_AUDIO_L2_BITRATE_56K  = 2,
  323         V4L2_MPEG_AUDIO_L2_BITRATE_64K  = 3,
  324         V4L2_MPEG_AUDIO_L2_BITRATE_80K  = 4,
  325         V4L2_MPEG_AUDIO_L2_BITRATE_96K  = 5,
  326         V4L2_MPEG_AUDIO_L2_BITRATE_112K = 6,
  327         V4L2_MPEG_AUDIO_L2_BITRATE_128K = 7,
  328         V4L2_MPEG_AUDIO_L2_BITRATE_160K = 8,
  329         V4L2_MPEG_AUDIO_L2_BITRATE_192K = 9,
  330         V4L2_MPEG_AUDIO_L2_BITRATE_224K = 10,
  331         V4L2_MPEG_AUDIO_L2_BITRATE_256K = 11,
  332         V4L2_MPEG_AUDIO_L2_BITRATE_320K = 12,
  333         V4L2_MPEG_AUDIO_L2_BITRATE_384K = 13,
  334 };
  335 #define V4L2_CID_MPEG_AUDIO_L3_BITRATE          (V4L2_CID_MPEG_BASE+104)
  336 enum v4l2_mpeg_audio_l3_bitrate {
  337         V4L2_MPEG_AUDIO_L3_BITRATE_32K  = 0,
  338         V4L2_MPEG_AUDIO_L3_BITRATE_40K  = 1,
  339         V4L2_MPEG_AUDIO_L3_BITRATE_48K  = 2,
  340         V4L2_MPEG_AUDIO_L3_BITRATE_56K  = 3,
  341         V4L2_MPEG_AUDIO_L3_BITRATE_64K  = 4,
  342         V4L2_MPEG_AUDIO_L3_BITRATE_80K  = 5,
  343         V4L2_MPEG_AUDIO_L3_BITRATE_96K  = 6,
  344         V4L2_MPEG_AUDIO_L3_BITRATE_112K = 7,
  345         V4L2_MPEG_AUDIO_L3_BITRATE_128K = 8,
  346         V4L2_MPEG_AUDIO_L3_BITRATE_160K = 9,
  347         V4L2_MPEG_AUDIO_L3_BITRATE_192K = 10,
  348         V4L2_MPEG_AUDIO_L3_BITRATE_224K = 11,
  349         V4L2_MPEG_AUDIO_L3_BITRATE_256K = 12,
  350         V4L2_MPEG_AUDIO_L3_BITRATE_320K = 13,
  351 };
  352 #define V4L2_CID_MPEG_AUDIO_MODE                (V4L2_CID_MPEG_BASE+105)
  353 enum v4l2_mpeg_audio_mode {
  354         V4L2_MPEG_AUDIO_MODE_STEREO       = 0,
  355         V4L2_MPEG_AUDIO_MODE_JOINT_STEREO = 1,
  356         V4L2_MPEG_AUDIO_MODE_DUAL         = 2,
  357         V4L2_MPEG_AUDIO_MODE_MONO         = 3,
  358 };
  359 #define V4L2_CID_MPEG_AUDIO_MODE_EXTENSION      (V4L2_CID_MPEG_BASE+106)
  360 enum v4l2_mpeg_audio_mode_extension {
  361         V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_4  = 0,
  362         V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_8  = 1,
  363         V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_12 = 2,
  364         V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_16 = 3,
  365 };
  366 #define V4L2_CID_MPEG_AUDIO_EMPHASIS            (V4L2_CID_MPEG_BASE+107)
  367 enum v4l2_mpeg_audio_emphasis {
  368         V4L2_MPEG_AUDIO_EMPHASIS_NONE         = 0,
  369         V4L2_MPEG_AUDIO_EMPHASIS_50_DIV_15_uS = 1,
  370         V4L2_MPEG_AUDIO_EMPHASIS_CCITT_J17    = 2,
  371 };
  372 #define V4L2_CID_MPEG_AUDIO_CRC                 (V4L2_CID_MPEG_BASE+108)
  373 enum v4l2_mpeg_audio_crc {
  374         V4L2_MPEG_AUDIO_CRC_NONE  = 0,
  375         V4L2_MPEG_AUDIO_CRC_CRC16 = 1,
  376 };
  377 #define V4L2_CID_MPEG_AUDIO_MUTE                (V4L2_CID_MPEG_BASE+109)
  378 #define V4L2_CID_MPEG_AUDIO_AAC_BITRATE         (V4L2_CID_MPEG_BASE+110)
  379 #define V4L2_CID_MPEG_AUDIO_AC3_BITRATE         (V4L2_CID_MPEG_BASE+111)
  380 enum v4l2_mpeg_audio_ac3_bitrate {
  381         V4L2_MPEG_AUDIO_AC3_BITRATE_32K  = 0,
  382         V4L2_MPEG_AUDIO_AC3_BITRATE_40K  = 1,
  383         V4L2_MPEG_AUDIO_AC3_BITRATE_48K  = 2,
  384         V4L2_MPEG_AUDIO_AC3_BITRATE_56K  = 3,
  385         V4L2_MPEG_AUDIO_AC3_BITRATE_64K  = 4,
  386         V4L2_MPEG_AUDIO_AC3_BITRATE_80K  = 5,
  387         V4L2_MPEG_AUDIO_AC3_BITRATE_96K  = 6,
  388         V4L2_MPEG_AUDIO_AC3_BITRATE_112K = 7,
  389         V4L2_MPEG_AUDIO_AC3_BITRATE_128K = 8,
  390         V4L2_MPEG_AUDIO_AC3_BITRATE_160K = 9,
  391         V4L2_MPEG_AUDIO_AC3_BITRATE_192K = 10,
  392         V4L2_MPEG_AUDIO_AC3_BITRATE_224K = 11,
  393         V4L2_MPEG_AUDIO_AC3_BITRATE_256K = 12,
  394         V4L2_MPEG_AUDIO_AC3_BITRATE_320K = 13,
  395         V4L2_MPEG_AUDIO_AC3_BITRATE_384K = 14,
  396         V4L2_MPEG_AUDIO_AC3_BITRATE_448K = 15,
  397         V4L2_MPEG_AUDIO_AC3_BITRATE_512K = 16,
  398         V4L2_MPEG_AUDIO_AC3_BITRATE_576K = 17,
  399         V4L2_MPEG_AUDIO_AC3_BITRATE_640K = 18,
  400 };
  401 #define V4L2_CID_MPEG_AUDIO_DEC_PLAYBACK        (V4L2_CID_MPEG_BASE+112)
  402 enum v4l2_mpeg_audio_dec_playback {
  403         V4L2_MPEG_AUDIO_DEC_PLAYBACK_AUTO           = 0,
  404         V4L2_MPEG_AUDIO_DEC_PLAYBACK_STEREO         = 1,
  405         V4L2_MPEG_AUDIO_DEC_PLAYBACK_LEFT           = 2,
  406         V4L2_MPEG_AUDIO_DEC_PLAYBACK_RIGHT          = 3,
  407         V4L2_MPEG_AUDIO_DEC_PLAYBACK_MONO           = 4,
  408         V4L2_MPEG_AUDIO_DEC_PLAYBACK_SWAPPED_STEREO = 5,
  409 };
  410 #define V4L2_CID_MPEG_AUDIO_DEC_MULTILINGUAL_PLAYBACK (V4L2_CID_MPEG_BASE+113)
  411 
  412 /*  MPEG video controls specific to multiplexed streams */
  413 #define V4L2_CID_MPEG_VIDEO_ENCODING            (V4L2_CID_MPEG_BASE+200)
  414 enum v4l2_mpeg_video_encoding {
  415         V4L2_MPEG_VIDEO_ENCODING_MPEG_1     = 0,
  416         V4L2_MPEG_VIDEO_ENCODING_MPEG_2     = 1,
  417         V4L2_MPEG_VIDEO_ENCODING_MPEG_4_AVC = 2,
  418 };
  419 #define V4L2_CID_MPEG_VIDEO_ASPECT              (V4L2_CID_MPEG_BASE+201)
  420 enum v4l2_mpeg_video_aspect {
  421         V4L2_MPEG_VIDEO_ASPECT_1x1     = 0,
  422         V4L2_MPEG_VIDEO_ASPECT_4x3     = 1,
  423         V4L2_MPEG_VIDEO_ASPECT_16x9    = 2,
  424         V4L2_MPEG_VIDEO_ASPECT_221x100 = 3,
  425 };
  426 #define V4L2_CID_MPEG_VIDEO_B_FRAMES            (V4L2_CID_MPEG_BASE+202)
  427 #define V4L2_CID_MPEG_VIDEO_GOP_SIZE            (V4L2_CID_MPEG_BASE+203)
  428 #define V4L2_CID_MPEG_VIDEO_GOP_CLOSURE         (V4L2_CID_MPEG_BASE+204)
  429 #define V4L2_CID_MPEG_VIDEO_PULLDOWN            (V4L2_CID_MPEG_BASE+205)
  430 #define V4L2_CID_MPEG_VIDEO_BITRATE_MODE        (V4L2_CID_MPEG_BASE+206)
  431 enum v4l2_mpeg_video_bitrate_mode {
  432         V4L2_MPEG_VIDEO_BITRATE_MODE_VBR = 0,
  433         V4L2_MPEG_VIDEO_BITRATE_MODE_CBR = 1,
  434 };
  435 #define V4L2_CID_MPEG_VIDEO_BITRATE             (V4L2_CID_MPEG_BASE+207)
  436 #define V4L2_CID_MPEG_VIDEO_BITRATE_PEAK        (V4L2_CID_MPEG_BASE+208)
  437 #define V4L2_CID_MPEG_VIDEO_TEMPORAL_DECIMATION (V4L2_CID_MPEG_BASE+209)
  438 #define V4L2_CID_MPEG_VIDEO_MUTE                (V4L2_CID_MPEG_BASE+210)
  439 #define V4L2_CID_MPEG_VIDEO_MUTE_YUV            (V4L2_CID_MPEG_BASE+211)
  440 #define V4L2_CID_MPEG_VIDEO_DECODER_SLICE_INTERFACE             (V4L2_CID_MPEG_BASE+212)
  441 #define V4L2_CID_MPEG_VIDEO_DECODER_MPEG4_DEBLOCK_FILTER        (V4L2_CID_MPEG_BASE+213)
  442 #define V4L2_CID_MPEG_VIDEO_CYCLIC_INTRA_REFRESH_MB             (V4L2_CID_MPEG_BASE+214)
  443 #define V4L2_CID_MPEG_VIDEO_FRAME_RC_ENABLE                     (V4L2_CID_MPEG_BASE+215)
  444 #define V4L2_CID_MPEG_VIDEO_HEADER_MODE                         (V4L2_CID_MPEG_BASE+216)
  445 enum v4l2_mpeg_video_header_mode {
  446         V4L2_MPEG_VIDEO_HEADER_MODE_SEPARATE                    = 0,
  447         V4L2_MPEG_VIDEO_HEADER_MODE_JOINED_WITH_1ST_FRAME       = 1,
  448 
  449 };
  450 #define V4L2_CID_MPEG_VIDEO_MAX_REF_PIC                 (V4L2_CID_MPEG_BASE+217)
  451 #define V4L2_CID_MPEG_VIDEO_MB_RC_ENABLE                (V4L2_CID_MPEG_BASE+218)
  452 #define V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_BYTES       (V4L2_CID_MPEG_BASE+219)
  453 #define V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_MB          (V4L2_CID_MPEG_BASE+220)
  454 #define V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE            (V4L2_CID_MPEG_BASE+221)
  455 enum v4l2_mpeg_video_multi_slice_mode {
  456         V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_SINGLE         = 0,
  457         V4L2_MPEG_VIDEO_MULTI_SICE_MODE_MAX_MB          = 1,
  458         V4L2_MPEG_VIDEO_MULTI_SICE_MODE_MAX_BYTES       = 2,
  459 };
  460 #define V4L2_CID_MPEG_VIDEO_VBV_SIZE                    (V4L2_CID_MPEG_BASE+222)
  461 #define V4L2_CID_MPEG_VIDEO_DEC_PTS                     (V4L2_CID_MPEG_BASE+223)
  462 #define V4L2_CID_MPEG_VIDEO_DEC_FRAME                   (V4L2_CID_MPEG_BASE+224)
  463 #define V4L2_CID_MPEG_VIDEO_VBV_DELAY                   (V4L2_CID_MPEG_BASE+225)
  464 #define V4L2_CID_MPEG_VIDEO_REPEAT_SEQ_HEADER           (V4L2_CID_MPEG_BASE+226)
  465 #define V4L2_CID_MPEG_VIDEO_MV_H_SEARCH_RANGE           (V4L2_CID_MPEG_BASE+227)
  466 #define V4L2_CID_MPEG_VIDEO_MV_V_SEARCH_RANGE           (V4L2_CID_MPEG_BASE+228)
  467 #define V4L2_CID_MPEG_VIDEO_FORCE_KEY_FRAME             (V4L2_CID_MPEG_BASE+229)
  468 
  469 #define V4L2_CID_MPEG_VIDEO_H263_I_FRAME_QP             (V4L2_CID_MPEG_BASE+300)
  470 #define V4L2_CID_MPEG_VIDEO_H263_P_FRAME_QP             (V4L2_CID_MPEG_BASE+301)
  471 #define V4L2_CID_MPEG_VIDEO_H263_B_FRAME_QP             (V4L2_CID_MPEG_BASE+302)
  472 #define V4L2_CID_MPEG_VIDEO_H263_MIN_QP                 (V4L2_CID_MPEG_BASE+303)
  473 #define V4L2_CID_MPEG_VIDEO_H263_MAX_QP                 (V4L2_CID_MPEG_BASE+304)
  474 #define V4L2_CID_MPEG_VIDEO_H264_I_FRAME_QP             (V4L2_CID_MPEG_BASE+350)
  475 #define V4L2_CID_MPEG_VIDEO_H264_P_FRAME_QP             (V4L2_CID_MPEG_BASE+351)
  476 #define V4L2_CID_MPEG_VIDEO_H264_B_FRAME_QP             (V4L2_CID_MPEG_BASE+352)
  477 #define V4L2_CID_MPEG_VIDEO_H264_MIN_QP                 (V4L2_CID_MPEG_BASE+353)
  478 #define V4L2_CID_MPEG_VIDEO_H264_MAX_QP                 (V4L2_CID_MPEG_BASE+354)
  479 #define V4L2_CID_MPEG_VIDEO_H264_8X8_TRANSFORM          (V4L2_CID_MPEG_BASE+355)
  480 #define V4L2_CID_MPEG_VIDEO_H264_CPB_SIZE               (V4L2_CID_MPEG_BASE+356)
  481 #define V4L2_CID_MPEG_VIDEO_H264_ENTROPY_MODE           (V4L2_CID_MPEG_BASE+357)
  482 enum v4l2_mpeg_video_h264_entropy_mode {
  483         V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CAVLC = 0,
  484         V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CABAC = 1,
  485 };
  486 #define V4L2_CID_MPEG_VIDEO_H264_I_PERIOD               (V4L2_CID_MPEG_BASE+358)
  487 #define V4L2_CID_MPEG_VIDEO_H264_LEVEL                  (V4L2_CID_MPEG_BASE+359)
  488 enum v4l2_mpeg_video_h264_level {
  489         V4L2_MPEG_VIDEO_H264_LEVEL_1_0  = 0,
  490         V4L2_MPEG_VIDEO_H264_LEVEL_1B   = 1,
  491         V4L2_MPEG_VIDEO_H264_LEVEL_1_1  = 2,
  492         V4L2_MPEG_VIDEO_H264_LEVEL_1_2  = 3,
  493         V4L2_MPEG_VIDEO_H264_LEVEL_1_3  = 4,
  494         V4L2_MPEG_VIDEO_H264_LEVEL_2_0  = 5,
  495         V4L2_MPEG_VIDEO_H264_LEVEL_2_1  = 6,
  496         V4L2_MPEG_VIDEO_H264_LEVEL_2_2  = 7,
  497         V4L2_MPEG_VIDEO_H264_LEVEL_3_0  = 8,
  498         V4L2_MPEG_VIDEO_H264_LEVEL_3_1  = 9,
  499         V4L2_MPEG_VIDEO_H264_LEVEL_3_2  = 10,
  500         V4L2_MPEG_VIDEO_H264_LEVEL_4_0  = 11,
  501         V4L2_MPEG_VIDEO_H264_LEVEL_4_1  = 12,
  502         V4L2_MPEG_VIDEO_H264_LEVEL_4_2  = 13,
  503         V4L2_MPEG_VIDEO_H264_LEVEL_5_0  = 14,
  504         V4L2_MPEG_VIDEO_H264_LEVEL_5_1  = 15,
  505 };
  506 #define V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_ALPHA      (V4L2_CID_MPEG_BASE+360)
  507 #define V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_BETA       (V4L2_CID_MPEG_BASE+361)
  508 #define V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_MODE       (V4L2_CID_MPEG_BASE+362)
  509 enum v4l2_mpeg_video_h264_loop_filter_mode {
  510         V4L2_MPEG_VIDEO_H264_LOOP_FILTER_MODE_ENABLED                           = 0,
  511         V4L2_MPEG_VIDEO_H264_LOOP_FILTER_MODE_DISABLED                          = 1,
  512         V4L2_MPEG_VIDEO_H264_LOOP_FILTER_MODE_DISABLED_AT_SLICE_BOUNDARY        = 2,
  513 };
  514 #define V4L2_CID_MPEG_VIDEO_H264_PROFILE                (V4L2_CID_MPEG_BASE+363)
  515 enum v4l2_mpeg_video_h264_profile {
  516         V4L2_MPEG_VIDEO_H264_PROFILE_BASELINE                   = 0,
  517         V4L2_MPEG_VIDEO_H264_PROFILE_CONSTRAINED_BASELINE       = 1,
  518         V4L2_MPEG_VIDEO_H264_PROFILE_MAIN                       = 2,
  519         V4L2_MPEG_VIDEO_H264_PROFILE_EXTENDED                   = 3,
  520         V4L2_MPEG_VIDEO_H264_PROFILE_HIGH                       = 4,
  521         V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_10                    = 5,
  522         V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_422                   = 6,
  523         V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_444_PREDICTIVE        = 7,
  524         V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_10_INTRA              = 8,
  525         V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_422_INTRA             = 9,
  526         V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_444_INTRA             = 10,
  527         V4L2_MPEG_VIDEO_H264_PROFILE_CAVLC_444_INTRA            = 11,
  528         V4L2_MPEG_VIDEO_H264_PROFILE_SCALABLE_BASELINE          = 12,
  529         V4L2_MPEG_VIDEO_H264_PROFILE_SCALABLE_HIGH              = 13,
  530         V4L2_MPEG_VIDEO_H264_PROFILE_SCALABLE_HIGH_INTRA        = 14,
  531         V4L2_MPEG_VIDEO_H264_PROFILE_STEREO_HIGH                = 15,
  532         V4L2_MPEG_VIDEO_H264_PROFILE_MULTIVIEW_HIGH             = 16,
  533 };
  534 #define V4L2_CID_MPEG_VIDEO_H264_VUI_EXT_SAR_HEIGHT     (V4L2_CID_MPEG_BASE+364)
  535 #define V4L2_CID_MPEG_VIDEO_H264_VUI_EXT_SAR_WIDTH      (V4L2_CID_MPEG_BASE+365)
  536 #define V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_ENABLE         (V4L2_CID_MPEG_BASE+366)
  537 #define V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_IDC            (V4L2_CID_MPEG_BASE+367)
  538 enum v4l2_mpeg_video_h264_vui_sar_idc {
  539         V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_UNSPECIFIED    = 0,
  540         V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_1x1            = 1,
  541         V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_12x11          = 2,
  542         V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_10x11          = 3,
  543         V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_16x11          = 4,
  544         V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_40x33          = 5,
  545         V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_24x11          = 6,
  546         V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_20x11          = 7,
  547         V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_32x11          = 8,
  548         V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_80x33          = 9,
  549         V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_18x11          = 10,
  550         V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_15x11          = 11,
  551         V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_64x33          = 12,
  552         V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_160x99         = 13,
  553         V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_4x3            = 14,
  554         V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_3x2            = 15,
  555         V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_2x1            = 16,
  556         V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_EXTENDED       = 17,
  557 };
  558 #define V4L2_CID_MPEG_VIDEO_H264_SEI_FRAME_PACKING              (V4L2_CID_MPEG_BASE+368)
  559 #define V4L2_CID_MPEG_VIDEO_H264_SEI_FP_CURRENT_FRAME_0         (V4L2_CID_MPEG_BASE+369)
  560 #define V4L2_CID_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE        (V4L2_CID_MPEG_BASE+370)
  561 enum v4l2_mpeg_video_h264_sei_fp_arrangement_type {
  562         V4L2_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE_CHECKERBOARD       = 0,
  563         V4L2_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE_COLUMN             = 1,
  564         V4L2_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE_ROW                = 2,
  565         V4L2_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE_SIDE_BY_SIDE       = 3,
  566         V4L2_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE_TOP_BOTTOM         = 4,
  567         V4L2_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE_TEMPORAL           = 5,
  568 };
  569 #define V4L2_CID_MPEG_VIDEO_H264_FMO                    (V4L2_CID_MPEG_BASE+371)
  570 #define V4L2_CID_MPEG_VIDEO_H264_FMO_MAP_TYPE           (V4L2_CID_MPEG_BASE+372)
  571 enum v4l2_mpeg_video_h264_fmo_map_type {
  572         V4L2_MPEG_VIDEO_H264_FMO_MAP_TYPE_INTERLEAVED_SLICES            = 0,
  573         V4L2_MPEG_VIDEO_H264_FMO_MAP_TYPE_SCATTERED_SLICES              = 1,
  574         V4L2_MPEG_VIDEO_H264_FMO_MAP_TYPE_FOREGROUND_WITH_LEFT_OVER     = 2,
  575         V4L2_MPEG_VIDEO_H264_FMO_MAP_TYPE_BOX_OUT                       = 3,
  576         V4L2_MPEG_VIDEO_H264_FMO_MAP_TYPE_RASTER_SCAN                   = 4,
  577         V4L2_MPEG_VIDEO_H264_FMO_MAP_TYPE_WIPE_SCAN                     = 5,
  578         V4L2_MPEG_VIDEO_H264_FMO_MAP_TYPE_EXPLICIT                      = 6,
  579 };
  580 #define V4L2_CID_MPEG_VIDEO_H264_FMO_SLICE_GROUP        (V4L2_CID_MPEG_BASE+373)
  581 #define V4L2_CID_MPEG_VIDEO_H264_FMO_CHANGE_DIRECTION   (V4L2_CID_MPEG_BASE+374)
  582 enum v4l2_mpeg_video_h264_fmo_change_dir {
  583         V4L2_MPEG_VIDEO_H264_FMO_CHANGE_DIR_RIGHT       = 0,
  584         V4L2_MPEG_VIDEO_H264_FMO_CHANGE_DIR_LEFT        = 1,
  585 };
  586 #define V4L2_CID_MPEG_VIDEO_H264_FMO_CHANGE_RATE        (V4L2_CID_MPEG_BASE+375)
  587 #define V4L2_CID_MPEG_VIDEO_H264_FMO_RUN_LENGTH         (V4L2_CID_MPEG_BASE+376)
  588 #define V4L2_CID_MPEG_VIDEO_H264_ASO                    (V4L2_CID_MPEG_BASE+377)
  589 #define V4L2_CID_MPEG_VIDEO_H264_ASO_SLICE_ORDER        (V4L2_CID_MPEG_BASE+378)
  590 #define V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING            (V4L2_CID_MPEG_BASE+379)
  591 #define V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_TYPE       (V4L2_CID_MPEG_BASE+380)
  592 enum v4l2_mpeg_video_h264_hierarchical_coding_type {
  593         V4L2_MPEG_VIDEO_H264_HIERARCHICAL_CODING_B      = 0,
  594         V4L2_MPEG_VIDEO_H264_HIERARCHICAL_CODING_P      = 1,
  595 };
  596 #define V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_LAYER      (V4L2_CID_MPEG_BASE+381)
  597 #define V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_LAYER_QP   (V4L2_CID_MPEG_BASE+382)
  598 #define V4L2_CID_MPEG_VIDEO_MPEG4_I_FRAME_QP    (V4L2_CID_MPEG_BASE+400)
  599 #define V4L2_CID_MPEG_VIDEO_MPEG4_P_FRAME_QP    (V4L2_CID_MPEG_BASE+401)
  600 #define V4L2_CID_MPEG_VIDEO_MPEG4_B_FRAME_QP    (V4L2_CID_MPEG_BASE+402)
  601 #define V4L2_CID_MPEG_VIDEO_MPEG4_MIN_QP        (V4L2_CID_MPEG_BASE+403)
  602 #define V4L2_CID_MPEG_VIDEO_MPEG4_MAX_QP        (V4L2_CID_MPEG_BASE+404)
  603 #define V4L2_CID_MPEG_VIDEO_MPEG4_LEVEL         (V4L2_CID_MPEG_BASE+405)
  604 enum v4l2_mpeg_video_mpeg4_level {
  605         V4L2_MPEG_VIDEO_MPEG4_LEVEL_0   = 0,
  606         V4L2_MPEG_VIDEO_MPEG4_LEVEL_0B  = 1,
  607         V4L2_MPEG_VIDEO_MPEG4_LEVEL_1   = 2,
  608         V4L2_MPEG_VIDEO_MPEG4_LEVEL_2   = 3,
  609         V4L2_MPEG_VIDEO_MPEG4_LEVEL_3   = 4,
  610         V4L2_MPEG_VIDEO_MPEG4_LEVEL_3B  = 5,
  611         V4L2_MPEG_VIDEO_MPEG4_LEVEL_4   = 6,
  612         V4L2_MPEG_VIDEO_MPEG4_LEVEL_5   = 7,
  613 };
  614 #define V4L2_CID_MPEG_VIDEO_MPEG4_PROFILE       (V4L2_CID_MPEG_BASE+406)
  615 enum v4l2_mpeg_video_mpeg4_profile {
  616         V4L2_MPEG_VIDEO_MPEG4_PROFILE_SIMPLE                            = 0,
  617         V4L2_MPEG_VIDEO_MPEG4_PROFILE_ADVANCED_SIMPLE                   = 1,
  618         V4L2_MPEG_VIDEO_MPEG4_PROFILE_CORE                              = 2,
  619         V4L2_MPEG_VIDEO_MPEG4_PROFILE_SIMPLE_SCALABLE                   = 3,
  620         V4L2_MPEG_VIDEO_MPEG4_PROFILE_ADVANCED_CODING_EFFICIENCY        = 4,
  621 };
  622 #define V4L2_CID_MPEG_VIDEO_MPEG4_QPEL          (V4L2_CID_MPEG_BASE+407)
  623 
  624 /*  Control IDs for VP8 streams
  625  *  Although VP8 is not part of MPEG we add these controls to the MPEG class
  626  *  as that class is already handling other video compression standards
  627  */
  628 #define V4L2_CID_MPEG_VIDEO_VPX_NUM_PARTITIONS          (V4L2_CID_MPEG_BASE+500)
  629 enum v4l2_vp8_num_partitions {
  630         V4L2_CID_MPEG_VIDEO_VPX_1_PARTITION     = 0,
  631         V4L2_CID_MPEG_VIDEO_VPX_2_PARTITIONS    = 1,
  632         V4L2_CID_MPEG_VIDEO_VPX_4_PARTITIONS    = 2,
  633         V4L2_CID_MPEG_VIDEO_VPX_8_PARTITIONS    = 3,
  634 };
  635 #define V4L2_CID_MPEG_VIDEO_VPX_IMD_DISABLE_4X4         (V4L2_CID_MPEG_BASE+501)
  636 #define V4L2_CID_MPEG_VIDEO_VPX_NUM_REF_FRAMES          (V4L2_CID_MPEG_BASE+502)
  637 enum v4l2_vp8_num_ref_frames {
  638         V4L2_CID_MPEG_VIDEO_VPX_1_REF_FRAME     = 0,
  639         V4L2_CID_MPEG_VIDEO_VPX_2_REF_FRAME     = 1,
  640         V4L2_CID_MPEG_VIDEO_VPX_3_REF_FRAME     = 2,
  641 };
  642 #define V4L2_CID_MPEG_VIDEO_VPX_FILTER_LEVEL            (V4L2_CID_MPEG_BASE+503)
  643 #define V4L2_CID_MPEG_VIDEO_VPX_FILTER_SHARPNESS        (V4L2_CID_MPEG_BASE+504)
  644 #define V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_REF_PERIOD (V4L2_CID_MPEG_BASE+505)
  645 #define V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_SEL        (V4L2_CID_MPEG_BASE+506)
  646 enum v4l2_vp8_golden_frame_sel {
  647         V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_USE_PREV           = 0,
  648         V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_USE_REF_PERIOD     = 1,
  649 };
  650 #define V4L2_CID_MPEG_VIDEO_VPX_MIN_QP                  (V4L2_CID_MPEG_BASE+507)
  651 #define V4L2_CID_MPEG_VIDEO_VPX_MAX_QP                  (V4L2_CID_MPEG_BASE+508)
  652 #define V4L2_CID_MPEG_VIDEO_VPX_I_FRAME_QP              (V4L2_CID_MPEG_BASE+509)
  653 #define V4L2_CID_MPEG_VIDEO_VPX_P_FRAME_QP              (V4L2_CID_MPEG_BASE+510)
  654 #define V4L2_CID_MPEG_VIDEO_VPX_PROFILE                 (V4L2_CID_MPEG_BASE+511)
  655 
  656 /*  MPEG-class control IDs specific to the CX2341x driver as defined by V4L2 */
  657 #define V4L2_CID_MPEG_CX2341X_BASE                              (V4L2_CTRL_CLASS_MPEG | 0x1000)
  658 #define V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE         (V4L2_CID_MPEG_CX2341X_BASE+0)
  659 enum v4l2_mpeg_cx2341x_video_spatial_filter_mode {
  660         V4L2_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE_MANUAL = 0,
  661         V4L2_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE_AUTO   = 1,
  662 };
  663 #define V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER              (V4L2_CID_MPEG_CX2341X_BASE+1)
  664 #define V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE    (V4L2_CID_MPEG_CX2341X_BASE+2)
  665 enum v4l2_mpeg_cx2341x_video_luma_spatial_filter_type {
  666         V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_OFF                  = 0,
  667         V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_1D_HOR               = 1,
  668         V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_1D_VERT              = 2,
  669         V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_2D_HV_SEPARABLE      = 3,
  670         V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_2D_SYM_NON_SEPARABLE = 4,
  671 };
  672 #define V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE  (V4L2_CID_MPEG_CX2341X_BASE+3)
  673 enum v4l2_mpeg_cx2341x_video_chroma_spatial_filter_type {
  674         V4L2_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE_OFF    = 0,
  675         V4L2_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE_1D_HOR = 1,
  676 };
  677 #define V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE        (V4L2_CID_MPEG_CX2341X_BASE+4)
  678 enum v4l2_mpeg_cx2341x_video_temporal_filter_mode {
  679         V4L2_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE_MANUAL = 0,
  680         V4L2_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE_AUTO   = 1,
  681 };
  682 #define V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER             (V4L2_CID_MPEG_CX2341X_BASE+5)
  683 #define V4L2_CID_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE          (V4L2_CID_MPEG_CX2341X_BASE+6)
  684 enum v4l2_mpeg_cx2341x_video_median_filter_type {
  685         V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_OFF      = 0,
  686         V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_HOR      = 1,
  687         V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_VERT     = 2,
  688         V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_HOR_VERT = 3,
  689         V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_DIAG     = 4,
  690 };
  691 #define V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_BOTTOM   (V4L2_CID_MPEG_CX2341X_BASE+7)
  692 #define V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_TOP      (V4L2_CID_MPEG_CX2341X_BASE+8)
  693 #define V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_BOTTOM (V4L2_CID_MPEG_CX2341X_BASE+9)
  694 #define V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_TOP    (V4L2_CID_MPEG_CX2341X_BASE+10)
  695 #define V4L2_CID_MPEG_CX2341X_STREAM_INSERT_NAV_PACKETS         (V4L2_CID_MPEG_CX2341X_BASE+11)
  696 
  697 /*  MPEG-class control IDs specific to the Samsung MFC 5.1 driver as defined by V4L2 */
  698 #define V4L2_CID_MPEG_MFC51_BASE                                (V4L2_CTRL_CLASS_MPEG | 0x1100)
  699 
  700 #define V4L2_CID_MPEG_MFC51_VIDEO_DECODER_H264_DISPLAY_DELAY            (V4L2_CID_MPEG_MFC51_BASE+0)
  701 #define V4L2_CID_MPEG_MFC51_VIDEO_DECODER_H264_DISPLAY_DELAY_ENABLE     (V4L2_CID_MPEG_MFC51_BASE+1)
  702 #define V4L2_CID_MPEG_MFC51_VIDEO_FRAME_SKIP_MODE                       (V4L2_CID_MPEG_MFC51_BASE+2)
  703 enum v4l2_mpeg_mfc51_video_frame_skip_mode {
  704         V4L2_MPEG_MFC51_VIDEO_FRAME_SKIP_MODE_DISABLED          = 0,
  705         V4L2_MPEG_MFC51_VIDEO_FRAME_SKIP_MODE_LEVEL_LIMIT       = 1,
  706         V4L2_MPEG_MFC51_VIDEO_FRAME_SKIP_MODE_BUF_LIMIT         = 2,
  707 };
  708 #define V4L2_CID_MPEG_MFC51_VIDEO_FORCE_FRAME_TYPE                      (V4L2_CID_MPEG_MFC51_BASE+3)
  709 enum v4l2_mpeg_mfc51_video_force_frame_type {
  710         V4L2_MPEG_MFC51_VIDEO_FORCE_FRAME_TYPE_DISABLED         = 0,
  711         V4L2_MPEG_MFC51_VIDEO_FORCE_FRAME_TYPE_I_FRAME          = 1,
  712         V4L2_MPEG_MFC51_VIDEO_FORCE_FRAME_TYPE_NOT_CODED        = 2,
  713 };
  714 #define V4L2_CID_MPEG_MFC51_VIDEO_PADDING                               (V4L2_CID_MPEG_MFC51_BASE+4)
  715 #define V4L2_CID_MPEG_MFC51_VIDEO_PADDING_YUV                           (V4L2_CID_MPEG_MFC51_BASE+5)
  716 #define V4L2_CID_MPEG_MFC51_VIDEO_RC_FIXED_TARGET_BIT                   (V4L2_CID_MPEG_MFC51_BASE+6)
  717 #define V4L2_CID_MPEG_MFC51_VIDEO_RC_REACTION_COEFF                     (V4L2_CID_MPEG_MFC51_BASE+7)
  718 #define V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_ACTIVITY             (V4L2_CID_MPEG_MFC51_BASE+50)
  719 #define V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_DARK                 (V4L2_CID_MPEG_MFC51_BASE+51)
  720 #define V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_SMOOTH               (V4L2_CID_MPEG_MFC51_BASE+52)
  721 #define V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_STATIC               (V4L2_CID_MPEG_MFC51_BASE+53)
  722 #define V4L2_CID_MPEG_MFC51_VIDEO_H264_NUM_REF_PIC_FOR_P                (V4L2_CID_MPEG_MFC51_BASE+54)
  723 
  724 
  725 /*  Camera class control IDs */
  726 
  727 #define V4L2_CID_CAMERA_CLASS_BASE      (V4L2_CTRL_CLASS_CAMERA | 0x900)
  728 #define V4L2_CID_CAMERA_CLASS           (V4L2_CTRL_CLASS_CAMERA | 1)
  729 
  730 #define V4L2_CID_EXPOSURE_AUTO                  (V4L2_CID_CAMERA_CLASS_BASE+1)
  731 enum  v4l2_exposure_auto_type {
  732         V4L2_EXPOSURE_AUTO = 0,
  733         V4L2_EXPOSURE_MANUAL = 1,
  734         V4L2_EXPOSURE_SHUTTER_PRIORITY = 2,
  735         V4L2_EXPOSURE_APERTURE_PRIORITY = 3
  736 };
  737 #define V4L2_CID_EXPOSURE_ABSOLUTE              (V4L2_CID_CAMERA_CLASS_BASE+2)
  738 #define V4L2_CID_EXPOSURE_AUTO_PRIORITY         (V4L2_CID_CAMERA_CLASS_BASE+3)
  739 
  740 #define V4L2_CID_PAN_RELATIVE                   (V4L2_CID_CAMERA_CLASS_BASE+4)
  741 #define V4L2_CID_TILT_RELATIVE                  (V4L2_CID_CAMERA_CLASS_BASE+5)
  742 #define V4L2_CID_PAN_RESET                      (V4L2_CID_CAMERA_CLASS_BASE+6)
  743 #define V4L2_CID_TILT_RESET                     (V4L2_CID_CAMERA_CLASS_BASE+7)
  744 
  745 #define V4L2_CID_PAN_ABSOLUTE                   (V4L2_CID_CAMERA_CLASS_BASE+8)
  746 #define V4L2_CID_TILT_ABSOLUTE                  (V4L2_CID_CAMERA_CLASS_BASE+9)
  747 
  748 #define V4L2_CID_FOCUS_ABSOLUTE                 (V4L2_CID_CAMERA_CLASS_BASE+10)
  749 #define V4L2_CID_FOCUS_RELATIVE                 (V4L2_CID_CAMERA_CLASS_BASE+11)
  750 #define V4L2_CID_FOCUS_AUTO                     (V4L2_CID_CAMERA_CLASS_BASE+12)
  751 
  752 #define V4L2_CID_ZOOM_ABSOLUTE                  (V4L2_CID_CAMERA_CLASS_BASE+13)
  753 #define V4L2_CID_ZOOM_RELATIVE                  (V4L2_CID_CAMERA_CLASS_BASE+14)
  754 #define V4L2_CID_ZOOM_CONTINUOUS                (V4L2_CID_CAMERA_CLASS_BASE+15)
  755 
  756 #define V4L2_CID_PRIVACY                        (V4L2_CID_CAMERA_CLASS_BASE+16)
  757 
  758 #define V4L2_CID_IRIS_ABSOLUTE                  (V4L2_CID_CAMERA_CLASS_BASE+17)
  759 #define V4L2_CID_IRIS_RELATIVE                  (V4L2_CID_CAMERA_CLASS_BASE+18)
  760 
  761 #define V4L2_CID_AUTO_EXPOSURE_BIAS             (V4L2_CID_CAMERA_CLASS_BASE+19)
  762 
  763 #define V4L2_CID_AUTO_N_PRESET_WHITE_BALANCE    (V4L2_CID_CAMERA_CLASS_BASE+20)
  764 enum v4l2_auto_n_preset_white_balance {
  765         V4L2_WHITE_BALANCE_MANUAL               = 0,
  766         V4L2_WHITE_BALANCE_AUTO                 = 1,
  767         V4L2_WHITE_BALANCE_INCANDESCENT         = 2,
  768         V4L2_WHITE_BALANCE_FLUORESCENT          = 3,
  769         V4L2_WHITE_BALANCE_FLUORESCENT_H        = 4,
  770         V4L2_WHITE_BALANCE_HORIZON              = 5,
  771         V4L2_WHITE_BALANCE_DAYLIGHT             = 6,
  772         V4L2_WHITE_BALANCE_FLASH                = 7,
  773         V4L2_WHITE_BALANCE_CLOUDY               = 8,
  774         V4L2_WHITE_BALANCE_SHADE                = 9,
  775 };
  776 
  777 #define V4L2_CID_WIDE_DYNAMIC_RANGE             (V4L2_CID_CAMERA_CLASS_BASE+21)
  778 #define V4L2_CID_IMAGE_STABILIZATION            (V4L2_CID_CAMERA_CLASS_BASE+22)
  779 
  780 #define V4L2_CID_ISO_SENSITIVITY                (V4L2_CID_CAMERA_CLASS_BASE+23)
  781 #define V4L2_CID_ISO_SENSITIVITY_AUTO           (V4L2_CID_CAMERA_CLASS_BASE+24)
  782 enum v4l2_iso_sensitivity_auto_type {
  783         V4L2_ISO_SENSITIVITY_MANUAL             = 0,
  784         V4L2_ISO_SENSITIVITY_AUTO               = 1,
  785 };
  786 
  787 #define V4L2_CID_EXPOSURE_METERING              (V4L2_CID_CAMERA_CLASS_BASE+25)
  788 enum v4l2_exposure_metering {
  789         V4L2_EXPOSURE_METERING_AVERAGE          = 0,
  790         V4L2_EXPOSURE_METERING_CENTER_WEIGHTED  = 1,
  791         V4L2_EXPOSURE_METERING_SPOT             = 2,
  792         V4L2_EXPOSURE_METERING_MATRIX           = 3,
  793 };
  794 
  795 #define V4L2_CID_SCENE_MODE                     (V4L2_CID_CAMERA_CLASS_BASE+26)
  796 enum v4l2_scene_mode {
  797         V4L2_SCENE_MODE_NONE                    = 0,
  798         V4L2_SCENE_MODE_BACKLIGHT               = 1,
  799         V4L2_SCENE_MODE_BEACH_SNOW              = 2,
  800         V4L2_SCENE_MODE_CANDLE_LIGHT            = 3,
  801         V4L2_SCENE_MODE_DAWN_DUSK               = 4,
  802         V4L2_SCENE_MODE_FALL_COLORS             = 5,
  803         V4L2_SCENE_MODE_FIREWORKS               = 6,
  804         V4L2_SCENE_MODE_LANDSCAPE               = 7,
  805         V4L2_SCENE_MODE_NIGHT                   = 8,
  806         V4L2_SCENE_MODE_PARTY_INDOOR            = 9,
  807         V4L2_SCENE_MODE_PORTRAIT                = 10,
  808         V4L2_SCENE_MODE_SPORTS                  = 11,
  809         V4L2_SCENE_MODE_SUNSET                  = 12,
  810         V4L2_SCENE_MODE_TEXT                    = 13,
  811 };
  812 
  813 #define V4L2_CID_3A_LOCK                        (V4L2_CID_CAMERA_CLASS_BASE+27)
  814 #define V4L2_LOCK_EXPOSURE                      (1 << 0)
  815 #define V4L2_LOCK_WHITE_BALANCE                 (1 << 1)
  816 #define V4L2_LOCK_FOCUS                         (1 << 2)
  817 
  818 #define V4L2_CID_AUTO_FOCUS_START               (V4L2_CID_CAMERA_CLASS_BASE+28)
  819 #define V4L2_CID_AUTO_FOCUS_STOP                (V4L2_CID_CAMERA_CLASS_BASE+29)
  820 #define V4L2_CID_AUTO_FOCUS_STATUS              (V4L2_CID_CAMERA_CLASS_BASE+30)
  821 #define V4L2_AUTO_FOCUS_STATUS_IDLE             (0 << 0)
  822 #define V4L2_AUTO_FOCUS_STATUS_BUSY             (1 << 0)
  823 #define V4L2_AUTO_FOCUS_STATUS_REACHED          (1 << 1)
  824 #define V4L2_AUTO_FOCUS_STATUS_FAILED           (1 << 2)
  825 
  826 #define V4L2_CID_AUTO_FOCUS_RANGE               (V4L2_CID_CAMERA_CLASS_BASE+31)
  827 enum v4l2_auto_focus_range {
  828         V4L2_AUTO_FOCUS_RANGE_AUTO              = 0,
  829         V4L2_AUTO_FOCUS_RANGE_NORMAL            = 1,
  830         V4L2_AUTO_FOCUS_RANGE_MACRO             = 2,
  831         V4L2_AUTO_FOCUS_RANGE_INFINITY          = 3,
  832 };
  833 
  834 #define V4L2_CID_PAN_SPEED                      (V4L2_CID_CAMERA_CLASS_BASE+32)
  835 #define V4L2_CID_TILT_SPEED                     (V4L2_CID_CAMERA_CLASS_BASE+33)
  836 
  837 /* FM Modulator class control IDs */
  838 
  839 #define V4L2_CID_FM_TX_CLASS_BASE               (V4L2_CTRL_CLASS_FM_TX | 0x900)
  840 #define V4L2_CID_FM_TX_CLASS                    (V4L2_CTRL_CLASS_FM_TX | 1)
  841 
  842 #define V4L2_CID_RDS_TX_DEVIATION               (V4L2_CID_FM_TX_CLASS_BASE + 1)
  843 #define V4L2_CID_RDS_TX_PI                      (V4L2_CID_FM_TX_CLASS_BASE + 2)
  844 #define V4L2_CID_RDS_TX_PTY                     (V4L2_CID_FM_TX_CLASS_BASE + 3)
  845 #define V4L2_CID_RDS_TX_PS_NAME                 (V4L2_CID_FM_TX_CLASS_BASE + 5)
  846 #define V4L2_CID_RDS_TX_RADIO_TEXT              (V4L2_CID_FM_TX_CLASS_BASE + 6)
  847 #define V4L2_CID_RDS_TX_MONO_STEREO             (V4L2_CID_FM_TX_CLASS_BASE + 7)
  848 #define V4L2_CID_RDS_TX_ARTIFICIAL_HEAD         (V4L2_CID_FM_TX_CLASS_BASE + 8)
  849 #define V4L2_CID_RDS_TX_COMPRESSED              (V4L2_CID_FM_TX_CLASS_BASE + 9)
  850 #define V4L2_CID_RDS_TX_DYNAMIC_PTY             (V4L2_CID_FM_TX_CLASS_BASE + 10)
  851 #define V4L2_CID_RDS_TX_TRAFFIC_ANNOUNCEMENT    (V4L2_CID_FM_TX_CLASS_BASE + 11)
  852 #define V4L2_CID_RDS_TX_TRAFFIC_PROGRAM         (V4L2_CID_FM_TX_CLASS_BASE + 12)
  853 #define V4L2_CID_RDS_TX_MUSIC_SPEECH            (V4L2_CID_FM_TX_CLASS_BASE + 13)
  854 #define V4L2_CID_RDS_TX_ALT_FREQS_ENABLE        (V4L2_CID_FM_TX_CLASS_BASE + 14)
  855 #define V4L2_CID_RDS_TX_ALT_FREQS               (V4L2_CID_FM_TX_CLASS_BASE + 15)
  856 
  857 #define V4L2_CID_AUDIO_LIMITER_ENABLED          (V4L2_CID_FM_TX_CLASS_BASE + 64)
  858 #define V4L2_CID_AUDIO_LIMITER_RELEASE_TIME     (V4L2_CID_FM_TX_CLASS_BASE + 65)
  859 #define V4L2_CID_AUDIO_LIMITER_DEVIATION        (V4L2_CID_FM_TX_CLASS_BASE + 66)
  860 
  861 #define V4L2_CID_AUDIO_COMPRESSION_ENABLED      (V4L2_CID_FM_TX_CLASS_BASE + 80)
  862 #define V4L2_CID_AUDIO_COMPRESSION_GAIN         (V4L2_CID_FM_TX_CLASS_BASE + 81)
  863 #define V4L2_CID_AUDIO_COMPRESSION_THRESHOLD    (V4L2_CID_FM_TX_CLASS_BASE + 82)
  864 #define V4L2_CID_AUDIO_COMPRESSION_ATTACK_TIME  (V4L2_CID_FM_TX_CLASS_BASE + 83)
  865 #define V4L2_CID_AUDIO_COMPRESSION_RELEASE_TIME (V4L2_CID_FM_TX_CLASS_BASE + 84)
  866 
  867 #define V4L2_CID_PILOT_TONE_ENABLED             (V4L2_CID_FM_TX_CLASS_BASE + 96)
  868 #define V4L2_CID_PILOT_TONE_DEVIATION           (V4L2_CID_FM_TX_CLASS_BASE + 97)
  869 #define V4L2_CID_PILOT_TONE_FREQUENCY           (V4L2_CID_FM_TX_CLASS_BASE + 98)
  870 
  871 #define V4L2_CID_TUNE_PREEMPHASIS               (V4L2_CID_FM_TX_CLASS_BASE + 112)
  872 enum v4l2_preemphasis {
  873         V4L2_PREEMPHASIS_DISABLED       = 0,
  874         V4L2_PREEMPHASIS_50_uS          = 1,
  875         V4L2_PREEMPHASIS_75_uS          = 2,
  876 };
  877 #define V4L2_CID_TUNE_POWER_LEVEL               (V4L2_CID_FM_TX_CLASS_BASE + 113)
  878 #define V4L2_CID_TUNE_ANTENNA_CAPACITOR         (V4L2_CID_FM_TX_CLASS_BASE + 114)
  879 
  880 
  881 /* Flash and privacy (indicator) light controls */
  882 
  883 #define V4L2_CID_FLASH_CLASS_BASE               (V4L2_CTRL_CLASS_FLASH | 0x900)
  884 #define V4L2_CID_FLASH_CLASS                    (V4L2_CTRL_CLASS_FLASH | 1)
  885 
  886 #define V4L2_CID_FLASH_LED_MODE                 (V4L2_CID_FLASH_CLASS_BASE + 1)
  887 enum v4l2_flash_led_mode {
  888         V4L2_FLASH_LED_MODE_NONE,
  889         V4L2_FLASH_LED_MODE_FLASH,
  890         V4L2_FLASH_LED_MODE_TORCH,
  891 };
  892 
  893 #define V4L2_CID_FLASH_STROBE_SOURCE            (V4L2_CID_FLASH_CLASS_BASE + 2)
  894 enum v4l2_flash_strobe_source {
  895         V4L2_FLASH_STROBE_SOURCE_SOFTWARE,
  896         V4L2_FLASH_STROBE_SOURCE_EXTERNAL,
  897 };
  898 
  899 #define V4L2_CID_FLASH_STROBE                   (V4L2_CID_FLASH_CLASS_BASE + 3)
  900 #define V4L2_CID_FLASH_STROBE_STOP              (V4L2_CID_FLASH_CLASS_BASE + 4)
  901 #define V4L2_CID_FLASH_STROBE_STATUS            (V4L2_CID_FLASH_CLASS_BASE + 5)
  902 
  903 #define V4L2_CID_FLASH_TIMEOUT                  (V4L2_CID_FLASH_CLASS_BASE + 6)
  904 #define V4L2_CID_FLASH_INTENSITY                (V4L2_CID_FLASH_CLASS_BASE + 7)
  905 #define V4L2_CID_FLASH_TORCH_INTENSITY          (V4L2_CID_FLASH_CLASS_BASE + 8)
  906 #define V4L2_CID_FLASH_INDICATOR_INTENSITY      (V4L2_CID_FLASH_CLASS_BASE + 9)
  907 
  908 #define V4L2_CID_FLASH_FAULT                    (V4L2_CID_FLASH_CLASS_BASE + 10)
  909 #define V4L2_FLASH_FAULT_OVER_VOLTAGE           (1 << 0)
  910 #define V4L2_FLASH_FAULT_TIMEOUT                (1 << 1)
  911 #define V4L2_FLASH_FAULT_OVER_TEMPERATURE       (1 << 2)
  912 #define V4L2_FLASH_FAULT_SHORT_CIRCUIT          (1 << 3)
  913 #define V4L2_FLASH_FAULT_OVER_CURRENT           (1 << 4)
  914 #define V4L2_FLASH_FAULT_INDICATOR              (1 << 5)
  915 #define V4L2_FLASH_FAULT_UNDER_VOLTAGE          (1 << 6)
  916 #define V4L2_FLASH_FAULT_INPUT_VOLTAGE          (1 << 7)
  917 #define V4L2_FLASH_FAULT_LED_OVER_TEMPERATURE   (1 << 8)
  918 
  919 #define V4L2_CID_FLASH_CHARGE                   (V4L2_CID_FLASH_CLASS_BASE + 11)
  920 #define V4L2_CID_FLASH_READY                    (V4L2_CID_FLASH_CLASS_BASE + 12)
  921 
  922 
  923 /* JPEG-class control IDs */
  924 
  925 #define V4L2_CID_JPEG_CLASS_BASE                (V4L2_CTRL_CLASS_JPEG | 0x900)
  926 #define V4L2_CID_JPEG_CLASS                     (V4L2_CTRL_CLASS_JPEG | 1)
  927 
  928 #define V4L2_CID_JPEG_CHROMA_SUBSAMPLING        (V4L2_CID_JPEG_CLASS_BASE + 1)
  929 enum v4l2_jpeg_chroma_subsampling {
  930         V4L2_JPEG_CHROMA_SUBSAMPLING_444        = 0,
  931         V4L2_JPEG_CHROMA_SUBSAMPLING_422        = 1,
  932         V4L2_JPEG_CHROMA_SUBSAMPLING_420        = 2,
  933         V4L2_JPEG_CHROMA_SUBSAMPLING_411        = 3,
  934         V4L2_JPEG_CHROMA_SUBSAMPLING_410        = 4,
  935         V4L2_JPEG_CHROMA_SUBSAMPLING_GRAY       = 5,
  936 };
  937 #define V4L2_CID_JPEG_RESTART_INTERVAL          (V4L2_CID_JPEG_CLASS_BASE + 2)
  938 #define V4L2_CID_JPEG_COMPRESSION_QUALITY       (V4L2_CID_JPEG_CLASS_BASE + 3)
  939 
  940 #define V4L2_CID_JPEG_ACTIVE_MARKER             (V4L2_CID_JPEG_CLASS_BASE + 4)
  941 #define V4L2_JPEG_ACTIVE_MARKER_APP0            (1 << 0)
  942 #define V4L2_JPEG_ACTIVE_MARKER_APP1            (1 << 1)
  943 #define V4L2_JPEG_ACTIVE_MARKER_COM             (1 << 16)
  944 #define V4L2_JPEG_ACTIVE_MARKER_DQT             (1 << 17)
  945 #define V4L2_JPEG_ACTIVE_MARKER_DHT             (1 << 18)
  946 
  947 
  948 /* Image source controls */
  949 #define V4L2_CID_IMAGE_SOURCE_CLASS_BASE        (V4L2_CTRL_CLASS_IMAGE_SOURCE | 0x900)
  950 #define V4L2_CID_IMAGE_SOURCE_CLASS             (V4L2_CTRL_CLASS_IMAGE_SOURCE | 1)
  951 
  952 #define V4L2_CID_VBLANK                         (V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 1)
  953 #define V4L2_CID_HBLANK                         (V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 2)
  954 #define V4L2_CID_ANALOGUE_GAIN                  (V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 3)
  955 #define V4L2_CID_TEST_PATTERN_RED               (V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 4)
  956 #define V4L2_CID_TEST_PATTERN_GREENR            (V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 5)
  957 #define V4L2_CID_TEST_PATTERN_BLUE              (V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 6)
  958 #define V4L2_CID_TEST_PATTERN_GREENB            (V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 7)
  959 
  960 
  961 /* Image processing controls */
  962 
  963 #define V4L2_CID_IMAGE_PROC_CLASS_BASE          (V4L2_CTRL_CLASS_IMAGE_PROC | 0x900)
  964 #define V4L2_CID_IMAGE_PROC_CLASS               (V4L2_CTRL_CLASS_IMAGE_PROC | 1)
  965 
  966 #define V4L2_CID_LINK_FREQ                      (V4L2_CID_IMAGE_PROC_CLASS_BASE + 1)
  967 #define V4L2_CID_PIXEL_RATE                     (V4L2_CID_IMAGE_PROC_CLASS_BASE + 2)
  968 #define V4L2_CID_TEST_PATTERN                   (V4L2_CID_IMAGE_PROC_CLASS_BASE + 3)
  969 #define V4L2_CID_DEINTERLACING_MODE             (V4L2_CID_IMAGE_PROC_CLASS_BASE + 4)
  970 
  971 
  972 /*  DV-class control IDs defined by V4L2 */
  973 #define V4L2_CID_DV_CLASS_BASE                  (V4L2_CTRL_CLASS_DV | 0x900)
  974 #define V4L2_CID_DV_CLASS                       (V4L2_CTRL_CLASS_DV | 1)
  975 
  976 #define V4L2_CID_DV_TX_HOTPLUG                  (V4L2_CID_DV_CLASS_BASE + 1)
  977 #define V4L2_CID_DV_TX_RXSENSE                  (V4L2_CID_DV_CLASS_BASE + 2)
  978 #define V4L2_CID_DV_TX_EDID_PRESENT             (V4L2_CID_DV_CLASS_BASE + 3)
  979 #define V4L2_CID_DV_TX_MODE                     (V4L2_CID_DV_CLASS_BASE + 4)
  980 enum v4l2_dv_tx_mode {
  981         V4L2_DV_TX_MODE_DVI_D   = 0,
  982         V4L2_DV_TX_MODE_HDMI    = 1,
  983 };
  984 #define V4L2_CID_DV_TX_RGB_RANGE                (V4L2_CID_DV_CLASS_BASE + 5)
  985 enum v4l2_dv_rgb_range {
  986         V4L2_DV_RGB_RANGE_AUTO    = 0,
  987         V4L2_DV_RGB_RANGE_LIMITED = 1,
  988         V4L2_DV_RGB_RANGE_FULL    = 2,
  989 };
  990 
  991 #define V4L2_CID_DV_TX_IT_CONTENT_TYPE          (V4L2_CID_DV_CLASS_BASE + 6)
  992 enum v4l2_dv_it_content_type {
  993         V4L2_DV_IT_CONTENT_TYPE_GRAPHICS  = 0,
  994         V4L2_DV_IT_CONTENT_TYPE_PHOTO     = 1,
  995         V4L2_DV_IT_CONTENT_TYPE_CINEMA    = 2,
  996         V4L2_DV_IT_CONTENT_TYPE_GAME      = 3,
  997         V4L2_DV_IT_CONTENT_TYPE_NO_ITC    = 4,
  998 };
  999 
 1000 #define V4L2_CID_DV_RX_POWER_PRESENT            (V4L2_CID_DV_CLASS_BASE + 100)
 1001 #define V4L2_CID_DV_RX_RGB_RANGE                (V4L2_CID_DV_CLASS_BASE + 101)
 1002 #define V4L2_CID_DV_RX_IT_CONTENT_TYPE          (V4L2_CID_DV_CLASS_BASE + 102)
 1003 
 1004 #define V4L2_CID_FM_RX_CLASS_BASE               (V4L2_CTRL_CLASS_FM_RX | 0x900)
 1005 #define V4L2_CID_FM_RX_CLASS                    (V4L2_CTRL_CLASS_FM_RX | 1)
 1006 
 1007 #define V4L2_CID_TUNE_DEEMPHASIS                (V4L2_CID_FM_RX_CLASS_BASE + 1)
 1008 enum v4l2_deemphasis {
 1009         V4L2_DEEMPHASIS_DISABLED        = V4L2_PREEMPHASIS_DISABLED,
 1010         V4L2_DEEMPHASIS_50_uS           = V4L2_PREEMPHASIS_50_uS,
 1011         V4L2_DEEMPHASIS_75_uS           = V4L2_PREEMPHASIS_75_uS,
 1012 };
 1013 
 1014 #define V4L2_CID_RDS_RECEPTION                  (V4L2_CID_FM_RX_CLASS_BASE + 2)
 1015 #define V4L2_CID_RDS_RX_PTY                     (V4L2_CID_FM_RX_CLASS_BASE + 3)
 1016 #define V4L2_CID_RDS_RX_PS_NAME                 (V4L2_CID_FM_RX_CLASS_BASE + 4)
 1017 #define V4L2_CID_RDS_RX_RADIO_TEXT              (V4L2_CID_FM_RX_CLASS_BASE + 5)
 1018 #define V4L2_CID_RDS_RX_TRAFFIC_ANNOUNCEMENT    (V4L2_CID_FM_RX_CLASS_BASE + 6)
 1019 #define V4L2_CID_RDS_RX_TRAFFIC_PROGRAM         (V4L2_CID_FM_RX_CLASS_BASE + 7)
 1020 #define V4L2_CID_RDS_RX_MUSIC_SPEECH            (V4L2_CID_FM_RX_CLASS_BASE + 8)
 1021 
 1022 #define V4L2_CID_RF_TUNER_CLASS_BASE            (V4L2_CTRL_CLASS_RF_TUNER | 0x900)
 1023 #define V4L2_CID_RF_TUNER_CLASS                 (V4L2_CTRL_CLASS_RF_TUNER | 1)
 1024 
 1025 #define V4L2_CID_RF_TUNER_BANDWIDTH_AUTO        (V4L2_CID_RF_TUNER_CLASS_BASE + 11)
 1026 #define V4L2_CID_RF_TUNER_BANDWIDTH             (V4L2_CID_RF_TUNER_CLASS_BASE + 12)
 1027 #define V4L2_CID_RF_TUNER_RF_GAIN               (V4L2_CID_RF_TUNER_CLASS_BASE + 32)
 1028 #define V4L2_CID_RF_TUNER_LNA_GAIN_AUTO         (V4L2_CID_RF_TUNER_CLASS_BASE + 41)
 1029 #define V4L2_CID_RF_TUNER_LNA_GAIN              (V4L2_CID_RF_TUNER_CLASS_BASE + 42)
 1030 #define V4L2_CID_RF_TUNER_MIXER_GAIN_AUTO       (V4L2_CID_RF_TUNER_CLASS_BASE + 51)
 1031 #define V4L2_CID_RF_TUNER_MIXER_GAIN            (V4L2_CID_RF_TUNER_CLASS_BASE + 52)
 1032 #define V4L2_CID_RF_TUNER_IF_GAIN_AUTO          (V4L2_CID_RF_TUNER_CLASS_BASE + 61)
 1033 #define V4L2_CID_RF_TUNER_IF_GAIN               (V4L2_CID_RF_TUNER_CLASS_BASE + 62)
 1034 #define V4L2_CID_RF_TUNER_PLL_LOCK                      (V4L2_CID_RF_TUNER_CLASS_BASE + 91)
 1035 
 1036 
 1037 /*  Detection-class control IDs defined by V4L2 */
 1038 #define V4L2_CID_DETECT_CLASS_BASE              (V4L2_CTRL_CLASS_DETECT | 0x900)
 1039 #define V4L2_CID_DETECT_CLASS                   (V4L2_CTRL_CLASS_DETECT | 1)
 1040 
 1041 #define V4L2_CID_DETECT_MD_MODE                 (V4L2_CID_DETECT_CLASS_BASE + 1)
 1042 enum v4l2_detect_md_mode {
 1043         V4L2_DETECT_MD_MODE_DISABLED            = 0,
 1044         V4L2_DETECT_MD_MODE_GLOBAL              = 1,
 1045         V4L2_DETECT_MD_MODE_THRESHOLD_GRID      = 2,
 1046         V4L2_DETECT_MD_MODE_REGION_GRID         = 3,
 1047 };
 1048 #define V4L2_CID_DETECT_MD_GLOBAL_THRESHOLD     (V4L2_CID_DETECT_CLASS_BASE + 2)
 1049 #define V4L2_CID_DETECT_MD_THRESHOLD_GRID       (V4L2_CID_DETECT_CLASS_BASE + 3)
 1050 #define V4L2_CID_DETECT_MD_REGION_GRID          (V4L2_CID_DETECT_CLASS_BASE + 4)
 1051 /*
 1052  * End of v4l2-controls.h
 1053  */
 1054 
 1055 #ifndef __user
 1056 #define __user
 1057 #endif
 1058 
 1059 /*
 1060  * Common stuff for both V4L1 and V4L2
 1061  * Moved from videodev.h
 1062  */
 1063 #define VIDEO_MAX_FRAME               32
 1064 #define VIDEO_MAX_PLANES               8
 1065 
 1066 /*
 1067  *      M I S C E L L A N E O U S
 1068  */
 1069 
 1070 /*  Four-character-code (FOURCC) */
 1071 #define v4l2_fourcc(a, b, c, d)\
 1072         ((u_int32_t)(a) | ((u_int32_t)(b) << 8) | ((u_int32_t)(c) << 16) | ((u_int32_t)(d) << 24))
 1073 #define v4l2_fourcc_be(a, b, c, d)      (v4l2_fourcc(a, b, c, d) | (1 << 31))
 1074 
 1075 /*
 1076  *      E N U M S
 1077  */
 1078 enum v4l2_field {
 1079         V4L2_FIELD_ANY           = 0, /* driver can choose from none,
 1080                                          top, bottom, interlaced
 1081                                          depending on whatever it thinks
 1082                                          is approximate ... */
 1083         V4L2_FIELD_NONE          = 1, /* this device has no fields ... */
 1084         V4L2_FIELD_TOP           = 2, /* top field only */
 1085         V4L2_FIELD_BOTTOM        = 3, /* bottom field only */
 1086         V4L2_FIELD_INTERLACED    = 4, /* both fields interlaced */
 1087         V4L2_FIELD_SEQ_TB        = 5, /* both fields sequential into one
 1088                                          buffer, top-bottom order */
 1089         V4L2_FIELD_SEQ_BT        = 6, /* same as above + bottom-top order */
 1090         V4L2_FIELD_ALTERNATE     = 7, /* both fields alternating into
 1091                                          separate buffers */
 1092         V4L2_FIELD_INTERLACED_TB = 8, /* both fields interlaced, top field
 1093                                          first and the top field is
 1094                                          transmitted first */
 1095         V4L2_FIELD_INTERLACED_BT = 9, /* both fields interlaced, top field
 1096                                          first and the bottom field is
 1097                                          transmitted first */
 1098 };
 1099 #define V4L2_FIELD_HAS_TOP(field)       \
 1100         ((field) == V4L2_FIELD_TOP      ||\
 1101          (field) == V4L2_FIELD_INTERLACED ||\
 1102          (field) == V4L2_FIELD_INTERLACED_TB ||\
 1103          (field) == V4L2_FIELD_INTERLACED_BT ||\
 1104          (field) == V4L2_FIELD_SEQ_TB   ||\
 1105          (field) == V4L2_FIELD_SEQ_BT)
 1106 #define V4L2_FIELD_HAS_BOTTOM(field)    \
 1107         ((field) == V4L2_FIELD_BOTTOM   ||\
 1108          (field) == V4L2_FIELD_INTERLACED ||\
 1109          (field) == V4L2_FIELD_INTERLACED_TB ||\
 1110          (field) == V4L2_FIELD_INTERLACED_BT ||\
 1111          (field) == V4L2_FIELD_SEQ_TB   ||\
 1112          (field) == V4L2_FIELD_SEQ_BT)
 1113 #define V4L2_FIELD_HAS_BOTH(field)      \
 1114         ((field) == V4L2_FIELD_INTERLACED ||\
 1115          (field) == V4L2_FIELD_INTERLACED_TB ||\
 1116          (field) == V4L2_FIELD_INTERLACED_BT ||\
 1117          (field) == V4L2_FIELD_SEQ_TB ||\
 1118          (field) == V4L2_FIELD_SEQ_BT)
 1119 #define V4L2_FIELD_HAS_T_OR_B(field)    \
 1120         ((field) == V4L2_FIELD_BOTTOM ||\
 1121          (field) == V4L2_FIELD_TOP ||\
 1122          (field) == V4L2_FIELD_ALTERNATE)
 1123 
 1124 enum v4l2_buf_type {
 1125         V4L2_BUF_TYPE_VIDEO_CAPTURE        = 1,
 1126         V4L2_BUF_TYPE_VIDEO_OUTPUT         = 2,
 1127         V4L2_BUF_TYPE_VIDEO_OVERLAY        = 3,
 1128         V4L2_BUF_TYPE_VBI_CAPTURE          = 4,
 1129         V4L2_BUF_TYPE_VBI_OUTPUT           = 5,
 1130         V4L2_BUF_TYPE_SLICED_VBI_CAPTURE   = 6,
 1131         V4L2_BUF_TYPE_SLICED_VBI_OUTPUT    = 7,
 1132         V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY = 8,
 1133         V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE = 9,
 1134         V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE  = 10,
 1135         V4L2_BUF_TYPE_SDR_CAPTURE          = 11,
 1136         V4L2_BUF_TYPE_SDR_OUTPUT           = 12,
 1137         /* Deprecated, do not use */
 1138         V4L2_BUF_TYPE_PRIVATE              = 0x80,
 1139 };
 1140 
 1141 #define V4L2_TYPE_IS_MULTIPLANAR(type)                  \
 1142         ((type) == V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE   \
 1143          || (type) == V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE)
 1144 
 1145 #define V4L2_TYPE_IS_OUTPUT(type)                               \
 1146         ((type) == V4L2_BUF_TYPE_VIDEO_OUTPUT                   \
 1147          || (type) == V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE         \
 1148          || (type) == V4L2_BUF_TYPE_VIDEO_OVERLAY               \
 1149          || (type) == V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY        \
 1150          || (type) == V4L2_BUF_TYPE_VBI_OUTPUT                  \
 1151          || (type) == V4L2_BUF_TYPE_SLICED_VBI_OUTPUT           \
 1152          || (type) == V4L2_BUF_TYPE_SDR_OUTPUT)
 1153 
 1154 enum v4l2_tuner_type {
 1155         V4L2_TUNER_RADIO             = 1,
 1156         V4L2_TUNER_ANALOG_TV         = 2,
 1157         V4L2_TUNER_DIGITAL_TV        = 3,
 1158         V4L2_TUNER_SDR               = 4,
 1159         V4L2_TUNER_RF                = 5,
 1160 };
 1161 
 1162 /* Deprecated, do not use */
 1163 #define V4L2_TUNER_ADC  V4L2_TUNER_SDR
 1164 
 1165 enum v4l2_memory {
 1166         V4L2_MEMORY_MMAP             = 1,
 1167         V4L2_MEMORY_USERPTR          = 2,
 1168         V4L2_MEMORY_OVERLAY          = 3,
 1169         V4L2_MEMORY_DMABUF           = 4,
 1170 };
 1171 
 1172 /* see also http://vektor.theorem.ca/graphics/ycbcr/ */
 1173 enum v4l2_colorspace {
 1174         /*
 1175          * Default colorspace, i.e. let the driver figure it out.
 1176          * Can only be used with video capture.
 1177          */
 1178         V4L2_COLORSPACE_DEFAULT       = 0,
 1179 
 1180         /* SMPTE 170M: used for broadcast NTSC/PAL SDTV */
 1181         V4L2_COLORSPACE_SMPTE170M     = 1,
 1182 
 1183         /* Obsolete pre-1998 SMPTE 240M HDTV standard, superseded by Rec 709 */
 1184         V4L2_COLORSPACE_SMPTE240M     = 2,
 1185 
 1186         /* Rec.709: used for HDTV */
 1187         V4L2_COLORSPACE_REC709        = 3,
 1188 
 1189         /*
 1190          * Deprecated, do not use. No driver will ever return this. This was
 1191          * based on a misunderstanding of the bt878 datasheet.
 1192          */
 1193         V4L2_COLORSPACE_BT878         = 4,
 1194 
 1195         /*
 1196          * NTSC 1953 colorspace. This only makes sense when dealing with
 1197          * really, really old NTSC recordings. Superseded by SMPTE 170M.
 1198          */
 1199         V4L2_COLORSPACE_470_SYSTEM_M  = 5,
 1200 
 1201         /*
 1202          * EBU Tech 3213 PAL/SECAM colorspace. This only makes sense when
 1203          * dealing with really old PAL/SECAM recordings. Superseded by
 1204          * SMPTE 170M.
 1205          */
 1206         V4L2_COLORSPACE_470_SYSTEM_BG = 6,
 1207 
 1208         /*
 1209          * Effectively shorthand for V4L2_COLORSPACE_SRGB, V4L2_YCBCR_ENC_601
 1210          * and V4L2_QUANTIZATION_FULL_RANGE. To be used for (Motion-)JPEG.
 1211          */
 1212         V4L2_COLORSPACE_JPEG          = 7,
 1213 
 1214         /* For RGB colorspaces such as produces by most webcams. */
 1215         V4L2_COLORSPACE_SRGB          = 8,
 1216 
 1217         /* AdobeRGB colorspace */
 1218         V4L2_COLORSPACE_ADOBERGB      = 9,
 1219 
 1220         /* BT.2020 colorspace, used for UHDTV. */
 1221         V4L2_COLORSPACE_BT2020        = 10,
 1222 
 1223         /* Raw colorspace: for RAW unprocessed images */
 1224         V4L2_COLORSPACE_RAW           = 11,
 1225 
 1226         /* DCI-P3 colorspace, used by cinema projectors */
 1227         V4L2_COLORSPACE_DCI_P3        = 12,
 1228 };
 1229 
 1230 /*
 1231  * Determine how COLORSPACE_DEFAULT should map to a proper colorspace.
 1232  * This depends on whether this is a SDTV image (use SMPTE 170M), an
 1233  * HDTV image (use Rec. 709), or something else (use sRGB).
 1234  */
 1235 #define V4L2_MAP_COLORSPACE_DEFAULT(is_sdtv, is_hdtv) \
 1236         ((is_sdtv) ? V4L2_COLORSPACE_SMPTE170M : \
 1237          ((is_hdtv) ? V4L2_COLORSPACE_REC709 : V4L2_COLORSPACE_SRGB))
 1238 
 1239 enum v4l2_xfer_func {
 1240         /*
 1241          * Mapping of V4L2_XFER_FUNC_DEFAULT to actual transfer functions
 1242          * for the various colorspaces:
 1243          *
 1244          * V4L2_COLORSPACE_SMPTE170M, V4L2_COLORSPACE_470_SYSTEM_M,
 1245          * V4L2_COLORSPACE_470_SYSTEM_BG, V4L2_COLORSPACE_REC709 and
 1246          * V4L2_COLORSPACE_BT2020: V4L2_XFER_FUNC_709
 1247          *
 1248          * V4L2_COLORSPACE_SRGB, V4L2_COLORSPACE_JPEG: V4L2_XFER_FUNC_SRGB
 1249          *
 1250          * V4L2_COLORSPACE_ADOBERGB: V4L2_XFER_FUNC_ADOBERGB
 1251          *
 1252          * V4L2_COLORSPACE_SMPTE240M: V4L2_XFER_FUNC_SMPTE240M
 1253          *
 1254          * V4L2_COLORSPACE_RAW: V4L2_XFER_FUNC_NONE
 1255          *
 1256          * V4L2_COLORSPACE_DCI_P3: V4L2_XFER_FUNC_DCI_P3
 1257          */
 1258         V4L2_XFER_FUNC_DEFAULT     = 0,
 1259         V4L2_XFER_FUNC_709         = 1,
 1260         V4L2_XFER_FUNC_SRGB        = 2,
 1261         V4L2_XFER_FUNC_ADOBERGB    = 3,
 1262         V4L2_XFER_FUNC_SMPTE240M   = 4,
 1263         V4L2_XFER_FUNC_NONE        = 5,
 1264         V4L2_XFER_FUNC_DCI_P3      = 6,
 1265         V4L2_XFER_FUNC_SMPTE2084   = 7,
 1266 };
 1267 
 1268 /*
 1269  * Determine how XFER_FUNC_DEFAULT should map to a proper transfer function.
 1270  * This depends on the colorspace.
 1271  */
 1272 #define V4L2_MAP_XFER_FUNC_DEFAULT(colsp) \
 1273         ((colsp) == V4L2_COLORSPACE_ADOBERGB ? V4L2_XFER_FUNC_ADOBERGB : \
 1274          ((colsp) == V4L2_COLORSPACE_SMPTE240M ? V4L2_XFER_FUNC_SMPTE240M : \
 1275           ((colsp) == V4L2_COLORSPACE_DCI_P3 ? V4L2_XFER_FUNC_DCI_P3 : \
 1276            ((colsp) == V4L2_COLORSPACE_RAW ? V4L2_XFER_FUNC_NONE : \
 1277             ((colsp) == V4L2_COLORSPACE_SRGB || (colsp) == V4L2_COLORSPACE_JPEG ? \
 1278              V4L2_XFER_FUNC_SRGB : V4L2_XFER_FUNC_709)))))
 1279 
 1280 enum v4l2_ycbcr_encoding {
 1281         /*
 1282          * Mapping of V4L2_YCBCR_ENC_DEFAULT to actual encodings for the
 1283          * various colorspaces:
 1284          *
 1285          * V4L2_COLORSPACE_SMPTE170M, V4L2_COLORSPACE_470_SYSTEM_M,
 1286          * V4L2_COLORSPACE_470_SYSTEM_BG, V4L2_COLORSPACE_SRGB,
 1287          * V4L2_COLORSPACE_ADOBERGB and V4L2_COLORSPACE_JPEG: V4L2_YCBCR_ENC_601
 1288          *
 1289          * V4L2_COLORSPACE_REC709 and V4L2_COLORSPACE_DCI_P3: V4L2_YCBCR_ENC_709
 1290          *
 1291          * V4L2_COLORSPACE_BT2020: V4L2_YCBCR_ENC_BT2020
 1292          *
 1293          * V4L2_COLORSPACE_SMPTE240M: V4L2_YCBCR_ENC_SMPTE240M
 1294          */
 1295         V4L2_YCBCR_ENC_DEFAULT        = 0,
 1296 
 1297         /* ITU-R 601 -- SDTV */
 1298         V4L2_YCBCR_ENC_601            = 1,
 1299 
 1300         /* Rec. 709 -- HDTV */
 1301         V4L2_YCBCR_ENC_709            = 2,
 1302 
 1303         /* ITU-R 601/EN 61966-2-4 Extended Gamut -- SDTV */
 1304         V4L2_YCBCR_ENC_XV601          = 3,
 1305 
 1306         /* Rec. 709/EN 61966-2-4 Extended Gamut -- HDTV */
 1307         V4L2_YCBCR_ENC_XV709          = 4,
 1308 
 1309 #ifndef __KERNEL__
 1310         /*
 1311          * sYCC (Y'CbCr encoding of sRGB), identical to ENC_601. It was added
 1312          * originally due to a misunderstanding of the sYCC standard. It should
 1313          * not be used, instead use V4L2_YCBCR_ENC_601.
 1314          */
 1315         V4L2_YCBCR_ENC_SYCC           = 5,
 1316 #endif
 1317 
 1318         /* BT.2020 Non-constant Luminance Y'CbCr */
 1319         V4L2_YCBCR_ENC_BT2020         = 6,
 1320 
 1321         /* BT.2020 Constant Luminance Y'CbcCrc */
 1322         V4L2_YCBCR_ENC_BT2020_CONST_LUM = 7,
 1323 
 1324         /* SMPTE 240M -- Obsolete HDTV */
 1325         V4L2_YCBCR_ENC_SMPTE240M      = 8,
 1326 };
 1327 
 1328 /*
 1329  * enum v4l2_hsv_encoding values should not collide with the ones from
 1330  * enum v4l2_ycbcr_encoding.
 1331  */
 1332 enum v4l2_hsv_encoding {
 1333 
 1334         /* Hue mapped to 0 - 179 */
 1335         V4L2_HSV_ENC_180                = 128,
 1336 
 1337         /* Hue mapped to 0-255 */
 1338         V4L2_HSV_ENC_256                = 129,
 1339 };
 1340 
 1341 /*
 1342  * Determine how YCBCR_ENC_DEFAULT should map to a proper Y'CbCr encoding.
 1343  * This depends on the colorspace.
 1344  */
 1345 #define V4L2_MAP_YCBCR_ENC_DEFAULT(colsp) \
 1346         (((colsp) == V4L2_COLORSPACE_REC709 || \
 1347           (colsp) == V4L2_COLORSPACE_DCI_P3) ? V4L2_YCBCR_ENC_709 : \
 1348          ((colsp) == V4L2_COLORSPACE_BT2020 ? V4L2_YCBCR_ENC_BT2020 : \
 1349           ((colsp) == V4L2_COLORSPACE_SMPTE240M ? V4L2_YCBCR_ENC_SMPTE240M : \
 1350            V4L2_YCBCR_ENC_601)))
 1351 
 1352 enum v4l2_quantization {
 1353         /*
 1354          * The default for R'G'B' quantization is always full range, except
 1355          * for the BT2020 colorspace. For Y'CbCr the quantization is always
 1356          * limited range, except for COLORSPACE_JPEG, SRGB, ADOBERGB,
 1357          * XV601 or XV709: those are full range.
 1358          */
 1359         V4L2_QUANTIZATION_DEFAULT     = 0,
 1360         V4L2_QUANTIZATION_FULL_RANGE  = 1,
 1361         V4L2_QUANTIZATION_LIM_RANGE   = 2,
 1362 };
 1363 
 1364 /*
 1365  * Determine how QUANTIZATION_DEFAULT should map to a proper quantization.
 1366  * This depends on whether the image is RGB or not, the colorspace and the
 1367  * Y'CbCr encoding.
 1368  */
 1369 #define V4L2_MAP_QUANTIZATION_DEFAULT(is_rgb_or_hsv, colsp, ycbcr_enc) \
 1370         (((is_rgb_or_hsv) && (colsp) == V4L2_COLORSPACE_BT2020) ? \
 1371          V4L2_QUANTIZATION_LIM_RANGE : \
 1372          (((is_rgb_or_hsv) || (ycbcr_enc) == V4L2_YCBCR_ENC_XV601 || \
 1373           (ycbcr_enc) == V4L2_YCBCR_ENC_XV709 || (colsp) == V4L2_COLORSPACE_JPEG) || \
 1374           (colsp) == V4L2_COLORSPACE_ADOBERGB || (colsp) == V4L2_COLORSPACE_SRGB ? \
 1375          V4L2_QUANTIZATION_FULL_RANGE : V4L2_QUANTIZATION_LIM_RANGE))
 1376 
 1377 enum v4l2_priority {
 1378         V4L2_PRIORITY_UNSET       = 0,  /* not initialized */
 1379         V4L2_PRIORITY_BACKGROUND  = 1,
 1380         V4L2_PRIORITY_INTERACTIVE = 2,
 1381         V4L2_PRIORITY_RECORD      = 3,
 1382         V4L2_PRIORITY_DEFAULT     = V4L2_PRIORITY_INTERACTIVE,
 1383 };
 1384 
 1385 struct v4l2_rect {
 1386         int32_t   left;
 1387         int32_t   top;
 1388         u_int32_t   width;
 1389         u_int32_t   height;
 1390 };
 1391 
 1392 struct v4l2_fract {
 1393         u_int32_t   numerator;
 1394         u_int32_t   denominator;
 1395 };
 1396 
 1397 /**
 1398   * struct v4l2_capability - Describes V4L2 device caps returned by VIDIOC_QUERYCAP
 1399   *
 1400   * @driver:       name of the driver module (e.g. "bttv")
 1401   * @card:         name of the card (e.g. "Hauppauge WinTV")
 1402   * @bus_info:     name of the bus (e.g. "PCI:" + pci_name(pci_dev) )
 1403   * @version:      KERNEL_VERSION
 1404   * @capabilities: capabilities of the physical device as a whole
 1405   * @device_caps:  capabilities accessed via this particular device (node)
 1406   * @reserved:     reserved fields for future extensions
 1407   */
 1408 struct v4l2_capability {
 1409         u_int8_t        driver[16];
 1410         u_int8_t        card[32];
 1411         u_int8_t        bus_info[32];
 1412         u_int32_t   version;
 1413         u_int32_t       capabilities;
 1414         u_int32_t       device_caps;
 1415         u_int32_t       reserved[3];
 1416 };
 1417 
 1418 /* Values for 'capabilities' field */
 1419 #define V4L2_CAP_VIDEO_CAPTURE          0x00000001  /* Is a video capture device */
 1420 #define V4L2_CAP_VIDEO_OUTPUT           0x00000002  /* Is a video output device */
 1421 #define V4L2_CAP_VIDEO_OVERLAY          0x00000004  /* Can do video overlay */
 1422 #define V4L2_CAP_VBI_CAPTURE            0x00000010  /* Is a raw VBI capture device */
 1423 #define V4L2_CAP_VBI_OUTPUT             0x00000020  /* Is a raw VBI output device */
 1424 #define V4L2_CAP_SLICED_VBI_CAPTURE     0x00000040  /* Is a sliced VBI capture device */
 1425 #define V4L2_CAP_SLICED_VBI_OUTPUT      0x00000080  /* Is a sliced VBI output device */
 1426 #define V4L2_CAP_RDS_CAPTURE            0x00000100  /* RDS data capture */
 1427 #define V4L2_CAP_VIDEO_OUTPUT_OVERLAY   0x00000200  /* Can do video output overlay */
 1428 #define V4L2_CAP_HW_FREQ_SEEK           0x00000400  /* Can do hardware frequency seek  */
 1429 #define V4L2_CAP_RDS_OUTPUT             0x00000800  /* Is an RDS encoder */
 1430 
 1431 /* Is a video capture device that supports multiplanar formats */
 1432 #define V4L2_CAP_VIDEO_CAPTURE_MPLANE   0x00001000
 1433 /* Is a video output device that supports multiplanar formats */
 1434 #define V4L2_CAP_VIDEO_OUTPUT_MPLANE    0x00002000
 1435 /* Is a video mem-to-mem device that supports multiplanar formats */
 1436 #define V4L2_CAP_VIDEO_M2M_MPLANE       0x00004000
 1437 /* Is a video mem-to-mem device */
 1438 #define V4L2_CAP_VIDEO_M2M              0x00008000
 1439 
 1440 #define V4L2_CAP_TUNER                  0x00010000  /* has a tuner */
 1441 #define V4L2_CAP_AUDIO                  0x00020000  /* has audio support */
 1442 #define V4L2_CAP_RADIO                  0x00040000  /* is a radio device */
 1443 #define V4L2_CAP_MODULATOR              0x00080000  /* has a modulator */
 1444 
 1445 #define V4L2_CAP_SDR_CAPTURE            0x00100000  /* Is a SDR capture device */
 1446 #define V4L2_CAP_EXT_PIX_FORMAT         0x00200000  /* Supports the extended pixel format */
 1447 #define V4L2_CAP_SDR_OUTPUT             0x00400000  /* Is a SDR output device */
 1448 
 1449 #define V4L2_CAP_READWRITE              0x01000000  /* read/write systemcalls */
 1450 #define V4L2_CAP_ASYNCIO                0x02000000  /* async I/O */
 1451 #define V4L2_CAP_STREAMING              0x04000000  /* streaming I/O ioctls */
 1452 
 1453 #define V4L2_CAP_TOUCH                  0x10000000  /* Is a touch device */
 1454 
 1455 #define V4L2_CAP_DEVICE_CAPS            0x80000000  /* sets device capabilities field */
 1456 
 1457 /*
 1458  *      V I D E O   I M A G E   F O R M A T
 1459  */
 1460 struct v4l2_pix_format {
 1461         u_int32_t                       width;
 1462         u_int32_t                       height;
 1463         u_int32_t                       pixelformat;
 1464         u_int32_t                       field;          /* enum v4l2_field */
 1465         u_int32_t               bytesperline;   /* for padding, zero if unused */
 1466         u_int32_t                       sizeimage;
 1467         u_int32_t                       colorspace;     /* enum v4l2_colorspace */
 1468         u_int32_t                       priv;           /* private data, depends on pixelformat */
 1469         u_int32_t                       flags;          /* format flags (V4L2_PIX_FMT_FLAG_*) */
 1470         union {
 1471                 /* enum v4l2_ycbcr_encoding */
 1472                 u_int32_t                       ycbcr_enc;
 1473                 /* enum v4l2_hsv_encoding */
 1474                 u_int32_t                       hsv_enc;
 1475         };
 1476         u_int32_t                       quantization;   /* enum v4l2_quantization */
 1477         u_int32_t                       xfer_func;      /* enum v4l2_xfer_func */
 1478 };
 1479 
 1480 /*      Pixel format         FOURCC                          depth  Description  */
 1481 
 1482 /* RGB formats */
 1483 #define V4L2_PIX_FMT_RGB332  v4l2_fourcc('R', 'G', 'B', '1') /*  8  RGB-3-3-2     */
 1484 #define V4L2_PIX_FMT_RGB444  v4l2_fourcc('R', '4', '4', '4') /* 16  xxxxrrrr ggggbbbb */
 1485 #define V4L2_PIX_FMT_ARGB444 v4l2_fourcc('A', 'R', '1', '2') /* 16  aaaarrrr ggggbbbb */
 1486 #define V4L2_PIX_FMT_XRGB444 v4l2_fourcc('X', 'R', '1', '2') /* 16  xxxxrrrr ggggbbbb */
 1487 #define V4L2_PIX_FMT_RGB555  v4l2_fourcc('R', 'G', 'B', 'O') /* 16  RGB-5-5-5     */
 1488 #define V4L2_PIX_FMT_ARGB555 v4l2_fourcc('A', 'R', '1', '5') /* 16  ARGB-1-5-5-5  */
 1489 #define V4L2_PIX_FMT_XRGB555 v4l2_fourcc('X', 'R', '1', '5') /* 16  XRGB-1-5-5-5  */
 1490 #define V4L2_PIX_FMT_RGB565  v4l2_fourcc('R', 'G', 'B', 'P') /* 16  RGB-5-6-5     */
 1491 #define V4L2_PIX_FMT_RGB555X v4l2_fourcc('R', 'G', 'B', 'Q') /* 16  RGB-5-5-5 BE  */
 1492 #define V4L2_PIX_FMT_ARGB555X v4l2_fourcc_be('A', 'R', '1', '5') /* 16  ARGB-5-5-5 BE */
 1493 #define V4L2_PIX_FMT_XRGB555X v4l2_fourcc_be('X', 'R', '1', '5') /* 16  XRGB-5-5-5 BE */
 1494 #define V4L2_PIX_FMT_RGB565X v4l2_fourcc('R', 'G', 'B', 'R') /* 16  RGB-5-6-5 BE  */
 1495 #define V4L2_PIX_FMT_BGR666  v4l2_fourcc('B', 'G', 'R', 'H') /* 18  BGR-6-6-6     */
 1496 #define V4L2_PIX_FMT_BGR24   v4l2_fourcc('B', 'G', 'R', '3') /* 24  BGR-8-8-8     */
 1497 #define V4L2_PIX_FMT_RGB24   v4l2_fourcc('R', 'G', 'B', '3') /* 24  RGB-8-8-8     */
 1498 #define V4L2_PIX_FMT_BGR32   v4l2_fourcc('B', 'G', 'R', '4') /* 32  BGR-8-8-8-8   */
 1499 #define V4L2_PIX_FMT_ABGR32  v4l2_fourcc('A', 'R', '2', '4') /* 32  BGRA-8-8-8-8  */
 1500 #define V4L2_PIX_FMT_XBGR32  v4l2_fourcc('X', 'R', '2', '4') /* 32  BGRX-8-8-8-8  */
 1501 #define V4L2_PIX_FMT_RGB32   v4l2_fourcc('R', 'G', 'B', '4') /* 32  RGB-8-8-8-8   */
 1502 #define V4L2_PIX_FMT_ARGB32  v4l2_fourcc('B', 'A', '2', '4') /* 32  ARGB-8-8-8-8  */
 1503 #define V4L2_PIX_FMT_XRGB32  v4l2_fourcc('B', 'X', '2', '4') /* 32  XRGB-8-8-8-8  */
 1504 
 1505 /* Grey formats */
 1506 #define V4L2_PIX_FMT_GREY    v4l2_fourcc('G', 'R', 'E', 'Y') /*  8  Greyscale     */
 1507 #define V4L2_PIX_FMT_Y4      v4l2_fourcc('Y', '', '4', ' ') /*  4  Greyscale     */
 1508 #define V4L2_PIX_FMT_Y6      v4l2_fourcc('Y', '', '6', ' ') /*  6  Greyscale     */
 1509 #define V4L2_PIX_FMT_Y10     v4l2_fourcc('Y', '1', '', ' ') /* 10  Greyscale     */
 1510 #define V4L2_PIX_FMT_Y12     v4l2_fourcc('Y', '1', '2', ' ') /* 12  Greyscale     */
 1511 #define V4L2_PIX_FMT_Y16     v4l2_fourcc('Y', '1', '6', ' ') /* 16  Greyscale     */
 1512 #define V4L2_PIX_FMT_Y16_BE  v4l2_fourcc_be('Y', '1', '6', ' ') /* 16  Greyscale BE  */
 1513 
 1514 /* Grey bit-packed formats */
 1515 #define V4L2_PIX_FMT_Y10BPACK    v4l2_fourcc('Y', '1', '', 'B') /* 10  Greyscale bit-packed */
 1516 
 1517 /* Palette formats */
 1518 #define V4L2_PIX_FMT_PAL8    v4l2_fourcc('P', 'A', 'L', '8') /*  8  8-bit palette */
 1519 
 1520 /* Chrominance formats */
 1521 #define V4L2_PIX_FMT_UV8     v4l2_fourcc('U', 'V', '8', ' ') /*  8  UV 4:4 */
 1522 
 1523 /* Luminance+Chrominance formats */
 1524 #define V4L2_PIX_FMT_YUYV    v4l2_fourcc('Y', 'U', 'Y', 'V') /* 16  YUV 4:2:2     */
 1525 #define V4L2_PIX_FMT_YYUV    v4l2_fourcc('Y', 'Y', 'U', 'V') /* 16  YUV 4:2:2     */
 1526 #define V4L2_PIX_FMT_YVYU    v4l2_fourcc('Y', 'V', 'Y', 'U') /* 16 YVU 4:2:2 */
 1527 #define V4L2_PIX_FMT_UYVY    v4l2_fourcc('U', 'Y', 'V', 'Y') /* 16  YUV 4:2:2     */
 1528 #define V4L2_PIX_FMT_VYUY    v4l2_fourcc('V', 'Y', 'U', 'Y') /* 16  YUV 4:2:2     */
 1529 #define V4L2_PIX_FMT_Y41P    v4l2_fourcc('Y', '4', '1', 'P') /* 12  YUV 4:1:1     */
 1530 #define V4L2_PIX_FMT_YUV444  v4l2_fourcc('Y', '4', '4', '4') /* 16  xxxxyyyy uuuuvvvv */
 1531 #define V4L2_PIX_FMT_YUV555  v4l2_fourcc('Y', 'U', 'V', 'O') /* 16  YUV-5-5-5     */
 1532 #define V4L2_PIX_FMT_YUV565  v4l2_fourcc('Y', 'U', 'V', 'P') /* 16  YUV-5-6-5     */
 1533 #define V4L2_PIX_FMT_YUV32   v4l2_fourcc('Y', 'U', 'V', '4') /* 32  YUV-8-8-8-8   */
 1534 #define V4L2_PIX_FMT_HI240   v4l2_fourcc('H', 'I', '2', '4') /*  8  8-bit color   */
 1535 #define V4L2_PIX_FMT_HM12    v4l2_fourcc('H', 'M', '1', '2') /*  8  YUV 4:2:0 16x16 macroblocks */
 1536 #define V4L2_PIX_FMT_M420    v4l2_fourcc('M', '4', '2', '') /* 12  YUV 4:2:0 2 lines y, 1 line uv interleaved */
 1537 
 1538 /* two planes -- one Y, one Cr + Cb interleaved  */
 1539 #define V4L2_PIX_FMT_NV12    v4l2_fourcc('N', 'V', '1', '2') /* 12  Y/CbCr 4:2:0  */
 1540 #define V4L2_PIX_FMT_NV21    v4l2_fourcc('N', 'V', '2', '1') /* 12  Y/CrCb 4:2:0  */
 1541 #define V4L2_PIX_FMT_NV16    v4l2_fourcc('N', 'V', '1', '6') /* 16  Y/CbCr 4:2:2  */
 1542 #define V4L2_PIX_FMT_NV61    v4l2_fourcc('N', 'V', '6', '1') /* 16  Y/CrCb 4:2:2  */
 1543 #define V4L2_PIX_FMT_NV24    v4l2_fourcc('N', 'V', '2', '4') /* 24  Y/CbCr 4:4:4  */
 1544 #define V4L2_PIX_FMT_NV42    v4l2_fourcc('N', 'V', '4', '2') /* 24  Y/CrCb 4:4:4  */
 1545 
 1546 /* two non contiguous planes - one Y, one Cr + Cb interleaved  */
 1547 #define V4L2_PIX_FMT_NV12M   v4l2_fourcc('N', 'M', '1', '2') /* 12  Y/CbCr 4:2:0  */
 1548 #define V4L2_PIX_FMT_NV21M   v4l2_fourcc('N', 'M', '2', '1') /* 21  Y/CrCb 4:2:0  */
 1549 #define V4L2_PIX_FMT_NV16M   v4l2_fourcc('N', 'M', '1', '6') /* 16  Y/CbCr 4:2:2  */
 1550 #define V4L2_PIX_FMT_NV61M   v4l2_fourcc('N', 'M', '6', '1') /* 16  Y/CrCb 4:2:2  */
 1551 #define V4L2_PIX_FMT_NV12MT  v4l2_fourcc('T', 'M', '1', '2') /* 12  Y/CbCr 4:2:0 64x32 macroblocks */
 1552 #define V4L2_PIX_FMT_NV12MT_16X16 v4l2_fourcc('V', 'M', '1', '2') /* 12  Y/CbCr 4:2:0 16x16 macroblocks */
 1553 
 1554 /* three planes - Y Cb, Cr */
 1555 #define V4L2_PIX_FMT_YUV410  v4l2_fourcc('Y', 'U', 'V', '9') /*  9  YUV 4:1:0     */
 1556 #define V4L2_PIX_FMT_YVU410  v4l2_fourcc('Y', 'V', 'U', '9') /*  9  YVU 4:1:0     */
 1557 #define V4L2_PIX_FMT_YUV411P v4l2_fourcc('4', '1', '1', 'P') /* 12  YVU411 planar */
 1558 #define V4L2_PIX_FMT_YUV420  v4l2_fourcc('Y', 'U', '1', '2') /* 12  YUV 4:2:0     */
 1559 #define V4L2_PIX_FMT_YVU420  v4l2_fourcc('Y', 'V', '1', '2') /* 12  YVU 4:2:0     */
 1560 #define V4L2_PIX_FMT_YUV422P v4l2_fourcc('4', '2', '2', 'P') /* 16  YVU422 planar */
 1561 
 1562 /* three non contiguous planes - Y, Cb, Cr */
 1563 #define V4L2_PIX_FMT_YUV420M v4l2_fourcc('Y', 'M', '1', '2') /* 12  YUV420 planar */
 1564 #define V4L2_PIX_FMT_YVU420M v4l2_fourcc('Y', 'M', '2', '1') /* 12  YVU420 planar */
 1565 #define V4L2_PIX_FMT_YUV422M v4l2_fourcc('Y', 'M', '1', '6') /* 16  YUV422 planar */
 1566 #define V4L2_PIX_FMT_YVU422M v4l2_fourcc('Y', 'M', '6', '1') /* 16  YVU422 planar */
 1567 #define V4L2_PIX_FMT_YUV444M v4l2_fourcc('Y', 'M', '2', '4') /* 24  YUV444 planar */
 1568 #define V4L2_PIX_FMT_YVU444M v4l2_fourcc('Y', 'M', '4', '2') /* 24  YVU444 planar */
 1569 
 1570 /* Bayer formats - see http://www.siliconimaging.com/RGB%20Bayer.htm */
 1571 #define V4L2_PIX_FMT_SBGGR8  v4l2_fourcc('B', 'A', '8', '1') /*  8  BGBG.. GRGR.. */
 1572 #define V4L2_PIX_FMT_SGBRG8  v4l2_fourcc('G', 'B', 'R', 'G') /*  8  GBGB.. RGRG.. */
 1573 #define V4L2_PIX_FMT_SGRBG8  v4l2_fourcc('G', 'R', 'B', 'G') /*  8  GRGR.. BGBG.. */
 1574 #define V4L2_PIX_FMT_SRGGB8  v4l2_fourcc('R', 'G', 'G', 'B') /*  8  RGRG.. GBGB.. */
 1575 #define V4L2_PIX_FMT_SBGGR10 v4l2_fourcc('B', 'G', '1', '') /* 10  BGBG.. GRGR.. */
 1576 #define V4L2_PIX_FMT_SGBRG10 v4l2_fourcc('G', 'B', '1', '') /* 10  GBGB.. RGRG.. */
 1577 #define V4L2_PIX_FMT_SGRBG10 v4l2_fourcc('B', 'A', '1', '') /* 10  GRGR.. BGBG.. */
 1578 #define V4L2_PIX_FMT_SRGGB10 v4l2_fourcc('R', 'G', '1', '') /* 10  RGRG.. GBGB.. */
 1579         /* 10bit raw bayer packed, 5 bytes for every 4 pixels */
 1580 #define V4L2_PIX_FMT_SBGGR10P v4l2_fourcc('p', 'B', 'A', 'A')
 1581 #define V4L2_PIX_FMT_SGBRG10P v4l2_fourcc('p', 'G', 'A', 'A')
 1582 #define V4L2_PIX_FMT_SGRBG10P v4l2_fourcc('p', 'g', 'A', 'A')
 1583 #define V4L2_PIX_FMT_SRGGB10P v4l2_fourcc('p', 'R', 'A', 'A')
 1584         /* 10bit raw bayer a-law compressed to 8 bits */
 1585 #define V4L2_PIX_FMT_SBGGR10ALAW8 v4l2_fourcc('a', 'B', 'A', '8')
 1586 #define V4L2_PIX_FMT_SGBRG10ALAW8 v4l2_fourcc('a', 'G', 'A', '8')
 1587 #define V4L2_PIX_FMT_SGRBG10ALAW8 v4l2_fourcc('a', 'g', 'A', '8')
 1588 #define V4L2_PIX_FMT_SRGGB10ALAW8 v4l2_fourcc('a', 'R', 'A', '8')
 1589         /* 10bit raw bayer DPCM compressed to 8 bits */
 1590 #define V4L2_PIX_FMT_SBGGR10DPCM8 v4l2_fourcc('b', 'B', 'A', '8')
 1591 #define V4L2_PIX_FMT_SGBRG10DPCM8 v4l2_fourcc('b', 'G', 'A', '8')
 1592 #define V4L2_PIX_FMT_SGRBG10DPCM8 v4l2_fourcc('B', 'D', '1', '')
 1593 #define V4L2_PIX_FMT_SRGGB10DPCM8 v4l2_fourcc('b', 'R', 'A', '8')
 1594 #define V4L2_PIX_FMT_SBGGR12 v4l2_fourcc('B', 'G', '1', '2') /* 12  BGBG.. GRGR.. */
 1595 #define V4L2_PIX_FMT_SGBRG12 v4l2_fourcc('G', 'B', '1', '2') /* 12  GBGB.. RGRG.. */
 1596 #define V4L2_PIX_FMT_SGRBG12 v4l2_fourcc('B', 'A', '1', '2') /* 12  GRGR.. BGBG.. */
 1597 #define V4L2_PIX_FMT_SRGGB12 v4l2_fourcc('R', 'G', '1', '2') /* 12  RGRG.. GBGB.. */
 1598 #define V4L2_PIX_FMT_SBGGR16 v4l2_fourcc('B', 'Y', 'R', '2') /* 16  BGBG.. GRGR.. */
 1599 #define V4L2_PIX_FMT_SGBRG16 v4l2_fourcc('G', 'B', '1', '6') /* 16  GBGB.. RGRG.. */
 1600 #define V4L2_PIX_FMT_SGRBG16 v4l2_fourcc('G', 'R', '1', '6') /* 16  GRGR.. BGBG.. */
 1601 #define V4L2_PIX_FMT_SRGGB16 v4l2_fourcc('R', 'G', '1', '6') /* 16  RGRG.. GBGB.. */
 1602 
 1603 /* HSV formats */
 1604 #define V4L2_PIX_FMT_HSV24 v4l2_fourcc('H', 'S', 'V', '3')
 1605 #define V4L2_PIX_FMT_HSV32 v4l2_fourcc('H', 'S', 'V', '4')
 1606 
 1607 /* compressed formats */
 1608 #define V4L2_PIX_FMT_MJPEG    v4l2_fourcc('M', 'J', 'P', 'G') /* Motion-JPEG   */
 1609 #define V4L2_PIX_FMT_JPEG     v4l2_fourcc('J', 'P', 'E', 'G') /* JFIF JPEG     */
 1610 #define V4L2_PIX_FMT_DV       v4l2_fourcc('d', 'v', 's', 'd') /* 1394          */
 1611 #define V4L2_PIX_FMT_MPEG     v4l2_fourcc('M', 'P', 'E', 'G') /* MPEG-1/2/4 Multiplexed */
 1612 #define V4L2_PIX_FMT_H264     v4l2_fourcc('H', '2', '6', '4') /* H264 with start codes */
 1613 #define V4L2_PIX_FMT_H264_NO_SC v4l2_fourcc('A', 'V', 'C', '1') /* H264 without start codes */
 1614 #define V4L2_PIX_FMT_H264_MVC v4l2_fourcc('M', '2', '6', '4') /* H264 MVC */
 1615 #define V4L2_PIX_FMT_H263     v4l2_fourcc('H', '2', '6', '3') /* H263          */
 1616 #define V4L2_PIX_FMT_MPEG1    v4l2_fourcc('M', 'P', 'G', '1') /* MPEG-1 ES     */
 1617 #define V4L2_PIX_FMT_MPEG2    v4l2_fourcc('M', 'P', 'G', '2') /* MPEG-2 ES     */
 1618 #define V4L2_PIX_FMT_MPEG4    v4l2_fourcc('M', 'P', 'G', '4') /* MPEG-4 part 2 ES */
 1619 #define V4L2_PIX_FMT_XVID     v4l2_fourcc('X', 'V', 'I', 'D') /* Xvid           */
 1620 #define V4L2_PIX_FMT_VC1_ANNEX_G v4l2_fourcc('V', 'C', '1', 'G') /* SMPTE 421M Annex G compliant stream */
 1621 #define V4L2_PIX_FMT_VC1_ANNEX_L v4l2_fourcc('V', 'C', '1', 'L') /* SMPTE 421M Annex L compliant stream */
 1622 #define V4L2_PIX_FMT_VP8      v4l2_fourcc('V', 'P', '8', '') /* VP8 */
 1623 #define V4L2_PIX_FMT_VP9      v4l2_fourcc('V', 'P', '9', '') /* VP9 */
 1624 
 1625 /*  Vendor-specific formats   */
 1626 #define V4L2_PIX_FMT_CPIA1    v4l2_fourcc('C', 'P', 'I', 'A') /* cpia1 YUV */
 1627 #define V4L2_PIX_FMT_WNVA     v4l2_fourcc('W', 'N', 'V', 'A') /* Winnov hw compress */
 1628 #define V4L2_PIX_FMT_SN9C10X  v4l2_fourcc('S', '9', '1', '') /* SN9C10x compression */
 1629 #define V4L2_PIX_FMT_SN9C20X_I420 v4l2_fourcc('S', '9', '2', '') /* SN9C20x YUV 4:2:0 */
 1630 #define V4L2_PIX_FMT_PWC1     v4l2_fourcc('P', 'W', 'C', '1') /* pwc older webcam */
 1631 #define V4L2_PIX_FMT_PWC2     v4l2_fourcc('P', 'W', 'C', '2') /* pwc newer webcam */
 1632 #define V4L2_PIX_FMT_ET61X251 v4l2_fourcc('E', '6', '2', '5') /* ET61X251 compression */
 1633 #define V4L2_PIX_FMT_SPCA501  v4l2_fourcc('S', '5', '', '1') /* YUYV per line */
 1634 #define V4L2_PIX_FMT_SPCA505  v4l2_fourcc('S', '5', '', '5') /* YYUV per line */
 1635 #define V4L2_PIX_FMT_SPCA508  v4l2_fourcc('S', '5', '', '8') /* YUVY per line */
 1636 #define V4L2_PIX_FMT_SPCA561  v4l2_fourcc('S', '5', '6', '1') /* compressed GBRG bayer */
 1637 #define V4L2_PIX_FMT_PAC207   v4l2_fourcc('P', '2', '', '7') /* compressed BGGR bayer */
 1638 #define V4L2_PIX_FMT_MR97310A v4l2_fourcc('M', '3', '1', '') /* compressed BGGR bayer */
 1639 #define V4L2_PIX_FMT_JL2005BCD v4l2_fourcc('J', 'L', '2', '') /* compressed RGGB bayer */
 1640 #define V4L2_PIX_FMT_SN9C2028 v4l2_fourcc('S', 'O', 'N', 'X') /* compressed GBRG bayer */
 1641 #define V4L2_PIX_FMT_SQ905C   v4l2_fourcc('9', '', '5', 'C') /* compressed RGGB bayer */
 1642 #define V4L2_PIX_FMT_PJPG     v4l2_fourcc('P', 'J', 'P', 'G') /* Pixart 73xx JPEG */
 1643 #define V4L2_PIX_FMT_OV511    v4l2_fourcc('O', '5', '1', '1') /* ov511 JPEG */
 1644 #define V4L2_PIX_FMT_OV518    v4l2_fourcc('O', '5', '1', '8') /* ov518 JPEG */
 1645 #define V4L2_PIX_FMT_STV0680  v4l2_fourcc('S', '6', '8', '') /* stv0680 bayer */
 1646 #define V4L2_PIX_FMT_TM6000   v4l2_fourcc('T', 'M', '6', '') /* tm5600/tm60x0 */
 1647 #define V4L2_PIX_FMT_CIT_YYVYUY v4l2_fourcc('C', 'I', 'T', 'V') /* one line of Y then 1 line of VYUY */
 1648 #define V4L2_PIX_FMT_KONICA420  v4l2_fourcc('K', 'O', 'N', 'I') /* YUV420 planar in blocks of 256 pixels */
 1649 #define V4L2_PIX_FMT_JPGL       v4l2_fourcc('J', 'P', 'G', 'L') /* JPEG-Lite */
 1650 #define V4L2_PIX_FMT_SE401      v4l2_fourcc('S', '4', '', '1') /* se401 janggu compressed rgb */
 1651 #define V4L2_PIX_FMT_S5C_UYVY_JPG v4l2_fourcc('S', '5', 'C', 'I') /* S5C73M3 interleaved UYVY/JPEG */
 1652 #define V4L2_PIX_FMT_Y8I      v4l2_fourcc('Y', '8', 'I', ' ') /* Greyscale 8-bit L/R interleaved */
 1653 #define V4L2_PIX_FMT_Y12I     v4l2_fourcc('Y', '1', '2', 'I') /* Greyscale 12-bit L/R interleaved */
 1654 #define V4L2_PIX_FMT_Z16      v4l2_fourcc('Z', '1', '6', ' ') /* Depth data 16-bit */
 1655 #define V4L2_PIX_FMT_MT21C    v4l2_fourcc('M', 'T', '2', '1') /* Mediatek compressed block mode  */
 1656 
 1657 /* SDR formats - used only for Software Defined Radio devices */
 1658 #define V4L2_SDR_FMT_CU8          v4l2_fourcc('C', 'U', '', '8') /* IQ u8 */
 1659 #define V4L2_SDR_FMT_CU16LE       v4l2_fourcc('C', 'U', '1', '6') /* IQ u16le */
 1660 #define V4L2_SDR_FMT_CS8          v4l2_fourcc('C', 'S', '', '8') /* complex s8 */
 1661 #define V4L2_SDR_FMT_CS14LE       v4l2_fourcc('C', 'S', '1', '4') /* complex s14le */
 1662 #define V4L2_SDR_FMT_RU12LE       v4l2_fourcc('R', 'U', '1', '2') /* real u12le */
 1663 
 1664 /* Touch formats - used for Touch devices */
 1665 #define V4L2_TCH_FMT_DELTA_TD16 v4l2_fourcc('T', 'D', '1', '6') /* 16-bit signed deltas */
 1666 #define V4L2_TCH_FMT_DELTA_TD08 v4l2_fourcc('T', 'D', '', '8') /* 8-bit signed deltas */
 1667 #define V4L2_TCH_FMT_TU16       v4l2_fourcc('T', 'U', '1', '6') /* 16-bit unsigned touch data */
 1668 #define V4L2_TCH_FMT_TU08       v4l2_fourcc('T', 'U', '', '8') /* 8-bit unsigned touch data */
 1669 
 1670 /* priv field value to indicates that subsequent fields are valid. */
 1671 #define V4L2_PIX_FMT_PRIV_MAGIC         0xfeedcafe
 1672 
 1673 /* Flags */
 1674 #define V4L2_PIX_FMT_FLAG_PREMUL_ALPHA  0x00000001
 1675 
 1676 /*
 1677  *      F O R M A T   E N U M E R A T I O N
 1678  */
 1679 struct v4l2_fmtdesc {
 1680         u_int32_t                   index;             /* Format number      */
 1681         u_int32_t                   type;              /* enum v4l2_buf_type */
 1682         u_int32_t               flags;
 1683         u_int8_t                    description[32];   /* Description string */
 1684         u_int32_t                   pixelformat;       /* Format fourcc      */
 1685         u_int32_t                   reserved[4];
 1686 };
 1687 
 1688 #define V4L2_FMT_FLAG_COMPRESSED 0x0001
 1689 #define V4L2_FMT_FLAG_EMULATED   0x0002
 1690 
 1691         /* Frame Size and frame rate enumeration */
 1692 /*
 1693  *      F R A M E   S I Z E   E N U M E R A T I O N
 1694  */
 1695 enum v4l2_frmsizetypes {
 1696         V4L2_FRMSIZE_TYPE_DISCRETE      = 1,
 1697         V4L2_FRMSIZE_TYPE_CONTINUOUS    = 2,
 1698         V4L2_FRMSIZE_TYPE_STEPWISE      = 3,
 1699 };
 1700 
 1701 struct v4l2_frmsize_discrete {
 1702         u_int32_t                       width;          /* Frame width [pixel] */
 1703         u_int32_t                       height;         /* Frame height [pixel] */
 1704 };
 1705 
 1706 struct v4l2_frmsize_stepwise {
 1707         u_int32_t                       min_width;      /* Minimum frame width [pixel] */
 1708         u_int32_t                       max_width;      /* Maximum frame width [pixel] */
 1709         u_int32_t                       step_width;     /* Frame width step size [pixel] */
 1710         u_int32_t                       min_height;     /* Minimum frame height [pixel] */
 1711         u_int32_t                       max_height;     /* Maximum frame height [pixel] */
 1712         u_int32_t                       step_height;    /* Frame height step size [pixel] */
 1713 };
 1714 
 1715 struct v4l2_frmsizeenum {
 1716         u_int32_t                       index;          /* Frame size number */
 1717         u_int32_t                       pixel_format;   /* Pixel format */
 1718         u_int32_t                       type;           /* Frame size type the device supports. */
 1719 
 1720         union {                                 /* Frame size */
 1721                 struct v4l2_frmsize_discrete    discrete;
 1722                 struct v4l2_frmsize_stepwise    stepwise;
 1723         };
 1724 
 1725         u_int32_t   reserved[2];                        /* Reserved space for future use */
 1726 };
 1727 
 1728 /*
 1729  *      F R A M E   R A T E   E N U M E R A T I O N
 1730  */
 1731 enum v4l2_frmivaltypes {
 1732         V4L2_FRMIVAL_TYPE_DISCRETE      = 1,
 1733         V4L2_FRMIVAL_TYPE_CONTINUOUS    = 2,
 1734         V4L2_FRMIVAL_TYPE_STEPWISE      = 3,
 1735 };
 1736 
 1737 struct v4l2_frmival_stepwise {
 1738         struct v4l2_fract       min;            /* Minimum frame interval [s] */
 1739         struct v4l2_fract       max;            /* Maximum frame interval [s] */
 1740         struct v4l2_fract       step;           /* Frame interval step size [s] */
 1741 };
 1742 
 1743 struct v4l2_frmivalenum {
 1744         u_int32_t                       index;          /* Frame format index */
 1745         u_int32_t                       pixel_format;   /* Pixel format */
 1746         u_int32_t                       width;          /* Frame width */
 1747         u_int32_t                       height;         /* Frame height */
 1748         u_int32_t                       type;           /* Frame interval type the device supports. */
 1749 
 1750         union {                                 /* Frame interval */
 1751                 struct v4l2_fract               discrete;
 1752                 struct v4l2_frmival_stepwise    stepwise;
 1753         };
 1754 
 1755         u_int32_t       reserved[2];                    /* Reserved space for future use */
 1756 };
 1757 
 1758 /*
 1759  *      T I M E C O D E
 1760  */
 1761 struct v4l2_timecode {
 1762         u_int32_t       type;
 1763         u_int32_t       flags;
 1764         u_int8_t        frames;
 1765         u_int8_t        seconds;
 1766         u_int8_t        minutes;
 1767         u_int8_t        hours;
 1768         u_int8_t        userbits[4];
 1769 };
 1770 
 1771 /*  Type  */
 1772 #define V4L2_TC_TYPE_24FPS              1
 1773 #define V4L2_TC_TYPE_25FPS              2
 1774 #define V4L2_TC_TYPE_30FPS              3
 1775 #define V4L2_TC_TYPE_50FPS              4
 1776 #define V4L2_TC_TYPE_60FPS              5
 1777 
 1778 /*  Flags  */
 1779 #define V4L2_TC_FLAG_DROPFRAME          0x0001 /* "drop-frame" mode */
 1780 #define V4L2_TC_FLAG_COLORFRAME         0x0002
 1781 #define V4L2_TC_USERBITS_field          0x000C
 1782 #define V4L2_TC_USERBITS_USERDEFINED    0x0000
 1783 #define V4L2_TC_USERBITS_8BITCHARS      0x0008
 1784 /* The above is based on SMPTE timecodes */
 1785 
 1786 struct v4l2_jpegcompression {
 1787         int quality;
 1788 
 1789         int  APPn;              /* Number of APP segment to be written,
 1790                                  * must be 0..15 */
 1791         int  APP_len;           /* Length of data in JPEG APPn segment */
 1792         char APP_data[60];      /* Data in the JPEG APPn segment. */
 1793 
 1794         int  COM_len;           /* Length of data in JPEG COM segment */
 1795         char COM_data[60];      /* Data in JPEG COM segment */
 1796 
 1797         u_int32_t jpeg_markers;     /* Which markers should go into the JPEG
 1798                                  * output. Unless you exactly know what
 1799                                  * you do, leave them untouched.
 1800                                  * Including less markers will make the
 1801                                  * resulting code smaller, but there will
 1802                                  * be fewer applications which can read it.
 1803                                  * The presence of the APP and COM marker
 1804                                  * is influenced by APP_len and COM_len
 1805                                  * ONLY, not by this property! */
 1806 
 1807 #define V4L2_JPEG_MARKER_DHT (1<<3)    /* Define Huffman Tables */
 1808 #define V4L2_JPEG_MARKER_DQT (1<<4)    /* Define Quantization Tables */
 1809 #define V4L2_JPEG_MARKER_DRI (1<<5)    /* Define Restart Interval */
 1810 #define V4L2_JPEG_MARKER_COM (1<<6)    /* Comment segment */
 1811 #define V4L2_JPEG_MARKER_APP (1<<7)    /* App segment, driver will
 1812                                         * always use APP0 */
 1813 };
 1814 
 1815 /*
 1816  *      M E M O R Y - M A P P I N G   B U F F E R S
 1817  */
 1818 struct v4l2_requestbuffers {
 1819         u_int32_t                       count;
 1820         u_int32_t                       type;           /* enum v4l2_buf_type */
 1821         u_int32_t                       memory;         /* enum v4l2_memory */
 1822         u_int32_t                       reserved[2];
 1823 };
 1824 
 1825 /**
 1826  * struct v4l2_plane - plane info for multi-planar buffers
 1827  * @bytesused:          number of bytes occupied by data in the plane (payload)
 1828  * @length:             size of this plane (NOT the payload) in bytes
 1829  * @mem_offset:         when memory in the associated struct v4l2_buffer is
 1830  *                      V4L2_MEMORY_MMAP, equals the offset from the start of
 1831  *                      the device memory for this plane (or is a "cookie" that
 1832  *                      should be passed to mmap() called on the video node)
 1833  * @userptr:            when memory is V4L2_MEMORY_USERPTR, a userspace pointer
 1834  *                      pointing to this plane
 1835  * @fd:                 when memory is V4L2_MEMORY_DMABUF, a userspace file
 1836  *                      descriptor associated with this plane
 1837  * @data_offset:        offset in the plane to the start of data; usually 0,
 1838  *                      unless there is a header in front of the data
 1839  *
 1840  * Multi-planar buffers consist of one or more planes, e.g. an YCbCr buffer
 1841  * with two planes can have one plane for Y, and another for interleaved CbCr
 1842  * components. Each plane can reside in a separate memory buffer, or even in
 1843  * a completely separate memory node (e.g. in embedded devices).
 1844  */
 1845 struct v4l2_plane {
 1846         u_int32_t                       bytesused;
 1847         u_int32_t                       length;
 1848         union {
 1849                 u_int32_t               mem_offset;
 1850                 unsigned long   userptr;
 1851                 int32_t         fd;
 1852         } m;
 1853         u_int32_t                       data_offset;
 1854         u_int32_t                       reserved[11];
 1855 };
 1856 
 1857 /**
 1858  * struct v4l2_buffer - video buffer info
 1859  * @index:      id number of the buffer
 1860  * @type:       enum v4l2_buf_type; buffer type (type == *_MPLANE for
 1861  *              multiplanar buffers);
 1862  * @bytesused:  number of bytes occupied by data in the buffer (payload);
 1863  *              unused (set to 0) for multiplanar buffers
 1864  * @flags:      buffer informational flags
 1865  * @field:      enum v4l2_field; field order of the image in the buffer
 1866  * @timestamp:  frame timestamp
 1867  * @timecode:   frame timecode
 1868  * @sequence:   sequence count of this frame
 1869  * @memory:     enum v4l2_memory; the method, in which the actual video data is
 1870  *              passed
 1871  * @offset:     for non-multiplanar buffers with memory == V4L2_MEMORY_MMAP;
 1872  *              offset from the start of the device memory for this plane,
 1873  *              (or a "cookie" that should be passed to mmap() as offset)
 1874  * @userptr:    for non-multiplanar buffers with memory == V4L2_MEMORY_USERPTR;
 1875  *              a userspace pointer pointing to this buffer
 1876  * @fd:         for non-multiplanar buffers with memory == V4L2_MEMORY_DMABUF;
 1877  *              a userspace file descriptor associated with this buffer
 1878  * @planes:     for multiplanar buffers; userspace pointer to the array of plane
 1879  *              info structs for this buffer
 1880  * @length:     size in bytes of the buffer (NOT its payload) for single-plane
 1881  *              buffers (when type != *_MPLANE); number of elements in the
 1882  *              planes array for multi-plane buffers
 1883  *
 1884  * Contains data exchanged by application and driver using one of the Streaming
 1885  * I/O methods.
 1886  */
 1887 struct v4l2_buffer {
 1888         u_int32_t                       index;
 1889         u_int32_t                       type;
 1890         u_int32_t                       bytesused;
 1891         u_int32_t                       flags;
 1892         u_int32_t                       field;
 1893         struct timeval          timestamp;
 1894         struct v4l2_timecode    timecode;
 1895         u_int32_t                       sequence;
 1896 
 1897         /* memory location */
 1898         u_int32_t                       memory;
 1899         union {
 1900                 u_int32_t           offset;
 1901                 unsigned long   userptr;
 1902                 struct v4l2_plane *planes;
 1903                 int32_t         fd;
 1904         } m;
 1905         u_int32_t                       length;
 1906         u_int32_t                       reserved2;
 1907         u_int32_t                       reserved;
 1908 };
 1909 
 1910 /*  Flags for 'flags' field */
 1911 /* Buffer is mapped (flag) */
 1912 #define V4L2_BUF_FLAG_MAPPED                    0x00000001
 1913 /* Buffer is queued for processing */
 1914 #define V4L2_BUF_FLAG_QUEUED                    0x00000002
 1915 /* Buffer is ready */
 1916 #define V4L2_BUF_FLAG_DONE                      0x00000004
 1917 /* Image is a keyframe (I-frame) */
 1918 #define V4L2_BUF_FLAG_KEYFRAME                  0x00000008
 1919 /* Image is a P-frame */
 1920 #define V4L2_BUF_FLAG_PFRAME                    0x00000010
 1921 /* Image is a B-frame */
 1922 #define V4L2_BUF_FLAG_BFRAME                    0x00000020
 1923 /* Buffer is ready, but the data contained within is corrupted. */
 1924 #define V4L2_BUF_FLAG_ERROR                     0x00000040
 1925 /* timecode field is valid */
 1926 #define V4L2_BUF_FLAG_TIMECODE                  0x00000100
 1927 /* Buffer is prepared for queuing */
 1928 #define V4L2_BUF_FLAG_PREPARED                  0x00000400
 1929 /* Cache handling flags */
 1930 #define V4L2_BUF_FLAG_NO_CACHE_INVALIDATE       0x00000800
 1931 #define V4L2_BUF_FLAG_NO_CACHE_CLEAN            0x00001000
 1932 /* Timestamp type */
 1933 #define V4L2_BUF_FLAG_TIMESTAMP_MASK            0x0000e000
 1934 #define V4L2_BUF_FLAG_TIMESTAMP_UNKNOWN         0x00000000
 1935 #define V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC       0x00002000
 1936 #define V4L2_BUF_FLAG_TIMESTAMP_COPY            0x00004000
 1937 /* Timestamp sources. */
 1938 #define V4L2_BUF_FLAG_TSTAMP_SRC_MASK           0x00070000
 1939 #define V4L2_BUF_FLAG_TSTAMP_SRC_EOF            0x00000000
 1940 #define V4L2_BUF_FLAG_TSTAMP_SRC_SOE            0x00010000
 1941 /* mem2mem encoder/decoder */
 1942 #define V4L2_BUF_FLAG_LAST                      0x00100000
 1943 
 1944 /**
 1945  * struct v4l2_exportbuffer - export of video buffer as DMABUF file descriptor
 1946  *
 1947  * @index:      id number of the buffer
 1948  * @type:       enum v4l2_buf_type; buffer type (type == *_MPLANE for
 1949  *              multiplanar buffers);
 1950  * @plane:      index of the plane to be exported, 0 for single plane queues
 1951  * @flags:      flags for newly created file, currently only O_CLOEXEC is
 1952  *              supported, refer to manual of open syscall for more details
 1953  * @fd:         file descriptor associated with DMABUF (set by driver)
 1954  *
 1955  * Contains data used for exporting a video buffer as DMABUF file descriptor.
 1956  * The buffer is identified by a 'cookie' returned by VIDIOC_QUERYBUF
 1957  * (identical to the cookie used to mmap() the buffer to userspace). All
 1958  * reserved fields must be set to zero. The field reserved0 is expected to
 1959  * become a structure 'type' allowing an alternative layout of the structure
 1960  * content. Therefore this field should not be used for any other extensions.
 1961  */
 1962 struct v4l2_exportbuffer {
 1963         u_int32_t               type; /* enum v4l2_buf_type */
 1964         u_int32_t               index;
 1965         u_int32_t               plane;
 1966         u_int32_t               flags;
 1967         int32_t         fd;
 1968         u_int32_t               reserved[11];
 1969 };
 1970 
 1971 /*
 1972  *      O V E R L A Y   P R E V I E W
 1973  */
 1974 struct v4l2_framebuffer {
 1975         u_int32_t                       capability;
 1976         u_int32_t                       flags;
 1977 /* FIXME: in theory we should pass something like PCI device + memory
 1978  * region + offset instead of some physical address */
 1979         void                    *base;
 1980         struct {
 1981                 u_int32_t               width;
 1982                 u_int32_t               height;
 1983                 u_int32_t               pixelformat;
 1984                 u_int32_t               field;          /* enum v4l2_field */
 1985                 u_int32_t               bytesperline;   /* for padding, zero if unused */
 1986                 u_int32_t               sizeimage;
 1987                 u_int32_t               colorspace;     /* enum v4l2_colorspace */
 1988                 u_int32_t               priv;           /* reserved field, set to 0 */
 1989         } fmt;
 1990 };
 1991 /*  Flags for the 'capability' field. Read only */
 1992 #define V4L2_FBUF_CAP_EXTERNOVERLAY     0x0001
 1993 #define V4L2_FBUF_CAP_CHROMAKEY         0x0002
 1994 #define V4L2_FBUF_CAP_LIST_CLIPPING     0x0004
 1995 #define V4L2_FBUF_CAP_BITMAP_CLIPPING   0x0008
 1996 #define V4L2_FBUF_CAP_LOCAL_ALPHA       0x0010
 1997 #define V4L2_FBUF_CAP_GLOBAL_ALPHA      0x0020
 1998 #define V4L2_FBUF_CAP_LOCAL_INV_ALPHA   0x0040
 1999 #define V4L2_FBUF_CAP_SRC_CHROMAKEY     0x0080
 2000 /*  Flags for the 'flags' field. */
 2001 #define V4L2_FBUF_FLAG_PRIMARY          0x0001
 2002 #define V4L2_FBUF_FLAG_OVERLAY          0x0002
 2003 #define V4L2_FBUF_FLAG_CHROMAKEY        0x0004
 2004 #define V4L2_FBUF_FLAG_LOCAL_ALPHA      0x0008
 2005 #define V4L2_FBUF_FLAG_GLOBAL_ALPHA     0x0010
 2006 #define V4L2_FBUF_FLAG_LOCAL_INV_ALPHA  0x0020
 2007 #define V4L2_FBUF_FLAG_SRC_CHROMAKEY    0x0040
 2008 
 2009 struct v4l2_clip {
 2010         struct v4l2_rect        c;
 2011         struct v4l2_clip        __user *next;
 2012 };
 2013 
 2014 struct v4l2_window {
 2015         struct v4l2_rect        w;
 2016         u_int32_t                       field;   /* enum v4l2_field */
 2017         u_int32_t                       chromakey;
 2018         struct v4l2_clip        __user *clips;
 2019         u_int32_t                       clipcount;
 2020         void                    __user *bitmap;
 2021         u_int8_t                    global_alpha;
 2022 };
 2023 
 2024 /*
 2025  *      C A P T U R E   P A R A M E T E R S
 2026  */
 2027 struct v4l2_captureparm {
 2028         u_int32_t                  capability;    /*  Supported modes */
 2029         u_int32_t                  capturemode;   /*  Current mode */
 2030         struct v4l2_fract  timeperframe;  /*  Time per frame in seconds */
 2031         u_int32_t                  extendedmode;  /*  Driver-specific extensions */
 2032         u_int32_t              readbuffers;   /*  # of buffers for read */
 2033         u_int32_t                  reserved[4];
 2034 };
 2035 
 2036 /*  Flags for 'capability' and 'capturemode' fields */
 2037 #define V4L2_MODE_HIGHQUALITY   0x0001  /*  High quality imaging mode */
 2038 #define V4L2_CAP_TIMEPERFRAME   0x1000  /*  timeperframe field is supported */
 2039 
 2040 struct v4l2_outputparm {
 2041         u_int32_t                  capability;   /*  Supported modes */
 2042         u_int32_t                  outputmode;   /*  Current mode */
 2043         struct v4l2_fract  timeperframe; /*  Time per frame in seconds */
 2044         u_int32_t                  extendedmode; /*  Driver-specific extensions */
 2045         u_int32_t              writebuffers; /*  # of buffers for write */
 2046         u_int32_t                  reserved[4];
 2047 };
 2048 
 2049 /*
 2050  *      I N P U T   I M A G E   C R O P P I N G
 2051  */
 2052 struct v4l2_cropcap {
 2053         u_int32_t                       type;   /* enum v4l2_buf_type */
 2054         struct v4l2_rect        bounds;
 2055         struct v4l2_rect        defrect;
 2056         struct v4l2_fract       pixelaspect;
 2057 };
 2058 
 2059 struct v4l2_crop {
 2060         u_int32_t                       type;   /* enum v4l2_buf_type */
 2061         struct v4l2_rect        c;
 2062 };
 2063 
 2064 /**
 2065  * struct v4l2_selection - selection info
 2066  * @type:       buffer type (do not use *_MPLANE types)
 2067  * @target:     Selection target, used to choose one of possible rectangles;
 2068  *              defined in v4l2-common.h; V4L2_SEL_TGT_* .
 2069  * @flags:      constraints flags, defined in v4l2-common.h; V4L2_SEL_FLAG_*.
 2070  * @r:          coordinates of selection window
 2071  * @reserved:   for future use, rounds structure size to 64 bytes, set to zero
 2072  *
 2073  * Hardware may use multiple helper windows to process a video stream.
 2074  * The structure is used to exchange this selection areas between
 2075  * an application and a driver.
 2076  */
 2077 struct v4l2_selection {
 2078         u_int32_t                       type;
 2079         u_int32_t                       target;
 2080         u_int32_t                   flags;
 2081         struct v4l2_rect        r;
 2082         u_int32_t                   reserved[9];
 2083 };
 2084 
 2085 
 2086 /*
 2087  *      A N A L O G   V I D E O   S T A N D A R D
 2088  */
 2089 
 2090 typedef u_int64_t v4l2_std_id;
 2091 
 2092 /* one bit for each */
 2093 #define V4L2_STD_PAL_B          ((v4l2_std_id)0x00000001)
 2094 #define V4L2_STD_PAL_B1         ((v4l2_std_id)0x00000002)
 2095 #define V4L2_STD_PAL_G          ((v4l2_std_id)0x00000004)
 2096 #define V4L2_STD_PAL_H          ((v4l2_std_id)0x00000008)
 2097 #define V4L2_STD_PAL_I          ((v4l2_std_id)0x00000010)
 2098 #define V4L2_STD_PAL_D          ((v4l2_std_id)0x00000020)
 2099 #define V4L2_STD_PAL_D1         ((v4l2_std_id)0x00000040)
 2100 #define V4L2_STD_PAL_K          ((v4l2_std_id)0x00000080)
 2101 
 2102 #define V4L2_STD_PAL_M          ((v4l2_std_id)0x00000100)
 2103 #define V4L2_STD_PAL_N          ((v4l2_std_id)0x00000200)
 2104 #define V4L2_STD_PAL_Nc         ((v4l2_std_id)0x00000400)
 2105 #define V4L2_STD_PAL_60         ((v4l2_std_id)0x00000800)
 2106 
 2107 #define V4L2_STD_NTSC_M         ((v4l2_std_id)0x00001000)       /* BTSC */
 2108 #define V4L2_STD_NTSC_M_JP      ((v4l2_std_id)0x00002000)       /* EIA-J */
 2109 #define V4L2_STD_NTSC_443       ((v4l2_std_id)0x00004000)
 2110 #define V4L2_STD_NTSC_M_KR      ((v4l2_std_id)0x00008000)       /* FM A2 */
 2111 
 2112 #define V4L2_STD_SECAM_B        ((v4l2_std_id)0x00010000)
 2113 #define V4L2_STD_SECAM_D        ((v4l2_std_id)0x00020000)
 2114 #define V4L2_STD_SECAM_G        ((v4l2_std_id)0x00040000)
 2115 #define V4L2_STD_SECAM_H        ((v4l2_std_id)0x00080000)
 2116 #define V4L2_STD_SECAM_K        ((v4l2_std_id)0x00100000)
 2117 #define V4L2_STD_SECAM_K1       ((v4l2_std_id)0x00200000)
 2118 #define V4L2_STD_SECAM_L        ((v4l2_std_id)0x00400000)
 2119 #define V4L2_STD_SECAM_LC       ((v4l2_std_id)0x00800000)
 2120 
 2121 /* ATSC/HDTV */
 2122 #define V4L2_STD_ATSC_8_VSB     ((v4l2_std_id)0x01000000)
 2123 #define V4L2_STD_ATSC_16_VSB    ((v4l2_std_id)0x02000000)
 2124 
 2125 /* FIXME:
 2126    Although std_id is 64 bits, there is an issue on PPC32 architecture that
 2127    makes switch(u_int64_t) to break. So, there's a hack on v4l2-common.c rounding
 2128    this value to 32 bits.
 2129    As, currently, the max value is for V4L2_STD_ATSC_16_VSB (30 bits wide),
 2130    it should work fine. However, if needed to add more than two standards,
 2131    v4l2-common.c should be fixed.
 2132  */
 2133 
 2134 /*
 2135  * Some macros to merge video standards in order to make live easier for the
 2136  * drivers and V4L2 applications
 2137  */
 2138 
 2139 /*
 2140  * "Common" NTSC/M - It should be noticed that V4L2_STD_NTSC_443 is
 2141  * Missing here.
 2142  */
 2143 #define V4L2_STD_NTSC           (V4L2_STD_NTSC_M        |\
 2144                                  V4L2_STD_NTSC_M_JP     |\
 2145                                  V4L2_STD_NTSC_M_KR)
 2146 /* Secam macros */
 2147 #define V4L2_STD_SECAM_DK       (V4L2_STD_SECAM_D       |\
 2148                                  V4L2_STD_SECAM_K       |\
 2149                                  V4L2_STD_SECAM_K1)
 2150 /* All Secam Standards */
 2151 #define V4L2_STD_SECAM          (V4L2_STD_SECAM_B       |\
 2152                                  V4L2_STD_SECAM_G       |\
 2153                                  V4L2_STD_SECAM_H       |\
 2154                                  V4L2_STD_SECAM_DK      |\
 2155                                  V4L2_STD_SECAM_L       |\
 2156                                  V4L2_STD_SECAM_LC)
 2157 /* PAL macros */
 2158 #define V4L2_STD_PAL_BG         (V4L2_STD_PAL_B         |\
 2159                                  V4L2_STD_PAL_B1        |\
 2160                                  V4L2_STD_PAL_G)
 2161 #define V4L2_STD_PAL_DK         (V4L2_STD_PAL_D         |\
 2162                                  V4L2_STD_PAL_D1        |\
 2163                                  V4L2_STD_PAL_K)
 2164 /*
 2165  * "Common" PAL - This macro is there to be compatible with the old
 2166  * V4L1 concept of "PAL": /BGDKHI.
 2167  * Several PAL standards are missing here: /M, /N and /Nc
 2168  */
 2169 #define V4L2_STD_PAL            (V4L2_STD_PAL_BG        |\
 2170                                  V4L2_STD_PAL_DK        |\
 2171                                  V4L2_STD_PAL_H         |\
 2172                                  V4L2_STD_PAL_I)
 2173 /* Chroma "agnostic" standards */
 2174 #define V4L2_STD_B              (V4L2_STD_PAL_B         |\
 2175                                  V4L2_STD_PAL_B1        |\
 2176                                  V4L2_STD_SECAM_B)
 2177 #define V4L2_STD_G              (V4L2_STD_PAL_G         |\
 2178                                  V4L2_STD_SECAM_G)
 2179 #define V4L2_STD_H              (V4L2_STD_PAL_H         |\
 2180                                  V4L2_STD_SECAM_H)
 2181 #define V4L2_STD_L              (V4L2_STD_SECAM_L       |\
 2182                                  V4L2_STD_SECAM_LC)
 2183 #define V4L2_STD_GH             (V4L2_STD_G             |\
 2184                                  V4L2_STD_H)
 2185 #define V4L2_STD_DK             (V4L2_STD_PAL_DK        |\
 2186                                  V4L2_STD_SECAM_DK)
 2187 #define V4L2_STD_BG             (V4L2_STD_B             |\
 2188                                  V4L2_STD_G)
 2189 #define V4L2_STD_MN             (V4L2_STD_PAL_M         |\
 2190                                  V4L2_STD_PAL_N         |\
 2191                                  V4L2_STD_PAL_Nc        |\
 2192                                  V4L2_STD_NTSC)
 2193 
 2194 /* Standards where MTS/BTSC stereo could be found */
 2195 #define V4L2_STD_MTS            (V4L2_STD_NTSC_M        |\
 2196                                  V4L2_STD_PAL_M         |\
 2197                                  V4L2_STD_PAL_N         |\
 2198                                  V4L2_STD_PAL_Nc)
 2199 
 2200 /* Standards for Countries with 60Hz Line frequency */
 2201 #define V4L2_STD_525_60         (V4L2_STD_PAL_M         |\
 2202                                  V4L2_STD_PAL_60        |\
 2203                                  V4L2_STD_NTSC          |\
 2204                                  V4L2_STD_NTSC_443)
 2205 /* Standards for Countries with 50Hz Line frequency */
 2206 #define V4L2_STD_625_50         (V4L2_STD_PAL           |\
 2207                                  V4L2_STD_PAL_N         |\
 2208                                  V4L2_STD_PAL_Nc        |\
 2209                                  V4L2_STD_SECAM)
 2210 
 2211 #define V4L2_STD_ATSC           (V4L2_STD_ATSC_8_VSB    |\
 2212                                  V4L2_STD_ATSC_16_VSB)
 2213 /* Macros with none and all analog standards */
 2214 #define V4L2_STD_UNKNOWN        0
 2215 #define V4L2_STD_ALL            (V4L2_STD_525_60        |\
 2216                                  V4L2_STD_625_50)
 2217 
 2218 struct v4l2_standard {
 2219         u_int32_t                    index;
 2220         v4l2_std_id          id;
 2221         u_int8_t                     name[24];
 2222         struct v4l2_fract    frameperiod; /* Frames, not fields */
 2223         u_int32_t                    framelines;
 2224         u_int32_t                    reserved[4];
 2225 };
 2226 
 2227 /*
 2228  *      D V     B T     T I M I N G S
 2229  */
 2230 
 2231 /** struct v4l2_bt_timings - BT.656/BT.1120 timing data
 2232  * @width:      total width of the active video in pixels
 2233  * @height:     total height of the active video in lines
 2234  * @interlaced: Interlaced or progressive
 2235  * @polarities: Positive or negative polarities
 2236  * @pixelclock: Pixel clock in HZ. Ex. 74.25MHz->74250000
 2237  * @hfrontporch:Horizontal front porch in pixels
 2238  * @hsync:      Horizontal Sync length in pixels
 2239  * @hbackporch: Horizontal back porch in pixels
 2240  * @vfrontporch:Vertical front porch in lines
 2241  * @vsync:      Vertical Sync length in lines
 2242  * @vbackporch: Vertical back porch in lines
 2243  * @il_vfrontporch:Vertical front porch for the even field
 2244  *              (aka field 2) of interlaced field formats
 2245  * @il_vsync:   Vertical Sync length for the even field
 2246  *              (aka field 2) of interlaced field formats
 2247  * @il_vbackporch:Vertical back porch for the even field
 2248  *              (aka field 2) of interlaced field formats
 2249  * @standards:  Standards the timing belongs to
 2250  * @flags:      Flags
 2251  * @picture_aspect: The picture aspect ratio (hor/vert).
 2252  * @cea861_vic: VIC code as per the CEA-861 standard.
 2253  * @hdmi_vic:   VIC code as per the HDMI standard.
 2254  * @reserved:   Reserved fields, must be zeroed.
 2255  *
 2256  * A note regarding vertical interlaced timings: height refers to the total
 2257  * height of the active video frame (= two fields). The blanking timings refer
 2258  * to the blanking of each field. So the height of the total frame is
 2259  * calculated as follows:
 2260  *
 2261  * tot_height = height + vfrontporch + vsync + vbackporch +
 2262  *                       il_vfrontporch + il_vsync + il_vbackporch
 2263  *
 2264  * The active height of each field is height / 2.
 2265  */
 2266 struct v4l2_bt_timings {
 2267         u_int32_t       width;
 2268         u_int32_t       height;
 2269         u_int32_t       interlaced;
 2270         u_int32_t       polarities;
 2271         u_int64_t       pixelclock;
 2272         u_int32_t       hfrontporch;
 2273         u_int32_t       hsync;
 2274         u_int32_t       hbackporch;
 2275         u_int32_t       vfrontporch;
 2276         u_int32_t       vsync;
 2277         u_int32_t       vbackporch;
 2278         u_int32_t       il_vfrontporch;
 2279         u_int32_t       il_vsync;
 2280         u_int32_t       il_vbackporch;
 2281         u_int32_t       standards;
 2282         u_int32_t       flags;
 2283         struct v4l2_fract picture_aspect;
 2284         u_int8_t        cea861_vic;
 2285         u_int8_t        hdmi_vic;
 2286         u_int8_t        reserved[46];
 2287 } __attribute__ ((packed));
 2288 
 2289 /* Interlaced or progressive format */
 2290 #define V4L2_DV_PROGRESSIVE     0
 2291 #define V4L2_DV_INTERLACED      1
 2292 
 2293 /* Polarities. If bit is not set, it is assumed to be negative polarity */
 2294 #define V4L2_DV_VSYNC_POS_POL   0x00000001
 2295 #define V4L2_DV_HSYNC_POS_POL   0x00000002
 2296 
 2297 /* Timings standards */
 2298 #define V4L2_DV_BT_STD_CEA861   (1 << 0)  /* CEA-861 Digital TV Profile */
 2299 #define V4L2_DV_BT_STD_DMT      (1 << 1)  /* VESA Discrete Monitor Timings */
 2300 #define V4L2_DV_BT_STD_CVT      (1 << 2)  /* VESA Coordinated Video Timings */
 2301 #define V4L2_DV_BT_STD_GTF      (1 << 3)  /* VESA Generalized Timings Formula */
 2302 #define V4L2_DV_BT_STD_SDI      (1 << 4)  /* SDI Timings */
 2303 
 2304 /* Flags */
 2305 
 2306 /*
 2307  * CVT/GTF specific: timing uses reduced blanking (CVT) or the 'Secondary
 2308  * GTF' curve (GTF). In both cases the horizontal and/or vertical blanking
 2309  * intervals are reduced, allowing a higher resolution over the same
 2310  * bandwidth. This is a read-only flag.
 2311  */
 2312 #define V4L2_DV_FL_REDUCED_BLANKING             (1 << 0)
 2313 /*
 2314  * CEA-861 specific: set for CEA-861 formats with a framerate of a multiple
 2315  * of six. These formats can be optionally played at 1 / 1.001 speed.
 2316  * This is a read-only flag.
 2317  */
 2318 #define V4L2_DV_FL_CAN_REDUCE_FPS               (1 << 1)
 2319 /*
 2320  * CEA-861 specific: only valid for video transmitters, the flag is cleared
 2321  * by receivers.
 2322  * If the framerate of the format is a multiple of six, then the pixelclock
 2323  * used to set up the transmitter is divided by 1.001 to make it compatible
 2324  * with 60 Hz based standards such as NTSC and PAL-M that use a framerate of
 2325  * 29.97 Hz. Otherwise this flag is cleared. If the transmitter can't generate
 2326  * such frequencies, then the flag will also be cleared.
 2327  */
 2328 #define V4L2_DV_FL_REDUCED_FPS                  (1 << 2)
 2329 /*
 2330  * Specific to interlaced formats: if set, then field 1 is really one half-line
 2331  * longer and field 2 is really one half-line shorter, so each field has
 2332  * exactly the same number of half-lines. Whether half-lines can be detected
 2333  * or used depends on the hardware.
 2334  */
 2335 #define V4L2_DV_FL_HALF_LINE                    (1 << 3)
 2336 /*
 2337  * If set, then this is a Consumer Electronics (CE) video format. Such formats
 2338  * differ from other formats (commonly called IT formats) in that if RGB
 2339  * encoding is used then by default the RGB values use limited range (i.e.
 2340  * use the range 16-235) as opposed to 0-255. All formats defined in CEA-861
 2341  * except for the 640x480 format are CE formats.
 2342  */
 2343 #define V4L2_DV_FL_IS_CE_VIDEO                  (1 << 4)
 2344 /* Some formats like SMPTE-125M have an interlaced signal with a odd
 2345  * total height. For these formats, if this flag is set, the first
 2346  * field has the extra line. If not, it is the second field.
 2347  */
 2348 #define V4L2_DV_FL_FIRST_FIELD_EXTRA_LINE       (1 << 5)
 2349 /*
 2350  * If set, then the picture_aspect field is valid. Otherwise assume that the
 2351  * pixels are square, so the picture aspect ratio is the same as the width to
 2352  * height ratio.
 2353  */
 2354 #define V4L2_DV_FL_HAS_PICTURE_ASPECT           (1 << 6)
 2355 /*
 2356  * If set, then the cea861_vic field is valid and contains the Video
 2357  * Identification Code as per the CEA-861 standard.
 2358  */
 2359 #define V4L2_DV_FL_HAS_CEA861_VIC               (1 << 7)
 2360 /*
 2361  * If set, then the hdmi_vic field is valid and contains the Video
 2362  * Identification Code as per the HDMI standard (HDMI Vendor Specific
 2363  * InfoFrame).
 2364  */
 2365 #define V4L2_DV_FL_HAS_HDMI_VIC                 (1 << 8)
 2366 
 2367 /* A few useful defines to calculate the total blanking and frame sizes */
 2368 #define V4L2_DV_BT_BLANKING_WIDTH(bt) \
 2369         ((bt)->hfrontporch + (bt)->hsync + (bt)->hbackporch)
 2370 #define V4L2_DV_BT_FRAME_WIDTH(bt) \
 2371         ((bt)->width + V4L2_DV_BT_BLANKING_WIDTH(bt))
 2372 #define V4L2_DV_BT_BLANKING_HEIGHT(bt) \
 2373         ((bt)->vfrontporch + (bt)->vsync + (bt)->vbackporch + \
 2374          (bt)->il_vfrontporch + (bt)->il_vsync + (bt)->il_vbackporch)
 2375 #define V4L2_DV_BT_FRAME_HEIGHT(bt) \
 2376         ((bt)->height + V4L2_DV_BT_BLANKING_HEIGHT(bt))
 2377 
 2378 /** struct v4l2_dv_timings - DV timings
 2379  * @type:       the type of the timings
 2380  * @bt: BT656/1120 timings
 2381  */
 2382 struct v4l2_dv_timings {
 2383         u_int32_t type;
 2384         union {
 2385                 struct v4l2_bt_timings  bt;
 2386                 u_int32_t       reserved[32];
 2387         };
 2388 } __attribute__ ((packed));
 2389 
 2390 /* Values for the type field */
 2391 #define V4L2_DV_BT_656_1120     0       /* BT.656/1120 timing type */
 2392 
 2393 
 2394 /** struct v4l2_enum_dv_timings - DV timings enumeration
 2395  * @index:      enumeration index
 2396  * @pad:        the pad number for which to enumerate timings (used with
 2397  *              v4l-subdev nodes only)
 2398  * @reserved:   must be zeroed
 2399  * @timings:    the timings for the given index
 2400  */
 2401 struct v4l2_enum_dv_timings {
 2402         u_int32_t index;
 2403         u_int32_t pad;
 2404         u_int32_t reserved[2];
 2405         struct v4l2_dv_timings timings;
 2406 };
 2407 
 2408 /** struct v4l2_bt_timings_cap - BT.656/BT.1120 timing capabilities
 2409  * @min_width:          width in pixels
 2410  * @max_width:          width in pixels
 2411  * @min_height:         height in lines
 2412  * @max_height:         height in lines
 2413  * @min_pixelclock:     Pixel clock in HZ. Ex. 74.25MHz->74250000
 2414  * @max_pixelclock:     Pixel clock in HZ. Ex. 74.25MHz->74250000
 2415  * @standards:          Supported standards
 2416  * @capabilities:       Supported capabilities
 2417  * @reserved:           Must be zeroed
 2418  */
 2419 struct v4l2_bt_timings_cap {
 2420         u_int32_t       min_width;
 2421         u_int32_t       max_width;
 2422         u_int32_t       min_height;
 2423         u_int32_t       max_height;
 2424         u_int64_t       min_pixelclock;
 2425         u_int64_t       max_pixelclock;
 2426         u_int32_t       standards;
 2427         u_int32_t       capabilities;
 2428         u_int32_t       reserved[16];
 2429 } __attribute__ ((packed));
 2430 
 2431 /* Supports interlaced formats */
 2432 #define V4L2_DV_BT_CAP_INTERLACED       (1 << 0)
 2433 /* Supports progressive formats */
 2434 #define V4L2_DV_BT_CAP_PROGRESSIVE      (1 << 1)
 2435 /* Supports CVT/GTF reduced blanking */
 2436 #define V4L2_DV_BT_CAP_REDUCED_BLANKING (1 << 2)
 2437 /* Supports custom formats */
 2438 #define V4L2_DV_BT_CAP_CUSTOM           (1 << 3)
 2439 
 2440 /** struct v4l2_dv_timings_cap - DV timings capabilities
 2441  * @type:       the type of the timings (same as in struct v4l2_dv_timings)
 2442  * @pad:        the pad number for which to query capabilities (used with
 2443  *              v4l-subdev nodes only)
 2444  * @bt:         the BT656/1120 timings capabilities
 2445  */
 2446 struct v4l2_dv_timings_cap {
 2447         u_int32_t type;
 2448         u_int32_t pad;
 2449         u_int32_t reserved[2];
 2450         union {
 2451                 struct v4l2_bt_timings_cap bt;
 2452                 u_int32_t raw_data[32];
 2453         };
 2454 };
 2455 
 2456 
 2457 /*
 2458  *      V I D E O   I N P U T S
 2459  */
 2460 struct v4l2_input {
 2461         u_int32_t            index;             /*  Which input */
 2462         u_int8_t             name[32];          /*  Label */
 2463         u_int32_t            type;              /*  Type of input */
 2464         u_int32_t            audioset;          /*  Associated audios (bitfield) */
 2465         u_int32_t        tuner;             /*  enum v4l2_tuner_type */
 2466         v4l2_std_id  std;
 2467         u_int32_t            status;
 2468         u_int32_t            capabilities;
 2469         u_int32_t            reserved[3];
 2470 };
 2471 
 2472 /*  Values for the 'type' field */
 2473 #define V4L2_INPUT_TYPE_TUNER           1
 2474 #define V4L2_INPUT_TYPE_CAMERA          2
 2475 #define V4L2_INPUT_TYPE_TOUCH           3
 2476 
 2477 /* field 'status' - general */
 2478 #define V4L2_IN_ST_NO_POWER    0x00000001  /* Attached device is off */
 2479 #define V4L2_IN_ST_NO_SIGNAL   0x00000002
 2480 #define V4L2_IN_ST_NO_COLOR    0x00000004
 2481 
 2482 /* field 'status' - sensor orientation */
 2483 /* If sensor is mounted upside down set both bits */
 2484 #define V4L2_IN_ST_HFLIP       0x00000010 /* Frames are flipped horizontally */
 2485 #define V4L2_IN_ST_VFLIP       0x00000020 /* Frames are flipped vertically */
 2486 
 2487 /* field 'status' - analog */
 2488 #define V4L2_IN_ST_NO_H_LOCK   0x00000100  /* No horizontal sync lock */
 2489 #define V4L2_IN_ST_COLOR_KILL  0x00000200  /* Color killer is active */
 2490 #define V4L2_IN_ST_NO_V_LOCK   0x00000400  /* No vertical sync lock */
 2491 #define V4L2_IN_ST_NO_STD_LOCK 0x00000800  /* No standard format lock */
 2492 
 2493 /* field 'status' - digital */
 2494 #define V4L2_IN_ST_NO_SYNC     0x00010000  /* No synchronization lock */
 2495 #define V4L2_IN_ST_NO_EQU      0x00020000  /* No equalizer lock */
 2496 #define V4L2_IN_ST_NO_CARRIER  0x00040000  /* Carrier recovery failed */
 2497 
 2498 /* field 'status' - VCR and set-top box */
 2499 #define V4L2_IN_ST_MACROVISION 0x01000000  /* Macrovision detected */
 2500 #define V4L2_IN_ST_NO_ACCESS   0x02000000  /* Conditional access denied */
 2501 #define V4L2_IN_ST_VTR         0x04000000  /* VTR time constant */
 2502 
 2503 /* capabilities flags */
 2504 #define V4L2_IN_CAP_DV_TIMINGS          0x00000002 /* Supports S_DV_TIMINGS */
 2505 #define V4L2_IN_CAP_CUSTOM_TIMINGS      V4L2_IN_CAP_DV_TIMINGS /* For compatibility */
 2506 #define V4L2_IN_CAP_STD                 0x00000004 /* Supports S_STD */
 2507 #define V4L2_IN_CAP_NATIVE_SIZE         0x00000008 /* Supports setting native size */
 2508 
 2509 /*
 2510  *      V I D E O   O U T P U T S
 2511  */
 2512 struct v4l2_output {
 2513         u_int32_t            index;             /*  Which output */
 2514         u_int8_t             name[32];          /*  Label */
 2515         u_int32_t            type;              /*  Type of output */
 2516         u_int32_t            audioset;          /*  Associated audios (bitfield) */
 2517         u_int32_t            modulator;         /*  Associated modulator */
 2518         v4l2_std_id  std;
 2519         u_int32_t            capabilities;
 2520         u_int32_t            reserved[3];
 2521 };
 2522 /*  Values for the 'type' field */
 2523 #define V4L2_OUTPUT_TYPE_MODULATOR              1
 2524 #define V4L2_OUTPUT_TYPE_ANALOG                 2
 2525 #define V4L2_OUTPUT_TYPE_ANALOGVGAOVERLAY       3
 2526 
 2527 /* capabilities flags */
 2528 #define V4L2_OUT_CAP_DV_TIMINGS         0x00000002 /* Supports S_DV_TIMINGS */
 2529 #define V4L2_OUT_CAP_CUSTOM_TIMINGS     V4L2_OUT_CAP_DV_TIMINGS /* For compatibility */
 2530 #define V4L2_OUT_CAP_STD                0x00000004 /* Supports S_STD */
 2531 #define V4L2_OUT_CAP_NATIVE_SIZE        0x00000008 /* Supports setting native size */
 2532 
 2533 /*
 2534  *      C O N T R O L S
 2535  */
 2536 struct v4l2_control {
 2537         u_int32_t                    id;
 2538         int32_t              value;
 2539 };
 2540 
 2541 struct v4l2_ext_control {
 2542         u_int32_t id;
 2543         u_int32_t size;
 2544         u_int32_t reserved2[1];
 2545         union {
 2546                 int32_t value;
 2547                 int64_t value64;
 2548                 char __user *string;
 2549                 u_int8_t __user *p_u8;
 2550                 u_int16_t __user *p_u16;
 2551                 u_int32_t __user *p_u32;
 2552                 void __user *ptr;
 2553         };
 2554 } __attribute__ ((packed));
 2555 
 2556 struct v4l2_ext_controls {
 2557         union {
 2558 #ifndef __KERNEL__
 2559                 u_int32_t ctrl_class;
 2560 #endif
 2561                 u_int32_t which;
 2562         };
 2563         u_int32_t count;
 2564         u_int32_t error_idx;
 2565         u_int32_t reserved[2];
 2566         struct v4l2_ext_control *controls;
 2567 };
 2568 
 2569 #define V4L2_CTRL_ID_MASK         (0x0fffffff)
 2570 #ifndef __KERNEL__
 2571 #define V4L2_CTRL_ID2CLASS(id)    ((id) & 0x0fff0000UL)
 2572 #endif
 2573 #define V4L2_CTRL_ID2WHICH(id)    ((id) & 0x0fff0000UL)
 2574 #define V4L2_CTRL_DRIVER_PRIV(id) (((id) & 0xffff) >= 0x1000)
 2575 #define V4L2_CTRL_MAX_DIMS        (4)
 2576 #define V4L2_CTRL_WHICH_CUR_VAL   0
 2577 #define V4L2_CTRL_WHICH_DEF_VAL   0x0f000000
 2578 
 2579 enum v4l2_ctrl_type {
 2580         V4L2_CTRL_TYPE_INTEGER       = 1,
 2581         V4L2_CTRL_TYPE_BOOLEAN       = 2,
 2582         V4L2_CTRL_TYPE_MENU          = 3,
 2583         V4L2_CTRL_TYPE_BUTTON        = 4,
 2584         V4L2_CTRL_TYPE_INTEGER64     = 5,
 2585         V4L2_CTRL_TYPE_CTRL_CLASS    = 6,
 2586         V4L2_CTRL_TYPE_STRING        = 7,
 2587         V4L2_CTRL_TYPE_BITMASK       = 8,
 2588         V4L2_CTRL_TYPE_INTEGER_MENU  = 9,
 2589 
 2590         /* Compound types are >= 0x0100 */
 2591         V4L2_CTRL_COMPOUND_TYPES     = 0x0100,
 2592         V4L2_CTRL_TYPE_U8            = 0x0100,
 2593         V4L2_CTRL_TYPE_U16           = 0x0101,
 2594         V4L2_CTRL_TYPE_U32           = 0x0102,
 2595 };
 2596 
 2597 /*  Used in the VIDIOC_QUERYCTRL ioctl for querying controls */
 2598 struct v4l2_queryctrl {
 2599         u_int32_t                    id;
 2600         u_int32_t                    type;      /* enum v4l2_ctrl_type */
 2601         u_int8_t                     name[32];  /* Whatever */
 2602         int32_t              minimum;   /* Note signedness */
 2603         int32_t              maximum;
 2604         int32_t              step;
 2605         int32_t              default_value;
 2606         u_int32_t                flags;
 2607         u_int32_t                    reserved[2];
 2608 };
 2609 
 2610 /*  Used in the VIDIOC_QUERY_EXT_CTRL ioctl for querying extended controls */
 2611 struct v4l2_query_ext_ctrl {
 2612         u_int32_t                    id;
 2613         u_int32_t                    type;
 2614         char                 name[32];
 2615         int64_t              minimum;
 2616         int64_t              maximum;
 2617         u_int64_t                    step;
 2618         int64_t              default_value;
 2619         u_int32_t                flags;
 2620         u_int32_t                elem_size;
 2621         u_int32_t                elems;
 2622         u_int32_t                nr_of_dims;
 2623         u_int32_t                dims[V4L2_CTRL_MAX_DIMS];
 2624         u_int32_t                    reserved[32];
 2625 };
 2626 
 2627 /*  Used in the VIDIOC_QUERYMENU ioctl for querying menu items */
 2628 struct v4l2_querymenu {
 2629         u_int32_t               id;
 2630         u_int32_t               index;
 2631         union {
 2632                 u_int8_t        name[32];       /* Whatever */
 2633                 int64_t value;
 2634         };
 2635         u_int32_t               reserved;
 2636 } __attribute__ ((packed));
 2637 
 2638 /*  Control flags  */
 2639 #define V4L2_CTRL_FLAG_DISABLED         0x0001
 2640 #define V4L2_CTRL_FLAG_GRABBED          0x0002
 2641 #define V4L2_CTRL_FLAG_READ_ONLY        0x0004
 2642 #define V4L2_CTRL_FLAG_UPDATE           0x0008
 2643 #define V4L2_CTRL_FLAG_INACTIVE         0x0010
 2644 #define V4L2_CTRL_FLAG_SLIDER           0x0020
 2645 #define V4L2_CTRL_FLAG_WRITE_ONLY       0x0040
 2646 #define V4L2_CTRL_FLAG_VOLATILE         0x0080
 2647 #define V4L2_CTRL_FLAG_HAS_PAYLOAD      0x0100
 2648 #define V4L2_CTRL_FLAG_EXECUTE_ON_WRITE 0x0200
 2649 
 2650 /*  Query flags, to be ORed with the control ID */
 2651 #define V4L2_CTRL_FLAG_NEXT_CTRL        0x80000000
 2652 #define V4L2_CTRL_FLAG_NEXT_COMPOUND    0x40000000
 2653 
 2654 /*  User-class control IDs defined by V4L2 */
 2655 #define V4L2_CID_MAX_CTRLS              1024
 2656 /*  IDs reserved for driver specific controls */
 2657 #define V4L2_CID_PRIVATE_BASE           0x08000000
 2658 
 2659 
 2660 /*
 2661  *      T U N I N G
 2662  */
 2663 struct v4l2_tuner {
 2664         u_int32_t                   index;
 2665         u_int8_t                        name[32];
 2666         u_int32_t                       type;   /* enum v4l2_tuner_type */
 2667         u_int32_t                       capability;
 2668         u_int32_t                       rangelow;
 2669         u_int32_t                       rangehigh;
 2670         u_int32_t                       rxsubchans;
 2671         u_int32_t                       audmode;
 2672         int32_t                 signal;
 2673         int32_t                 afc;
 2674         u_int32_t                       reserved[4];
 2675 };
 2676 
 2677 struct v4l2_modulator {
 2678         u_int32_t                       index;
 2679         u_int8_t                        name[32];
 2680         u_int32_t                       capability;
 2681         u_int32_t                       rangelow;
 2682         u_int32_t                       rangehigh;
 2683         u_int32_t                       txsubchans;
 2684         u_int32_t                       type;   /* enum v4l2_tuner_type */
 2685         u_int32_t                       reserved[3];
 2686 };
 2687 
 2688 /*  Flags for the 'capability' field */
 2689 #define V4L2_TUNER_CAP_LOW              0x0001
 2690 #define V4L2_TUNER_CAP_NORM             0x0002
 2691 #define V4L2_TUNER_CAP_HWSEEK_BOUNDED   0x0004
 2692 #define V4L2_TUNER_CAP_HWSEEK_WRAP      0x0008
 2693 #define V4L2_TUNER_CAP_STEREO           0x0010
 2694 #define V4L2_TUNER_CAP_LANG2            0x0020
 2695 #define V4L2_TUNER_CAP_SAP              0x0020
 2696 #define V4L2_TUNER_CAP_LANG1            0x0040
 2697 #define V4L2_TUNER_CAP_RDS              0x0080
 2698 #define V4L2_TUNER_CAP_RDS_BLOCK_IO     0x0100
 2699 #define V4L2_TUNER_CAP_RDS_CONTROLS     0x0200
 2700 #define V4L2_TUNER_CAP_FREQ_BANDS       0x0400
 2701 #define V4L2_TUNER_CAP_HWSEEK_PROG_LIM  0x0800
 2702 #define V4L2_TUNER_CAP_1HZ              0x1000
 2703 
 2704 /*  Flags for the 'rxsubchans' field */
 2705 #define V4L2_TUNER_SUB_MONO             0x0001
 2706 #define V4L2_TUNER_SUB_STEREO           0x0002
 2707 #define V4L2_TUNER_SUB_LANG2            0x0004
 2708 #define V4L2_TUNER_SUB_SAP              0x0004
 2709 #define V4L2_TUNER_SUB_LANG1            0x0008
 2710 #define V4L2_TUNER_SUB_RDS              0x0010
 2711 
 2712 /*  Values for the 'audmode' field */
 2713 #define V4L2_TUNER_MODE_MONO            0x0000
 2714 #define V4L2_TUNER_MODE_STEREO          0x0001
 2715 #define V4L2_TUNER_MODE_LANG2           0x0002
 2716 #define V4L2_TUNER_MODE_SAP             0x0002
 2717 #define V4L2_TUNER_MODE_LANG1           0x0003
 2718 #define V4L2_TUNER_MODE_LANG1_LANG2     0x0004
 2719 
 2720 struct v4l2_frequency {
 2721         u_int32_t       tuner;
 2722         u_int32_t       type;   /* enum v4l2_tuner_type */
 2723         u_int32_t       frequency;
 2724         u_int32_t       reserved[8];
 2725 };
 2726 
 2727 #define V4L2_BAND_MODULATION_VSB        (1 << 1)
 2728 #define V4L2_BAND_MODULATION_FM         (1 << 2)
 2729 #define V4L2_BAND_MODULATION_AM         (1 << 3)
 2730 
 2731 struct v4l2_frequency_band {
 2732         u_int32_t       tuner;
 2733         u_int32_t       type;   /* enum v4l2_tuner_type */
 2734         u_int32_t       index;
 2735         u_int32_t       capability;
 2736         u_int32_t       rangelow;
 2737         u_int32_t       rangehigh;
 2738         u_int32_t       modulation;
 2739         u_int32_t       reserved[9];
 2740 };
 2741 
 2742 struct v4l2_hw_freq_seek {
 2743         u_int32_t       tuner;
 2744         u_int32_t       type;   /* enum v4l2_tuner_type */
 2745         u_int32_t       seek_upward;
 2746         u_int32_t       wrap_around;
 2747         u_int32_t       spacing;
 2748         u_int32_t       rangelow;
 2749         u_int32_t       rangehigh;
 2750         u_int32_t       reserved[5];
 2751 };
 2752 
 2753 /*
 2754  *      R D S
 2755  */
 2756 
 2757 struct v4l2_rds_data {
 2758         u_int8_t        lsb;
 2759         u_int8_t        msb;
 2760         u_int8_t        block;
 2761 } __attribute__ ((packed));
 2762 
 2763 #define V4L2_RDS_BLOCK_MSK       0x7
 2764 #define V4L2_RDS_BLOCK_A         0
 2765 #define V4L2_RDS_BLOCK_B         1
 2766 #define V4L2_RDS_BLOCK_C         2
 2767 #define V4L2_RDS_BLOCK_D         3
 2768 #define V4L2_RDS_BLOCK_C_ALT     4
 2769 #define V4L2_RDS_BLOCK_INVALID   7
 2770 
 2771 #define V4L2_RDS_BLOCK_CORRECTED 0x40
 2772 #define V4L2_RDS_BLOCK_ERROR     0x80
 2773 
 2774 /*
 2775  *      A U D I O
 2776  */
 2777 struct v4l2_audio {
 2778         u_int32_t       index;
 2779         u_int8_t        name[32];
 2780         u_int32_t       capability;
 2781         u_int32_t       mode;
 2782         u_int32_t       reserved[2];
 2783 };
 2784 
 2785 /*  Flags for the 'capability' field */
 2786 #define V4L2_AUDCAP_STEREO              0x00001
 2787 #define V4L2_AUDCAP_AVL                 0x00002
 2788 
 2789 /*  Flags for the 'mode' field */
 2790 #define V4L2_AUDMODE_AVL                0x00001
 2791 
 2792 struct v4l2_audioout {
 2793         u_int32_t       index;
 2794         u_int8_t        name[32];
 2795         u_int32_t       capability;
 2796         u_int32_t       mode;
 2797         u_int32_t       reserved[2];
 2798 };
 2799 
 2800 /*
 2801  *      M P E G   S E R V I C E S
 2802  */
 2803 #if 1
 2804 #define V4L2_ENC_IDX_FRAME_I    (0)
 2805 #define V4L2_ENC_IDX_FRAME_P    (1)
 2806 #define V4L2_ENC_IDX_FRAME_B    (2)
 2807 #define V4L2_ENC_IDX_FRAME_MASK (0xf)
 2808 
 2809 struct v4l2_enc_idx_entry {
 2810         u_int64_t offset;
 2811         u_int64_t pts;
 2812         u_int32_t length;
 2813         u_int32_t flags;
 2814         u_int32_t reserved[2];
 2815 };
 2816 
 2817 #define V4L2_ENC_IDX_ENTRIES (64)
 2818 struct v4l2_enc_idx {
 2819         u_int32_t entries;
 2820         u_int32_t entries_cap;
 2821         u_int32_t reserved[4];
 2822         struct v4l2_enc_idx_entry entry[V4L2_ENC_IDX_ENTRIES];
 2823 };
 2824 
 2825 
 2826 #define V4L2_ENC_CMD_START      (0)
 2827 #define V4L2_ENC_CMD_STOP       (1)
 2828 #define V4L2_ENC_CMD_PAUSE      (2)
 2829 #define V4L2_ENC_CMD_RESUME     (3)
 2830 
 2831 /* Flags for V4L2_ENC_CMD_STOP */
 2832 #define V4L2_ENC_CMD_STOP_AT_GOP_END    (1 << 0)
 2833 
 2834 struct v4l2_encoder_cmd {
 2835         u_int32_t cmd;
 2836         u_int32_t flags;
 2837         union {
 2838                 struct {
 2839                         u_int32_t data[8];
 2840                 } raw;
 2841         };
 2842 };
 2843 
 2844 /* Decoder commands */
 2845 #define V4L2_DEC_CMD_START       (0)
 2846 #define V4L2_DEC_CMD_STOP        (1)
 2847 #define V4L2_DEC_CMD_PAUSE       (2)
 2848 #define V4L2_DEC_CMD_RESUME      (3)
 2849 
 2850 /* Flags for V4L2_DEC_CMD_START */
 2851 #define V4L2_DEC_CMD_START_MUTE_AUDIO   (1 << 0)
 2852 
 2853 /* Flags for V4L2_DEC_CMD_PAUSE */
 2854 #define V4L2_DEC_CMD_PAUSE_TO_BLACK     (1 << 0)
 2855 
 2856 /* Flags for V4L2_DEC_CMD_STOP */
 2857 #define V4L2_DEC_CMD_STOP_TO_BLACK      (1 << 0)
 2858 #define V4L2_DEC_CMD_STOP_IMMEDIATELY   (1 << 1)
 2859 
 2860 /* Play format requirements (returned by the driver): */
 2861 
 2862 /* The decoder has no special format requirements */
 2863 #define V4L2_DEC_START_FMT_NONE         (0)
 2864 /* The decoder requires full GOPs */
 2865 #define V4L2_DEC_START_FMT_GOP          (1)
 2866 
 2867 /* The structure must be zeroed before use by the application
 2868    This ensures it can be extended safely in the future. */
 2869 struct v4l2_decoder_cmd {
 2870         u_int32_t cmd;
 2871         u_int32_t flags;
 2872         union {
 2873                 struct {
 2874                         u_int64_t pts;
 2875                 } stop;
 2876 
 2877                 struct {
 2878                         /* 0 or 1000 specifies normal speed,
 2879                            1 specifies forward single stepping,
 2880                            -1 specifies backward single stepping,
 2881                            >1: playback at speed/1000 of the normal speed,
 2882                            <-1: reverse playback at (-speed/1000) of the normal speed. */
 2883                         int32_t speed;
 2884                         u_int32_t format;
 2885                 } start;
 2886 
 2887                 struct {
 2888                         u_int32_t data[16];
 2889                 } raw;
 2890         };
 2891 };
 2892 #endif
 2893 
 2894 
 2895 /*
 2896  *      D A T A   S E R V I C E S   ( V B I )
 2897  *
 2898  *      Data services API by Michael Schimek
 2899  */
 2900 
 2901 /* Raw VBI */
 2902 struct v4l2_vbi_format {
 2903         u_int32_t       sampling_rate;          /* in 1 Hz */
 2904         u_int32_t       offset;
 2905         u_int32_t       samples_per_line;
 2906         u_int32_t       sample_format;          /* V4L2_PIX_FMT_* */
 2907         int32_t start[2];
 2908         u_int32_t       count[2];
 2909         u_int32_t       flags;                  /* V4L2_VBI_* */
 2910         u_int32_t       reserved[2];            /* must be zero */
 2911 };
 2912 
 2913 /*  VBI flags  */
 2914 #define V4L2_VBI_UNSYNC         (1 << 0)
 2915 #define V4L2_VBI_INTERLACED     (1 << 1)
 2916 
 2917 /* ITU-R start lines for each field */
 2918 #define V4L2_VBI_ITU_525_F1_START (1)
 2919 #define V4L2_VBI_ITU_525_F2_START (264)
 2920 #define V4L2_VBI_ITU_625_F1_START (1)
 2921 #define V4L2_VBI_ITU_625_F2_START (314)
 2922 
 2923 /* Sliced VBI
 2924  *
 2925  *    This implements is a proposal V4L2 API to allow SLICED VBI
 2926  * required for some hardware encoders. It should change without
 2927  * notice in the definitive implementation.
 2928  */
 2929 
 2930 struct v4l2_sliced_vbi_format {
 2931         u_int16_t   service_set;
 2932         /* service_lines[0][...] specifies lines 0-23 (1-23 used) of the first field
 2933            service_lines[1][...] specifies lines 0-23 (1-23 used) of the second field
 2934                                  (equals frame lines 313-336 for 625 line video
 2935                                   standards, 263-286 for 525 line standards) */
 2936         u_int16_t   service_lines[2][24];
 2937         u_int32_t   io_size;
 2938         u_int32_t   reserved[2];            /* must be zero */
 2939 };
 2940 
 2941 /* Teletext World System Teletext
 2942    (WST), defined on ITU-R BT.653-2 */
 2943 #define V4L2_SLICED_TELETEXT_B          (0x0001)
 2944 /* Video Program System, defined on ETS 300 231*/
 2945 #define V4L2_SLICED_VPS                 (0x0400)
 2946 /* Closed Caption, defined on EIA-608 */
 2947 #define V4L2_SLICED_CAPTION_525         (0x1000)
 2948 /* Wide Screen System, defined on ITU-R BT1119.1 */
 2949 #define V4L2_SLICED_WSS_625             (0x4000)
 2950 
 2951 #define V4L2_SLICED_VBI_525             (V4L2_SLICED_CAPTION_525)
 2952 #define V4L2_SLICED_VBI_625             (V4L2_SLICED_TELETEXT_B | V4L2_SLICED_VPS | V4L2_SLICED_WSS_625)
 2953 
 2954 struct v4l2_sliced_vbi_cap {
 2955         u_int16_t   service_set;
 2956         /* service_lines[0][...] specifies lines 0-23 (1-23 used) of the first field
 2957            service_lines[1][...] specifies lines 0-23 (1-23 used) of the second field
 2958                                  (equals frame lines 313-336 for 625 line video
 2959                                   standards, 263-286 for 525 line standards) */
 2960         u_int16_t   service_lines[2][24];
 2961         u_int32_t       type;           /* enum v4l2_buf_type */
 2962         u_int32_t   reserved[3];    /* must be 0 */
 2963 };
 2964 
 2965 struct v4l2_sliced_vbi_data {
 2966         u_int32_t   id;
 2967         u_int32_t   field;          /* 0: first field, 1: second field */
 2968         u_int32_t   line;           /* 1-23 */
 2969         u_int32_t   reserved;       /* must be 0 */
 2970         u_int8_t    data[48];
 2971 };
 2972 
 2973 /*
 2974  * Sliced VBI data inserted into MPEG Streams
 2975  */
 2976 
 2977 /*
 2978  * V4L2_MPEG_STREAM_VBI_FMT_IVTV:
 2979  *
 2980  * Structure of payload contained in an MPEG 2 Private Stream 1 PES Packet in an
 2981  * MPEG-2 Program Pack that contains V4L2_MPEG_STREAM_VBI_FMT_IVTV Sliced VBI
 2982  * data
 2983  *
 2984  * Note, the MPEG-2 Program Pack and Private Stream 1 PES packet header
 2985  * definitions are not included here.  See the MPEG-2 specifications for details
 2986  * on these headers.
 2987  */
 2988 
 2989 /* Line type IDs */
 2990 #define V4L2_MPEG_VBI_IVTV_TELETEXT_B     (1)
 2991 #define V4L2_MPEG_VBI_IVTV_CAPTION_525    (4)
 2992 #define V4L2_MPEG_VBI_IVTV_WSS_625        (5)
 2993 #define V4L2_MPEG_VBI_IVTV_VPS            (7)
 2994 
 2995 struct v4l2_mpeg_vbi_itv0_line {
 2996         u_int8_t id;    /* One of V4L2_MPEG_VBI_IVTV_* above */
 2997         u_int8_t data[42];      /* Sliced VBI data for the line */
 2998 } __attribute__ ((packed));
 2999 
 3000 struct v4l2_mpeg_vbi_itv0 {
 3001         u_int32_t linemask[2]; /* Bitmasks of VBI service lines present */
 3002         struct v4l2_mpeg_vbi_itv0_line line[35];
 3003 } __attribute__ ((packed));
 3004 
 3005 struct v4l2_mpeg_vbi_ITV0 {
 3006         struct v4l2_mpeg_vbi_itv0_line line[36];
 3007 } __attribute__ ((packed));
 3008 
 3009 #define V4L2_MPEG_VBI_IVTV_MAGIC0       "itv0"
 3010 #define V4L2_MPEG_VBI_IVTV_MAGIC1       "ITV0"
 3011 
 3012 struct v4l2_mpeg_vbi_fmt_ivtv {
 3013         u_int8_t magic[4];
 3014         union {
 3015                 struct v4l2_mpeg_vbi_itv0 itv0;
 3016                 struct v4l2_mpeg_vbi_ITV0 ITV0;
 3017         };
 3018 } __attribute__ ((packed));
 3019 
 3020 /*
 3021  *      A G G R E G A T E   S T R U C T U R E S
 3022  */
 3023 
 3024 /**
 3025  * struct v4l2_plane_pix_format - additional, per-plane format definition
 3026  * @sizeimage:          maximum size in bytes required for data, for which
 3027  *                      this plane will be used
 3028  * @bytesperline:       distance in bytes between the leftmost pixels in two
 3029  *                      adjacent lines
 3030  */
 3031 struct v4l2_plane_pix_format {
 3032         u_int32_t               sizeimage;
 3033         u_int32_t               bytesperline;
 3034         u_int16_t               reserved[6];
 3035 } __attribute__ ((packed));
 3036 
 3037 /**
 3038  * struct v4l2_pix_format_mplane - multiplanar format definition
 3039  * @width:              image width in pixels
 3040  * @height:             image height in pixels
 3041  * @pixelformat:        little endian four character code (fourcc)
 3042  * @field:              enum v4l2_field; field order (for interlaced video)
 3043  * @colorspace:         enum v4l2_colorspace; supplemental to pixelformat
 3044  * @plane_fmt:          per-plane information
 3045  * @num_planes:         number of planes for this format
 3046  * @flags:              format flags (V4L2_PIX_FMT_FLAG_*)
 3047  * @ycbcr_enc:          enum v4l2_ycbcr_encoding, Y'CbCr encoding
 3048  * @quantization:       enum v4l2_quantization, colorspace quantization
 3049  * @xfer_func:          enum v4l2_xfer_func, colorspace transfer function
 3050  */
 3051 struct v4l2_pix_format_mplane {
 3052         u_int32_t                               width;
 3053         u_int32_t                               height;
 3054         u_int32_t                               pixelformat;
 3055         u_int32_t                               field;
 3056         u_int32_t                               colorspace;
 3057 
 3058         struct v4l2_plane_pix_format    plane_fmt[VIDEO_MAX_PLANES];
 3059         u_int8_t                                num_planes;
 3060         u_int8_t                                flags;
 3061          union {
 3062                 u_int8_t                                ycbcr_enc;
 3063                 u_int8_t                                hsv_enc;
 3064         };
 3065         u_int8_t                                quantization;
 3066         u_int8_t                                xfer_func;
 3067         u_int8_t                                reserved[7];
 3068 } __attribute__ ((packed));
 3069 
 3070 /**
 3071  * struct v4l2_sdr_format - SDR format definition
 3072  * @pixelformat:        little endian four character code (fourcc)
 3073  * @buffersize:         maximum size in bytes required for data
 3074  */
 3075 struct v4l2_sdr_format {
 3076         u_int32_t                               pixelformat;
 3077         u_int32_t                               buffersize;
 3078         u_int8_t                                reserved[24];
 3079 } __attribute__ ((packed));
 3080 
 3081 /**
 3082  * struct v4l2_format - stream data format
 3083  * @type:       enum v4l2_buf_type; type of the data stream
 3084  * @pix:        definition of an image format
 3085  * @pix_mp:     definition of a multiplanar image format
 3086  * @win:        definition of an overlaid image
 3087  * @vbi:        raw VBI capture or output parameters
 3088  * @sliced:     sliced VBI capture or output parameters
 3089  * @raw_data:   placeholder for future extensions and custom formats
 3090  */
 3091 struct v4l2_format {
 3092         u_int32_t        type;
 3093         union {
 3094                 struct v4l2_pix_format          pix;     /* V4L2_BUF_TYPE_VIDEO_CAPTURE */
 3095                 struct v4l2_pix_format_mplane   pix_mp;  /* V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE */
 3096                 struct v4l2_window              win;     /* V4L2_BUF_TYPE_VIDEO_OVERLAY */
 3097                 struct v4l2_vbi_format          vbi;     /* V4L2_BUF_TYPE_VBI_CAPTURE */
 3098                 struct v4l2_sliced_vbi_format   sliced;  /* V4L2_BUF_TYPE_SLICED_VBI_CAPTURE */
 3099                 struct v4l2_sdr_format          sdr;     /* V4L2_BUF_TYPE_SDR_CAPTURE */
 3100                 u_int8_t        raw_data[200];                   /* user-defined */
 3101         } fmt;
 3102 };
 3103 
 3104 /*      Stream type-dependent parameters
 3105  */
 3106 struct v4l2_streamparm {
 3107         u_int32_t        type;                  /* enum v4l2_buf_type */
 3108         union {
 3109                 struct v4l2_captureparm capture;
 3110                 struct v4l2_outputparm  output;
 3111                 u_int8_t        raw_data[200];  /* user-defined */
 3112         } parm;
 3113 };
 3114 
 3115 /*
 3116  *      E V E N T S
 3117  */
 3118 
 3119 #define V4L2_EVENT_ALL                          0
 3120 #define V4L2_EVENT_VSYNC                        1
 3121 #define V4L2_EVENT_EOS                          2
 3122 #define V4L2_EVENT_CTRL                         3
 3123 #define V4L2_EVENT_FRAME_SYNC                   4
 3124 #define V4L2_EVENT_SOURCE_CHANGE                5
 3125 #define V4L2_EVENT_MOTION_DET                   6
 3126 #define V4L2_EVENT_PRIVATE_START                0x08000000
 3127 
 3128 /* Payload for V4L2_EVENT_VSYNC */
 3129 struct v4l2_event_vsync {
 3130         /* Can be V4L2_FIELD_ANY, _NONE, _TOP or _BOTTOM */
 3131         u_int8_t field;
 3132 } __attribute__ ((packed));
 3133 
 3134 /* Payload for V4L2_EVENT_CTRL */
 3135 #define V4L2_EVENT_CTRL_CH_VALUE                (1 << 0)
 3136 #define V4L2_EVENT_CTRL_CH_FLAGS                (1 << 1)
 3137 #define V4L2_EVENT_CTRL_CH_RANGE                (1 << 2)
 3138 
 3139 struct v4l2_event_ctrl {
 3140         u_int32_t changes;
 3141         u_int32_t type;
 3142         union {
 3143                 int32_t value;
 3144                 int64_t value64;
 3145         };
 3146         u_int32_t flags;
 3147         int32_t minimum;
 3148         int32_t maximum;
 3149         int32_t step;
 3150         int32_t default_value;
 3151 };
 3152 
 3153 struct v4l2_event_frame_sync {
 3154         u_int32_t frame_sequence;
 3155 };
 3156 
 3157 #define V4L2_EVENT_SRC_CH_RESOLUTION            (1 << 0)
 3158 
 3159 struct v4l2_event_src_change {
 3160         u_int32_t changes;
 3161 };
 3162 
 3163 #define V4L2_EVENT_MD_FL_HAVE_FRAME_SEQ (1 << 0)
 3164 
 3165 /**
 3166  * struct v4l2_event_motion_det - motion detection event
 3167  * @flags:             if V4L2_EVENT_MD_FL_HAVE_FRAME_SEQ is set, then the
 3168  *                     frame_sequence field is valid.
 3169  * @frame_sequence:    the frame sequence number associated with this event.
 3170  * @region_mask:       which regions detected motion.
 3171  */
 3172 struct v4l2_event_motion_det {
 3173         u_int32_t flags;
 3174         u_int32_t frame_sequence;
 3175         u_int32_t region_mask;
 3176 };
 3177 
 3178 struct v4l2_event {
 3179         u_int32_t                               type;
 3180         union {
 3181                 struct v4l2_event_vsync         vsync;
 3182                 struct v4l2_event_ctrl          ctrl;
 3183                 struct v4l2_event_frame_sync    frame_sync;
 3184                 struct v4l2_event_src_change    src_change;
 3185                 struct v4l2_event_motion_det    motion_det;
 3186                 u_int8_t                                data[64];
 3187         } u;
 3188         u_int32_t                               pending;
 3189         u_int32_t                               sequence;
 3190         struct timespec                 timestamp;
 3191         u_int32_t                               id;
 3192         u_int32_t                               reserved[8];
 3193 };
 3194 
 3195 #define V4L2_EVENT_SUB_FL_SEND_INITIAL          (1 << 0)
 3196 #define V4L2_EVENT_SUB_FL_ALLOW_FEEDBACK        (1 << 1)
 3197 
 3198 struct v4l2_event_subscription {
 3199         u_int32_t                               type;
 3200         u_int32_t                               id;
 3201         u_int32_t                               flags;
 3202         u_int32_t                               reserved[5];
 3203 };
 3204 
 3205 /*
 3206  *      A D V A N C E D   D E B U G G I N G
 3207  *
 3208  *      NOTE: EXPERIMENTAL API, NEVER RELY ON THIS IN APPLICATIONS!
 3209  *      FOR DEBUGGING, TESTING AND INTERNAL USE ONLY!
 3210  */
 3211 
 3212 /* VIDIOC_DBG_G_REGISTER and VIDIOC_DBG_S_REGISTER */
 3213 
 3214 #define V4L2_CHIP_MATCH_BRIDGE      0  /* Match against chip ID on the bridge (0 for the bridge) */
 3215 #define V4L2_CHIP_MATCH_SUBDEV      4  /* Match against subdev index */
 3216 
 3217 /* The following four defines are no longer in use */
 3218 #define V4L2_CHIP_MATCH_HOST V4L2_CHIP_MATCH_BRIDGE
 3219 #define V4L2_CHIP_MATCH_I2C_DRIVER  1  /* Match against I2C driver name */
 3220 #define V4L2_CHIP_MATCH_I2C_ADDR    2  /* Match against I2C 7-bit address */
 3221 #define V4L2_CHIP_MATCH_AC97        3  /* Match against ancillary AC97 chip */
 3222 
 3223 struct v4l2_dbg_match {
 3224         u_int32_t type; /* Match type */
 3225         union {     /* Match this chip, meaning determined by type */
 3226                 u_int32_t addr;
 3227                 char name[32];
 3228         };
 3229 } __attribute__ ((packed));
 3230 
 3231 struct v4l2_dbg_register {
 3232         struct v4l2_dbg_match match;
 3233         u_int32_t size; /* register size in bytes */
 3234         u_int64_t reg;
 3235         u_int64_t val;
 3236 } __attribute__ ((packed));
 3237 
 3238 #define V4L2_CHIP_FL_READABLE (1 << 0)
 3239 #define V4L2_CHIP_FL_WRITABLE (1 << 1)
 3240 
 3241 /* VIDIOC_DBG_G_CHIP_INFO */
 3242 struct v4l2_dbg_chip_info {
 3243         struct v4l2_dbg_match match;
 3244         char name[32];
 3245         u_int32_t flags;
 3246         u_int32_t reserved[32];
 3247 } __attribute__ ((packed));
 3248 
 3249 /**
 3250  * struct v4l2_create_buffers - VIDIOC_CREATE_BUFS argument
 3251  * @index:      on return, index of the first created buffer
 3252  * @count:      entry: number of requested buffers,
 3253  *              return: number of created buffers
 3254  * @memory:     enum v4l2_memory; buffer memory type
 3255  * @format:     frame format, for which buffers are requested
 3256  * @reserved:   future extensions
 3257  */
 3258 struct v4l2_create_buffers {
 3259         u_int32_t                       index;
 3260         u_int32_t                       count;
 3261         u_int32_t                       memory;
 3262         struct v4l2_format      format;
 3263         u_int32_t                       reserved[8];
 3264 };
 3265 
 3266 /*
 3267  *      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
 3268  *
 3269  */
 3270 #define VIDIOC_QUERYCAP          _IOR('V',  0, struct v4l2_capability)
 3271 #define VIDIOC_RESERVED           _IO('V',  1)
 3272 #define VIDIOC_ENUM_FMT         _IOWR('V',  2, struct v4l2_fmtdesc)
 3273 #define VIDIOC_G_FMT            _IOWR('V',  4, struct v4l2_format)
 3274 #define VIDIOC_S_FMT            _IOWR('V',  5, struct v4l2_format)
 3275 #define VIDIOC_REQBUFS          _IOWR('V',  8, struct v4l2_requestbuffers)
 3276 #define VIDIOC_QUERYBUF         _IOWR('V',  9, struct v4l2_buffer)
 3277 #define VIDIOC_G_FBUF            _IOR('V', 10, struct v4l2_framebuffer)
 3278 #define VIDIOC_S_FBUF            _IOW('V', 11, struct v4l2_framebuffer)
 3279 #define VIDIOC_OVERLAY           _IOW('V', 14, int)
 3280 #define VIDIOC_QBUF             _IOWR('V', 15, struct v4l2_buffer)
 3281 #define VIDIOC_EXPBUF           _IOWR('V', 16, struct v4l2_exportbuffer)
 3282 #define VIDIOC_DQBUF            _IOWR('V', 17, struct v4l2_buffer)
 3283 #define VIDIOC_STREAMON          _IOW('V', 18, int)
 3284 #define VIDIOC_STREAMOFF         _IOW('V', 19, int)
 3285 #define VIDIOC_G_PARM           _IOWR('V', 21, struct v4l2_streamparm)
 3286 #define VIDIOC_S_PARM           _IOWR('V', 22, struct v4l2_streamparm)
 3287 #define VIDIOC_G_STD             _IOR('V', 23, v4l2_std_id)
 3288 #define VIDIOC_S_STD             _IOW('V', 24, v4l2_std_id)
 3289 #define VIDIOC_ENUMSTD          _IOWR('V', 25, struct v4l2_standard)
 3290 #define VIDIOC_ENUMINPUT        _IOWR('V', 26, struct v4l2_input)
 3291 #define VIDIOC_G_CTRL           _IOWR('V', 27, struct v4l2_control)
 3292 #define VIDIOC_S_CTRL           _IOWR('V', 28, struct v4l2_control)
 3293 #define VIDIOC_G_TUNER          _IOWR('V', 29, struct v4l2_tuner)
 3294 #define VIDIOC_S_TUNER           _IOW('V', 30, struct v4l2_tuner)
 3295 #define VIDIOC_G_AUDIO           _IOR('V', 33, struct v4l2_audio)
 3296 #define VIDIOC_S_AUDIO           _IOW('V', 34, struct v4l2_audio)
 3297 #define VIDIOC_QUERYCTRL        _IOWR('V', 36, struct v4l2_queryctrl)
 3298 #define VIDIOC_QUERYMENU        _IOWR('V', 37, struct v4l2_querymenu)
 3299 #define VIDIOC_G_INPUT           _IOR('V', 38, int)
 3300 #define VIDIOC_S_INPUT          _IOWR('V', 39, int)
 3301 #define VIDIOC_G_EDID           _IOWR('V', 40, struct v4l2_edid)
 3302 #define VIDIOC_S_EDID           _IOWR('V', 41, struct v4l2_edid)
 3303 #define VIDIOC_G_OUTPUT          _IOR('V', 46, int)
 3304 #define VIDIOC_S_OUTPUT         _IOWR('V', 47, int)
 3305 #define VIDIOC_ENUMOUTPUT       _IOWR('V', 48, struct v4l2_output)
 3306 #define VIDIOC_G_AUDOUT          _IOR('V', 49, struct v4l2_audioout)
 3307 #define VIDIOC_S_AUDOUT          _IOW('V', 50, struct v4l2_audioout)
 3308 #define VIDIOC_G_MODULATOR      _IOWR('V', 54, struct v4l2_modulator)
 3309 #define VIDIOC_S_MODULATOR       _IOW('V', 55, struct v4l2_modulator)
 3310 #define VIDIOC_G_FREQUENCY      _IOWR('V', 56, struct v4l2_frequency)
 3311 #define VIDIOC_S_FREQUENCY       _IOW('V', 57, struct v4l2_frequency)
 3312 #define VIDIOC_CROPCAP          _IOWR('V', 58, struct v4l2_cropcap)
 3313 #define VIDIOC_G_CROP           _IOWR('V', 59, struct v4l2_crop)
 3314 #define VIDIOC_S_CROP            _IOW('V', 60, struct v4l2_crop)
 3315 #define VIDIOC_G_JPEGCOMP        _IOR('V', 61, struct v4l2_jpegcompression)
 3316 #define VIDIOC_S_JPEGCOMP        _IOW('V', 62, struct v4l2_jpegcompression)
 3317 #define VIDIOC_QUERYSTD          _IOR('V', 63, v4l2_std_id)
 3318 #define VIDIOC_TRY_FMT          _IOWR('V', 64, struct v4l2_format)
 3319 #define VIDIOC_ENUMAUDIO        _IOWR('V', 65, struct v4l2_audio)
 3320 #define VIDIOC_ENUMAUDOUT       _IOWR('V', 66, struct v4l2_audioout)
 3321 #define VIDIOC_G_PRIORITY        _IOR('V', 67, u_int32_t) /* enum v4l2_priority */
 3322 #define VIDIOC_S_PRIORITY        _IOW('V', 68, u_int32_t) /* enum v4l2_priority */
 3323 #define VIDIOC_G_SLICED_VBI_CAP _IOWR('V', 69, struct v4l2_sliced_vbi_cap)
 3324 #define VIDIOC_LOG_STATUS         _IO('V', 70)
 3325 #define VIDIOC_G_EXT_CTRLS      _IOWR('V', 71, struct v4l2_ext_controls)
 3326 #define VIDIOC_S_EXT_CTRLS      _IOWR('V', 72, struct v4l2_ext_controls)
 3327 #define VIDIOC_TRY_EXT_CTRLS    _IOWR('V', 73, struct v4l2_ext_controls)
 3328 #define VIDIOC_ENUM_FRAMESIZES  _IOWR('V', 74, struct v4l2_frmsizeenum)
 3329 #define VIDIOC_ENUM_FRAMEINTERVALS _IOWR('V', 75, struct v4l2_frmivalenum)
 3330 #define VIDIOC_G_ENC_INDEX       _IOR('V', 76, struct v4l2_enc_idx)
 3331 #define VIDIOC_ENCODER_CMD      _IOWR('V', 77, struct v4l2_encoder_cmd)
 3332 #define VIDIOC_TRY_ENCODER_CMD  _IOWR('V', 78, struct v4l2_encoder_cmd)
 3333 
 3334 /*
 3335  * Experimental, meant for debugging, testing and internal use.
 3336  * Only implemented if CONFIG_VIDEO_ADV_DEBUG is defined.
 3337  * You must be root to use these ioctls. Never use these in applications!
 3338  */
 3339 #define VIDIOC_DBG_S_REGISTER    _IOW('V', 79, struct v4l2_dbg_register)
 3340 #define VIDIOC_DBG_G_REGISTER   _IOWR('V', 80, struct v4l2_dbg_register)
 3341 
 3342 #define VIDIOC_S_HW_FREQ_SEEK    _IOW('V', 82, struct v4l2_hw_freq_seek)
 3343 #define VIDIOC_S_DV_TIMINGS     _IOWR('V', 87, struct v4l2_dv_timings)
 3344 #define VIDIOC_G_DV_TIMINGS     _IOWR('V', 88, struct v4l2_dv_timings)
 3345 #define VIDIOC_DQEVENT           _IOR('V', 89, struct v4l2_event)
 3346 #define VIDIOC_SUBSCRIBE_EVENT   _IOW('V', 90, struct v4l2_event_subscription)
 3347 #define VIDIOC_UNSUBSCRIBE_EVENT _IOW('V', 91, struct v4l2_event_subscription)
 3348 #define VIDIOC_CREATE_BUFS      _IOWR('V', 92, struct v4l2_create_buffers)
 3349 #define VIDIOC_PREPARE_BUF      _IOWR('V', 93, struct v4l2_buffer)
 3350 #define VIDIOC_G_SELECTION      _IOWR('V', 94, struct v4l2_selection)
 3351 #define VIDIOC_S_SELECTION      _IOWR('V', 95, struct v4l2_selection)
 3352 #define VIDIOC_DECODER_CMD      _IOWR('V', 96, struct v4l2_decoder_cmd)
 3353 #define VIDIOC_TRY_DECODER_CMD  _IOWR('V', 97, struct v4l2_decoder_cmd)
 3354 #define VIDIOC_ENUM_DV_TIMINGS  _IOWR('V', 98, struct v4l2_enum_dv_timings)
 3355 #define VIDIOC_QUERY_DV_TIMINGS  _IOR('V', 99, struct v4l2_dv_timings)
 3356 #define VIDIOC_DV_TIMINGS_CAP   _IOWR('V', 100, struct v4l2_dv_timings_cap)
 3357 #define VIDIOC_ENUM_FREQ_BANDS  _IOWR('V', 101, struct v4l2_frequency_band)
 3358 
 3359 /*
 3360  * Experimental, meant for debugging, testing and internal use.
 3361  * Never use this in applications!
 3362  */
 3363 #define VIDIOC_DBG_G_CHIP_INFO  _IOWR('V', 102, struct v4l2_dbg_chip_info)
 3364 
 3365 #define VIDIOC_QUERY_EXT_CTRL   _IOWR('V', 103, struct v4l2_query_ext_ctrl)
 3366 
 3367 /* Reminder: when adding new ioctls please add support for them to
 3368    drivers/media/v4l2-core/v4l2-compat-ioctl32.c as well! */
 3369 
 3370 #define BASE_VIDIOC_PRIVATE     192             /* 192-255 are private */
 3371 
 3372 #endif /* _SYS_VIDEOIO_H_ */

Cache object: ca28c63d2afb3d301b24b5e7d09d428e


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.