copy part of linux videodev2.h which is used in v4l2m2m

Signed-off-by: wangzhaofeng <wangzhaofeng@xiaomi.com>
This commit is contained in:
wangzhaofeng 2023-08-04 09:43:33 +08:00 committed by Xiang Xiao
parent a6dc4412ba
commit 1967b8432a

View File

@ -44,6 +44,9 @@ extern "C"
* Pre-processor Definitions
****************************************************************************/
#define VIDEO_MAX_FRAME 32
#define VIDEO_MAX_PLANES 8
/* Query device capability
* Address pointing to struct v4l2_capability
*/
@ -156,6 +159,10 @@ extern "C"
#define VIDIOC_S_INPUT _VIDIOC(0x0027)
/* Set video crop and scale */
#define VIDIOC_CROPCAP _VIDIOC(0x003a)
/* Query video standard */
#define VIDIOC_QUERYSTD _VIDIOC(0x003f)
@ -190,6 +197,18 @@ extern "C"
#define VIDIOC_ENUM_FRAMEINTERVALS _VIDIOC(0x004b)
/* Execute an encoder command */
#define VIDIOC_ENCODER_CMD _VIDIOC(0x004d)
/* Dequeue event */
#define VIDIOC_DQEVENT _VIDIOC(0x0059)
/* Subscribe or unsubscribe event */
#define VIDIOC_SUBSCRIBE_EVENT _VIDIOC(0x005a)
/* Get clip
* Address pointing to struct v4l2_selection
*/
@ -202,6 +221,10 @@ extern "C"
#define VIDIOC_S_SELECTION _VIDIOC(0x005f)
/* Execute an decoder command */
#define VIDIOC_DECODER_CMD _VIDIOC(0x0060)
/* Query control */
#define VIDIOC_QUERY_EXT_CTRL _VIDIOC(0x00c0)
@ -437,6 +460,7 @@ extern "C"
#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')
/* JPEG + sub image */
@ -723,10 +747,25 @@ enum v4l2_buf_type
V4L2_BUF_TYPE_SDR_CAPTURE = 11, /* Software Defined Radio capture stream */
V4L2_BUF_TYPE_SDR_OUTPUT = 12, /* Software Defined Radio output stream */
V4L2_BUF_TYPE_META_CAPTURE = 13, /* Metadata capture */
V4L2_BUF_TYPE_META_OUTPUT = 14, /* Metadata output */
V4L2_BUF_TYPE_PRIVATE = 0x80, /* Deprecated, do not use */
V4L2_BUF_TYPE_STILL_CAPTURE = 0x81 /* Single-planar still capture stream */
};
#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)
/* Memory I/O method. Currently, support only V4L2_MEMORY_USERPTR. */
enum v4l2_memory
@ -737,6 +776,179 @@ enum v4l2_memory
V4L2_MEMORY_DMABUF = 4, /* DMA shared buffer I/O */
};
/* See also http://vektor.theorem.ca/graphics/ycbcr/ */
enum v4l2_colorspace
{
/* Default colorspace, i.e. let the driver figure it out.
* Can only be used with video capture.
*/
V4L2_COLORSPACE_DEFAULT = 0,
/* SMPTE 170M: used for broadcast NTSC/PAL SDTV */
V4L2_COLORSPACE_SMPTE170M = 1,
/* Obsolete pre-1998 SMPTE 240M HDTV standard, superseded by Rec 709 */
V4L2_COLORSPACE_SMPTE240M = 2,
/* Rec.709: used for HDTV */
V4L2_COLORSPACE_REC709 = 3,
/* Deprecated, do not use. No driver will ever return this. This was
* based on a misunderstanding of the bt878 datasheet.
*/
V4L2_COLORSPACE_BT878 = 4,
/* NTSC 1953 colorspace. This only makes sense when dealing with
* really, really old NTSC recordings. Superseded by SMPTE 170M.
*/
V4L2_COLORSPACE_470_SYSTEM_M = 5,
/* EBU Tech 3213 PAL/SECAM colorspace. This only makes sense when
* dealing with really old PAL/SECAM recordings. Superseded by
* SMPTE 170M.
*/
V4L2_COLORSPACE_470_SYSTEM_BG = 6,
/* Effectively shorthand for V4L2_COLORSPACE_SRGB, V4L2_YCBCR_ENC_601
* and V4L2_QUANTIZATION_FULL_RANGE. To be used for (Motion-)JPEG.
*/
V4L2_COLORSPACE_JPEG = 7,
/* For RGB colorspaces such as produces by most webcams. */
V4L2_COLORSPACE_SRGB = 8,
/* opRGB colorspace */
V4L2_COLORSPACE_OPRGB = 9,
/* BT.2020 colorspace, used for UHDTV. */
V4L2_COLORSPACE_BT2020 = 10,
/* Raw colorspace: for RAW unprocessed images */
V4L2_COLORSPACE_RAW = 11,
/* DCI-P3 colorspace, used by cinema projectors */
V4L2_COLORSPACE_DCI_P3 = 12,
};
/* Determine how COLORSPACE_DEFAULT should map to a proper colorspace.
* 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
{
/* Mapping of V4L2_XFER_FUNC_DEFAULT to actual transfer functions
* 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
{
/* Mapping of V4L2_YCBCR_ENC_DEFAULT to actual encodings for the
* 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,
/* ITU-R 601 -- SDTV */
V4L2_YCBCR_ENC_601 = 1,
/* Rec. 709 -- HDTV */
V4L2_YCBCR_ENC_709 = 2,
/* ITU-R 601/EN 61966-2-4 Extended Gamut -- SDTV */
V4L2_YCBCR_ENC_XV601 = 3,
/* Rec. 709/EN 61966-2-4 Extended Gamut -- HDTV */
V4L2_YCBCR_ENC_XV709 = 4,
/* sYCC (Y'CbCr encoding of sRGB), identical to ENC_601. It was added
* 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,
/* BT.2020 Non-constant Luminance Y'CbCr */
V4L2_YCBCR_ENC_BT2020 = 6,
/* BT.2020 Constant Luminance Y'CbcCrc */
V4L2_YCBCR_ENC_BT2020_CONST_LUM = 7,
/* SMPTE 240M -- Obsolete HDTV */
V4L2_YCBCR_ENC_SMPTE240M = 8,
};
enum v4l2_quantization
{
/* The default for R'G'B' quantization is always full range.
* 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,
};
/* Field order. Currently, support only V4L2_FIELD_ANY */
enum v4l2_field
@ -832,6 +1044,14 @@ struct v4l2_buffer
typedef struct v4l2_buffer v4l2_buffer_t;
/* Image is a keyframe (I-frame) */
#define V4L2_BUF_FLAG_KEYFRAME 0x00000008
/* mem2mem encoder/decoder */
#define V4L2_BUF_FLAG_LAST 0x00100000
struct v4l2_fmtdesc
{
uint16_t index; /* Format number */
@ -945,12 +1165,62 @@ struct v4l2_pix_format
typedef struct v4l2_pix_format v4l2_pix_format_t;
struct v4l2_format
/* struct v4l2_plane_pix_format - additional, per-plane format definition
* @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 type; /* enum #v4l2_buf_type. */
uint32_t sizeimage;
uint32_t bytesperline;
uint16_t reserved[6];
};
/* struct v4l2_pix_format_mplane - multiplanar format definition
* @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
{
struct v4l2_pix_format pix; /* Image format */
uint8_t ycbcr_enc;
uint8_t hsv_enc;
};
uint8_t quantization;
uint8_t xfer_func;
uint8_t reserved[7];
};
struct v4l2_format
{
uint32_t type; /* enum #v4l2_buf_type. */
union
{
struct v4l2_pix_format pix; /* Image format */
struct v4l2_pix_format_mplane pix_mp; /* V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE */
} fmt;
};
@ -965,6 +1235,14 @@ struct v4l2_captureparm
uint32_t readbuffers; /* # of buffers for read */
};
struct v4l2_cropcap
{
uint32_t type; /* enum v4l2_buf_type */
struct v4l2_rect bounds;
struct v4l2_rect defrect;
struct v4l2_fract pixelaspect;
};
/* Flags for 'capability' and 'capturemode' fields */
enum v4l2_capture_mode
@ -986,6 +1264,106 @@ struct v4l2_streamparm
} parm;
};
/* E V E N T S */
#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
/* Payload for V4L2_EVENT_VSYNC */
struct v4l2_event_vsync
{
/* Can be V4L2_FIELD_ANY, _NONE, _TOP or _BOTTOM */
uint8_t field;
};
/* Payload for V4L2_EVENT_CTRL */
#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)
/* struct v4l2_event_motion_det - motion detection event
* @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,
@ -1218,6 +1596,70 @@ struct v4s_querymenu_scene
struct v4l2_querymenu menu; /* Same as VIDIOC_QUERYMENU */
};
#define V4L2_ENC_CMD_START (0)
#define V4L2_ENC_CMD_STOP (1)
#define V4L2_ENC_CMD_PAUSE (2)
#define V4L2_ENC_CMD_RESUME (3)
/* Flags for V4L2_ENC_CMD_STOP */
#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;
};
};
/* Decoder commands */
#define V4L2_DEC_CMD_START (0)
#define V4L2_DEC_CMD_STOP (1)
#define V4L2_DEC_CMD_PAUSE (2)
#define V4L2_DEC_CMD_RESUME (3)
/* The structure must be zeroed before use by the application
* 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
{
/* 0 or 1000 specifies normal speed,
* 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;
};
};
/****************************************************************************
* Public Function Prototypes
****************************************************************************/