* include/sys/videoio.h
*
* SPDX-License-Identifier: Apache-2.0
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership. The
* ASF licenses this file to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*
****************************************************************************/
#ifndef __INCLUDE_SYS_VIDEOIO_H
#define __INCLUDE_SYS_VIDEOIO_H
* Included Files
****************************************************************************/
#include <stdint.h>
#include <sys/time.h>
#include <sys/types.h>
#include <sys/video_controls.h>
#include <nuttx/fs/ioctl.h>
#ifdef __cplusplus
extern "C"
{
#endif
* Pre-processor Definitions
****************************************************************************/
#define VIDEO_MAX_FRAME 32
#define VIDEO_MAX_PLANES 8
#define v4l2_fourcc(a, b, c, d)\
((uint32_t)(a) | ((uint32_t)(b) << 8) | \
((uint32_t)(c) << 16) | ((uint32_t)(d) << 24))
#define v4l2_fourcc_be(a, b, c, d) (v4l2_fourcc(a, b, c, d) | (1 << 31))
#define V4L2_PIX_FMT_RGB332 v4l2_fourcc('R', 'G', 'B', '1')
#define V4L2_PIX_FMT_RGB444 v4l2_fourcc('R', '4', '4', '4')
#define V4L2_PIX_FMT_ARGB444 v4l2_fourcc('A', 'R', '1', '2')
#define V4L2_PIX_FMT_XRGB444 v4l2_fourcc('X', 'R', '1', '2')
#define V4L2_PIX_FMT_RGB555 v4l2_fourcc('R', 'G', 'B', 'O')
#define V4L2_PIX_FMT_ARGB555 v4l2_fourcc('A', 'R', '1', '5')
#define V4L2_PIX_FMT_XRGB555 v4l2_fourcc('X', 'R', '1', '5')
#define V4L2_PIX_FMT_RGB565 v4l2_fourcc('R', 'G', 'B', 'P')
#define V4L2_PIX_FMT_RGB555X v4l2_fourcc('R', 'G', 'B', 'Q')
#define V4L2_PIX_FMT_ARGB555X v4l2_fourcc_be('A', 'R', '1', '5')
#define V4L2_PIX_FMT_XRGB555X v4l2_fourcc_be('X', 'R', '1', '5')
#define V4L2_PIX_FMT_RGB565X v4l2_fourcc('R', 'G', 'B', 'R')
#define V4L2_PIX_FMT_BGR666 v4l2_fourcc('B', 'G', 'R', 'H')
#define V4L2_PIX_FMT_BGR24 v4l2_fourcc('B', 'G', 'R', '3')
#define V4L2_PIX_FMT_RGB24 v4l2_fourcc('R', 'G', 'B', '3')
#define V4L2_PIX_FMT_BGR32 v4l2_fourcc('B', 'G', 'R', '4')
#define V4L2_PIX_FMT_ABGR32 v4l2_fourcc('A', 'R', '2', '4')
#define V4L2_PIX_FMT_XBGR32 v4l2_fourcc('X', 'R', '2', '4')
#define V4L2_PIX_FMT_BGRA32 v4l2_fourcc('R', 'A', '2', '4')
#define V4L2_PIX_FMT_BGRX32 v4l2_fourcc('R', 'X', '2', '4')
#define V4L2_PIX_FMT_RGB32 v4l2_fourcc('R', 'G', 'B', '4')
#define V4L2_PIX_FMT_RGBA32 v4l2_fourcc('A', 'B', '2', '4')
#define V4L2_PIX_FMT_RGBX32 v4l2_fourcc('X', 'B', '2', '4')
#define V4L2_PIX_FMT_ARGB32 v4l2_fourcc('B', 'A', '2', '4')
#define V4L2_PIX_FMT_XRGB32 v4l2_fourcc('B', 'X', '2', '4')
#define V4L2_PIX_FMT_BGR48 v4l2_fourcc('B', 'G', 'R', '6')
#define V4L2_PIX_FMT_RGB48 v4l2_fourcc('R', 'G', 'B', '6')
#define V4L2_PIX_FMT_GREY v4l2_fourcc('G', 'R', 'E', 'Y')
#define V4L2_PIX_FMT_Y4 v4l2_fourcc('Y', '0', '4', ' ')
#define V4L2_PIX_FMT_Y6 v4l2_fourcc('Y', '0', '6', ' ')
#define V4L2_PIX_FMT_Y10 v4l2_fourcc('Y', '1', '0', ' ')
#define V4L2_PIX_FMT_Y12 v4l2_fourcc('Y', '1', '2', ' ')
#define V4L2_PIX_FMT_Y16 v4l2_fourcc('Y', '1', '6', ' ')
#define V4L2_PIX_FMT_Y16_BE v4l2_fourcc_be('Y', '1', '6', ' ')
#define V4L2_PIX_FMT_Y10BPACK v4l2_fourcc('Y', '1', '0', 'B')
#define V4L2_PIX_FMT_Y10P v4l2_fourcc('Y', '1', '0', 'P')
#define V4L2_PIX_FMT_IPU3_Y10 v4l2_fourcc('i', 'p', '3', 'y')
#define V4L2_PIX_FMT_Y12P v4l2_fourcc('Y', '1', '2', 'P')
#define V4L2_PIX_FMT_Y14P v4l2_fourcc('Y', '1', '4', 'P')
#define V4L2_PIX_FMT_PAL8 v4l2_fourcc('P', 'A', 'L', '8')
#define V4L2_PIX_FMT_UV8 v4l2_fourcc('U', 'V', '8', ' ')
#define V4L2_PIX_FMT_YUYV v4l2_fourcc('Y', 'U', 'Y', 'V')
#define V4L2_PIX_FMT_YYUV v4l2_fourcc('Y', 'Y', 'U', 'V')
#define V4L2_PIX_FMT_YVYU v4l2_fourcc('Y', 'V', 'Y', 'U')
#define V4L2_PIX_FMT_UYVY v4l2_fourcc('U', 'Y', 'V', 'Y')
#define V4L2_PIX_FMT_VYUY v4l2_fourcc('V', 'Y', 'U', 'Y')
#define V4L2_PIX_FMT_Y41P v4l2_fourcc('Y', '4', '1', 'P')
#define V4L2_PIX_FMT_YUV444 v4l2_fourcc('Y', '4', '4', '4')
#define V4L2_PIX_FMT_YUV555 v4l2_fourcc('Y', 'U', 'V', 'O')
#define V4L2_PIX_FMT_YUV565 v4l2_fourcc('Y', 'U', 'V', 'P')
#define V4L2_PIX_FMT_YUV24 v4l2_fourcc('Y', 'U', 'V', '3')
#define V4L2_PIX_FMT_YUV32 v4l2_fourcc('Y', 'U', 'V', '4')
#define V4L2_PIX_FMT_AYUV32 v4l2_fourcc('A', 'Y', 'U', 'V')
#define V4L2_PIX_FMT_XYUV32 v4l2_fourcc('X', 'Y', 'U', 'V')
#define V4L2_PIX_FMT_VUYA32 v4l2_fourcc('V', 'U', 'Y', 'A')
#define V4L2_PIX_FMT_VUYX32 v4l2_fourcc('V', 'U', 'Y', 'X')
#define V4L2_PIX_FMT_YUVA32 v4l2_fourcc('Y', 'U', 'V', 'A')
#define V4L2_PIX_FMT_YUVX32 v4l2_fourcc('Y', 'U', 'V', 'X')
#define V4L2_PIX_FMT_HI240 v4l2_fourcc('H', 'I', '2', '4')
#define V4L2_PIX_FMT_HM12 v4l2_fourcc('H', 'M', '1', '2')
#define V4L2_PIX_FMT_M420 v4l2_fourcc('M', '4', '2', '0')
#define V4L2_PIX_FMT_NV12 v4l2_fourcc('N', 'V', '1', '2')
#define V4L2_PIX_FMT_NV21 v4l2_fourcc('N', 'V', '2', '1')
#define V4L2_PIX_FMT_NV16 v4l2_fourcc('N', 'V', '1', '6')
#define V4L2_PIX_FMT_NV61 v4l2_fourcc('N', 'V', '6', '1')
#define V4L2_PIX_FMT_NV24 v4l2_fourcc('N', 'V', '2', '4')
#define V4L2_PIX_FMT_NV42 v4l2_fourcc('N', 'V', '4', '2')
#define V4L2_PIX_FMT_NV12M v4l2_fourcc('N', 'M', '1', '2')
#define V4L2_PIX_FMT_NV21M v4l2_fourcc('N', 'M', '2', '1')
#define V4L2_PIX_FMT_NV16M v4l2_fourcc('N', 'M', '1', '6')
#define V4L2_PIX_FMT_NV61M v4l2_fourcc('N', 'M', '6', '1')
#define V4L2_PIX_FMT_NV12MT v4l2_fourcc('T', 'M', '1', '2')
#define V4L2_PIX_FMT_NV12MT_16X16 v4l2_fourcc('V', 'M', '1', '2')
#define V4L2_PIX_FMT_YUV410 v4l2_fourcc('Y', 'U', 'V', '9')
#define V4L2_PIX_FMT_YVU410 v4l2_fourcc('Y', 'V', 'U', '9')
#define V4L2_PIX_FMT_YUV411P v4l2_fourcc('4', '1', '1', 'P')
#define V4L2_PIX_FMT_YUV420 v4l2_fourcc('Y', 'U', '1', '2')
#define V4L2_PIX_FMT_YVU420 v4l2_fourcc('Y', 'V', '1', '2')
#define V4L2_PIX_FMT_YUV422P v4l2_fourcc('4', '2', '2', 'P')
#define V4L2_PIX_FMT_YUV420M v4l2_fourcc('Y', 'M', '1', '2')
#define V4L2_PIX_FMT_YVU420M v4l2_fourcc('Y', 'M', '2', '1')
#define V4L2_PIX_FMT_YUV422M v4l2_fourcc('Y', 'M', '1', '6')
#define V4L2_PIX_FMT_YVU422M v4l2_fourcc('Y', 'M', '6', '1')
#define V4L2_PIX_FMT_YUV444M v4l2_fourcc('Y', 'M', '2', '4')
#define V4L2_PIX_FMT_YVU444M v4l2_fourcc('Y', 'M', '4', '2')
#define V4L2_PIX_FMT_SBGGR8 v4l2_fourcc('B', 'A', '8', '1')
#define V4L2_PIX_FMT_SGBRG8 v4l2_fourcc('G', 'B', 'R', 'G')
#define V4L2_PIX_FMT_SGRBG8 v4l2_fourcc('G', 'R', 'B', 'G')
#define V4L2_PIX_FMT_SRGGB8 v4l2_fourcc('R', 'G', 'G', 'B')
#define V4L2_PIX_FMT_SBGGR10 v4l2_fourcc('B', 'G', '1', '0')
#define V4L2_PIX_FMT_SGBRG10 v4l2_fourcc('G', 'B', '1', '0')
#define V4L2_PIX_FMT_SGRBG10 v4l2_fourcc('B', 'A', '1', '0')
#define V4L2_PIX_FMT_SRGGB10 v4l2_fourcc('R', 'G', '1', '0')
#define V4L2_PIX_FMT_SBGGR10P v4l2_fourcc('p', 'B', 'A', 'A')
#define V4L2_PIX_FMT_SGBRG10P v4l2_fourcc('p', 'G', 'A', 'A')
#define V4L2_PIX_FMT_SGRBG10P v4l2_fourcc('p', 'g', 'A', 'A')
#define V4L2_PIX_FMT_SRGGB10P v4l2_fourcc('p', 'R', 'A', 'A')
#define V4L2_PIX_FMT_SBGGR10ALAW8 v4l2_fourcc('a', 'B', 'A', '8')
#define V4L2_PIX_FMT_SGBRG10ALAW8 v4l2_fourcc('a', 'G', 'A', '8')
#define V4L2_PIX_FMT_SGRBG10ALAW8 v4l2_fourcc('a', 'g', 'A', '8')
#define V4L2_PIX_FMT_SRGGB10ALAW8 v4l2_fourcc('a', 'R', 'A', '8')
#define V4L2_PIX_FMT_SBGGR10DPCM8 v4l2_fourcc('b', 'B', 'A', '8')
#define V4L2_PIX_FMT_SGBRG10DPCM8 v4l2_fourcc('b', 'G', 'A', '8')
#define V4L2_PIX_FMT_SGRBG10DPCM8 v4l2_fourcc('B', 'D', '1', '0')
#define V4L2_PIX_FMT_SRGGB10DPCM8 v4l2_fourcc('b', 'R', 'A', '8')
#define V4L2_PIX_FMT_SBGGR12 v4l2_fourcc('B', 'G', '1', '2')
#define V4L2_PIX_FMT_SGBRG12 v4l2_fourcc('G', 'B', '1', '2')
#define V4L2_PIX_FMT_SGRBG12 v4l2_fourcc('B', 'A', '1', '2')
#define V4L2_PIX_FMT_SRGGB12 v4l2_fourcc('R', 'G', '1', '2')
#define V4L2_PIX_FMT_SBGGR16 v4l2_fourcc('B', 'Y', 'R', '2')
#define V4L2_PIX_FMT_SGBRG16 v4l2_fourcc('G', 'B', '1', '6')
#define V4L2_PIX_FMT_SGRBG16 v4l2_fourcc('G', 'R', '1', '6')
#define V4L2_PIX_FMT_SRGGB16 v4l2_fourcc('R', 'G', '1', '6')
#define V4L2_PIX_FMT_SBGGR12P v4l2_fourcc('p', 'B', 'C', 'C')
#define V4L2_PIX_FMT_SGBRG12P v4l2_fourcc('p', 'G', 'C', 'C')
#define V4L2_PIX_FMT_SGRBG12P v4l2_fourcc('p', 'g', 'C', 'C')
#define V4L2_PIX_FMT_SRGGB12P v4l2_fourcc('p', 'R', 'C', 'C')
#define V4L2_PIX_FMT_SBGGR14 v4l2_fourcc('B', 'G', '1', '4')
#define V4L2_PIX_FMT_SGBRG14 v4l2_fourcc('G', 'B', '1', '4')
#define V4L2_PIX_FMT_SGRBG14 v4l2_fourcc('G', 'R', '1', '4')
#define V4L2_PIX_FMT_SRGGB14 v4l2_fourcc('R', 'G', '1', '4')
#define V4L2_PIX_FMT_SBGGR14P v4l2_fourcc('p', 'B', 'E', 'E')
#define V4L2_PIX_FMT_SGBRG14P v4l2_fourcc('p', 'G', 'E', 'E')
#define V4L2_PIX_FMT_SGRBG14P v4l2_fourcc('p', 'g', 'E', 'E')
#define V4L2_PIX_FMT_SRGGB14P v4l2_fourcc('p', 'R', 'E', 'E')
#define V4L2_PIX_FMT_SBGGR16 v4l2_fourcc('B', 'Y', 'R', '2')
#define V4L2_PIX_FMT_SGBRG16 v4l2_fourcc('G', 'B', '1', '6')
#define V4L2_PIX_FMT_SGRBG16 v4l2_fourcc('G', 'R', '1', '6')
#define V4L2_PIX_FMT_SRGGB16 v4l2_fourcc('R', 'G', '1', '6')
#define V4L2_PIX_FMT_HSV24 v4l2_fourcc('H', 'S', 'V', '3')
#define V4L2_PIX_FMT_HSV32 v4l2_fourcc('H', 'S', 'V', '4')
#define V4L2_PIX_FMT_IPU3_SBGGR10 v4l2_fourcc('i', 'p', '3', 'b')
#define V4L2_PIX_FMT_IPU3_SGBRG10 v4l2_fourcc('i', 'p', '3', 'g')
#define V4L2_PIX_FMT_IPU3_SGRBG10 v4l2_fourcc('i', 'p', '3', 'G')
#define V4L2_PIX_FMT_IPU3_SRGGB10 v4l2_fourcc('i', 'p', '3', 'r')
#define V4L2_PIX_FMT_PISP_COMP1_RGGB v4l2_fourcc('P', 'C', '1', 'R')
#define V4L2_PIX_FMT_PISP_COMP1_GRBG v4l2_fourcc('P', 'C', '1', 'G')
#define V4L2_PIX_FMT_PISP_COMP1_GBRG v4l2_fourcc('P', 'C', '1', 'g')
#define V4L2_PIX_FMT_PISP_COMP1_BGGR v4l2_fourcc('P', 'C', '1', 'B')
#define V4L2_PIX_FMT_PISP_COMP1_MONO v4l2_fourcc('P', 'C', '1', 'M')
#define V4L2_PIX_FMT_PISP_COMP2_RGGB v4l2_fourcc('P', 'C', '2', 'R')
#define V4L2_PIX_FMT_PISP_COMP2_GRBG v4l2_fourcc('P', 'C', '2', 'G')
#define V4L2_PIX_FMT_PISP_COMP2_GBRG v4l2_fourcc('P', 'C', '2', 'g')
#define V4L2_PIX_FMT_PISP_COMP2_BGGR v4l2_fourcc('P', 'C', '2', 'B')
#define V4L2_PIX_FMT_PISP_COMP2_MONO v4l2_fourcc('P', 'C', '2', 'M')
#define V4L2_PIX_FMT_MJPEG v4l2_fourcc('M', 'J', 'P', 'G')
#define V4L2_PIX_FMT_JPEG v4l2_fourcc('J', 'P', 'E', 'G')
#define V4L2_PIX_FMT_DV v4l2_fourcc('d', 'v', 's', 'd')
#define V4L2_PIX_FMT_MPEG v4l2_fourcc('M', 'P', 'E', 'G')
#define V4L2_PIX_FMT_H264 v4l2_fourcc('H', '2', '6', '4')
#define V4L2_PIX_FMT_H264_NO_SC v4l2_fourcc('A', 'V', 'C', '1')
#define V4L2_PIX_FMT_H264_MVC v4l2_fourcc('M', '2', '6', '4')
#define V4L2_PIX_FMT_H263 v4l2_fourcc('H', '2', '6', '3')
#define V4L2_PIX_FMT_MPEG1 v4l2_fourcc('M', 'P', 'G', '1')
#define V4L2_PIX_FMT_MPEG2 v4l2_fourcc('M', 'P', 'G', '2')
#define V4L2_PIX_FMT_MPEG4 v4l2_fourcc('M', 'P', 'G', '4')
#define V4L2_PIX_FMT_XVID v4l2_fourcc('X', 'V', 'I', 'D')
#define V4L2_PIX_FMT_VC1_ANNEX_G v4l2_fourcc('V', 'C', '1', 'G')
#define V4L2_PIX_FMT_VC1_ANNEX_L v4l2_fourcc('V', 'C', '1', 'L')
#define V4L2_PIX_FMT_VP8 v4l2_fourcc('V', 'P', '8', '0')
#define V4L2_PIX_FMT_VP9 v4l2_fourcc('V', 'P', '9', '0')
#define V4L2_PIX_FMT_HEVC v4l2_fourcc('H', 'E', 'V', 'C')
#define V4L2_PIX_FMT_ENTROPY v4l2_fourcc('E', 'N', 'T', 'R')
#define V4L2_PIX_FMT_JPEG_WITH_SUBIMG v4l2_fourcc('J', 'S', 'U', 'B')
#define V4L2_PIX_FMT_SUBIMG_UYVY v4l2_fourcc('S', 'Y', 'U', 'V')
#define V4L2_PIX_FMT_SUBIMG_RGB565 v4l2_fourcc('S', 'R', 'G', 'B')
#define V4L2_META_FMT_GENERIC_8 v4l2_fourcc('M', 'E', 'T', '8')
#define V4L2_META_FMT_GENERIC_CSI2_10 v4l2_fourcc('M', 'C', '1', 'A')
#define V4L2_META_FMT_GENERIC_CSI2_12 v4l2_fourcc('M', 'C', '1', 'C')
#define V4L2_META_FMT_GENERIC_CSI2_14 v4l2_fourcc('M', 'C', '1', 'E')
#define V4L2_META_FMT_GENERIC_CSI2_16 v4l2_fourcc('M', 'C', '1', 'G')
#define V4L2_META_FMT_GENERIC_CSI2_20 v4l2_fourcc('M', 'C', '1', 'K')
#define V4L2_META_FMT_GENERIC_CSI2_24 v4l2_fourcc('M', 'C', '1', 'O')
#define V4L2_PIX_FMT_FLAG_PREMUL_ALPHA 0x00000001
#define V4L2_PIX_FMT_FLAG_SET_CSC 0x00000002
#define V4L2_FMT_DSC_MAX (32)
#define V4L2_CTRL_ID_MASK (0x0fffffff)
#define V4L2_CTRL_ID2CLASS(id) ((id) & 0x0fff0000UL)
#define V4L2_CTRL_ID2WHICH(id) ((id) & 0x0fff0000UL)
#define V4L2_CTRL_DRIVER_PRIV(id) (((id) & 0xffff) >= 0x1000)
#define V4L2_CTRL_WHICH_CUR_VAL 0
#define V4L2_CTRL_WHICH_DEF_VAL 0x0f000000
#define V4L2_CTRL_WHICH_REQUEST_VAL 0x0f010000
#define V4L2_CTRL_MAX_DIMS (4)
#define V4L2_REQBUFS_COUNT_MAX CONFIG_VIDEO_REQBUFS_COUNT_MAX
#define V4L2_STD_PAL_B ((v4l2_std_id)0x00000001)
#define V4L2_STD_PAL_B1 ((v4l2_std_id)0x00000002)
#define V4L2_STD_PAL_G ((v4l2_std_id)0x00000004)
#define V4L2_STD_PAL_H ((v4l2_std_id)0x00000008)
#define V4L2_STD_PAL_I ((v4l2_std_id)0x00000010)
#define V4L2_STD_PAL_D ((v4l2_std_id)0x00000020)
#define V4L2_STD_PAL_D1 ((v4l2_std_id)0x00000040)
#define V4L2_STD_PAL_K ((v4l2_std_id)0x00000080)
#define V4L2_STD_PAL_M ((v4l2_std_id)0x00000100)
#define V4L2_STD_PAL_N ((v4l2_std_id)0x00000200)
#define V4L2_STD_PAL_Nc ((v4l2_std_id)0x00000400)
#define V4L2_STD_PAL_60 ((v4l2_std_id)0x00000800)
#define V4L2_STD_NTSC_M ((v4l2_std_id)0x00001000)
#define V4L2_STD_NTSC_M_JP ((v4l2_std_id)0x00002000)
#define V4L2_STD_NTSC_443 ((v4l2_std_id)0x00004000)
#define V4L2_STD_NTSC_M_KR ((v4l2_std_id)0x00008000)
#define V4L2_STD_SECAM_B ((v4l2_std_id)0x00010000)
#define V4L2_STD_SECAM_D ((v4l2_std_id)0x00020000)
#define V4L2_STD_SECAM_G ((v4l2_std_id)0x00040000)
#define V4L2_STD_SECAM_H ((v4l2_std_id)0x00080000)
#define V4L2_STD_SECAM_K ((v4l2_std_id)0x00100000)
#define V4L2_STD_SECAM_K1 ((v4l2_std_id)0x00200000)
#define V4L2_STD_SECAM_L ((v4l2_std_id)0x00400000)
#define V4L2_STD_SECAM_LC ((v4l2_std_id)0x00800000)
#define V4L2_STD_ATSC_8_VSB ((v4l2_std_id)0x01000000)
#define V4L2_STD_ATSC_16_VSB ((v4l2_std_id)0x02000000)
* drivers and V4L2 applications
*/
* Missing here.
*/
#define V4L2_STD_NTSC (V4L2_STD_NTSC_M | \
V4L2_STD_NTSC_M_JP | \
V4L2_STD_NTSC_M_KR)
#define V4L2_STD_SECAM_DK (V4L2_STD_SECAM_D | \
V4L2_STD_SECAM_K | \
V4L2_STD_SECAM_K1)
#define V4L2_STD_SECAM (V4L2_STD_SECAM_B | \
V4L2_STD_SECAM_G | \
V4L2_STD_SECAM_H | \
V4L2_STD_SECAM_DK | \
V4L2_STD_SECAM_L | \
V4L2_STD_SECAM_LC)
#define V4L2_STD_PAL_BG (V4L2_STD_PAL_B | \
V4L2_STD_PAL_B1 | \
V4L2_STD_PAL_G)
#define V4L2_STD_PAL_DK (V4L2_STD_PAL_D | \
V4L2_STD_PAL_D1 | \
V4L2_STD_PAL_K)
* V4L1 concept of "PAL": /BGDKHI.
* Several PAL standards are missing here: /M, /N and /Nc
*/
#define V4L2_STD_PAL (V4L2_STD_PAL_BG | \
V4L2_STD_PAL_DK | \
V4L2_STD_PAL_H | \
V4L2_STD_PAL_I)
#define V4L2_STD_B (V4L2_STD_PAL_B | \
V4L2_STD_PAL_B1 | \
V4L2_STD_SECAM_B)
#define V4L2_STD_G (V4L2_STD_PAL_G | \
V4L2_STD_SECAM_G)
#define V4L2_STD_H (V4L2_STD_PAL_H | \
V4L2_STD_SECAM_H)
#define V4L2_STD_L (V4L2_STD_SECAM_L | \
V4L2_STD_SECAM_LC)
#define V4L2_STD_GH (V4L2_STD_G | \
V4L2_STD_H)
#define V4L2_STD_DK (V4L2_STD_PAL_DK | \
V4L2_STD_SECAM_DK)
#define V4L2_STD_BG (V4L2_STD_B | \
V4L2_STD_G)
#define V4L2_STD_MN (V4L2_STD_PAL_M | \
V4L2_STD_PAL_N | \
V4L2_STD_PAL_Nc | \
V4L2_STD_NTSC)
#define V4L2_STD_MTS (V4L2_STD_NTSC_M | \
V4L2_STD_PAL_M | \
V4L2_STD_PAL_N | \
V4L2_STD_PAL_Nc)
#define V4L2_STD_525_60 (V4L2_STD_PAL_M | \
V4L2_STD_PAL_60 | \
V4L2_STD_NTSC | \
V4L2_STD_NTSC_443)
#define V4L2_STD_625_50 (V4L2_STD_PAL | \
V4L2_STD_PAL_N | \
V4L2_STD_PAL_Nc | \
V4L2_STD_SECAM)
#define V4L2_STD_ATSC (V4L2_STD_ATSC_8_VSB | \
V4L2_STD_ATSC_16_VSB)
#define V4L2_STD_UNKNOWN 0
#define V4L2_STD_ALL (V4L2_STD_525_60 | \
V4L2_STD_625_50)
* Public Types
****************************************************************************/
* Currently, only member "driver" is supported.
*/
struct v4l2_capability
{
uint8_t driver[16];
uint8_t card[32];
uint8_t bus_info[32];
uint32_t version;
uint32_t capabilities;
uint32_t device_caps;
};
enum v4l2_capabilities
{
V4L2_CAP_VIDEO_CAPTURE = 0x00000001,
V4L2_CAP_VIDEO_OUTPUT = 0x00000002,
V4L2_CAP_VIDEO_OVERLAY = 0x00000004,
V4L2_CAP_VBI_CAPTURE = 0x00000010,
V4L2_CAP_VBI_OUTPUT = 0x00000020,
V4L2_CAP_SLICED_VBI_CAPTURE = 0x00000040,
V4L2_CAP_SLICED_VBI_OUTPUT = 0x00000080,
V4L2_CAP_RDS_CAPTURE = 0x00000100,
V4L2_CAP_VIDEO_OUTPUT_OVERLAY = 0x00000200,
V4L2_CAP_HW_FREQ_SEEK = 0x00000400,
V4L2_CAP_RDS_OUTPUT = 0x00000800,
V4L2_CAP_VIDEO_CAPTURE_MPLANE = 0x00001000,
V4L2_CAP_VIDEO_OUTPUT_MPLANE = 0x00002000,
V4L2_CAP_VIDEO_M2M_MPLANE = 0x00004000,
V4L2_CAP_VIDEO_M2M = 0x00008000,
V4L2_CAP_TUNER = 0x00010000,
V4L2_CAP_AUDIO = 0x00020000,
V4L2_CAP_RADIO = 0x00040000,
V4L2_CAP_MODULATOR = 0x00080000,
V4L2_CAP_SDR_CAPTURE = 0x00100000,
V4L2_CAP_EXT_PIX_FORMAT = 0x00200000,
V4L2_CAP_SDR_OUTPUT = 0x00400000,
V4L2_CAP_META_CAPTURE = 0x00800000,
V4L2_CAP_READWRITE = 0x01000000,
V4L2_CAP_ASYNCIO = 0x02000000,
V4L2_CAP_STREAMING = 0x04000000,
V4L2_CAP_META_OUTPUT = 0x08000000,
V4L2_CAP_TOUCH = 0x10000000,
V4L2_CAP_IO_MC = 0x20000000,
V4L2_CAP_DEVICE_CAPS = 0x80000000,
};
struct v4l2_rect
{
int32_t left;
int32_t top;
uint32_t width;
uint32_t height;
};
struct v4l2_fract
{
uint32_t numerator;
uint32_t denominator;
};
* Currently, only member type and r are supported.
*/
struct v4l2_selection
{
uint32_t type;
uint32_t target;
uint32_t flags;
struct v4l2_rect r;
};
typedef uint64_t v4l2_std_id;
struct v4l2_standard
{
uint32_t index;
v4l2_std_id id;
uint8_t name[24];
struct v4l2_fract frameperiod;
uint32_t framelines;
uint32_t reserved[4];
};
* Currently, support only V4L2_BUF_TYPE_VIDEO_CAPTURE and
* V4L2_BUF_TYPE_STILL_CAPTURE.
*/
enum v4l2_buf_type
{
V4L2_BUF_TYPE_VIDEO_CAPTURE = 1,
V4L2_BUF_TYPE_VIDEO_OUTPUT = 2,
V4L2_BUF_TYPE_VIDEO_OVERLAY = 3,
V4L2_BUF_TYPE_VBI_CAPTURE = 4,
V4L2_BUF_TYPE_VBI_OUTPUT = 5,
V4L2_BUF_TYPE_SLICED_VBI_CAPTURE = 6,
V4L2_BUF_TYPE_SLICED_VBI_OUTPUT = 7,
V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY = 8,
V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE = 9,
V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE = 10,
V4L2_BUF_TYPE_SDR_CAPTURE = 11,
V4L2_BUF_TYPE_SDR_OUTPUT = 12,
V4L2_BUF_TYPE_META_CAPTURE = 13,
V4L2_BUF_TYPE_META_OUTPUT = 14,
V4L2_BUF_TYPE_PRIVATE = 0x80,
V4L2_BUF_TYPE_STILL_CAPTURE = 0x81
};
#define V4L2_TYPE_IS_MULTIPLANAR(type) \
((type) == V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE \
|| (type) == V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE)
#define V4L2_TYPE_IS_OUTPUT(type) \
((type) == V4L2_BUF_TYPE_VIDEO_OUTPUT \
|| (type) == V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE \
|| (type) == V4L2_BUF_TYPE_VIDEO_OVERLAY \
|| (type) == V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY \
|| (type) == V4L2_BUF_TYPE_VBI_OUTPUT \
|| (type) == V4L2_BUF_TYPE_SLICED_VBI_OUTPUT \
|| (type) == V4L2_BUF_TYPE_SDR_OUTPUT \
|| (type) == V4L2_BUF_TYPE_META_OUTPUT)
#define V4L2_TYPE_IS_CAPTURE(type) (!V4L2_TYPE_IS_OUTPUT(type))
enum v4l2_memory
{
V4L2_MEMORY_MMAP = 1,
V4L2_MEMORY_USERPTR = 2,
V4L2_MEMORY_OVERLAY = 3,
V4L2_MEMORY_DMABUF = 4,
};
enum v4l2_colorspace
{
* Can only be used with video capture.
*/
V4L2_COLORSPACE_DEFAULT = 0,
V4L2_COLORSPACE_SMPTE170M = 1,
V4L2_COLORSPACE_SMPTE240M = 2,
V4L2_COLORSPACE_REC709 = 3,
* based on a misunderstanding of the bt878 datasheet.
*/
V4L2_COLORSPACE_BT878 = 4,
* really, really old NTSC recordings. Superseded by SMPTE 170M.
*/
V4L2_COLORSPACE_470_SYSTEM_M = 5,
* dealing with really old PAL/SECAM recordings. Superseded by
* SMPTE 170M.
*/
V4L2_COLORSPACE_470_SYSTEM_BG = 6,
* and V4L2_QUANTIZATION_FULL_RANGE. To be used for (Motion-)JPEG.
*/
V4L2_COLORSPACE_JPEG = 7,
V4L2_COLORSPACE_SRGB = 8,
V4L2_COLORSPACE_OPRGB = 9,
V4L2_COLORSPACE_BT2020 = 10,
V4L2_COLORSPACE_RAW = 11,
V4L2_COLORSPACE_DCI_P3 = 12,
};
* This depends on whether this is a SDTV image (use SMPTE 170M), an
* HDTV image (use Rec. 709), or something else (use sRGB).
*/
#define V4L2_MAP_COLORSPACE_DEFAULT(is_sdtv, is_hdtv) \
((is_sdtv) ? V4L2_COLORSPACE_SMPTE170M : \
((is_hdtv) ? V4L2_COLORSPACE_REC709 : V4L2_COLORSPACE_SRGB))
enum v4l2_xfer_func
{
* for the various colorspaces:
*
* V4L2_COLORSPACE_SMPTE170M, V4L2_COLORSPACE_470_SYSTEM_M,
* V4L2_COLORSPACE_470_SYSTEM_BG, V4L2_COLORSPACE_REC709 and
* V4L2_COLORSPACE_BT2020: V4L2_XFER_FUNC_709
*
* V4L2_COLORSPACE_SRGB, V4L2_COLORSPACE_JPEG: V4L2_XFER_FUNC_SRGB
*
* V4L2_COLORSPACE_OPRGB: V4L2_XFER_FUNC_OPRGB
*
* V4L2_COLORSPACE_SMPTE240M: V4L2_XFER_FUNC_SMPTE240M
*
* V4L2_COLORSPACE_RAW: V4L2_XFER_FUNC_NONE
*
* V4L2_COLORSPACE_DCI_P3: V4L2_XFER_FUNC_DCI_P3
*/
V4L2_XFER_FUNC_DEFAULT = 0,
V4L2_XFER_FUNC_709 = 1,
V4L2_XFER_FUNC_SRGB = 2,
V4L2_XFER_FUNC_OPRGB = 3,
V4L2_XFER_FUNC_SMPTE240M = 4,
V4L2_XFER_FUNC_NONE = 5,
V4L2_XFER_FUNC_DCI_P3 = 6,
V4L2_XFER_FUNC_SMPTE2084 = 7,
};
enum v4l2_ycbcr_encoding
{
* various colorspaces:
*
* V4L2_COLORSPACE_SMPTE170M, V4L2_COLORSPACE_470_SYSTEM_M,
* V4L2_COLORSPACE_470_SYSTEM_BG, V4L2_COLORSPACE_SRGB,
* V4L2_COLORSPACE_OPRGB and V4L2_COLORSPACE_JPEG: V4L2_YCBCR_ENC_601
*
* V4L2_COLORSPACE_REC709 and V4L2_COLORSPACE_DCI_P3: V4L2_YCBCR_ENC_709
*
* V4L2_COLORSPACE_BT2020: V4L2_YCBCR_ENC_BT2020
*
* V4L2_COLORSPACE_SMPTE240M: V4L2_YCBCR_ENC_SMPTE240M
*/
V4L2_YCBCR_ENC_DEFAULT = 0,
V4L2_YCBCR_ENC_601 = 1,
V4L2_YCBCR_ENC_709 = 2,
V4L2_YCBCR_ENC_XV601 = 3,
V4L2_YCBCR_ENC_XV709 = 4,
* originally due to a misunderstanding of the sYCC standard. It should
* not be used, instead use V4L2_YCBCR_ENC_601.
*/
V4L2_YCBCR_ENC_SYCC = 5,
V4L2_YCBCR_ENC_BT2020 = 6,
V4L2_YCBCR_ENC_BT2020_CONST_LUM = 7,
V4L2_YCBCR_ENC_SMPTE240M = 8,
};
enum v4l2_quantization
{
* For Y'CbCr the quantization is always limited range, except
* for COLORSPACE_JPEG: this is full range.
*/
V4L2_QUANTIZATION_DEFAULT = 0,
V4L2_QUANTIZATION_FULL_RANGE = 1,
V4L2_QUANTIZATION_LIM_RANGE = 2,
};
enum v4l2_field
{
V4L2_FIELD_ANY = 0,
V4L2_FIELD_NONE = 1,
V4L2_FIELD_TOP = 2,
V4L2_FIELD_BOTTOM = 3,
V4L2_FIELD_INTERLACED = 4,
V4L2_FIELD_SEQ_TB = 5,
V4L2_FIELD_SEQ_BT = 6,
V4L2_FIELD_ALTERNATE = 7,
V4L2_FIELD_INTERLACED_TB = 8,
V4L2_FIELD_INTERLACED_BT = 9,
};
enum v4l2_buf_mode
{
V4L2_BUF_MODE_RING = 0,
V4L2_BUF_MODE_FIFO = 1,
};
struct v4l2_requestbuffers
{
uint32_t count;
* Supported maximum is
* is V4L2_REQBUFS_COUNT_MAX
*/
uint32_t type;
uint32_t memory;
uint32_t mode;
};
typedef struct v4l2_requestbuffers v4l2_requestbuffers_t;
struct v4l2_timecode
{
uint32_t type;
uint32_t flags;
uint8_t frames;
uint8_t seconds;
uint8_t minutes;
uint8_t hours;
uint8_t userbits[4];
};
typedef struct v4l2_timecode v4l2_timecode_t;
struct v4l2_plane
{
uint32_t bytesused;
uint32_t length;
union
{
uint32_t mem_offset;
unsigned long userptr;
int fd;
void *vaddr;
} m;
uint32_t data_offset;
uint32_t reserved[11];
};
typedef struct v4l2_plane v4l2_plane_t;
* Parameter of ioctl(VIDIOC_QBUF) and ioctl(VIDIOC_DQBUF).
* Currently, support only index, type, bytesused, memory,
* m.userptr, and length.
*/
struct v4l2_buffer
{
uint32_t index;
uint32_t type;
uint32_t bytesused;
uint32_t flags;
uint32_t field;
struct timeval timestamp;
struct v4l2_timecode timecode;
uint32_t sequence;
uint32_t memory;
union
{
uint32_t offset;
unsigned long userptr;
struct v4l2_plane *planes;
int fd;
void *vaddr;
} m;
uint32_t length;
};
typedef struct v4l2_buffer v4l2_buffer_t;
#define V4L2_BUF_FLAG_KEYFRAME 0x00000008
#define V4L2_BUF_FLAG_PFRAME 0x00000010
#define V4L2_BUF_FLAG_BFRAME 0x00000020
#define V4L2_BUF_FLAG_ERROR 0x00000040
#define V4L2_BUF_FLAG_LAST 0x00100000
struct v4l2_fmtdesc
{
uint16_t index;
uint16_t type;
uint32_t flags;
char description[V4L2_FMT_DSC_MAX];
uint32_t pixelformat;
uint32_t mbus_code;
};
enum v4l2_fmt_flag
{
V4L2_FMT_FLAG_COMPRESSED = 0x0001,
V4L2_FMT_FLAG_EMULATED = 0x0002,
};
enum v4l2_frmsizetypes
{
V4L2_FRMSIZE_TYPE_DISCRETE = 1,
V4L2_FRMSIZE_TYPE_CONTINUOUS = 2,
V4L2_FRMSIZE_TYPE_STEPWISE = 3,
};
struct v4l2_frmsize_discrete
{
uint16_t width;
uint16_t height;
};
struct v4l2_frmsize_stepwise
{
uint16_t min_width;
uint16_t max_width;
uint16_t step_width;
uint16_t min_height;
uint16_t max_height;
uint16_t step_height;
};
struct v4l2_frmsizeenum
{
uint32_t index;
uint32_t buf_type;
uint32_t pixel_format;
uint32_t type;
* Otherwise, use stepwise.
*/
union
{
struct v4l2_frmsize_discrete discrete;
struct v4l2_frmsize_stepwise stepwise;
};
};
enum v4l2_frmivaltypes
{
V4L2_FRMIVAL_TYPE_DISCRETE = 1,
V4L2_FRMIVAL_TYPE_CONTINUOUS = 2,
V4L2_FRMIVAL_TYPE_STEPWISE = 3,
};
struct v4l2_frmival_stepwise
{
struct v4l2_fract min;
struct v4l2_fract max;
struct v4l2_fract step;
};
struct v4l2_frmivalenum
{
uint32_t index;
uint32_t buf_type;
uint32_t pixel_format;
uint16_t width;
uint16_t height;
uint32_t type;
union
{
struct v4l2_fract discrete;
struct v4l2_frmival_stepwise stepwise;
};
};
struct v4l2_pix_format
{
uint32_t width;
uint32_t height;
uint32_t pixelformat;
uint32_t field;
uint32_t bytesperline;
uint32_t sizeimage;
uint32_t colorspace;
uint32_t priv;
uint32_t flags;
union
{
uint32_t ycbcr_enc;
uint32_t hsv_enc;
};
uint32_t quantization;
uint32_t xfer_func;
};
typedef struct v4l2_pix_format v4l2_pix_format_t;
* sizeimage: maximum size in bytes required for data, for which
* this plane will be used
* bytesperline: distance in bytes between the leftmost pixels in two
* adjacent lines
*/
struct v4l2_plane_pix_format
{
uint32_t sizeimage;
uint32_t bytesperline;
uint16_t reserved[6];
};
* width: image width in pixels
* height: image height in pixels
* pixelformat: little endian four character code (fourcc)
* field: enum v4l2_field; field order (for interlaced video)
* colorspace: enum v4l2_colorspace; supplemental to pixelformat
* plane_fmt: per-plane information
* num_planes: number of planes for this format
* flags: format flags (V4L2_PIX_FMT_FLAG_*)
* ycbcr_enc: enum v4l2_ycbcr_encoding, Y'CbCr encoding
* quantization: enum v4l2_quantization, colorspace quantization
* xfer_func: enum v4l2_xfer_func, colorspace transfer function
*/
struct v4l2_pix_format_mplane
{
uint32_t width;
uint32_t height;
uint32_t pixelformat;
uint32_t field;
uint32_t colorspace;
struct v4l2_plane_pix_format plane_fmt[VIDEO_MAX_PLANES];
uint8_t num_planes;
uint8_t flags;
union
{
uint8_t ycbcr_enc;
uint8_t hsv_enc;
};
uint8_t quantization;
uint8_t xfer_func;
uint8_t reserved[7];
};
struct v4l2_meta_format
{
uint32_t dataformat;
uint32_t buffersize;
uint32_t width;
uint32_t height;
uint32_t bytesperline;
};
struct v4l2_format
{
uint32_t type;
union
{
struct v4l2_pix_format pix;
struct v4l2_pix_format_mplane pix_mp;
struct v4l2_meta_format meta;
} fmt;
};
typedef struct v4l2_format v4l2_format_t;
struct v4l2_captureparm
{
uint32_t capability;
uint32_t capturemode;
struct v4l2_fract timeperframe;
uint32_t extendedmode;
uint32_t readbuffers;
};
struct v4l2_outputparm
{
uint32_t capability;
uint32_t outputmode;
struct v4l2_fract timeperframe;
uint32_t extendedmode;
uint32_t writebuffers;
uint32_t reserved[4];
};
struct v4l2_cropcap
{
uint32_t type;
struct v4l2_rect bounds;
struct v4l2_rect defrect;
struct v4l2_fract pixelaspect;
};
enum v4l2_capture_mode
{
V4L2_MODE_HIGHQUALITY = 0x0001,
};
enum v4l2_capture_capability
{
V4L2_CAP_TIMEPERFRAME = 0x1000,
};
struct v4l2_streamparm
{
uint32_t type;
union
{
struct v4l2_captureparm capture;
struct v4l2_outputparm output;
} parm;
uint8_t raw_data[200];
};
#define V4L2_EVENT_ALL 0
#define V4L2_EVENT_VSYNC 1
#define V4L2_EVENT_EOS 2
#define V4L2_EVENT_CTRL 3
#define V4L2_EVENT_FRAME_SYNC 4
#define V4L2_EVENT_SOURCE_CHANGE 5
#define V4L2_EVENT_MOTION_DET 6
#define V4L2_EVENT_PRIVATE_START 0x08000000
struct v4l2_event_vsync
{
uint8_t field;
};
#define V4L2_EVENT_CTRL_CH_VALUE (1 << 0)
#define V4L2_EVENT_CTRL_CH_FLAGS (1 << 1)
#define V4L2_EVENT_CTRL_CH_RANGE (1 << 2)
struct v4l2_event_ctrl
{
uint32_t changes;
uint32_t type;
union
{
int32_t value;
int64_t value64;
};
uint32_t flags;
int32_t minimum;
int32_t maximum;
int32_t step;
int32_t default_value;
};
struct v4l2_event_frame_sync
{
uint32_t frame_sequence;
};
#define V4L2_EVENT_SRC_CH_RESOLUTION (1 << 0)
struct v4l2_event_src_change
{
uint32_t changes;
};
#define V4L2_EVENT_MD_FL_HAVE_FRAME_SEQ (1 << 0)
* flags: if V4L2_EVENT_MD_FL_HAVE_FRAME_SEQ is set, then the
* frame_sequence field is valid.
* frame_sequence: the frame sequence number associated with this event.
* region_mask: which regions detected motion.
*/
struct v4l2_event_motion_det
{
uint32_t flags;
uint32_t frame_sequence;
uint32_t region_mask;
};
struct v4l2_event
{
uint32_t type;
union
{
struct v4l2_event_vsync vsync;
struct v4l2_event_ctrl ctrl;
struct v4l2_event_frame_sync frame_sync;
struct v4l2_event_src_change src_change;
struct v4l2_event_motion_det motion_det;
uint8_t data[64];
} u;
uint32_t pending;
uint32_t sequence;
struct timespec timestamp;
uint32_t id;
uint32_t reserved[8];
};
#define V4L2_EVENT_SUB_FL_SEND_INITIAL (1 << 0)
#define V4L2_EVENT_SUB_FL_ALLOW_FEEDBACK (1 << 1)
struct v4l2_event_subscription
{
uint32_t type;
uint32_t id;
uint32_t flags;
uint32_t reserved[5];
};
enum v4l2_ctrl_type
{
V4L2_CTRL_TYPE_INTEGER = 1,
V4L2_CTRL_TYPE_BOOLEAN = 2,
V4L2_CTRL_TYPE_MENU = 3,
V4L2_CTRL_TYPE_BUTTON = 4,
V4L2_CTRL_TYPE_INTEGER64 = 5,
V4L2_CTRL_TYPE_CTRL_CLASS = 6,
V4L2_CTRL_TYPE_STRING = 7,
V4L2_CTRL_TYPE_BITMASK = 8,
V4L2_CTRL_TYPE_INTEGER_MENU = 9,
V4L2_CTRL_TYPE_U8FIXEDPOINT_Q7 = 10,
V4L2_CTRL_TYPE_U16FIXEDPOINT_Q8 = 11,
V4L2_CTRL_TYPE_INTEGER_TIMES_3 = 12,
V4L2_CTRL_COMPOUND_TYPES = 0x0100,
V4L2_CTRL_TYPE_U8 = 0x0100,
V4L2_CTRL_TYPE_U16 = 0x0101,
V4L2_CTRL_TYPE_U32 = 0x0102,
};
struct v4l2_queryctrl
{
uint16_t ctrl_class;
uint16_t id;
uint16_t type;
char name[32];
int32_t minimum;
int32_t maximum;
uint32_t step;
int32_t default_value;
uint32_t flags; };
struct v4l2_query_ext_ctrl
{
uint16_t ctrl_class;
uint16_t id;
uint16_t type;
char name[32];
int64_t minimum;
int64_t maximum;
uint64_t step;
int64_t default_value;
uint32_t flags;
uint32_t elem_size;
uint32_t elems;
uint32_t nr_of_dims;
uint32_t dims[V4L2_CTRL_MAX_DIMS];
};
struct v4l2_querymenu
{
uint16_t ctrl_class;
uint16_t id;
uint32_t index;
union
{
char name[32];
int64_t value;
};
};
#define V4L2_CTRL_FLAG_DISABLED 0x0001
#define V4L2_CTRL_FLAG_GRABBED 0x0002
#define V4L2_CTRL_FLAG_READ_ONLY 0x0004
#define V4L2_CTRL_FLAG_UPDATE 0x0008
#define V4L2_CTRL_FLAG_INACTIVE 0x0010
#define V4L2_CTRL_FLAG_SLIDER 0x0020
#define V4L2_CTRL_FLAG_WRITE_ONLY 0x0040
#define V4L2_CTRL_FLAG_VOLATILE 0x0080
#define V4L2_CTRL_FLAG_HAS_PAYLOAD 0x0100
#define V4L2_CTRL_FLAG_EXECUTE_ON_WRITE 0x0200
#define V4L2_CTRL_FLAG_MODIFY_LAYOUT 0x0400
#define V4L2_CTRL_FLAG_DYNAMIC_ARRAY 0x0800
#define V4L2_CTRL_FLAG_NEXT_CTRL 0x80000000
#define V4L2_CTRL_FLAG_NEXT_COMPOUND 0x40000000
#define V4L2_CID_MAX_CTRLS 1024
#define V4L2_CID_PRIVATE_BASE 0x08000000
struct v4l2_input
{
uint32_t index;
uint8_t name[32];
uint32_t type;
uint32_t audioset;
uint32_t tuner;
v4l2_std_id std;
uint32_t status;
uint32_t capabilities;
uint32_t reserved[3];
};
enum v4l2_input_type
{
V4L2_INPUT_TYPE_TUNER = 1,
V4L2_INPUT_TYPE_CAMERA = 2,
V4L2_INPUT_TYPE_TOUCH = 3,
};
enum v4l2_input_status
{
V4L2_IN_ST_NO_POWER = 0x00000001,
V4L2_IN_ST_NO_SIGNAL = 0x00000002,
V4L2_IN_ST_NO_COLOR = 0x00000004,
V4L2_IN_ST_HFLIP = 0x00000010,
V4L2_IN_ST_VFLIP = 0x00000020,
V4L2_IN_ST_NO_H_LOCK = 0x00000100,
V4L2_IN_ST_COLOR_KILL = 0x00000200,
V4L2_IN_ST_NO_V_LOCK = 0x00000400,
V4L2_IN_ST_NO_STD_LOCK = 0x00000800,
V4L2_IN_ST_NO_SYNC = 0x00010000,
V4L2_IN_ST_NO_EQU = 0x00020000,
V4L2_IN_ST_NO_CARRIER = 0x00040000,
V4L2_IN_ST_MACROVISION = 0x01000000,
V4L2_IN_ST_NO_ACCESS = 0x02000000,
V4L2_IN_ST_VTR = 0x04000000,
};
enum v4l2_input_capabilities
{
V4L2_IN_CAP_DV_TIMINGS = 0x00000002,
V4L2_IN_CAP_STD = 0x00000004,
V4L2_IN_CAP_NATIVE_SIZE = 0x00000008,
};
enum v4l2_input_capabilites_compat
{
V4L2_IN_CAP_CUSTOM_TIMINGS = V4L2_IN_CAP_DV_TIMINGS,
};
struct v4l2_output
{
uint32_t index;
uint8_t name[32];
uint32_t type;
uint32_t audioset;
uint32_t modulator;
v4l2_std_id std;
uint32_t capabilities;
uint32_t reserved[3];
};
enum v4l2_output_type
{
V4L2_OUTPUT_TYPE_MODULATOR = 1,
V4L2_OUTPUT_TYPE_ANALOG = 2,
V4L2_OUTPUT_TYPE_ANALOGVGAOVERLAY = 3,
};
enum v4l2_output_capabilities
{
V4L2_OUT_CAP_DV_TIMINGS = 0x00000002,
V4L2_OUT_CAP_STD = 0x00000004,
V4L2_OUT_CAP_NATIVE_SIZE = 0x00000008,
};
enum v4l2_output_capabilites_compat
{
V4L2_OUT_CAP_CUSTOM_TIMINGS = V4L2_OUT_CAP_DV_TIMINGS,
};
struct v4l2_control
{
uint16_t id;
int32_t value;
};
* ioctl(VIDIOC_G_EXT_CTRLS / VIDIOC_S_EXT_CTRLS)
*/
struct v4l2_ext_control
{
uint16_t id;
uint16_t size;
union
{
int32_t value;
int64_t value64;
char *string;
uint8_t *p_u8;
uint16_t *p_u16;
uint32_t *p_u32;
void *ptr;
};
};
struct v4l2_ext_controls
{
union
{
uint16_t ctrl_class;
uint16_t which;
};
uint16_t count;
uint16_t error_idx;
struct v4l2_ext_control *controls;
};
struct v4s_ext_controls_scene
{
enum v4l2_scene_mode mode;
struct v4l2_ext_controls control;
};
struct v4s_query_ext_ctrl_scene
{
enum v4l2_scene_mode mode;
struct v4l2_query_ext_ctrl control;
};
struct v4s_querymenu_scene
{
enum v4l2_scene_mode mode;
struct v4l2_querymenu menu;
};
struct v4l2_exportbuffer
{
uint32_t type;
uint32_t index;
uint32_t plane;
uint32_t flags;
uint32_t fd;
uint32_t reserved[11];
};
#define V4L2_ENC_CMD_START (0)
#define V4L2_ENC_CMD_STOP (1)
#define V4L2_ENC_CMD_PAUSE (2)
#define V4L2_ENC_CMD_RESUME (3)
#define V4L2_ENC_CMD_STOP_AT_GOP_END (1 << 0)
struct v4l2_encoder_cmd
{
uint32_t cmd;
uint32_t flags;
union
{
struct
{
uint32_t data[8];
} raw;
};
};
#define V4L2_DEC_CMD_START (0)
#define V4L2_DEC_CMD_STOP (1)
#define V4L2_DEC_CMD_PAUSE (2)
#define V4L2_DEC_CMD_RESUME (3)
* This ensures it can be extended safely in the future.
*/
struct v4l2_decoder_cmd
{
uint32_t cmd;
uint32_t flags;
union
{
struct
{
uint64_t pts;
} stop;
struct
{
* 1 specifies forward single stepping,
* -1 specifies backward single stepping,
* >1: playback at speed/1000 of the normal speed,
* <-1: reverse playback at (-speed/1000) of the normal speed.
*/
int32_t speed;
uint32_t format;
} start;
struct
{
uint32_t data[16];
} raw;
};
};
* Address pointing to struct v4l2_capability
*/
#define VIDIOC_QUERYCAP _VIDIOC(0x0000)
#define VIDIOC_ENUM_FMT _VIDIOC(0x0002)
#define VIDIOC_G_FMT _VIDIOC(0x0004)
#define VIDIOC_S_FMT _VIDIOC(0x0005)
#define VIDIOC_REQBUFS _VIDIOC(0x0008)
#define VIDIOC_QUERYBUF _VIDIOC(0x0009)
#define VIDIOC_G_FBUF _VIDIOC(0x000a)
#define VIDIOC_S_FBUF _VIDIOC(0x000b)
#define VIDIOC_OVERLAY _VIDIOC(0x000e)
#define VIDIOC_QBUF _VIDIOC(0x000f)
#define VIDIOC_EXPBUF _VIDIOC(0x0010)
#define VIDIOC_DQBUF _VIDIOC(0x0011)
#define VIDIOC_STREAMON _VIDIOC(0x0012)
#define VIDIOC_STREAMOFF _VIDIOC(0x0013)
#define VIDIOC_G_PARM _VIDIOC(0x0015)
#define VIDIOC_S_PARM _VIDIOC(0x0016)
#define VIDIOC_G_STD _VIDIOC(0x0017)
#define VIDIOC_S_STD _VIDIOC(0x0018)
#define VIDIOC_ENUMSTD _VIDIOC(0x0019)
#define VIDIOC_ENUMINPUT _VIDIOC(0x001a)
* This request is a special case of VIDIOC_G_EXT_CTRLS.
* Address pointing to struct #v4l2_control
*/
#define VIDIOC_G_CTRL _VIDIOC(0x001b)
* This request is a special case of VIDIOC_S_EXT_CTRLS.
* Address pointing to struct #v4l2_control
*/
#define VIDIOC_S_CTRL _VIDIOC(0x001c)
#define VIDIOC_QUERYCTRL _VIDIOC(0x0024)
#define VIDIOC_QUERYMENU _VIDIOC(0x0025)
#define VIDIOC_G_INPUT _VIDIOC(0x0026)
#define VIDIOC_S_INPUT _VIDIOC(0x0027)
#define VIDIOC_CROPCAP _VIDIOC(0x003a)
#define VIDIOC_QUERYSTD _VIDIOC(0x003f)
#define VIDIOC_TRY_FMT _VIDIOC(0x0040)
* Address pointing to struct #v4l2_ext_controls
*/
#define VIDIOC_G_EXT_CTRLS _VIDIOC(0x0047)
* Address pointing to struct #v4l2_ext_controls
*/
#define VIDIOC_S_EXT_CTRLS _VIDIOC(0x0048)
* Address pointing to struct #v4l2_ext_controls
*/
#define VIDIOC_TRY_EXT_CTRLS _VIDIOC(0x0049)
#define VIDIOC_ENUM_FRAMESIZES _VIDIOC(0x004a)
#define VIDIOC_ENUM_FRAMEINTERVALS _VIDIOC(0x004b)
#define VIDIOC_ENCODER_CMD _VIDIOC(0x004d)
#define VIDIOC_DQEVENT _VIDIOC(0x0059)
#define VIDIOC_SUBSCRIBE_EVENT _VIDIOC(0x005a)
#define VIDIOC_UNSUBSCRIBE_EVENT _VIDIOC(0x005b)
* Address pointing to struct v4l2_selection
*/
#define VIDIOC_G_SELECTION _VIDIOC(0x005e)
* Address pointing to struct v4l2_selection
*/
#define VIDIOC_S_SELECTION _VIDIOC(0x005f)
#define VIDIOC_DECODER_CMD _VIDIOC(0x0060)
#define VIDIOC_QUERY_EXT_CTRL _VIDIOC(0x00c0)
* enum #v4l2_buf_type
*/
#define VIDIOC_CANCEL_DQBUF _VIDIOC(0x00c1)
#define VIDIOC_DO_HALFPUSH _VIDIOC(0x00c2)
*
* Type is int32_t, not address pointer.\n
* 0 or negative value means continuing until VIDIOC_TAKEPICT_STOP. \n
* Positive value(to be supported) means continuing
* up to a specified number of times or until VIDIOC_TAKEPICT_STOP.
*/
#define VIDIOC_TAKEPICT_START _VIDIOC(0x00c3)
#define VIDIOC_TAKEPICT_STOP _VIDIOC(0x00c4)
* Address pointing to struct v4s_query_ext_ctrl_scene
*/
#define V4SIOC_QUERY_EXT_CTRL_SCENE _VIDIOC(0x00c5)
* Address pointing to struct v4s_querymenu_scene
*/
#define V4SIOC_QUERYMENU_SCENE _VIDIOC(0x00c6)
* Address pointing to struct v4s_ext_controls_scene
*/
#define V4SIOC_G_EXT_CTRLS_SCENE _VIDIOC(0x00c7)
* Address pointing to struct v4s_ext_controls_scene
*/
#define V4SIOC_S_EXT_CTRLS_SCENE _VIDIOC(0x00c8)
#ifdef __cplusplus
}
#endif
#endif