博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
v4l2API无法执行VIDIOC_DQBUF的问题
阅读量:6672 次
发布时间:2019-06-25

本文共 818 字,大约阅读时间需要 2 分钟。

一、PC虚拟机下ubuntu14.04.1环境下

源文件:show.c  USB摄像头格式yuyv:

申请缓冲帧数2,分辨率640*480  阻塞无法执行

申请缓冲帧数4,分辨率640*480  阻塞无法执行

申请缓冲帧数2,分辨率320*240  隔3到5帧取到一帧数据

申请缓冲帧数4,分辨率320*240  取一帧数据更加困难,更不稳定

 

问题总结:

在笔记本低版本虚拟机Fedora14上能正常运行分辨率640*480的show.c文件,说明在上述环境下可能的问题如下:

由于一幅640*480的yuyv图像的大小是640*480*2个字节大小即600K。内核缓冲区(驱动缓冲区)没有这么大导致程序在VIDIOC_DEBUF时一直阻塞,因为一直没有一幅完整的图像数据可以读取。

关于设置320*240大小分辨率时,为什么会隔几帧才能猜到图像原因可能就是虚拟机ubuntu14.04环境下程序对连接虚拟机的USB摄像头缓冲区访问速度优先慢,缓冲帧已经换了好几副图像数据了,采集命令才到达,所以采集到的图像不连续。

 

二、DE1-SOC板3.0以上版本的内核,cortex-A9双核环境下:

源文件:show.c  USB摄像头格式yuyv

申请缓冲帧数2,分辨率640*480  阻塞无法执行

申请缓冲帧数4,分辨率640*480  阻塞无法执行

申请缓冲帧数2,分辨率320*240  正常执行,基本能取到连续的帧图像

                

问题总结:

在DE1-SOC下处理器访问USB摄像头的速度应该比上述虚拟机环境下快,所以能正常取到320*240的图像,而为什么无法采集640*480的图像数据?原因也可能是一幅640*480的yuyv图像的大小是640*480*2个字节大小即600K。内核缓冲区(驱动缓冲区)没有这么大导致程序在VIDIOC_DEBUF时一直阻塞。

转载于:https://www.cnblogs.com/wlzy/p/6666477.html

你可能感兴趣的文章
小白的Python 学习笔记(八)推导式详解
查看>>
解决sublimeText3无法安装插件有关问题 - There are no packages available for installation
查看>>
一篇文章帮你彻底搞清楚“I/O多路复用”和“异步I/O”的前世今生
查看>>
Xamarin.android 重写axml控件
查看>>
XML 扩展部分
查看>>
Tinyos Makerules解读
查看>>
安装VS2010 SP1时遇到WCF RIA Service 版本错误
查看>>
UI--普通控件总结1--控件使用
查看>>
【外文翻译】使用Timer类去调度任务 ——java
查看>>
关于CountDownLatch控制线程的执行顺序
查看>>
plsql 乱码 注册表 修改文件
查看>>
Docker集群管理(三)—— docker swarm mode基础教程
查看>>
1.urlencoder和urldecoder的使用
查看>>
web移动端布局方式整理
查看>>
蛤玮学计网 -- 简单的判断ip
查看>>
如何解决div里面img图片下方有空白的问题?
查看>>
P3626 [APIO2009]会议中心
查看>>
防火墙
查看>>
Ubuntu下VIM使用指南
查看>>
QTREE5 - Query on a tree V——LCT
查看>>