次の方法で共有


IMediaFilter::SetSyncSource

SetSyncSource メソッドは、基準クロックを設定する。

構文

  HRESULT SetSyncSource(
  IReferenceClock *pClock
);

パラメータ

pClock

[in] クロックの IReferenceClock インターフェイスへのポインタ。または NULL。

戻り値

成功した場合は S_OK を返す。それ以外の場合は、エラーの発生を示す HRESULT 値を返す。

注意

フィルタ グラフ内のすべてのフィルタは、同期をとるために、同じ基準クロックを共有する。ストリーム タイムは、基準クロックに基づいて計算される。レンダリング フィルタは基準クロックを使って、いつサンプルをレンダリングするかをスケジュールする。基準クロックがない場合、レンダリング フィルタは、すべてのサンプルを受け取るとすぐにレンダリングする。

このメソッドは、すべての DirectShow フィルタ、フィルタ グラフ マネージャで実装される。

フィルタ実装

グラフが実行すると、フィルタ グラフ マネージャはグラフ内のすべてのフィルタでこのメソッドを呼び出して、グラフの基準クロックを通知する。このメソッドを使って、IReferenceClock ポインタを格納する。格納したポインタの参照カウントをインクリメントする。フィルタをグラフから削除する前に、フィルタ グラフ マネージャは値 NULL で再び SetSyncSource を呼び出す。格納したポインタを解放し、そのポインタを NULL に設定する。

CBaseFilter クラスはこのメソッドを実装する。「CBaseFilter::SetSyncSource」を参照すること。

フィルタはこのメソッドを使ってグラフ クロックは選択できない点に注意すること。フィルタでは、このメソッドの関数だけがフィルタにグラフが使っているクロックを通知する。フィルタは、IReferenceClock インターフェイスを公開することによって、基準クロックを提供できる。詳細については、「DirectShow のタイムとクロック」を参照すること。

アプリケーションからの使用

アプリケーションは、フィルタ グラフ マネージャで SetSyncSource を呼び出して、デフォルト クロックをオーバーライドできる。この操作は、別のクロックを使う明確な理由がある場合にのみ行うこと。値 NULL で SetSyncSource を呼び出して、グラフが基準クロックを使わないように設定することも可能である。このように設定すると、サンプルをできる限り早く処理できる。詳細については、「グラフ クロックの設定」を参照すること。

アプリケーションは、フィルタでこのメソッドを決して呼び出してはならない。

参照