本文主要介紹一下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 端,以便主機做出調整。
