近期,要做一个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
  1. Device Descriptor:
  2. bLength                18
  3. bDescriptorType         1
  4. bcdUSB               2.00
  5. bDeviceClass          239 Miscellaneous Device
  6. bDeviceSubClass         2 ?
  7. bDeviceProtocol         1 Interface Association
  8. bMaxPacketSize0        64
  9. idVendor           0x05a9 OmniVision Technologies, Inc.
  10. idProduct          0x4519 Webcam Classic
  11. bcdDevice            1.00
  12. iManufacturer           1
  13. iProduct                2
  14. iSerial                 0
  15. bNumConfigurations      1

只有一个设备描述符。在 USB_Video_Example 1.5.pdf 找到它的说明。

里面的每一项都有对应。

(3)configuration descriptor

[html]  view plain  copy
  1. Configuration Descriptor:
  2. bLength                 9
  3. bDescriptorType         2
  4. wTotalLength          481
  5. bNumInterfaces          2
  6. bConfigurationValue     1
  7. iConfiguration          0
  8. bmAttributes         0x80
  9. (Bus Powered)
  10. MaxPower              128mA

只有一个配置描述符。

(4)Interface Association

[html]  view plain  copy
  1. Interface Association:
  2. bLength                 8
  3. bDescriptorType        11
  4. bFirstInterface         0
  5. bInterfaceCount         2
  6. bFunctionClass         14 Video
  7. bFunctionSubClass       3 Video Interface Collection
  8. bFunctionProtocol       0
  9. iFunction               2

接口联合体描述符,这里也只有一个。 usb 摄像头有 , 一个或多个 videostreaming interface. 那到底有多少个视频流接口呢?第一个是谁?就在这个 IAD I/F 中。

(5)Interface Descriptor:

[html]  view plain  copy
  1. Interface Descriptor:
  2. bLength                 9
  3. bDescriptorType         4
  4. bInterfaceNumber        0
  5. bAlternateSetting       0
  6. bNumEndpoints           1
  7. bInterfaceClass        14 Video
  8. bInterfaceSubClass      1 Video Control
  9. bInterfaceProtocol      0
  10. iInterface              2

可以看到,有两个Interface Descriptor,旗下各有N个VideoControl Interface Descriptor和VideoStreaming Interface Descriptor。

(6)VideoControl Interface Descriptor:

[html]  view plain  copy
  1. VideoControl Interface Descriptor:
  2. bLength                13
  3. bDescriptorType        36
  4. bDescriptorSubtype      1 (HEADER)
  5. bcdUVC               1.00
  6. wTotalLength           79
  7. dwClockFrequency       30.000000MHz
  8. bInCollection           1
  9. baInterfaceNr( 0)       1
  10. VideoControl Interface Descriptor:
  11. bLength                18
  12. bDescriptorType        36
  13. bDescriptorSubtype      2 (INPUT_TERMINAL)
  14. bTerminalID             1
  15. wTerminalType      0x0201 Camera Sensor
  16. bAssocTerminal          0
  17. iTerminal               0
  18. wObjectiveFocalLengthMin      0
  19. wObjectiveFocalLengthMax      0
  20. wOcularFocalLength            0
  21. bControlSize                  3
  22. bmControls           0x0000000a
  23. Auto-Exposure Mode
  24. 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

[html]  view plain  copy
  1. VideoStreaming Interface Descriptor:
  2. bLength                            27
  3. bDescriptorType                    36
  4. bDescriptorSubtype                  4 (FORMAT_UNCOMPRESSED)
  5. bFormatIndex                        1
  6. bNumFrameDescriptors                5
  7. guidFormat                            {59555932-0000-1000-8000-00aa00389b71}
  8. bBitsPerPixel                      16
  9. bDefaultFrameIndex                  1
  10. bAspectRatioX                       0
  11. bAspectRatioY                       0
  12. bmInterlaceFlags                 0x00
  13. Interlaced stream or variable: No
  14. Fields per frame: 2 fields
  15. Field 1 first: No
  16. Field pattern: Field 1 only
  17. bCopyProtect                      0

可以看到子类为FORMAT_UNCOMPRESSED,非压缩格式;
这种格式下支持5种分辨率。 bDefaultFrameIndex 默认使用第1种分辨率。

bBitsPerPixel:每个像素占16位。

[html]  view plain  copy
  1. wWidth( 0)                        640
  2. wHeight( 0)                       480
  3. wWidth( 1)                        352
  4. wHeight( 1)                       288
  5. wWidth( 2)                        320
  6. wHeight( 2)                       240
  7. wWidth( 3)                        176
  8. wHeight( 3)                       144
  9. wWidth( 4)                        160
  10. wHeight( 4)                       120

支持这些分辨率。

