USBCAMD2 ミニドライバーの操作
- [アーティクル]
-
-
USBCAMD2 カメラ ミニドライバーは、通常、次のように動作します。
カメラミニドライバーは DiverEntry ルーチンから USBCAMD_DriverEntry を呼び 出します。 ミニドライバーは、USBCAMD_DriverEntryを呼び出すと、USBCAMD2にミニドライバーの AdapterReceivePacket コールバック関数を渡します。 次に、USBCAMD2、ミニドライバーを stream.sys クラス ドライバーに登録します。
その後、カメラ ミニドライバーは、処理する AdapterReceivePacket コールバック関数でさまざまなストリーム要求ブロック (SRB) を受け取ることができます。次に例を示します。
カメラ ミニドライバーは、各 SRB を処理する方法を決定します。 ミニドライバーは、USBCAMD2 ミニドライバー ライブラリのルーチンを呼び出して、SRB の処理を支援できます。 これらのルーチンは、通常、USBCAMD_ というプレフィックスで始まります。
たとえば、USBCAMD2を使用してカメラ ミニドライバーの他のコールバック関数を指定するには、カメラ ミニドライバーは、USBCAMD_DEVICE_DATA2 構造体内のエントリ ポイントを指定します。 ミニドライバーは、初期化された USBCAMD_DEVICE_DATA2 構造体を USBCAMD2 に渡すために USBCAMD_InitializeNewInterface を呼び出します。 次に、USBCAMD2は必要に応じてミニドライバーのコールバック関数を呼び出します。
ミニドライバーは、USBCAMD_AdapterReceivePacket を呼び出して、処理しない SRB を USBCAMD2 に送って処理させなければなりません。
USBCAMD ライブラリ コールバック関数 は、ミニドライバーが実装するコールバック関数と、それらが省略可能か必須かを記述します。
次の手順の一覧は、カメラ ミニドライバーに送信される SRB の処理の一般的なフローを示しています。
ミニドライバーのSRB_INITIALIZE_DEVICE ハンドラー
ミニドライバーのSRB_GET_STREAM_INFO ハンドラー
コンポーネント |
アクション |
カメラ ミニドライバー |
HW_STREAM_INFORMATION ストリーム情報構造体を stream.sys クラス ドライバーに提供します。 |
カメラ ミニドライバー |
stream.sys クラス ドライバーの HW_STREAM_HEADER 構造体のデバイス プロパティ セットの配列へのポインターを入力します。 |
カメラ ミニドライバー |
USBCAMD_AdapterReceivePacketを呼び出します。 |
USBCAMD2 |
ストリーム ヘッダー内のピンの数を入力します。 |
USBCAMD2 |
デバイス イベント テーブル (存在する場合) を公開します。 |
USBCAMD2 |
ストリーム情報テーブルのエントリ値を修正します。 カテゴリ名 (キャプチャまたは静止画) を設定します。 |
USBCAMD2 |
ストリーム プロパティ配列へのポインターを入力します。 |
ミニドライバーの SRB_INITIALIZATION_COMPLETE ハンドラー
コンポーネント |
アクション |
カメラ ミニドライバー |
IRP_MJ_PNP と IRP_MN_QUERY_INTERFACE を使用して USBCAMD2 の GUID_USBCAMD_INTERFACE を取得します。 |
ミニドライバーの SRB_GET_DEVICE_PROPERTY ハンドラー
ミニドライバーの SRB_SET_DEVICE_PROPERTY ハンドラー
ミニドライバーのSRB_GET_DATA_INTERSECTION ハンドラー
コンポーネント |
アクション |
カメラ ミニドライバー |
KSDATAFORMAT 構造体を KSDATARANGE 構造体から返します。 |
カメラ ミニドライバー |
要求されたフレーム レート (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 ハンドラー
ミニドライバーの SRB_SURPRISE_REMOVAL ハンドラー
コンポーネント |
アクション |
カメラ ミニドライバー |
新しいビデオ形式を確認します。 |
カメラ ミニドライバー |
USBCAMD_SetVideoFormat を呼び出します。 |
USBCAMD2 |
関連付けられたストリーム拡張機能を使用して新しい形式を保存します。 |
電源オンから電源オフへのミニドライバーの SRB_CHANGE_POWER_STATE ハンドラー
電源オフから電源オンへのミニドライバーの SRB_CHANGE_POWER_STATE ハンドラー