IMFMediaEngineProtectedContent
COM公式ドキュメント
Media Engine が保護された動画コンテンツを再生できるようにします。
解説(Remarks)
このインターフェイスへのポインターを取得するには、Media Engine に対して QueryInterface を呼び出します。
メソッド 6
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
フレームサーバーモードにおいて、Media Engine が保護されたコンテンツにアクセスできるようにします。
| pUnkDeviceContext | IUnknown* | in | Direct3D 11 デバイスコンテキストへのポインター。Media Engine はこのポインターに対して ID3D11VideoContext インターフェイスをクエリします。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
フレームサーバーモードにおいて、このメソッドは Media Engine が保護されたコンテンツを Direct3D 11 デバイスと共有できるようにします。
フレームサーバーモードで適用する必要があるコンテンツ保護を取得します。
| pFrameProtectionFlags | DWORD* | out | MF_MEDIA_ENGINE_FRAME_PROTECTION_FLAGS 列挙型の 0 個以上のフラグのビットごとの OR を受け取ります。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
出力リンク保護を受け取るウィンドウを指定します。
| hwnd | HWND | in | ウィンドウへのハンドル。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
フレームサーバーモードでは、このメソッドを呼び出して保護された動画コンテンツの宛先ウィンドウを指定します。Media Engine は、Output Protection Manager(OPM)を使用して、このウィンドウにリンク保護を設定します。
保護された動画フレームを DXGI サーフェスにコピーします。
| pDstSurf | IUnknown* | in | コピー先サーフェスの IUnknown インターフェイスへのポインター。 |
| pSrc | MFVideoNormalizedRect* | inoptional | ソース矩形を指定する MFVideoNormalizedRect 構造体へのポインター。 |
| pDst | RECT* | in | コピー先矩形を指定する RECT 構造体へのポインター。 |
| pBorderClr | MFARGB* | inoptional | 境界色を指定する MFARGB 構造体へのポインター。 |
| pFrameProtectionFlags | DWORD* | out | MF_MEDIA_ENGINE_FRAME_PROTECTION_FLAGS 列挙型の 0 個以上のフラグのビットごとの OR を受け取ります。これらのフラグは、アプリケーションがサーフェスを表示する前に適用する必要があるコンテンツ保護を示します。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
保護されたコンテンツの場合は、IMFMediaEngine::TransferVideoFrame メソッドの代わりにこのメソッドを呼び出します。
コンテンツ保護マネージャー(CPM)を設定します。
| pCPM | IMFContentProtectionManager* | inoptional | 呼び出し元が実装する IMFContentProtectionManager インターフェイスへのポインター。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
Media Engine は、ライセンスの取得など、保護されたコンテンツに関連するイベントを処理するために CPM を使用します。
アプリケーションの証明書を設定します。
| pbBlob | BYTE* | in | X.509 形式の証明書と、それに続いて証明書の秘密鍵を用いて SHA-256 署名で署名されたアプリケーション識別子を含むバッファーへのポインター。 |
| cbBlob | DWORD | in | pbBlob バッファーのサイズ(バイト単位)。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
フレームサーバーモードで保護された動画コンテンツにアクセスするには、このメソッドを呼び出します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IMFMediaEngineProtectedContent "{9F8021E8-9C8C-487E-BB5C-79AA4779938C}" #usecom global IMFMediaEngineProtectedContent IID_IMFMediaEngineProtectedContent "{}" #comfunc global IMFMediaEngineProtectedContent_ShareResources 3 sptr #comfunc global IMFMediaEngineProtectedContent_GetRequiredProtections 4 var #comfunc global IMFMediaEngineProtectedContent_SetOPMWindow 5 sptr #comfunc global IMFMediaEngineProtectedContent_TransferVideoFrame 6 sptr,var,var,var,var #comfunc global IMFMediaEngineProtectedContent_SetContentProtectionManager 7 sptr #comfunc global IMFMediaEngineProtectedContent_SetApplicationCertificate 8 var,int ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IMFMediaEngineProtectedContent "{9F8021E8-9C8C-487E-BB5C-79AA4779938C}" #usecom global IMFMediaEngineProtectedContent IID_IMFMediaEngineProtectedContent "{}" #comfunc global IMFMediaEngineProtectedContent_ShareResources 3 sptr #comfunc global IMFMediaEngineProtectedContent_GetRequiredProtections 4 sptr #comfunc global IMFMediaEngineProtectedContent_SetOPMWindow 5 sptr #comfunc global IMFMediaEngineProtectedContent_TransferVideoFrame 6 sptr,sptr,sptr,sptr,sptr #comfunc global IMFMediaEngineProtectedContent_SetContentProtectionManager 7 sptr #comfunc global IMFMediaEngineProtectedContent_SetApplicationCertificate 8 sptr,int ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。