IMFShutdown
COM公式ドキュメント
明示的にシャットダウンする必要がある一部の Media Foundation オブジェクトによって公開されます。
解説(Remarks)
IMFShutdown を公開するオブジェクトの種類は次のとおりです。
- コンテンツイネーブラー(IMFContentEnabler インターフェイス)
- 入力信頼機関(IMFInputTrustAuthority インターフェイス)
- プレゼンテーションクロック(IMFPresentationClock インターフェイス)
- 非同期 MFT
このインターフェイスへのポインターを取得するには、オブジェクトに対して QueryInterface を呼び出します。
カスタムオブジェクトを実装している場合、アプリケーションが Shutdown を呼び出すことを保証できる場合に限り、オブジェクトでこのインターフェイスを公開できます。
メディアソース、メディアシンク、および 同期 MFT は、このインターフェイスを実装すべきではありません。Media Foundation パイプラインはこれらのオブジェクトに対して Shutdown を呼び出さないためです。 非同期 MFT は、このインターフェイスを実装する必要があります。
このインターフェイスは、Media Foundation の初期化で説明されているように Media Foundation プラットフォームをシャットダウンする MFShutdown 関数とは関連していません。
一部の Media Foundation インターフェイスは Shutdown メソッドを定義しています。これは IMFShutdown::Shutdown と同じ目的を果たしますが、直接関連するものではありません。
メソッド 2
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
Media Foundation オブジェクトをシャットダウンし、そのオブジェクトに関連付けられているすべてのリソースを解放します。(IMFShutdown.Shutdown)
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
MFShutdownObject ヘルパー関数は、このメソッドを呼び出すことと同等です。
以前の IMFShutdown::Shutdown メソッド呼び出しの状態を照会します。
| pStatus | MFSHUTDOWN_STATUS* | out | MFSHUTDOWN_STATUS 列挙型のメンバーを受け取ります。 |
戻り値
このメソッドは HRESULT を返します。可能な値には、次の表の値が含まれますが、これらに限定されません。
| 戻り値コード | 説明 |
|---|---|
| メソッドが成功しました。 | |
| 引数が無効です。 | |
| このオブジェクトに対して Shutdown メソッドが呼び出されていません。 |
解説(Remarks)
Shutdown が呼び出されるまで、GetShutdownStatus メソッドは MF_E_INVALIDREQUEST を返します。
オブジェクトの Shutdown メソッドが非同期の場合、pStatus は値 MFSHUTDOWN_INITIATED を受け取ることがあります。オブジェクトが完全にシャットダウンされると、pStatus は値 MFSHUTDOWN_COMPLETED を受け取ります。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IMFShutdown "{97EC2EA4-0E42-4937-97AC-9D6D328824E1}" #usecom global IMFShutdown IID_IMFShutdown "{}" #comfunc global IMFShutdown_Shutdown 3 #comfunc global IMFShutdown_GetShutdownStatus 4 var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。#define global IID_IMFShutdown "{97EC2EA4-0E42-4937-97AC-9D6D328824E1}" #usecom global IMFShutdown IID_IMFShutdown "{}" #comfunc global IMFShutdown_Shutdown 3 #comfunc global IMFShutdown_GetShutdownStatus 4 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。