Chinaunix首页 | 论坛 | 博客
  • 博客访问: 492939
  • 博文数量: 154
  • 博客积分: 746
  • 博客等级: 入伍新兵
  • 技术积分: 1129
  • 用 户 组: 普通用户
  • 注册时间: 2011-05-20 09:20
个人简介

此生既入苦寒山,何妨再攀险峰!

文章分类

全部博文(154)

文章存档

2017年(1)

2016年(2)

2015年(25)

2014年(24)

2013年(8)

2012年(15)

2011年(79)

分类: LINUX

2015-03-09 16:09:25

问:
     我们在调试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));
}
 
添加上面红色这一段代码试试看下。
阅读(2073) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~