本文轉(zhuǎn)自公眾號,歡迎關(guān)注
基于DWC2的USB驅(qū)動開發(fā)-UVC的相機(jī)終端詳解 (qq.com)
一.前言
本篇來詳細(xì)分析下UVC的相機(jī)終端相關(guān)的內(nèi)容,同樣的我們理論結(jié)合實(shí)踐來進(jìn)行。
二.相機(jī)單元簡介
攝像機(jī)終端(CT)控制傳輸視頻流的設(shè)備組件的機(jī)械(或等效數(shù)字)功能。因此,它僅適用于具有可控鏡頭或傳感器特性的視頻捕獲設(shè)備。相機(jī)端子始終表示為具有單個輸出引腳的輸入端子。簡單理解就是相機(jī)終端是是一個輸入終端,他的前面沒有其他單元和終端了,它只有一個輸出引腳,后面一般接到處理單元。
它提供了對以下功能的支持:
- Scanning Mode (Progressive or Interlaced)掃描模式(逐行掃描或交錯掃描)
- Auto-Exposure Mode 自動曝光模式
- Auto-Exposure Priority自動曝光優(yōu)先級
- Exposure Time曝光時間
- Focus對焦
- Auto-Focus自動對焦
- Simple Focus簡單對焦
- Iris光圈
- Zoom縮放
- Pan水平左右移動鏡頭 X軸旋轉(zhuǎn) 橫搖
- Roll滾角
- Tilt垂直上下移動鏡頭 Y軸旋轉(zhuǎn) 豎搖
- Digital Windowing數(shù)字窗口
- Region of Interest 感興趣區(qū)域
對上述功能的支持都是可選的。對焦控制等有些是支持自動控制開關(guān)的,如果支持自動控制的屬性其為打開狀態(tài),則設(shè)備將自動調(diào)整,并且讀取請求將反映自動調(diào)整的值。此時手動方式設(shè)置對應(yīng)屬性將導(dǎo)致STALL,即設(shè)備要返回STALL,錯誤代碼為bRequestErrorCode=“錯誤狀態(tài)”。
當(dāng)退出自動模式時,相應(yīng)屬性保持在轉(zhuǎn)換前的有效值。
相機(jī)終端是特殊的輸入終端,符號和輸入終端一致,注意其左邊沒有引腳,即他就是輸入前面不再有輸入了,右邊輸出只接一個引腳。
三.拓?fù)浣Y(jié)構(gòu)
以下從描述符來看處理單元的拓?fù)浣Y(jié)構(gòu),如下圖是一個實(shí)際的UVC產(chǎn)品的描述符,只截取了和UVC相關(guān)的IAD下的描述符。
可以看到處理單元的ID是 bTerminalID=1 ,它沒有bSourceID了,他就是輸入最源頭了。其后面是bUnitID=2的處理單元,該單元的bSourceID=1表示其源頭是本相機(jī)終端。
相機(jī)終端采集到數(shù)據(jù),到后面進(jìn)行處理,所以相機(jī)終端后面接處理單元,這也是好理解的。
其拓?fù)淙缦?br />
順便提一下:
這里為什么有些叫終端Terminal ,有些叫單元Unit呢,從名字就可以看出,終端就是首末,要么就是前面沒有前導(dǎo),要么就是后面沒有后繼所以叫終端,而單元是位于中間的前后都有。
四.相機(jī)終端描述符
處理終端的描述符應(yīng)該位于UVC的控制接口描述符VideoControl Interface Descriptors的Class-specific VC Interface Header Descriptor的后面
如下所示紅色線所指示
本實(shí)例終端描述符對應(yīng)的具體內(nèi)容如下
相機(jī)單元的描述詳細(xì)內(nèi)容見規(guī)格書P66
3.7.2.3 Camera Terminal Descriptor
偏移 | 區(qū)域 | 大小 | 值 | 說明 |
---|---|---|---|---|
0 | bLength | 1 | 數(shù)字值,18 | 本描述符的字節(jié)數(shù) |
1 | bDescriptorType | 1 | 常數(shù)CS_INTERFACE=0x24 | 描述符類型 |
2 | bDescriptorSubtype | 1 | 常數(shù)VC_INPUT_TERMINAL=0x02 | 描述符子類 |
3 | bTerminalID | 1 | 數(shù)字 | 終端ID |
4 | wTerminalType | 2 | 常數(shù)ITT_CAMERA | 終端類型 |
6 | bAssocTerminal | 1 | 常數(shù) | 與此輸入終端關(guān)聯(lián)的輸出終端ID |
7 | iTerminal | 1 | Index | 描述本終端的字符串描述索引,填0則沒有字符串描述符。 |
8 | wObjectiveFocalLengthMin | 2 | 數(shù)字 | 如果不支持光學(xué)變焦,則Lmin的值;該字段應(yīng)設(shè)置為0 |
10 | wObjectiveFocalLengthMax | 2 | 數(shù)字 | 不支持光學(xué)變焦時的Lmax值;該字段應(yīng)設(shè)置為0。 |
12 | wOcularFocalLength | 2 | 數(shù)字 | 如果不支持“光學(xué)縮放”Locular該字段應(yīng)設(shè)置為0。 |
14 | bControlSize | 1 | 數(shù)字 3 | bmControls域的字節(jié)數(shù) |
15 | bmControls | 3 | Bitmap |
l其中bDescriptorType的定義參考規(guī)格書的P171 A.5. Video Class-Specific VC Interface Descriptor Subtypes
l其中bDescriptorSubtype的定義參考規(guī)格書的P172 A.4. Video Class-Specific Descriptor Types
l其中bTerminalID
攝像頭終端由bTerminalID字段中的值唯一標(biāo)識。 非零常數(shù) ,同一功能接口內(nèi)的任何其他單元或終端都不能具有相同的ID。
這里為什么要是非零常數(shù)呢?為什么從0開始編號呢,因?yàn)樵谡埱笾衱Index的高8位為0用于區(qū)分是接口請求,其他非0值為對應(yīng)終端和單元ID,所以不能從0開始編號了。
在本功能對應(yīng)的接口內(nèi)該值和其他單元和終端的ID不能重復(fù)。
lwTerminalType字段用于說明是什么類型的終端。對于攝像機(jī)終端,該字段應(yīng)設(shè)置為ITT_Camera,見規(guī)格書P177 Table B- 2 Input Terminal Types
lbAssociateTerminal字段用于將輸出端子與該輸入端子相關(guān)聯(lián),從而有效地實(shí)現(xiàn)雙向端子對。
為0則是單向端子。
l其中bmControls,表示支持的處理類型
某一位置位則對應(yīng)的處理支持,小端模式
D0: Scanning Mode
D1: Auto-Exposure Mode
D2: Auto-Exposure Priority
D3: Exposure Time (Absolute)
D4: Exposure Time (Relative)
D5: Focus (Absolute)
D6 : Focus (Relative)
D7: Iris (Absolute)
D8 : Iris (Relative)
D9: Zoom (Absolute)
D10: Zoom (Relative)
D11: PanTilt (Absolute)
D12: PanTilt (Relative)
D13: Roll (Absolute)
D14: Roll (Relative)
D15: Reserved
D16: Reserved
D17: Focus, Auto
D18: Privacy
D19: Focus, Simple
D20: Window
D21: Region of Interest
D22 – D23: Reserved, set to zero
以下是對應(yīng)一個實(shí)例,
-------- Video Control Input Terminal Descriptor ------
bLength : 0x12 (18 bytes)
bDescriptorType : 0x24 (Video Control Interface)
bDescriptorSubtype : 0x02 (Input Terminal)
bTerminalID : 0x01 (1)
wTerminalType : 0x0201 (ITT_CAMERA)
bAssocTerminal : 0x00 (Not associated with an Output Terminal)
iTerminal : 0x00 (No String Descriptor)
Camera Input Terminal Data:
wObjectiveFocalLengthMin : 0x0000
wObjectiveFocalLengthMax : 0x0000
wOcularFocalLength : 0x0000
bControlSize : 0x03 (3 bytes)
bmControls : 0xFF, 0xFF, 0x1F
D0 : 1 yes - Scanning Mode
D1 : 1 yes - Auto-Exposure Mode
D2 : 1 yes - Auto-Exposure Priority
D3 : 1 yes - Exposure Time (Absolute)
D4 : 1 yes - Exposure Time (Relative)
D5 : 1 yes - Focus (Absolute)
D6 : 1 yes - Focus (Relative)
D7 : 1 yes - Iris (Absolute)
D8 : 1 yes - Iris (Relative)
D9 : 1 yes - Zoom (Absolute)
D10 : 1 yes - Zoom (Relative)
D11 : 1 yes - Pan (Absolute)
D12 : 1 yes - Pan (Relative)
D13 : 1 yes - Roll (Absolute)
D14 : 1 yes - Roll (Relative)
D15 : 1 yes - Tilt (Absolute)
D16 : 1 yes - Tilt (Relative)
D17 : 1 yes - Focus Auto
D18 : 1 yes - Reserved
D19 : 1 yes - Reserved
D20 : 1 yes - Reserved
D21 : 0 no - Reserved
D22 : 0 no - Reserved
D23 : 0 no - Reserved
Data (HexDump) : 12 24 02 01 01 02 00 00 00 00 00 00 00 00 03 FF .$..............
FF 1F ..
五. 相機(jī)終端相關(guān)的請求
參考規(guī)格書P97 4.2.2.1 Camera Terminal Control Requests
相機(jī)終端控制請求用于讀或者設(shè)置相關(guān)屬性,所以包括SET_xx 和GET_xx。
一共支持如下20種屬性的請求
對應(yīng)的CS編碼見P174 A.9.4. Camera Terminal Control Selectors
以下做了一個總結(jié)
除非另有規(guī)定,否則所有值都被解釋為絕對值(固定原點(diǎn)),而不是相對值。除非另有規(guī)定,否則它們也被認(rèn)為是無符號的。
類型 | CS | 大小B | 支持的操作[]表示可選 | 最少支持操作 | 說明 |
---|---|---|---|---|---|
掃描模式 | CT_SCANNING_MODE_CONTROL | 1 | SET_CURGET_CURGET_INFO | 0:交錯掃描1:非交錯模式 | |
自動曝光模式 | CT_AE_MODE_CONTROL | 1 | SET_CURGET_CURGET_RESGET_INFOGET_DEF | GET_DEF | D0: 手動改模式D1: 自動模式D2: 快門優(yōu)先模式-手動曝光時間,自動光圈D3: 光圈優(yōu)先模式-自動曝光時間,手動光圈D4..D7: 保留設(shè)置為0.使能自動模式時再配置相關(guān)屬性將導(dǎo)致STALL和bRequestErrorCode=“錯誤狀態(tài)”的錯誤代碼。向該控件發(fā)出的GET_RES請求將返回該控件支持的模式的bitmap。對該控件的有效請求將僅設(shè)置一個位(選擇單個模式)。 |
自動曝光優(yōu)先級控制 | CT_AE_PRIORITY_CONTROL | 1 | SET_CURGET_CURGET_INFO | 0表示幀率固定,默認(rèn)值1表示幀率可動態(tài)變化用于快門優(yōu)先模式和自動模式時約束曝光時間控制。 | |
曝光絕對時間控制 | CT_EXPOSURE_TIME_ABSOLUTE_CONTROL | 4 | GET_CUR GET_MIN GET_MAXGET_RESGET_INFOGET_DEF[SET_CUR] | GET_DEF | 指定曝光時間,單位為100μs,值設(shè)置為0未定義。手動曝光控制受到幀間隔的進(jìn)一步限制,幀間隔總是具有更高的優(yōu)先級,如果幀間隔更改為低于“曝光控制”當(dāng)前值的值,“曝光控制值”將自動更改,默認(rèn)的“曝光控制”值將是當(dāng)前幀間隔,直到選擇了明確的曝光值為止。當(dāng)處于自動模式或光圈優(yōu)先模式時,設(shè)置該值導(dǎo)致STALL和bRequestErrorCode=“錯誤狀態(tài)”的錯誤代碼。 |
曝光相對時間控制 | CT_EXPOSURE_TIME_RELATIVE_CONTROL | 1 | SET_CURGET_CURGET_INFO | 有符號數(shù)帶包步進(jìn)數(shù)0表示設(shè)置曝光時間為默認(rèn)值,當(dāng)處于自動模式或光圈優(yōu)先模式時,設(shè)置該值導(dǎo)致STALL和bRequestErrorCode=“錯誤狀態(tài)”的錯誤代碼。如果同時支持相對控制和絕對控制,則具有0x00以外值的相對控制的SET_CUR應(yīng)導(dǎo)致絕對控制的控制更改中斷 | |
對焦絕對值控制 | CT_FOCUS_ABSOLUTE_CONTROL | 2 | GET_CUR GET_MIN GET_MAXGET_RESGET_INFOGET_DEF[SET_CUR] | GET_DEF | 單位毫米,啟用自動對焦模式時,設(shè)置此值將導(dǎo)致STALL和bRequestErrorCode=“錯誤狀態(tài)”的錯誤代碼。 |
對焦相對值控制 | CT_FOCUS_RELATIVE_CONTROL | 2 | SET_CURGET_CURGET_INFOGET_DEFGET_MINGET_MAXGET_RES | GET_DEF | 第一個字節(jié)bFocusRelative1表示聚焦透鏡組向近方向移動為0表示聚焦透鏡組停止0xFF表示透鏡組向無窮遠(yuǎn)方向移動。GET_MIN、GET_MAX、GET_RES和GET_DEF請求時此字段段返回零。第二個字節(jié)bSpeed表示移動速度,不支持則設(shè)置為1,如果同時支持相對控制和絕對控制,則具有0x00以外值的相對控制的SET_CUR將導(dǎo)致絕對控制在移動結(jié)束時的控制更改中斷啟用自動對焦時,設(shè)置此值導(dǎo)致STALL和bRequestErrorCode=“錯誤狀態(tài)”的錯誤代碼。 |
對焦簡單范圍 | CT_FOCUS_SIMPLE_CONTROL | 1 | SET_CURGET_CURGET_INFO GET_DEF | GET_DEF | 只能在相機(jī)處于手動或自動對焦模式時使用。啟用自動對焦時,設(shè)置此值導(dǎo)致STALL和bRequestErrorCode=“錯誤狀態(tài)”的錯誤代碼。0x00 – full range0x01 – macro. Less than 0.3meters.0x02 – people. 0.3m to 3m0x03 – scene. 3m to infinity0x04 to 0xFF - reserved |
自動對焦控制 | CT_FOCUS_AUTO_CONTROL | 1 | SET_CUR GET_CUR GET_INFGET_DEF | GET_DEF | 1使能自動對焦 |
光圈絕對控制 | PU_SHARPNESS_CONTROL | 2 | GET_CURGET_MIN GET_MAXGET_RES GET_INFOGET_DEF[SET_CUR] | GET_DEF | 單位為fstop * 100 當(dāng)“自動曝光模式”控件處于“自動”模式或“快門優(yōu)先級”模式時,不接受SET請求,設(shè)備返回STALL。 |
光圈相對控制 | CT_IRIS_RELATIVE_CONTROL | 1 | SET_CUR GET_CURGET_INFO | 有符號數(shù)當(dāng)“自動曝光模式”控件處于“自動”模式或“快門優(yōu)先級”模式時,不接受SET請求,設(shè)備返回STALL。0: Default1: Iris is opened by 1 step.0xFF: Iris is closed by 1 step | |
縮放絕對控制 | CT_ZOOM_ABSOLUTE_CONTROL | 2 | GET_CURGET_MIN GET_MAXGET_RESGET_INFOGET_DEF[SET_CUR] | GET_DEF | RES必須為1Zcur的值用于指定或確定物鏡焦距。與相機(jī)終端描述符中的wObjectiveFocalLengthMin和wObjectiveForcalLengthMax字段結(jié)合使用,以描述和控制設(shè)備的物鏡焦距。 |
縮放相對控制 | CT_ZOOM_RELATIVE_CONTROL | 3 | SET_CUR GET_CUR GET_INFOGET_DEFGET_MINGET_MAXGET_RES | 第一個字節(jié)bZoom字段1表示變焦鏡頭向遠(yuǎn)攝方向移動。0表示變焦鏡頭停止,0xFF表示變焦鏡頭向廣角方向移動。GET_MIN、GET_MAX、GET_RES和GET_DEF請求將為此字段返回零第二個字節(jié)bDigitalZoom指定是啟用還是禁用數(shù)字縮放。如果設(shè)備僅支持?jǐn)?shù)字變焦,則此字段將被忽略。GET_DEF請求將返回此字段的默認(rèn)值。GET_MIN、GET_MAX和GET_RES請求將為此字段返回零。第三個字節(jié)bSpeedGET_MIN、GET_MAX和GET_RES請求用于檢索此字段的范圍和分辨率。GET_DEF請求用于檢索此字段的默認(rèn)值。如果控件不支持速度控制,它將針對所有這些請求在該字段中返回值1如果同時支持相對控制和絕對控制,則具有0x00以外值的相對控制的SET_CUR應(yīng)在移動結(jié)束時導(dǎo)致絕對控制的控制更改中斷,如果移動結(jié)束是由于物理設(shè)備限制(如移動范圍限制),則應(yīng)為該相對控制生成控制更改中斷。 | |
全景傾斜(絕對)控制 | CT_PANTILT_ABSOLUTE_CONTROL | 8 | GET_CUR GET_MIN GET_MAXGET_RES GET_INFOGET_DEF[SET_CUR] | GET_DEF | 低4字節(jié),有符號 32位小端Pan絕對值高4字節(jié),有符號 32位小端Tilt絕對值單位arc 弧秒范圍–1803600 arc second ~+1803600 arc second 默認(rèn)值為0 |
全景傾斜(相對)控制 | CT_PANTILT_RELATIVE_CONTROL | 4 | SET_CURGET_CURGET_INFOGET_DEF GET_MINGET_MAXGET_RES | GET_DEF | 第一個字節(jié)bPanRelative有符號 Pan控制0: Stop1: moving to clockwise direction0xFF: moving to counter clockwise Direction第二個字節(jié) bPanSpeed Pan移動速度第三個字節(jié)bTiltRelative 有符號0: Stop1: point the imaging plane up0xFF: point the imaging plane down第四個字節(jié) bTiltSpeed Tilt速度 |
滾轉(zhuǎn)(絕對)控制 | CT_ROLL_ABSOLUTE_CONTROL | 2 | GET_CURGET_MIN GET_MAX GET_RESGET_INFOGET_DEF[SET_CUR] | 有符號16位小端范圍–180~+180 | |
滾轉(zhuǎn)(相對)控制 | CT_ROLL_RELATIVE_CONTROL | 2 | SET_CURGET_CURGET_MINGET_MAX GET_RESGET_INFOGET_DEF | 第一個字節(jié)0: Stop1: moving clockwise rotation0xFF: moving counter clockwise rotation第二個字節(jié)速度 | |
隱私控制 | CT_PRIVACY_CONTROL | 1 | GET_CUR GET_INFO[SET_CUR] | 隱私控制設(shè)置用于防止攝像機(jī)傳感器獲取視頻。值0表示攝像機(jī)傳感器能夠捕獲視頻圖像,值1表示攝像機(jī)傳感器被阻止捕獲視頻圖像。該控件應(yīng)報告為自動更新控件。0: Open1: Close | |
數(shù)字窗口控制 | CT_DIGITAL_WINDOW_CONTROL | 12 | SET_CURGET_CURGET_MIN GET_MAXGET_DEF | 坐標(biāo)從0開始wWindow_Top:2 字節(jié) 上坐標(biāo)wWindow_Left:2字節(jié) 左坐標(biāo)wWindow_Bottom:2 字節(jié) 下坐標(biāo)wWindow_Right:2 字節(jié) 右坐標(biāo)wNumSteps:2字節(jié) 從本窗口移動到指定矩形的步數(shù)bmNumStepsUnits:2字節(jié) 上述步數(shù)的單位D0: video framesD1: millisecondsD2-D15: Reserved | |
數(shù)字感興趣區(qū)域(ROI)控制 | CT_REGION_OF_INTEREST_CONTROL | 10 | SET_CUR GET_CURGET_MIN, GET_MAXGET_DEF | ROI必須在CT_Window控件指定的當(dāng)前數(shù)字窗口內(nèi)。wROI_Top 2字節(jié) 上坐標(biāo)wROI_Left 2字節(jié) 左坐標(biāo)wROI_Bottom2字節(jié) 下坐標(biāo)wROI_Right2字節(jié) 右坐標(biāo)bmAutoControls2字節(jié)D0: Auto ExposureD1: Auto IrisD2: Auto White BalanceD3: Auto FocusD4: Auto Face DetectD5: Auto Detect and TrackD6: Image StabilizationD7: Higher QualityD8 – D15: Reserved, set to zero |
六. 相機(jī)終端請求驅(qū)動代碼
和其他終端和單元請求處理一樣
參考https://mp.weixin.qq.com/s/4CTR1yjUmBsHqZPLEC7BhA
七. 總結(jié)
以上詳細(xì)介紹了相機(jī)終端,包括描述符和其拓?fù)浣Y(jié)構(gòu),請求等。
審核編輯:湯梓紅
-
usb
+關(guān)注
關(guān)注
60文章
7936瀏覽量
264454 -
相機(jī)
+關(guān)注
關(guān)注
4文章
1350瀏覽量
53580 -
USB驅(qū)動
+關(guān)注
關(guān)注
1文章
136瀏覽量
20191 -
驅(qū)動開發(fā)
+關(guān)注
關(guān)注
0文章
130瀏覽量
12072 -
uvc
+關(guān)注
關(guān)注
1文章
127瀏覽量
14527 -
DWC2
+關(guān)注
關(guān)注
0文章
35瀏覽量
125
發(fā)布評論請先 登錄
相關(guān)推薦
評論