Share via


CBaseAllocator クラス

[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayer、IMFMediaEngine、Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayerIMFMediaEngineAudio/Video Capture を使用することを強くお勧めします。 Microsoft は、レガシ API を使用する既存のコードを、可能であれば新しい API を使用するように書き換えるよう提案しています。]

cbaseallocator クラス階層

CBaseAllocator クラスは、アロケーターを実装する抽象基本クラスです。 アロケーターは IMemAllocator インターフェイスを 公開します。

アロケーターは、メモリ バッファーを割り当てるオブジェクトです。 アロケーターは、使用可能なバッファーの一覧を保持します。 クライアント (通常はフィルター) がバッファーを要求すると、アロケーターはリストからバッファーを取得します。 クライアントはバッファーにデータを入力し、バッファーを別のオブジェクトに渡す場合があります。 最終的にバッファーが解放され、アロケーターによって使用可能なバッファーの一覧に返されます。

各バッファーは、 メディア サンプルと呼ばれるオブジェクトによってカプセル化されます。 メディア サンプルは、コンポーネント オブジェクト モデル (COM) フレームワーク内のメモリ ブロックへのポインターをパッケージ化する方法です。 メディア サンプルは IMediaSample インターフェイスを公開し、 CMediaSample クラスを使用して実装されます。 メディア サンプルには、関連付けられたバッファーへのポインターが含まれています。 これは、IMediaSample::GetPointer メソッドを呼び出すことによってアクセスできます。 詳細については、「 サンプルとアロケーター」を参照してください。

このクラスを使用するには、次の手順を実行します。

  1. CBaseAllocator::SetProperties メソッドを呼び出して、バッファーの数や各バッファーのサイズなど、バッファー要件を指定します。
  2. バッファーを割り当てるには 、CBaseAllocator::Commit メソッドを呼び出します。
  3. CBaseAllocator::GetBuffer メソッドを呼び出して、メディア サンプルを取得します。 このメソッドは、次のサンプルが使用可能になるまでブロックします。
  4. 各サンプルが完了したら、サンプルの IUnknown::Release メソッドを呼び出します。 参照カウントが 0 に達しても、サンプルは削除されません。 代わりに、サンプルはアロケーターの空きリストに戻ります。
  5. アロケーターの使用が完了したら、 CBaseAllocator::D ecommit メソッドを呼び出してバッファーのメモリを解放します。

Commit メソッドは、バッファーのメモリを割り当てる仮想メソッド CBaseAllocator::Alloc を呼び出します。 Decommit メソッドは、純粋な仮想メソッド CBaseAllocator::Free を呼び出し、メモリを解放します。 派生クラスは、これら 2 つのメソッドをオーバーライドする必要があります。

CMemAllocator 基本クラスは CBaseAllocator から派生します。 フィルター基底クラスは CMemAllocator クラスを使用します。

保護されたメンバー変数 説明
m_lFree 使用可能な (無料) メディア サンプルの一覧へのポインター。
m_hSem サンプルが使用可能になったときに通知されるセマフォ。
m_lWaiting サンプルを待機しているスレッドの数。
m_lCount 提供するバッファーの数。
m_lAllocated 現在割り当てられているバッファーの数。
m_lSize 各バッファーのサイズ。
m_lAlignment 各バッファーの配置。
m_lPrefix 各バッファーのプレフィックス。
m_bChanged バッファー要件が変更されたかどうかを示すフラグ。
m_bCommitted アロケーターがコミットされているかどうかを示すフラグ。
m_bDecommitInProgress コミット解除操作が進行中かどうかを示すフラグ。
m_pNotify サンプルがリリースされたときに呼び出されるコールバック インターフェイスへのポインター。
m_fEnableReleaseCallback リリース コールバックが有効かどうかを示すフラグ。
プロテクト メソッド 説明
Alloc バッファーにメモリを割り当てます。 仮想。
パブリック メソッド 説明
CBaseAllocator コンストラクター メソッド。
~ CBaseAllocator デストラクター メソッド。
SetNotify 互換性のために残されています。
GetFreeCount 使用されていないメディア サンプルの数を取得します。
NotifySample サンプルを待機しているスレッドを解放します。
SetWaiting 待機中のスレッドの数をインクリメントします。
純粋仮想メソッド 説明
Free すべてのバッファー メモリを解放します。
IMemAllocator メソッド 説明
SetProperties 割り当てるバッファーの数と各バッファーのサイズを指定します。
Getproperties アロケーターが作成するバッファーの数とバッファー プロパティを取得します。
Commit バッファーのメモリを割り当てます。
デコミット バッファーをコミット解除します。
GetBuffer バッファーを含むメディア サンプルを取得します。
ReleaseBuffer メディア サンプルを無料のメディア サンプルの一覧に返します。

要件

要件
ヘッダー
Amfilter.h (Streams.h を含む)
ライブラリ
Strmbase.lib (製品版ビルド);
Strmbasd.lib (デバッグ ビルド)

関連項目

カスタム アロケーターの提供