Win32 API 日本語リファレンス
ホームMedia.DirectShow › IAMDevMemoryControl

IAMDevMemoryControl

COM
IIDc6545bf1-e76b-11d0-bd52-00a0c911ce86継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

メモ このインターフェイスは AVI Splitter ではサポートされなくなりました。メモ これは、AVI ファイルをハードウェアメモリに直接読み込む必要があった一部の古いハードウェアデコーダーをサポートするために定義されていました。

メソッド 3

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 3 HRESULT QueryWriteSync()

メモ IAMDevMemoryControl インターフェイスは非推奨です。アロケーターがサポートするメモリが IAMDevMemoryControl::WriteSync メソッドの使用を必要とするかどうかを確認します。

戻り値

このメソッドが必要な場合は S_OK を返し、そうでない場合は S_FALSE を返します。

解説(Remarks)

すべてのオンボードメモリが、書き込み完了と同期するために WriteSync を呼び出す必要があるわけではありません。このメソッドは、その呼び出しが必要かどうかを確認するために使用されます。

vtbl 4 HRESULT WriteSync()

メモ IAMDevMemoryControl インターフェイスは非推奨です。書き込みの完了と同期するために使用されます。このメソッドは、特定のアロケーター領域に書き込まれるデータがメモリへ完全に書き込まれた時点で復帰します。

戻り値

HRESULT 値を返します。取り得る値は次のとおりです。

戻り値 説明
E_FAIL
このメソッドがデータの書き込みを確認できないままタイムアウトが発生しました。
S_OK
データがメモリへ正常に書き込まれました。
VFW_E_NOT_COMMITTED
アロケーターが IMemAllocator::Commit メソッドを呼び出していません。

解説(Remarks)

このメソッドは、割り当てられたメモリに対するそれまでのすべての書き込み操作が成功したことを保証します。以降のメモリ書き込み操作では、WriteSync の再度の呼び出しが必要になります。

このメソッドは実装依存であり、必要な場合にメモリへの書き込み操作を同期するために使用されます。実装はオンボードメモリのドライバーが提供します。

IAMDevMemoryControl インターフェイスは、通常、PCI (Peripheral Component Interconnect) ブリッジ経由でアクセスされるメモリに存在します。(PCI は、プロセッサと周辺デバイスの間に高速なデータパスを提供する、パーソナルコンピューター向けのローカルバスです。) PCI ブリッジの背後にあるメモリは、別のデバイスが PCI ブリッジの背後からそのメモリにアクセスする場合、メモリ書き込み操作の完了後に同期する必要があります。これは、メモリへのホストアクセスが PCI ブリッジの FIFO (先入れ先出し) を通じてバッファリングされ、ブリッジが実際にデータを書き込む前にホストが書き込み完了と見なすためです。IAMDevMemoryControl::WriteSync メソッドが呼び出されないと、SCSI コントローラーなどのブリッジ背後のデバイスによる後続の操作が、書き込み完了前にメモリを読み取ってしまう可能性があります。

vtbl 5 HRESULT GetDevId(DWORD* pdwDevId)

メモ IAMDevMemoryControl インターフェイスは非推奨です。オンボードメモリアロケーターのデバイス ID を取得します。

pdwDevIdDWORD*outデバイス ID へのポインター。

戻り値

インターフェイスの実装に依存する HRESULT 値を返します。

解説(Remarks)

このメソッドは、指定されたアロケーターがそのオンボードメモリを使用していることをハードウェアフィルターが検証するために使用できる一意の ID を取得します (オンボードメモリは複数存在し得るためです)。この ID は、(CoCreateInstance を使用して) アロケーターオブジェクトを作成する際に使用されたものと同じになります。別のフィルターがそのオンボードメモリを使用できるようにするには、そのフィルターがオンボードメモリアロケーターと同じデバイス ID を持っている必要があります。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
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 方式にも切替可。