问:
我们在调试V4L2的时候,因为需要重新设置主次通道的长宽尺寸,
所以需要重启V4L2模块,但是我们重启的时候,经常出现如下的问题:
VIDIOC_S_CROP error 16, Device or resource busy
VIDIOC_STREAMOFF error 16, Device or resource busy
我们重启之前,代码里面已经正常关闭前一次打开的设备了,关闭代码如下:
enum v4l2_buf_type type;
type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
if (-1 == xioctl(m_tParam.nDevFd, VIDIOC_STREAMOFF, &type)) {
LOGERR("VIDIOC_STREAMOFF error %d, %s\n", errno, strerror(errno));
return -1;
}
LOGDEBUG("end VIDIOC_STREAMOFF\n");
if (-1 == close(m_tParam.nDevFd)) {
LOGERR("close vcap fd: %d error %d, %s\n", m_tParam.nDevFd, errno,
strerror(errno));
return -1;
} else LOGDEBUG("close vcap fd: %d\n", m_tParam.nDevFd);
回复:
在open camera函数的open操作后,再加入fcntl设置一下camera句柄属性 ,示例如下:
fd = open(dev_name, O_RDWR | O_NONBLOCK, 0);
if (-1 == fd) {
fprintf(stderr, "Cannot open '%s': %d, %s\n",
dev_name, errno, strerror(errno));
exit(EXIT_FAILURE);
}
if(fcntl(fd, F_SETFD, FD_CLOEXEC) == -1)
{
fprintf(stderr, "[%s;%s]error:%s\n",
__FILE__, __func__, strerror(errno));
}
添加上面红色这一段代码试试看下。
阅读(2048) | 评论(0) | 转发(0) |