次の方法で共有


USBCAMD2 ミニドライバー操作

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

ミニドライバーは USBCAMD_AdapterReceivePacket を呼び出して、処理するUSBCAMD2に処理しないすべての SRB を送信する必要があります。

USBCAMD ライブラリ コールバック関数 は、ミニドライバーが実装するコールバック関数と、それらが省略可能か必須かを記述します。

次の手順の一覧は、カメラ ミニドライバーに送信される SRB の処理の一般的なフローを示しています。

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

コンポーネント アクション
カメラ ミニドライバー USBCAMD2を初期化するには、 USBCAMD_InitializeNewInterfaceを呼び出して、デバイス イベントの有効化など、カーネル モードでのビデオまたは未加工の処理要件を示します。
カメラ ミニドライバー 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_VIDEOPROCAMPPROPSETID_VIDCAP_CAMERACONTROLPROPSETID_VIDCAP_VIDEOCONTROLなど、その他のカスタムプロパティセットがあります。

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

コンポーネント アクション
カメラ ミニドライバー PROPSETID_VIDCAP_VIDEOPROCAMP、PROPSETID_VIDCAP_CAMERACONTROLPROPSETID_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 コールバック関数を呼び出します。
カメラ ミニドライバー カメラに stop-capture コマンドを送信します。
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ハンドラーのPower ONからPower OFFへの状態変更

コンポーネント アクション
カメラ ミニドライバー USBCAMD_AdapterReceivePacketを呼び出します。
USBCAMD2 必要に応じて等時性パイプでのストリーミングを停止するか、保留中の一括転送または割り込み転送をキャンセルします。
USBCAMD2 ミニドライバーの CamStopCaptureEx コールバック関数を呼び出します。
カメラ ミニドライバー stop capture コマンドをハードウェアに送信します。

Power OFF から Power ON への電源状態変更を処理するミニドライバのSRB_CHANGE_POWER_STATEハンドラ

コンポーネント アクション
カメラ ミニドライバー USBCAMD_AdapterReceivePacketを呼び出します。
USBCAMD2 必要に応じて等時性パイプでストリーミングを再開するか、USB クラスへの一括転送または割り込み転送を再送信します。
カメラ ミニドライバー カメラの設定とカメラの消費電力を通常のレベルに戻します。
USBCAMD2 ミニドライバーの CamStopCaptureEx コールバック関数を呼び出します。
USBCAMD2 ミニドライバーの CamStartCaptureEx コールバック関数を呼び出します。