IAMDevMemoryControl
COM公式ドキュメント
メモ このインターフェイスは AVI Splitter ではサポートされなくなりました。メモ これは、AVI ファイルをハードウェアメモリに直接読み込む必要があった一部の古いハードウェアデコーダーをサポートするために定義されていました。
メソッド 3
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
メモ IAMDevMemoryControl インターフェイスは非推奨です。アロケーターがサポートするメモリが IAMDevMemoryControl::WriteSync メソッドの使用を必要とするかどうかを確認します。
戻り値
解説(Remarks)
すべてのオンボードメモリが、書き込み完了と同期するために WriteSync を呼び出す必要があるわけではありません。このメソッドは、その呼び出しが必要かどうかを確認するために使用されます。
メモ IAMDevMemoryControl インターフェイスは非推奨です。書き込みの完了と同期するために使用されます。このメソッドは、特定のアロケーター領域に書き込まれるデータがメモリへ完全に書き込まれた時点で復帰します。
戻り値
HRESULT 値を返します。取り得る値は次のとおりです。
| 戻り値 | 説明 |
|---|---|
| このメソッドがデータの書き込みを確認できないままタイムアウトが発生しました。 | |
| データがメモリへ正常に書き込まれました。 | |
| アロケーターが IMemAllocator::Commit メソッドを呼び出していません。 |
解説(Remarks)
このメソッドは、割り当てられたメモリに対するそれまでのすべての書き込み操作が成功したことを保証します。以降のメモリ書き込み操作では、WriteSync の再度の呼び出しが必要になります。
このメソッドは実装依存であり、必要な場合にメモリへの書き込み操作を同期するために使用されます。実装はオンボードメモリのドライバーが提供します。
IAMDevMemoryControl インターフェイスは、通常、PCI (Peripheral Component Interconnect) ブリッジ経由でアクセスされるメモリに存在します。(PCI は、プロセッサと周辺デバイスの間に高速なデータパスを提供する、パーソナルコンピューター向けのローカルバスです。) PCI ブリッジの背後にあるメモリは、別のデバイスが PCI ブリッジの背後からそのメモリにアクセスする場合、メモリ書き込み操作の完了後に同期する必要があります。これは、メモリへのホストアクセスが PCI ブリッジの FIFO (先入れ先出し) を通じてバッファリングされ、ブリッジが実際にデータを書き込む前にホストが書き込み完了と見なすためです。IAMDevMemoryControl::WriteSync メソッドが呼び出されないと、SCSI コントローラーなどのブリッジ背後のデバイスによる後続の操作が、書き込み完了前にメモリを読み取ってしまう可能性があります。
メモ IAMDevMemoryControl インターフェイスは非推奨です。オンボードメモリアロケーターのデバイス ID を取得します。
| pdwDevId | DWORD* | out | デバイス ID へのポインター。 |
戻り値
インターフェイスの実装に依存する HRESULT 値を返します。
解説(Remarks)
このメソッドは、指定されたアロケーターがそのオンボードメモリを使用していることをハードウェアフィルターが検証するために使用できる一意の ID を取得します (オンボードメモリは複数存在し得るためです)。この ID は、(CoCreateInstance を使用して) アロケーターオブジェクトを作成する際に使用されたものと同じになります。別のフィルターがそのオンボードメモリを使用できるようにするには、そのフィルターがオンボードメモリアロケーターと同じデバイス ID を持っている必要があります。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IAMDevMemoryControl "{C6545BF1-E76B-11D0-BD52-00A0C911CE86}" #usecom global IAMDevMemoryControl IID_IAMDevMemoryControl "{}" #comfunc global IAMDevMemoryControl_QueryWriteSync 3 #comfunc global IAMDevMemoryControl_WriteSync 4 #comfunc global IAMDevMemoryControl_GetDevId 5 var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。#define global IID_IAMDevMemoryControl "{C6545BF1-E76B-11D0-BD52-00A0C911CE86}" #usecom global IAMDevMemoryControl IID_IAMDevMemoryControl "{}" #comfunc global IAMDevMemoryControl_QueryWriteSync 3 #comfunc global IAMDevMemoryControl_WriteSync 4 #comfunc global IAMDevMemoryControl_GetDevId 5 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。