用V4L2采集图像经常卡死在VIDIOC_DQBUF
来源:互联网 发布:视频后期配音软件 编辑:程序博客网 时间:2024/05/02 06:45
最初写了一个小程序,循环采集10次图像,在PC机ubuntu12.4(在虚拟机里)中运行,没有发现问题,后来把采集次数改成100次后,发现经常会卡死在ioctl(fd, VIDIOC_DQBUF, &queue_buf)这里。
一开始怀疑采集间隔太短了,设备没有准备好,就把采集间隔调到1s,但是仍然会卡死,而卡在第几次采集中则不是固定的。
百度了一下,发现这个问题不算罕见,有几个论坛中有过讨论,不过最后没有一个明确的结论。稍稍整理一下,有以下几种可能:
1. UVC的驱动问题,有的驱动的分辨率默认是320*240,使用640*480资源不够用。
2. USB同步传输驱动的问题,当数据量过大时来不及传送。当应用层使用640*480时,每秒传输数据接近17M了(假设每秒20帧)。
3. 同样的程序,640*480分辨率,在有的板子上正常,有的板子上就不正常。
曾经试过把分辨率由640*480改成320*240,仍然会出现卡死现象。
后来程序放到ARM开发板上运行,还是同一款摄像头(曾经一度怀疑摄像头质量不过关),运气不错,运行时没出现问题。所以应该就是驱动的问题,USB驱动的问题应该不大,因为USB口接U盘之类的设备,传输没有出现问题。最大的可能性还是UVC的驱动问题。
总结一下论坛中提到的,加上我自己测试过的,连续采集图像
正常的,有
PC的ubuntu10.04
25帧的A9(应该是某个开发板吧)
Cubieboard2(亲测,内核版本3.4.61+)
不正常的,有
TI AM335X STARTER KIT套件(linuxkernel 3.2),
PC的ubuntu12.04(亲测,内核版本3.11.0,但是不排除虚拟机造成卡死的可能性,而且可能性很大)
http://bbs.21ic.com/icview-582975-1-1.html
http://zhidao.baidu.com/link?url=YkCzhvlGNL-rQ8NaIIAsAfexJ2IEnDst78xWUlvDj4N7niZQn0LSLorFIp8Jr0iLQ23afKC7QMVhPjp3I75QXbeLzQSG3B_9_65cYbWw8W3
不过既然遇到了卡死问题,至少应该通知一下别的进程吧,否则程序死了什么也做不了了。所以有必要了解一下非阻塞模式,以下是在打开摄像头的时候就设置为非阻塞模式,不过读取数据时不能保证每次都读成功:
http://www.eefocus.com/bbs/article_1156_586794.html
另外还可以通过select函数来设置超时:
http://blog.chinaunix.net/uid-21275705-id-224351.html
0 1
- 用V4L2采集图像经常卡死在VIDIOC_DQBUF
- V4L2 ,VIDIOC_DQBUF,Invalid argument
- 图像采集--V4L2
- v4l2图像采集经典
- V4L2采集图像基本流程
- Linux下用V4L2采集摄像头图像和视频
- V4L2采集图像入门例子讲解
- V4L2采集图像入门例子讲解
- V4L2采集图像入门例子讲解
- v4l2图像数据采集 x264笔记
- Linux 之V4L2图像采集程序设计
- 基于V4L2的摄像头图像采集
- vs2008经常卡死
- IE9经常卡死
- MyEclipse经常卡死
- eclipse经常卡死
- VC 6.0在链接Link时经常卡死问题
- VC 6.0在链接Link时经常卡死问题
- Android AVD在新建模拟器CPU/ABI选项无法选择-No system images installed for this target
- 蓝桥杯 入门训练 Fibonacci数列
- Cluster-hadoop集群搭建
- weblogic启动报错
- Windows下Apache+Tomcat+jsp+php的服务器整合配置
- 用V4L2采集图像经常卡死在VIDIOC_DQBUF
- 使 grep 和 vim 配合更加流畅的一个简单的小脚本~
- 重新想象学习:互联社会的学习变革观后感(一)
- C++程序设计必知:生存期
- 黑马程序员--等待唤醒机制
- POJ1125 Stockbroker Grapevine【Floyd】
- jquery ajax缓存问题解决方法小结
- fatal error: Xm/Protocols.h: No such file or directory
- 蓝桥杯 入门训练 圆的面积