对于在嵌入式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
阅读(15648) | 评论(2) | 转发(6) |