现在要实现一个USB Cam功能,将摄像头采集到的实时图像数据,经过jpeg编码后,通过usb otg传输到PC端现在模仿webcam (drivers/usb/gadget/webcam.c )
在 Android usb (drivers/usb/gadget/Android.c)上 实现了一个UVC Camera驱动(添加到usb composite设备数组里)USB连上PC后,在PC端可以被识别为uvc camera设备。USB视频输出的应用程序,主要参照
http://git.ideasonboard.org/uvc-gadget.git/commit/9fbc003442056cdf59b87e94c1d0e3814575d4b3
并做了一些修改【实现思路】
传输数据的基本流程是这样的开始数据传输时
1.向驱动申请了4个帧缓冲(VIDIOC_REQBUFS)
2.获取帧缓冲信息(VIDIOC_QUERYBUF),并将申请到的帧缓冲映射到用户空间
3.填充4帧数据后,将4个帧缓冲入驱动队列(VIDIOC_QBUF)
4.select监听并等待设备文件的“可写”状态
5.设备文件“可写”时,出队列取得一帧缓冲(VIDIOC_DQBUF)
6.向帧缓冲填充一帧数据
7.将帧缓冲重新入队列(VIDIOC_QBUF)重复 5 - 7步 实现连续的数据传输
目前已经可以实现,将摄像头实时采集的连续图像数据,经过USB在PC端显示出来。(MJPEG)
PC端使用软件是AMCap【目前问题】
现在当每帧的数据量保持在500多KB以上时,视频可以连续传输,这没有问题。
但是如果每帧数据量低于500多KB时,可能传输了十几帧,几十帧后,就停止了。
跟踪代码后,发现是在 select这边超时了。既select不返回“可写”状态
这个问题查了很久,一直不明白是哪里的原因。
新手刚接触USB这块,烦请各位高手们赐教!~
在 Android usb (drivers/usb/gadget/Android.c)上 实现了一个UVC Camera驱动(添加到usb composite设备数组里)USB连上PC后,在PC端可以被识别为uvc camera设备。USB视频输出的应用程序,主要参照
http://git.ideasonboard.org/uvc-gadget.git/commit/9fbc003442056cdf59b87e94c1d0e3814575d4b3
并做了一些修改【实现思路】
传输数据的基本流程是这样的开始数据传输时
1.向驱动申请了4个帧缓冲(VIDIOC_REQBUFS)
2.获取帧缓冲信息(VIDIOC_QUERYBUF),并将申请到的帧缓冲映射到用户空间
3.填充4帧数据后,将4个帧缓冲入驱动队列(VIDIOC_QBUF)
4.select监听并等待设备文件的“可写”状态
5.设备文件“可写”时,出队列取得一帧缓冲(VIDIOC_DQBUF)
6.向帧缓冲填充一帧数据
7.将帧缓冲重新入队列(VIDIOC_QBUF)重复 5 - 7步 实现连续的数据传输
目前已经可以实现,将摄像头实时采集的连续图像数据,经过USB在PC端显示出来。(MJPEG)
PC端使用软件是AMCap【目前问题】
现在当每帧的数据量保持在500多KB以上时,视频可以连续传输,这没有问题。
但是如果每帧数据量低于500多KB时,可能传输了十几帧,几十帧后,就停止了。
跟踪代码后,发现是在 select这边超时了。既select不返回“可写”状态
这个问题查了很久,一直不明白是哪里的原因。
新手刚接触USB这块,烦请各位高手们赐教!~
解决方案 »
- 谁做过OS的设计内核原语的实验--急求大神
- 关于阿里云的Linux无法被FileZilla连接问题
- 求解答linux中安装mysql-5.7.20-linux-glibc2.12-x86_64出错
- slelect 一直超时
- 求助,能远程centos6.4远程升级到centos7吗?
- 小白问题,请大佬赐教
- 新手求助:在linux服务器下的tomcat配置了https,用ie访问网站报错找不到网站
- linux有没有一些方法可以把某个进程或者线程设置成不受系统调度干扰呢?
- 用expect模拟ssh登陆,执行完脚本之后又自动退出ssh了是什么原因呢?
- 使用Linux配置vsftpd服务器 远程命令行和浏览器可以访问,但是资源管理器不能芳儿呢
- ubuntu14.04系统升级到16.04后桌面就进不了
- lvs中虚拟IP地址疑问
select超时,errno 是22 (Invalid argument)
2.超时时间可以自己设置修改,在select中
3.引起你超时的原因可能是硬件上的原因,如供电能力不足(纯属猜测)