USBCAMD2 カメラ ミニドライバーは、通常、次のように動作します。
カメラ ミニドライバーは、DriverEntry ルーチンからUSBCAMD_DriverEntryを呼び出します。 ミニドライバーが USBCAMD_DriverEntryを呼び出すと、ミニドライバーの AdapterReceivePacket コールバック関数USBCAMD2に渡されます。 USBCAMD2、ミニドライバーを stream.sys クラス ドライバーに登録します。
その後、カメラ ミニドライバーは、AdapterReceivePacket コールバック関数を通じて処理するために、さまざまなストリーム要求ブロック (SRB) を受け取ることができます。
カメラ ミニドライバーは、各 SRB を処理する方法を決定します。 ミニドライバーは、USBCAMD2 ミニドライバー ライブラリのルーチンを呼び出して、SRB の処理を支援できます。 これらのルーチンは、通常、 USBCAMD_ プレフィックスで始まります。
たとえば、USBCAMD2を使用してカメラ ミニドライバーの他のコールバック関数を指定するには、カメラ ミニドライバーは 、USBCAMD_DEVICE_DATA2 構造体内のエントリ ポイントを指定します。 ミニドライバーは、 初期化されたUSBCAMD_DEVICE_DATA2 構造体をUSBCAMD2に渡すUSBCAMD_InitializeNewInterfaceを呼び出します。 USBCAMD2必要に応じてミニドライバーのコールバック関数を呼び出します。
ミニドライバーは USBCAMD_AdapterReceivePacket を呼び出して、処理するUSBCAMD2に処理しないすべての SRB を送信する必要があります。
USBCAMD ライブラリ コールバック関数 は、ミニドライバーが実装するコールバック関数と、それらが省略可能か必須かを記述します。
次の手順の一覧は、カメラ ミニドライバーに送信される SRB の処理の一般的なフローを示しています。
ミニドライバーのSRB_INITIALIZE_DEVICE ハンドラー
ミニドライバーの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 ハンドラー
ミニドライバーのSRB_SET_DEVICE_PROPERTY ハンドラー
ミニドライバーの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 コールバック関数を呼び出します。 |
| カメラ ミニドライバー |
カメラに stop-capture コマンドを送信します。 |
| USBCAMD2 |
ミニドライバーの CamFreeBandwidthEx コールバック関数を呼び出して、等時性バス帯域幅を解放します (該当する場合)。 |
| カメラ ミニドライバー |
未使用の代替設定を選択します。 |
| USBCAMD2 |
USB パイプに関連付けられている無料のリソース。 |
ミニドライバーのSRB_UNINITIALIZE_DEVICE ハンドラー
ミニドライバーのSRB_SURPRISE_REMOVALハンドラー
| コンポーネント |
アクション |
| カメラ ミニドライバー |
新しいビデオ形式を確認します。 |
| カメラ ミニドライバー |
USBCAMD_SetVideoFormatを呼び出します。 |
| USBCAMD2 |
関連付けられたストリーム拡張機能を使用して新しい形式を保存します。 |
ミニドライバーのSRB_CHANGE_POWER_STATEハンドラーのPower ONからPower OFFへの状態変更
| コンポーネント |
アクション |
| カメラ ミニドライバー |
USBCAMD_AdapterReceivePacketを呼び出します。 |
| USBCAMD2 |
必要に応じて等時性パイプでのストリーミングを停止するか、保留中の一括転送または割り込み転送をキャンセルします。 |
| USBCAMD2 |
ミニドライバーの CamStopCaptureEx コールバック関数を呼び出します。 |
| カメラ ミニドライバー |
stop capture コマンドをハードウェアに送信します。 |
Power OFF から Power ON への電源状態変更を処理するミニドライバのSRB_CHANGE_POWER_STATEハンドラ