USB协议-UVC标准协议规范(二)
1.概述
UVC,全称为:USB video(device) class,是微软与另外几家设备厂商联合推出的为USB视频捕获设备定义的协议标准,目前已成为USB org标准之一。
USB协议中,除了通用的软硬件电气接口规范等,还包含了各种各样的Class协议,用来为不同的功能定义各自的标准接口和具体的总线上的数据交互格式和内容。这些Class协议的数量非常多,最常见的比如支持U盘功能的Mass Storage Class,以及通用的数据交换协议:CDC class。此外还包括Video、Audio Class, Print Class等等。正是由于这些Class协议,大大促进了USB设备的普及,比如说各个厂商生产的U盘都能通过操作系统自带的驱动程序来使用。
所以说UVC仅仅只是USB规范协议中设备类规范的其中一种,是用作USB接口的视频设备的一个统一的数据交换规范。使用 UVC 的好处 USB 在 Video这块也成为一项标准了之后,硬件在各个程序之间彼此运行会更加顺利,而且也省略了驱动程序安装这一环节,操作系统只要是 Windows XP SP2 之后的版本都可以支持 UVC,Linux系统自2.4以后的内核都支持了大量的设备驱动,其中支持UVC设备。
在UVC规范中明确要求,具有实际UVC功能的视频设备需要具备两种接口:一种为VC Interface(视频控制接口),VS Interface(视频流接口)。其中VC接口用于对UVC设备进行配置操控,而VS接口则用于负责传输视频数据流,两者相互配合完成UVC设备功能。一般情况下设备是只有有一个VC接口和多个VS接口。
本文对USB的功能类协议USB Video Class(UVC)的具体设计进行介绍,但不会介绍USB基础协议,所以需要对USB基础协议有一定的了解,包括USB四大描述符以及四种传输方式。
规范文档通过官方链接下载USB_Video_Class_1_5
或者云盘下载:USB_Video_Class_1_5
2.UVC功能特征
video function(视频功能) 位于设备类层次结构中的接口级别。它由许多接口组成,这些接口将相关pipe(管道)分组在一起,共同实现video function(视频功能)的接口。
video function(视频功能)通过其(Video interface)视频接口寻址。 每个视频功能都有一个 VideoControl (VC) 接口,并且可以有多个 VideoStreaming (VS) 接口。 VideoControl (VC) 接口用于访问该功能的设备控件,而 VideoStreaming (VS) 接口用于将数据流传输进和出该功能。 单个 VideoControl 接口和属于同一视频功能的 VideoStreaming 接口的集合称为VideoInterfaceCelloction视频接口集合(VIC)。 Interface Association Descriptor(接口关联描述符 )(IAD) 用于描述视频接口集合。
2.1 Video Interface Class
视频接口类(Video interface class)将所有可以与 USB 兼容视频数据流交互的功能分组。
事实上,Video interface class包含了VC和VS。
视频接口类有专门的code码标识:
Video Interface Class Code | Value |
---|---|
CC_VIDEO | 0x0E |
2.2 Video Interface subclass and Protocol
Video interface class又分为两种subclass类:
- Video Control interface
- Video streaming interface
Interface Association Descriptor(IAD)也有自己的功能subclass:
- Video interface colloction
视频接口subclass code码:
Video Subclass Codes | Value |
---|---|
SC_UNDEFINED | 0x00 |
SC_VIDEOCONTROL | 0x01 |
SC_VIDEOSTREAMING | 0x02 |
SC_VIDEO_INTERFACE_COLLECTION | 0x03 |
视频接口协议code标识码:
Video Interface Protocol Codes | Value |
---|---|
PC_PROTOCOL_UNDEFINED | 0x00 |
PC_PROTOCOL_15 | 0x01 |
2.3 UVC功能拓扑
为了能够操纵视频功能的物理属性,其功能必须划分为可寻址实体。
UVC确定了以下两个通用实体:
- Units
- Teminals
2.3.1 Unit单元
Unit可以理解为构建出UVC设备功能的各功能单元,多个Unit按照一定的规则连接后就是一个完整的UVC功能设备。Spec规定Unit有一个或多个入口,一个出口;也就是说可以有多个Unit或Terminal作为一个Unit的输入源头,而数据在流经Unit后仅能作为其他Unit或Terminal的一个输入源头。
如下图规范:
规范1.5中定义了四种Unit:
- Selector Unit (SU)
- Processing Unit (PU)
- Encoding Unit (EU)
- Extension (XU)
2.3.1.1 SU(选择器单元)
SU单元用来控制图像数据采集源的切换和选择。比如一个设备支持多种输入源,将通过SU进行选择切换。
例如下面相机拓扑图有两个数据输入源,这时需要SU来进行切换和选择。
选择器单元一般在拓扑图中用下图表示:
2.3.1.2 PU(处理单元)
PU代表对采集所得图像数据进行加工的单元,负责对采集到的图像特性进行调整设置,它有一个单一的输入和输出引脚。
主要有以下一些特性:
User Controls
- Brightness 背光
- Hue 色度
- Saturation 饱和度
- Sharpness 锐度
- Gamma 伽马
- Digital Multiplier (Zoom) 数字放大
Auto Controls - White Balance Temperature 白平衡色温
- White Balance Component 白平衡组件
- Backlight Compensation 背光补偿
- Contrast 对比度
Other - Gain 增益
- Power Line Frequency 电源线频率
- Analog Video Standard 模拟视频标准
- Analog Video Lock Status 模拟视频锁状态
处理单元一般在拓扑图中用下图表示:
2.3.1.3 EU(编码单元)
EU用于对采集所得的数据进行个性化处理的功能。编码单元控制编码器的属性,该编码器对通过它流式传输的视频进行编码。 它具有单个输入和多个输出引脚。 它支持以下功能,这些功能可以在流式传输开始之前或之后使用。
参考规范2.3.6 Encoding Unit
2.3.1.4 XU(扩展单元)
XU是为了特定供应商添加规范而提供的单元。
2.3.2 Teminals端点
Terminal是指整个UVC功能的入口和出口,逻辑意义上讲Terminal只有一个出口或者入口,它要么代表整个UVC功能的数据输入点,要么代表数据在流经UVC功能内部的各Unit功能单元后的最终流入点。
规范中描述了以下Teminals:
- Input Terminal
- Output Terminal
2.3.2.1 IT(Input Terminal)
作为数据流入video function的接收器,功能是作为已经被提取出来的数据的数据源,说白了就是UVC功能的数据源头。
输入端点一般在拓扑图中用下图表示:
2.3.2.2 OT(Output Terminal)
作为Video Function视频信息流出的出口,功能是作为输出数据的接收器。OT只有一个输入pin,处理流程最后一个单元会将它的out pin与OT的in pin连接在一起。
2.3.2.3 CT(Camera Terminal)
CT代表硬件上的数据采集源(sensor), 用于控制视频流传输中的设备特性的。
它规定支持以下特性控制 :
- Scanning Mode (Progressive or Interlaced) 自动扫描(逐行或隔行扫描)
- Auto-Exposure Mode 自动曝光模式
- Auto-Exposure Priority 自动曝光优先级
- Exposure Time 曝光时间
- Focus 焦点
- Auto-Focus 自动对焦
- Simple Focus 简单聚焦
- Iris 可变光圈
- Zoom 缩放
- Pan 移动镜头
- Roll 滚动
- Tilt 倾斜
- Digital Windowing 数字窗口
- Region of Interest 感兴趣区域
在USB_Video_Example 1.5中以一个网络摄像头设备为例展现其拓扑结构的示例图如下:
拓扑一:
拓扑二: