次の方法で共有


AVStream コーデックの状態のリセット

ストリーム データを破棄し、ストリーミング状態をリセットするために、メディア ストリーミング パイプラインは MFT に MFT_MESSAGE_COMMAND_FLUSH を送信します。 HW MFT が MFT_MESSAGE_COMMAND_FLUSH を受信すると、MFT は KSRESET_BEGIN の値を持つ IOCTL_KS_RESET_STATE を入力ピンと出力ピンに送信します。 ミニドライバーは、KSPIN_DISPATCHReset メンバーで AVStrMiniPinReset コールバックを指定することで、リセット通知を受信するようにサブスクライブする必要があります。

ドライバーは、この IOCTL を受信すると、未処理の複製ポインターをすべて削除し、以前のすべての内部状態をリセットする必要があります。 ドライバーは、保留中の IO 要求をフラッシュした後、KSRE Standard Edition T_END の値を持つ別の IOCTL_KS_RE Standard Edition T_STATE を受け取ります。

この時点で、ミニドライバーは次のストリームからの新しい入力を受け入れる準備ができている必要があります。

リセットが正しく機能するためには、ミニドライバーは、KSFILTER_DESCRIPTOR 構造体の Connections メンバーに KSTOPOLOGY_CONNECTION 型の配列を指定して、入力ピンと出力ピンの間のトポロジ接続を指定する必要があることに注意してください。

リセット IOCTL は、次のシナリオでも送信されます。 ドライバーがストリーム ヘッダーに KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM フラグを設定し、ストリーム ポインターのロックを解除すると、KS はキューをフラッシュします。これによって、値が KSRESET_END の IOCTL_KS_RESET_STATE 呼び出しがドライバーに生成されます。

この場合、ドライバーが先行開始要求なしで終了要求を受信すると、ドライバーは KSPIN.ResetState を KSRESET_END に設定する必要があります。 この場合は、出力ピンにのみ適用されます。