40#ifndef V4L2_COMMON_4B01337E_4F0D_48EC_91A7_D220AD919D3B
41#define V4L2_COMMON_4B01337E_4F0D_48EC_91A7_D220AD919D3B
43#include <linux/videodev2.h>
50#define V4L2_PROBE_MAX 64
70 {V4L2_PIX_FMT_YUYV,
YUYV},
71 {V4L2_PIX_FMT_UYVY,
UYVY},
72 {V4L2_PIX_FMT_YUV420,
I420},
73#ifdef V4L2_PIX_FMT_YUVA32
74 {V4L2_PIX_FMT_YUVA32,
Y416},
76#ifdef V4L2_PIX_FMT_Y210
77 {V4L2_PIX_FMT_Y210,
Y216},
79#ifdef V4L2_PIX_FMT_Y212
80 {V4L2_PIX_FMT_Y212,
Y216},
82#ifdef V4L2_PIX_FMT_Y216
83 {V4L2_PIX_FMT_Y216,
Y216},
85 {V4L2_PIX_FMT_RGB24,
RGB},
86 {V4L2_PIX_FMT_BGR24,
BGR},
87 {V4L2_PIX_FMT_RGB32,
RGBA},
88#ifdef V4L2_PIX_FMT_RGBA32
89 {V4L2_PIX_FMT_RGBA32,
RGBA},
91#ifdef V4L2_PIX_FMT_RGBX32
92 {V4L2_PIX_FMT_RGBX32,
RGBA},
94#ifdef V4L2_PIX_FMT_RGBX1010102
95 {V4L2_PIX_FMT_RGBX1010102,
R10k},
97#ifdef V4L2_PIX_FMT_RGBA1010102
98 {V4L2_PIX_FMT_RGBA1010102,
R10k},
100 {V4L2_PIX_FMT_MJPEG,
MJPG},
101 {V4L2_PIX_FMT_JPEG,
MJPG},
102 {V4L2_PIX_FMT_H264,
H264},
104#ifdef V4L2_PIX_FMT_HEVC
105 {V4L2_PIX_FMT_HEVC,
H265},
107#ifdef V4L2_PIX_FMT_HEVC
108 {V4L2_PIX_FMT_VP9,
VP9},
118 if (ioctl (fd, VIDIOC_REQBUFS, reqbuf) != 0) {
127 if (reqbuf->count < 2) {
133 for (
unsigned int i = 0; i < reqbuf->count; i++) {
134 struct v4l2_buffer buf;
135 memset(&buf, 0,
sizeof(buf));
136 buf.type = reqbuf->type;
137 buf.memory = V4L2_MEMORY_MMAP;
140 if (-1 == ioctl (fd, VIDIOC_QUERYBUF, &buf)) {
145 buffers[i].
length = buf.length;
147 buffers[i].
start = mmap(NULL, buf.length,
148 PROT_READ | PROT_WRITE,
152 if (MAP_FAILED == buffers[i].
start) {
161 if(ioctl(fd, VIDIOC_QBUF, &buf) != 0) {
171 int fd = open(dev_name, O_RDWR);
175 dev_name, strerror_r(errno, errbuf,
sizeof errbuf));
179 struct v4l2_capability capability;
180 memset(&capability, 0,
sizeof(capability));
181 if (ioctl(fd, VIDIOC_QUERYCAP, &capability) != 0) {
187 if (!(capability.device_caps & cap)) {
188 const char *
cap_str = cap == V4L2_CAP_VIDEO_CAPTURE ?
"capture" :
"playback";
194 if (!(capability.device_caps & V4L2_CAP_STREAMING)) {
202 if (ioctl(fd, VIDIOC_S_INPUT, &index) != 0) {
void log_msg(int level, const char *format,...)
void log_perror(int level, const char *msg)
#define LOG_LEVEL_ERROR
general errors
#define LOG_LEVEL_VERBOSE
This file contains some common data types.
@ LOWER_FIELD_FIRST
First stored field is bottom, followed by top.
@ UPPER_FIELD_FIRST
First stored field is top, followed by bottom.
@ PROGRESSIVE
progressive frame
@ INTERLACED_MERGED
Columngs of both fields are interlaced together.
@ YUYV
YCbCr 422 8-bit - Y0 Cb Y1 Cr.
@ R10k
RGB 10-bit packed - RGBX, big-endian (2 bit padding)
@ RGB
RGB 8-bit (packed into 24-bit word)
@ UYVY
YCbCr 422 8-bit - Cb Y0 Cr Y1.
@ Y416
interleaved little-endian YCbCr 4444 16-bit - UYVA
@ Y216
YCbCr 422 16-bit little-endian - Y0 Cb Y1 Cr.
@ MJPG
JPEG image, without restart intervals.
@ RGBA
RGBA 8-bit, big-endian.
static struct @67 v4l2_field_map[]
static struct @68 v4l2_ug_map[]
static int try_open_v4l2_device(int log_level, const char *dev_name, int cap)
static _Bool set_v4l2_buffers(int fd, struct v4l2_requestbuffers *reqbuf, struct v4l2_buffer_data *buffers)