LCOV - code coverage report
Current view: top level - include/uapi/linux - videodev2.h (source / functions) Hit Total Coverage
Test: Real Lines: 0 1 0.0 %
Date: 2020-10-17 15:46:43 Functions: 0 0 -
Legend: Neither, QEMU, Real, Both Branches: 0 0 -

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

Generated by: LCOV version 1.14