USB video class(又称为USB video device class or UVC)就是USB device class视频产品在不需要安装任何的驱动程序下即插即用,包括摄像头、数字摄影机、模拟视频转换器、电视卡及静态视频相机。
Linux内核之中,已经集成了对UVCCamre的支持。
内核代码路径: \kernel-3.10\drivers\media\usb\uvc
若需要打开UVC CAMERA 需要在内核中配置:
MEDIA_SUPPORT = y
USB_VIDEO_CLASS = y
USB_VIDEO_CLASS_INPUT_EVDEV = y
如何查看当前的Camera是否支持UVC
插入摄像头,通过lsusb命令,找到当前UVCCamera的PID和VID
reyn@reyn-All-Series:~/reyn/k86m/k86m_debug/kernel-3.10$ lsusb
Bus 001 Device 002: ID 8087:8008 Intel Corp.
Bus 002 Device 002: ID 8087:8000 Intel Corp.
Bus 003 Device 002: ID 093a:2510 Pixart Imaging, Inc. Optical Mouse
Bus 003 Device 049: ID 058f:3842 Alcor Micro Corp.
然后执行一下命令lsusb -d 058f:3842 -v | grep "14 Video", 若支持UVC Camera则你会看到如下信息:
reyn@reyn-All-Series:~/reyn/k86m/k86m_debug/kernel-3.10$ lsusb -d 058f:3842 -v | grep "14 Video"
Couldn't open device, some information will be missing
bFunctionClass 14 Video
bInterfaceClass 14 Video
bInterfaceClass 14 Video
bInterfaceClass 14 Video
bInterfaceClass 14 Video
bInterfaceClass 14 Video
bInterfaceClass 14 Video
在UVC Camrera遇到问题时,可以通过以下命令,打开trace
sudo echo 0xffff > /sys/module/uvcvideo/parameters/trace 打开
sudo echo 0 > /sys/module/uvcvideo/parameters/trace 关闭
dmesg | grep uvc -a -a 命令是将起作为一个文本文件设备对待
若当前Camera不支持UVC ,可以通过以下命令,或许当前Camrea的详细配置描述符:
lsusb -d 058f:3842 -v
下面介绍一下USB协议关于摄像头的相关知识!
V4L2:
Video4Linux或V4L是一个视频截取及设备输出API,以及Linux的驱动程序框架,支持很多USB摄像头、电视调谐卡以及其他设备。
简单的讲V4L2就是用来管理UVC设备的并且能够提供视频相关的一些API。那么这些API怎么使用或者能被谁使用呢。在Linux系统上有很多的开源软件能够支持V4L2。常见的又FFmpeg、opencv、Skype、Mplayer等等。
VideoClass设备描述位于USB协议的Interface级,每个设备的Interface分为两类VideoControlInterface(仅仅只用一个)和VideoStreamingInterface(可以具有多个),而与设备的一个相关的所有的USB Interface被称作为一个VideoInterface Collection使用IAD(Interface Association Deor)描述符来描述。
目前内核支持的UVC camera的类型有 :
YUV 4:2:2 (YUYV)
YUV 4:2:0 (NV12)
MJPEG
YVU 4:2:0 (YV12)
YUV 4:2:0 (I420)
YUV 4:2:0 (M420)
YUV 4:2:2 (UYVY)
Greyscale 8-bit (Y800)
Greyscale 8-bit (Y8 )
Greyscale 10-bit (Y10 )
Greyscale 16-bit (Y16 )
RGB Bayer
RGB565
H.264
插入摄像头,如果在设备节点下出现/dev/video0; 则证明你的uvc camera在内核的驱动已经加载了,然后就可以用测试工具开始测试你的uvc摄像头了。