Microsoft DirectX 8.0 |
注 このインターフェイスは古くなっている。それは AVI ファイルのハードウェア メモリへの直接読み込を要求するある古いハードウェア デコーダをサポートするために定義された。このインターフェイスによって PVI パーサーはダウンストリーム フィルタからメモリを割り当てることができるが、それ自身のアロケータを依然として提供する。新しいデバイスがこのインターフェイスをサポートする必要はない。
IAMDevMemoryAllocator インターフェイスによって、オンボード メモリ マネージャ オブジェクトを使用してサードパーティのメモリ アロケータを作成できる。多くの CODEC ハードウェア メーカーでは、CODEC にオンボード マップ メモリを装備することで、バッファ操作の効率を高めている。このインターフェイスではそのメモリを割り当て、GetDevMemoryObject メソッドを使用して、IAMDevMemoryControl インターフェイスをサポートするデバイス メモリ制御オブジェクトを取得する。同じデバイス ID を共有するデバイスがメモリを使用できる。
グローバル メモリ マネージャ オブジェクトは、このインターフェイスを利用することで、特定のデバイス上のメモリからメモリを割り当てる。
ピンにおいてオンボード メモリ アロケータの作成をサポートする必要がある場合は、このインターフェイスを実装する。ソース フィルタが、オンボード メモリを認識し、独自のアロケータを作成する必要がある場合は、このインターフェイスを照会し、メモリを要求し、デバイス メモリ制御オブジェクトを集成するアロケータを作成する。独自のアロケータを作成する必要がないソース フィルタの場合は、ダウンストリームのピンのアロケータをそのまま使用する。なお、このアロケータも、デバイス メモリ制御オブジェクトを集成する。ハードウェア ベースのフィルタは、集成されたアロケータのメソッドを呼び出すことによって、自身のオンボード メモリの使用を確認できる。
このインターフェイスは、オンボード メモリを装備した CODEC のメモリをアプリケーションで制御する必要がある場合に使用する。
vtable 順のメソッド
IUnknown メソッド 説明 QueryInterface サポートされているインターフェイスへのポインタを取得する。 AddRef 参照カウントをインクリメントする。 Release 参照カウントをデクリメントする。 IAMDevMemoryAllocator メソッド 説明 GetInfo メモリ機能に関する情報を取得する。 CheckMemory アロケータの特定のデバイスがメモリ ポインタを割り当てているかどうかを調べる。 Alloc メモリ バッファを割り当てる。 Free 割り当て済みのメモリを解放する。 GetDevMemoryObject カスタム アロケータで集成できるデバイス メモリ制御オブジェクトへの IUnknown インターフェイス ポインタを取得する。
メモリ バッファを割り当てる。
構文
HRESULT Alloc( BYTE **ppBuffer, DWORD *pdwcbBuffer );
パラメータ
- ppBuffer
- [out] 割り当てられたメモリ バッファのアドレスを受け取るポインタ。
- pdwcbBuffer
- [in, out] DWORD へのポインタ。入力値は割り当てるバイト数で、出力値は実際に割り当てられたバイト数である。
戻り値
目的のメモリ量が割り当てられた場合は S_OK を返す。メモリが使用できない場合は S_FALSE を返す。
注意
利用可能なプールからメモリのブロックを割り当てるには、このメソッドを呼び出す。
参照
アロケータの特定のインスタンス (デバイス) がメモリ ポインタを割り当てているかどうかを調べる。
構文
HRESULT CheckMemory( const BYTE *pBuffer );
パラメータ
- pBuffer
- [in] 割り当て済みのメモリ バッファのアドレスへのポインタ。
戻り値
オンボード アロケータがメモリを割り当てている場合は S_OK を返す。割り当てていない場合は S_FALSE を返す。特定のデバイス上にメモリがあるが割り当てられていない場合も S_FALSE を返す。
注意
通常、ハードウェア フィルタはこのメソッドを使用して、ポインタが実際にオンボード メモリを指しているかどうかを調べる。
割り当て済みのメモリを解放する。
構文
HRESULT Free( BYTE *pBuffer );
パラメータ
- pBuffer
- [in] 割り当て済みのメモリへのポインタ。
戻り値
指定のアロケータがメモリを割り当てていない場合、つまり、CheckMemory を実行すると失敗する場合は、E_INVALIDARG を返す。
注意
このメソッドは、プールからメモリ ブロックを解放する。
カスタム アロケータで集成できるデバイス メモリ制御オブジェクトへの IUnknown インターフェイス ポインタを取得する。
構文
HRESULT GetDevMemoryObject( IUnknown **ppUnkInner, IUnknown *pUnkOuter );
パラメータ
- ppUnkInner
- [out] 新しく作成される制御オブジェクトの IUnknown へのポインタのアドレス。この内部 IUnknown インターフェイスは、外側のオブジェクトが破棄されるときに解放される。カスタム アロケータは、このポインタにおいて QueryInterface メソッドを呼び出し、IAMDevMemoryControl インターフェイスを取得する。
- pUnkOuter
- [in] カスタム アロケータの IUnknown インターフェイスへのポインタ。このインターフェイスは、カスタム アロケータ内部のデバイス メモリ制御オブジェクトを集成する。
戻り値
インターフェイスの実装に応じた HRESULT 値を返す。
注意
デバイス メモリ制御オブジェクトは、カスタム アロケータで集成する必要がある。これは、オンボード メモリを使用するレンダラが、新しいアロケータを受け取ると IAMDevMemoryControl を照会し、メモリが同じデバイスに基づくことを確認するからである。ハードウェア フィルタが受け取る IMemAllocator オブジェクトは、オンボード メモリを使用する場合も使用しない場合もあるので、このような状態が発生する。互換性のあるアロケータかどうかを判別するには、IAMDevMemoryControl インターフェイスを照会し、特定のメソッドにアクセスする。IAMDevMemoryControl は、IAMDevMemoryControl のメソッドを実装する集成オブジェクトを作成する。なお、このメソッドは、ハードウェアによってしばしば異なる。
外側のオブジェクトが集成化を実装する際の規則については、COM のドキュメントを参照すること。
メモリ機能に関する情報を取得する。
構文
HRESULT GetInfo( DWORD *pdwcbTotalFree, DWORD *pdwcbLargestFree, DWORD *pdwcbTotalMemory, DWORD *pdwcbMinimumChunk );
パラメータ
- pdwcbTotalFree
- [out] 空きメモリの合計サイズへのポインタ。
- pdwcbLargestFree
- [out] 返された中で一番大きな空きメモリ サイズへのポインタ。
- pdwcbTotalMemory
- [out] 返されたメモリの合計サイズへのポインタ。
- pdwcbMinimumChunk
- [out] 返された中で最小のチャンク サイズへのポインタ。これによって、細分度とアラインメントの規則が決まる。
戻り値
インターフェイスの実装に応じた HRESULT 値を返す。
注意
このメソッドを使用すると、利用可能なメモリの合計量を検出できる。このメソッドは、デバイスで利用可能なオンボード メモリ全体の値を返す。複数のフィルタ (デバイス) がメモリを共有している場合は、その特定のデバイスで利用可能な量が返される。場合によってこの値は、オンボード メモリの全体量の一部である。この値は、実装によってそれぞれ異なる。たとえば、CODEC 上のオンボード メモリ マネージャは、カード上のオンボード メモリの 32 MB すべてにアクセスできる。しかし、IAMDevMemoryAllocator を個別に実装しているピンでは、このメモリの一部しか報告されない。