Share via


AVStream のアロケーター

AVStream クラス ドライバーは、アロケーターを使用して、フレームと呼ばれる単位でデータ バッファーを割り当てます。 フレームは連続メモリのチャンクであり、そのサイズは KSPIN_DESCRIPTOR_EXAllocatorFraming メンバーを通じてベンダーが指定します。

ミニドライバーは、Stream Pointers API を使用してこれらのバッファーにアクセスします。KsPinGetLeadingEdgeStreamPointer を呼び出してストリームへのポインターを取得します。

AVStream クライアントは、読み取り専用プロパティ KSPROPERTY_CONNECTION_ALLOCATORFRAMING_EX を使用して、ピンのフレーム要件に関する情報を取得できます。 このプロパティは、ピンのフレーム要件を記述するKSALLOCATOR_FRAMING_EX 型の構造体を返します。

データが使用されなくなった場合、AVStream はアロケーターを使用してバッファーを解放します。

AVStream には、既定のアロケーターが用意されています。 既定のアロケーターは、ミニドライバーが KSPIN_DESCRIPTOR_EX 構造体の AllocatorFraming メンバーで提供するアロケーターの要件に基づいてプール メモリを割り当てます。

デバイス固有の割り当て要件を持つベンダーは、独自の割り当てルーチンを含むミニドライバーを記述できます。 たとえば、ドライバーが共通の DMA バッファーからメモリを割り当てる場合は、アロケーターを指定できます。

アロケーターを提供するには、ベンダーが提供する次のコールバック ルーチンへのポインターを含む KSALLOCATOR_DISPATCH 構造体を指定します。

このアロケーターがフレームをインスタンス化するピンを記述する KSPIN_DISPATCH 構造体の Allocator メンバーに、このアロケーター ディスパッチ構造体へのポインターを指定します。

対応する KSPIN_DESCRIPTOR_EX 構造体の Dispatch メンバーで、このピン ディスパッチ構造体へのポインターを指定します。 AVStream のディスパッチ構造体の詳細については、「AVStream ディスパッチ テーブル」に関するページを参照してください。

実行時に、グラフ マネージャー (カーネル ストリーミング プロキシ モジュールなど) がアロケーターの選択を処理します。 ベンダーが提供するアロケーターは、グラフ マネージャーによって選択されるとは限りません

カーネル モード アロケーターは、接続がカーネル モードの場合にのみ選択されます。 さらに、アロケーターの要件とアロケーターの機能に不一致がある場合は、アロケーターが拒否される可能性があります。 アロケーターが選択されていない場合、 AVStrMiniInitializeAllocator コールバック ルーチンは呼び出されません。

AVStream DMA サービスストリーム ポインター も参照してください。