机密
USB VIDEO CLASS标准研究
CJ-7.3-31
V1.0
普天信息技术研究院
200X年X月X日
修订历史记录
| 日期 | 版本 | 文档负责人 | 修改内容 |
| 2006.8.24 | 1.0 | 邓飞 | |
| 姓名 | 签字 | 日期 | 电话 |
| (负责人) | |||
| 姓名 | 签字 | 日期 | 电话 |
| 姓名 | 签字 | 日期 | 电话 |
| 姓名 | 签字 | 日期 | 电话 |
参加评审人员:
目录
1 文档介绍 4
1.1 目的 4
1.2 范围 4
1.3 参考文档 4
1.4 术语与缩写解释 4
2 功能特性 6
2.1 视频接口分类 6
2.2 视频接口子类和协议 6
2.3 视频功能技术 6
2.4 操作模式(operational model) 8
2.4.1 视频接口集合 8
2.4.2 视频控制接口 8
2.4.3 视频流接口(videostreaming interface) 9
2.4.4 控制传输和请求处理 10
3 描述符 11
3.1 描述符Layout Overview 11
3.2 设备描述符 11
3.3 Device_Qualifier 描述符 12
3.4 配置描述符 12
3.5 其它速度配置描述符(Other_Speed_Configuration Descriptor) 12
3.6 接口联合描述符 12
3.7 视频控制接口描述符 12
3.8 视频控制端点描述符 13
3.9 视频流接口描述符 13
3.10 视频流端点描述符 14
3.11 字符串描述符 14
4 特殊类请求 14
4.1 请求Layout 15
4.1.1 Set请求 15
4.1.2 Get请求 16
4.2 视频控制请求 18
4.3 视频流请求 18
1
文档介绍
目的
这篇文档主要描述了一个视频流设备(video streaming device)要满足USB视频分类规范(USB video class specification)必须具有的最低性能和特性。
文档定义和标准化了基于USB的视频流(video streaming)功能性,并包含了对于一个设计者搭建一个具有视频流(video streaming)功能性的适应USB的设备的所有必需信息。文档还详细说明了每个USB视频功能中都包含的标准和特殊类(class-specific)的描述符,并进一步解释了允许完整视频流(video streaming)控制的特殊类(class-specific)的请求的使用。
所有符合这个规范的设备都将被看作USB视频分类设备。
范围
视频设备的USB设备分类定义应用在所有用来操作视频及其相关功能性的合成器件中的所有设备或功能上,比如桌面摄像机,数字可携式摄像机,模拟视频转换等等。
参考文档
USB Specification Revision 2.0, April 27,2000,www.usb.org
USB Device Class Definition for Audio Devices, Version 1.0, March 18,1998, www.usb.org
Interface Association Descriptor ECN, www.usb.org
Universal Serial Bus Device Class Definition for Video Devices: Identifiers, www.usb.org
术语与缩写解释
Configuration——可能在USB设备中选中的一个或多个接口的集合。
Control——实体中用来操作特殊属性的逻辑对象。
CT——照相机终端。
Descriptor——用来描述USB设备性能或特性的数据结构。
Device——USB的外围设备。
Endpoint——USB设备上的数据源或接收器。
Entity——视频功能中的单元,终端或接口,都可能包含控制器。
GUID——全局唯一标志符。
Host——安装主机控制器计算机系统。
Host Controller——连接主机与USB的硬件。
Host Software——提供操作系统对设备进行支持的驱动,库和应用软件的集合的一般术语。
IAD——接口联合描述符。用来描述连接在相同功能上的2个或多个接口。
Interface——代表0或多个端点的集合的实体。
IT——输入终端。
OT——输出终端。
Payload Data——包含在Payload Transfer中的特殊格式的数据。
Payload Header——每个Payload Transfer开始部分的报头,提供数据framing和封装信息。
PU——处理单元。
Request——视频功能支持的主机软件与实体中控制器交流的一种机制。
Sample Transfer——由一个或多个代表视频取样的Payload Transfer组成的取样传输。
STC——Source Time Clock。由数据源使用的管理视频数据取样的时钟。
SU——选择单元。
TD——终端描述符。
Terminal——代表数据流入或流出一个视频功能的源或接收器的实体。
UD——单元描述符。
Unit——代表数据通过一个视频功能转换的实体。
USB——通用串行总线。
UVC——USB视频分类。
VC——视频控制;归诸于用于视频控制的接口。
VIC——视频接口集合;归诸于相同视频功能下的视频控制和视频流接口的集合。
VS——视频流;归诸于用于视频流传输的接口。
XU——扩展单元。
2功能特性
视频功能在设备层次分类中,位于器件的接口层。它由一系列的接口组成。
视频功能通过它们的视频接口定位。每一个视频功能都有一个单独的视频控制接口和若干个视频流接口。视频控制接口用来获取设备的功能控制权;而VS接口则被用来将数据流输入或者输出对应的视频功能。
视频接口分类
视频接口的分类组合了能兼容USB视频数据流的所有功能,所有在模拟和数字域之间转换的功能都属于这类;此外,那些将兼容USB视频数据流转换为其他的兼容USB视频数据流的功能也可以算作这类,即使通过USB被控制的模拟视频功能也是这类。
实际上,对于属于这类的视频功能来说,唯一的要求就是能exposes一个视频控制接口。
视频接口子类和协议
视频接口的分类可以分为子类,本规范中定义的有:
VC接口;
VS接口。
下面的功能子集被用在接口联合描述符中(参见3.6小节):
视频接口集合。
如果接口协议没有被使用,那就必须要设置为0x00。
视频功能技术
为了能利用视频功能的物理特性,它的功能性(functionality)必须划分为可设定地址的实体,下面这两个是被定义好的一般性的实体:
单元(Unit);
终端(Terminal)。
单元提供基本模块来完整描述绝大部分的视频功能,视频功能是由若干单元的连接组合建立起来的。一个单元有一个或更多的输入引脚,只有一个输出引脚,输出引脚可以连接到若干输入,即允许扇出;然而,一个单独的输入引脚只能与一个输出引脚相连,即不允许扇入。
终端有两种,输入终端(IT)和输出终端(OT),输入终端是一个代表视频功能内部的数据流的开始点,而输出终端代表数据流的结束点,从视频功能的角度,一个USB的端点(endpoint)就是一个IT/OT的典型例子,它既提供数据流到IT,又消耗来自视频功能的数据流(即OT)。
单元的输入引脚的数目范围是从1到总的输入引脚数,输出引脚总是1;终端的输入或者输出引脚中,必然有一个的数目总是1。
视频功能中的每个单元都由它相关的单元描述符(unit descriptor,UD)进行描述,这个描述符包涵了确定和描述该单元的所有信息,同理,终端描述符(terminal descriptor,TD)提供描述任意一个终端的相关信息;两者完整的描述了终端与单元如何连接。
本规范描述了代表当前和未来绝大部分视频功能的单元和终端:
输入终端(Input terminal);
输出终端(Output terminal);
选择单元(Selector unit);
处理单元(Processing unit);
扩展单元(Extension unit);
还有一些特殊的终端,能扩展基本输入输出终端的功能,包括:
媒体传输终端(Media transport terminal);
照相机终端(Camera terminal)。
同样的规范中定义的单元也可以在将来的修订版中扩展。
在一个单元或者终端内部,功能性更多的是通过视频控制器来描述,一个典型的控制器提供对某些特殊视频特性的支持。每个控制器都含有一套可以被操作或者代表控制器行为额外信息的属性。控制器所可能包含的信息如下:
当前设置(Current setting);
最小设置(Minimum setting);
最大设置(Maximum setting);
Resolution;
尺寸(Size);
默认(Default)。
考虑处理单元中的一个亮度控制器,假设发送了合适的请求,主机软件将获得亮度控制器的属性值,并使用它们在用户接口中正确的显示控制情况。
单元描述符,终端描述符和视频控制器的全体给主机提供了视频功能的完整描述。
下面的部分详细介绍了构成视频功能主要单元与终端,包括输入终端,输出终端,照相机终端,选择器单元,处理单元,扩展单元。针对各个单元与终端的作用,属性等作了相关描述,这里就不一一列举。
操作模式(operational model)
一个设备可以支持多重配置,多重接口可能存在于每一个配置中,每个接口可以拥有多种设置;一些的视频功能可以存在于相同的设备中。如果一个设备包含多重的视频功能,那必须有多重视频接口集合。
视频接口集合在那些支持多重操作模式的设备中可以是动态的,因为对应的视频控制和视频流接口组成视频功能的“逻辑接口”,改变设备的操作模式将导致先前的视频接口集合被新的视频接口集合取代,并重新初始化主机软件。这个规范没有提供这样的机制来使主机对这样的模式改变进行初始化,实际上通过物理上的开关实现上述功能。
作为早期的规定,视频功能性在设备分类层次上定位于接口层。接下来的部分将描述视频接口结合,包含单独的视频控制接口和可以选择的视频流接口,以及与它们相关的用来控制视频功能和控制数据流传输的端点。
视频接口集合
一个设备,为了那些包含一个视频控制接口和多个视频流接口的每个设备功能,必须使用接口联合描述符来描述一个视频接口集合。接口联合描述符在对一个获得描述符请求响应时,必须总作为设备的完全配置描述符的一部分返回。
视频控制接口
为了控制一个特殊视频功能的功能行为,主机要能操作视频功能内部的单元和终端,为了达到这个目标,视频功能必须expose一个单独的视频控制接口,这个接口必须含有以下:
1.一个控制端点,用来操作单元和终端的设置并重新得到视频功能的状态,这个端点是强制性的,默认的端点0就是为了这个目的而存在的。
2.一个中断端点,为了状态返回。这个端点是可选择的,但是在某些情况下可能是强制性的,或者说是必须的(具体可参考2.4.2.2部分的内容)。
视频控制接口是存取视频功能内部的单一入口点。所有的关于视频功能中单元和终端里的某种视频控制的操作的请求都必须通过视频功能的视频控制接口。同样的,所有与视频功能内部相关的描述符都是特殊类视频控制接口描述符的一部分。
下面是对控制端点(control endpoint),状态中断端点(status interrupt endpoint),硬件触发中断(hardware trigger interrupts),静态图像捕捉(still image capture),光学和数字缩放(optical and digital zoom)的详细介绍,描述了它们的工作原理和特性。
视频流接口(videostreaming interface)
视频流接口是用来在主机与视频功能之间交换数字数据流的,它们是可选择的,一个视频功能可以没有或者有多个视频流接口,每个接口都可能带有不同类型格式的数据,每一个视频流接口为了视频都可以有一个同步的或者bulk数据端点,和一个可选择的与视频相关的静态图像的dedicated bulk端点。这样的结构保证了在视频流接口与单一数据流(与端点相关)之间的一对一的关系。
一个拥有同步端点的视频流接口必须拥有交替的设置(alternate settings),来改变接口与潜在端点的某种特性。所有传输同步视频数据的设备,为了每个拥有同步视频端点的视频流接口,必须包含一个零带宽的交替设置,并且还必须是默认设置。一个设备能提供给主机软件选择权,用以通过改变交替设置的方式暂时性的放弃USB带宽。零带宽的交替设置不包含有一个视频流同步数据端点描述符。
一个包含bulk端点的视频流接口应该只支持交替设置0。其他的包含bulk端点的交替设置不允许在一个与视频分类规范兼容的设备中。这个并不禁止在bulk端点单独用作静态图像传输方法3时bulk和同步端点的混合。在上面的例子中,每个交替的设置都将包含同步和bulk端点的描述符。
如果一个拥有同步端点的视频流接口支持一套视频参数组合(参数包含视频格式,帧大小,帧速率),那么我们推荐视频流接口用改变最大信息包大小的方法支持一个大于2的交替接口设置。这样做的话,能使主机对于所给视频参数组合能选择一个更加合适的交替设置,使得对总线带宽的使用最有效。
对于设备实现来说,决定交替设置数目以及视频数据端点最大信息包大小的过程都取决于带宽利用率。
下面的章节具体描述了流带宽选择(stream bandwidth selection),视频和静态图像取样(video and still image samples),视频和静态图像有效载荷报头(video and still image payload headers),流同步与速率匹配(stream synchronization and rate matching),动态帧间隔支持(dynamic frame interval support),动态格式改变支持(dynamic format change support),数据格式分类(data format classes)的概率原理,不详细展开。
控制传输和请求处理
视频分类规范的控制传输机制建立在USB 2.0规范 的5.5,8.5.3,9.2.6,9.3小节内容的基础上。那些描述控制传输的时序和错误处理的部分,并未规定一个用中断管道来控制传输完成的方法。接下来的章节描述了控制传输操作,包括如何使用状态中断管道来提供设备内的状态改变的提示。
控制传输最小的话也有2个传输阶段:setup和status。一个控制传输可能随意包含一个setup和status之间的数据阶段。Setup stage包含所有的必要信息来给定特殊实体的地址,详细说明要求的操作,准备可选择的数据阶段。一个数据阶段可以是主机到设备的,也可以是设备到主机的,取决于通过bmRequestType和bRequest fields在setup stage说明的方向和操作。
根据视频分类规范,SET_CUR的请求将总是包括一个从主机到设备的数据阶段,GET_*请求将总是包含一个从设备到主机的数据阶段。尽管没有任何定义到目前,这条规则的一个例外将会是SET_CUR请求,因为请求中bRequest包含将设备放入一个已知状态的所有必需信息。但是,没有数据阶段的“toggle” 请求是明确禁止的。
设备,在数据或者状态阶段,如果不能完成控制传输(参考USB规范2.0的8.5.3.4),应该使用协议停止(stall)。协议停止的原因包括不支持的操作,无效的目标实体,意料外的数据长度或者无效的数据内容。设备应该更新请求错误代码控制器的值,主机可能利用这个控制器来决定协议停止的理由。
典型的,主机将使控制传输连续化,意味着下一个setup阶段将不会开始直到先前的状态阶段完成。但是,在那些总线出现错误的状况下,一个setup处理可能在先前的控制传输完成之前发送,设备必须放弃先前的控制传输。
由于命令连续化(serialization),尽可能短的保持控制传输是非常重要的。为了这个原因,同时也是避免polling for device status,规范定义了一个中断状态机制来传送状态改变。这个机制在2.4.2.2小节描述。任何一个要求10ms或者更多时间来响应SET_CUR请求,或者可以改变任何外部SET_CUR请求的控制,都必须发送一个控制改变的状态中断。
如果一个SET_CUR请求发送给一个异步控制器以不支持的操作,无效目标实体,意外数据长度或无效数据内容,设备应该使用协议停止,因为设备难以完成控制传输(参考8.5.3.4of USB 2.0spec),设备应该更新错误代码控制请求的值(4.2.1.2)。
在这种情况下,带有有效参数的SET_CUR请求发送给一个异步控制器,控制传输操作应该在收到数据传输之后立刻进入状态阶段。一旦状态阶段成功完成,设备应该最后发送一个控制改变中断:
如果请求成功,控制改变中断将advertise新值(参考2.4.2.2)。
如果请求不能被执行,设备应该发送一个控制改变中断,使用控制失败改变机制来描述失败原因(参考2.4.2.2的表格2-1和2.4.4的图形2-21)。
成功状态改变与控制改变中断结束的总时间是特殊执行的. 比如,一个磁带传输需要花费3-5秒来完成改变状态,所以控制改变中断需要在3-5秒内被发送。
接下来用流程图展示了SET_CUR 控制传输的Setup,数据和状态阶段各种组合,这些被描述是因为它们展示了一个SET_CUR请求与状态转换结果的关系。
3描述符
USB设备使用描述符来报告它们的属性。一个描述符是一个定义好格式的数据结构。具体信息察看USB 2.0规范中的第9.5小节。
接下来章节将描述视频接口分类中的标准和特殊类的USB描述符。
描述符Layout Overview
这一小节用一张图表说明了整个设备的描述符的layout。
设备描述符
因为视频功能总被认为取决于接口层,这个类规范并不定义一个特殊视频设备描述符。
对于一个含有视频功能并且只exposes 一个视频控制接口的设备,设备描述符必须指出分类信息能在接口层找到。因此,设备描述符的bDeviceClass field必须含有0,以致enumeration软件looks down 接口层来决定接口分类。bDeviceSubClass field 和bDeviceProtocol field必须设置为0。
expose 一个或多个视频接口集合的设备也要指出分类信息能在接口层找到。但是,因为设备使用接口联合描述符是为了描述video interface collection,它必须设置bDeviceClass,bDeviceSubClass,bDeviceProtocol field为0xEF,0x02和0x01。
所有设备描述符的其他fields必须与USB 2.0规范中9.6.1小节定义一致。这里没有特殊类的设备描述符。
Device_Qualifier 描述符
Device_Qualifier 描述符是所有USB2.0高速设备所要求的。设定它的规则跟上面设定bDeviceClass,bDeviceSubClass,bDeviceProtocol fields应用的规则一样。Device_Qualifier 描述符的所有其他fields必须与USB 2.0规范中9.6.2小节的定义一致。
配置描述符
对于一个包含视频功能的设备来说,它的配置描述符与USB 2.0规范中9.6.3中定义的标准配置描述符是一致的。没有特殊类配置描述符。
其它速度配置描述符(Other_Speed_Configuration Descriptor)
其它速度配置描述符是USB 2.0设备所要求的,那些设备有能力在全速(full-speed)和高速(high-speed)模型中操作。它同样与USB 2.0规范中定义的标准其它速度配置描述符一致。
接口联合描述符
对于每一个要求有一个视频控制接口和若干个视频流接口的设备功能,一个设备必须使用一个接口联合描述符来描述一个视频接口集合。标准的VIC接口联合描述符与接口联合描述符ECN中定义的标准接口联合描述符是一致的。
如果视频控制接口是一个视频接口集合的一部分,IAD里的iFunction field和标准视频控制接口描述符中的iInterface field必须一样。
视频控制接口描述符
视频控制接口描述符包含所有相关信息来完整刻画对应的视频功能。标准接口描述符刻画接口本身,然而特殊类的接口描述符提供的是关于视频功能内部的相关信息。
下面详细说明了修订标准的信息,并列举出了每个单元和终端的性能。包括标准视频控制接口描述符和特殊类视频控制接口描述符两大类。
标准视频控制接口描述符与USB 2.0规范中9.6.5小节定义的标准接口描述符一致,除了某些fields有特殊的值。
特殊类的视频控制接口描述符是所有用来完整描述视频功能的描述符的串联。比如所有的单元描述符和终端描述符。
特殊类视频控制接口描述符的总长度取决于视频功能里单元和终端的数量。因此,描述符都以在wTotalLength field中以字(16比特)反映整个特殊类视频控制接口描述符长度的报头开始。bcdUVC field确定视频设备分类规范的版本,这个规范中视频功能和它的描述符是兼容的(compliant)。bInCollection field表明在视频接口集合中有多少个视频控制接口。baInterfaceNr() array 包含集合中所有视频控制接口的数目。bInCollection 和baInterfaceNr()fields 一起提供所有必需的信息来决定哪个接口组合成整个USB接口。比如描述视频接口集合。
单元和终端描述符被报告的顺序并不重要。因为每个描述符都可以通过它的bDescriptorType和bDescriptorSubtype fields确定。
bDescriptorType field把描述符看成一个特殊类的接口描述符。
bDescriptorSubtype field了描述符的准确属性(nature)。
特殊类视频控制接口描述符包括输入终端描述符,输出终端描述符,照相机终端描述符,选择器单元描述符,处理单元描述符,扩展单元描述符,相关章节对它们进行了展开说明,描述了它们的具体结构定义规则,不详细展开。
视频控制端点描述符
这部分主要为视频控制接口描述所有可能的端点相关的描述符。
整个视频控制端点描述符包含VC控制端点描述符和VC中断端点描述符。VC控制端点描述符包括标准VC控制端点描述符和特殊类VC控制端点描述符;VC中断端点描述符同样包含标准VC中断端点描述符和特殊类VC中断端点描述符。规范对上述描述符结构进行了详细描述,不具体展开这里。
视频流接口描述符
视频流接口描述符包含所有用来完整描述视频流接口的相关信息。
整个视频流接口描述符包含标准VS接口描述符和特殊类VS接口描述符。标准的VS接口描述符与USB2.0规范中9.6.5种定义的标准接口描述符一致,除了某些field有特殊值;
特殊类VS接口描述符由输入报头,格式和帧描述符组成。每一个VS接口都含有一个单一的输入或者输出报头描述符,每个支持的视频流格式都含有一个的格式描述符,每个格式描述符都含有一个的帧描述符列表。报头,格式和帧描述符都只在相关接口设置为0时才定义。在相同接口的后来的交替设置中它们不会被重复。
特殊类VS接口描述符包含了输入报头描述符,输出报头描述符,有效载荷格式描述符,视频帧描述符,静态图像帧描述符,颜色匹配描述符。规范对上述描述符进行了说明,表明了它们的工作方式,结构等,在此不具体展开。
视频流端点描述符
这部分内容将为视频流接口描述所有可能的端点相关的描述符。
整个视频流端点描述符可以分为VS视频数据端点描述符和VS Bulk静态图像数据端点描述符。
VS视频数据端点描述符又包括标准VS同步视频数据端点描述符和标准VS Bulk视频数据端点描述符。VS Bulk静态图像数据端点描述符主要就是标准VS Bulk静态图像数据端点描述符。相关章节对它们的功能结构进行了说明,不具体展开。
字符串描述符
对于这类设备基本的要求是为了设备实现用英语提供一个功能名字字符串描述符(LANGID=0x0409)。这个可以参考标准视频控制接口描述符中的iInterface field,详细内容见本规范3.7.1小节。
如果视频控制接口是一个视频接口集合的一部分,IAD中的iFunction field和标准VC接口描述符中的iInterface field必须相同。
所有其他的字符串描述符都是可选择的。
因为设备必须实现设备名字字符串描述符,它必须也支持包含设备支持的LANGID代码字符串描述符0,这个描述符和标准UNICODE字符串描述符都被定义在USB 2.0规范中的9.6.7小节。
4特殊类请求
绝大部分的特殊类请求被用来进行(set and get)视频相关的控制。这些控制可以分为两个主要的组:与视频功能相关的操作控制,比如亮度,曝光,选择器位置;通过视频数据端点影响数据传输,比如当前帧速率。
视频控制请求——视频功能的控制是通过操作那些嵌入在视频功能的单位和终端中的单独的控制器的属性来完成的,特殊类的视频控制接口描述符包含一个单元描述符和终端描述符的集合,每一个描述符都表明了实体中所提供的控制功能。视频控制请求总是导向单一的视频功能的视频控制接口。请求包含足够的信息(unit ID,control selector)让视频功能正确的发送一个特殊的请求。
视频流请求——一个视频流接口的特殊类行为的控制是通过对接口控制器的操作完成的。视频流请求直接导向控制器所在的接口。
请求可以是强制性的或者选择性的,and listed as such for every control。在SET_CUR可选择的地方,它的存在通过GET_INFO来决定。如果一个视频功能不支持一个特定的请求,那么当请求发送至这个功能时,它必须停止控制管道来说明这个问题。
请求Layout
这部分章节描述了Set和Get请求的一般结构,还从细节上讨论了对于不同请求类型Set/Get请求的使用。
Set请求
这个请求用来设置在一个视频功能实体里的控制器的属性。
表格4-1 Set请求
bmRequestType field 说明这是一个SET请求(D7=0)。它是一个特殊类请求(D6..5=01),进入视频功能的视频控制接口或者视频流接口(D4..0=00001),或者一个视频流接口(D4..0=00010)的视频数据端点。
bRequest field包含一个用来指明将要被修改的地址控制器的属性的常数。对于一个控制器可能的属性是:Current setting attribute(SET_CUR)
如果地址控制器或者实体不支持对某种属性的修改,当有企图修改属性的行为产生时,控制管道必须提示停止。只有CUR属性被Set请求支持。
wValue field的解释由wIndex field的值qualified。wValue field的layout的改变取决于哪个实体被设定地址。下面的章节描述了每个实体的wValue field的值。大部分的例子中,wValue field在高字节中包含控制选择器(Control Selector),它被用来给包含多重控制器的实体中的一个特殊控制器设定地址。如果实体只含有一个控制器,那么没有必要指定一个控制选择器,wValue field可以用来传输额外的参数。
wIndex field说明在低字节中设定地址的接口或者端点,高字节中的实体ID或者0。万一给一个接口设定了地址,虚拟实体“接口”将通过说明高字节中的0来赋予地址。wIndex中的值必须与接收器中的值一致(appropriate to the recipient)。只有视频功能中存在的实体才能被设定地址,也只有合适的接口或端点数目才可以被使用。如果请求说明了一个未知的或者非实体的ID或未知的接口/端点数目,控制管道必须提示停止。
Set请求的实际参数在控制传输的数据阶段被传递。参数块(parameter block)的长度由请求的wLength field确定。参数块的layout由bRequest和wIndex fields共同确定。
Get请求
这个请求用来返回视频功能中一个实体内的特殊控制器的属性设置。
表格4-2 Get请求
bmRequestType field 说明这是一个SET请求(D7=1)。它是一个特殊类请求(D6..5=01),进入视频功能的视频控制接口或者视频流接口(D4..0=00001),或者一个视频流接口(D4..0=00010)的视频数据端点。
bRequest field包含一个用来指明将要被修改的地址控制器的属性的常数。对于一个控制器可能的属性是:
Current setting attribute(GET_CUR)
Minimum setting attribute(GET_MIN)
Maximum setting attribute(GET_MAX)
Default setting attribute(GET_DEF)
Resolution attribute(GET_RES)
Data length attribute(GET_LEN)
Information attribute(GET_INFO)
GET_INFO请求queries指定控制器的性能(capability)和状态。当发送这个请求时,wLength field应该总是被设置为1字节的值。返回的结果是一个比特mask,报告控制器的性能(capability),返回意义如下表:
表格4-3 Defined Bits Containing Capabilities of the Control
GET_INFO中唯一反映控制器状态的比特是D2(自动模式下例外),其它的比特都是性能(capability)比特,这样当一个控制器处于自动模式的时候,D1比特一定不能在GET_INFO中更新。
如果一个控制器能在D2置位时实现,设备需要能够发送控制改变中断,这样D3必须置位。
设备通过它们GET_DEF的值能显示单元,终端和接口控制器等硬件的默认值。这些值可能被主机用来将控制器恢复至默认值。
如果地址控制器或者实体不支持对某种属性的读出(readout),当有企图读取属性的行为产生时,控制管道必须提示停止。
wValue field的解释由wIndex field的值qualified。wValue field的layout的改变取决于哪个实体被设定地址。下面的章节描述了每个实体的wValue field的值。大部分的例子中,wValue field在高字节中包含控制选择器(Control Selector),它被用来给包含多重控制器的实体中的一个特殊控制器设定地址。如果实体只含有一个控制器,那么没有必要指定一个控制选择器,wValue field可以用来传输额外的参数。
wIndex field说明在低字节中设定地址的接口或者端点,高字节中的实体ID或者0。万一给一个接口设定了地址,虚拟实体“接口”将通过说明高字节中的0来赋予地址。wIndex中的值必须与接收器中的值一致(appropriate to the recipient)。只有视频功能中存在的实体才能被设定地址,也只有合适的接口或端点数目才可以被使用。如果请求说明了一个未知的或者非实体的ID或未知的接口/端点数目,控制管道必须提示停止。
Get请求的实际参数在控制传输的数据阶段被传递。返回的参数块(parameter block)的长度由请求的wLength field确定。如果参数块比wLength field确定的长度更长的话,那只有参数块的初始字节才能返回。如果参数块比wLength field确定的长度更短,在更多数据请求发送来时,设备通过发送一个短的信息包来表明控制传输的结束。
视频控制请求
这部分主要描述可以用来操作视频控制器的可能请求。参数块的相同layout即可用在Set请求也可用在Get请求。
每个控制器的定义都说明了对于控制器来说并不关心请求是强制的还是可选择的。任何执行的请求必须与控制器的定义一致。设备制造商可以自由的实现任何其它的请求,但是那些没有详细说明的请求的定义应该被主机执行时所忽略,当然GEN_LEN请求是个例外。如果GEN_LEN请求被执行,主机软件将使用结果来为Set和Get请求决定正确的缓冲器长度。
视频控制请求可以分为接口控制请求和单元终端控制请求两大类。接口控制请求包括功耗模式控制和请求错误编码控制(Request Error Code Control),规范对两者作了具体说明,不详细展开。单元和终端控制请求包含了照相机终端控制请求,选择器单元控制请求,处理单元控制请求,扩展单元控制请求。照相机终端控制请求包含了扫描模式控制,自动曝光等照相机控制方面的请求;而处理单元请求包含了亮度控制,对比度控制等等请求。这里都不详细论述了。
视频流请求
视频流请求可以直接导入视频流接口或者联合视频数据端点,取决于被操作的控制器的具体位置。
视频流请求的子类——接口控制请求可以分为Video Probe and Commit Controls,Video Still Probe Control and Still Commit Control,同步延迟控制,静态图像触发控制等等。规范中对每个子类都进行了展开叙述,说明了它们的请求格式结构等,不具体论述这里。下载本文