状態遷移
リソースの適切な割り当てを確保するために、可能なカーネル ストリーミング状態遷移のサブセットのみが許可されます。 次の表に、許可されている遷移と、ストリーム クラス ミニドライバーがこのような遷移中に通常実行するタスクを示します。
切り替え効果 | 説明 |
---|---|
[停止] で一時停止 |
リソースを割り当てます。 読み取り SRB は、KSSTATE_PAUSE への移行が完了した後にキューに入れられます。 |
[一時停止] で実行 |
ストリーミングを開始します。 |
[実行] で一時停止 |
ストリーミングを停止します。 未処理の読み取り SRB は、ミニドライバーが管理するキューに残ります。 |
[一時停止] で停止 |
リソースの割り当てを解除し、未処理のすべての読み取り SRB を完了します。 イメージで塗りつぶされていない SRB は、KSSTREAM_HEADER 構造体の DataUsed メンバーの長さが 0 で完了します。 |
注: 遷移は、KSSTATE_STOP 状態に戻る前に、KSSTATE_PAUSE とKSSTATE_RUN 状態の間で複数回繰り返されます。 ビデオ キャプチャ ミニドライバーは、次のような切り替えを想定する必要があります。
KSSTATE_STOP ->KSSTATE_ACQUIRE ->KSSTATE_PAUSE ->KSSTATE_RUN ->KSSTATE_PAUSE ->KSSTATE_RUN ->KSSTATE_PAUSE -> KSSTATE_STOP
ストリームが KSSTATE_STOP 状態の場合、ミニドライバーは、未処理のすべてのデータ読み取り SRB を直ちに完了する必要があります。
ストリーミング中にユーザー モード アプリケーションが予期せず終了する可能性があるため、すべての ストリーム クラスのミニドライバーは、ストリーム クラスのインターフェイスからの SRB_CLOSE_STREAM 要求をいつでも受け入れて処理する必要があります。 ストリーム クラス インターフェイスは、ミニドライバーに SRB_CLOSE_STREAM を送信する前に、ミニドライバーの HwCancelPacket ルーチンを介して未処理のすべてのバッファーを取り消します。 アプリケーションが終了する前に、ストリームの状態を KSSTATE_STOP に設定できないことに注意してください。
KSSTATE_PAUSE から KSSTATE_RUN または KSSTATE_RUN から KSSTATE_PAUSEへの移行時に、KS_FRAME_INFO、KS_VBI_FRAME_INFO、KSPROPERTY_DROPPEDFRAMES_CURRENT_S の PictureNumber または DropCount メンバーを更新しないでください。 詳細については、「ビデオのキャプチャ」を参照してください。