次の方法で共有


IMemAllocator インターフェイス

ピン間でデータを移動させるために、メディア サンプルを割り当てる。

入力ピンが IMemInputPin インターフェイスを公開するとき、アロケータを共有するピンによってこのインターフェイスは使われる。ピン間でどのピンがアロケータを提供するかをネゴシエートする。アロケータを使って、メモリ バッファを割り当て、空のバッファを取得し、バッファを解放する。すべてのフィルタがそれ自身のアロケータを作成するわけではないので、1 つのアロケータを複数のフィルタが使う場合もある。詳細については、「フィルタの接続」を参照すること。

アプリケーションは通常このインターフェイスを使わない。

アロケータを使うには、次のステップを実行する。

  1. IMemAllocator::SetProperties メソッドを呼び出して、バッファの数と各バッファのサイズを含むバッファ要求を指定する。
  2. IMemAllocator::Commit メソッドを呼び出して、バッファを割り当てる。
  3. IMemAllocator::GetBuffer メソッドを呼び出して、メディア サンプルを取得する。このメソッドは次のサンプルが有効になるまで動作を停止する。
  4. 各サンプルについて終了したら、サンプルで IUnknown::Release メソッドを呼び出す。サンプルはその参照カウントがゼロになっても削除されない。代わりに、サンプルはアロケータのフリー リストに戻る。
  5. そのアロケータを使い終わったら、IMemAllocator::Decommit メソッドを呼び出してバッファ用のメモリを解放すること。

Vtable 順のメソッド

このインターフェイスは、IUnknown から継承するメソッド以外に以下のメソッドも公開する。

メソッド 説明
SetProperties 割り当てるバッファの数と各バッファのサイズを指定する。
GetProperties アロケータが作成するバッファの数とバッファのプロパティを取得する。
Commit バッファ メモリを割り当てる。
Decommit バッファ メモリを解放する。
GetBuffer 空のバッファを持つメディア サンプルを取得する。
ReleaseBuffer メディア サンプルを解放する。