USBCAMD2 Minidriver 作業
USBCAMD2 相機迷你驅動程式通常運作方式如下:
相機迷你驅動程式會從其 DriverEntry常式呼叫USBCAMD_DriverEntry。 當 minidriver 呼叫 USBCAMD_DriverEntry時,它會傳遞至 USBCAMD2 迷你驅動程式的 AdapterReceivePacket 回呼函式。 USBCAMD2 接著會向 stream.sys 類別驅動程式註冊 minidriver。
接著,相機迷你驅動程式可以接收其 AdapterReceivePacket 回呼函式中 (SRB) 處理的各種串流要求區塊,包括:
相機迷你驅動程式會決定它必須如何處理每個 SRB。 minidriver 可以在 USBCAMD2 迷你驅動程式程式庫中呼叫常式,以協助處理 SRB。 這些常式通常會以 USBCAMD_ 前置詞開頭。
例如,若要使用 USBCAMD2 指定相機迷你驅動程式的其他回呼函式,相機迷你驅動程式會在 USBCAMD_DEVICE_DATA2 結構中指定其進入點。 minidriver 接著會呼叫 USBCAMD_InitializeNewInterface ,將初始化USBCAMD_DEVICE_DATA2結構傳遞至 USBCAMD2。 然後,USBCAMD2 會在必要時呼叫迷你驅動程式的回呼函式。
minidriver 必須呼叫 USBCAMD_AdapterReceivePacket ,才能將它未處理的任何 SRB 傳送至 USBCAMD2 進行處理。
USBCAMD 程式庫回呼函 式描述迷你驅動程式所實作的回呼函式,以及它們是否為選擇性或必要。
下列程式清單說明傳送至相機迷你驅動程式之 SRB 的一般處理流程:
Minidriver 的SRB_INITIALIZE_DEVICE處理常式
Minidriver 的SRB_GET_STREAM_INFO處理常式
元件 |
動作 |
數位相機迷你驅動程式 |
將 HW_STREAM_INFORMATION 資料流程資訊結構提供給 stream.sys 類別驅動程式。 |
數位相機迷你驅動程式 |
在類別驅動程式的 stream.sysHW_STREAM_HEADER 結構中 填入裝置屬性集陣列的指標。 |
數位相機迷你驅動程式 |
呼叫 USBCAMD_AdapterReceivePacket。 |
USBCAMD2 |
填入資料流程標頭中的針腳數目。 |
USBCAMD2 |
如果有的話,請公開裝置事件資料表。 |
USBCAMD2 |
修正資料流程資訊表中的專案值。 設定類別名稱 (擷取或仍) 。 |
USBCAMD2 |
填入資料流程屬性陣列的指標。 |
Minidriver 的SRB_INITIALIZATION_COMPLETE處理常式
元件 |
動作 |
數位相機迷你驅動程式 |
使用 IRP_MJ_PNP 和 IRP_MN_QUERY_INTERFACE 取得 USBCAMD2 的GUID_USBCAMD_INTERFACE。 |
Minidriver 的SRB_GET_DEVICE_PROPERTY處理常式
Minidriver 的SRB_SET_DEVICE_PROPERTY處理常式
Minidriver 的SRB_GET_DATA_INTERSECTION處理常式
元件 |
動作 |
數位相機迷你驅動程式 |
從KSDATARANGE結構傳回KSDATAFORMAT結構。 |
數位相機迷你驅動程式 |
檢查所要求的畫面播放速率 (VideoInfoHeader.AvgTimePerFrame) 是否在要求的視訊格式上限和下限內。 如果超過限制,minidriver 應該更正 pSrb-CommandData.IntersectInfo-Datarange >> 中的下列值:VideoInfoHeader.AvgTimePerFrame、VideoInfoHeader.dwBitRate。 |
Minidriver 的SRB_OPEN_STREAM處理常式
元件 |
動作 |
數位相機迷你驅動程式 |
確認視訊格式。 |
數位相機迷你驅動程式 |
呼叫 USBCAMD_AdapterReceivePacket。 |
USBCAMD2 |
儲存相機迷你驅動程式所接受的視訊格式。 |
USBCAMD2 |
呼叫 minidriver 的 CamAllocateBandwidthEx 回呼函式,根據視訊格式資料配置頻寬,並取得視訊格式的最大緩衝區大小。 |
數位相機迷你驅動程式 |
計算符合所要求畫面播放速率和輸出視窗大小的等時通道封包大小上限。 |
數位相機迷你驅動程式 |
呼叫 USBCAMD_SelectAlternateInterface,以選擇最接近的替代設定。 迷你驅動程式應該為 USBCAMD2 提供相機所能產生的最大可能畫面大小。 |
數位相機迷你驅動程式 |
在相機上設定硬體縮放比例。 將相機控制項設定為登錄中的預存值,或第一次設定為預設設定。 |
數位相機迷你驅動程式 |
請確定視訊格式的畫面播放速率 (VideoInfoHeader.AvgTimePerFrame) 落在視訊格式的限制內,如果不符合,請加以更正。 |
USBCAMD2 |
呼叫 minidriver 的 CamStartCaptureEx 回呼函式。 |
數位相機迷你驅動程式 |
將硬體設定為擷取模式。 |
USBCAMD2 |
初始化等時或大量傳輸。 |
Minidriver 的SRB_CLOSE_STREAM處理常式
Minidriver 的SRB_UNINITIALIZE_DEVICE處理常式
Minidriver 的SRB_SURPRISE_REMOVAL處理常式
Minidriver 從 Power ON 到 Power OFF 處理常式SRB_CHANGE_POWER_STATE
Minidriver 從 Power OFF 到 Power ON 處理常式SRB_CHANGE_POWER_STATE