IGraphConfig::Reconfigure
Reconfigure メソッドは、フィルタ グラフをロックし、アプリケーションまたはフィルタのコールバック関数を呼び出して、動的な再構成を実行する。
構文
HRESULT Reconfigure(
IGraphConfigCallback *pCallback,
PVOID pvContext,
DWORD dwFlags,
HANDLE hAbortEvent
);
パラメータ
pCallback
[in] アプリケーションまたはフィルタの IGraphConfigCallback コールバック インターフェイスへのポインタ。
pvContext
[in] コールバック ルーチンに渡す PVOID 型変数へのポインタ。
dwFlags
[in] コールバック ルーチンに渡すアプリケーションで定義したフラグ。
hAbortEvent
[in] イベントのハンドル。フィルタのデータ処理スレッドのいずれかからこのメソッドを呼び出す場合は、この引数に、そのフィルタが停止状態に切り替わったときに通知済みになるイベントのハンドルを指定しなければならない。それ以外の場合、この引数は NULL でかまわない。詳細については、「注意」を参照すること。
戻り値
成功した場合は S_OK を返す。それ以外の場合はエラー コードを返す。フィルタ グラフをロックできなかった場合には、コールバック ルーチンが返す HRESULT にかかわりなく、エラー コードは VFW_E_WRONG_STATE となる。また、フィルタを実行状態に切り替えられなかったことを示すエラー コードもある。
注意
このメソッドは、アプリケーションまたはフィルタで特殊な動的グラフ作成を実装するために提供される。ただし、通常は IGraphConfig::Reconnect メソッドで目的を達成できる。また、実装の細かい処理の大半がメソッド側で実行されるという点でも、IGraphConfig::Reconnect メソッドを優先的に使うこと。
このメソッドを呼び出す前に、必要に応じてストリームの動作を停止し、グラフを通じてデータを引き渡すこと (詳細については、「IPinFlowControl::Block」および「IGraphConfig::PushThroughData」を参照すること)。コールバック メソッドが成功した場合、IGraphConfig::Reconfigure はフィルタをすべて実行状態に切り替えようとする (動作が停止されているデータ フローを、呼び出し元で解除しなければならない)。それ以外の場合は、コールバック メソッドが返したエラー コードを返す。
フィルタのデータ処理スレッドのいずれかからこのメソッドを呼び出すと、デッドロックに陥る危険性がある。このメソッドがフィルタ グラフをロックするため、IMediaFilter::Stop の呼び出しを受け取ったとき、フィルタが停止できない可能性がある。この状況を避けるため、このメソッドはフィルタが提供するイベント オブジェクトのハンドルを利用する。フィルタは、その Stop メソッドの呼び出しを受け取ったら、イベントを通知しなければならない。
参照