前言
UVC是属于USB行业规范中的USB设备类规范,用于USB接口的视频设备的一个统一的数据交换规范。其中UVC官方协议文档 UVC 1.5 Class specification是对整个UVC协议的框架做了规范,USB_Video_Example则规定了描述符等的数据结构和相关的一些其他相关规定。首先我先对这两个规范对照一些资料进行了解再逐步学习其他的补充文档。
1、UVC概述
在UVC规范中明确要求,具有实际UVC功能的视频设备只要需要两种接口:一种为VC Interface(视频控制接口),VS Interface(视频流接口)。其中VC接口用于对UVC设备进行配置操控,而VS接口则用于负责传输视频数据流,两者相互配合完成UVC设备功能。
2、UVC拓扑结构
UVC的将设备在拓扑结构上抽象成为了几个主要的硬件功能模块,有以下几种:
- 输入端点(Input Terminal)
- 输出端点(Output Terminal)
- camera端点(Camera Terminal)
- 选择单元(Selector Unit)
- 处理单元(Processing Unit)
- 拓展单元(Extension Unit)
在USB_Video_Example 1.5中以一个网络摄像头设备为例展现其拓扑结构的示例图如下:
![](https://i-blog.csdnimg.cn/blog_migrate/5fe020a9f2bf18c8e3d4462ccfe5cf84.png)
从Sensor和另一个复合视频设备得到的数据流由IT和CT输入,经过SU选择送到PU处理,再由OT绑定到指定的USB端点。最后由USB端点与主机交互数据发送到host。在实际的UVC设备设备中,可能没有上图中的一些功能某块,可能只有其中一些模块来完成的。
同时从上面的拓扑结构图可以看出,左半部分框架组成了UVC中的VC接口部分,右半部分框架组成了VS接口部分。
3、概念补充
3.1 Terminal(端点)
Terminal是指整个UVC功能的入口和出口,逻辑意义上讲Terminal只有一个出口或者入口,它要么代表整个UVC功能的数据输入点,要么代表数据在流经UVC功能内部的各Unit功能单元后的最终流入点。
1)IT(输入端点)
作为数据流入video function的接收器,功能是作为已经被提取出来的数据的数据源,说白了就是UVC功能的数据源头。
输入端点一般在拓扑图中用下图表示:
![](https://i-blog.csdnimg.cn/blog_migrate/3f1d2616881729f9de8451ceef74d7b0.png)
2)、OT(输出端点)
作为Video Function视频信息流出的出口,功能是作为输出数据的接收器。OT只有一个输入pin,处理流程最后一个单元会将它的out pin与OT的in pin连接在一起。
输出端点一般在拓扑图中用下图表示:
![](https://i-blog.csdnimg.cn/blog_migrate/311282b4bb52f50267cab1d60170f9c9.png)
3)、CT(Camera端点)
CT代表硬件上的数据采集源(sensor),用于控制视频流传输中的设备特性的。
它规定支持以下特性
控制
:
- 扫描模式(逐行扫描或隔行扫描)
- 自动曝光模式
- 自动曝光优先级
- 曝光时间
- 聚焦
- 自动聚焦
- 可变光圈
- 缩放/变焦
- 移动镜头
- 滚动
- 倾斜
- 数字窗口
- 感兴趣区域
3.2 Unit(单元)
Unit可以理解为构建出UVC设备功能的各功能单元,多个Unit按照一定的规则连接后就是一个完整的UVC功能设备。Spec规定Unit有一个或多个入口,一个出口;也就是说可以有多个Unit或Terminal作为一个Unit的输入源头,而数据在流经Unit后仅能作为其他Unit或Terminal的一个输入源头。
规范1.5中定义了四种Unit:Selector Unit (SU),Processing Unit (PU),Extension Unit (EU),Extension (XU)。