V4L2 捕获图像超时 求解解决方法

V4L2 捕获图像超时 求解解决方法

V4L2 捕获图像超时 求解

C/C++ code


//表示了处理图像的代码位置。
static void process_image(const void *p)
{
FILE* fp;
fp = fopen("test","w+");
fputs(p, fp);
fclose(fp);
// fflush(stdout);
}

static void mainloop(void)
{
unsigned int count;

count = 100;

while (count-- > 0) {
for (;;) {
fd_set fds;
struct timeval tv;
int r;

FD_ZERO(&fds);
FD_SET(fd, &fds);

/* Timeout. */
//tv.tv_sec = 2;
tv.tv_sec = 60;
tv.tv_usec = 0;

r = select (fd + 1, &fds, NULL, NULL, &tv);
if (-1 == r) {
if (EINTR == errno)
continue;

errno_exit("select");
}

if (0 == r) {
fprintf(stderr, "select timeoutn");
exit(EXIT_FAILURE);
}

if (read_frame())
break;

/* EAGAIN - continue select loop. */
}
}
}

static void start_capturing(void)
{
unsigned int i;
enum v4l2_buf_type type;

switch (io) {
case IO_METHOD_MMAP:
for (i = 0; i < n_buffers; ++i) {
struct v4l2_buffer buf;

CLEAR(buf);

buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
buf.memory = V4L2_MEMORY_MMAP;
buf.index = i;

if (-1 == xioctl(fd, VIDIOC_QBUF, &buf))
errno_exit("VIDIOC_QBUF");
}

type = V4L2_BUF_TYPE_VIDEO_CAPTURE;

if (-1 == xioctl(fd, VIDIOC_STREAMON, &type))
errno_exit("VIDIOC_STREAMON");
break;

case IO_METHOD_USERPTR:
for (i = 0; i < n_buffers; ++i) {
struct v4l2_buffer buf;

CLEAR(buf);

buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
buf.memory = V4L2_MEMORY_USERPTR;
buf.index = i;
buf.m.userptr = (unsigned long) buffers[i].start;
buf.length = buffers[i].length;

if (-1 == xioctl(fd, VIDIOC_QBUF, &buf))
errno_exit("VIDIOC_QBUF");
}

type = V4L2_BUF_TYPE_VIDEO_CAPTURE;

if (-1 == xioctl(fd, VIDIOC_STREAMON, &type))
errno_exit("VIDIOC_STREAMON");

break;
}
}

static void init_mmap(void)
{
struct v4l2_requestbuffers req;

CLEAR(req);

req.count = 4;
req.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
req.memory = V4L2_MEMORY_MMAP;

if (-1 == xioctl(fd, VIDIOC_REQBUFS, &req)) {
if (EINVAL == errno) {
printf("EINVAL == errnon");
fprintf(stderr, "%s does not support "
"memory mappingn", dev_name);
exit(EXIT_FAILURE);
} else {
printf("errno_exit(VIDIOC_REQBUFS);n");
errno_exit("VIDIOC_REQBUFS&q

V4L2 捕获图像超时 求解解决方法

相关文章:

你感兴趣的文章:

标签云: