Ubuntu虚拟机用V4L2图像采集总是隔一段时间就卡死在VIDIOC_DQBUF
最近在编写一个项目时使用v4l2进行图像采集,持续采集一段时间后程序就会卡死在 ioctl(camfd , VIDIOC_DQBUF, &v4lbuf); 这个语句中。 经过在网络上进行搜索,发现用一个select函数可以对阻塞进行监听:
int ts;
fd_set fds;
struct timeval tv;
FD_ZERO (&fds);
FD_SET (camfd, &fds);
/* Timeout. */
tv.tv_sec = 2;
tv.tv_usec = 0;
ts = select (camfd + 1, &fds, NULL, NULL, &tv);
if(ts == 0)
{
//重新初始化视频采集
}
ioctl(camfd , VIDIOC_DQBUF, &v4lbuf);
如果出现阻塞,那么ts返回值为0,就ts的值进行判断,如果ts为0,那么就重新初始化视频采集的流程,即可避免程序一直阻塞在VIDIOC_DQBUF这里。 出现阻塞的原因还不能确定,排除了分辨率的原因,应该和虚拟机有关系。
|