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

IFilterGraph2

COM
IID36b73882-c2c8-11cf-8b46-00805f6cef60継承元IGraphBuilder自前メソッド開始 vtbl18

公式ドキュメント

IFilterGraph2 インターフェースは、フィルターグラフを構築するためのメソッドを含む IFilterGraph および IGraphBuilder インターフェースを拡張します。このインターフェースは Filter Graph Manager によって実装されます。

メソッド 3

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

vtbl 18 HRESULT AddSourceFilterForMoniker(IMoniker* pMoniker, IBindCtx* pCtx, LPWSTR lpcwstrFilterName, IBaseFilter** ppFilter)

AddSourceFilterForMoniker メソッドは、IMoniker ポインターからソースフィルターを作成し、そのフィルターをグラフに追加します。

pMonikerIMoniker*inIMoniker インターフェースへのポインター。
pCtxIBindCtx*inIBindCtx バインドコンテキストインターフェースへのポインター。
lpcwstrFilterNameLPWSTRinフィルターの名前。
ppFilterIBaseFilter**outソースフィルターの IBaseFilter ポインターを受け取ります。呼び出し側はこのインターフェースを解放する必要があります。

戻り値

HRESULT 値を返します。取り得る値には次のものがあります。

リターン コード 説明
S_OK
成功しました。
VFW_S_DUPLICATE_NAME
成功しましたが、指定された名前が重複していたため、Filter Graph Manager が名前を変更しました。
E_FAIL
失敗しました。
E_OUTOFMEMORY
メモリが不足しています。
VFW_E_DUPLICATE_NAME
重複した名前のフィルターの追加に失敗しました。
VFW_E_CANNOT_LOAD_SOURCE_FILTER
ソースフィルターを読み込めませんでした。
VFW_E_UNKNOWN_FILE_TYPE
このファイルのメディアタイプは認識されません。

解説(Remarks)

Filter Graph Manager は、フィルターがグラフから削除されるか、Filter Graph Manager が解放されるまで、そのフィルターへの参照カウントを保持します。

C++
IBaseFilter *pSource = NULL;
IMoniker *pMoniker = NULL;

// IEnumMonikers を使用して IMoniker ポインターを取得します。(コードは省略)

// モニカーを扱うためのバインドコンテキストを作成します。 IBindCtx pContext=0; hr = CreateBindCtx(0, &pContext); if (SUCCEEDED(hr)) { // Filter Graph Manager に IFilterGraph2 を照会します。 IFilterGraph2 pFG2 = NULL; hr = pGraph->QueryInterface(IID_IFilterGraph2, (void)&pFG2); if (SUCCEEDED(hr)) { // ソースフィルターを作成します。 hr = pFG2->AddSourceFilterForMoniker(pMoniker, pContext, L"Source", &pSource); pFG2->Release(); } pContext->Release(); } pMoniker->Release();

vtbl 19 HRESULT ReconnectEx(IPin* ppin, AM_MEDIA_TYPE* pmt)

ReconnectEx メソッドは、既存のピン接続を切断し、指定したメディアタイプを使用して同じピンに再接続します。

ppinIPin*in切断して再接続するピンへのポインター。
pmtAM_MEDIA_TYPE*inoptional再接続に使用するメディアタイプへのポインター。既存のメディアタイプを使用するには NULL を指定します。

戻り値

HRESULT 値を返します。取り得る値には次のものがあります。

リターン コード 説明
S_OK
成功しました。
S_FALSE
ピンは接続されていませんでした。エラーではありません。
E_FAIL
失敗しました。
E_POINTER
NULL ポインター引数です。
VFW_E_NOT_STOPPED
フィルターが停止しておらず、かつ実行状態での再接続をサポートしていません。

解説(Remarks)

フィルターは、ピン接続を再ネゴシエートするためにこのメソッドを呼び出すことができます。このメソッドは別のスレッドで実行されます。このメソッドを呼び出す前に、相手側のピンに対して IPin::QueryAccept を呼び出し、再接続の試行が成功することを確認してください。QueryAcceptS_OK を返さない限り、このメソッドを呼び出さないでください。そうしないと、再接続は非同期に実行されるため、ReconnectEx メソッド自体が成功しても再接続が失敗し、フィルターグラフが不整合な状態のまま残る可能性があります。

このメソッドは、メディアタイプを指定できる点で IFilterGraph::Reconnect メソッドを改良したものです。これにより、再接続が成功する可能性が高まります。

vtbl 20 HRESULT RenderEx(IPin* pPinOut, DWORD dwFlags, DWORD* pvContext)

RenderEx メソッドは、既存のレンダラーのみを使用するオプションを指定して、出力ピンをレンダリングします。

pPinOutIPin*in出力ピンの IPin インターフェースへのポインター。
dwFlagsDWORDinピンをどのようにレンダリングするかを指定するフラグ。値が AM_RENDEREX_RENDERTOEXISTINGRENDERERS の場合、メソッドはフィルターグラフ内に既に存在するレンダラーの使用を試みます。新しいレンダラーをグラフに追加することはありません。(必要に応じて中間の変換フィルターは追加されます。)メソッドが成功するには、グラフに適切なレンダラーが含まれ、それらのレンダラーに未接続の入力ピンがなければなりません。値が 0 の場合、メソッドは IGraphBuilder::Render メソッドと同一の動作をします。
pvContextDWORD*optional予約済み。NULL でなければなりません。

戻り値

HRESULT 値を返します。

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_IFilterGraph2 "{36B73882-C2C8-11CF-8B46-00805F6CEF60}"
#usecom global IFilterGraph2 IID_IFilterGraph2 "{}"
#comfunc global IFilterGraph2_AddSourceFilterForMoniker  18 sptr,sptr,wstr,sptr
#comfunc global IFilterGraph2_ReconnectEx                19 sptr,var
#comfunc global IFilterGraph2_RenderEx                   20 sptr,int,var
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。