赞
踩
当进行多个USB视频捕捉时,不是每个USB插口都能插上一个USB摄像头。如果这样做的话,结果可能是屏幕一片空白,什么都没有,因为摄像头初始化会出错,导致程序不可正常运行。
这里首先涉及到USB的传输速度的问题。一个USB2.0的理论传输速度为480Mbps,也就是60MBps。当然,实际上不可能达到这个理论的最大值。一般只能达到这个值的70%左右,读入速度为30-42MBps,写入速度为25-30MBps。当我们用一个摄像头采集时,假设采集一帧的分辨率为 640*480(这个分辨率是大多数摄像头都支持的分辨率),图像是24位(3个字节表示一个像素点)的位图,采集帧率为30Fps,那么所需的带宽为 640*480*24*30bps,即640*480*24*30/8/1024/1024=26.37MBps。可见,当插上一个USB摄像头的时候,按照这种方式进行采集时,就已经占了读入的大半带宽,当插上两时,结果可想而知,要么很卡,要么程序就无法运行。
那这样的话,岂不是不能进行多个摄像头的同时采集?实际上,刚才说的传输速度,是针对一个USB Controller而言。在PC机上一般不可能只有一个USB Controller。所以,当多个摄像头插在不同的USB Controller上面时,就能进行流畅的视频采集了。在这里还有必要说下USB Controller的问题。一台电脑上面可能有多个USB插口,但是并不等同与有相同数目的USB Controller。以我的笔记本为例,上面有4个USB插口,而只有两个USB Controller。稍微查一下就能得知,一个USB Controller上面连了一个USB插口,另外一个USB Controller上面连了3个USB插口。为什么会这样呢,详细讲解下USB的结构。
我们知道,主板上的南桥是连接外设和北桥的。USB Controller就是接在了南桥上面。根据我的理解,一般是OHCI(OpenHost Controller Interface)或者UHCI(Universal HostController Interface)加上EHCI(Enhanced Host ControllerInterface)来作为一个USB Controller。OHCI或UHCI提供全速和低速的USB传输,而EHCI提供高速的USB传输。USB Controller会根据连接的设备来自动选取是OHCI(或UHCI)还是EHCI。然后一个USB Controller上面接Hub,Hub上面连了多个USB插口。我们电脑上面的USB插口就是Hub上面分出来的。
因此,不管有多少个USB插口在电脑上,只有连在了不同的USB Controller上面,才能保证视频的流畅性。这点可以借助驱动精灵来查看是否不同的摄像头接在了不同的USB Controller上面。驱动精灵的硬件检测选项单里面,点击详细信息,然后端口->USB,里面就有各种详细的连接情况。一般一个摄像头,名称为Composite Device,可是查看一个USB Controller上面是不是连接了多个Composite Device,以确保一对一的连接。这样才能保证连接端口没有出现问题。
回到zedboard,它只提供了一个USB Controller,因此使用两个摄像头时必须HUB分接。前面已经讲到一个USB摄像头如果采集的视频帧大小640*480,那么一个摄像头已经占据了USB Controller接口的大部分传输带宽,如果再开启一个摄像头,另一个摄像头肯定就不能正常打开了,程序当然就不能正常运行了。
要实现HUB分接两个摄像头,首先要解决的就是带宽不够的问题。解决的办法就是将两个摄像头采集的视频帧大小设置为320*240,这样带宽的问题就解决了。除了设置视频帧的采样大小,更重要的还是设置视频驱动的工作模式。由于项目中摄像头的驱动为UVC驱动的,因此,以UVC的驱动加载为例。
在内核编译过程中,如果将UVC驱动编译进入内核,摄像头采集视频时会默认申请USB接口的全部带宽。所以要将UVC驱动编译为模块,手动设置驱动的工作模式。关于内核的配置编译,参考上一篇参赛手记,这里不再详述。
将UVC驱动编译为模块后,生成uvcvideo.ko和videobuf2-vmalloc.ko,然后在zedboard控制台中输入
insmod videobuf2-vmalloc.ko
insmod uvcvideo.ko quirks=128
其中insmod uvcvideo.ko quirks=128将uvc视频驱动加载到内核中,并强制要求摄像头计算所需带宽,而不是申请USB接口的全部带宽。
通过以上限制,就解决zedboard的HUB分接两个摄像头的带宽矛盾。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。