IMFSequencerSource
COM公式ドキュメント
シーケンサーソースによって実装されます。
メソッド 5
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
キューの末尾にトポロジーを追加します。
| pTopology | IMFTopology* | in | トポロジーの IMFTopology インターフェイスへのポインター。このポインターを NULL にすることはできません。アプリケーションが NULL を渡した場合、呼び出しは E_INVALIDARG エラーコードで失敗します。 |
| dwFlags | DWORD | in | MFSequencerTopologyFlags 列挙体のフラグの組み合わせ。 |
| pdwId | DWORD* | out | このトポロジーに対するシーケンサー要素識別子を受け取ります。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| ソーストポロジーノードに、次のいずれかの属性がありません。 |
解説(Remarks)
シーケンサーは、キューに入れられた順序でトポロジーを再生します。プリロールするために必要な数だけトポロジーをキューに入れることができます。
アプリケーションは、Media Session に最後のトポロジーをキューに入れたことをシーケンサーに通知する必要があります。最後のトポロジーを指定するには、トポロジーを追加するときに dwFlags パラメーターに SequencerTopologyFlags_Last フラグを設定します。シーケンサーはこの情報を使用して、パイプラインとともに再生を終了します。それ以外の場合、シーケンサーは新しいトポロジーがキューに入れられるのを無期限に待機します。
キューからトポロジーを削除します。
| dwId | DWORD | in | 削除するトポロジーのシーケンサー要素識別子。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 |
プレゼンテーション記述子を、それに関連付けられたシーケンサー要素識別子およびそれが表すトポロジーにマッピングします。
| pPD | IMFPresentationDescriptor* | in | プレゼンテーション記述子の IMFPresentationDescriptor インターフェイスへのポインター。 |
| pId | DWORD* | outoptional | シーケンサー要素識別子を受け取ります。この値は、アプリケーションが IMFSequencerSource::AppendTopology を呼び出すときに、シーケンサーソースによって割り当てられます。このパラメーターは省略可能で、NULL にすることができます。 |
| ppTopology | IMFTopology** | outoptional | アプリケーションがシーケンサーソースに追加した元のトポロジーの IMFTopology インターフェイスへのポインターを受け取ります。呼び出し元はこのインターフェイスを解放する必要があります。シーケンサーソースが次のプレゼンテーションに切り替わっている場合、このパラメーターは NULL の値を受け取ることがあります。このパラメーターは省略可能で、NULL にすることができます。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| プレゼンテーション記述子が無効です。 | |
| このセグメントはキャンセルされました。 |
解説(Remarks)
ppTopology で返されるトポロジーは、アプリケーションが AppendTopology で指定した元のトポロジーです。このトポロジー内のソースノードには、ネイティブソースへのポインターが含まれています。このトポロジーを Media Session にキューへ入れないでください。代わりに、IMFMediaSourceTopologyProvider::GetMediaSourceTopology を呼び出して、シーケンサーソースによって変更されたトポロジーを取得してください。変更されたトポロジー内のソースノードには、ネイティブソースではなくシーケンサーソースへのポインターが含まれています。
キュー内のトポロジーを更新します。
| dwId | DWORD | in | 更新するトポロジーのシーケンサー要素識別子。 |
| pTopology | IMFTopology* | in | 更新後のトポロジーオブジェクトの IMFTopology インターフェイスへのポインター。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| シーケンサーソースはシャットダウンされています。 |
解説(Remarks)
このメソッドは非同期です。操作が完了すると、シーケンサーソースは MESequencerSourceTopologyUpdated イベントを送信します。
キュー内のトポロジーのフラグを更新します。
| dwId | DWORD | in | 更新するトポロジーのシーケンサー要素識別子。 |
| dwFlags | DWORD | in | MFSequencerTopologyFlags 列挙体のフラグのビットごとの OR。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 |
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IMFSequencerSource "{197CD219-19CB-4DE1-A64C-ACF2EDCBE59E}" #usecom global IMFSequencerSource IID_IMFSequencerSource "{}" #comfunc global IMFSequencerSource_AppendTopology 3 sptr,int,var #comfunc global IMFSequencerSource_DeleteTopology 4 int #comfunc global IMFSequencerSource_GetPresentationContext 5 sptr,var,sptr #comfunc global IMFSequencerSource_UpdateTopology 6 int,sptr #comfunc global IMFSequencerSource_UpdateTopologyFlags 7 int,int ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IMFSequencerSource "{197CD219-19CB-4DE1-A64C-ACF2EDCBE59E}" #usecom global IMFSequencerSource IID_IMFSequencerSource "{}" #comfunc global IMFSequencerSource_AppendTopology 3 sptr,int,sptr #comfunc global IMFSequencerSource_DeleteTopology 4 int #comfunc global IMFSequencerSource_GetPresentationContext 5 sptr,sptr,sptr #comfunc global IMFSequencerSource_UpdateTopology 6 int,sptr #comfunc global IMFSequencerSource_UpdateTopologyFlags 7 int,int ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。