1607ca46eSDavid Howells /* 2607ca46eSDavid Howells * Video for Linux Two header file 3607ca46eSDavid Howells * 4607ca46eSDavid Howells * Copyright (C) 1999-2012 the contributors 5607ca46eSDavid Howells * 6607ca46eSDavid Howells * This program is free software; you can redistribute it and/or modify 7607ca46eSDavid Howells * it under the terms of the GNU General Public License as published by 8607ca46eSDavid Howells * the Free Software Foundation; either version 2 of the License, or 9607ca46eSDavid Howells * (at your option) any later version. 10607ca46eSDavid Howells * 11607ca46eSDavid Howells * This program is distributed in the hope that it will be useful, 12607ca46eSDavid Howells * but WITHOUT ANY WARRANTY; without even the implied warranty of 13607ca46eSDavid Howells * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14607ca46eSDavid Howells * GNU General Public License for more details. 15607ca46eSDavid Howells * 16607ca46eSDavid Howells * Alternatively you can redistribute this file under the terms of the 17607ca46eSDavid Howells * BSD license as stated below: 18607ca46eSDavid Howells * 19607ca46eSDavid Howells * Redistribution and use in source and binary forms, with or without 20607ca46eSDavid Howells * modification, are permitted provided that the following conditions 21607ca46eSDavid Howells * are met: 22607ca46eSDavid Howells * 1. Redistributions of source code must retain the above copyright 23607ca46eSDavid Howells * notice, this list of conditions and the following disclaimer. 24607ca46eSDavid Howells * 2. Redistributions in binary form must reproduce the above copyright 25607ca46eSDavid Howells * notice, this list of conditions and the following disclaimer in 26607ca46eSDavid Howells * the documentation and/or other materials provided with the 27607ca46eSDavid Howells * distribution. 28607ca46eSDavid Howells * 3. The names of its contributors may not be used to endorse or promote 29607ca46eSDavid Howells * products derived from this software without specific prior written 30607ca46eSDavid Howells * permission. 31607ca46eSDavid Howells * 32607ca46eSDavid Howells * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 33607ca46eSDavid Howells * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 34607ca46eSDavid Howells * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 35607ca46eSDavid Howells * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 36607ca46eSDavid Howells * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 37607ca46eSDavid Howells * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED 38607ca46eSDavid Howells * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 39607ca46eSDavid Howells * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 40607ca46eSDavid Howells * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 41607ca46eSDavid Howells * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 42607ca46eSDavid Howells * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 43607ca46eSDavid Howells * 44607ca46eSDavid Howells * Header file for v4l or V4L2 drivers and applications 45607ca46eSDavid Howells * with public API. 46607ca46eSDavid Howells * All kernel-specific stuff were moved to media/v4l2-dev.h, so 47607ca46eSDavid Howells * no #if __KERNEL tests are allowed here 48607ca46eSDavid Howells * 49607ca46eSDavid Howells * See http://linuxtv.org for more info 50607ca46eSDavid Howells * 51607ca46eSDavid Howells * Author: Bill Dirks <[email protected]> 52607ca46eSDavid Howells * Justin Schoeman 53607ca46eSDavid Howells * Hans Verkuil <[email protected]> 54607ca46eSDavid Howells * et al. 55607ca46eSDavid Howells */ 56607ca46eSDavid Howells #ifndef _UAPI__LINUX_VIDEODEV2_H 57607ca46eSDavid Howells #define _UAPI__LINUX_VIDEODEV2_H 58607ca46eSDavid Howells 59607ca46eSDavid Howells #ifndef __KERNEL__ 60607ca46eSDavid Howells #include <sys/time.h> 61607ca46eSDavid Howells #endif 62607ca46eSDavid Howells #include <linux/compiler.h> 63607ca46eSDavid Howells #include <linux/ioctl.h> 64607ca46eSDavid Howells #include <linux/types.h> 65607ca46eSDavid Howells #include <linux/v4l2-common.h> 66607ca46eSDavid Howells #include <linux/v4l2-controls.h> 67607ca46eSDavid Howells 68607ca46eSDavid Howells /* 69607ca46eSDavid Howells * Common stuff for both V4L1 and V4L2 70607ca46eSDavid Howells * Moved from videodev.h 71607ca46eSDavid Howells */ 72607ca46eSDavid Howells #define VIDEO_MAX_FRAME 32 73607ca46eSDavid Howells #define VIDEO_MAX_PLANES 8 74607ca46eSDavid Howells 75607ca46eSDavid Howells /* 76607ca46eSDavid Howells * M I S C E L L A N E O U S 77607ca46eSDavid Howells */ 78607ca46eSDavid Howells 79607ca46eSDavid Howells /* Four-character-code (FOURCC) */ 80607ca46eSDavid Howells #define v4l2_fourcc(a, b, c, d)\ 81607ca46eSDavid Howells ((__u32)(a) | ((__u32)(b) << 8) | ((__u32)(c) << 16) | ((__u32)(d) << 24)) 82fcc0d3dbSLaurent Pinchart #define v4l2_fourcc_be(a, b, c, d) (v4l2_fourcc(a, b, c, d) | (1 << 31)) 83607ca46eSDavid Howells 84607ca46eSDavid Howells /* 85607ca46eSDavid Howells * E N U M S 86607ca46eSDavid Howells */ 87607ca46eSDavid Howells enum v4l2_field { 88607ca46eSDavid Howells V4L2_FIELD_ANY = 0, /* driver can choose from none, 89607ca46eSDavid Howells top, bottom, interlaced 90607ca46eSDavid Howells depending on whatever it thinks 91607ca46eSDavid Howells is approximate ... */ 92607ca46eSDavid Howells V4L2_FIELD_NONE = 1, /* this device has no fields ... */ 93607ca46eSDavid Howells V4L2_FIELD_TOP = 2, /* top field only */ 94607ca46eSDavid Howells V4L2_FIELD_BOTTOM = 3, /* bottom field only */ 95607ca46eSDavid Howells V4L2_FIELD_INTERLACED = 4, /* both fields interlaced */ 96607ca46eSDavid Howells V4L2_FIELD_SEQ_TB = 5, /* both fields sequential into one 97607ca46eSDavid Howells buffer, top-bottom order */ 98607ca46eSDavid Howells V4L2_FIELD_SEQ_BT = 6, /* same as above + bottom-top order */ 99607ca46eSDavid Howells V4L2_FIELD_ALTERNATE = 7, /* both fields alternating into 100607ca46eSDavid Howells separate buffers */ 101607ca46eSDavid Howells V4L2_FIELD_INTERLACED_TB = 8, /* both fields interlaced, top field 102607ca46eSDavid Howells first and the top field is 103607ca46eSDavid Howells transmitted first */ 104607ca46eSDavid Howells V4L2_FIELD_INTERLACED_BT = 9, /* both fields interlaced, top field 105607ca46eSDavid Howells first and the bottom field is 106607ca46eSDavid Howells transmitted first */ 107607ca46eSDavid Howells }; 108607ca46eSDavid Howells #define V4L2_FIELD_HAS_TOP(field) \ 109607ca46eSDavid Howells ((field) == V4L2_FIELD_TOP ||\ 110607ca46eSDavid Howells (field) == V4L2_FIELD_INTERLACED ||\ 111607ca46eSDavid Howells (field) == V4L2_FIELD_INTERLACED_TB ||\ 112607ca46eSDavid Howells (field) == V4L2_FIELD_INTERLACED_BT ||\ 113607ca46eSDavid Howells (field) == V4L2_FIELD_SEQ_TB ||\ 114607ca46eSDavid Howells (field) == V4L2_FIELD_SEQ_BT) 115607ca46eSDavid Howells #define V4L2_FIELD_HAS_BOTTOM(field) \ 116607ca46eSDavid Howells ((field) == V4L2_FIELD_BOTTOM ||\ 117607ca46eSDavid Howells (field) == V4L2_FIELD_INTERLACED ||\ 118607ca46eSDavid Howells (field) == V4L2_FIELD_INTERLACED_TB ||\ 119607ca46eSDavid Howells (field) == V4L2_FIELD_INTERLACED_BT ||\ 120607ca46eSDavid Howells (field) == V4L2_FIELD_SEQ_TB ||\ 121607ca46eSDavid Howells (field) == V4L2_FIELD_SEQ_BT) 122607ca46eSDavid Howells #define V4L2_FIELD_HAS_BOTH(field) \ 123607ca46eSDavid Howells ((field) == V4L2_FIELD_INTERLACED ||\ 124607ca46eSDavid Howells (field) == V4L2_FIELD_INTERLACED_TB ||\ 125607ca46eSDavid Howells (field) == V4L2_FIELD_INTERLACED_BT ||\ 126607ca46eSDavid Howells (field) == V4L2_FIELD_SEQ_TB ||\ 127607ca46eSDavid Howells (field) == V4L2_FIELD_SEQ_BT) 128e34c4db8SHans Verkuil #define V4L2_FIELD_HAS_T_OR_B(field) \ 129e34c4db8SHans Verkuil ((field) == V4L2_FIELD_BOTTOM ||\ 130e34c4db8SHans Verkuil (field) == V4L2_FIELD_TOP ||\ 131e34c4db8SHans Verkuil (field) == V4L2_FIELD_ALTERNATE) 132607ca46eSDavid Howells 133607ca46eSDavid Howells enum v4l2_buf_type { 134607ca46eSDavid Howells V4L2_BUF_TYPE_VIDEO_CAPTURE = 1, 135607ca46eSDavid Howells V4L2_BUF_TYPE_VIDEO_OUTPUT = 2, 136607ca46eSDavid Howells V4L2_BUF_TYPE_VIDEO_OVERLAY = 3, 137607ca46eSDavid Howells V4L2_BUF_TYPE_VBI_CAPTURE = 4, 138607ca46eSDavid Howells V4L2_BUF_TYPE_VBI_OUTPUT = 5, 139607ca46eSDavid Howells V4L2_BUF_TYPE_SLICED_VBI_CAPTURE = 6, 140607ca46eSDavid Howells V4L2_BUF_TYPE_SLICED_VBI_OUTPUT = 7, 141607ca46eSDavid Howells #if 1 142607ca46eSDavid Howells /* Experimental */ 143607ca46eSDavid Howells V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY = 8, 144607ca46eSDavid Howells #endif 145607ca46eSDavid Howells V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE = 9, 146607ca46eSDavid Howells V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE = 10, 1476f3073b8SAntti Palosaari V4L2_BUF_TYPE_SDR_CAPTURE = 11, 148607ca46eSDavid Howells /* Deprecated, do not use */ 149607ca46eSDavid Howells V4L2_BUF_TYPE_PRIVATE = 0x80, 150607ca46eSDavid Howells }; 151607ca46eSDavid Howells 152607ca46eSDavid Howells #define V4L2_TYPE_IS_MULTIPLANAR(type) \ 153607ca46eSDavid Howells ((type) == V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE \ 154607ca46eSDavid Howells || (type) == V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE) 155607ca46eSDavid Howells 156607ca46eSDavid Howells #define V4L2_TYPE_IS_OUTPUT(type) \ 157607ca46eSDavid Howells ((type) == V4L2_BUF_TYPE_VIDEO_OUTPUT \ 158607ca46eSDavid Howells || (type) == V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE \ 159607ca46eSDavid Howells || (type) == V4L2_BUF_TYPE_VIDEO_OVERLAY \ 160607ca46eSDavid Howells || (type) == V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY \ 161607ca46eSDavid Howells || (type) == V4L2_BUF_TYPE_VBI_OUTPUT \ 162607ca46eSDavid Howells || (type) == V4L2_BUF_TYPE_SLICED_VBI_OUTPUT) 163607ca46eSDavid Howells 164607ca46eSDavid Howells enum v4l2_tuner_type { 165607ca46eSDavid Howells V4L2_TUNER_RADIO = 1, 166607ca46eSDavid Howells V4L2_TUNER_ANALOG_TV = 2, 167607ca46eSDavid Howells V4L2_TUNER_DIGITAL_TV = 3, 16884099a28SAntti Palosaari V4L2_TUNER_ADC = 4, 16984099a28SAntti Palosaari V4L2_TUNER_RF = 5, 170607ca46eSDavid Howells }; 171607ca46eSDavid Howells 172607ca46eSDavid Howells enum v4l2_memory { 173607ca46eSDavid Howells V4L2_MEMORY_MMAP = 1, 174607ca46eSDavid Howells V4L2_MEMORY_USERPTR = 2, 175607ca46eSDavid Howells V4L2_MEMORY_OVERLAY = 3, 176051c7788SSumit Semwal V4L2_MEMORY_DMABUF = 4, 177607ca46eSDavid Howells }; 178607ca46eSDavid Howells 179607ca46eSDavid Howells /* see also http://vektor.theorem.ca/graphics/ycbcr/ */ 180607ca46eSDavid Howells enum v4l2_colorspace { 181e01dfc01SHans Verkuil /* 182e01dfc01SHans Verkuil * Default colorspace, i.e. let the driver figure it out. 183e01dfc01SHans Verkuil * Can only be used with video capture. 184e01dfc01SHans Verkuil */ 185e01dfc01SHans Verkuil V4L2_COLORSPACE_DEFAULT = 0, 186e01dfc01SHans Verkuil 187d5735d64SHans Verkuil /* SMPTE 170M: used for broadcast NTSC/PAL SDTV */ 188607ca46eSDavid Howells V4L2_COLORSPACE_SMPTE170M = 1, 189607ca46eSDavid Howells 190d5735d64SHans Verkuil /* Obsolete pre-1998 SMPTE 240M HDTV standard, superseded by Rec 709 */ 191607ca46eSDavid Howells V4L2_COLORSPACE_SMPTE240M = 2, 192607ca46eSDavid Howells 193d5735d64SHans Verkuil /* Rec.709: used for HDTV */ 194607ca46eSDavid Howells V4L2_COLORSPACE_REC709 = 3, 195607ca46eSDavid Howells 196d5735d64SHans Verkuil /* 197d5735d64SHans Verkuil * Deprecated, do not use. No driver will ever return this. This was 198d5735d64SHans Verkuil * based on a misunderstanding of the bt878 datasheet. 199d5735d64SHans Verkuil */ 200607ca46eSDavid Howells V4L2_COLORSPACE_BT878 = 4, 201607ca46eSDavid Howells 202d5735d64SHans Verkuil /* 203d5735d64SHans Verkuil * NTSC 1953 colorspace. This only makes sense when dealing with 204d5735d64SHans Verkuil * really, really old NTSC recordings. Superseded by SMPTE 170M. 205d5735d64SHans Verkuil */ 206607ca46eSDavid Howells V4L2_COLORSPACE_470_SYSTEM_M = 5, 207d5735d64SHans Verkuil 208d5735d64SHans Verkuil /* 209d5735d64SHans Verkuil * EBU Tech 3213 PAL/SECAM colorspace. This only makes sense when 210d5735d64SHans Verkuil * dealing with really old PAL/SECAM recordings. Superseded by 211d5735d64SHans Verkuil * SMPTE 170M. 212d5735d64SHans Verkuil */ 213607ca46eSDavid Howells V4L2_COLORSPACE_470_SYSTEM_BG = 6, 214607ca46eSDavid Howells 215d5735d64SHans Verkuil /* 216d5735d64SHans Verkuil * Effectively shorthand for V4L2_COLORSPACE_SRGB, V4L2_YCBCR_ENC_601 217d5735d64SHans Verkuil * and V4L2_QUANTIZATION_FULL_RANGE. To be used for (Motion-)JPEG. 218607ca46eSDavid Howells */ 219607ca46eSDavid Howells V4L2_COLORSPACE_JPEG = 7, 220607ca46eSDavid Howells 221d5735d64SHans Verkuil /* For RGB colorspaces such as produces by most webcams. */ 222607ca46eSDavid Howells V4L2_COLORSPACE_SRGB = 8, 223d5735d64SHans Verkuil 224d5735d64SHans Verkuil /* AdobeRGB colorspace */ 225d5735d64SHans Verkuil V4L2_COLORSPACE_ADOBERGB = 9, 226d5735d64SHans Verkuil 227d5735d64SHans Verkuil /* BT.2020 colorspace, used for UHDTV. */ 228d5735d64SHans Verkuil V4L2_COLORSPACE_BT2020 = 10, 229addad105SHans Verkuil 230addad105SHans Verkuil /* Raw colorspace: for RAW unprocessed images */ 231addad105SHans Verkuil V4L2_COLORSPACE_RAW = 11, 232d5735d64SHans Verkuil }; 233d5735d64SHans Verkuil 2343818c4daSHans Verkuil /* 2353818c4daSHans Verkuil * Determine how COLORSPACE_DEFAULT should map to a proper colorspace. 2363818c4daSHans Verkuil * This depends on whether this is a SDTV image (use SMPTE 170M), an 2373818c4daSHans Verkuil * HDTV image (use Rec. 709), or something else (use sRGB). 2383818c4daSHans Verkuil */ 2393818c4daSHans Verkuil #define V4L2_MAP_COLORSPACE_DEFAULT(is_sdtv, is_hdtv) \ 2403818c4daSHans Verkuil ((is_sdtv) ? V4L2_COLORSPACE_SMPTE170M : \ 2413818c4daSHans Verkuil ((is_hdtv) ? V4L2_COLORSPACE_REC709 : V4L2_COLORSPACE_SRGB)) 2423818c4daSHans Verkuil 24374fdcb2eSHans Verkuil enum v4l2_xfer_func { 24474fdcb2eSHans Verkuil /* 24574fdcb2eSHans Verkuil * Mapping of V4L2_XFER_FUNC_DEFAULT to actual transfer functions 24674fdcb2eSHans Verkuil * for the various colorspaces: 24774fdcb2eSHans Verkuil * 24874fdcb2eSHans Verkuil * V4L2_COLORSPACE_SMPTE170M, V4L2_COLORSPACE_470_SYSTEM_M, 24974fdcb2eSHans Verkuil * V4L2_COLORSPACE_470_SYSTEM_BG, V4L2_COLORSPACE_REC709 and 25074fdcb2eSHans Verkuil * V4L2_COLORSPACE_BT2020: V4L2_XFER_FUNC_709 25174fdcb2eSHans Verkuil * 25274fdcb2eSHans Verkuil * V4L2_COLORSPACE_SRGB, V4L2_COLORSPACE_JPEG: V4L2_XFER_FUNC_SRGB 25374fdcb2eSHans Verkuil * 25474fdcb2eSHans Verkuil * V4L2_COLORSPACE_ADOBERGB: V4L2_XFER_FUNC_ADOBERGB 25574fdcb2eSHans Verkuil * 25674fdcb2eSHans Verkuil * V4L2_COLORSPACE_SMPTE240M: V4L2_XFER_FUNC_SMPTE240M 25774fdcb2eSHans Verkuil * 25874fdcb2eSHans Verkuil * V4L2_COLORSPACE_RAW: V4L2_XFER_FUNC_NONE 25974fdcb2eSHans Verkuil */ 26074fdcb2eSHans Verkuil V4L2_XFER_FUNC_DEFAULT = 0, 26174fdcb2eSHans Verkuil V4L2_XFER_FUNC_709 = 1, 26274fdcb2eSHans Verkuil V4L2_XFER_FUNC_SRGB = 2, 26374fdcb2eSHans Verkuil V4L2_XFER_FUNC_ADOBERGB = 3, 26474fdcb2eSHans Verkuil V4L2_XFER_FUNC_SMPTE240M = 4, 26574fdcb2eSHans Verkuil V4L2_XFER_FUNC_NONE = 5, 26674fdcb2eSHans Verkuil }; 26774fdcb2eSHans Verkuil 26874fdcb2eSHans Verkuil /* 26974fdcb2eSHans Verkuil * Determine how XFER_FUNC_DEFAULT should map to a proper transfer function. 27074fdcb2eSHans Verkuil * This depends on the colorspace. 27174fdcb2eSHans Verkuil */ 27274fdcb2eSHans Verkuil #define V4L2_MAP_XFER_FUNC_DEFAULT(colsp) \ 273*f8d5556fSHans Verkuil ((colsp) == V4L2_COLORSPACE_ADOBERGB ? V4L2_XFER_FUNC_ADOBERGB : \ 27474fdcb2eSHans Verkuil ((colsp) == V4L2_COLORSPACE_SMPTE240M ? V4L2_XFER_FUNC_SMPTE240M : \ 27574fdcb2eSHans Verkuil ((colsp) == V4L2_COLORSPACE_RAW ? V4L2_XFER_FUNC_NONE : \ 27674fdcb2eSHans Verkuil ((colsp) == V4L2_COLORSPACE_SRGB || (colsp) == V4L2_COLORSPACE_JPEG ? \ 27774fdcb2eSHans Verkuil V4L2_XFER_FUNC_SRGB : V4L2_XFER_FUNC_709)))) 27874fdcb2eSHans Verkuil 279d5735d64SHans Verkuil enum v4l2_ycbcr_encoding { 280d5735d64SHans Verkuil /* 281d5735d64SHans Verkuil * Mapping of V4L2_YCBCR_ENC_DEFAULT to actual encodings for the 282d5735d64SHans Verkuil * various colorspaces: 283d5735d64SHans Verkuil * 284d5735d64SHans Verkuil * V4L2_COLORSPACE_SMPTE170M, V4L2_COLORSPACE_470_SYSTEM_M, 285d5735d64SHans Verkuil * V4L2_COLORSPACE_470_SYSTEM_BG, V4L2_COLORSPACE_ADOBERGB and 286d5735d64SHans Verkuil * V4L2_COLORSPACE_JPEG: V4L2_YCBCR_ENC_601 287d5735d64SHans Verkuil * 288d5735d64SHans Verkuil * V4L2_COLORSPACE_REC709: V4L2_YCBCR_ENC_709 289d5735d64SHans Verkuil * 290d5735d64SHans Verkuil * V4L2_COLORSPACE_SRGB: V4L2_YCBCR_ENC_SYCC 291d5735d64SHans Verkuil * 292d5735d64SHans Verkuil * V4L2_COLORSPACE_BT2020: V4L2_YCBCR_ENC_BT2020 293d5735d64SHans Verkuil * 294d5735d64SHans Verkuil * V4L2_COLORSPACE_SMPTE240M: V4L2_YCBCR_ENC_SMPTE240M 295d5735d64SHans Verkuil */ 296d5735d64SHans Verkuil V4L2_YCBCR_ENC_DEFAULT = 0, 297d5735d64SHans Verkuil 298d5735d64SHans Verkuil /* ITU-R 601 -- SDTV */ 299d5735d64SHans Verkuil V4L2_YCBCR_ENC_601 = 1, 300d5735d64SHans Verkuil 301d5735d64SHans Verkuil /* Rec. 709 -- HDTV */ 302d5735d64SHans Verkuil V4L2_YCBCR_ENC_709 = 2, 303d5735d64SHans Verkuil 304d5735d64SHans Verkuil /* ITU-R 601/EN 61966-2-4 Extended Gamut -- SDTV */ 305d5735d64SHans Verkuil V4L2_YCBCR_ENC_XV601 = 3, 306d5735d64SHans Verkuil 307d5735d64SHans Verkuil /* Rec. 709/EN 61966-2-4 Extended Gamut -- HDTV */ 308d5735d64SHans Verkuil V4L2_YCBCR_ENC_XV709 = 4, 309d5735d64SHans Verkuil 310d5735d64SHans Verkuil /* sYCC (Y'CbCr encoding of sRGB) */ 311d5735d64SHans Verkuil V4L2_YCBCR_ENC_SYCC = 5, 312d5735d64SHans Verkuil 313d5735d64SHans Verkuil /* BT.2020 Non-constant Luminance Y'CbCr */ 314d5735d64SHans Verkuil V4L2_YCBCR_ENC_BT2020 = 6, 315d5735d64SHans Verkuil 316d5735d64SHans Verkuil /* BT.2020 Constant Luminance Y'CbcCrc */ 317d5735d64SHans Verkuil V4L2_YCBCR_ENC_BT2020_CONST_LUM = 7, 318d5735d64SHans Verkuil 319d5735d64SHans Verkuil /* SMPTE 240M -- Obsolete HDTV */ 320d5735d64SHans Verkuil V4L2_YCBCR_ENC_SMPTE240M = 8, 321d5735d64SHans Verkuil }; 322d5735d64SHans Verkuil 3233818c4daSHans Verkuil /* 3243818c4daSHans Verkuil * Determine how YCBCR_ENC_DEFAULT should map to a proper Y'CbCr encoding. 3253818c4daSHans Verkuil * This depends on the colorspace. 3263818c4daSHans Verkuil */ 3273818c4daSHans Verkuil #define V4L2_MAP_YCBCR_ENC_DEFAULT(colsp) \ 3283818c4daSHans Verkuil ((colsp) == V4L2_COLORSPACE_REC709 ? V4L2_YCBCR_ENC_709 : \ 3293818c4daSHans Verkuil ((colsp) == V4L2_COLORSPACE_BT2020 ? V4L2_YCBCR_ENC_BT2020 : \ 3303818c4daSHans Verkuil ((colsp) == V4L2_COLORSPACE_SMPTE240M ? V4L2_YCBCR_ENC_SMPTE240M : \ 3313818c4daSHans Verkuil V4L2_YCBCR_ENC_601))) 3323818c4daSHans Verkuil 333d5735d64SHans Verkuil enum v4l2_quantization { 334d5735d64SHans Verkuil /* 335aa05b979SHans Verkuil * The default for R'G'B' quantization is always full range, except 336aa05b979SHans Verkuil * for the BT2020 colorspace. For Y'CbCr the quantization is always 337aa05b979SHans Verkuil * limited range, except for COLORSPACE_JPEG, SYCC, XV601 or XV709: 338aa05b979SHans Verkuil * those are full range. 339d5735d64SHans Verkuil */ 340d5735d64SHans Verkuil V4L2_QUANTIZATION_DEFAULT = 0, 341d5735d64SHans Verkuil V4L2_QUANTIZATION_FULL_RANGE = 1, 342d5735d64SHans Verkuil V4L2_QUANTIZATION_LIM_RANGE = 2, 343607ca46eSDavid Howells }; 344607ca46eSDavid Howells 3453818c4daSHans Verkuil /* 3463818c4daSHans Verkuil * Determine how QUANTIZATION_DEFAULT should map to a proper quantization. 3473818c4daSHans Verkuil * This depends on whether the image is RGB or not, the colorspace and the 3483818c4daSHans Verkuil * Y'CbCr encoding. 3493818c4daSHans Verkuil */ 3503818c4daSHans Verkuil #define V4L2_MAP_QUANTIZATION_DEFAULT(is_rgb, colsp, ycbcr_enc) \ 3513818c4daSHans Verkuil (((is_rgb) && (colsp) == V4L2_COLORSPACE_BT2020) ? V4L2_QUANTIZATION_LIM_RANGE : \ 3523818c4daSHans Verkuil (((is_rgb) || (ycbcr_enc) == V4L2_YCBCR_ENC_XV601 || \ 3533818c4daSHans Verkuil (ycbcr_enc) == V4L2_YCBCR_ENC_XV709 || (colsp) == V4L2_COLORSPACE_JPEG) ? \ 3543818c4daSHans Verkuil V4L2_QUANTIZATION_FULL_RANGE : V4L2_QUANTIZATION_LIM_RANGE)) 3553818c4daSHans Verkuil 356607ca46eSDavid Howells enum v4l2_priority { 357607ca46eSDavid Howells V4L2_PRIORITY_UNSET = 0, /* not initialized */ 358607ca46eSDavid Howells V4L2_PRIORITY_BACKGROUND = 1, 359607ca46eSDavid Howells V4L2_PRIORITY_INTERACTIVE = 2, 360607ca46eSDavid Howells V4L2_PRIORITY_RECORD = 3, 361607ca46eSDavid Howells V4L2_PRIORITY_DEFAULT = V4L2_PRIORITY_INTERACTIVE, 362607ca46eSDavid Howells }; 363607ca46eSDavid Howells 364607ca46eSDavid Howells struct v4l2_rect { 365607ca46eSDavid Howells __s32 left; 366607ca46eSDavid Howells __s32 top; 367f90580caSRicardo Ribalda __u32 width; 368f90580caSRicardo Ribalda __u32 height; 369607ca46eSDavid Howells }; 370607ca46eSDavid Howells 371607ca46eSDavid Howells struct v4l2_fract { 372607ca46eSDavid Howells __u32 numerator; 373607ca46eSDavid Howells __u32 denominator; 374607ca46eSDavid Howells }; 375607ca46eSDavid Howells 376607ca46eSDavid Howells /** 377607ca46eSDavid Howells * struct v4l2_capability - Describes V4L2 device caps returned by VIDIOC_QUERYCAP 378607ca46eSDavid Howells * 379607ca46eSDavid Howells * @driver: name of the driver module (e.g. "bttv") 380607ca46eSDavid Howells * @card: name of the card (e.g. "Hauppauge WinTV") 381607ca46eSDavid Howells * @bus_info: name of the bus (e.g. "PCI:" + pci_name(pci_dev) ) 382607ca46eSDavid Howells * @version: KERNEL_VERSION 383607ca46eSDavid Howells * @capabilities: capabilities of the physical device as a whole 384607ca46eSDavid Howells * @device_caps: capabilities accessed via this particular device (node) 385607ca46eSDavid Howells * @reserved: reserved fields for future extensions 386607ca46eSDavid Howells */ 387607ca46eSDavid Howells struct v4l2_capability { 388607ca46eSDavid Howells __u8 driver[16]; 389607ca46eSDavid Howells __u8 card[32]; 390607ca46eSDavid Howells __u8 bus_info[32]; 391607ca46eSDavid Howells __u32 version; 392607ca46eSDavid Howells __u32 capabilities; 393607ca46eSDavid Howells __u32 device_caps; 394607ca46eSDavid Howells __u32 reserved[3]; 395607ca46eSDavid Howells }; 396607ca46eSDavid Howells 397607ca46eSDavid Howells /* Values for 'capabilities' field */ 398607ca46eSDavid Howells #define V4L2_CAP_VIDEO_CAPTURE 0x00000001 /* Is a video capture device */ 399607ca46eSDavid Howells #define V4L2_CAP_VIDEO_OUTPUT 0x00000002 /* Is a video output device */ 400607ca46eSDavid Howells #define V4L2_CAP_VIDEO_OVERLAY 0x00000004 /* Can do video overlay */ 401607ca46eSDavid Howells #define V4L2_CAP_VBI_CAPTURE 0x00000010 /* Is a raw VBI capture device */ 402607ca46eSDavid Howells #define V4L2_CAP_VBI_OUTPUT 0x00000020 /* Is a raw VBI output device */ 403607ca46eSDavid Howells #define V4L2_CAP_SLICED_VBI_CAPTURE 0x00000040 /* Is a sliced VBI capture device */ 404607ca46eSDavid Howells #define V4L2_CAP_SLICED_VBI_OUTPUT 0x00000080 /* Is a sliced VBI output device */ 405607ca46eSDavid Howells #define V4L2_CAP_RDS_CAPTURE 0x00000100 /* RDS data capture */ 406607ca46eSDavid Howells #define V4L2_CAP_VIDEO_OUTPUT_OVERLAY 0x00000200 /* Can do video output overlay */ 407607ca46eSDavid Howells #define V4L2_CAP_HW_FREQ_SEEK 0x00000400 /* Can do hardware frequency seek */ 408607ca46eSDavid Howells #define V4L2_CAP_RDS_OUTPUT 0x00000800 /* Is an RDS encoder */ 409607ca46eSDavid Howells 410607ca46eSDavid Howells /* Is a video capture device that supports multiplanar formats */ 411607ca46eSDavid Howells #define V4L2_CAP_VIDEO_CAPTURE_MPLANE 0x00001000 412607ca46eSDavid Howells /* Is a video output device that supports multiplanar formats */ 413607ca46eSDavid Howells #define V4L2_CAP_VIDEO_OUTPUT_MPLANE 0x00002000 414607ca46eSDavid Howells /* Is a video mem-to-mem device that supports multiplanar formats */ 415607ca46eSDavid Howells #define V4L2_CAP_VIDEO_M2M_MPLANE 0x00004000 416607ca46eSDavid Howells /* Is a video mem-to-mem device */ 417607ca46eSDavid Howells #define V4L2_CAP_VIDEO_M2M 0x00008000 418607ca46eSDavid Howells 419607ca46eSDavid Howells #define V4L2_CAP_TUNER 0x00010000 /* has a tuner */ 420607ca46eSDavid Howells #define V4L2_CAP_AUDIO 0x00020000 /* has audio support */ 421607ca46eSDavid Howells #define V4L2_CAP_RADIO 0x00040000 /* is a radio device */ 422607ca46eSDavid Howells #define V4L2_CAP_MODULATOR 0x00080000 /* has a modulator */ 423607ca46eSDavid Howells 424c9c54f72SAntti Palosaari #define V4L2_CAP_SDR_CAPTURE 0x00100000 /* Is a SDR capture device */ 425d52e2381SLaurent Pinchart #define V4L2_CAP_EXT_PIX_FORMAT 0x00200000 /* Supports the extended pixel format */ 426c9c54f72SAntti Palosaari 427607ca46eSDavid Howells #define V4L2_CAP_READWRITE 0x01000000 /* read/write systemcalls */ 428607ca46eSDavid Howells #define V4L2_CAP_ASYNCIO 0x02000000 /* async I/O */ 429607ca46eSDavid Howells #define V4L2_CAP_STREAMING 0x04000000 /* streaming I/O ioctls */ 430607ca46eSDavid Howells 431607ca46eSDavid Howells #define V4L2_CAP_DEVICE_CAPS 0x80000000 /* sets device capabilities field */ 432607ca46eSDavid Howells 433607ca46eSDavid Howells /* 434607ca46eSDavid Howells * V I D E O I M A G E F O R M A T 435607ca46eSDavid Howells */ 436607ca46eSDavid Howells struct v4l2_pix_format { 437607ca46eSDavid Howells __u32 width; 438607ca46eSDavid Howells __u32 height; 439607ca46eSDavid Howells __u32 pixelformat; 440607ca46eSDavid Howells __u32 field; /* enum v4l2_field */ 441607ca46eSDavid Howells __u32 bytesperline; /* for padding, zero if unused */ 442607ca46eSDavid Howells __u32 sizeimage; 443607ca46eSDavid Howells __u32 colorspace; /* enum v4l2_colorspace */ 444607ca46eSDavid Howells __u32 priv; /* private data, depends on pixelformat */ 445c96fd46aSLaurent Pinchart __u32 flags; /* format flags (V4L2_PIX_FMT_FLAG_*) */ 446d5735d64SHans Verkuil __u32 ycbcr_enc; /* enum v4l2_ycbcr_encoding */ 447d5735d64SHans Verkuil __u32 quantization; /* enum v4l2_quantization */ 44874fdcb2eSHans Verkuil __u32 xfer_func; /* enum v4l2_xfer_func */ 449607ca46eSDavid Howells }; 450607ca46eSDavid Howells 451607ca46eSDavid Howells /* Pixel format FOURCC depth Description */ 452607ca46eSDavid Howells 453607ca46eSDavid Howells /* RGB formats */ 454607ca46eSDavid Howells #define V4L2_PIX_FMT_RGB332 v4l2_fourcc('R', 'G', 'B', '1') /* 8 RGB-3-3-2 */ 455607ca46eSDavid Howells #define V4L2_PIX_FMT_RGB444 v4l2_fourcc('R', '4', '4', '4') /* 16 xxxxrrrr ggggbbbb */ 456977ff0e4SLaurent Pinchart #define V4L2_PIX_FMT_ARGB444 v4l2_fourcc('A', 'R', '1', '2') /* 16 aaaarrrr ggggbbbb */ 457977ff0e4SLaurent Pinchart #define V4L2_PIX_FMT_XRGB444 v4l2_fourcc('X', 'R', '1', '2') /* 16 xxxxrrrr ggggbbbb */ 458607ca46eSDavid Howells #define V4L2_PIX_FMT_RGB555 v4l2_fourcc('R', 'G', 'B', 'O') /* 16 RGB-5-5-5 */ 459977ff0e4SLaurent Pinchart #define V4L2_PIX_FMT_ARGB555 v4l2_fourcc('A', 'R', '1', '5') /* 16 ARGB-1-5-5-5 */ 460977ff0e4SLaurent Pinchart #define V4L2_PIX_FMT_XRGB555 v4l2_fourcc('X', 'R', '1', '5') /* 16 XRGB-1-5-5-5 */ 461607ca46eSDavid Howells #define V4L2_PIX_FMT_RGB565 v4l2_fourcc('R', 'G', 'B', 'P') /* 16 RGB-5-6-5 */ 462607ca46eSDavid Howells #define V4L2_PIX_FMT_RGB555X v4l2_fourcc('R', 'G', 'B', 'Q') /* 16 RGB-5-5-5 BE */ 463fcc0d3dbSLaurent Pinchart #define V4L2_PIX_FMT_ARGB555X v4l2_fourcc_be('A', 'R', '1', '5') /* 16 ARGB-5-5-5 BE */ 464fcc0d3dbSLaurent Pinchart #define V4L2_PIX_FMT_XRGB555X v4l2_fourcc_be('X', 'R', '1', '5') /* 16 XRGB-5-5-5 BE */ 465607ca46eSDavid Howells #define V4L2_PIX_FMT_RGB565X v4l2_fourcc('R', 'G', 'B', 'R') /* 16 RGB-5-6-5 BE */ 466607ca46eSDavid Howells #define V4L2_PIX_FMT_BGR666 v4l2_fourcc('B', 'G', 'R', 'H') /* 18 BGR-6-6-6 */ 467607ca46eSDavid Howells #define V4L2_PIX_FMT_BGR24 v4l2_fourcc('B', 'G', 'R', '3') /* 24 BGR-8-8-8 */ 468607ca46eSDavid Howells #define V4L2_PIX_FMT_RGB24 v4l2_fourcc('R', 'G', 'B', '3') /* 24 RGB-8-8-8 */ 469607ca46eSDavid Howells #define V4L2_PIX_FMT_BGR32 v4l2_fourcc('B', 'G', 'R', '4') /* 32 BGR-8-8-8-8 */ 470977ff0e4SLaurent Pinchart #define V4L2_PIX_FMT_ABGR32 v4l2_fourcc('A', 'R', '2', '4') /* 32 BGRA-8-8-8-8 */ 471977ff0e4SLaurent Pinchart #define V4L2_PIX_FMT_XBGR32 v4l2_fourcc('X', 'R', '2', '4') /* 32 BGRX-8-8-8-8 */ 472607ca46eSDavid Howells #define V4L2_PIX_FMT_RGB32 v4l2_fourcc('R', 'G', 'B', '4') /* 32 RGB-8-8-8-8 */ 473977ff0e4SLaurent Pinchart #define V4L2_PIX_FMT_ARGB32 v4l2_fourcc('B', 'A', '2', '4') /* 32 ARGB-8-8-8-8 */ 474977ff0e4SLaurent Pinchart #define V4L2_PIX_FMT_XRGB32 v4l2_fourcc('B', 'X', '2', '4') /* 32 XRGB-8-8-8-8 */ 475607ca46eSDavid Howells 476607ca46eSDavid Howells /* Grey formats */ 477607ca46eSDavid Howells #define V4L2_PIX_FMT_GREY v4l2_fourcc('G', 'R', 'E', 'Y') /* 8 Greyscale */ 478607ca46eSDavid Howells #define V4L2_PIX_FMT_Y4 v4l2_fourcc('Y', '0', '4', ' ') /* 4 Greyscale */ 479607ca46eSDavid Howells #define V4L2_PIX_FMT_Y6 v4l2_fourcc('Y', '0', '6', ' ') /* 6 Greyscale */ 480607ca46eSDavid Howells #define V4L2_PIX_FMT_Y10 v4l2_fourcc('Y', '1', '0', ' ') /* 10 Greyscale */ 481607ca46eSDavid Howells #define V4L2_PIX_FMT_Y12 v4l2_fourcc('Y', '1', '2', ' ') /* 12 Greyscale */ 482607ca46eSDavid Howells #define V4L2_PIX_FMT_Y16 v4l2_fourcc('Y', '1', '6', ' ') /* 16 Greyscale */ 4832e5e435fSRicardo Ribalda #define V4L2_PIX_FMT_Y16_BE v4l2_fourcc_be('Y', '1', '6', ' ') /* 16 Greyscale BE */ 484607ca46eSDavid Howells 485607ca46eSDavid Howells /* Grey bit-packed formats */ 486607ca46eSDavid Howells #define V4L2_PIX_FMT_Y10BPACK v4l2_fourcc('Y', '1', '0', 'B') /* 10 Greyscale bit-packed */ 487607ca46eSDavid Howells 488607ca46eSDavid Howells /* Palette formats */ 489607ca46eSDavid Howells #define V4L2_PIX_FMT_PAL8 v4l2_fourcc('P', 'A', 'L', '8') /* 8 8-bit palette */ 490607ca46eSDavid Howells 49105ad6fc1SManjunath Hadli /* Chrominance formats */ 49205ad6fc1SManjunath Hadli #define V4L2_PIX_FMT_UV8 v4l2_fourcc('U', 'V', '8', ' ') /* 8 UV 4:4 */ 49305ad6fc1SManjunath Hadli 494607ca46eSDavid Howells /* Luminance+Chrominance formats */ 495607ca46eSDavid Howells #define V4L2_PIX_FMT_YVU410 v4l2_fourcc('Y', 'V', 'U', '9') /* 9 YVU 4:1:0 */ 496607ca46eSDavid Howells #define V4L2_PIX_FMT_YVU420 v4l2_fourcc('Y', 'V', '1', '2') /* 12 YVU 4:2:0 */ 497607ca46eSDavid Howells #define V4L2_PIX_FMT_YUYV v4l2_fourcc('Y', 'U', 'Y', 'V') /* 16 YUV 4:2:2 */ 498607ca46eSDavid Howells #define V4L2_PIX_FMT_YYUV v4l2_fourcc('Y', 'Y', 'U', 'V') /* 16 YUV 4:2:2 */ 499607ca46eSDavid Howells #define V4L2_PIX_FMT_YVYU v4l2_fourcc('Y', 'V', 'Y', 'U') /* 16 YVU 4:2:2 */ 500607ca46eSDavid Howells #define V4L2_PIX_FMT_UYVY v4l2_fourcc('U', 'Y', 'V', 'Y') /* 16 YUV 4:2:2 */ 501607ca46eSDavid Howells #define V4L2_PIX_FMT_VYUY v4l2_fourcc('V', 'Y', 'U', 'Y') /* 16 YUV 4:2:2 */ 502607ca46eSDavid Howells #define V4L2_PIX_FMT_YUV422P v4l2_fourcc('4', '2', '2', 'P') /* 16 YVU422 planar */ 503607ca46eSDavid Howells #define V4L2_PIX_FMT_YUV411P v4l2_fourcc('4', '1', '1', 'P') /* 16 YVU411 planar */ 504607ca46eSDavid Howells #define V4L2_PIX_FMT_Y41P v4l2_fourcc('Y', '4', '1', 'P') /* 12 YUV 4:1:1 */ 505607ca46eSDavid Howells #define V4L2_PIX_FMT_YUV444 v4l2_fourcc('Y', '4', '4', '4') /* 16 xxxxyyyy uuuuvvvv */ 506607ca46eSDavid Howells #define V4L2_PIX_FMT_YUV555 v4l2_fourcc('Y', 'U', 'V', 'O') /* 16 YUV-5-5-5 */ 507607ca46eSDavid Howells #define V4L2_PIX_FMT_YUV565 v4l2_fourcc('Y', 'U', 'V', 'P') /* 16 YUV-5-6-5 */ 508607ca46eSDavid Howells #define V4L2_PIX_FMT_YUV32 v4l2_fourcc('Y', 'U', 'V', '4') /* 32 YUV-8-8-8-8 */ 509607ca46eSDavid Howells #define V4L2_PIX_FMT_YUV410 v4l2_fourcc('Y', 'U', 'V', '9') /* 9 YUV 4:1:0 */ 510607ca46eSDavid Howells #define V4L2_PIX_FMT_YUV420 v4l2_fourcc('Y', 'U', '1', '2') /* 12 YUV 4:2:0 */ 511607ca46eSDavid Howells #define V4L2_PIX_FMT_HI240 v4l2_fourcc('H', 'I', '2', '4') /* 8 8-bit color */ 512607ca46eSDavid Howells #define V4L2_PIX_FMT_HM12 v4l2_fourcc('H', 'M', '1', '2') /* 8 YUV 4:2:0 16x16 macroblocks */ 513607ca46eSDavid Howells #define V4L2_PIX_FMT_M420 v4l2_fourcc('M', '4', '2', '0') /* 12 YUV 4:2:0 2 lines y, 1 line uv interleaved */ 514607ca46eSDavid Howells 515607ca46eSDavid Howells /* two planes -- one Y, one Cr + Cb interleaved */ 516607ca46eSDavid Howells #define V4L2_PIX_FMT_NV12 v4l2_fourcc('N', 'V', '1', '2') /* 12 Y/CbCr 4:2:0 */ 517607ca46eSDavid Howells #define V4L2_PIX_FMT_NV21 v4l2_fourcc('N', 'V', '2', '1') /* 12 Y/CrCb 4:2:0 */ 518607ca46eSDavid Howells #define V4L2_PIX_FMT_NV16 v4l2_fourcc('N', 'V', '1', '6') /* 16 Y/CbCr 4:2:2 */ 519607ca46eSDavid Howells #define V4L2_PIX_FMT_NV61 v4l2_fourcc('N', 'V', '6', '1') /* 16 Y/CrCb 4:2:2 */ 520607ca46eSDavid Howells #define V4L2_PIX_FMT_NV24 v4l2_fourcc('N', 'V', '2', '4') /* 24 Y/CbCr 4:4:4 */ 521607ca46eSDavid Howells #define V4L2_PIX_FMT_NV42 v4l2_fourcc('N', 'V', '4', '2') /* 24 Y/CrCb 4:4:4 */ 522607ca46eSDavid Howells 523607ca46eSDavid Howells /* two non contiguous planes - one Y, one Cr + Cb interleaved */ 524607ca46eSDavid Howells #define V4L2_PIX_FMT_NV12M v4l2_fourcc('N', 'M', '1', '2') /* 12 Y/CbCr 4:2:0 */ 525607ca46eSDavid Howells #define V4L2_PIX_FMT_NV21M v4l2_fourcc('N', 'M', '2', '1') /* 21 Y/CrCb 4:2:0 */ 52684930548SLaurent Pinchart #define V4L2_PIX_FMT_NV16M v4l2_fourcc('N', 'M', '1', '6') /* 16 Y/CbCr 4:2:2 */ 52784930548SLaurent Pinchart #define V4L2_PIX_FMT_NV61M v4l2_fourcc('N', 'M', '6', '1') /* 16 Y/CrCb 4:2:2 */ 528607ca46eSDavid Howells #define V4L2_PIX_FMT_NV12MT v4l2_fourcc('T', 'M', '1', '2') /* 12 Y/CbCr 4:2:0 64x32 macroblocks */ 529607ca46eSDavid Howells #define V4L2_PIX_FMT_NV12MT_16X16 v4l2_fourcc('V', 'M', '1', '2') /* 12 Y/CbCr 4:2:0 16x16 macroblocks */ 530607ca46eSDavid Howells 531607ca46eSDavid Howells /* three non contiguous planes - Y, Cb, Cr */ 532607ca46eSDavid Howells #define V4L2_PIX_FMT_YUV420M v4l2_fourcc('Y', 'M', '1', '2') /* 12 YUV420 planar */ 533607ca46eSDavid Howells #define V4L2_PIX_FMT_YVU420M v4l2_fourcc('Y', 'M', '2', '1') /* 12 YVU420 planar */ 534607ca46eSDavid Howells 535607ca46eSDavid Howells /* Bayer formats - see http://www.siliconimaging.com/RGB%20Bayer.htm */ 536607ca46eSDavid Howells #define V4L2_PIX_FMT_SBGGR8 v4l2_fourcc('B', 'A', '8', '1') /* 8 BGBG.. GRGR.. */ 537607ca46eSDavid Howells #define V4L2_PIX_FMT_SGBRG8 v4l2_fourcc('G', 'B', 'R', 'G') /* 8 GBGB.. RGRG.. */ 538607ca46eSDavid Howells #define V4L2_PIX_FMT_SGRBG8 v4l2_fourcc('G', 'R', 'B', 'G') /* 8 GRGR.. BGBG.. */ 539607ca46eSDavid Howells #define V4L2_PIX_FMT_SRGGB8 v4l2_fourcc('R', 'G', 'G', 'B') /* 8 RGRG.. GBGB.. */ 540607ca46eSDavid Howells #define V4L2_PIX_FMT_SBGGR10 v4l2_fourcc('B', 'G', '1', '0') /* 10 BGBG.. GRGR.. */ 541607ca46eSDavid Howells #define V4L2_PIX_FMT_SGBRG10 v4l2_fourcc('G', 'B', '1', '0') /* 10 GBGB.. RGRG.. */ 542607ca46eSDavid Howells #define V4L2_PIX_FMT_SGRBG10 v4l2_fourcc('B', 'A', '1', '0') /* 10 GRGR.. BGBG.. */ 543607ca46eSDavid Howells #define V4L2_PIX_FMT_SRGGB10 v4l2_fourcc('R', 'G', '1', '0') /* 10 RGRG.. GBGB.. */ 5444353e36eSAviv Greenberg /* 10bit raw bayer packed, 5 bytes for every 4 pixels */ 5454353e36eSAviv Greenberg #define V4L2_PIX_FMT_SBGGR10P v4l2_fourcc('p', 'B', 'A', 'A') 5464353e36eSAviv Greenberg #define V4L2_PIX_FMT_SGBRG10P v4l2_fourcc('p', 'G', 'A', 'A') 5474353e36eSAviv Greenberg #define V4L2_PIX_FMT_SGRBG10P v4l2_fourcc('p', 'g', 'A', 'A') 5484353e36eSAviv Greenberg #define V4L2_PIX_FMT_SRGGB10P v4l2_fourcc('p', 'R', 'A', 'A') 54905ad6fc1SManjunath Hadli /* 10bit raw bayer a-law compressed to 8 bits */ 55005ad6fc1SManjunath Hadli #define V4L2_PIX_FMT_SBGGR10ALAW8 v4l2_fourcc('a', 'B', 'A', '8') 55105ad6fc1SManjunath Hadli #define V4L2_PIX_FMT_SGBRG10ALAW8 v4l2_fourcc('a', 'G', 'A', '8') 55205ad6fc1SManjunath Hadli #define V4L2_PIX_FMT_SGRBG10ALAW8 v4l2_fourcc('a', 'g', 'A', '8') 55305ad6fc1SManjunath Hadli #define V4L2_PIX_FMT_SRGGB10ALAW8 v4l2_fourcc('a', 'R', 'A', '8') 554607ca46eSDavid Howells /* 10bit raw bayer DPCM compressed to 8 bits */ 555607ca46eSDavid Howells #define V4L2_PIX_FMT_SBGGR10DPCM8 v4l2_fourcc('b', 'B', 'A', '8') 556607ca46eSDavid Howells #define V4L2_PIX_FMT_SGBRG10DPCM8 v4l2_fourcc('b', 'G', 'A', '8') 557607ca46eSDavid Howells #define V4L2_PIX_FMT_SGRBG10DPCM8 v4l2_fourcc('B', 'D', '1', '0') 558607ca46eSDavid Howells #define V4L2_PIX_FMT_SRGGB10DPCM8 v4l2_fourcc('b', 'R', 'A', '8') 559cbb77bc2SSakari Ailus #define V4L2_PIX_FMT_SBGGR12 v4l2_fourcc('B', 'G', '1', '2') /* 12 BGBG.. GRGR.. */ 560cbb77bc2SSakari Ailus #define V4L2_PIX_FMT_SGBRG12 v4l2_fourcc('G', 'B', '1', '2') /* 12 GBGB.. RGRG.. */ 561cbb77bc2SSakari Ailus #define V4L2_PIX_FMT_SGRBG12 v4l2_fourcc('B', 'A', '1', '2') /* 12 GRGR.. BGBG.. */ 562cbb77bc2SSakari Ailus #define V4L2_PIX_FMT_SRGGB12 v4l2_fourcc('R', 'G', '1', '2') /* 12 RGRG.. GBGB.. */ 563607ca46eSDavid Howells #define V4L2_PIX_FMT_SBGGR16 v4l2_fourcc('B', 'Y', 'R', '2') /* 16 BGBG.. GRGR.. */ 564607ca46eSDavid Howells 565607ca46eSDavid Howells /* compressed formats */ 566607ca46eSDavid Howells #define V4L2_PIX_FMT_MJPEG v4l2_fourcc('M', 'J', 'P', 'G') /* Motion-JPEG */ 567607ca46eSDavid Howells #define V4L2_PIX_FMT_JPEG v4l2_fourcc('J', 'P', 'E', 'G') /* JFIF JPEG */ 568607ca46eSDavid Howells #define V4L2_PIX_FMT_DV v4l2_fourcc('d', 'v', 's', 'd') /* 1394 */ 569607ca46eSDavid Howells #define V4L2_PIX_FMT_MPEG v4l2_fourcc('M', 'P', 'E', 'G') /* MPEG-1/2/4 Multiplexed */ 570607ca46eSDavid Howells #define V4L2_PIX_FMT_H264 v4l2_fourcc('H', '2', '6', '4') /* H264 with start codes */ 571607ca46eSDavid Howells #define V4L2_PIX_FMT_H264_NO_SC v4l2_fourcc('A', 'V', 'C', '1') /* H264 without start codes */ 572607ca46eSDavid Howells #define V4L2_PIX_FMT_H264_MVC v4l2_fourcc('M', '2', '6', '4') /* H264 MVC */ 573607ca46eSDavid Howells #define V4L2_PIX_FMT_H263 v4l2_fourcc('H', '2', '6', '3') /* H263 */ 574607ca46eSDavid Howells #define V4L2_PIX_FMT_MPEG1 v4l2_fourcc('M', 'P', 'G', '1') /* MPEG-1 ES */ 575607ca46eSDavid Howells #define V4L2_PIX_FMT_MPEG2 v4l2_fourcc('M', 'P', 'G', '2') /* MPEG-2 ES */ 576adf62712SIsmael Luceno #define V4L2_PIX_FMT_MPEG4 v4l2_fourcc('M', 'P', 'G', '4') /* MPEG-4 part 2 ES */ 577607ca46eSDavid Howells #define V4L2_PIX_FMT_XVID v4l2_fourcc('X', 'V', 'I', 'D') /* Xvid */ 578607ca46eSDavid Howells #define V4L2_PIX_FMT_VC1_ANNEX_G v4l2_fourcc('V', 'C', '1', 'G') /* SMPTE 421M Annex G compliant stream */ 579607ca46eSDavid Howells #define V4L2_PIX_FMT_VC1_ANNEX_L v4l2_fourcc('V', 'C', '1', 'L') /* SMPTE 421M Annex L compliant stream */ 580607ca46eSDavid Howells #define V4L2_PIX_FMT_VP8 v4l2_fourcc('V', 'P', '8', '0') /* VP8 */ 581607ca46eSDavid Howells 582607ca46eSDavid Howells /* Vendor-specific formats */ 583607ca46eSDavid Howells #define V4L2_PIX_FMT_CPIA1 v4l2_fourcc('C', 'P', 'I', 'A') /* cpia1 YUV */ 584607ca46eSDavid Howells #define V4L2_PIX_FMT_WNVA v4l2_fourcc('W', 'N', 'V', 'A') /* Winnov hw compress */ 585607ca46eSDavid Howells #define V4L2_PIX_FMT_SN9C10X v4l2_fourcc('S', '9', '1', '0') /* SN9C10x compression */ 586607ca46eSDavid Howells #define V4L2_PIX_FMT_SN9C20X_I420 v4l2_fourcc('S', '9', '2', '0') /* SN9C20x YUV 4:2:0 */ 587607ca46eSDavid Howells #define V4L2_PIX_FMT_PWC1 v4l2_fourcc('P', 'W', 'C', '1') /* pwc older webcam */ 588607ca46eSDavid Howells #define V4L2_PIX_FMT_PWC2 v4l2_fourcc('P', 'W', 'C', '2') /* pwc newer webcam */ 589607ca46eSDavid Howells #define V4L2_PIX_FMT_ET61X251 v4l2_fourcc('E', '6', '2', '5') /* ET61X251 compression */ 590607ca46eSDavid Howells #define V4L2_PIX_FMT_SPCA501 v4l2_fourcc('S', '5', '0', '1') /* YUYV per line */ 591607ca46eSDavid Howells #define V4L2_PIX_FMT_SPCA505 v4l2_fourcc('S', '5', '0', '5') /* YYUV per line */ 592607ca46eSDavid Howells #define V4L2_PIX_FMT_SPCA508 v4l2_fourcc('S', '5', '0', '8') /* YUVY per line */ 593607ca46eSDavid Howells #define V4L2_PIX_FMT_SPCA561 v4l2_fourcc('S', '5', '6', '1') /* compressed GBRG bayer */ 594607ca46eSDavid Howells #define V4L2_PIX_FMT_PAC207 v4l2_fourcc('P', '2', '0', '7') /* compressed BGGR bayer */ 595607ca46eSDavid Howells #define V4L2_PIX_FMT_MR97310A v4l2_fourcc('M', '3', '1', '0') /* compressed BGGR bayer */ 596607ca46eSDavid Howells #define V4L2_PIX_FMT_JL2005BCD v4l2_fourcc('J', 'L', '2', '0') /* compressed RGGB bayer */ 597607ca46eSDavid Howells #define V4L2_PIX_FMT_SN9C2028 v4l2_fourcc('S', 'O', 'N', 'X') /* compressed GBRG bayer */ 598607ca46eSDavid Howells #define V4L2_PIX_FMT_SQ905C v4l2_fourcc('9', '0', '5', 'C') /* compressed RGGB bayer */ 599607ca46eSDavid Howells #define V4L2_PIX_FMT_PJPG v4l2_fourcc('P', 'J', 'P', 'G') /* Pixart 73xx JPEG */ 600607ca46eSDavid Howells #define V4L2_PIX_FMT_OV511 v4l2_fourcc('O', '5', '1', '1') /* ov511 JPEG */ 601607ca46eSDavid Howells #define V4L2_PIX_FMT_OV518 v4l2_fourcc('O', '5', '1', '8') /* ov518 JPEG */ 602607ca46eSDavid Howells #define V4L2_PIX_FMT_STV0680 v4l2_fourcc('S', '6', '8', '0') /* stv0680 bayer */ 603607ca46eSDavid Howells #define V4L2_PIX_FMT_TM6000 v4l2_fourcc('T', 'M', '6', '0') /* tm5600/tm60x0 */ 604607ca46eSDavid Howells #define V4L2_PIX_FMT_CIT_YYVYUY v4l2_fourcc('C', 'I', 'T', 'V') /* one line of Y then 1 line of VYUY */ 605607ca46eSDavid Howells #define V4L2_PIX_FMT_KONICA420 v4l2_fourcc('K', 'O', 'N', 'I') /* YUV420 planar in blocks of 256 pixels */ 606607ca46eSDavid Howells #define V4L2_PIX_FMT_JPGL v4l2_fourcc('J', 'P', 'G', 'L') /* JPEG-Lite */ 607607ca46eSDavid Howells #define V4L2_PIX_FMT_SE401 v4l2_fourcc('S', '4', '0', '1') /* se401 janggu compressed rgb */ 608607ca46eSDavid Howells #define V4L2_PIX_FMT_S5C_UYVY_JPG v4l2_fourcc('S', '5', 'C', 'I') /* S5C73M3 interleaved UYVY/JPEG */ 609607ca46eSDavid Howells 61000419a6aSAntti Palosaari /* SDR formats - used only for Software Defined Radio devices */ 61100419a6aSAntti Palosaari #define V4L2_SDR_FMT_CU8 v4l2_fourcc('C', 'U', '0', '8') /* IQ u8 */ 61200419a6aSAntti Palosaari #define V4L2_SDR_FMT_CU16LE v4l2_fourcc('C', 'U', '1', '6') /* IQ u16le */ 613c0c03886SAntti Palosaari #define V4L2_SDR_FMT_CS8 v4l2_fourcc('C', 'S', '0', '8') /* complex s8 */ 6145c5be570SAntti Palosaari #define V4L2_SDR_FMT_CS14LE v4l2_fourcc('C', 'S', '1', '4') /* complex s14le */ 6159e9e3927SAntti Palosaari #define V4L2_SDR_FMT_RU12LE v4l2_fourcc('R', 'U', '1', '2') /* real u12le */ 61600419a6aSAntti Palosaari 617d52e2381SLaurent Pinchart /* priv field value to indicates that subsequent fields are valid. */ 618d52e2381SLaurent Pinchart #define V4L2_PIX_FMT_PRIV_MAGIC 0xfeedcafe 619d52e2381SLaurent Pinchart 620c96fd46aSLaurent Pinchart /* Flags */ 621c96fd46aSLaurent Pinchart #define V4L2_PIX_FMT_FLAG_PREMUL_ALPHA 0x00000001 622c96fd46aSLaurent Pinchart 623607ca46eSDavid Howells /* 624607ca46eSDavid Howells * F O R M A T E N U M E R A T I O N 625607ca46eSDavid Howells */ 626607ca46eSDavid Howells struct v4l2_fmtdesc { 627607ca46eSDavid Howells __u32 index; /* Format number */ 628607ca46eSDavid Howells __u32 type; /* enum v4l2_buf_type */ 629607ca46eSDavid Howells __u32 flags; 630607ca46eSDavid Howells __u8 description[32]; /* Description string */ 631607ca46eSDavid Howells __u32 pixelformat; /* Format fourcc */ 632607ca46eSDavid Howells __u32 reserved[4]; 633607ca46eSDavid Howells }; 634607ca46eSDavid Howells 635607ca46eSDavid Howells #define V4L2_FMT_FLAG_COMPRESSED 0x0001 636607ca46eSDavid Howells #define V4L2_FMT_FLAG_EMULATED 0x0002 637607ca46eSDavid Howells 638607ca46eSDavid Howells #if 1 639607ca46eSDavid Howells /* Experimental Frame Size and frame rate enumeration */ 640607ca46eSDavid Howells /* 641607ca46eSDavid Howells * F R A M E S I Z E E N U M E R A T I O N 642607ca46eSDavid Howells */ 643607ca46eSDavid Howells enum v4l2_frmsizetypes { 644607ca46eSDavid Howells V4L2_FRMSIZE_TYPE_DISCRETE = 1, 645607ca46eSDavid Howells V4L2_FRMSIZE_TYPE_CONTINUOUS = 2, 646607ca46eSDavid Howells V4L2_FRMSIZE_TYPE_STEPWISE = 3, 647607ca46eSDavid Howells }; 648607ca46eSDavid Howells 649607ca46eSDavid Howells struct v4l2_frmsize_discrete { 650607ca46eSDavid Howells __u32 width; /* Frame width [pixel] */ 651607ca46eSDavid Howells __u32 height; /* Frame height [pixel] */ 652607ca46eSDavid Howells }; 653607ca46eSDavid Howells 654607ca46eSDavid Howells struct v4l2_frmsize_stepwise { 655607ca46eSDavid Howells __u32 min_width; /* Minimum frame width [pixel] */ 656607ca46eSDavid Howells __u32 max_width; /* Maximum frame width [pixel] */ 657607ca46eSDavid Howells __u32 step_width; /* Frame width step size [pixel] */ 658607ca46eSDavid Howells __u32 min_height; /* Minimum frame height [pixel] */ 659607ca46eSDavid Howells __u32 max_height; /* Maximum frame height [pixel] */ 660607ca46eSDavid Howells __u32 step_height; /* Frame height step size [pixel] */ 661607ca46eSDavid Howells }; 662607ca46eSDavid Howells 663607ca46eSDavid Howells struct v4l2_frmsizeenum { 664607ca46eSDavid Howells __u32 index; /* Frame size number */ 665607ca46eSDavid Howells __u32 pixel_format; /* Pixel format */ 666607ca46eSDavid Howells __u32 type; /* Frame size type the device supports. */ 667607ca46eSDavid Howells 668607ca46eSDavid Howells union { /* Frame size */ 669607ca46eSDavid Howells struct v4l2_frmsize_discrete discrete; 670607ca46eSDavid Howells struct v4l2_frmsize_stepwise stepwise; 671607ca46eSDavid Howells }; 672607ca46eSDavid Howells 673607ca46eSDavid Howells __u32 reserved[2]; /* Reserved space for future use */ 674607ca46eSDavid Howells }; 675607ca46eSDavid Howells 676607ca46eSDavid Howells /* 677607ca46eSDavid Howells * F R A M E R A T E E N U M E R A T I O N 678607ca46eSDavid Howells */ 679607ca46eSDavid Howells enum v4l2_frmivaltypes { 680607ca46eSDavid Howells V4L2_FRMIVAL_TYPE_DISCRETE = 1, 681607ca46eSDavid Howells V4L2_FRMIVAL_TYPE_CONTINUOUS = 2, 682607ca46eSDavid Howells V4L2_FRMIVAL_TYPE_STEPWISE = 3, 683607ca46eSDavid Howells }; 684607ca46eSDavid Howells 685607ca46eSDavid Howells struct v4l2_frmival_stepwise { 686607ca46eSDavid Howells struct v4l2_fract min; /* Minimum frame interval [s] */ 687607ca46eSDavid Howells struct v4l2_fract max; /* Maximum frame interval [s] */ 688607ca46eSDavid Howells struct v4l2_fract step; /* Frame interval step size [s] */ 689607ca46eSDavid Howells }; 690607ca46eSDavid Howells 691607ca46eSDavid Howells struct v4l2_frmivalenum { 692607ca46eSDavid Howells __u32 index; /* Frame format index */ 693607ca46eSDavid Howells __u32 pixel_format; /* Pixel format */ 694607ca46eSDavid Howells __u32 width; /* Frame width */ 695607ca46eSDavid Howells __u32 height; /* Frame height */ 696607ca46eSDavid Howells __u32 type; /* Frame interval type the device supports. */ 697607ca46eSDavid Howells 698607ca46eSDavid Howells union { /* Frame interval */ 699607ca46eSDavid Howells struct v4l2_fract discrete; 700607ca46eSDavid Howells struct v4l2_frmival_stepwise stepwise; 701607ca46eSDavid Howells }; 702607ca46eSDavid Howells 703607ca46eSDavid Howells __u32 reserved[2]; /* Reserved space for future use */ 704607ca46eSDavid Howells }; 705607ca46eSDavid Howells #endif 706607ca46eSDavid Howells 707607ca46eSDavid Howells /* 708607ca46eSDavid Howells * T I M E C O D E 709607ca46eSDavid Howells */ 710607ca46eSDavid Howells struct v4l2_timecode { 711607ca46eSDavid Howells __u32 type; 712607ca46eSDavid Howells __u32 flags; 713607ca46eSDavid Howells __u8 frames; 714607ca46eSDavid Howells __u8 seconds; 715607ca46eSDavid Howells __u8 minutes; 716607ca46eSDavid Howells __u8 hours; 717607ca46eSDavid Howells __u8 userbits[4]; 718607ca46eSDavid Howells }; 719607ca46eSDavid Howells 720607ca46eSDavid Howells /* Type */ 721607ca46eSDavid Howells #define V4L2_TC_TYPE_24FPS 1 722607ca46eSDavid Howells #define V4L2_TC_TYPE_25FPS 2 723607ca46eSDavid Howells #define V4L2_TC_TYPE_30FPS 3 724607ca46eSDavid Howells #define V4L2_TC_TYPE_50FPS 4 725607ca46eSDavid Howells #define V4L2_TC_TYPE_60FPS 5 726607ca46eSDavid Howells 727607ca46eSDavid Howells /* Flags */ 728607ca46eSDavid Howells #define V4L2_TC_FLAG_DROPFRAME 0x0001 /* "drop-frame" mode */ 729607ca46eSDavid Howells #define V4L2_TC_FLAG_COLORFRAME 0x0002 730607ca46eSDavid Howells #define V4L2_TC_USERBITS_field 0x000C 731607ca46eSDavid Howells #define V4L2_TC_USERBITS_USERDEFINED 0x0000 732607ca46eSDavid Howells #define V4L2_TC_USERBITS_8BITCHARS 0x0008 733607ca46eSDavid Howells /* The above is based on SMPTE timecodes */ 734607ca46eSDavid Howells 735607ca46eSDavid Howells struct v4l2_jpegcompression { 736607ca46eSDavid Howells int quality; 737607ca46eSDavid Howells 738607ca46eSDavid Howells int APPn; /* Number of APP segment to be written, 739607ca46eSDavid Howells * must be 0..15 */ 740607ca46eSDavid Howells int APP_len; /* Length of data in JPEG APPn segment */ 741607ca46eSDavid Howells char APP_data[60]; /* Data in the JPEG APPn segment. */ 742607ca46eSDavid Howells 743607ca46eSDavid Howells int COM_len; /* Length of data in JPEG COM segment */ 744607ca46eSDavid Howells char COM_data[60]; /* Data in JPEG COM segment */ 745607ca46eSDavid Howells 746607ca46eSDavid Howells __u32 jpeg_markers; /* Which markers should go into the JPEG 747607ca46eSDavid Howells * output. Unless you exactly know what 748607ca46eSDavid Howells * you do, leave them untouched. 749ff29feb9SLad, Prabhakar * Including less markers will make the 750607ca46eSDavid Howells * resulting code smaller, but there will 751607ca46eSDavid Howells * be fewer applications which can read it. 752607ca46eSDavid Howells * The presence of the APP and COM marker 753607ca46eSDavid Howells * is influenced by APP_len and COM_len 754607ca46eSDavid Howells * ONLY, not by this property! */ 755607ca46eSDavid Howells 756607ca46eSDavid Howells #define V4L2_JPEG_MARKER_DHT (1<<3) /* Define Huffman Tables */ 757607ca46eSDavid Howells #define V4L2_JPEG_MARKER_DQT (1<<4) /* Define Quantization Tables */ 758607ca46eSDavid Howells #define V4L2_JPEG_MARKER_DRI (1<<5) /* Define Restart Interval */ 759607ca46eSDavid Howells #define V4L2_JPEG_MARKER_COM (1<<6) /* Comment segment */ 760607ca46eSDavid Howells #define V4L2_JPEG_MARKER_APP (1<<7) /* App segment, driver will 761ff29feb9SLad, Prabhakar * always use APP0 */ 762607ca46eSDavid Howells }; 763607ca46eSDavid Howells 764607ca46eSDavid Howells /* 765607ca46eSDavid Howells * M E M O R Y - M A P P I N G B U F F E R S 766607ca46eSDavid Howells */ 767607ca46eSDavid Howells struct v4l2_requestbuffers { 768607ca46eSDavid Howells __u32 count; 769607ca46eSDavid Howells __u32 type; /* enum v4l2_buf_type */ 770607ca46eSDavid Howells __u32 memory; /* enum v4l2_memory */ 771607ca46eSDavid Howells __u32 reserved[2]; 772607ca46eSDavid Howells }; 773607ca46eSDavid Howells 774607ca46eSDavid Howells /** 775607ca46eSDavid Howells * struct v4l2_plane - plane info for multi-planar buffers 776607ca46eSDavid Howells * @bytesused: number of bytes occupied by data in the plane (payload) 777607ca46eSDavid Howells * @length: size of this plane (NOT the payload) in bytes 778607ca46eSDavid Howells * @mem_offset: when memory in the associated struct v4l2_buffer is 779607ca46eSDavid Howells * V4L2_MEMORY_MMAP, equals the offset from the start of 780607ca46eSDavid Howells * the device memory for this plane (or is a "cookie" that 781607ca46eSDavid Howells * should be passed to mmap() called on the video node) 782607ca46eSDavid Howells * @userptr: when memory is V4L2_MEMORY_USERPTR, a userspace pointer 783607ca46eSDavid Howells * pointing to this plane 784051c7788SSumit Semwal * @fd: when memory is V4L2_MEMORY_DMABUF, a userspace file 785051c7788SSumit Semwal * descriptor associated with this plane 786607ca46eSDavid Howells * @data_offset: offset in the plane to the start of data; usually 0, 787607ca46eSDavid Howells * unless there is a header in front of the data 788607ca46eSDavid Howells * 789607ca46eSDavid Howells * Multi-planar buffers consist of one or more planes, e.g. an YCbCr buffer 790607ca46eSDavid Howells * with two planes can have one plane for Y, and another for interleaved CbCr 791607ca46eSDavid Howells * components. Each plane can reside in a separate memory buffer, or even in 792607ca46eSDavid Howells * a completely separate memory node (e.g. in embedded devices). 793607ca46eSDavid Howells */ 794607ca46eSDavid Howells struct v4l2_plane { 795607ca46eSDavid Howells __u32 bytesused; 796607ca46eSDavid Howells __u32 length; 797607ca46eSDavid Howells union { 798607ca46eSDavid Howells __u32 mem_offset; 799607ca46eSDavid Howells unsigned long userptr; 800051c7788SSumit Semwal __s32 fd; 801607ca46eSDavid Howells } m; 802607ca46eSDavid Howells __u32 data_offset; 803607ca46eSDavid Howells __u32 reserved[11]; 804607ca46eSDavid Howells }; 805607ca46eSDavid Howells 806607ca46eSDavid Howells /** 807607ca46eSDavid Howells * struct v4l2_buffer - video buffer info 808607ca46eSDavid Howells * @index: id number of the buffer 809607ca46eSDavid Howells * @type: enum v4l2_buf_type; buffer type (type == *_MPLANE for 810607ca46eSDavid Howells * multiplanar buffers); 811607ca46eSDavid Howells * @bytesused: number of bytes occupied by data in the buffer (payload); 812607ca46eSDavid Howells * unused (set to 0) for multiplanar buffers 813607ca46eSDavid Howells * @flags: buffer informational flags 814607ca46eSDavid Howells * @field: enum v4l2_field; field order of the image in the buffer 815607ca46eSDavid Howells * @timestamp: frame timestamp 816607ca46eSDavid Howells * @timecode: frame timecode 817607ca46eSDavid Howells * @sequence: sequence count of this frame 818607ca46eSDavid Howells * @memory: enum v4l2_memory; the method, in which the actual video data is 819607ca46eSDavid Howells * passed 820607ca46eSDavid Howells * @offset: for non-multiplanar buffers with memory == V4L2_MEMORY_MMAP; 821607ca46eSDavid Howells * offset from the start of the device memory for this plane, 822607ca46eSDavid Howells * (or a "cookie" that should be passed to mmap() as offset) 823607ca46eSDavid Howells * @userptr: for non-multiplanar buffers with memory == V4L2_MEMORY_USERPTR; 824607ca46eSDavid Howells * a userspace pointer pointing to this buffer 825051c7788SSumit Semwal * @fd: for non-multiplanar buffers with memory == V4L2_MEMORY_DMABUF; 826051c7788SSumit Semwal * a userspace file descriptor associated with this buffer 827607ca46eSDavid Howells * @planes: for multiplanar buffers; userspace pointer to the array of plane 828607ca46eSDavid Howells * info structs for this buffer 829607ca46eSDavid Howells * @length: size in bytes of the buffer (NOT its payload) for single-plane 830607ca46eSDavid Howells * buffers (when type != *_MPLANE); number of elements in the 831607ca46eSDavid Howells * planes array for multi-plane buffers 832607ca46eSDavid Howells * 833607ca46eSDavid Howells * Contains data exchanged by application and driver using one of the Streaming 834607ca46eSDavid Howells * I/O methods. 835607ca46eSDavid Howells */ 836607ca46eSDavid Howells struct v4l2_buffer { 837607ca46eSDavid Howells __u32 index; 838607ca46eSDavid Howells __u32 type; 839607ca46eSDavid Howells __u32 bytesused; 840607ca46eSDavid Howells __u32 flags; 841607ca46eSDavid Howells __u32 field; 842607ca46eSDavid Howells struct timeval timestamp; 843607ca46eSDavid Howells struct v4l2_timecode timecode; 844607ca46eSDavid Howells __u32 sequence; 845607ca46eSDavid Howells 846607ca46eSDavid Howells /* memory location */ 847607ca46eSDavid Howells __u32 memory; 848607ca46eSDavid Howells union { 849607ca46eSDavid Howells __u32 offset; 850607ca46eSDavid Howells unsigned long userptr; 851607ca46eSDavid Howells struct v4l2_plane *planes; 852051c7788SSumit Semwal __s32 fd; 853607ca46eSDavid Howells } m; 854607ca46eSDavid Howells __u32 length; 855607ca46eSDavid Howells __u32 reserved2; 856607ca46eSDavid Howells __u32 reserved; 857607ca46eSDavid Howells }; 858607ca46eSDavid Howells 859607ca46eSDavid Howells /* Flags for 'flags' field */ 860939f1377SSakari Ailus /* Buffer is mapped (flag) */ 861939f1377SSakari Ailus #define V4L2_BUF_FLAG_MAPPED 0x00000001 862939f1377SSakari Ailus /* Buffer is queued for processing */ 863939f1377SSakari Ailus #define V4L2_BUF_FLAG_QUEUED 0x00000002 864939f1377SSakari Ailus /* Buffer is ready */ 865939f1377SSakari Ailus #define V4L2_BUF_FLAG_DONE 0x00000004 866939f1377SSakari Ailus /* Image is a keyframe (I-frame) */ 867939f1377SSakari Ailus #define V4L2_BUF_FLAG_KEYFRAME 0x00000008 868939f1377SSakari Ailus /* Image is a P-frame */ 869939f1377SSakari Ailus #define V4L2_BUF_FLAG_PFRAME 0x00000010 870939f1377SSakari Ailus /* Image is a B-frame */ 871939f1377SSakari Ailus #define V4L2_BUF_FLAG_BFRAME 0x00000020 872607ca46eSDavid Howells /* Buffer is ready, but the data contained within is corrupted. */ 873939f1377SSakari Ailus #define V4L2_BUF_FLAG_ERROR 0x00000040 874939f1377SSakari Ailus /* timecode field is valid */ 875939f1377SSakari Ailus #define V4L2_BUF_FLAG_TIMECODE 0x00000100 876939f1377SSakari Ailus /* Buffer is prepared for queuing */ 877939f1377SSakari Ailus #define V4L2_BUF_FLAG_PREPARED 0x00000400 878607ca46eSDavid Howells /* Cache handling flags */ 879939f1377SSakari Ailus #define V4L2_BUF_FLAG_NO_CACHE_INVALIDATE 0x00000800 880939f1377SSakari Ailus #define V4L2_BUF_FLAG_NO_CACHE_CLEAN 0x00001000 8811202ecdcSSakari Ailus /* Timestamp type */ 882939f1377SSakari Ailus #define V4L2_BUF_FLAG_TIMESTAMP_MASK 0x0000e000 883939f1377SSakari Ailus #define V4L2_BUF_FLAG_TIMESTAMP_UNKNOWN 0x00000000 884939f1377SSakari Ailus #define V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC 0x00002000 885939f1377SSakari Ailus #define V4L2_BUF_FLAG_TIMESTAMP_COPY 0x00004000 886872484ceSSakari Ailus /* Timestamp sources. */ 887872484ceSSakari Ailus #define V4L2_BUF_FLAG_TSTAMP_SRC_MASK 0x00070000 888872484ceSSakari Ailus #define V4L2_BUF_FLAG_TSTAMP_SRC_EOF 0x00000000 889872484ceSSakari Ailus #define V4L2_BUF_FLAG_TSTAMP_SRC_SOE 0x00010000 890dc199241SPeter Seiderer /* mem2mem encoder/decoder */ 891dc199241SPeter Seiderer #define V4L2_BUF_FLAG_LAST 0x00100000 892607ca46eSDavid Howells 893b799d09aSTomasz Stanislawski /** 894b799d09aSTomasz Stanislawski * struct v4l2_exportbuffer - export of video buffer as DMABUF file descriptor 895b799d09aSTomasz Stanislawski * 896b799d09aSTomasz Stanislawski * @index: id number of the buffer 897b799d09aSTomasz Stanislawski * @type: enum v4l2_buf_type; buffer type (type == *_MPLANE for 898b799d09aSTomasz Stanislawski * multiplanar buffers); 899b799d09aSTomasz Stanislawski * @plane: index of the plane to be exported, 0 for single plane queues 900b799d09aSTomasz Stanislawski * @flags: flags for newly created file, currently only O_CLOEXEC is 901b799d09aSTomasz Stanislawski * supported, refer to manual of open syscall for more details 902b799d09aSTomasz Stanislawski * @fd: file descriptor associated with DMABUF (set by driver) 903b799d09aSTomasz Stanislawski * 904b799d09aSTomasz Stanislawski * Contains data used for exporting a video buffer as DMABUF file descriptor. 905b799d09aSTomasz Stanislawski * The buffer is identified by a 'cookie' returned by VIDIOC_QUERYBUF 906b799d09aSTomasz Stanislawski * (identical to the cookie used to mmap() the buffer to userspace). All 907b799d09aSTomasz Stanislawski * reserved fields must be set to zero. The field reserved0 is expected to 908b799d09aSTomasz Stanislawski * become a structure 'type' allowing an alternative layout of the structure 909b799d09aSTomasz Stanislawski * content. Therefore this field should not be used for any other extensions. 910b799d09aSTomasz Stanislawski */ 911b799d09aSTomasz Stanislawski struct v4l2_exportbuffer { 912b799d09aSTomasz Stanislawski __u32 type; /* enum v4l2_buf_type */ 913b799d09aSTomasz Stanislawski __u32 index; 914b799d09aSTomasz Stanislawski __u32 plane; 915b799d09aSTomasz Stanislawski __u32 flags; 916b799d09aSTomasz Stanislawski __s32 fd; 917b799d09aSTomasz Stanislawski __u32 reserved[11]; 918b799d09aSTomasz Stanislawski }; 919b799d09aSTomasz Stanislawski 920607ca46eSDavid Howells /* 921607ca46eSDavid Howells * O V E R L A Y P R E V I E W 922607ca46eSDavid Howells */ 923607ca46eSDavid Howells struct v4l2_framebuffer { 924607ca46eSDavid Howells __u32 capability; 925607ca46eSDavid Howells __u32 flags; 926607ca46eSDavid Howells /* FIXME: in theory we should pass something like PCI device + memory 927607ca46eSDavid Howells * region + offset instead of some physical address */ 928607ca46eSDavid Howells void *base; 929d52e2381SLaurent Pinchart struct { 930d52e2381SLaurent Pinchart __u32 width; 931d52e2381SLaurent Pinchart __u32 height; 932d52e2381SLaurent Pinchart __u32 pixelformat; 933d52e2381SLaurent Pinchart __u32 field; /* enum v4l2_field */ 934d52e2381SLaurent Pinchart __u32 bytesperline; /* for padding, zero if unused */ 935d52e2381SLaurent Pinchart __u32 sizeimage; 936d52e2381SLaurent Pinchart __u32 colorspace; /* enum v4l2_colorspace */ 937d52e2381SLaurent Pinchart __u32 priv; /* reserved field, set to 0 */ 938d52e2381SLaurent Pinchart } fmt; 939607ca46eSDavid Howells }; 940607ca46eSDavid Howells /* Flags for the 'capability' field. Read only */ 941607ca46eSDavid Howells #define V4L2_FBUF_CAP_EXTERNOVERLAY 0x0001 942607ca46eSDavid Howells #define V4L2_FBUF_CAP_CHROMAKEY 0x0002 943607ca46eSDavid Howells #define V4L2_FBUF_CAP_LIST_CLIPPING 0x0004 944607ca46eSDavid Howells #define V4L2_FBUF_CAP_BITMAP_CLIPPING 0x0008 945607ca46eSDavid Howells #define V4L2_FBUF_CAP_LOCAL_ALPHA 0x0010 946607ca46eSDavid Howells #define V4L2_FBUF_CAP_GLOBAL_ALPHA 0x0020 947607ca46eSDavid Howells #define V4L2_FBUF_CAP_LOCAL_INV_ALPHA 0x0040 948607ca46eSDavid Howells #define V4L2_FBUF_CAP_SRC_CHROMAKEY 0x0080 949607ca46eSDavid Howells /* Flags for the 'flags' field. */ 950607ca46eSDavid Howells #define V4L2_FBUF_FLAG_PRIMARY 0x0001 951607ca46eSDavid Howells #define V4L2_FBUF_FLAG_OVERLAY 0x0002 952607ca46eSDavid Howells #define V4L2_FBUF_FLAG_CHROMAKEY 0x0004 953607ca46eSDavid Howells #define V4L2_FBUF_FLAG_LOCAL_ALPHA 0x0008 954607ca46eSDavid Howells #define V4L2_FBUF_FLAG_GLOBAL_ALPHA 0x0010 955607ca46eSDavid Howells #define V4L2_FBUF_FLAG_LOCAL_INV_ALPHA 0x0020 956607ca46eSDavid Howells #define V4L2_FBUF_FLAG_SRC_CHROMAKEY 0x0040 957607ca46eSDavid Howells 958607ca46eSDavid Howells struct v4l2_clip { 959607ca46eSDavid Howells struct v4l2_rect c; 960607ca46eSDavid Howells struct v4l2_clip __user *next; 961607ca46eSDavid Howells }; 962607ca46eSDavid Howells 963607ca46eSDavid Howells struct v4l2_window { 964607ca46eSDavid Howells struct v4l2_rect w; 965607ca46eSDavid Howells __u32 field; /* enum v4l2_field */ 966607ca46eSDavid Howells __u32 chromakey; 967607ca46eSDavid Howells struct v4l2_clip __user *clips; 968607ca46eSDavid Howells __u32 clipcount; 969607ca46eSDavid Howells void __user *bitmap; 970607ca46eSDavid Howells __u8 global_alpha; 971607ca46eSDavid Howells }; 972607ca46eSDavid Howells 973607ca46eSDavid Howells /* 974607ca46eSDavid Howells * C A P T U R E P A R A M E T E R S 975607ca46eSDavid Howells */ 976607ca46eSDavid Howells struct v4l2_captureparm { 977607ca46eSDavid Howells __u32 capability; /* Supported modes */ 978607ca46eSDavid Howells __u32 capturemode; /* Current mode */ 9792e74598dSKirill Smelkov struct v4l2_fract timeperframe; /* Time per frame in seconds */ 980607ca46eSDavid Howells __u32 extendedmode; /* Driver-specific extensions */ 981607ca46eSDavid Howells __u32 readbuffers; /* # of buffers for read */ 982607ca46eSDavid Howells __u32 reserved[4]; 983607ca46eSDavid Howells }; 984607ca46eSDavid Howells 985607ca46eSDavid Howells /* Flags for 'capability' and 'capturemode' fields */ 986607ca46eSDavid Howells #define V4L2_MODE_HIGHQUALITY 0x0001 /* High quality imaging mode */ 987607ca46eSDavid Howells #define V4L2_CAP_TIMEPERFRAME 0x1000 /* timeperframe field is supported */ 988607ca46eSDavid Howells 989607ca46eSDavid Howells struct v4l2_outputparm { 990607ca46eSDavid Howells __u32 capability; /* Supported modes */ 991607ca46eSDavid Howells __u32 outputmode; /* Current mode */ 992607ca46eSDavid Howells struct v4l2_fract timeperframe; /* Time per frame in seconds */ 993607ca46eSDavid Howells __u32 extendedmode; /* Driver-specific extensions */ 994607ca46eSDavid Howells __u32 writebuffers; /* # of buffers for write */ 995607ca46eSDavid Howells __u32 reserved[4]; 996607ca46eSDavid Howells }; 997607ca46eSDavid Howells 998607ca46eSDavid Howells /* 999607ca46eSDavid Howells * I N P U T I M A G E C R O P P I N G 1000607ca46eSDavid Howells */ 1001607ca46eSDavid Howells struct v4l2_cropcap { 1002607ca46eSDavid Howells __u32 type; /* enum v4l2_buf_type */ 1003607ca46eSDavid Howells struct v4l2_rect bounds; 1004607ca46eSDavid Howells struct v4l2_rect defrect; 1005607ca46eSDavid Howells struct v4l2_fract pixelaspect; 1006607ca46eSDavid Howells }; 1007607ca46eSDavid Howells 1008607ca46eSDavid Howells struct v4l2_crop { 1009607ca46eSDavid Howells __u32 type; /* enum v4l2_buf_type */ 1010607ca46eSDavid Howells struct v4l2_rect c; 1011607ca46eSDavid Howells }; 1012607ca46eSDavid Howells 1013607ca46eSDavid Howells /** 1014607ca46eSDavid Howells * struct v4l2_selection - selection info 1015607ca46eSDavid Howells * @type: buffer type (do not use *_MPLANE types) 1016607ca46eSDavid Howells * @target: Selection target, used to choose one of possible rectangles; 1017607ca46eSDavid Howells * defined in v4l2-common.h; V4L2_SEL_TGT_* . 1018607ca46eSDavid Howells * @flags: constraints flags, defined in v4l2-common.h; V4L2_SEL_FLAG_*. 1019607ca46eSDavid Howells * @r: coordinates of selection window 1020607ca46eSDavid Howells * @reserved: for future use, rounds structure size to 64 bytes, set to zero 1021607ca46eSDavid Howells * 1022607ca46eSDavid Howells * Hardware may use multiple helper windows to process a video stream. 1023607ca46eSDavid Howells * The structure is used to exchange this selection areas between 1024607ca46eSDavid Howells * an application and a driver. 1025607ca46eSDavid Howells */ 1026607ca46eSDavid Howells struct v4l2_selection { 1027607ca46eSDavid Howells __u32 type; 1028607ca46eSDavid Howells __u32 target; 1029607ca46eSDavid Howells __u32 flags; 1030607ca46eSDavid Howells struct v4l2_rect r; 1031607ca46eSDavid Howells __u32 reserved[9]; 1032607ca46eSDavid Howells }; 1033607ca46eSDavid Howells 1034607ca46eSDavid Howells 1035607ca46eSDavid Howells /* 1036607ca46eSDavid Howells * A N A L O G V I D E O S T A N D A R D 1037607ca46eSDavid Howells */ 1038607ca46eSDavid Howells 1039607ca46eSDavid Howells typedef __u64 v4l2_std_id; 1040607ca46eSDavid Howells 1041607ca46eSDavid Howells /* one bit for each */ 1042607ca46eSDavid Howells #define V4L2_STD_PAL_B ((v4l2_std_id)0x00000001) 1043607ca46eSDavid Howells #define V4L2_STD_PAL_B1 ((v4l2_std_id)0x00000002) 1044607ca46eSDavid Howells #define V4L2_STD_PAL_G ((v4l2_std_id)0x00000004) 1045607ca46eSDavid Howells #define V4L2_STD_PAL_H ((v4l2_std_id)0x00000008) 1046607ca46eSDavid Howells #define V4L2_STD_PAL_I ((v4l2_std_id)0x00000010) 1047607ca46eSDavid Howells #define V4L2_STD_PAL_D ((v4l2_std_id)0x00000020) 1048607ca46eSDavid Howells #define V4L2_STD_PAL_D1 ((v4l2_std_id)0x00000040) 1049607ca46eSDavid Howells #define V4L2_STD_PAL_K ((v4l2_std_id)0x00000080) 1050607ca46eSDavid Howells 1051607ca46eSDavid Howells #define V4L2_STD_PAL_M ((v4l2_std_id)0x00000100) 1052607ca46eSDavid Howells #define V4L2_STD_PAL_N ((v4l2_std_id)0x00000200) 1053607ca46eSDavid Howells #define V4L2_STD_PAL_Nc ((v4l2_std_id)0x00000400) 1054607ca46eSDavid Howells #define V4L2_STD_PAL_60 ((v4l2_std_id)0x00000800) 1055607ca46eSDavid Howells 1056607ca46eSDavid Howells #define V4L2_STD_NTSC_M ((v4l2_std_id)0x00001000) /* BTSC */ 1057607ca46eSDavid Howells #define V4L2_STD_NTSC_M_JP ((v4l2_std_id)0x00002000) /* EIA-J */ 1058607ca46eSDavid Howells #define V4L2_STD_NTSC_443 ((v4l2_std_id)0x00004000) 1059607ca46eSDavid Howells #define V4L2_STD_NTSC_M_KR ((v4l2_std_id)0x00008000) /* FM A2 */ 1060607ca46eSDavid Howells 1061607ca46eSDavid Howells #define V4L2_STD_SECAM_B ((v4l2_std_id)0x00010000) 1062607ca46eSDavid Howells #define V4L2_STD_SECAM_D ((v4l2_std_id)0x00020000) 1063607ca46eSDavid Howells #define V4L2_STD_SECAM_G ((v4l2_std_id)0x00040000) 1064607ca46eSDavid Howells #define V4L2_STD_SECAM_H ((v4l2_std_id)0x00080000) 1065607ca46eSDavid Howells #define V4L2_STD_SECAM_K ((v4l2_std_id)0x00100000) 1066607ca46eSDavid Howells #define V4L2_STD_SECAM_K1 ((v4l2_std_id)0x00200000) 1067607ca46eSDavid Howells #define V4L2_STD_SECAM_L ((v4l2_std_id)0x00400000) 1068607ca46eSDavid Howells #define V4L2_STD_SECAM_LC ((v4l2_std_id)0x00800000) 1069607ca46eSDavid Howells 1070607ca46eSDavid Howells /* ATSC/HDTV */ 1071607ca46eSDavid Howells #define V4L2_STD_ATSC_8_VSB ((v4l2_std_id)0x01000000) 1072607ca46eSDavid Howells #define V4L2_STD_ATSC_16_VSB ((v4l2_std_id)0x02000000) 1073607ca46eSDavid Howells 1074607ca46eSDavid Howells /* FIXME: 1075607ca46eSDavid Howells Although std_id is 64 bits, there is an issue on PPC32 architecture that 1076607ca46eSDavid Howells makes switch(__u64) to break. So, there's a hack on v4l2-common.c rounding 1077607ca46eSDavid Howells this value to 32 bits. 1078607ca46eSDavid Howells As, currently, the max value is for V4L2_STD_ATSC_16_VSB (30 bits wide), 1079607ca46eSDavid Howells it should work fine. However, if needed to add more than two standards, 1080607ca46eSDavid Howells v4l2-common.c should be fixed. 1081607ca46eSDavid Howells */ 1082607ca46eSDavid Howells 1083607ca46eSDavid Howells /* 1084607ca46eSDavid Howells * Some macros to merge video standards in order to make live easier for the 1085607ca46eSDavid Howells * drivers and V4L2 applications 1086607ca46eSDavid Howells */ 1087607ca46eSDavid Howells 1088607ca46eSDavid Howells /* 1089607ca46eSDavid Howells * "Common" NTSC/M - It should be noticed that V4L2_STD_NTSC_443 is 1090607ca46eSDavid Howells * Missing here. 1091607ca46eSDavid Howells */ 1092607ca46eSDavid Howells #define V4L2_STD_NTSC (V4L2_STD_NTSC_M |\ 1093607ca46eSDavid Howells V4L2_STD_NTSC_M_JP |\ 1094607ca46eSDavid Howells V4L2_STD_NTSC_M_KR) 1095607ca46eSDavid Howells /* Secam macros */ 1096607ca46eSDavid Howells #define V4L2_STD_SECAM_DK (V4L2_STD_SECAM_D |\ 1097607ca46eSDavid Howells V4L2_STD_SECAM_K |\ 1098607ca46eSDavid Howells V4L2_STD_SECAM_K1) 1099607ca46eSDavid Howells /* All Secam Standards */ 1100607ca46eSDavid Howells #define V4L2_STD_SECAM (V4L2_STD_SECAM_B |\ 1101607ca46eSDavid Howells V4L2_STD_SECAM_G |\ 1102607ca46eSDavid Howells V4L2_STD_SECAM_H |\ 1103607ca46eSDavid Howells V4L2_STD_SECAM_DK |\ 1104607ca46eSDavid Howells V4L2_STD_SECAM_L |\ 1105607ca46eSDavid Howells V4L2_STD_SECAM_LC) 1106607ca46eSDavid Howells /* PAL macros */ 1107607ca46eSDavid Howells #define V4L2_STD_PAL_BG (V4L2_STD_PAL_B |\ 1108607ca46eSDavid Howells V4L2_STD_PAL_B1 |\ 1109607ca46eSDavid Howells V4L2_STD_PAL_G) 1110607ca46eSDavid Howells #define V4L2_STD_PAL_DK (V4L2_STD_PAL_D |\ 1111607ca46eSDavid Howells V4L2_STD_PAL_D1 |\ 1112607ca46eSDavid Howells V4L2_STD_PAL_K) 1113607ca46eSDavid Howells /* 1114607ca46eSDavid Howells * "Common" PAL - This macro is there to be compatible with the old 1115607ca46eSDavid Howells * V4L1 concept of "PAL": /BGDKHI. 1116ff29feb9SLad, Prabhakar * Several PAL standards are missing here: /M, /N and /Nc 1117607ca46eSDavid Howells */ 1118607ca46eSDavid Howells #define V4L2_STD_PAL (V4L2_STD_PAL_BG |\ 1119607ca46eSDavid Howells V4L2_STD_PAL_DK |\ 1120607ca46eSDavid Howells V4L2_STD_PAL_H |\ 1121607ca46eSDavid Howells V4L2_STD_PAL_I) 1122607ca46eSDavid Howells /* Chroma "agnostic" standards */ 1123607ca46eSDavid Howells #define V4L2_STD_B (V4L2_STD_PAL_B |\ 1124607ca46eSDavid Howells V4L2_STD_PAL_B1 |\ 1125607ca46eSDavid Howells V4L2_STD_SECAM_B) 1126607ca46eSDavid Howells #define V4L2_STD_G (V4L2_STD_PAL_G |\ 1127607ca46eSDavid Howells V4L2_STD_SECAM_G) 1128607ca46eSDavid Howells #define V4L2_STD_H (V4L2_STD_PAL_H |\ 1129607ca46eSDavid Howells V4L2_STD_SECAM_H) 1130607ca46eSDavid Howells #define V4L2_STD_L (V4L2_STD_SECAM_L |\ 1131607ca46eSDavid Howells V4L2_STD_SECAM_LC) 1132607ca46eSDavid Howells #define V4L2_STD_GH (V4L2_STD_G |\ 1133607ca46eSDavid Howells V4L2_STD_H) 1134607ca46eSDavid Howells #define V4L2_STD_DK (V4L2_STD_PAL_DK |\ 1135607ca46eSDavid Howells V4L2_STD_SECAM_DK) 1136607ca46eSDavid Howells #define V4L2_STD_BG (V4L2_STD_B |\ 1137607ca46eSDavid Howells V4L2_STD_G) 1138607ca46eSDavid Howells #define V4L2_STD_MN (V4L2_STD_PAL_M |\ 1139607ca46eSDavid Howells V4L2_STD_PAL_N |\ 1140607ca46eSDavid Howells V4L2_STD_PAL_Nc |\ 1141607ca46eSDavid Howells V4L2_STD_NTSC) 1142607ca46eSDavid Howells 1143607ca46eSDavid Howells /* Standards where MTS/BTSC stereo could be found */ 1144607ca46eSDavid Howells #define V4L2_STD_MTS (V4L2_STD_NTSC_M |\ 1145607ca46eSDavid Howells V4L2_STD_PAL_M |\ 1146607ca46eSDavid Howells V4L2_STD_PAL_N |\ 1147607ca46eSDavid Howells V4L2_STD_PAL_Nc) 1148607ca46eSDavid Howells 1149607ca46eSDavid Howells /* Standards for Countries with 60Hz Line frequency */ 1150607ca46eSDavid Howells #define V4L2_STD_525_60 (V4L2_STD_PAL_M |\ 1151607ca46eSDavid Howells V4L2_STD_PAL_60 |\ 1152607ca46eSDavid Howells V4L2_STD_NTSC |\ 1153607ca46eSDavid Howells V4L2_STD_NTSC_443) 1154607ca46eSDavid Howells /* Standards for Countries with 50Hz Line frequency */ 1155607ca46eSDavid Howells #define V4L2_STD_625_50 (V4L2_STD_PAL |\ 1156607ca46eSDavid Howells V4L2_STD_PAL_N |\ 1157607ca46eSDavid Howells V4L2_STD_PAL_Nc |\ 1158607ca46eSDavid Howells V4L2_STD_SECAM) 1159607ca46eSDavid Howells 1160607ca46eSDavid Howells #define V4L2_STD_ATSC (V4L2_STD_ATSC_8_VSB |\ 1161607ca46eSDavid Howells V4L2_STD_ATSC_16_VSB) 1162607ca46eSDavid Howells /* Macros with none and all analog standards */ 1163607ca46eSDavid Howells #define V4L2_STD_UNKNOWN 0 1164607ca46eSDavid Howells #define V4L2_STD_ALL (V4L2_STD_525_60 |\ 1165607ca46eSDavid Howells V4L2_STD_625_50) 1166607ca46eSDavid Howells 1167607ca46eSDavid Howells struct v4l2_standard { 1168607ca46eSDavid Howells __u32 index; 1169607ca46eSDavid Howells v4l2_std_id id; 1170607ca46eSDavid Howells __u8 name[24]; 1171607ca46eSDavid Howells struct v4l2_fract frameperiod; /* Frames, not fields */ 1172607ca46eSDavid Howells __u32 framelines; 1173607ca46eSDavid Howells __u32 reserved[4]; 1174607ca46eSDavid Howells }; 1175607ca46eSDavid Howells 1176607ca46eSDavid Howells /* 1177607ca46eSDavid Howells * D V B T T I M I N G S 1178607ca46eSDavid Howells */ 1179607ca46eSDavid Howells 1180607ca46eSDavid Howells /** struct v4l2_bt_timings - BT.656/BT.1120 timing data 1181607ca46eSDavid Howells * @width: total width of the active video in pixels 1182607ca46eSDavid Howells * @height: total height of the active video in lines 1183607ca46eSDavid Howells * @interlaced: Interlaced or progressive 1184607ca46eSDavid Howells * @polarities: Positive or negative polarities 1185607ca46eSDavid Howells * @pixelclock: Pixel clock in HZ. Ex. 74.25MHz->74250000 1186607ca46eSDavid Howells * @hfrontporch:Horizontal front porch in pixels 1187607ca46eSDavid Howells * @hsync: Horizontal Sync length in pixels 1188607ca46eSDavid Howells * @hbackporch: Horizontal back porch in pixels 1189607ca46eSDavid Howells * @vfrontporch:Vertical front porch in lines 1190607ca46eSDavid Howells * @vsync: Vertical Sync length in lines 1191607ca46eSDavid Howells * @vbackporch: Vertical back porch in lines 1192607ca46eSDavid Howells * @il_vfrontporch:Vertical front porch for the even field 1193607ca46eSDavid Howells * (aka field 2) of interlaced field formats 1194607ca46eSDavid Howells * @il_vsync: Vertical Sync length for the even field 1195607ca46eSDavid Howells * (aka field 2) of interlaced field formats 1196607ca46eSDavid Howells * @il_vbackporch:Vertical back porch for the even field 1197607ca46eSDavid Howells * (aka field 2) of interlaced field formats 1198607ca46eSDavid Howells * @standards: Standards the timing belongs to 1199607ca46eSDavid Howells * @flags: Flags 1200607ca46eSDavid Howells * @reserved: Reserved fields, must be zeroed. 1201607ca46eSDavid Howells * 1202607ca46eSDavid Howells * A note regarding vertical interlaced timings: height refers to the total 1203607ca46eSDavid Howells * height of the active video frame (= two fields). The blanking timings refer 1204607ca46eSDavid Howells * to the blanking of each field. So the height of the total frame is 1205607ca46eSDavid Howells * calculated as follows: 1206607ca46eSDavid Howells * 1207607ca46eSDavid Howells * tot_height = height + vfrontporch + vsync + vbackporch + 1208607ca46eSDavid Howells * il_vfrontporch + il_vsync + il_vbackporch 1209607ca46eSDavid Howells * 1210607ca46eSDavid Howells * The active height of each field is height / 2. 1211607ca46eSDavid Howells */ 1212607ca46eSDavid Howells struct v4l2_bt_timings { 1213607ca46eSDavid Howells __u32 width; 1214607ca46eSDavid Howells __u32 height; 1215607ca46eSDavid Howells __u32 interlaced; 1216607ca46eSDavid Howells __u32 polarities; 1217607ca46eSDavid Howells __u64 pixelclock; 1218607ca46eSDavid Howells __u32 hfrontporch; 1219607ca46eSDavid Howells __u32 hsync; 1220607ca46eSDavid Howells __u32 hbackporch; 1221607ca46eSDavid Howells __u32 vfrontporch; 1222607ca46eSDavid Howells __u32 vsync; 1223607ca46eSDavid Howells __u32 vbackporch; 1224607ca46eSDavid Howells __u32 il_vfrontporch; 1225607ca46eSDavid Howells __u32 il_vsync; 1226607ca46eSDavid Howells __u32 il_vbackporch; 1227607ca46eSDavid Howells __u32 standards; 1228607ca46eSDavid Howells __u32 flags; 1229607ca46eSDavid Howells __u32 reserved[14]; 1230607ca46eSDavid Howells } __attribute__ ((packed)); 1231607ca46eSDavid Howells 1232607ca46eSDavid Howells /* Interlaced or progressive format */ 1233607ca46eSDavid Howells #define V4L2_DV_PROGRESSIVE 0 1234607ca46eSDavid Howells #define V4L2_DV_INTERLACED 1 1235607ca46eSDavid Howells 1236607ca46eSDavid Howells /* Polarities. If bit is not set, it is assumed to be negative polarity */ 1237607ca46eSDavid Howells #define V4L2_DV_VSYNC_POS_POL 0x00000001 1238607ca46eSDavid Howells #define V4L2_DV_HSYNC_POS_POL 0x00000002 1239607ca46eSDavid Howells 1240607ca46eSDavid Howells /* Timings standards */ 1241607ca46eSDavid Howells #define V4L2_DV_BT_STD_CEA861 (1 << 0) /* CEA-861 Digital TV Profile */ 1242607ca46eSDavid Howells #define V4L2_DV_BT_STD_DMT (1 << 1) /* VESA Discrete Monitor Timings */ 1243607ca46eSDavid Howells #define V4L2_DV_BT_STD_CVT (1 << 2) /* VESA Coordinated Video Timings */ 1244607ca46eSDavid Howells #define V4L2_DV_BT_STD_GTF (1 << 3) /* VESA Generalized Timings Formula */ 1245607ca46eSDavid Howells 1246607ca46eSDavid Howells /* Flags */ 1247607ca46eSDavid Howells 1248607ca46eSDavid Howells /* CVT/GTF specific: timing uses reduced blanking (CVT) or the 'Secondary 1249607ca46eSDavid Howells GTF' curve (GTF). In both cases the horizontal and/or vertical blanking 1250607ca46eSDavid Howells intervals are reduced, allowing a higher resolution over the same 1251607ca46eSDavid Howells bandwidth. This is a read-only flag. */ 1252607ca46eSDavid Howells #define V4L2_DV_FL_REDUCED_BLANKING (1 << 0) 1253607ca46eSDavid Howells /* CEA-861 specific: set for CEA-861 formats with a framerate of a multiple 1254607ca46eSDavid Howells of six. These formats can be optionally played at 1 / 1.001 speed. 1255607ca46eSDavid Howells This is a read-only flag. */ 1256607ca46eSDavid Howells #define V4L2_DV_FL_CAN_REDUCE_FPS (1 << 1) 1257607ca46eSDavid Howells /* CEA-861 specific: only valid for video transmitters, the flag is cleared 1258607ca46eSDavid Howells by receivers. 1259607ca46eSDavid Howells If the framerate of the format is a multiple of six, then the pixelclock 1260607ca46eSDavid Howells used to set up the transmitter is divided by 1.001 to make it compatible 1261607ca46eSDavid Howells with 60 Hz based standards such as NTSC and PAL-M that use a framerate of 1262607ca46eSDavid Howells 29.97 Hz. Otherwise this flag is cleared. If the transmitter can't generate 1263607ca46eSDavid Howells such frequencies, then the flag will also be cleared. */ 1264607ca46eSDavid Howells #define V4L2_DV_FL_REDUCED_FPS (1 << 2) 1265607ca46eSDavid Howells /* Specific to interlaced formats: if set, then field 1 is really one half-line 1266607ca46eSDavid Howells longer and field 2 is really one half-line shorter, so each field has 1267607ca46eSDavid Howells exactly the same number of half-lines. Whether half-lines can be detected 1268607ca46eSDavid Howells or used depends on the hardware. */ 1269292a8787SHans Verkuil #define V4L2_DV_FL_HALF_LINE (1 << 3) 12705ce65d1fSHans Verkuil /* If set, then this is a Consumer Electronics (CE) video format. Such formats 12715ce65d1fSHans Verkuil * differ from other formats (commonly called IT formats) in that if RGB 12725ce65d1fSHans Verkuil * encoding is used then by default the RGB values use limited range (i.e. 12735ce65d1fSHans Verkuil * use the range 16-235) as opposed to 0-255. All formats defined in CEA-861 12745ce65d1fSHans Verkuil * except for the 640x480 format are CE formats. */ 12755ce65d1fSHans Verkuil #define V4L2_DV_FL_IS_CE_VIDEO (1 << 4) 1276607ca46eSDavid Howells 12777f68127fSHans Verkuil /* A few useful defines to calculate the total blanking and frame sizes */ 12787f68127fSHans Verkuil #define V4L2_DV_BT_BLANKING_WIDTH(bt) \ 1279aee786acSHans Verkuil ((bt)->hfrontporch + (bt)->hsync + (bt)->hbackporch) 12807f68127fSHans Verkuil #define V4L2_DV_BT_FRAME_WIDTH(bt) \ 1281aee786acSHans Verkuil ((bt)->width + V4L2_DV_BT_BLANKING_WIDTH(bt)) 12827f68127fSHans Verkuil #define V4L2_DV_BT_BLANKING_HEIGHT(bt) \ 1283aee786acSHans Verkuil ((bt)->vfrontporch + (bt)->vsync + (bt)->vbackporch + \ 1284aee786acSHans Verkuil (bt)->il_vfrontporch + (bt)->il_vsync + (bt)->il_vbackporch) 12857f68127fSHans Verkuil #define V4L2_DV_BT_FRAME_HEIGHT(bt) \ 1286aee786acSHans Verkuil ((bt)->height + V4L2_DV_BT_BLANKING_HEIGHT(bt)) 1287607ca46eSDavid Howells 1288607ca46eSDavid Howells /** struct v4l2_dv_timings - DV timings 1289607ca46eSDavid Howells * @type: the type of the timings 1290607ca46eSDavid Howells * @bt: BT656/1120 timings 1291607ca46eSDavid Howells */ 1292607ca46eSDavid Howells struct v4l2_dv_timings { 1293607ca46eSDavid Howells __u32 type; 1294607ca46eSDavid Howells union { 1295607ca46eSDavid Howells struct v4l2_bt_timings bt; 1296607ca46eSDavid Howells __u32 reserved[32]; 1297607ca46eSDavid Howells }; 1298607ca46eSDavid Howells } __attribute__ ((packed)); 1299607ca46eSDavid Howells 1300607ca46eSDavid Howells /* Values for the type field */ 1301607ca46eSDavid Howells #define V4L2_DV_BT_656_1120 0 /* BT.656/1120 timing type */ 1302607ca46eSDavid Howells 1303607ca46eSDavid Howells 1304607ca46eSDavid Howells /** struct v4l2_enum_dv_timings - DV timings enumeration 1305607ca46eSDavid Howells * @index: enumeration index 13060349f6a5SLaurent Pinchart * @pad: the pad number for which to enumerate timings (used with 13070349f6a5SLaurent Pinchart * v4l-subdev nodes only) 1308607ca46eSDavid Howells * @reserved: must be zeroed 1309607ca46eSDavid Howells * @timings: the timings for the given index 1310607ca46eSDavid Howells */ 1311607ca46eSDavid Howells struct v4l2_enum_dv_timings { 1312607ca46eSDavid Howells __u32 index; 13130349f6a5SLaurent Pinchart __u32 pad; 13140349f6a5SLaurent Pinchart __u32 reserved[2]; 1315607ca46eSDavid Howells struct v4l2_dv_timings timings; 1316607ca46eSDavid Howells }; 1317607ca46eSDavid Howells 1318607ca46eSDavid Howells /** struct v4l2_bt_timings_cap - BT.656/BT.1120 timing capabilities 1319607ca46eSDavid Howells * @min_width: width in pixels 1320607ca46eSDavid Howells * @max_width: width in pixels 1321607ca46eSDavid Howells * @min_height: height in lines 1322607ca46eSDavid Howells * @max_height: height in lines 1323607ca46eSDavid Howells * @min_pixelclock: Pixel clock in HZ. Ex. 74.25MHz->74250000 1324607ca46eSDavid Howells * @max_pixelclock: Pixel clock in HZ. Ex. 74.25MHz->74250000 1325607ca46eSDavid Howells * @standards: Supported standards 1326607ca46eSDavid Howells * @capabilities: Supported capabilities 1327607ca46eSDavid Howells * @reserved: Must be zeroed 1328607ca46eSDavid Howells */ 1329607ca46eSDavid Howells struct v4l2_bt_timings_cap { 1330607ca46eSDavid Howells __u32 min_width; 1331607ca46eSDavid Howells __u32 max_width; 1332607ca46eSDavid Howells __u32 min_height; 1333607ca46eSDavid Howells __u32 max_height; 1334607ca46eSDavid Howells __u64 min_pixelclock; 1335607ca46eSDavid Howells __u64 max_pixelclock; 1336607ca46eSDavid Howells __u32 standards; 1337607ca46eSDavid Howells __u32 capabilities; 1338607ca46eSDavid Howells __u32 reserved[16]; 1339607ca46eSDavid Howells } __attribute__ ((packed)); 1340607ca46eSDavid Howells 1341607ca46eSDavid Howells /* Supports interlaced formats */ 1342607ca46eSDavid Howells #define V4L2_DV_BT_CAP_INTERLACED (1 << 0) 1343607ca46eSDavid Howells /* Supports progressive formats */ 1344607ca46eSDavid Howells #define V4L2_DV_BT_CAP_PROGRESSIVE (1 << 1) 1345607ca46eSDavid Howells /* Supports CVT/GTF reduced blanking */ 1346607ca46eSDavid Howells #define V4L2_DV_BT_CAP_REDUCED_BLANKING (1 << 2) 1347607ca46eSDavid Howells /* Supports custom formats */ 1348607ca46eSDavid Howells #define V4L2_DV_BT_CAP_CUSTOM (1 << 3) 1349607ca46eSDavid Howells 1350607ca46eSDavid Howells /** struct v4l2_dv_timings_cap - DV timings capabilities 1351607ca46eSDavid Howells * @type: the type of the timings (same as in struct v4l2_dv_timings) 13520349f6a5SLaurent Pinchart * @pad: the pad number for which to query capabilities (used with 13530349f6a5SLaurent Pinchart * v4l-subdev nodes only) 1354607ca46eSDavid Howells * @bt: the BT656/1120 timings capabilities 1355607ca46eSDavid Howells */ 1356607ca46eSDavid Howells struct v4l2_dv_timings_cap { 1357607ca46eSDavid Howells __u32 type; 13580349f6a5SLaurent Pinchart __u32 pad; 13590349f6a5SLaurent Pinchart __u32 reserved[2]; 1360607ca46eSDavid Howells union { 1361607ca46eSDavid Howells struct v4l2_bt_timings_cap bt; 1362607ca46eSDavid Howells __u32 raw_data[32]; 1363607ca46eSDavid Howells }; 1364607ca46eSDavid Howells }; 1365607ca46eSDavid Howells 1366607ca46eSDavid Howells 1367607ca46eSDavid Howells /* 1368607ca46eSDavid Howells * V I D E O I N P U T S 1369607ca46eSDavid Howells */ 1370607ca46eSDavid Howells struct v4l2_input { 1371607ca46eSDavid Howells __u32 index; /* Which input */ 1372607ca46eSDavid Howells __u8 name[32]; /* Label */ 1373607ca46eSDavid Howells __u32 type; /* Type of input */ 1374607ca46eSDavid Howells __u32 audioset; /* Associated audios (bitfield) */ 1375607ca46eSDavid Howells __u32 tuner; /* enum v4l2_tuner_type */ 1376607ca46eSDavid Howells v4l2_std_id std; 1377607ca46eSDavid Howells __u32 status; 1378607ca46eSDavid Howells __u32 capabilities; 1379607ca46eSDavid Howells __u32 reserved[3]; 1380607ca46eSDavid Howells }; 1381607ca46eSDavid Howells 1382607ca46eSDavid Howells /* Values for the 'type' field */ 1383607ca46eSDavid Howells #define V4L2_INPUT_TYPE_TUNER 1 1384607ca46eSDavid Howells #define V4L2_INPUT_TYPE_CAMERA 2 1385607ca46eSDavid Howells 1386607ca46eSDavid Howells /* field 'status' - general */ 1387607ca46eSDavid Howells #define V4L2_IN_ST_NO_POWER 0x00000001 /* Attached device is off */ 1388607ca46eSDavid Howells #define V4L2_IN_ST_NO_SIGNAL 0x00000002 1389607ca46eSDavid Howells #define V4L2_IN_ST_NO_COLOR 0x00000004 1390607ca46eSDavid Howells 1391607ca46eSDavid Howells /* field 'status' - sensor orientation */ 1392607ca46eSDavid Howells /* If sensor is mounted upside down set both bits */ 1393607ca46eSDavid Howells #define V4L2_IN_ST_HFLIP 0x00000010 /* Frames are flipped horizontally */ 1394607ca46eSDavid Howells #define V4L2_IN_ST_VFLIP 0x00000020 /* Frames are flipped vertically */ 1395607ca46eSDavid Howells 1396607ca46eSDavid Howells /* field 'status' - analog */ 1397607ca46eSDavid Howells #define V4L2_IN_ST_NO_H_LOCK 0x00000100 /* No horizontal sync lock */ 1398607ca46eSDavid Howells #define V4L2_IN_ST_COLOR_KILL 0x00000200 /* Color killer is active */ 1399607ca46eSDavid Howells 1400607ca46eSDavid Howells /* field 'status' - digital */ 1401607ca46eSDavid Howells #define V4L2_IN_ST_NO_SYNC 0x00010000 /* No synchronization lock */ 1402607ca46eSDavid Howells #define V4L2_IN_ST_NO_EQU 0x00020000 /* No equalizer lock */ 1403607ca46eSDavid Howells #define V4L2_IN_ST_NO_CARRIER 0x00040000 /* Carrier recovery failed */ 1404607ca46eSDavid Howells 1405607ca46eSDavid Howells /* field 'status' - VCR and set-top box */ 1406607ca46eSDavid Howells #define V4L2_IN_ST_MACROVISION 0x01000000 /* Macrovision detected */ 1407607ca46eSDavid Howells #define V4L2_IN_ST_NO_ACCESS 0x02000000 /* Conditional access denied */ 1408607ca46eSDavid Howells #define V4L2_IN_ST_VTR 0x04000000 /* VTR time constant */ 1409607ca46eSDavid Howells 1410607ca46eSDavid Howells /* capabilities flags */ 1411607ca46eSDavid Howells #define V4L2_IN_CAP_DV_TIMINGS 0x00000002 /* Supports S_DV_TIMINGS */ 1412607ca46eSDavid Howells #define V4L2_IN_CAP_CUSTOM_TIMINGS V4L2_IN_CAP_DV_TIMINGS /* For compatibility */ 1413607ca46eSDavid Howells #define V4L2_IN_CAP_STD 0x00000004 /* Supports S_STD */ 14148af03459SSakari Ailus #define V4L2_IN_CAP_NATIVE_SIZE 0x00000008 /* Supports setting native size */ 1415607ca46eSDavid Howells 1416607ca46eSDavid Howells /* 1417607ca46eSDavid Howells * V I D E O O U T P U T S 1418607ca46eSDavid Howells */ 1419607ca46eSDavid Howells struct v4l2_output { 1420607ca46eSDavid Howells __u32 index; /* Which output */ 1421607ca46eSDavid Howells __u8 name[32]; /* Label */ 1422607ca46eSDavid Howells __u32 type; /* Type of output */ 1423607ca46eSDavid Howells __u32 audioset; /* Associated audios (bitfield) */ 1424607ca46eSDavid Howells __u32 modulator; /* Associated modulator */ 1425607ca46eSDavid Howells v4l2_std_id std; 1426607ca46eSDavid Howells __u32 capabilities; 1427607ca46eSDavid Howells __u32 reserved[3]; 1428607ca46eSDavid Howells }; 1429607ca46eSDavid Howells /* Values for the 'type' field */ 1430607ca46eSDavid Howells #define V4L2_OUTPUT_TYPE_MODULATOR 1 1431607ca46eSDavid Howells #define V4L2_OUTPUT_TYPE_ANALOG 2 1432607ca46eSDavid Howells #define V4L2_OUTPUT_TYPE_ANALOGVGAOVERLAY 3 1433607ca46eSDavid Howells 1434607ca46eSDavid Howells /* capabilities flags */ 1435607ca46eSDavid Howells #define V4L2_OUT_CAP_DV_TIMINGS 0x00000002 /* Supports S_DV_TIMINGS */ 1436607ca46eSDavid Howells #define V4L2_OUT_CAP_CUSTOM_TIMINGS V4L2_OUT_CAP_DV_TIMINGS /* For compatibility */ 1437607ca46eSDavid Howells #define V4L2_OUT_CAP_STD 0x00000004 /* Supports S_STD */ 14388af03459SSakari Ailus #define V4L2_OUT_CAP_NATIVE_SIZE 0x00000008 /* Supports setting native size */ 1439607ca46eSDavid Howells 1440607ca46eSDavid Howells /* 1441607ca46eSDavid Howells * C O N T R O L S 1442607ca46eSDavid Howells */ 1443607ca46eSDavid Howells struct v4l2_control { 1444607ca46eSDavid Howells __u32 id; 1445607ca46eSDavid Howells __s32 value; 1446607ca46eSDavid Howells }; 1447607ca46eSDavid Howells 1448607ca46eSDavid Howells struct v4l2_ext_control { 1449607ca46eSDavid Howells __u32 id; 1450607ca46eSDavid Howells __u32 size; 1451607ca46eSDavid Howells __u32 reserved2[1]; 1452607ca46eSDavid Howells union { 1453607ca46eSDavid Howells __s32 value; 1454607ca46eSDavid Howells __s64 value64; 1455eadf9e26SHans Verkuil char __user *string; 1456eadf9e26SHans Verkuil __u8 __user *p_u8; 1457eadf9e26SHans Verkuil __u16 __user *p_u16; 1458eadf9e26SHans Verkuil __u32 __user *p_u32; 1459eadf9e26SHans Verkuil void __user *ptr; 1460607ca46eSDavid Howells }; 1461607ca46eSDavid Howells } __attribute__ ((packed)); 1462607ca46eSDavid Howells 1463607ca46eSDavid Howells struct v4l2_ext_controls { 1464607ca46eSDavid Howells __u32 ctrl_class; 1465607ca46eSDavid Howells __u32 count; 1466607ca46eSDavid Howells __u32 error_idx; 1467607ca46eSDavid Howells __u32 reserved[2]; 1468607ca46eSDavid Howells struct v4l2_ext_control *controls; 1469607ca46eSDavid Howells }; 1470607ca46eSDavid Howells 1471607ca46eSDavid Howells #define V4L2_CTRL_ID_MASK (0x0fffffff) 1472607ca46eSDavid Howells #define V4L2_CTRL_ID2CLASS(id) ((id) & 0x0fff0000UL) 1473607ca46eSDavid Howells #define V4L2_CTRL_DRIVER_PRIV(id) (((id) & 0xffff) >= 0x1000) 14745082c241SHans Verkuil #define V4L2_CTRL_MAX_DIMS (4) 1475607ca46eSDavid Howells 1476607ca46eSDavid Howells enum v4l2_ctrl_type { 1477607ca46eSDavid Howells V4L2_CTRL_TYPE_INTEGER = 1, 1478607ca46eSDavid Howells V4L2_CTRL_TYPE_BOOLEAN = 2, 1479607ca46eSDavid Howells V4L2_CTRL_TYPE_MENU = 3, 1480607ca46eSDavid Howells V4L2_CTRL_TYPE_BUTTON = 4, 1481607ca46eSDavid Howells V4L2_CTRL_TYPE_INTEGER64 = 5, 1482607ca46eSDavid Howells V4L2_CTRL_TYPE_CTRL_CLASS = 6, 1483607ca46eSDavid Howells V4L2_CTRL_TYPE_STRING = 7, 1484607ca46eSDavid Howells V4L2_CTRL_TYPE_BITMASK = 8, 1485607ca46eSDavid Howells V4L2_CTRL_TYPE_INTEGER_MENU = 9, 14867e6a6821SHans Verkuil 14877e6a6821SHans Verkuil /* Compound types are >= 0x0100 */ 14887e6a6821SHans Verkuil V4L2_CTRL_COMPOUND_TYPES = 0x0100, 1489dda4a4d5SHans Verkuil V4L2_CTRL_TYPE_U8 = 0x0100, 1490dda4a4d5SHans Verkuil V4L2_CTRL_TYPE_U16 = 0x0101, 1491811c5081SHans Verkuil V4L2_CTRL_TYPE_U32 = 0x0102, 1492607ca46eSDavid Howells }; 1493607ca46eSDavid Howells 1494607ca46eSDavid Howells /* Used in the VIDIOC_QUERYCTRL ioctl for querying controls */ 1495607ca46eSDavid Howells struct v4l2_queryctrl { 1496607ca46eSDavid Howells __u32 id; 1497607ca46eSDavid Howells __u32 type; /* enum v4l2_ctrl_type */ 1498607ca46eSDavid Howells __u8 name[32]; /* Whatever */ 1499607ca46eSDavid Howells __s32 minimum; /* Note signedness */ 1500607ca46eSDavid Howells __s32 maximum; 1501607ca46eSDavid Howells __s32 step; 1502607ca46eSDavid Howells __s32 default_value; 1503607ca46eSDavid Howells __u32 flags; 1504607ca46eSDavid Howells __u32 reserved[2]; 1505607ca46eSDavid Howells }; 1506607ca46eSDavid Howells 15075082c241SHans Verkuil /* Used in the VIDIOC_QUERY_EXT_CTRL ioctl for querying extended controls */ 15085082c241SHans Verkuil struct v4l2_query_ext_ctrl { 15095082c241SHans Verkuil __u32 id; 15105082c241SHans Verkuil __u32 type; 15115082c241SHans Verkuil char name[32]; 15125082c241SHans Verkuil __s64 minimum; 15135082c241SHans Verkuil __s64 maximum; 15145082c241SHans Verkuil __u64 step; 15155082c241SHans Verkuil __s64 default_value; 15165082c241SHans Verkuil __u32 flags; 15175082c241SHans Verkuil __u32 elem_size; 15185082c241SHans Verkuil __u32 elems; 15195082c241SHans Verkuil __u32 nr_of_dims; 15205082c241SHans Verkuil __u32 dims[V4L2_CTRL_MAX_DIMS]; 15215082c241SHans Verkuil __u32 reserved[32]; 15225082c241SHans Verkuil }; 15235082c241SHans Verkuil 1524607ca46eSDavid Howells /* Used in the VIDIOC_QUERYMENU ioctl for querying menu items */ 1525607ca46eSDavid Howells struct v4l2_querymenu { 1526607ca46eSDavid Howells __u32 id; 1527607ca46eSDavid Howells __u32 index; 1528607ca46eSDavid Howells union { 1529607ca46eSDavid Howells __u8 name[32]; /* Whatever */ 1530607ca46eSDavid Howells __s64 value; 1531607ca46eSDavid Howells }; 1532607ca46eSDavid Howells __u32 reserved; 1533607ca46eSDavid Howells } __attribute__ ((packed)); 1534607ca46eSDavid Howells 1535607ca46eSDavid Howells /* Control flags */ 1536607ca46eSDavid Howells #define V4L2_CTRL_FLAG_DISABLED 0x0001 1537607ca46eSDavid Howells #define V4L2_CTRL_FLAG_GRABBED 0x0002 1538607ca46eSDavid Howells #define V4L2_CTRL_FLAG_READ_ONLY 0x0004 1539607ca46eSDavid Howells #define V4L2_CTRL_FLAG_UPDATE 0x0008 1540607ca46eSDavid Howells #define V4L2_CTRL_FLAG_INACTIVE 0x0010 1541607ca46eSDavid Howells #define V4L2_CTRL_FLAG_SLIDER 0x0020 1542607ca46eSDavid Howells #define V4L2_CTRL_FLAG_WRITE_ONLY 0x0040 1543607ca46eSDavid Howells #define V4L2_CTRL_FLAG_VOLATILE 0x0080 15447e6a6821SHans Verkuil #define V4L2_CTRL_FLAG_HAS_PAYLOAD 0x0100 1545b6e5b8f1SRicardo Ribalda #define V4L2_CTRL_FLAG_EXECUTE_ON_WRITE 0x0200 1546607ca46eSDavid Howells 15477e6a6821SHans Verkuil /* Query flags, to be ORed with the control ID */ 1548607ca46eSDavid Howells #define V4L2_CTRL_FLAG_NEXT_CTRL 0x80000000 15497e6a6821SHans Verkuil #define V4L2_CTRL_FLAG_NEXT_COMPOUND 0x40000000 1550607ca46eSDavid Howells 1551607ca46eSDavid Howells /* User-class control IDs defined by V4L2 */ 1552607ca46eSDavid Howells #define V4L2_CID_MAX_CTRLS 1024 1553607ca46eSDavid Howells /* IDs reserved for driver specific controls */ 1554607ca46eSDavid Howells #define V4L2_CID_PRIVATE_BASE 0x08000000 1555607ca46eSDavid Howells 1556607ca46eSDavid Howells 1557607ca46eSDavid Howells /* 1558607ca46eSDavid Howells * T U N I N G 1559607ca46eSDavid Howells */ 1560607ca46eSDavid Howells struct v4l2_tuner { 1561607ca46eSDavid Howells __u32 index; 1562607ca46eSDavid Howells __u8 name[32]; 1563607ca46eSDavid Howells __u32 type; /* enum v4l2_tuner_type */ 1564607ca46eSDavid Howells __u32 capability; 1565607ca46eSDavid Howells __u32 rangelow; 1566607ca46eSDavid Howells __u32 rangehigh; 1567607ca46eSDavid Howells __u32 rxsubchans; 1568607ca46eSDavid Howells __u32 audmode; 1569607ca46eSDavid Howells __s32 signal; 1570607ca46eSDavid Howells __s32 afc; 1571607ca46eSDavid Howells __u32 reserved[4]; 1572607ca46eSDavid Howells }; 1573607ca46eSDavid Howells 1574607ca46eSDavid Howells struct v4l2_modulator { 1575607ca46eSDavid Howells __u32 index; 1576607ca46eSDavid Howells __u8 name[32]; 1577607ca46eSDavid Howells __u32 capability; 1578607ca46eSDavid Howells __u32 rangelow; 1579607ca46eSDavid Howells __u32 rangehigh; 1580607ca46eSDavid Howells __u32 txsubchans; 1581607ca46eSDavid Howells __u32 reserved[4]; 1582607ca46eSDavid Howells }; 1583607ca46eSDavid Howells 1584607ca46eSDavid Howells /* Flags for the 'capability' field */ 1585607ca46eSDavid Howells #define V4L2_TUNER_CAP_LOW 0x0001 1586607ca46eSDavid Howells #define V4L2_TUNER_CAP_NORM 0x0002 1587607ca46eSDavid Howells #define V4L2_TUNER_CAP_HWSEEK_BOUNDED 0x0004 1588607ca46eSDavid Howells #define V4L2_TUNER_CAP_HWSEEK_WRAP 0x0008 1589607ca46eSDavid Howells #define V4L2_TUNER_CAP_STEREO 0x0010 1590607ca46eSDavid Howells #define V4L2_TUNER_CAP_LANG2 0x0020 1591607ca46eSDavid Howells #define V4L2_TUNER_CAP_SAP 0x0020 1592607ca46eSDavid Howells #define V4L2_TUNER_CAP_LANG1 0x0040 1593607ca46eSDavid Howells #define V4L2_TUNER_CAP_RDS 0x0080 1594607ca46eSDavid Howells #define V4L2_TUNER_CAP_RDS_BLOCK_IO 0x0100 1595607ca46eSDavid Howells #define V4L2_TUNER_CAP_RDS_CONTROLS 0x0200 1596607ca46eSDavid Howells #define V4L2_TUNER_CAP_FREQ_BANDS 0x0400 1597607ca46eSDavid Howells #define V4L2_TUNER_CAP_HWSEEK_PROG_LIM 0x0800 159867f9a117SAntti Palosaari #define V4L2_TUNER_CAP_1HZ 0x1000 1599607ca46eSDavid Howells 1600607ca46eSDavid Howells /* Flags for the 'rxsubchans' field */ 1601607ca46eSDavid Howells #define V4L2_TUNER_SUB_MONO 0x0001 1602607ca46eSDavid Howells #define V4L2_TUNER_SUB_STEREO 0x0002 1603607ca46eSDavid Howells #define V4L2_TUNER_SUB_LANG2 0x0004 1604607ca46eSDavid Howells #define V4L2_TUNER_SUB_SAP 0x0004 1605607ca46eSDavid Howells #define V4L2_TUNER_SUB_LANG1 0x0008 1606607ca46eSDavid Howells #define V4L2_TUNER_SUB_RDS 0x0010 1607607ca46eSDavid Howells 1608607ca46eSDavid Howells /* Values for the 'audmode' field */ 1609607ca46eSDavid Howells #define V4L2_TUNER_MODE_MONO 0x0000 1610607ca46eSDavid Howells #define V4L2_TUNER_MODE_STEREO 0x0001 1611607ca46eSDavid Howells #define V4L2_TUNER_MODE_LANG2 0x0002 1612607ca46eSDavid Howells #define V4L2_TUNER_MODE_SAP 0x0002 1613607ca46eSDavid Howells #define V4L2_TUNER_MODE_LANG1 0x0003 1614607ca46eSDavid Howells #define V4L2_TUNER_MODE_LANG1_LANG2 0x0004 1615607ca46eSDavid Howells 1616607ca46eSDavid Howells struct v4l2_frequency { 1617607ca46eSDavid Howells __u32 tuner; 1618607ca46eSDavid Howells __u32 type; /* enum v4l2_tuner_type */ 1619607ca46eSDavid Howells __u32 frequency; 1620607ca46eSDavid Howells __u32 reserved[8]; 1621607ca46eSDavid Howells }; 1622607ca46eSDavid Howells 1623607ca46eSDavid Howells #define V4L2_BAND_MODULATION_VSB (1 << 1) 1624607ca46eSDavid Howells #define V4L2_BAND_MODULATION_FM (1 << 2) 1625607ca46eSDavid Howells #define V4L2_BAND_MODULATION_AM (1 << 3) 1626607ca46eSDavid Howells 1627607ca46eSDavid Howells struct v4l2_frequency_band { 1628607ca46eSDavid Howells __u32 tuner; 1629607ca46eSDavid Howells __u32 type; /* enum v4l2_tuner_type */ 1630607ca46eSDavid Howells __u32 index; 1631607ca46eSDavid Howells __u32 capability; 1632607ca46eSDavid Howells __u32 rangelow; 1633607ca46eSDavid Howells __u32 rangehigh; 1634607ca46eSDavid Howells __u32 modulation; 1635607ca46eSDavid Howells __u32 reserved[9]; 1636607ca46eSDavid Howells }; 1637607ca46eSDavid Howells 1638607ca46eSDavid Howells struct v4l2_hw_freq_seek { 1639607ca46eSDavid Howells __u32 tuner; 1640607ca46eSDavid Howells __u32 type; /* enum v4l2_tuner_type */ 1641607ca46eSDavid Howells __u32 seek_upward; 1642607ca46eSDavid Howells __u32 wrap_around; 1643607ca46eSDavid Howells __u32 spacing; 1644607ca46eSDavid Howells __u32 rangelow; 1645607ca46eSDavid Howells __u32 rangehigh; 1646607ca46eSDavid Howells __u32 reserved[5]; 1647607ca46eSDavid Howells }; 1648607ca46eSDavid Howells 1649607ca46eSDavid Howells /* 1650607ca46eSDavid Howells * R D S 1651607ca46eSDavid Howells */ 1652607ca46eSDavid Howells 1653607ca46eSDavid Howells struct v4l2_rds_data { 1654607ca46eSDavid Howells __u8 lsb; 1655607ca46eSDavid Howells __u8 msb; 1656607ca46eSDavid Howells __u8 block; 1657607ca46eSDavid Howells } __attribute__ ((packed)); 1658607ca46eSDavid Howells 1659607ca46eSDavid Howells #define V4L2_RDS_BLOCK_MSK 0x7 1660607ca46eSDavid Howells #define V4L2_RDS_BLOCK_A 0 1661607ca46eSDavid Howells #define V4L2_RDS_BLOCK_B 1 1662607ca46eSDavid Howells #define V4L2_RDS_BLOCK_C 2 1663607ca46eSDavid Howells #define V4L2_RDS_BLOCK_D 3 1664607ca46eSDavid Howells #define V4L2_RDS_BLOCK_C_ALT 4 1665607ca46eSDavid Howells #define V4L2_RDS_BLOCK_INVALID 7 1666607ca46eSDavid Howells 1667607ca46eSDavid Howells #define V4L2_RDS_BLOCK_CORRECTED 0x40 1668607ca46eSDavid Howells #define V4L2_RDS_BLOCK_ERROR 0x80 1669607ca46eSDavid Howells 1670607ca46eSDavid Howells /* 1671607ca46eSDavid Howells * A U D I O 1672607ca46eSDavid Howells */ 1673607ca46eSDavid Howells struct v4l2_audio { 1674607ca46eSDavid Howells __u32 index; 1675607ca46eSDavid Howells __u8 name[32]; 1676607ca46eSDavid Howells __u32 capability; 1677607ca46eSDavid Howells __u32 mode; 1678607ca46eSDavid Howells __u32 reserved[2]; 1679607ca46eSDavid Howells }; 1680607ca46eSDavid Howells 1681607ca46eSDavid Howells /* Flags for the 'capability' field */ 1682607ca46eSDavid Howells #define V4L2_AUDCAP_STEREO 0x00001 1683607ca46eSDavid Howells #define V4L2_AUDCAP_AVL 0x00002 1684607ca46eSDavid Howells 1685607ca46eSDavid Howells /* Flags for the 'mode' field */ 1686607ca46eSDavid Howells #define V4L2_AUDMODE_AVL 0x00001 1687607ca46eSDavid Howells 1688607ca46eSDavid Howells struct v4l2_audioout { 1689607ca46eSDavid Howells __u32 index; 1690607ca46eSDavid Howells __u8 name[32]; 1691607ca46eSDavid Howells __u32 capability; 1692607ca46eSDavid Howells __u32 mode; 1693607ca46eSDavid Howells __u32 reserved[2]; 1694607ca46eSDavid Howells }; 1695607ca46eSDavid Howells 1696607ca46eSDavid Howells /* 1697607ca46eSDavid Howells * M P E G S E R V I C E S 1698607ca46eSDavid Howells * 1699607ca46eSDavid Howells * NOTE: EXPERIMENTAL API 1700607ca46eSDavid Howells */ 1701607ca46eSDavid Howells #if 1 1702607ca46eSDavid Howells #define V4L2_ENC_IDX_FRAME_I (0) 1703607ca46eSDavid Howells #define V4L2_ENC_IDX_FRAME_P (1) 1704607ca46eSDavid Howells #define V4L2_ENC_IDX_FRAME_B (2) 1705607ca46eSDavid Howells #define V4L2_ENC_IDX_FRAME_MASK (0xf) 1706607ca46eSDavid Howells 1707607ca46eSDavid Howells struct v4l2_enc_idx_entry { 1708607ca46eSDavid Howells __u64 offset; 1709607ca46eSDavid Howells __u64 pts; 1710607ca46eSDavid Howells __u32 length; 1711607ca46eSDavid Howells __u32 flags; 1712607ca46eSDavid Howells __u32 reserved[2]; 1713607ca46eSDavid Howells }; 1714607ca46eSDavid Howells 1715607ca46eSDavid Howells #define V4L2_ENC_IDX_ENTRIES (64) 1716607ca46eSDavid Howells struct v4l2_enc_idx { 1717607ca46eSDavid Howells __u32 entries; 1718607ca46eSDavid Howells __u32 entries_cap; 1719607ca46eSDavid Howells __u32 reserved[4]; 1720607ca46eSDavid Howells struct v4l2_enc_idx_entry entry[V4L2_ENC_IDX_ENTRIES]; 1721607ca46eSDavid Howells }; 1722607ca46eSDavid Howells 1723607ca46eSDavid Howells 1724607ca46eSDavid Howells #define V4L2_ENC_CMD_START (0) 1725607ca46eSDavid Howells #define V4L2_ENC_CMD_STOP (1) 1726607ca46eSDavid Howells #define V4L2_ENC_CMD_PAUSE (2) 1727607ca46eSDavid Howells #define V4L2_ENC_CMD_RESUME (3) 1728607ca46eSDavid Howells 1729607ca46eSDavid Howells /* Flags for V4L2_ENC_CMD_STOP */ 1730607ca46eSDavid Howells #define V4L2_ENC_CMD_STOP_AT_GOP_END (1 << 0) 1731607ca46eSDavid Howells 1732607ca46eSDavid Howells struct v4l2_encoder_cmd { 1733607ca46eSDavid Howells __u32 cmd; 1734607ca46eSDavid Howells __u32 flags; 1735607ca46eSDavid Howells union { 1736607ca46eSDavid Howells struct { 1737607ca46eSDavid Howells __u32 data[8]; 1738607ca46eSDavid Howells } raw; 1739607ca46eSDavid Howells }; 1740607ca46eSDavid Howells }; 1741607ca46eSDavid Howells 1742607ca46eSDavid Howells /* Decoder commands */ 1743607ca46eSDavid Howells #define V4L2_DEC_CMD_START (0) 1744607ca46eSDavid Howells #define V4L2_DEC_CMD_STOP (1) 1745607ca46eSDavid Howells #define V4L2_DEC_CMD_PAUSE (2) 1746607ca46eSDavid Howells #define V4L2_DEC_CMD_RESUME (3) 1747607ca46eSDavid Howells 1748607ca46eSDavid Howells /* Flags for V4L2_DEC_CMD_START */ 1749607ca46eSDavid Howells #define V4L2_DEC_CMD_START_MUTE_AUDIO (1 << 0) 1750607ca46eSDavid Howells 1751607ca46eSDavid Howells /* Flags for V4L2_DEC_CMD_PAUSE */ 1752607ca46eSDavid Howells #define V4L2_DEC_CMD_PAUSE_TO_BLACK (1 << 0) 1753607ca46eSDavid Howells 1754607ca46eSDavid Howells /* Flags for V4L2_DEC_CMD_STOP */ 1755607ca46eSDavid Howells #define V4L2_DEC_CMD_STOP_TO_BLACK (1 << 0) 1756607ca46eSDavid Howells #define V4L2_DEC_CMD_STOP_IMMEDIATELY (1 << 1) 1757607ca46eSDavid Howells 1758607ca46eSDavid Howells /* Play format requirements (returned by the driver): */ 1759607ca46eSDavid Howells 1760607ca46eSDavid Howells /* The decoder has no special format requirements */ 1761607ca46eSDavid Howells #define V4L2_DEC_START_FMT_NONE (0) 1762607ca46eSDavid Howells /* The decoder requires full GOPs */ 1763607ca46eSDavid Howells #define V4L2_DEC_START_FMT_GOP (1) 1764607ca46eSDavid Howells 1765607ca46eSDavid Howells /* The structure must be zeroed before use by the application 1766607ca46eSDavid Howells This ensures it can be extended safely in the future. */ 1767607ca46eSDavid Howells struct v4l2_decoder_cmd { 1768607ca46eSDavid Howells __u32 cmd; 1769607ca46eSDavid Howells __u32 flags; 1770607ca46eSDavid Howells union { 1771607ca46eSDavid Howells struct { 1772607ca46eSDavid Howells __u64 pts; 1773607ca46eSDavid Howells } stop; 1774607ca46eSDavid Howells 1775607ca46eSDavid Howells struct { 1776607ca46eSDavid Howells /* 0 or 1000 specifies normal speed, 1777607ca46eSDavid Howells 1 specifies forward single stepping, 1778607ca46eSDavid Howells -1 specifies backward single stepping, 1779607ca46eSDavid Howells >1: playback at speed/1000 of the normal speed, 1780607ca46eSDavid Howells <-1: reverse playback at (-speed/1000) of the normal speed. */ 1781607ca46eSDavid Howells __s32 speed; 1782607ca46eSDavid Howells __u32 format; 1783607ca46eSDavid Howells } start; 1784607ca46eSDavid Howells 1785607ca46eSDavid Howells struct { 1786607ca46eSDavid Howells __u32 data[16]; 1787607ca46eSDavid Howells } raw; 1788607ca46eSDavid Howells }; 1789607ca46eSDavid Howells }; 1790607ca46eSDavid Howells #endif 1791607ca46eSDavid Howells 1792607ca46eSDavid Howells 1793607ca46eSDavid Howells /* 1794607ca46eSDavid Howells * D A T A S E R V I C E S ( V B I ) 1795607ca46eSDavid Howells * 1796607ca46eSDavid Howells * Data services API by Michael Schimek 1797607ca46eSDavid Howells */ 1798607ca46eSDavid Howells 1799607ca46eSDavid Howells /* Raw VBI */ 1800607ca46eSDavid Howells struct v4l2_vbi_format { 1801607ca46eSDavid Howells __u32 sampling_rate; /* in 1 Hz */ 1802607ca46eSDavid Howells __u32 offset; 1803607ca46eSDavid Howells __u32 samples_per_line; 1804607ca46eSDavid Howells __u32 sample_format; /* V4L2_PIX_FMT_* */ 1805607ca46eSDavid Howells __s32 start[2]; 1806607ca46eSDavid Howells __u32 count[2]; 1807607ca46eSDavid Howells __u32 flags; /* V4L2_VBI_* */ 1808607ca46eSDavid Howells __u32 reserved[2]; /* must be zero */ 1809607ca46eSDavid Howells }; 1810607ca46eSDavid Howells 1811607ca46eSDavid Howells /* VBI flags */ 1812607ca46eSDavid Howells #define V4L2_VBI_UNSYNC (1 << 0) 1813607ca46eSDavid Howells #define V4L2_VBI_INTERLACED (1 << 1) 1814607ca46eSDavid Howells 1815273886b4SHans Verkuil /* ITU-R start lines for each field */ 1816273886b4SHans Verkuil #define V4L2_VBI_ITU_525_F1_START (1) 1817273886b4SHans Verkuil #define V4L2_VBI_ITU_525_F2_START (264) 1818273886b4SHans Verkuil #define V4L2_VBI_ITU_625_F1_START (1) 1819273886b4SHans Verkuil #define V4L2_VBI_ITU_625_F2_START (314) 1820273886b4SHans Verkuil 1821607ca46eSDavid Howells /* Sliced VBI 1822607ca46eSDavid Howells * 1823607ca46eSDavid Howells * This implements is a proposal V4L2 API to allow SLICED VBI 1824607ca46eSDavid Howells * required for some hardware encoders. It should change without 1825607ca46eSDavid Howells * notice in the definitive implementation. 1826607ca46eSDavid Howells */ 1827607ca46eSDavid Howells 1828607ca46eSDavid Howells struct v4l2_sliced_vbi_format { 1829607ca46eSDavid Howells __u16 service_set; 1830607ca46eSDavid Howells /* service_lines[0][...] specifies lines 0-23 (1-23 used) of the first field 1831607ca46eSDavid Howells service_lines[1][...] specifies lines 0-23 (1-23 used) of the second field 1832607ca46eSDavid Howells (equals frame lines 313-336 for 625 line video 1833607ca46eSDavid Howells standards, 263-286 for 525 line standards) */ 1834607ca46eSDavid Howells __u16 service_lines[2][24]; 1835607ca46eSDavid Howells __u32 io_size; 1836607ca46eSDavid Howells __u32 reserved[2]; /* must be zero */ 1837607ca46eSDavid Howells }; 1838607ca46eSDavid Howells 1839607ca46eSDavid Howells /* Teletext World System Teletext 1840607ca46eSDavid Howells (WST), defined on ITU-R BT.653-2 */ 1841607ca46eSDavid Howells #define V4L2_SLICED_TELETEXT_B (0x0001) 1842607ca46eSDavid Howells /* Video Program System, defined on ETS 300 231*/ 1843607ca46eSDavid Howells #define V4L2_SLICED_VPS (0x0400) 1844607ca46eSDavid Howells /* Closed Caption, defined on EIA-608 */ 1845607ca46eSDavid Howells #define V4L2_SLICED_CAPTION_525 (0x1000) 1846607ca46eSDavid Howells /* Wide Screen System, defined on ITU-R BT1119.1 */ 1847607ca46eSDavid Howells #define V4L2_SLICED_WSS_625 (0x4000) 1848607ca46eSDavid Howells 1849607ca46eSDavid Howells #define V4L2_SLICED_VBI_525 (V4L2_SLICED_CAPTION_525) 1850607ca46eSDavid Howells #define V4L2_SLICED_VBI_625 (V4L2_SLICED_TELETEXT_B | V4L2_SLICED_VPS | V4L2_SLICED_WSS_625) 1851607ca46eSDavid Howells 1852607ca46eSDavid Howells struct v4l2_sliced_vbi_cap { 1853607ca46eSDavid Howells __u16 service_set; 1854607ca46eSDavid Howells /* service_lines[0][...] specifies lines 0-23 (1-23 used) of the first field 1855607ca46eSDavid Howells service_lines[1][...] specifies lines 0-23 (1-23 used) of the second field 1856607ca46eSDavid Howells (equals frame lines 313-336 for 625 line video 1857607ca46eSDavid Howells standards, 263-286 for 525 line standards) */ 1858607ca46eSDavid Howells __u16 service_lines[2][24]; 1859607ca46eSDavid Howells __u32 type; /* enum v4l2_buf_type */ 1860607ca46eSDavid Howells __u32 reserved[3]; /* must be 0 */ 1861607ca46eSDavid Howells }; 1862607ca46eSDavid Howells 1863607ca46eSDavid Howells struct v4l2_sliced_vbi_data { 1864607ca46eSDavid Howells __u32 id; 1865607ca46eSDavid Howells __u32 field; /* 0: first field, 1: second field */ 1866607ca46eSDavid Howells __u32 line; /* 1-23 */ 1867607ca46eSDavid Howells __u32 reserved; /* must be 0 */ 1868607ca46eSDavid Howells __u8 data[48]; 1869607ca46eSDavid Howells }; 1870607ca46eSDavid Howells 1871607ca46eSDavid Howells /* 1872607ca46eSDavid Howells * Sliced VBI data inserted into MPEG Streams 1873607ca46eSDavid Howells */ 1874607ca46eSDavid Howells 1875607ca46eSDavid Howells /* 1876607ca46eSDavid Howells * V4L2_MPEG_STREAM_VBI_FMT_IVTV: 1877607ca46eSDavid Howells * 1878607ca46eSDavid Howells * Structure of payload contained in an MPEG 2 Private Stream 1 PES Packet in an 1879607ca46eSDavid Howells * MPEG-2 Program Pack that contains V4L2_MPEG_STREAM_VBI_FMT_IVTV Sliced VBI 1880607ca46eSDavid Howells * data 1881607ca46eSDavid Howells * 1882607ca46eSDavid Howells * Note, the MPEG-2 Program Pack and Private Stream 1 PES packet header 1883607ca46eSDavid Howells * definitions are not included here. See the MPEG-2 specifications for details 1884607ca46eSDavid Howells * on these headers. 1885607ca46eSDavid Howells */ 1886607ca46eSDavid Howells 1887607ca46eSDavid Howells /* Line type IDs */ 1888607ca46eSDavid Howells #define V4L2_MPEG_VBI_IVTV_TELETEXT_B (1) 1889607ca46eSDavid Howells #define V4L2_MPEG_VBI_IVTV_CAPTION_525 (4) 1890607ca46eSDavid Howells #define V4L2_MPEG_VBI_IVTV_WSS_625 (5) 1891607ca46eSDavid Howells #define V4L2_MPEG_VBI_IVTV_VPS (7) 1892607ca46eSDavid Howells 1893607ca46eSDavid Howells struct v4l2_mpeg_vbi_itv0_line { 1894607ca46eSDavid Howells __u8 id; /* One of V4L2_MPEG_VBI_IVTV_* above */ 1895607ca46eSDavid Howells __u8 data[42]; /* Sliced VBI data for the line */ 1896607ca46eSDavid Howells } __attribute__ ((packed)); 1897607ca46eSDavid Howells 1898607ca46eSDavid Howells struct v4l2_mpeg_vbi_itv0 { 1899607ca46eSDavid Howells __le32 linemask[2]; /* Bitmasks of VBI service lines present */ 1900607ca46eSDavid Howells struct v4l2_mpeg_vbi_itv0_line line[35]; 1901607ca46eSDavid Howells } __attribute__ ((packed)); 1902607ca46eSDavid Howells 1903607ca46eSDavid Howells struct v4l2_mpeg_vbi_ITV0 { 1904607ca46eSDavid Howells struct v4l2_mpeg_vbi_itv0_line line[36]; 1905607ca46eSDavid Howells } __attribute__ ((packed)); 1906607ca46eSDavid Howells 1907607ca46eSDavid Howells #define V4L2_MPEG_VBI_IVTV_MAGIC0 "itv0" 1908607ca46eSDavid Howells #define V4L2_MPEG_VBI_IVTV_MAGIC1 "ITV0" 1909607ca46eSDavid Howells 1910607ca46eSDavid Howells struct v4l2_mpeg_vbi_fmt_ivtv { 1911607ca46eSDavid Howells __u8 magic[4]; 1912607ca46eSDavid Howells union { 1913607ca46eSDavid Howells struct v4l2_mpeg_vbi_itv0 itv0; 1914607ca46eSDavid Howells struct v4l2_mpeg_vbi_ITV0 ITV0; 1915607ca46eSDavid Howells }; 1916607ca46eSDavid Howells } __attribute__ ((packed)); 1917607ca46eSDavid Howells 1918607ca46eSDavid Howells /* 1919607ca46eSDavid Howells * A G G R E G A T E S T R U C T U R E S 1920607ca46eSDavid Howells */ 1921607ca46eSDavid Howells 1922607ca46eSDavid Howells /** 1923607ca46eSDavid Howells * struct v4l2_plane_pix_format - additional, per-plane format definition 1924607ca46eSDavid Howells * @sizeimage: maximum size in bytes required for data, for which 1925607ca46eSDavid Howells * this plane will be used 1926607ca46eSDavid Howells * @bytesperline: distance in bytes between the leftmost pixels in two 1927607ca46eSDavid Howells * adjacent lines 1928607ca46eSDavid Howells */ 1929607ca46eSDavid Howells struct v4l2_plane_pix_format { 1930607ca46eSDavid Howells __u32 sizeimage; 1931cc7d2dfbSHans Verkuil __u32 bytesperline; 1932cc7d2dfbSHans Verkuil __u16 reserved[6]; 1933607ca46eSDavid Howells } __attribute__ ((packed)); 1934607ca46eSDavid Howells 1935607ca46eSDavid Howells /** 1936607ca46eSDavid Howells * struct v4l2_pix_format_mplane - multiplanar format definition 1937607ca46eSDavid Howells * @width: image width in pixels 1938607ca46eSDavid Howells * @height: image height in pixels 1939607ca46eSDavid Howells * @pixelformat: little endian four character code (fourcc) 1940607ca46eSDavid Howells * @field: enum v4l2_field; field order (for interlaced video) 1941607ca46eSDavid Howells * @colorspace: enum v4l2_colorspace; supplemental to pixelformat 1942607ca46eSDavid Howells * @plane_fmt: per-plane information 1943607ca46eSDavid Howells * @num_planes: number of planes for this format 1944c96fd46aSLaurent Pinchart * @flags: format flags (V4L2_PIX_FMT_FLAG_*) 1945d5735d64SHans Verkuil * @ycbcr_enc: enum v4l2_ycbcr_encoding, Y'CbCr encoding 1946d5735d64SHans Verkuil * @quantization: enum v4l2_quantization, colorspace quantization 194774fdcb2eSHans Verkuil * @xfer_func: enum v4l2_xfer_func, colorspace transfer function 1948607ca46eSDavid Howells */ 1949607ca46eSDavid Howells struct v4l2_pix_format_mplane { 1950607ca46eSDavid Howells __u32 width; 1951607ca46eSDavid Howells __u32 height; 1952607ca46eSDavid Howells __u32 pixelformat; 1953607ca46eSDavid Howells __u32 field; 1954607ca46eSDavid Howells __u32 colorspace; 1955607ca46eSDavid Howells 1956607ca46eSDavid Howells struct v4l2_plane_pix_format plane_fmt[VIDEO_MAX_PLANES]; 1957607ca46eSDavid Howells __u8 num_planes; 1958c96fd46aSLaurent Pinchart __u8 flags; 1959d5735d64SHans Verkuil __u8 ycbcr_enc; 1960d5735d64SHans Verkuil __u8 quantization; 196174fdcb2eSHans Verkuil __u8 xfer_func; 196274fdcb2eSHans Verkuil __u8 reserved[7]; 1963607ca46eSDavid Howells } __attribute__ ((packed)); 1964607ca46eSDavid Howells 1965607ca46eSDavid Howells /** 196687185c95SAntti Palosaari * struct v4l2_sdr_format - SDR format definition 19676f3073b8SAntti Palosaari * @pixelformat: little endian four character code (fourcc) 1968aaa968b6SAntti Palosaari * @buffersize: maximum size in bytes required for data 19696f3073b8SAntti Palosaari */ 197087185c95SAntti Palosaari struct v4l2_sdr_format { 19716f3073b8SAntti Palosaari __u32 pixelformat; 1972aaa968b6SAntti Palosaari __u32 buffersize; 1973aaa968b6SAntti Palosaari __u8 reserved[24]; 19746f3073b8SAntti Palosaari } __attribute__ ((packed)); 19756f3073b8SAntti Palosaari 19766f3073b8SAntti Palosaari /** 1977607ca46eSDavid Howells * struct v4l2_format - stream data format 1978607ca46eSDavid Howells * @type: enum v4l2_buf_type; type of the data stream 1979607ca46eSDavid Howells * @pix: definition of an image format 1980607ca46eSDavid Howells * @pix_mp: definition of a multiplanar image format 1981607ca46eSDavid Howells * @win: definition of an overlaid image 1982607ca46eSDavid Howells * @vbi: raw VBI capture or output parameters 1983607ca46eSDavid Howells * @sliced: sliced VBI capture or output parameters 1984607ca46eSDavid Howells * @raw_data: placeholder for future extensions and custom formats 1985607ca46eSDavid Howells */ 1986607ca46eSDavid Howells struct v4l2_format { 1987607ca46eSDavid Howells __u32 type; 1988607ca46eSDavid Howells union { 1989607ca46eSDavid Howells struct v4l2_pix_format pix; /* V4L2_BUF_TYPE_VIDEO_CAPTURE */ 1990607ca46eSDavid Howells struct v4l2_pix_format_mplane pix_mp; /* V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE */ 1991607ca46eSDavid Howells struct v4l2_window win; /* V4L2_BUF_TYPE_VIDEO_OVERLAY */ 1992607ca46eSDavid Howells struct v4l2_vbi_format vbi; /* V4L2_BUF_TYPE_VBI_CAPTURE */ 1993607ca46eSDavid Howells struct v4l2_sliced_vbi_format sliced; /* V4L2_BUF_TYPE_SLICED_VBI_CAPTURE */ 199487185c95SAntti Palosaari struct v4l2_sdr_format sdr; /* V4L2_BUF_TYPE_SDR_CAPTURE */ 1995607ca46eSDavid Howells __u8 raw_data[200]; /* user-defined */ 1996607ca46eSDavid Howells } fmt; 1997607ca46eSDavid Howells }; 1998607ca46eSDavid Howells 1999607ca46eSDavid Howells /* Stream type-dependent parameters 2000607ca46eSDavid Howells */ 2001607ca46eSDavid Howells struct v4l2_streamparm { 2002607ca46eSDavid Howells __u32 type; /* enum v4l2_buf_type */ 2003607ca46eSDavid Howells union { 2004607ca46eSDavid Howells struct v4l2_captureparm capture; 2005607ca46eSDavid Howells struct v4l2_outputparm output; 2006607ca46eSDavid Howells __u8 raw_data[200]; /* user-defined */ 2007607ca46eSDavid Howells } parm; 2008607ca46eSDavid Howells }; 2009607ca46eSDavid Howells 2010607ca46eSDavid Howells /* 2011607ca46eSDavid Howells * E V E N T S 2012607ca46eSDavid Howells */ 2013607ca46eSDavid Howells 2014607ca46eSDavid Howells #define V4L2_EVENT_ALL 0 2015607ca46eSDavid Howells #define V4L2_EVENT_VSYNC 1 2016607ca46eSDavid Howells #define V4L2_EVENT_EOS 2 2017607ca46eSDavid Howells #define V4L2_EVENT_CTRL 3 2018607ca46eSDavid Howells #define V4L2_EVENT_FRAME_SYNC 4 20193cbe6e5bSArun Kumar K #define V4L2_EVENT_SOURCE_CHANGE 5 202078ea6113SHans Verkuil #define V4L2_EVENT_MOTION_DET 6 2021607ca46eSDavid Howells #define V4L2_EVENT_PRIVATE_START 0x08000000 2022607ca46eSDavid Howells 2023607ca46eSDavid Howells /* Payload for V4L2_EVENT_VSYNC */ 2024607ca46eSDavid Howells struct v4l2_event_vsync { 2025607ca46eSDavid Howells /* Can be V4L2_FIELD_ANY, _NONE, _TOP or _BOTTOM */ 2026607ca46eSDavid Howells __u8 field; 2027607ca46eSDavid Howells } __attribute__ ((packed)); 2028607ca46eSDavid Howells 2029607ca46eSDavid Howells /* Payload for V4L2_EVENT_CTRL */ 2030607ca46eSDavid Howells #define V4L2_EVENT_CTRL_CH_VALUE (1 << 0) 2031607ca46eSDavid Howells #define V4L2_EVENT_CTRL_CH_FLAGS (1 << 1) 20322ccbe779SSylwester Nawrocki #define V4L2_EVENT_CTRL_CH_RANGE (1 << 2) 2033607ca46eSDavid Howells 2034607ca46eSDavid Howells struct v4l2_event_ctrl { 2035607ca46eSDavid Howells __u32 changes; 2036607ca46eSDavid Howells __u32 type; 2037607ca46eSDavid Howells union { 2038607ca46eSDavid Howells __s32 value; 2039607ca46eSDavid Howells __s64 value64; 2040607ca46eSDavid Howells }; 2041607ca46eSDavid Howells __u32 flags; 2042607ca46eSDavid Howells __s32 minimum; 2043607ca46eSDavid Howells __s32 maximum; 2044607ca46eSDavid Howells __s32 step; 2045607ca46eSDavid Howells __s32 default_value; 2046607ca46eSDavid Howells }; 2047607ca46eSDavid Howells 2048607ca46eSDavid Howells struct v4l2_event_frame_sync { 2049607ca46eSDavid Howells __u32 frame_sequence; 2050607ca46eSDavid Howells }; 2051607ca46eSDavid Howells 20523cbe6e5bSArun Kumar K #define V4L2_EVENT_SRC_CH_RESOLUTION (1 << 0) 20533cbe6e5bSArun Kumar K 20543cbe6e5bSArun Kumar K struct v4l2_event_src_change { 20553cbe6e5bSArun Kumar K __u32 changes; 20563cbe6e5bSArun Kumar K }; 20573cbe6e5bSArun Kumar K 205878ea6113SHans Verkuil #define V4L2_EVENT_MD_FL_HAVE_FRAME_SEQ (1 << 0) 205978ea6113SHans Verkuil 206078ea6113SHans Verkuil /** 206178ea6113SHans Verkuil * struct v4l2_event_motion_det - motion detection event 206278ea6113SHans Verkuil * @flags: if V4L2_EVENT_MD_FL_HAVE_FRAME_SEQ is set, then the 206378ea6113SHans Verkuil * frame_sequence field is valid. 206478ea6113SHans Verkuil * @frame_sequence: the frame sequence number associated with this event. 206578ea6113SHans Verkuil * @region_mask: which regions detected motion. 206678ea6113SHans Verkuil */ 206778ea6113SHans Verkuil struct v4l2_event_motion_det { 206878ea6113SHans Verkuil __u32 flags; 206978ea6113SHans Verkuil __u32 frame_sequence; 207078ea6113SHans Verkuil __u32 region_mask; 207178ea6113SHans Verkuil }; 207278ea6113SHans Verkuil 2073607ca46eSDavid Howells struct v4l2_event { 2074607ca46eSDavid Howells __u32 type; 2075607ca46eSDavid Howells union { 2076607ca46eSDavid Howells struct v4l2_event_vsync vsync; 2077607ca46eSDavid Howells struct v4l2_event_ctrl ctrl; 2078607ca46eSDavid Howells struct v4l2_event_frame_sync frame_sync; 20793cbe6e5bSArun Kumar K struct v4l2_event_src_change src_change; 208078ea6113SHans Verkuil struct v4l2_event_motion_det motion_det; 2081607ca46eSDavid Howells __u8 data[64]; 2082607ca46eSDavid Howells } u; 2083607ca46eSDavid Howells __u32 pending; 2084607ca46eSDavid Howells __u32 sequence; 2085607ca46eSDavid Howells struct timespec timestamp; 2086607ca46eSDavid Howells __u32 id; 2087607ca46eSDavid Howells __u32 reserved[8]; 2088607ca46eSDavid Howells }; 2089607ca46eSDavid Howells 2090607ca46eSDavid Howells #define V4L2_EVENT_SUB_FL_SEND_INITIAL (1 << 0) 2091607ca46eSDavid Howells #define V4L2_EVENT_SUB_FL_ALLOW_FEEDBACK (1 << 1) 2092607ca46eSDavid Howells 2093607ca46eSDavid Howells struct v4l2_event_subscription { 2094607ca46eSDavid Howells __u32 type; 2095607ca46eSDavid Howells __u32 id; 2096607ca46eSDavid Howells __u32 flags; 2097607ca46eSDavid Howells __u32 reserved[5]; 2098607ca46eSDavid Howells }; 2099607ca46eSDavid Howells 2100607ca46eSDavid Howells /* 2101607ca46eSDavid Howells * A D V A N C E D D E B U G G I N G 2102607ca46eSDavid Howells * 2103607ca46eSDavid Howells * NOTE: EXPERIMENTAL API, NEVER RELY ON THIS IN APPLICATIONS! 2104607ca46eSDavid Howells * FOR DEBUGGING, TESTING AND INTERNAL USE ONLY! 2105607ca46eSDavid Howells */ 2106607ca46eSDavid Howells 2107607ca46eSDavid Howells /* VIDIOC_DBG_G_REGISTER and VIDIOC_DBG_S_REGISTER */ 2108607ca46eSDavid Howells 210979b0c640SHans Verkuil #define V4L2_CHIP_MATCH_BRIDGE 0 /* Match against chip ID on the bridge (0 for the bridge) */ 2110b71c9980SHans Verkuil #define V4L2_CHIP_MATCH_SUBDEV 4 /* Match against subdev index */ 2111b71c9980SHans Verkuil 2112b71c9980SHans Verkuil /* The following four defines are no longer in use */ 211379b0c640SHans Verkuil #define V4L2_CHIP_MATCH_HOST V4L2_CHIP_MATCH_BRIDGE 2114607ca46eSDavid Howells #define V4L2_CHIP_MATCH_I2C_DRIVER 1 /* Match against I2C driver name */ 2115607ca46eSDavid Howells #define V4L2_CHIP_MATCH_I2C_ADDR 2 /* Match against I2C 7-bit address */ 2116ff29feb9SLad, Prabhakar #define V4L2_CHIP_MATCH_AC97 3 /* Match against ancillary AC97 chip */ 2117607ca46eSDavid Howells 2118607ca46eSDavid Howells struct v4l2_dbg_match { 2119607ca46eSDavid Howells __u32 type; /* Match type */ 2120607ca46eSDavid Howells union { /* Match this chip, meaning determined by type */ 2121607ca46eSDavid Howells __u32 addr; 2122607ca46eSDavid Howells char name[32]; 2123607ca46eSDavid Howells }; 2124607ca46eSDavid Howells } __attribute__ ((packed)); 2125607ca46eSDavid Howells 2126607ca46eSDavid Howells struct v4l2_dbg_register { 2127607ca46eSDavid Howells struct v4l2_dbg_match match; 2128607ca46eSDavid Howells __u32 size; /* register size in bytes */ 2129607ca46eSDavid Howells __u64 reg; 2130607ca46eSDavid Howells __u64 val; 2131607ca46eSDavid Howells } __attribute__ ((packed)); 2132607ca46eSDavid Howells 213379b0c640SHans Verkuil #define V4L2_CHIP_FL_READABLE (1 << 0) 213479b0c640SHans Verkuil #define V4L2_CHIP_FL_WRITABLE (1 << 1) 213579b0c640SHans Verkuil 213696b03d2aSHans Verkuil /* VIDIOC_DBG_G_CHIP_INFO */ 213796b03d2aSHans Verkuil struct v4l2_dbg_chip_info { 213879b0c640SHans Verkuil struct v4l2_dbg_match match; 213979b0c640SHans Verkuil char name[32]; 214079b0c640SHans Verkuil __u32 flags; 2141b8399b83SHans Verkuil __u32 reserved[32]; 214279b0c640SHans Verkuil } __attribute__ ((packed)); 214379b0c640SHans Verkuil 2144607ca46eSDavid Howells /** 2145607ca46eSDavid Howells * struct v4l2_create_buffers - VIDIOC_CREATE_BUFS argument 2146607ca46eSDavid Howells * @index: on return, index of the first created buffer 2147607ca46eSDavid Howells * @count: entry: number of requested buffers, 2148607ca46eSDavid Howells * return: number of created buffers 2149607ca46eSDavid Howells * @memory: enum v4l2_memory; buffer memory type 2150607ca46eSDavid Howells * @format: frame format, for which buffers are requested 2151607ca46eSDavid Howells * @reserved: future extensions 2152607ca46eSDavid Howells */ 2153607ca46eSDavid Howells struct v4l2_create_buffers { 2154607ca46eSDavid Howells __u32 index; 2155607ca46eSDavid Howells __u32 count; 2156607ca46eSDavid Howells __u32 memory; 2157607ca46eSDavid Howells struct v4l2_format format; 2158607ca46eSDavid Howells __u32 reserved[8]; 2159607ca46eSDavid Howells }; 2160607ca46eSDavid Howells 2161607ca46eSDavid Howells /* 2162607ca46eSDavid Howells * 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 2163607ca46eSDavid Howells * 2164607ca46eSDavid Howells */ 2165607ca46eSDavid Howells #define VIDIOC_QUERYCAP _IOR('V', 0, struct v4l2_capability) 2166607ca46eSDavid Howells #define VIDIOC_RESERVED _IO('V', 1) 2167607ca46eSDavid Howells #define VIDIOC_ENUM_FMT _IOWR('V', 2, struct v4l2_fmtdesc) 2168607ca46eSDavid Howells #define VIDIOC_G_FMT _IOWR('V', 4, struct v4l2_format) 2169607ca46eSDavid Howells #define VIDIOC_S_FMT _IOWR('V', 5, struct v4l2_format) 2170607ca46eSDavid Howells #define VIDIOC_REQBUFS _IOWR('V', 8, struct v4l2_requestbuffers) 2171607ca46eSDavid Howells #define VIDIOC_QUERYBUF _IOWR('V', 9, struct v4l2_buffer) 2172607ca46eSDavid Howells #define VIDIOC_G_FBUF _IOR('V', 10, struct v4l2_framebuffer) 2173607ca46eSDavid Howells #define VIDIOC_S_FBUF _IOW('V', 11, struct v4l2_framebuffer) 2174607ca46eSDavid Howells #define VIDIOC_OVERLAY _IOW('V', 14, int) 2175607ca46eSDavid Howells #define VIDIOC_QBUF _IOWR('V', 15, struct v4l2_buffer) 2176b799d09aSTomasz Stanislawski #define VIDIOC_EXPBUF _IOWR('V', 16, struct v4l2_exportbuffer) 2177607ca46eSDavid Howells #define VIDIOC_DQBUF _IOWR('V', 17, struct v4l2_buffer) 2178607ca46eSDavid Howells #define VIDIOC_STREAMON _IOW('V', 18, int) 2179607ca46eSDavid Howells #define VIDIOC_STREAMOFF _IOW('V', 19, int) 2180607ca46eSDavid Howells #define VIDIOC_G_PARM _IOWR('V', 21, struct v4l2_streamparm) 2181607ca46eSDavid Howells #define VIDIOC_S_PARM _IOWR('V', 22, struct v4l2_streamparm) 2182607ca46eSDavid Howells #define VIDIOC_G_STD _IOR('V', 23, v4l2_std_id) 2183607ca46eSDavid Howells #define VIDIOC_S_STD _IOW('V', 24, v4l2_std_id) 2184607ca46eSDavid Howells #define VIDIOC_ENUMSTD _IOWR('V', 25, struct v4l2_standard) 2185607ca46eSDavid Howells #define VIDIOC_ENUMINPUT _IOWR('V', 26, struct v4l2_input) 2186607ca46eSDavid Howells #define VIDIOC_G_CTRL _IOWR('V', 27, struct v4l2_control) 2187607ca46eSDavid Howells #define VIDIOC_S_CTRL _IOWR('V', 28, struct v4l2_control) 2188607ca46eSDavid Howells #define VIDIOC_G_TUNER _IOWR('V', 29, struct v4l2_tuner) 2189607ca46eSDavid Howells #define VIDIOC_S_TUNER _IOW('V', 30, struct v4l2_tuner) 2190607ca46eSDavid Howells #define VIDIOC_G_AUDIO _IOR('V', 33, struct v4l2_audio) 2191607ca46eSDavid Howells #define VIDIOC_S_AUDIO _IOW('V', 34, struct v4l2_audio) 2192607ca46eSDavid Howells #define VIDIOC_QUERYCTRL _IOWR('V', 36, struct v4l2_queryctrl) 2193607ca46eSDavid Howells #define VIDIOC_QUERYMENU _IOWR('V', 37, struct v4l2_querymenu) 2194607ca46eSDavid Howells #define VIDIOC_G_INPUT _IOR('V', 38, int) 2195607ca46eSDavid Howells #define VIDIOC_S_INPUT _IOWR('V', 39, int) 2196254a4777SHans Verkuil #define VIDIOC_G_EDID _IOWR('V', 40, struct v4l2_edid) 2197254a4777SHans Verkuil #define VIDIOC_S_EDID _IOWR('V', 41, struct v4l2_edid) 2198607ca46eSDavid Howells #define VIDIOC_G_OUTPUT _IOR('V', 46, int) 2199607ca46eSDavid Howells #define VIDIOC_S_OUTPUT _IOWR('V', 47, int) 2200607ca46eSDavid Howells #define VIDIOC_ENUMOUTPUT _IOWR('V', 48, struct v4l2_output) 2201607ca46eSDavid Howells #define VIDIOC_G_AUDOUT _IOR('V', 49, struct v4l2_audioout) 2202607ca46eSDavid Howells #define VIDIOC_S_AUDOUT _IOW('V', 50, struct v4l2_audioout) 2203607ca46eSDavid Howells #define VIDIOC_G_MODULATOR _IOWR('V', 54, struct v4l2_modulator) 2204607ca46eSDavid Howells #define VIDIOC_S_MODULATOR _IOW('V', 55, struct v4l2_modulator) 2205607ca46eSDavid Howells #define VIDIOC_G_FREQUENCY _IOWR('V', 56, struct v4l2_frequency) 2206607ca46eSDavid Howells #define VIDIOC_S_FREQUENCY _IOW('V', 57, struct v4l2_frequency) 2207607ca46eSDavid Howells #define VIDIOC_CROPCAP _IOWR('V', 58, struct v4l2_cropcap) 2208607ca46eSDavid Howells #define VIDIOC_G_CROP _IOWR('V', 59, struct v4l2_crop) 2209607ca46eSDavid Howells #define VIDIOC_S_CROP _IOW('V', 60, struct v4l2_crop) 2210607ca46eSDavid Howells #define VIDIOC_G_JPEGCOMP _IOR('V', 61, struct v4l2_jpegcompression) 2211607ca46eSDavid Howells #define VIDIOC_S_JPEGCOMP _IOW('V', 62, struct v4l2_jpegcompression) 2212607ca46eSDavid Howells #define VIDIOC_QUERYSTD _IOR('V', 63, v4l2_std_id) 2213607ca46eSDavid Howells #define VIDIOC_TRY_FMT _IOWR('V', 64, struct v4l2_format) 2214607ca46eSDavid Howells #define VIDIOC_ENUMAUDIO _IOWR('V', 65, struct v4l2_audio) 2215607ca46eSDavid Howells #define VIDIOC_ENUMAUDOUT _IOWR('V', 66, struct v4l2_audioout) 2216607ca46eSDavid Howells #define VIDIOC_G_PRIORITY _IOR('V', 67, __u32) /* enum v4l2_priority */ 2217607ca46eSDavid Howells #define VIDIOC_S_PRIORITY _IOW('V', 68, __u32) /* enum v4l2_priority */ 2218607ca46eSDavid Howells #define VIDIOC_G_SLICED_VBI_CAP _IOWR('V', 69, struct v4l2_sliced_vbi_cap) 2219607ca46eSDavid Howells #define VIDIOC_LOG_STATUS _IO('V', 70) 2220607ca46eSDavid Howells #define VIDIOC_G_EXT_CTRLS _IOWR('V', 71, struct v4l2_ext_controls) 2221607ca46eSDavid Howells #define VIDIOC_S_EXT_CTRLS _IOWR('V', 72, struct v4l2_ext_controls) 2222607ca46eSDavid Howells #define VIDIOC_TRY_EXT_CTRLS _IOWR('V', 73, struct v4l2_ext_controls) 2223607ca46eSDavid Howells #define VIDIOC_ENUM_FRAMESIZES _IOWR('V', 74, struct v4l2_frmsizeenum) 2224607ca46eSDavid Howells #define VIDIOC_ENUM_FRAMEINTERVALS _IOWR('V', 75, struct v4l2_frmivalenum) 2225607ca46eSDavid Howells #define VIDIOC_G_ENC_INDEX _IOR('V', 76, struct v4l2_enc_idx) 2226607ca46eSDavid Howells #define VIDIOC_ENCODER_CMD _IOWR('V', 77, struct v4l2_encoder_cmd) 2227607ca46eSDavid Howells #define VIDIOC_TRY_ENCODER_CMD _IOWR('V', 78, struct v4l2_encoder_cmd) 2228607ca46eSDavid Howells 2229607ca46eSDavid Howells /* Experimental, meant for debugging, testing and internal use. 2230607ca46eSDavid Howells Only implemented if CONFIG_VIDEO_ADV_DEBUG is defined. 2231607ca46eSDavid Howells You must be root to use these ioctls. Never use these in applications! */ 2232607ca46eSDavid Howells #define VIDIOC_DBG_S_REGISTER _IOW('V', 79, struct v4l2_dbg_register) 2233607ca46eSDavid Howells #define VIDIOC_DBG_G_REGISTER _IOWR('V', 80, struct v4l2_dbg_register) 2234607ca46eSDavid Howells 2235607ca46eSDavid Howells #define VIDIOC_S_HW_FREQ_SEEK _IOW('V', 82, struct v4l2_hw_freq_seek) 2236607ca46eSDavid Howells 2237607ca46eSDavid Howells #define VIDIOC_S_DV_TIMINGS _IOWR('V', 87, struct v4l2_dv_timings) 2238607ca46eSDavid Howells #define VIDIOC_G_DV_TIMINGS _IOWR('V', 88, struct v4l2_dv_timings) 2239607ca46eSDavid Howells #define VIDIOC_DQEVENT _IOR('V', 89, struct v4l2_event) 2240607ca46eSDavid Howells #define VIDIOC_SUBSCRIBE_EVENT _IOW('V', 90, struct v4l2_event_subscription) 2241607ca46eSDavid Howells #define VIDIOC_UNSUBSCRIBE_EVENT _IOW('V', 91, struct v4l2_event_subscription) 2242607ca46eSDavid Howells 2243607ca46eSDavid Howells /* Experimental, the below two ioctls may change over the next couple of kernel 2244607ca46eSDavid Howells versions */ 2245607ca46eSDavid Howells #define VIDIOC_CREATE_BUFS _IOWR('V', 92, struct v4l2_create_buffers) 2246607ca46eSDavid Howells #define VIDIOC_PREPARE_BUF _IOWR('V', 93, struct v4l2_buffer) 2247607ca46eSDavid Howells 2248607ca46eSDavid Howells /* Experimental selection API */ 2249607ca46eSDavid Howells #define VIDIOC_G_SELECTION _IOWR('V', 94, struct v4l2_selection) 2250607ca46eSDavid Howells #define VIDIOC_S_SELECTION _IOWR('V', 95, struct v4l2_selection) 2251607ca46eSDavid Howells 2252607ca46eSDavid Howells /* Experimental, these two ioctls may change over the next couple of kernel 2253607ca46eSDavid Howells versions. */ 2254607ca46eSDavid Howells #define VIDIOC_DECODER_CMD _IOWR('V', 96, struct v4l2_decoder_cmd) 2255607ca46eSDavid Howells #define VIDIOC_TRY_DECODER_CMD _IOWR('V', 97, struct v4l2_decoder_cmd) 2256607ca46eSDavid Howells 2257607ca46eSDavid Howells /* Experimental, these three ioctls may change over the next couple of kernel 2258607ca46eSDavid Howells versions. */ 2259607ca46eSDavid Howells #define VIDIOC_ENUM_DV_TIMINGS _IOWR('V', 98, struct v4l2_enum_dv_timings) 2260607ca46eSDavid Howells #define VIDIOC_QUERY_DV_TIMINGS _IOR('V', 99, struct v4l2_dv_timings) 2261607ca46eSDavid Howells #define VIDIOC_DV_TIMINGS_CAP _IOWR('V', 100, struct v4l2_dv_timings_cap) 2262607ca46eSDavid Howells 2263607ca46eSDavid Howells /* Experimental, this ioctl may change over the next couple of kernel 2264607ca46eSDavid Howells versions. */ 2265607ca46eSDavid Howells #define VIDIOC_ENUM_FREQ_BANDS _IOWR('V', 101, struct v4l2_frequency_band) 2266607ca46eSDavid Howells 226779b0c640SHans Verkuil /* Experimental, meant for debugging, testing and internal use. 226879b0c640SHans Verkuil Never use these in applications! */ 226996b03d2aSHans Verkuil #define VIDIOC_DBG_G_CHIP_INFO _IOWR('V', 102, struct v4l2_dbg_chip_info) 227079b0c640SHans Verkuil 22715082c241SHans Verkuil #define VIDIOC_QUERY_EXT_CTRL _IOWR('V', 103, struct v4l2_query_ext_ctrl) 22725082c241SHans Verkuil 2273607ca46eSDavid Howells /* Reminder: when adding new ioctls please add support for them to 2274607ca46eSDavid Howells drivers/media/video/v4l2-compat-ioctl32.c as well! */ 2275607ca46eSDavid Howells 2276607ca46eSDavid Howells #define BASE_VIDIOC_PRIVATE 192 /* 192-255 are private */ 2277607ca46eSDavid Howells 2278607ca46eSDavid Howells #endif /* _UAPI__LINUX_VIDEODEV2_H */ 2279