IAMGraphStreams
COM公式ドキュメント
IAMGraphStreams インターフェイスは、ライブソースをレンダリングするフィルターグラフを制御します。
メソッド 3
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
FindUpstreamInterface メソッドは、指定したピンの上流に向かって、指定したインターフェイスをフィルターグラフ内で検索します。
| pPin | IPin* | in | ピンの IPin インターフェイスへのポインター。このピンは、フィルターグラフ内のフィルターに属している必要があります。 |
| riid | GUID* | in | 検索対象のインターフェイスを指定するインターフェイス識別子 (IID) への参照。 |
| ppvInterface | void** | out | void ポインターのアドレス。メソッドが成功すると、この変数は riid で指定されたインターフェイスへのポインターを受け取ります。 |
| dwFlags | DWORD | in | 検索対象 (ピンまたはフィルター) を指定する、AM_INTF_SEARCH_FLAGS 列挙体のフラグの組み合わせ。 |
戻り値
次のいずれかの HRESULT 値を返します。
| 戻り値 | 説明 |
|---|---|
| インターフェイスが見つかりません。 | |
| 無効なポインターです。 | |
| 成功しました。 |
解説(Remarks)
dwFlags が 0 の場合、このメソッドは次の順序でインターフェイスを検索します。
- pPin で指定されたピンに対してクエリを実行します。
-
pPin が入力ピンの場合、pPin に接続されている出力ピン (存在する場合) に対して FindUpstreamInterface を再帰的に呼び出します。
pPin が出力ピンの場合、pPin を所有するフィルターに対してクエリを実行します。次に、そのフィルター上で pPin と内部接続を持つ入力ピンのリストを作成し、それらの入力ピンに対して
FindUpstreamInterfaceを再帰的に呼び出します。内部接続を持つ入力ピンのリストを作成するため、このメソッドは次の処理を行います。
- IPin::QueryInternalConnections を呼び出します。
- それが失敗した場合、IBaseFilter::EnumPins を呼び出して入力ピンを探します。
SyncUsingStreamOffset メソッドは、タイムスタンプオフセットを使用した同期を有効または無効にします。
| bUseStreamOffset | BOOL | in | タイムスタンプオフセットを使用するかどうかを示すブール値。TRUE の場合、ライブソースはストリームを同期するためにタイムスタンプオフセットを使用します。 |
戻り値
成功した場合は S_OK を返し、それ以外の場合はエラーコードを返します。
解説(Remarks)
既定では、フィルターグラフはタイムスタンプオフセットによるライブストリームの同期を試みません。フィルターグラフにグラフ内の最大レイテンシを算出させ、それに応じてタイムスタンプを調整させたい場合は、TRUE を指定してこのメソッドを呼び出します。詳細については、IAMPushSource::SetStreamOffset を参照してください。
SetMaxGraphLatency メソッドは、グラフの最大レイテンシを設定します。このメソッドを呼び出す前に、IAMGraphStreams::SyncUsingStreamOffset メソッドを呼び出す必要があります。
| rtMaxGraphLatency | LONGLONG | in | 最大レイテンシを 100 ナノ秒単位で指定します。 |
戻り値
解説(Remarks)
接続時に、一部のライブソースフィルターは最大レイテンシを使用して割り当てるバッファのサイズを決定します。グラフを構築する前にこのメソッドを呼び出しておくと、想定されるレイテンシに対して十分なバッファが確実に割り当てられるようになります。
SyncUsingStreamOffset を呼び出す前にこのメソッドを呼び出した場合、このメソッドは E_FAIL を返します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IAMGraphStreams "{632105FA-072E-11D3-8AF9-00C04FB6BD3D}" #usecom global IAMGraphStreams IID_IAMGraphStreams "{}" #comfunc global IAMGraphStreams_FindUpstreamInterface 3 sptr,var,sptr,int #comfunc global IAMGraphStreams_SyncUsingStreamOffset 4 int #comfunc global IAMGraphStreams_SetMaxGraphLatency 5 int64 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IAMGraphStreams "{632105FA-072E-11D3-8AF9-00C04FB6BD3D}" #usecom global IAMGraphStreams IID_IAMGraphStreams "{}" #comfunc global IAMGraphStreams_FindUpstreamInterface 3 sptr,sptr,sptr,int #comfunc global IAMGraphStreams_SyncUsingStreamOffset 4 int #comfunc global IAMGraphStreams_SetMaxGraphLatency 5 int64 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。