本文主要介紹一下UVC 中斷控制端點,大多數(shù)情況下UVC 的控制都是由端點0 控制的,一般情況下很少用到UVC 中斷端點。今天主要介紹一下UVC 中斷端點以及什么情況下需要用到中斷端點。
1. 什么是中斷端點?
一個USB視頻控制接口可以支持一個可選的中斷端點,以通知主機關(guān)于視頻功能中不同的可尋址實體(終端、單元、接口和端點)的狀態(tài)。如果存在中斷端點,則被整個視頻接口集合用于向主機傳遞狀態(tài)信息。它被認(rèn)為是視頻控制接口的一部分,因為這是集合的錨定接口。
以下情況中斷端點是必須支持的:
設(shè)備支持硬件觸發(fā)靜態(tài)抓拍
設(shè)備支持 AutoUpdate 控件
該設(shè)備實現(xiàn)任何異步控制
2. 標(biāo)準(zhǔn)請求
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. 硬件觸發(fā)中斷
狀態(tài)中斷端點的定義用途之一是讓硬件觸發(fā)器通知主機軟件啟動靜止圖像捕獲。例如,當(dāng)硬件檢測到按下按鈕時,狀態(tài)中斷端點將發(fā)出來自相關(guān)視頻流接口的中斷。觸發(fā)中斷的事件(按鍵按下或者釋放)在中端包里面顯示。該按鈕的默認(rèn)初始狀態(tài)是“釋放”狀態(tài)。
設(shè)備必須指定它是否支持硬件觸發(fā)器,以及主機軟件應(yīng)該如何響應(yīng)硬件觸發(fā)器事件。這些都是在相關(guān)的視頻流接口中特定于類的描述符中指定的。
4. Still image Capture
5.1 Still image 方法
攝像機的一個共同特性是支持與視頻流相關(guān)聯(lián)的靜態(tài)圖像捕獲。這可以通過可編程的軟件觸發(fā)器或硬件觸發(fā)器來啟動。
根據(jù)所使用的方法,靜止圖像幀可能必須與流的視頻幀大小相同。有幾種支持的方法來捕獲靜態(tài)圖像,設(shè)備必須在相關(guān)視頻流接口的特定類描述符中指定它支持哪種方法。
Method 1 :主機軟件將在接收到硬件觸發(fā)事件后,將從相關(guān)視頻流接口中的活動視頻管道中提取下一個可用的視頻幀。在這種情況下,硬件不會中斷或改變視頻流。對于這種方法,靜止圖像幀始終與流的視頻幀大小相同
Method 2:如果設(shè)備支持更高質(zhì)量的靜止圖像,它可以選擇通過活動視頻管道傳輸特定的數(shù)據(jù)包,在這種情況下,主機軟件將暫停視頻流,根據(jù)靜態(tài)探測/提交協(xié)商(根據(jù)帶寬可用性)選擇最佳帶寬替代設(shè)置。發(fā)送一個 VS_STILL_IMAGE_TRIGGER_CONTROL 請求((see section 4.3.1.4, "Still Image Trigger Control"),并準(zhǔn)備好接收靜止的圖像數(shù)據(jù)。該設(shè)備傳輸在有效載荷包頭中被標(biāo)記為這樣的靜止圖像數(shù)據(jù)。一旦收到完整的靜止圖像,主機軟件將恢復(fù)到原來的替代設(shè)置,并恢復(fù)視頻流。
Method 3 :這種方法能夠從一個專用的批量靜止圖像管道中捕獲更高質(zhì)量的靜止圖像。通過這樣做,活動的數(shù)據(jù)流將繼續(xù)不間斷地運行。這種方法涵蓋有兩種情況:
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) |
在第一種情況下,主機軟件從該設(shè)備啟動靜止圖像捕獲。它通過發(fā)送一個 VS_STILL_IMAGE_TRIGGER_CONTROL 請求,通過專用的bulk 端點((see section 4.3.1.4, "Still Image Trigger Control")。在發(fā)出請求后,主機將開始從相關(guān)的視頻流接口的批量靜態(tài)圖像端點接收靜態(tài)圖像,該設(shè)備捕獲高質(zhì)量的靜止圖像,并將數(shù)據(jù)傳輸?shù)脚快o止圖像端點。
在第二種情況下,設(shè)備在檢測到硬件觸發(fā)器后啟動靜止圖像傳輸。當(dāng)硬件檢測到按下按鈕時,狀態(tài)中斷端點將發(fā)出來自相關(guān)視頻流接口的中斷。如果bTriggerUsage字段被設(shè)置為初始化靜止圖像捕獲(initiate still image capture),設(shè)備將設(shè)置 VS_STILL_IMAGE_TRIGGER_CONTROL 的bTrigger 字段為分離的bulk 傳輸,然后,主機軟件應(yīng)該開始接收在接收到中斷后設(shè)備捕獲的靜止圖像數(shù)據(jù)。傳輸完成后,設(shè)備應(yīng)將bTrigger 字段重置為“正常運行”
5.2 Still image trigger control
此控件通知設(shè)備開始通過相關(guān)的同步或批量管道發(fā)送靜止圖像數(shù)據(jù)。一個專用的靜止圖像批量管道僅用于靜止圖像捕獲的方法3。此控制僅在流媒體發(fā)生時設(shè)置,并在發(fā)送靜止圖像后由硬件重置為“正常運行”模式。只有當(dāng)設(shè)備支持靜止圖像檢索的方法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
當(dāng)發(fā)生以下事件之一時,主機軟件應(yīng)該向此控件發(fā)送一個GET_CUR請求,以確定該錯誤:
視頻或靜止圖像有效負(fù)載頭中的錯誤位被設(shè)置了。
該設(shè)備向主機發(fā)出一個“流錯誤”中斷(Error Code Control)。Status Interrupt Endpoint 上報
批量視頻端點在事務(wù)的數(shù)據(jù)或握手階段向主機返回一個stall
對于主機正在向設(shè)備傳輸視頻數(shù)據(jù)的場景,主機不能使用有效負(fù)載報頭中的錯誤位來檢測設(shè)備錯誤。因此,為了確定何時發(fā)生流媒體錯誤,主機必須依賴于來自設(shè)備的控制更改中斷或批量端點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。如果數(shù)據(jù)源設(shè)備檢測到視頻或靜止圖像數(shù)據(jù)是保護(hù)的或者不能被傳輸,會發(fā)生這種情況。在這種情況下,在受保護(hù)內(nèi)容期間將發(fā)送只包含頭的空包 2: Input buffer underrun。如果數(shù)據(jù)源設(shè)備無法按請求的速率提供數(shù)據(jù),則它將在緩沖區(qū)運行不足期間傳輸只包含磁頭文件的空數(shù)據(jù)包。 3:Data discontinuity 。表示數(shù)據(jù)不連續(xù)(由于不良介質(zhì)、編碼器錯誤等)在當(dāng)前傳輸中的數(shù)據(jù)有效負(fù)載之前。 4: Output buffer underrun 。數(shù)據(jù)接收設(shè)備沒有以足夠的速率接收數(shù)據(jù)。 5: Output buffer overrun。數(shù)據(jù)接收器設(shè)備正在以超過其緩沖能力的速率提供數(shù)據(jù)。 6: Format change。發(fā)生了一個動態(tài)格式更改事件。 7: Still image capture error。在靜態(tài)圖像捕獲期間出錯。 |
6. Dynamic Format Change Support
某些設(shè)備,能夠在流媒體發(fā)生時動態(tài)地改變正在流媒體到主機的視頻格式。由于新的視頻格式可能具有與舊格式不同的總線帶寬要求,因此必須通知主機格式的變化,并允許執(zhí)行重新配置和總線帶寬重新分配所需的,以支持新的視頻格式。
該設(shè)備通過視頻流媒體輸入報頭(Video Strem Input header )的bmInfo字段表示其對動態(tài)格式更改事件的支持。
當(dāng)發(fā)生動態(tài)格式更改事件時,將執(zhí)行以下步驟:
檢測到動態(tài)格式變化(當(dāng)流媒體發(fā)生時)。(通過 Status Interrupt Endpoint 上報)
設(shè)備開始在視頻流有效負(fù)載頭中設(shè)置錯誤位發(fā)送空數(shù)據(jù)有效負(fù)載到主機。(uvc payload herder)
設(shè)備設(shè)置 Stream Error Code Control為格式變化(format change)
主機探測新的流狀態(tài),通過VS_PROBE_CONTROL 請求,發(fā)送GET_CUR
如果新的格式可用,主機將通過 VS_COMMIT_CONTROL 請求, 發(fā)送 SET_CUR。如有必要,通過一個備用接口選擇標(biāo)準(zhǔn)請求重新分配USB帶寬。如果不能接受新格式,主機將與流探測/提交控件協(xié)商一種新格式。
7. 總結(jié)
UVC 中斷端點 用法如下:
所有VC 上的請求的異步控制(比如圖像對比度、亮度、zoom 等)
靜態(tài)抓拍或者抓拍控制
動態(tài)格式切換同步。
典型用法如下:
具體路徑(以拍照為例):按鍵拍照,設(shè)備通過Status Interrput Endpoint 上報 到 host,host 重新協(xié)商開啟抓拍。
其他控制也是類似的。中斷端點的作用是把設(shè)備的行為,及時上報到host 端,以便主機做出調(diào)整。
審核編輯:劉清
-
USB接口
+關(guān)注
關(guān)注
9文章
701瀏覽量
55657 -
觸發(fā)器
+關(guān)注
關(guān)注
14文章
2000瀏覽量
61164 -
觸發(fā)中斷
+關(guān)注
關(guān)注
0文章
11瀏覽量
6567 -
uvc
+關(guān)注
關(guān)注
1文章
127瀏覽量
14531
原文標(biāo)題:UVC 學(xué)習(xí):UVC 中斷端點介紹
文章出處:【微信號:漫談嵌入式,微信公眾號:漫談嵌入式】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論