对于在嵌入式linux设备上使用usb摄像头,很多人还很陌生,不知道是怎样的工作原理
我已经在xc2440上实现了针对usb摄像头的多种应用程序,包括预览、拍照、录像、远程视频监控等
最近有很多用户问我关于usb摄像头的问题,可能在理解上都有误区,以为要自己写驱动
我写个简短的介绍,说明usb camera驱动和应用的关系
usb摄像头原理就是用一个dsp芯片驱动一个cmos,这个dsp芯片可以提供usb通讯协议,cmos的所有配置操作都是由dsp控制完成的,cmos数据流通过usb传给上位机
从我们用户角度来看,就是把cmos的cpi接口转成usb接口,但我们不必关心cmos是怎样工作的,并且软件接口都是统一的
重点强调:usb camera驱动是linux系统中的,和qt无关,应用程序只是调用linux中的驱动接口,qt只是提供了一个ui框架
几点说明:
1. 我们用的linux内核中已经集成了usb camera驱动,只需要加入配置选项即可,详见linux内核驱动移植手册的第十八节
2. 光盘里提供的zimage镜像已经包含usb camera驱动,可直接使用
3. 现在所使用的usb camera一般都是uvc(免驱)的,不用关心camera内部使用什么芯片,在配置里只选择uvc即可
4. usb camera的驱动是标准v4l2结构的驱动,是linux内核中一直都有的,我们不必关心驱动(有兴趣的可以分析),只关心如何写应用程序调用驱动接口
5. 驱动在文件系统下生成的设备是/dev/video0,如果再插一个camera就是/dev/video1,以此类推
对于usb摄像头的要求:(就是电脑摄像头)
1. 支持mjpeg格式的数据流
我们用的平台和程序只能使用mjpeg格式,由于usb接口协议的限制,不能使用yuyv格式。但有很多摄像头不支持mjpeg,购买之前一定要先了解是否支持mjpeg
2. 至少30万像素
在前几年,电脑摄像头大部分是30万像素(也有10万的),因为程序中要拍摄640x480的照片,所以最小要30万像素。现在有高清的,130万~500万,价格也较高,但是高清的一般的都支持mjpeg
阅读(15465) | 评论(2) | 转发(6) |