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在视频这一块也成为了一项标准,硬件在各个程序之间彼此运行会更加顺利,而且也省略了驱动程序安装这一环节,操作系统只需要是Windows XP SP2之后的版本都可以支持UVC,Linux系统自2.4以后的内核也支持了大量的设备驱动,其中也包括对UVC设备的支持。
在UVC规范中明确要求,具有实际UVC功能的视频设备需要具备两种接口:一种为VC Interface(视频控制接口),一种为VS Interface(视频流接口)。其中VC接口用于对UVC设备进行配置操控,而VS接口则用于传输视频数据流,两者相互配合完成UVC设备的功能。一般情况下,设备只有一个VC接口和多个VS接口。
二、UVC功能特征:
视频功能位于设备类层次结构中的接口级别。它由多个接口组成,这些接口将相关管道分组在一起,共同实现视频功能的接口。
视频功能通过其视频接口寻址。每个视频功能都有一个VideoControl (VC) 接口,并且可以有多个VideoStreaming (VS) 接口。VideoControl (VC) 接口用于访问该功能的设备控件,而VideoStreaming (VS) 接口用于将数据流传输进和出该功能。单个VideoControl接口和属于同一视频功能的VideoStreaming接口的集合称为视频接口集合(VIC)。接口关联描述符(IAD)用于描述视频接口集合。
2.1 Video Interface Class:
视频接口类(Video interface class)将所有可以与 USB 兼容视频数据流交互的功能分组。事实上,Video interface class包含了VC和VS。
视频接口类有专门的code码标识:
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码:
视频接口协议code标识码:
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代表对采集所得图像数据进行加工的单元,负责对采集到的图像特性进行调整设置,它有一个单一的输入和输出引脚。主要有以下一些特性:
1、User Controls:
-
Brightness 背光 -
Hue 色度 -
Saturation 饱和度 -
Sharpness 锐度 -
Gamma 伽马 -
Digital Multiplier (Zoom) 数字放大
2、Auto Controls
-
White Balance Temperature 白平衡色温 -
White Balance Component 白平衡组件 -
Backlight Compensation 背光补偿 -
Contrast 对比度
3、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中以一个网络摄像头设备为例展现其拓扑结构的示例图如下:
以上就是良许教程网为各位朋友分享的Linu系统相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你 !