次の方法で共有


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 サービスストリーム ポインターも参照してください。