Microsoft DirectX 8.0 |
フィルタ グラフに基準タイムを提供する。
基準クロックとしての機能を持つフィルタは、このインターフェイスを公開できる。このインターフェイスは、システム基準クロックでも公開される。フィルタ グラフ マネージャは、このインターフェイスを使用してフィルタ グラフの同期をとる。アプリケーションでは、このインターフェイスを使用して、現在の基準タイムを取得したり、経過時間の通知を要求したりできる。
詳細については、「DirectShow のタイムとクロック」を参照すること。
フィルタ開発者へ : 信頼性の高いクロック タイムを生成するフィルタを開発するには、このインターフェイスを実装すること。たとえば、サウンド ボードには基準クロックが付いていることが多いので、オーディオ レンダリング フィルタはこのインターフェイスを実装する。このインターフェイスを実装するには、CBaseReferenceClock クラスを使用すること。
非レンダリング フィルタがフィルタグラフマネージャから参照クロックとして選択されるチャンスを増やすには、以下のステップ :
vtable 順のメソッド
IUnknown メソッド 説明 QueryInterface サポートされているインターフェイスへのポインタを返す。 AddRef 参照カウントをインクリメントする。 Release 参照カウントをデクリメントする。 IReferenceClock メソッド 説明 GetTime 現在の基準タイムを取得する。 AdviseTime 単発のアドバイズ要求を作成する。 AdvisePeriodic 周期的なアドバイズ要求を作成する。 Unadvise 保留中のアドバイズ要求を削除する。
周期的なアドバイズ要求を作成する。
構文
HRESULT AdvisePeriodic( REFERENCE_TIME rtStartTime, REFERENCE_TIME rtPeriodTime, HSEMAPHORE hSemaphore, DWORD *pdwAdviseCookie );
パラメータ
- rtStartTime
- [in] 最初の通知のタイム (100 ナノ秒単位)。ゼロ以上、MAX_TIME 以下でなくてはならない。
- rtPeriodTime
- [in] 通知の間のタイム (100 ナノ秒単位)。ゼロ以上でなくてはならない。
- hSemaphore
- [in] 呼び出し元によって作成されるセマフォのハンドル。
- pdwAdviseCookie
- [out] このアドバイズ要求の識別子を受け取る変数へのポインタ。
戻り値
HRESULT 値を返す。次の可能な値がある。
S_OK 成功。 E_INVALIDARG 無効なタイム値。 E_OUTOFMEMORY 失敗。 E_POINTER NULL ポインタ引数。
注意
クロックは、通知のたびに hSemaphore パラメータで指定されたセマフォを解放する。それ以上通知が不要になった場合は Unadvise を呼び出し、この呼び出しによって返された pdwAdviseToken 値を渡す。
次のサンプル コードでは、作成後 5 秒、およびそれ以降の 2 秒ごとに通知されるアドバイズ要求を作成している。
IReferenceClock *pRefClock = NULL; // IReferenceClock ポインタを取得する (示されない)。 DWORD dwAdviseToken; HANDLE hSemaphore = CreateSemaphore(NULL, 0, 0x7FFFFFFF, NULL); REFERENCE_TIME rtPeriodTime = 10000000; // A one-second interval REFERENCE_TIME rtNow; pRefClock->GetTime(&rtNow); pRefClock->AdvisePeriodic(rtNow + (5 * rtPeriodTime), rtPeriodTime, hSemaphore, &dwAdviseToken); ... pRefClock->Unadvise(dwAdviseToken);
単発のアドバイズ要求を作成する。
構文
HRESULT AdviseTime( REFERENCE_TIME rtBaseTime, REFERENCE_TIME rtStreamTime, HEVENT hEvent, DWORD *pdwAdviseCookie );
パラメータ
- rtBaseTime
- [in] 基本となる基準タイム (100 ナノ秒単位)。「注意」を参照すること。
- rtStreamTime
- [in] ストリーム オフセット タイム (100 ナノ秒単位)。「注意」を参照すること。
- hEvent
- [in] 呼び出し元によって作成されるイベントへのハンドル。
- pdwAdviseCookie
- [out] アドバイズ要求の識別子を受け取る変数へのポインタ。
戻り値
HRESULT 値を返す。次の可能な値がある。
S_OK 成功。 E_INVALIDARG 無効なタイム値。 E_OUTOFMEMORY 失敗。 E_POINTER NULL ポインタ引数。
注意
このメソッドは、基準タイム baseTime + streamTime に対して単発のアドバイズ要求を作成する。その合計は、ゼロ以上、MAX_TIME 以下でなくてはならない。これ以外の場合は、E_INVALIDARG を返す。クロックは、要求されたタイムに、hEvent パラメータで指定されたイベントを通知する。
タイムに到達する前に通知を取り消すには、Unadvise メソッドを呼び出し、呼び出しによって返された pdwAdviseToken 値を渡す。通知の発生後、クロックは自動的に通知を消去するので、Unadvise を呼び出す必要はない。ただし、呼び出しても間違いではない。
現在の時間を取得する。
構文
HRESULT GetTime( REFERENCE_TIME *pTime );
パラメータ
- pTime
- [out] 現在の時間を受け取る変数へのポインタ (100 ナノ秒単位)。
戻り値
HRESULT 値を返す。次の可能な値がある。
POINTER NULL ポインタ引数。 S_FALSE 返されたタイムは、前の値と同じである。 S_OK 成功。
保留中のアドバイズ要求を削除する。
構文
HRESULT Unadvise( DWORD dwAdviseCookie );
パラメータ
- dwAdviseCookie
- [in] 削除する要求の識別子。AdviseTime、または pdwAdviseToken パラメータの AdvisePeriodic から返された値を使用する。
戻り値
HRESULT 値を返す。次の可能な値がある。
S_FALSE 見つからなかった。 S_OK 成功。