AVStream のアロケーター
AVStream クラス ドライバーは、アロケーターを使用して、フレームと呼ばれる単位でデータ バッファーを割り当てます。 フレームは連続メモリのチャンクであり、そのサイズは KSPIN_DESCRIPTOR_EX の AllocatorFraming メンバーを通じてベンダーが指定します。
ミニドライバーは、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 サービス と ストリーム ポインター も参照してください。