UVC摄像头开发
Posted bobuddy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UVC摄像头开发相关的知识,希望对你有一定的参考价值。
近期,要做一个usb摄像头的开发,然后看了韦东山老师的第三期视频,讲UVC协议摄像头开发的教程。做一些记录,以免忘记。
1当我们拿到一个摄像头,怎么知道它的一些信息呢?
(1)打开虚拟机,让它位于前台,插上摄像头,可以看到这样的界面。
然后连接,再在终端输入
#lsusb
就可以后到这么一句:
Bus 001 Device 003: ID 05a9:4519 OmniVision Technologies, Inc. Webcam Classic
可以看到,它是OmniVision公司的sensor,VIP,PID分别为:05a9:4519。
再用 #dmesg 命令查看一下打印信息
(2)我们从上面的内核打印信息可以看到,找到了uvc的设备,这是调用了内核的哪个文件的哪个函数呢?
进入到内核目录:#cd /usr/src/linux-3.0/drivers/media/uvc
搜索一下这条语句 :#grep "Found UVC" * -nR
找到它在uvc_driver.c中,可以知道,是调用了这里的程序。
(3) ls /dev/video* 可以看到它的设备节点
2那我们怎么知道它支持的格式及分辨率等信息呢?
(1) #lsusb -h 查看试用方法
#lsusb -v -d ox05a9: //-d之后带的是厂家id,不要忘了冒号
就可以看到一大串打印出来的信息。下面我们就通过打印出的信息分析一下这个摄像头。(2)device descriptor
[html] view plain copy
- Device Descriptor:
- bLength 18
- bDescriptorType 1
- bcdUSB 2.00
- bDeviceClass 239 Miscellaneous Device
- bDeviceSubClass 2 ?
- bDeviceProtocol 1 Interface Association
- bMaxPacketSize0 64
- idVendor 0x05a9 OmniVision Technologies, Inc.
- idProduct 0x4519 Webcam Classic
- bcdDevice 1.00
- iManufacturer 1
- iProduct 2
- iSerial 0
- bNumConfigurations 1
里面的每一项都有对应。
(3)configuration descriptor
[html] view plain copy
- Configuration Descriptor:
- bLength 9
- bDescriptorType 2
- wTotalLength 481
- bNumInterfaces 2
- bConfigurationValue 1
- iConfiguration 0
- bmAttributes 0x80
- (Bus Powered)
- MaxPower 128mA
(4)Interface Association
[html] view plain copy
- Interface Association:
- bLength 8
- bDescriptorType 11
- bFirstInterface 0
- bInterfaceCount 2
- bFunctionClass 14 Video
- bFunctionSubClass 3 Video Interface Collection
- bFunctionProtocol 0
- iFunction 2
(5)Interface Descriptor:
[html] view plain copy
- Interface Descriptor:
- bLength 9
- bDescriptorType 4
- bInterfaceNumber 0
- bAlternateSetting 0
- bNumEndpoints 1
- bInterfaceClass 14 Video
- bInterfaceSubClass 1 Video Control
- bInterfaceProtocol 0
- iInterface 2
(6)VideoControl Interface Descriptor:
[html] view plain copy
- VideoControl Interface Descriptor:
- bLength 13
- bDescriptorType 36
- bDescriptorSubtype 1 (HEADER)
- bcdUVC 1.00
- wTotalLength 79
- dwClockFrequency 30.000000MHz
- bInCollection 1
- baInterfaceNr( 0) 1
- VideoControl Interface Descriptor:
- bLength 18
- bDescriptorType 36
- bDescriptorSubtype 2 (INPUT_TERMINAL)
- bTerminalID 1
- wTerminalType 0x0201 Camera Sensor
- bAssocTerminal 0
- iTerminal 0
- wObjectiveFocalLengthMin 0
- wObjectiveFocalLengthMax 0
- wOcularFocalLength 0
- bControlSize 3
- bmControls 0x0000000a
- Auto-Exposure Mode
- Exposure Time (Absolute)
很明显,最多有7个不同的vc接口描述符,分别是输入端点、输出端点、摄像头端点、选择单元、处理单元、编码单元、扩展单元。
怎么看它属于哪类描述符呢?
从上面可以看出,有一个元素是 bDescriptorSubtype 2 (INPUT_TERMINAL) ,就是这个子类来描述的。
那这些子类的值又是什么含义,怎么确定呢?
在文档中搜索后面的VC_INPUT_TERMINAL,可以找到 vc 接口描述符所包含的子类。
根据不同的子类,可以找到不同的说明与上面打印的信息对应,例如这个INPUT_TERMINAL,它的各位对应同下:
描述符长度是13个字节;
bDescriptorType 36 就说是接口类型,它的取值如下:
然后是输入端点子类;端点ID是1;端点类型为Camera Sensor;
(7) VideoStreaming Interface Descriptor
vs接口也有很多子类,它们的值为:
1、FORMAT_UNCOMPRESSED
[html] view plain copy
- VideoStreaming Interface Descriptor:
- bLength 27
- bDescriptorType 36
- bDescriptorSubtype 4 (FORMAT_UNCOMPRESSED)
- bFormatIndex 1
- bNumFrameDescriptors 5
- guidFormat 59555932-0000-1000-8000-00aa00389b71
- bBitsPerPixel 16
- bDefaultFrameIndex 1
- bAspectRatioX 0
- bAspectRatioY 0
- 以上是关于UVC摄像头开发的主要内容,如果未能解决你的问题,请参考以下文章
UVCAndroid,安卓UVC相机通用开发库(支持多预览和多摄像头)
Android平台GB28181接入端如何对接UVC摄像头?