リソースの適切な割り当てを確保するために、可能なカーネル ストリーミング状態遷移のサブセットのみが許可されます。 次の表に、許可されている遷移と、Stream クラス ミニドライバーがこのような遷移中に通常実行するタスクを示します。
| 遷移 | 説明 |
|---|---|
停止して一時停止する |
リソースを割り当てます。 読み取り 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 を直ちに完了する必要があります。
ユーザー モード アプリケーションはストリーミング中に予期せず終了する可能性があるため、すべての Stream クラス ミニドライバーは、Stream クラス インターフェイスからの SRB_CLOSE_STREAM 要求をいつでも受け入れて処理する必要があります。 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メンバーを更新しないでください。 詳細については、「 ビデオのキャプチャ」を参照してください。