本文主要介绍一下UVC 中断控制端点,大多数情况下UVC 的控制都是由端点0 控制的,一般情况下很少用到UVC 中断端点。今天主要介绍一下UVC 中断端点以及什么情况下需要用到中断端点。
1. 什么是中断端点?
一个USB视频控制接口可以支持一个可选的中断端点,以通知主机关于视频功能中不同的可寻址实体(终端、单元、接口和端点)的状态。如果存在中断端点,则被整个视频接口集合用于向主机传递状态信息。它被认为是视频控制接口的一部分,因为这是集合的锚定接口。
以下情况中断端点是必须支持的:
设备支持硬件触发静态抓拍
设备支持 AutoUpdate 控件
该设备实现任何异步控制
2. 标准请求
2.1 Status Packet Format
Offset | Field | Size | Value | Description |
---|---|---|---|---|
0 | bStatuType | 1 | Bitmap/Number |
D7...D4:Reserved D3...D0:Originator 0:Reserved 1:VideoControl interface 2:VideoStreaming interface |
1 | bOriginator | 1 | Number |
ID of the Terminal, Unit or Interface that reports the interrupt |
bStatusType:Status 类型
Originator:表示请求来源是VC 还是VS
bOriginator:表示来源的有效ID 或者接口号
Terminal ID
Unit ID
Interface numer
2.2 Status Packet Format(Video Control)
Offset | Field | Size | Value | Description |
---|---|---|---|---|
0 | bStatuType | 1 | Bitmap/Number | 0x1 |
1 | bOriginator | 1 | Number |
ID of the Terminal, Unit or Interface that reports the interrupt |
2 | bEvent | 1 | Number |
0x00: Control Change 0x01 – 0xFF: Reserved |
3 | bSelector | 1 | Number |
Control Change Report the Control Selector of the control that (cs) |
4 | bAttribute | 1 | Number |
Specify the type of control change: 0x00: Control value change 0x01: Control info change 0x02: Control failure change 0x03: Control min change 0x04: Control max change 0x05 – 0xFF: Reserved |
5 | bValue | n |
bAttribute: Description: 0x00 Equivalent to the result of a GET_CUR 0x01 Equivalent to the result of a GET_INFO 0x02 Equivalent to the result of a GET_CUR request on VC_REQUEST_ERROR_CODE_CONTROL 0x03 Equivalent to the result of a GET_MIN 0x04 Equivalent to the result of a GET_MAX |
2.3 Status Packet Format(Video Stream)
Offset | Field | Size | Value | Description |
---|---|---|---|---|
0 | bStatuType | 1 | Bitmap/Number | 0x2 |
1 | bOriginator | 1 | Number |
ID of the Terminal, Unit or Interface that reports the interrupt |
2 | bEvent | 1 | Number |
0x00: Button Press 0x01 – 0xFF: Sream Error |
3 | bValue | n | Number |
Button Press: (n=1) 0x00: Button released 0x01: Button pressed |
3. 硬件触发中断
状态中断端点的定义用途之一是让硬件触发器通知主机软件启动静止图像捕获。例如,当硬件检测到按下按钮时,状态中断端点将发出来自相关视频流接口的中断。触发中断的事件(按键按下或者释放)在中端包里面显示。该按钮的默认初始状态是“释放”状态。
设备必须指定它是否支持硬件触发器,以及主机软件应该如何响应硬件触发器事件。这些都是在相关的视频流接口中特定于类的描述符中指定的。
4. Still image Capture
5.1 Still image 方法
摄像机的一个共同特性是支持与视频流相关联的静态图像捕获。这可以通过可编程的软件触发器或硬件触发器来启动。
根据所使用的方法,静止图像帧可能必须与流的视频帧大小相同。有几种支持的方法来捕获静态图像,设备必须在相关视频流接口的特定类描述符中指定它支持哪种方法。
Method 1 :主机软件将在接收到硬件触发事件后,将从相关视频流接口中的活动视频管道中提取下一个可用的视频帧。在这种情况下,硬件不会中断或改变视频流。对于这种方法,静止图像帧始终与流的视频帧大小相同
Method 2:如果设备支持更高质量的静止图像,它可以选择通过活动视频管道传输特定的数据包,在这种情况下,主机软件将暂停视频流,根据静态探测/提交协商(根据带宽可用性)选择最佳带宽替代设置。发送一个 VS_STILL_IMAGE_TRIGGER_CONTROL 请求((see section 4.3.1.4, "Still Image Trigger Control"),并准备好接收静止的图像数据。该设备传输在有效载荷包头中被标记为这样的静止图像数据。一旦收到完整的静止图像,主机软件将恢复到原来的替代设置,并恢复视频流。
Method 3 :这种方法能够从一个专用的批量静止图像管道中捕获更高质量的静止图像。通过这样做,活动的数据流将继续不间断地运行。这种方法涵盖有两种情况:
Method | Isochronous video data pipe | Bulk video data pipe |
---|---|---|
Method 1 | 1 Isochronous (Video) | 1 Bulk (Video) |
Method 2 | 1 Isochronous (Video/Still) | 1 Bulk (Video/Still) |
Method 3 |
1 Isochronous (Video) 1 Bulk (Still) |
1 Bulk (Video) 1 Bulk (Still) |
在第一种情况下,主机软件从该设备启动静止图像捕获。它通过发送一个 VS_STILL_IMAGE_TRIGGER_CONTROL 请求,通过专用的bulk 端点((see section 4.3.1.4, "Still Image Trigger Control")。在发出请求后,主机将开始从相关的视频流接口的批量静态图像端点接收静态图像,该设备捕获高质量的静止图像,并将数据传输到批量静止图像端点。
在第二种情况下,设备在检测到硬件触发器后启动静止图像传输。当硬件检测到按下按钮时,状态中断端点将发出来自相关视频流接口的中断。如果bTriggerUsage字段被设置为初始化静止图像捕获(initiate still image capture),设备将设置 VS_STILL_IMAGE_TRIGGER_CONTROL 的bTrigger 字段为分离的bulk 传输,然后,主机软件应该开始接收在接收到中断后设备捕获的静止图像数据。传输完成后,设备应将bTrigger 字段重置为“正常运行”
5.2 Still image trigger control
此控件通知设备开始通过相关的同步或批量管道发送静止图像数据。一个专用的静止图像批量管道仅用于静止图像捕获的方法3。此控制仅在流媒体发生时设置,并在发送静止图像后由硬件重置为“正常运行”模式。只有当设备支持静止图像检索的方法2或方法3时,才需要此控制。
Control Selector | VS_STILL_IMAGE_TRIGGER_CONTROL |
---|---|
Mandatory Requests | SET_CUR, GET_CUR, GET_INFO |
wLength | 1 |
Offset | Field | Size | Value | Description |
---|---|---|---|---|
0 | bTrigger | 1 | Number |
The setting for the Still Image Trigger Control: 0: Normal operation. 1: Transmit still image. 2: Transmit still image via dedicated bulk pipe 3: Abort still image transmission |
5. Stream Error Control
当发生以下事件之一时,主机软件应该向此控件发送一个GET_CUR请求,以确定该错误:
视频或静止图像有效负载头中的错误位被设置了。
该设备向主机发出一个“流错误”中断(Error Code Control)。Status Interrupt Endpoint 上报
批量视频端点在事务的数据或握手阶段向主机返回一个stall
对于主机正在向设备传输视频数据的场景,主机不能使用有效负载报头中的错误位来检测设备错误。因此,为了确定何时发生流媒体错误,主机必须依赖于来自设备的控制更改中断或批量端点Stall
Stream Error Control
Control Selector | VS_STREAM_ERROR_CODE_CONTROL |
---|---|
Mandatory Requests | GET_CUR, GET_INFO |
wLength | 1 |
Offset | Field | Size | Value | Description |
---|---|---|---|---|
0 | bStreamErrorCode | 1 | Number |
0: No Error. 1: Protected content。如果数据源设备检测到视频或静止图像数据是保护的或者不能被传输,会发生这种情况。在这种情况下,在受保护内容期间将发送只包含头的空包 2: Input buffer underrun。如果数据源设备无法按请求的速率提供数据,则它将在缓冲区运行不足期间传输只包含磁头文件的空数据包。 3:Data discontinuity 。表示数据不连续(由于不良介质、编码器错误等)在当前传输中的数据有效负载之前。 4: Output buffer underrun 。数据接收设备没有以足够的速率接收数据。 5: Output buffer overrun。数据接收器设备正在以超过其缓冲能力的速率提供数据。 6: Format change。发生了一个动态格式更改事件。 7: Still image capture error。在静态图像捕获期间出错。 |
6. Dynamic Format Change Support
某些设备,能够在流媒体发生时动态地改变正在流媒体到主机的视频格式。由于新的视频格式可能具有与旧格式不同的总线带宽要求,因此必须通知主机格式的变化,并允许执行重新配置和总线带宽重新分配所需的,以支持新的视频格式。
该设备通过视频流媒体输入报头(Video Strem Input header )的bmInfo字段表示其对动态格式更改事件的支持。
当发生动态格式更改事件时,将执行以下步骤:
检测到动态格式变化(当流媒体发生时)。(通过 Status Interrupt Endpoint 上报)
设备开始在视频流有效负载头中设置错误位发送空数据有效负载到主机。(uvc payload herder)
设备设置 Stream Error Code Control为格式变化(format change)
主机探测新的流状态,通过VS_PROBE_CONTROL 请求,发送GET_CUR
如果新的格式可用,主机将通过 VS_COMMIT_CONTROL 请求, 发送 SET_CUR。如有必要,通过一个备用接口选择标准请求重新分配USB带宽。如果不能接受新格式,主机将与流探测/提交控件协商一种新格式。
7. 总结
UVC 中断端点 用法如下:
所有VC 上的请求的异步控制(比如图像对比度、亮度、zoom 等)
静态抓拍或者抓拍控制
动态格式切换同步。
典型用法如下:
具体路径(以拍照为例):按键拍照,设备通过Status Interrput Endpoint 上报 到 host,host 重新协商开启抓拍。
其他控制也是类似的。中断端点的作用是把设备的行为,及时上报到host 端,以便主机做出调整。
审核编辑:刘清
全部0条评论
快来发表一下你的评论吧 !