UVC摄像头开发(一)相关推荐

  1. c语言 虚拟摄像头设备_Windows下虚拟UVC摄像头开发演示

    最近在windows10 x64下开发了一个USB虚拟总线驱动,该驱动可接收上位机的指令动态创建或卸载UVC摄像头. UVC摄像头的数据通过上位机下发给驱动,驱动再给视频播放软件,这样就可以实现视频的 ...

  2. UVC摄像头开发(三)

    本次主要记录QT以及QML显示UVC摄像头采集图像以及期间可靠性崩溃和刷新频率问题 在开发UVC摄像头过程中,开始直接将图像显示在FrameBuffer上面,该方式很多猿兄已经写过了方式方法,大家搜一 ...

  3. Windows下虚拟UVC摄像头开发演示

    最近在windows10 x64下开发了一个USB虚拟总线驱动,该驱动可接收上位机的指令动态创建或卸载UVC摄像头. UVC摄像头的数据通过上位机下发给驱动,驱动再给视频播放软件,这样就可以实现视频的 ...

  4. UVC摄像头嵌入式Linux应用

        由于是第一次接触UVC,所以内容会比较杂.文章内容多为参考整合. 参考链接: [1]添加内核支持部分:https://blog.csdn.net/u010034969/article/deta ...

  5. rk3288 调试dvp摄像头_RK3288 uvc摄像头调试

    [           移植Linux3.4.2版本内核到mini2440(二)--添加网卡.UVC摄像头.LCD驱动     ] 曾经在全志平台上调试过UVC摄像头,当时调试过程比较流畅,丝毫没有碰 ...

  6. ZCU104开发板MIPI摄像头开发(详细介绍移植ZCU102example design)

    花了将近2周移植了ZCU102的MIPI example工程到ZCU104板子,记录一下我的移植过程. 首先这位哥们的详细讲解给予了很大的帮助,我也是根据他的方法进行移植,不过遇到了一些问题:(34条 ...

  7. 2013新春奉送:Android摄像头开发完美demo---(循环聚焦,缩放大小,旋转picture,查询支持的picturesize, ImageButton按键效果)

    [补充:我已在对此代码进行了全面的升级,升级后代码结构更加利于维护扩展,全面适配所有手机,参见博文.此文中的资源也不要再下载了,请下载升级后的代码,如有问题请留言反馈,谢谢.------------- ...

  8. Android摄像头开发完美demo---(循环聚焦,缩放大小,旋转picture,查询支持的picturesize, ImageButton按键效果)

    这个代码几乎涉及到了摄像头开发的所有方面,(除了PreviewCallback,这块东西我会结合android摄像头自动识别人脸/火灾来谈),且力求精简,是杂家的心血阿!相对之前改进之处有: 1,精简 ...

  9. 2013新春奉送 Android摄像头开发完美demo--- 循环聚焦 缩放大小 旋转picture 查询支持的pict

    [补充:我已在对此代码进行了全面的升级,升级后代码结构更加利于维护扩展,全面适配所有手机,参见博文.此文中的资源也不要再下载了,请下载升级后的代码,如有问题请留言反馈,谢谢.------------- ...

最新文章

  1. 2022-2028年中国康养旅游行业市场竞争力分析及发展策略分析报告
  2. 【项目经理应该知道的97件事】三位一体的项目管理
  3. Cache 工作原理、Cache 一致性,你想知道的都在这里
  4. 双线服务器和CDN的区别
  5. 23. Leetcode 24. 两两交换链表中的节点 (链表-基础操作类-交换链表)
  6. python类中方法相互调用_python 类中方法之间的调用
  7. 阿里巴巴王坚:用数据来改变世界
  8. jsp内置对象的提交方式
  9. SQL Server MDS(主数据服务)介绍
  10. 维信诺通过9.5亿元应收款保理业务提案
  11. [VB]SaveSetting 语句 和 DeleteSetting 语句
  12. Android网络编程4之从源码解析Volley
  13. FFmpeg源代码简单分析-通用-结构体分析-AVCodec
  14. python取地址符_C中指针符*和取址符
  15. 417分上那所计算机学院,2021年高考417分左右能上什么大学(100所)
  16. Linux系统通过console口连接交换机
  17. 小学-知识与能力【9】
  18. Appgamekit制作消消乐小游戏(附代码)# 4
  19. 23种设计模式:(二)结构型模式
  20. 2019java面试3年_Java回顾#3 – 2019年对于社区而言最重要的事情

热门文章

  1. 数据库6:连接查询和嵌套查询
  2. 智能运营助你轻松玩转消息推送
  3. 使用 setoolkit 伪造站点窃取用户信息
  4. 【浙江大学C小程week2整理】
  5. Android Google Services Framework Google Play
  6. 快捷键创建文件夹_一键创建复杂的文件夹结构
  7. 希尔排序(附C语言实现)
  8. 最小割与最大流(mincut maxflow)
  9. 公开的中文语料库有哪些?
  10. RFID自助借还书的功能介绍