英語で読む

次の方法で共有


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_DEVICE_DATA 構造体は、下位互換性についてのみUSBCAMD2でサポートされています。

ミニドライバーは、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 クラス ドライバーに提供します。
カメラ ミニドライバー 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 ハンドラー

コンポーネント アクション
カメラ ミニドライバー PROPSETID_VIDCAP_VIDEOPROCAMPPROPSETID_VIDCAP_CAMERACONTROLPROPSETID_VIDCAP_VIDEOCONTROL などのカメラ ミニドライバーが処理するプロパティと、その他のカスタム プロパティ セットを取得します。

ミニドライバーの SRB_SET_DEVICE_PROPERTY ハンドラー

コンポーネント アクション
カメラ ミニドライバー PROPSETID_VIDCAP_VIDEOPROCAMPPROPSETID_VIDCAP_CAMERACONTROLPROPSETID_VIDCAP_VIDEOCONTROL、およびその他のカスタム プロパティ セットのパラメーターを取得して、カメラ ミニドライバーが処理するプロパティを設定します。

ミニドライバーの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 ハンドラー

コンポーネント アクション
カメラ ミニドライバー 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 コールバック関数を呼び出します。