IMFClock
COM公式ドキュメント
Microsoft Media Foundation において、クロックからタイミング情報を提供します。
解説(Remarks)
IMFClock インターフェイスは、あらゆる種類のクロックに適用されます。プレゼンテーションクロックは、IMFClock に加えて IMFPresentationClock インターフェイスを公開します。
メソッド 5
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
クロックの特性を取得します。
| pdwCharacteristics | DWORD* | out | クロックの特性を示す MFCLOCK_CHARACTERISTICS_FLAGS 列挙体の値のビットごとの OR を受け取ります。 |
戻り値
このメソッドは HRESULT を返します。可能な値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 |
システム時刻と相関付けられた最後のクロック時刻を取得します。
| dwReserved | DWORD | in | 予約されています。ゼロにする必要があります。 |
| pllClockTime | LONGLONG* | out | クロックの周波数を単位とした、最後にわかっているクロック時刻を受け取ります。 |
| phnsSystemTime | LONGLONG* | out | pllClockTime で返されるクロック時刻に対応するシステム時刻を、100 ナノ秒単位で受け取ります。 |
戻り値
このメソッドは HRESULT を返します。可能な値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| クロックにタイムソースがありません。 |
解説(Remarks)
クロックは、一定の間隔ごとに、内部のクロックティックをシステム時刻と相関付けます。(システム時刻は、高分解能パフォーマンスカウンターによって返される時刻です。)このメソッドは次の情報を返します。
- システム時刻と相関付けられた、最新のクロック時刻。
- 相関付けが実行されたときのシステム時刻。
システム時刻は phnsSystemTime パラメーターで返され、常に 100 ナノ秒単位で表されます。
クロックがクロック時刻をシステム時刻と相関付ける頻度を確認するには、GetProperties を呼び出します。相関付けの間隔は、MFCLOCK_PROPERTIES 構造体の qwCorrelationRate メンバーで与えられます。qwCorrelationRate がゼロの場合、クロックは GetCorrelatedTime が呼び出されるたびに相関付けを実行することを意味します。それ以外の場合は、最後に相関付けられた時刻から外挿することで、現在のクロック時刻を計算できます。
一部のクロックは、IMFRateControl インターフェイスを通じてレートの変更をサポートします。その場合、クロック時刻は 周波数 × 現在のレート の速さで進みます。クロックが IMFRateControl インターフェイスを公開しない場合、レートは常に 1.0 です。
プレゼンテーションクロックの場合、クロック時刻はプレゼンテーション時刻であり、常に IMFPresentationClock::Start で指定された開始時刻を基準とします。プレゼンテーション時刻は、IMFPresentationClock::GetTime を呼び出して取得することもできます。
クロックの継続性キーを取得します。(サポートされていません。)
| pdwContinuityKey | DWORD* | out | 継続性キーを受け取ります。 |
戻り値
このメソッドは HRESULT を返します。可能な値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 |
解説(Remarks)
継続性キーは、現在 Media Foundation ではサポートされていません。クロックは pdwContinuityKey パラメーターに値ゼロを返す必要があります。
クロックの現在の状態を取得します。
| dwReserved | DWORD | in | 予約されています。ゼロにする必要があります。 |
| peClockState | MFCLOCK_STATE* | out | クロックの状態を、MFCLOCK_STATE 列挙体のメンバーとして受け取ります。 |
戻り値
このメソッドは HRESULT を返します。可能な値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 |
クロックのプロパティを取得します。
| pClockProperties | MFCLOCK_PROPERTIES* | out | プロパティを受け取る MFCLOCK_PROPERTIES 構造体へのポインター。 |
戻り値
このメソッドは HRESULT を返します。可能な値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 |
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IMFClock "{2EB1E945-18B8-4139-9B1A-D5D584818530}" #usecom global IMFClock IID_IMFClock "{}" #comfunc global IMFClock_GetClockCharacteristics 3 var #comfunc global IMFClock_GetCorrelatedTime 4 int,var,var #comfunc global IMFClock_GetContinuityKey 5 var #comfunc global IMFClock_GetState 6 int,var #comfunc global IMFClock_GetProperties 7 var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。#define global IID_IMFClock "{2EB1E945-18B8-4139-9B1A-D5D584818530}" #usecom global IMFClock IID_IMFClock "{}" #comfunc global IMFClock_GetClockCharacteristics 3 sptr #comfunc global IMFClock_GetCorrelatedTime 4 int,sptr,sptr #comfunc global IMFClock_GetContinuityKey 5 sptr #comfunc global IMFClock_GetState 6 int,sptr #comfunc global IMFClock_GetProperties 7 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。