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

IMFPMPServer

COM
IID994e23af-1cc2-493c-b9fa-46f1cb040fa4継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

Media Session の 2 つのインスタンスが同一の保護されたメディア パス (PMP) プロセスを共有できるようにします。

解説(Remarks)

アプリケーションが Media Session のインスタンスを複数作成する場合、このインターフェイスを使用して、複数のインスタンス間で同一の PMP プロセスを共有できます。これは、PMP プロセスを毎回作成し直すよりも効率的です。

このインターフェイスは次のように使用します。

  1. MFCreatePMPMediaSession を呼び出して、PMP Media Session の最初のインスタンスを作成します。
  2. サービス識別子 MF_PMP_SERVER_CONTEXT を指定して IMFGetService::GetService を呼び出し、最初の Media Session から IMFPMPServer ポインターを取得します。
  3. PMP Media Session の 2 番目のインスタンスを作成します。MFCreatePMPMediaSession 関数の pConfiguration パラメーターに MF_SESSION_SERVER_CONTEXT 属性を設定します。属性値には、手順 2 で取得した IMFPMPServer ポインターを指定します。

メソッド 3

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

vtbl 3 HRESULT LockProcess()

保護されたメディア パス (PMP) プロセスが終了しないようにブロックします。(IMFPMPServer.LockProcess)

戻り値

このメソッドは HRESULT を返します。取り得る値には次の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。

解説(Remarks)

このメソッドを呼び出すと、PMP プロセスのロック カウントがインクリメントされます。このメソッドを呼び出すたびに、アプリケーションはロック カウントをデクリメントする IMFPMPServer::UnlockProcess を対応して呼び出す必要があります。PMP プロセスは終了の準備が整うと、約 3 秒間、またはロック カウントが 0 に達するまで待機してから終了します。

vtbl 4 HRESULT UnlockProcess()

保護されたメディア パス (PMP) プロセスのロック カウントをデクリメントします。IMFPMPServer::LockProcess を呼び出すたびに、このメソッドを 1 回呼び出します。

戻り値

このメソッドは HRESULT を返します。取り得る値には次の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。
vtbl 5 HRESULT CreateObjectByCLSID(GUID* clsid, GUID* riid, void** ppObject)

保護されたメディア パス (PMP) プロセス内にオブジェクトを作成します。

clsidGUID*in作成するオブジェクトの CLSID。
riidGUID*in取得するインターフェイスのインターフェイス識別子。
ppObjectvoid**out要求されたインターフェイスへのポインターを受け取ります。呼び出し元はインターフェイスを解放する必要があります。

戻り値

このメソッドは HRESULT を返します。取り得る値には次の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。
出典・ライセンス: 上記「公式ドキュメント」の内容は 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_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 指定が可能。