Linux&UVC驱动
+ -

LINUX&UVC视频控制描述符拓扑结构类型映射

2024-03-27 32 0

LINUX&UVC驱动在解析UVC设备配置描述符中的UVC控制接口描述符中的各个拓扑结构时,对找到的每一种拓扑结构,都会使用uvc_alloc_entity函数申请一个对象,然后使用函数list_add_tail挂入链表中。

    list_add_tail(&term->list, &dev->entities);

这些拓扑结构涉及到的类型有:

  • 扩展单元UVC_VC_EXTENSION_UNIT
  • 输入终端UVC_VC_INPUT_TERMINAL,子类型为相机终端UVC_ITT_CAMERA或媒体传输输入UVC_ITT_MEDIA_TRANSPORT_INPUT
  • 输出终端UVC_VC_OUTPUT_TERMINAL
  • 选择单元UVC_VC_SELECTOR_UNIT
  • 处理单元UVC_VC_PROCESSING_UNIT

当然这些类型的定义如下:

/* A.5. Video Class-Specific VC Interface Descriptor Subtypes */
#define UVC_VC_DESCRIPTOR_UNDEFINED            0x00
#define UVC_VC_HEADER                    0x01
#define UVC_VC_INPUT_TERMINAL                0x02
#define UVC_VC_OUTPUT_TERMINAL                0x03
#define UVC_VC_SELECTOR_UNIT                0x04
#define UVC_VC_PROCESSING_UNIT                0x05
#define UVC_VC_EXTENSION_UNIT                0x06

/* B.2. Input Terminal Types */
#define UVC_ITT_VENDOR_SPECIFIC                0x0200
#define UVC_ITT_CAMERA                    0x0201
#define UVC_ITT_MEDIA_TRANSPORT_INPUT            0x0202

但LINUX&UVC驱动时,对以上的和拓扑结构做了扩展。

#define UVC_TERM_INPUT            0x0000
#define UVC_TERM_OUTPUT            0x8000

扩展后的类型如下:

名称 原始 扩展之后
扩展单元 UVC_VC_EXTENSION_UNIT UVC_VC_EXTENSION_UNIT
相机终端 UVC_ITT_CAMERA UVC_ITT_CAMERA| UVC_TERM_INPUT
媒体传输输出 UVC_ITT_MEDIA_TRANSPORT_INPUT UVC_ITT_MEDIA_TRANSPORT_INPUT | UVC_TERM_INPUT
输出终端 UVC_VC_OUTPUT_TERMINAL UVC_VC_OUTPUT_TERMINAL| UVC_TERM_OUTPUT
选择单元 UVC_VC_SELECTOR_UNIT UVC_VC_SELECTOR_UNIT
处理单元 UVC_VC_PROCESSING_UNIT UVC_VC_PROCESSING_UNIT

可以看到,只对输入和输出终端加了标识,使用最高bit15来标识是输入类型还是输出类型。

写完后,发现没啥用~

0 篇笔记 写笔记

UVC 拓扑结构
UVC规范描述了以下类型的标准单元和终端,这些单元和终端被认为足以代表当前和近期可用的大多数视频功能:输入端子(ST)输出端子(OT)选择器单元(SU)处理单元(PU)编码单元(EU)扩展单元(XU)此外,还有一些特殊的终端扩展了基本输入和输出终端的功能。这些特殊终端支持特定于这些终端提供的扩展功能......
USB的拓扑结构
USB的拓扑结构结可以从三个视图来解释,分别为物理拓扑,逻辑拓扑和软件编程拓扑USB的物理拓扑结构USB的物理拓扑指的是USB总线的实际物理设备连接关系。主机端提供USB根集线器,USB根集线器可外接USB外设,也可的外接USB的集线器HUB,用于拓展USB端点接口,拓展的USB集线器上的端口也可以......
UAC 拓扑结构
UAC规范描述了以下类型的标准单元和终端,这些单元和终端被认为足以代表当前和近期可用的大多数视频功能:输入终端 - Input Terminal (IT)输出终端 - Output Terminal (OT)混音器单元 - Mixer Unit (MU)选择器单元 - Selector Uni......
USB设备与集线器最大可以级联多少层
在USB2.0规范中,定义了USB设备与集线器最大可以级联7层(包括根集线器),即根集线器之设备之间最多有5个继集线器。注意:有一个USB复合(compound)设备,其本身是一个USB集线器并接连1个或多个USB功能设备,这里需要将这个USB集线器算在内。......
UVC摄像头实现的拓扑结构
UVC视备内部表示为多个可寻址实体或终端的互连。每个实体/终端代表一种功能,并具有由USB主机控制的属性。这些UVC设备内部互联的结构叫做UVC设备的内部拓扑结构。一个最简单的UVC拓扑结构如下图所示:数据由CAMERA Sensor采集,首先通过输入终端,再通过输出终端,最后通过USB的视频流端点......
UVC扩展单元描述符和设置不当会引起的设备启动失败(code:10)
UVC扩展单元用于UVC设备的自定义通讯,通过UVC扩展单元可以实现一些厂商自定义的通讯和设备特性。在一般的UVC摄像头的描述符布局中,其拓扑结构一般如下:可以看到,这上面的拓扑结构中支持2个扩展单元,所以在USB配置描述符的视频控制接口中就有两个独立的扩展单元描述符。这两件扩展单元的bSource......
UVC相机拓扑结构配置要点总结
做UVC相机开发的人经常是需要编写UVC相机配置描述符的,这个USB配置描述符包括两部分的内容,分别为视频控制接口部分和视频流接口部分。视频控制部分包括的内容主要描述了UVC相机的拓扑结构。一般情况下的相机拓扑结构是这样子的:不过有的时候,我们也需要扩展单元,所以加上扩展单元描述符就如下:这里......
USB设备总线拓扑结构生成原理及方法
在Windows系统的内核中,USB堆栈提供了一系列的API接口。内核或者应用程序可以使用这些API接口来确定USB总线的拓扑结构和相关的USB设备信息。我们常用的USBTreeViewe是基于微软开源usbview二次开发的,而usbview就是使用这些API接口来实现USB总线拓扑结构和US......
uvc_parse_control解析拓扑结构uvc_parse_standard_control
对于大部分的UVC设备,都不会存在厂家自定义的所谓“自定义扩展单元”,都是很规矩的使用UVC标准的扩展单元。当然扩展单元在UVC的控制接口描述符中混着,所以LINUX&UVC驱动就使用uvc_parse_standard_control函数解析这些标准的UVC描述符。在分析代码之前,先回顾......
LINUX&UVC视频控制描述符拓扑结构类型映射
LINUX&UVC驱动在解析UVC设备配置描述符中的UVC控制接口描述符中的各个拓扑结构时,对找到的每一种拓扑结构,都会使用uvc_alloc_entity函数申请一个对象,然后使用函数list_add_tail挂入链表中。 list_add_tail(&term->l......
UAC音频设备拓扑单元bSourceID错误导致设备启动失败(代码10)
正常情况下,一个UAC类型的设备如麦克风或者扬声器,一般都会有三个或者两个拓扑节终端。如对于麦克风,其拓扑结是:输入终端->音频控制特征单元->输出终端 ,然后再通过音频流接口描述符中通过bTerminalLink指 定输出终端,最终连到的是USB主机端。而对于扬声器:拓扑结构是:输......
关注公众号
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!