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