USBCAMD2相機迷你驅動程式通常運作如下:
相機迷你驅動程式會在其 DriverEntry 例程中呼叫 USBCAMD_DriverEntry。 當迷你驅動程式呼叫 USBCAMD_DriverEntry 時,它會傳遞至USBCAMD2迷你驅動程式的 AdapterReceivePacket 回呼函式。 然後USBCAMD2向 stream.sys 類驅動程式註冊迷你驅動程式。
然後,相機迷你驅動程式可以在其 AdapterReceivePacket 回調函數中接收各種流請求區塊(SRB)來處理,包括:
相機迷你驅動程式會決定它必須如何處理每個 SRB。 迷你驅動程式可以呼叫 USBCAMD2 迷你驅動程式庫中的常式,以協助處理 SRB。 這些常式通常以 USBCAMD_ 前置詞開頭。
例如,若要使用 USBCAMD2 指定相機迷你驅動程式的其他回呼函式,相機迷你驅動程式會在 USBCAMD_DEVICE_DATA2 結構中指定其進入點。 然後,迷你驅動程式會呼叫 USBCAMD_InitializeNewInterface ,將初始化的USBCAMD_DEVICE_DATA2結構傳遞至 USBCAMD2。 然後USBCAMD2必要時呼叫迷你驅動程式的回呼函式。
備註
在USBCAMD2中,USBCAMD_DEVICE_DATA 結構只支持作為回溯相容性之用。
迷你驅動程式必須呼叫 USBCAMD_AdapterReceivePacket 來傳送它未處理的任何 SRB 給 USBCAMD2 進行處理。
USBCAMD 程式庫回呼函式 描述迷你驅動程式實作的回呼函式,以及它們是選擇性還是必要。
下列程序清單說明傳送至相機小驅動程式之 SRB 的一般處理流程:
迷你驅動程式的 SRB_INITIALIZE_DEVICE 處理常式
| 元件 | 行動 |
|---|---|
| 相機迷你驅動程式 | 呼叫 USBCAMD_InitializeNewInterface來初始化USBCAMD2,指明核心模式下的視訊或靜態影像原始處理需求,例如啟用裝置事件。 |
| 相機迷你驅動程式 | 打電話給 USBCAMD_AdapterReceivePacket。 |
| USBCAMD2 | 取得 USB 裝置和組態描述元。 |
| USBCAMD2 | 呼叫迷你驅動程式的 CamConfigureEx 回呼函式。 |
| 相機迷你驅動程式 | 完成組態。 選擇替代設定和傳輸大小上限。 填寫 USBCAMD_Pipe_Config_Descriptor 結構的陣列。 |
| USBCAMD2 | 剖析USBCAMD_Pipe_Config_Descriptor 結構之陣列。 |
| USBCAMD2 | 呼叫迷你驅動程式的 CamInitialize 回呼函式。 |
| 相機迷你驅動程式 | 完成初始化。 設定裝置電源並啟動相機的預設設定。 |
| USBCAMD2 | 提供資料流程數目和資料流程描述元大小給 stream.sys 類別驅動程式。 |
迷你驅動程式的 SRB_GET_STREAM_INFO 處理常式
| 元件 | 行動 |
|---|---|
| 相機迷你驅動程式 | 將 HW_STREAM_INFORMATION 資料流程資訊結構提供給 stream.sys 類別驅動程式。 |
| 相機迷你驅動程式 | 在類別驅動程式的HW_STREAM_HEADER結構中填入指向裝置屬性集陣列的stream.sys指標。 |
| 相機迷你驅動程式 | 打電話給 USBCAMD_AdapterReceivePacket。 |
| USBCAMD2 | 填寫串流標頭中的針腳數目。 |
| USBCAMD2 | 公開裝置事件資料表 (如果有的話)。 |
| USBCAMD2 | 修正串流資訊表中的項目值。 設定類別名稱(擷取或靜態)。 |
| USBCAMD2 | 填入流屬性陣列的指標。 |
迷你驅動程式的 SRB_INITIALIZATION_COMPLETE 處理常式
| 元件 | 行動 |
|---|---|
| 相機迷你驅動程式 | 使用 IRP_MJ_PNP 和 IRP_MN_QUERY_INTERFACE 取得USBCAMD2的GUID_USBCAMD_INTERFACE。 |
迷你驅動程式的 SRB_GET_DEVICE_PROPERTY 處理程式
| 元件 | 行動 |
|---|---|
| 相機迷你驅動程式 | 取得相機迷你驅動程式處理的屬性,例如 PROPSETID_VIDCAP_VIDEOPROCAMP、 PROPSETID_VIDCAP_CAMERACONTROL 和 PROPSETID_VIDCAP_VIDEOCONTROL,以及任何其他自訂屬性集。 |
迷你驅動程式的SRB_SET_DEVICE_PROPERTY處理常式
| 元件 | 行動 |
|---|---|
| 相機迷你驅動程式 | 藉由取得 PROPSETID_VIDCAP_VIDEOPROCAMP、 PROPSETID_VIDCAP_CAMERACONTROL 和 PROPSETID_VIDCAP_VIDEOCONTROL 的參數,以及任何其他自訂屬性集,來設定相機迷你驅動程式處理的屬性。 |
微型驅動程式的SRB_GET_DATA_INTERSECTION處理程序
| 元件 | 行動 |
|---|---|
| 相機迷你驅動程式 | 從 KSDATARANGE 結構傳回 KSDATAFORMAT 結構。 |
| 相機迷你驅動程式 | 檢查要求的影格速率 (VideoInfoHeader.AvgTimePerFrame) 是否在要求的視訊格式的上限和下限內。 如果超出限制,迷你驅動程式應該更正 pSrb->CommandData.IntersectInfo->Datarange 中的下列值:VideoInfoHeader.AvgTimePerFrame、VideoInfoHeader.dwBitRate。 |
迷你驅動程式的SRB_OPEN_STREAM處理常式
| 元件 | 行動 |
|---|---|
| 相機迷你驅動程式 | 驗證視訊格式。 |
| 相機迷你驅動程式 | 打電話給 USBCAMD_AdapterReceivePacket。 |
| USBCAMD2 | 儲存相機迷你驅動程式所接受的視訊格式。 |
| USBCAMD2 | 呼叫迷你驅動程式的 CamAllocateBandwidthEx 回呼函式,以根據視訊格式資料配置頻寬,並取得視訊格式的緩衝區大小上限。 |
| 相機迷你驅動程式 | 計算滿足要求的幀速率和輸出視窗大小的同步通道的最大封包大小。 |
| 相機迷你驅動程式 | 呼叫 USBCAMD_SelectAlternateInterface 選擇最接近的替代設定。 迷你驅動程式應該為USBCAMD2提供相機所產生的最大可能畫面大小。 |
| 相機迷你驅動程式 | 設定相機上的硬體縮放比例。 將相機的控制項設置為登錄中儲存的值,或在首次使用時設置為預設設定。 |
| 相機迷你驅動程式 | 請確定影格速率 (VideoInfoHeader.AvgTimePerFrame) 落在視訊格式的限制範圍內,如果不符合,請更正它。 |
| USBCAMD2 | 呼叫迷你驅動程式的 CamStartCaptureEx 回呼函式。 |
| 相機迷你驅動程式 | 將硬體設定為擷取模式。 |
| USBCAMD2 | 初始化等時資料或批量資料傳輸。 |
迷你驅動程式的SRB_CLOSE_STREAM處理常式
| 元件 | 行動 |
|---|---|
| 相機迷你驅動程式 | 打電話給 USBCAMD_AdapterReceivePacket。 |
| USBCAMD2 | 取消提交給USBCAMD2的擱置 IRP。 將任何擱置的資料 SRB 傳回給 stream.sys 類別驅動程式。 |
| USBCAMD2 | 呼叫迷你驅動程式的 CamStopCaptureEx 回呼函式。 |
| 相機迷你驅動程式 | 向相機發送停止拍攝命令。 |
| USBCAMD2 | 呼叫迷你驅動程式的 CamFreeBandwidthEx 回呼函式,以釋放同步匯流排頻寬 (如果適用)。 |
| 相機迷你驅動程式 | 選取閒置替代設定。 |
| USBCAMD2 | 與 USB 管道相關的免費資源。 |
迷你驅動程式的 SRB_UNINITIALIZE_DEVICE 處理程序
| 元件 | 行動 |
|---|---|
| 相機迷你驅動程式 | 打電話給 USBCAMD_AdapterReceivePacket。 |
| USBCAMD2 | 如果任何資料流程仍處於開啟狀態,請針對每個資料流程呼叫迷你驅動程式的 CamStopCaptureEx 和 CamFreeBandwidthEx 回呼函式來關閉它們。 |
| USBCAMD2 | 呼叫迷你驅動程式的 CamUnInitialize 回呼函式。 |
| 相機迷你驅動程式 | 清理和釋放資源。 |
迷你驅動程式的 SRB_SURPRISE_REMOVAL 處理程序
| 元件 | 行動 |
|---|---|
| 相機迷你驅動程式 | 打電話給 USBCAMD_AdapterReceivePacket。 |
| USBCAMD2 | 取消正在擱置的數據 SRB 並將狀態設為 STATUS_CANCELLED 的 SRB 傳回。 |
| USBCAMD2 | 在所有開啟的資料流程上呼叫迷你驅動程式的 CamStopCaptureEx 和 CamFreeBandwidthEx 回呼函式。 |
| USBCAMD2 | 在 SRB_SURPRISE_REMOVAL 之後任何下降的讀取/寫入 SRB 上返回 STATUS_CANCELLED。 |
迷你驅動程式的SRB_SET_DATA_FORMAT處理常式
| 元件 | 行動 |
|---|---|
| 相機迷你驅動程式 | 驗證新的視訊格式。 |
| 相機迷你驅動程式 | 呼叫 USBCAMD_SetVideoFormat。 |
| USBCAMD2 | 儲存具有相關聯的串流延伸模組的新格式。 |
迷你驅動器的SRB_CHANGE_POWER_STATE從電源開啟到電源關閉的處理程序
| 元件 | 行動 |
|---|---|
| 相機迷你驅動程式 | 打電話給 USBCAMD_AdapterReceivePacket。 |
| USBCAMD2 | 如果適用,請停止在同步管道上串流,或取消擱置的大量或中斷傳輸。 |
| USBCAMD2 | 呼叫迷你驅動程式的 CamStopCaptureEx 回呼函式。 |
| 相機迷你驅動程式 | 將停止捕獲命令發送到硬件。 |
迷你驅動程式的 SRB_CHANGE_POWER_STATE 從電源關閉到電源開啟的處理常式
| 元件 | 行動 |
|---|---|
| 相機迷你驅動程式 | 打電話給 USBCAMD_AdapterReceivePacket。 |
| USBCAMD2 | 如果適用,請在同步管道上重新啟動串流,或重新提交大量或中斷傳輸至 USB 類別。 |
| 相機迷你驅動程式 | 將相機設定和相機功耗恢復到正常水平。 |
| USBCAMD2 | 呼叫迷你驅動程式的 CamStopCaptureEx 回呼函式。 |
| USBCAMD2 | 呼叫迷你驅動程式的 CamStartCaptureEx 回呼函式。 |