V4L2在VIDIOC_DQBUF处阻塞解决方法

之前遇见在VIDIOC_DQBUF处阻塞问题时,只是简单的设置了一下分辨率解决了当前问题就没再继续处理了。今天再看官网的demo时,才发现有个select函数可以来监听ioctl超时问题:

fd_set fds;
struct timeval tv;
int r;

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

/* Timeout. */
tv.tv_sec = 2;
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 timeout\n");
	exit (EXIT_FAILURE);
}

if (read_frame ())
	break;

/* EAGAIN - continue select loop. */

不过阻塞的具体原因还不清楚,目前猜测是USB传输的问题,因为在USB3.0下无问题,切换到USB2.0就不行。

你可能感兴趣的:(C语言,Linux)