AVStream のデータ範囲の交差

データ形式は、接続の一部の側面を記述する単一のパラメーター セットです。 たとえば、オーディオ データ形式では、1 秒あたり X サンプルおよびサンプルあたり Y ビットで特定の形式のオーディオを指定できます。

データ範囲は、有効なパラメーターのシーケンスを指定します。 たとえば、オーディオ データ範囲では、1 秒あたり A-B サンプルおよびサンプルあたり C-D ビットで特定の形式のオーディオを指定できます。

ミニドライバーは、対応するKSPIN_DESCRIPTOR構造体のDataRangesメンバー内の特定のピンに対してサポートするデータ範囲の一覧を提供します。

AVStream では、ミニドライバーは、KSPIN_DESCRIPTOR_EXIntersectHandlerメンバーでミニドライバーが提供するコールバック ルーチンへのポインターを指定することで、独自のデータ範囲の交差ハンドラーを提供できます。 AVStream が範囲と交差するようにするには、このメンバーを NULLに 設定します。 コールバック ルーチンを定義する方法については、 AVStrMiniIntersectHandlerExを参照してください。

ミニドライバーが交差ハンドラーを提供する場合、ミニドライバーは、交差を作成する必要があるときに、メジャー タイプ、サブフォーマット、指定子に一致する 2 つのデータ範囲を受け取ります。 さらに、データ範囲の必須属性が一致します。

範囲が交差し、AVStrMiniIntersectHandlerExコールバック ルーチンの Data パラメーターに十分なバッファー空間が提供されている場合、交差ルーチンは交差部分の形式を選択し、それを Data パラメーターが指すバッファー内の呼び出し元に返します。

2 つのデータ範囲が交差しない場合、ハンドラーは STATUS_NO_MATCH を返します。

ミニドライバーが AVStrMiniPinSetDataFormatディスパッチを指定した場合、AVStream はこのディスパッチを呼び出して、AVStream がピンに特定の形式を設定していることをミニドライバーに通知します。 KSPIN_DISPATCH構造体のSetDataFormatメンバーで AVStrMiniPinSetDataFormatコールバック ルーチンへのポインターを指定します。 (ストリーム クラスのクライアントであるミニドライバーは、AVStrMiniPinSetDataFormatの代わりに、SRB_SET_DATA_FORMATを受け取ります)。

ミニドライバーは、AVStrMiniPinSetDataFormatから STATUS_NO_MATCH を返すことで、提案された形式を拒否できます。

ピンが作成される前のAVStrMiniPinSetDataFormatへの最初の呼び出しに加えて、ミニドライバーは、ピンが RUN 状態に遷移する直前に 2 回目のAVStrMiniPinSetDataFormat呼び出しを受け取る可能性があります。 AVStream またはストリーム クラス クライアントがビデオ キャプチャ ミニドライバーであり、そのような通知を受け取る場合、このディスパッチには実際のサーフェス パラメーターが含まれます。 可能であれば、ミニドライバーは、この 2 回目の形式の変更に失敗しないようにする必要があります。 2 回目のディスパッチ呼び出しが発生するとは想定しないでください。

ミニドライバーは、最後に成功したAVStrMiniPinSetDataFormatディスパッチに含まれていた形式でデータをキャプチャする必要があります。