IMFTrackedSample
COM公式ドキュメント
ビデオ メディア サンプルの参照カウントを追跡します。
解説(Remarks)
このインターフェイスは、サンプルに含まれるバッファーを削除または再利用しても安全かどうかを判断するために使用します。あるオブジェクトが SetAllocator を呼び出すことで、そのビデオ サンプルの所有者として自身を割り当てます。すべてのオブジェクトがサンプルの参照カウントを解放すると、所有者のコールバック メソッドが呼び出されます。
メソッド 1
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
サンプルの所有者を設定します。
| pSampleAllocator | IMFAsyncCallback* | in | コールバック オブジェクトの IMFAsyncCallback インターフェイスへのポインター。呼び出し元がこのインターフェイスを実装する必要があります。 |
| pUnkState | IUnknown* | in | 呼び出し元が定義する状態オブジェクトの IUnknown インターフェイスへのポインター。このパラメーターは NULL にできます。このオブジェクトを使用して状態情報を保持できます。コールバックが呼び出されるときに、このオブジェクトが呼び出し元に返されます。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 所有者は既に設定されています。このメソッドは同じサンプルに対して 2 回呼び出すことはできません。 |
解説(Remarks)
このメソッドを呼び出すと、サンプルは自身に対する追加の参照カウントを保持します。他のすべてのオブジェクトがサンプルの参照カウントを解放すると、サンプルは pSampleAllocator コールバック メソッドを呼び出します。サンプルへのポインターを取得するには、コールバックの IMFAsyncCallback::Invoke メソッドに渡される非同期結果オブジェクトに対して IMFAsyncResult::GetObject を呼び出します。
コールバックが呼び出された後、サンプルはコールバックをクリアします。コールバックを再設定するには、SetAllocator を再度呼び出す必要があります。
サンプルの IMFSample インターフェイス ポインターを、コールバックの状態オブジェクト (pUnkState) として渡しても安全です。pUnkState がサンプルを指している場合、SetAllocator メソッドは pUnkState に対する追加の参照カウントを考慮します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IMFTrackedSample "{245BF8E9-0755-40F7-88A5-AE0F18D55E17}"
#usecom global IMFTrackedSample IID_IMFTrackedSample "{}"
#comfunc global IMFTrackedSample_SetAllocator 3 sptr,sptr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。