次の方法で共有


CBaseReferenceClock クラス

CBaseReferenceClock の接続処理

CBaseReferenceClock クラスは基準クロックを実装する。

このクラスは、IReferenceClock インターフェイスをサポートする基準クロックを実装する。ハードウェア デバイスにアクセスするなどして、フィルタがフィルタ グラフに基準クロックを提供できる場合、フィルタはこのクラスを使ってクロックを実装する。

CBaseReferenceClock オブジェクトは、次の 2 つの個別のタイム値を維持する。

内部クロックを短時間逆方向に進めることは有効である。たとえば、クロックが先に進んだ場合、フィルタはクロックを逆方向に調整できる (「CBaseReferenceClock::SetTimeDelta」を参照)。GetTime メソッドは、GetPrivateTime によって報告されたタイム値を使う。しかし、基準タイムは単調増加している。つまり、決して逆方向に進むことはない。そのため、内部クロックが逆方向に進んだ場合、GetTime は内部クロックが追いつくまで古いタイムを報告し続ける。

たとえば、2 つのメソッドが次のシーケンスを返すとする。

GetPrivateTime: 105, 106, 103, 104, 105, 106, 107, 108
GetTime:        105, 106, 106, 106, 106, 106, 107, 108

3 つ目のクロック ティックでは、内部クロックは 103 に戻っている。GetTime メソッドは、内部クロックが追いつくまで、106 を報告し続ける。

デフォルトでは、GetPrivateTime は、timeGetTime 関数の呼び出しによってシステム タイムを返す。外部デバイスから基準クロックを提供しているフィルタは、次のいずれかを行うことができる。

  • GetPrivateTime をオーバーライドし、デバイスからのタイムを返す。
  • デバイス タイムとシステム タイムの差を監視し、SetTimeDelta を呼び出して訂正する。

このクラスは、CAMSchedule オブジェクトを使ってアドバイズ要求のスケジューリングを行う。詳細については、CAMSchedule クラスのドキュメントを参照すること。

要件

ヘッダー : Refclock.h で宣言し、Streams.h をインクルードする。

ライブラリ : Strmbase.lib (リテール ビルド) または Strmbasd.lib (デバッグ ビルド)。

プロテクト メンバ変数  
m_pSchedule クロックのスケジュール タスクを処理する CAMSchedule オブジェクト。
プロテクト メソッド  
~CBaseReferenceClock デストラクタ メソッド。
パブリック メソッド  
CBaseReferenceClock コンストラクタ メソッド。
GetPrivateTime クロックから現在のタイムを取得する。
SetTimeDelta 内部クロック タイムを調整する。
GetSchedule クロックのスケジュール オブジェクトへのポインタを取得する。
TriggerThread スケジューリングを処理するワーカー スレッドを起動する。
IReferenceClock メソッド  
GetTime 現在の基準タイムを取得する。
AdviseTime 単発のアドバイズ要求を作成する。
AdvisePeriodic 周期的アドバイズ要求を作成する。
Unadvise ペンディング状態のアドバイズ要求を削除する。
ヘルパー関数  
ConvertToMilliseconds 基準タイムをミリ秒に変換する。