本文主要介绍一下UVC 中断控制端点,大多数情况下UVC 的控制都是由端点0 控制的,一般情况下很少用到UVC 中断端点。今天主要介绍一下UVC 中断端点以及什么情况下需要用到中断端点。
一个USB视频控制接口可以支持一个可选的中断端点,以通知主机关于视频功能中不同的可寻址实体(终端、单元、接口和端点)的状态。如果存在中断端点,则被整个视频接口集合用于向主机传递状态信息。它被认为是视频控制接口的一部分,因为这是集合的锚定接口。
以下情况中断端点是必须支持的:
设备支持硬件触发静态抓拍
设备支持 AutoUpdate 控件
该设备实现任何异步控制
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 |
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 |
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 |
状态中断端点的定义用途之一是让硬件触发器通知主机软件启动静止图像捕获。例如,当硬件检测到按下按钮时,状态中断端点将发出来自相关视频流接口的中断。触发中断的事件(按键按下或者释放)在中端包里面显示。该按钮的默认初始状态是“释放”状态。
设备必须指定它是否支持硬件触发器,以及主机软件应该如何响应硬件触发器事件。这些都是在相关的视频流接口中特定于类的描述符中指定的。
摄像机的一个共同特性是支持与视频流相关联的静态图像捕获。这可以通过可编程的软件触发器或硬件触发器来启动。
根据所使用的方法,静止图像帧可能必须与流的视频帧大小相同。有几种支持的方法来捕获静态图像,设备必须在相关视频流接口的特定类描述符中指定它支持哪种方法。
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) |
此控件通知设备开始通过相关的同步或批量管道发送静止图像数据。一个专用的静止图像批量管道仅用于静止图像捕获的方法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 |
当发生以下事件之一时,主机软件应该向此控件发送一个GET_CUR请求,以确定该错误:
对于主机正在向设备传输视频数据的场景,主机不能使用有效负载报头中的错误位来检测设备错误。因此,为了确定何时发生流媒体错误,主机必须依赖于来自设备的控制更改中断或批量端点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。在静态图像捕获期间出错。 |
某些设备,能够在流媒体发生时动态地改变正在流媒体到主机的视频格式。由于新的视频格式可能具有与旧格式不同的总线带宽要求,因此必须通知主机格式的变化,并允许执行重新配置和总线带宽重新分配所需的,以支持新的视频格式。
该设备通过视频流媒体输入报头(Video Strem Input header )的bmInfo字段表示其对动态格式更改事件的支持。
当发生动态格式更改事件时,将执行以下步骤:
UVC 中断端点 用法如下:
典型用法如下:
具体路径(以拍照为例):按键拍照,设备通过Status Interrput Endpoint 上报 到 host,host 重新协商开启抓拍。
其他控制也是类似的。中断端点的作用是把设备的行为,及时上报到host 端,以便主机做出调整。