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
- 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
只有一个设备描述符。在 USB_Video_Example 1.5.pdf 找到它的说明。
里面的每一项都有对应。
(3)configuration descriptor
- Configuration Descriptor:
- bLength 9
- bDescriptorType 2
- wTotalLength 481
- bNumInterfaces 2
- bConfigurationValue 1
- iConfiguration 0
- bmAttributes 0x80
- (Bus Powered)
- MaxPower 128mA
只有一个配置描述符。
(4)Interface Association
- Interface Association:
- bLength 8
- bDescriptorType 11
- bFirstInterface 0
- bInterfaceCount 2
- bFunctionClass 14 Video
- bFunctionSubClass 3 Video Interface Collection
- bFunctionProtocol 0
- iFunction 2
接口联合体描述符,这里也只有一个。 usb 摄像头有 , 一个或多个 videostreaming interface. 那到底有多少个视频流接口呢?第一个是谁?就在这个 IAD I/F 中。
(5)Interface Descriptor:
- Interface Descriptor:
- bLength 9
- bDescriptorType 4
- bInterfaceNumber 0
- bAlternateSetting 0
- bNumEndpoints 1
- bInterfaceClass 14 Video
- bInterfaceSubClass 1 Video Control
- bInterfaceProtocol 0
- iInterface 2
可以看到,有两个Interface Descriptor,旗下各有N个VideoControl Interface Descriptor和VideoStreaming Interface Descriptor。
(6)VideoControl Interface Descriptor:
- 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)
可以看到,它有多个VideoControl Interface Descriptor, 总共有多少个呢 ?
很明显,最多有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
- 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
- bmInterlaceFlags 0x00
- Interlaced stream or variable: No
- Fields per frame: 2 fields
- Field 1 first: No
- Field pattern: Field 1 only
- bCopyProtect 0
可以看到子类为FORMAT_UNCOMPRESSED,非压缩格式;
这种格式下支持5种分辨率。 bDefaultFrameIndex 默认使用第1种分辨率。
bBitsPerPixel:每个像素占16位。
- wWidth( 0) 640
- wHeight( 0) 480
- wWidth( 1) 352
- wHeight( 1) 288
- wWidth( 2) 320
- wHeight( 2) 240
- wWidth( 3) 176
- wHeight( 3) 144
- wWidth( 4) 160
- wHeight( 4) 120
支持这些分辨率。
UVC摄像头开发(一)相关推荐
- c语言 虚拟摄像头设备_Windows下虚拟UVC摄像头开发演示
最近在windows10 x64下开发了一个USB虚拟总线驱动,该驱动可接收上位机的指令动态创建或卸载UVC摄像头. UVC摄像头的数据通过上位机下发给驱动,驱动再给视频播放软件,这样就可以实现视频的 ...
- UVC摄像头开发(三)
本次主要记录QT以及QML显示UVC摄像头采集图像以及期间可靠性崩溃和刷新频率问题 在开发UVC摄像头过程中,开始直接将图像显示在FrameBuffer上面,该方式很多猿兄已经写过了方式方法,大家搜一 ...
- Windows下虚拟UVC摄像头开发演示
最近在windows10 x64下开发了一个USB虚拟总线驱动,该驱动可接收上位机的指令动态创建或卸载UVC摄像头. UVC摄像头的数据通过上位机下发给驱动,驱动再给视频播放软件,这样就可以实现视频的 ...
- UVC摄像头嵌入式Linux应用
由于是第一次接触UVC,所以内容会比较杂.文章内容多为参考整合. 参考链接: [1]添加内核支持部分:https://blog.csdn.net/u010034969/article/deta ...
- rk3288 调试dvp摄像头_RK3288 uvc摄像头调试
[ 移植Linux3.4.2版本内核到mini2440(二)--添加网卡.UVC摄像头.LCD驱动 ] 曾经在全志平台上调试过UVC摄像头,当时调试过程比较流畅,丝毫没有碰 ...
- ZCU104开发板MIPI摄像头开发(详细介绍移植ZCU102example design)
花了将近2周移植了ZCU102的MIPI example工程到ZCU104板子,记录一下我的移植过程. 首先这位哥们的详细讲解给予了很大的帮助,我也是根据他的方法进行移植,不过遇到了一些问题:(34条 ...
- 2013新春奉送:Android摄像头开发完美demo---(循环聚焦,缩放大小,旋转picture,查询支持的picturesize, ImageButton按键效果)
[补充:我已在对此代码进行了全面的升级,升级后代码结构更加利于维护扩展,全面适配所有手机,参见博文.此文中的资源也不要再下载了,请下载升级后的代码,如有问题请留言反馈,谢谢.------------- ...
- Android摄像头开发完美demo---(循环聚焦,缩放大小,旋转picture,查询支持的picturesize, ImageButton按键效果)
这个代码几乎涉及到了摄像头开发的所有方面,(除了PreviewCallback,这块东西我会结合android摄像头自动识别人脸/火灾来谈),且力求精简,是杂家的心血阿!相对之前改进之处有: 1,精简 ...
- 2013新春奉送 Android摄像头开发完美demo--- 循环聚焦 缩放大小 旋转picture 查询支持的pict
[补充:我已在对此代码进行了全面的升级,升级后代码结构更加利于维护扩展,全面适配所有手机,参见博文.此文中的资源也不要再下载了,请下载升级后的代码,如有问题请留言反馈,谢谢.------------- ...
最新文章
- 2022-2028年中国康养旅游行业市场竞争力分析及发展策略分析报告
- 【项目经理应该知道的97件事】三位一体的项目管理
- Cache 工作原理、Cache 一致性,你想知道的都在这里
- 双线服务器和CDN的区别
- 23. Leetcode 24. 两两交换链表中的节点 (链表-基础操作类-交换链表)
- python类中方法相互调用_python 类中方法之间的调用
- 阿里巴巴王坚:用数据来改变世界
- jsp内置对象的提交方式
- SQL Server MDS(主数据服务)介绍
- 维信诺通过9.5亿元应收款保理业务提案
- [VB]SaveSetting 语句 和 DeleteSetting 语句
- Android网络编程4之从源码解析Volley
- FFmpeg源代码简单分析-通用-结构体分析-AVCodec
- python取地址符_C中指针符*和取址符
- 417分上那所计算机学院,2021年高考417分左右能上什么大学(100所)
- Linux系统通过console口连接交换机
- 小学-知识与能力【9】
- Appgamekit制作消消乐小游戏(附代码)# 4
- 23种设计模式:(二)结构型模式
- 2019java面试3年_Java回顾#3 – 2019年对于社区而言最重要的事情