IMFPMPServer
COM公式ドキュメント
Media Session の 2 つのインスタンスが同一の保護されたメディア パス (PMP) プロセスを共有できるようにします。
解説(Remarks)
アプリケーションが Media Session のインスタンスを複数作成する場合、このインターフェイスを使用して、複数のインスタンス間で同一の PMP プロセスを共有できます。これは、PMP プロセスを毎回作成し直すよりも効率的です。
このインターフェイスは次のように使用します。
- MFCreatePMPMediaSession を呼び出して、PMP Media Session の最初のインスタンスを作成します。
- サービス識別子 MF_PMP_SERVER_CONTEXT を指定して IMFGetService::GetService を呼び出し、最初の Media Session から IMFPMPServer ポインターを取得します。
- PMP Media Session の 2 番目のインスタンスを作成します。MFCreatePMPMediaSession 関数の pConfiguration パラメーターに MF_SESSION_SERVER_CONTEXT 属性を設定します。属性値には、手順 2 で取得した IMFPMPServer ポインターを指定します。
メソッド 3
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
保護されたメディア パス (PMP) プロセスが終了しないようにブロックします。(IMFPMPServer.LockProcess)
戻り値
このメソッドは HRESULT を返します。取り得る値には次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 |
解説(Remarks)
このメソッドを呼び出すと、PMP プロセスのロック カウントがインクリメントされます。このメソッドを呼び出すたびに、アプリケーションはロック カウントをデクリメントする IMFPMPServer::UnlockProcess を対応して呼び出す必要があります。PMP プロセスは終了の準備が整うと、約 3 秒間、またはロック カウントが 0 に達するまで待機してから終了します。
保護されたメディア パス (PMP) プロセスのロック カウントをデクリメントします。IMFPMPServer::LockProcess を呼び出すたびに、このメソッドを 1 回呼び出します。
戻り値
このメソッドは HRESULT を返します。取り得る値には次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 |
保護されたメディア パス (PMP) プロセス内にオブジェクトを作成します。
| clsid | GUID* | in | 作成するオブジェクトの CLSID。 |
| riid | GUID* | in | 取得するインターフェイスのインターフェイス識別子。 |
| ppObject | void** | out | 要求されたインターフェイスへのポインターを受け取ります。呼び出し元はインターフェイスを解放する必要があります。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 |
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IMFPMPServer "{994E23AF-1CC2-493C-B9FA-46F1CB040FA4}" #usecom global IMFPMPServer IID_IMFPMPServer "{}" #comfunc global IMFPMPServer_LockProcess 3 #comfunc global IMFPMPServer_UnlockProcess 4 #comfunc global IMFPMPServer_CreateObjectByCLSID 5 var,var,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IMFPMPServer "{994E23AF-1CC2-493C-B9FA-46F1CB040FA4}" #usecom global IMFPMPServer IID_IMFPMPServer "{}" #comfunc global IMFPMPServer_LockProcess 3 #comfunc global IMFPMPServer_UnlockProcess 4 #comfunc global IMFPMPServer_CreateObjectByCLSID 5 sptr,sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。