Win32 API 日本語リファレンス
ホームMedia.MediaFoundation › IMFClock

IMFClock

COM
IID2eb1e945-18b8-4139-9b1a-d5d584818530継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

Microsoft Media Foundation において、クロックからタイミング情報を提供します。

解説(Remarks)

IMFClock インターフェイスは、あらゆる種類のクロックに適用されます。プレゼンテーションクロックは、IMFClock に加えて IMFPresentationClock インターフェイスを公開します。

メソッド 5

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 3 HRESULT GetClockCharacteristics(DWORD* pdwCharacteristics)

クロックの特性を取得します。

pdwCharacteristicsDWORD*outクロックの特性を示す MFCLOCK_CHARACTERISTICS_FLAGS 列挙体の値のビットごとの OR を受け取ります。

戻り値

このメソッドは HRESULT を返します。可能な値には、次の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。
vtbl 4 HRESULT GetCorrelatedTime(DWORD dwReserved, LONGLONG* pllClockTime, LONGLONG* phnsSystemTime)

システム時刻と相関付けられた最後のクロック時刻を取得します。

dwReservedDWORDin予約されています。ゼロにする必要があります。
pllClockTimeLONGLONG*outクロックの周波数を単位とした、最後にわかっているクロック時刻を受け取ります。
phnsSystemTimeLONGLONG*outpllClockTime で返されるクロック時刻に対応するシステム時刻を、100 ナノ秒単位で受け取ります。

戻り値

このメソッドは HRESULT を返します。可能な値には、次の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。
MF_E_CLOCK_NO_TIME_SOURCE
クロックにタイムソースがありません。

解説(Remarks)

クロックは、一定の間隔ごとに、内部のクロックティックをシステム時刻と相関付けます。(システム時刻は、高分解能パフォーマンスカウンターによって返される時刻です。)このメソッドは次の情報を返します。

クロック時刻は pllClockTime パラメーターで返され、クロックの周波数を単位として表されます。クロックの IMFClock::GetClockCharacteristics メソッドが MFCLOCK_CHARACTERISTICS_FLAG_FREQUENCY_10MHZ フラグを返す場合、クロックの周波数は 10 MHz です(各クロックティックは 100 ナノ秒です)。それ以外の場合は、IMFClock::GetProperties を呼び出すことでクロックの周波数を取得できます。周波数は、そのメソッドが返す MFCLOCK_PROPERTIES 構造体の qwClockFrequency メンバーで与えられます。

システム時刻は phnsSystemTime パラメーターで返され、常に 100 ナノ秒単位で表されます。

クロックがクロック時刻をシステム時刻と相関付ける頻度を確認するには、GetProperties を呼び出します。相関付けの間隔は、MFCLOCK_PROPERTIES 構造体の qwCorrelationRate メンバーで与えられます。qwCorrelationRate がゼロの場合、クロックは GetCorrelatedTime が呼び出されるたびに相関付けを実行することを意味します。それ以外の場合は、最後に相関付けられた時刻から外挿することで、現在のクロック時刻を計算できます。

一部のクロックは、IMFRateControl インターフェイスを通じてレートの変更をサポートします。その場合、クロック時刻は 周波数 × 現在のレート の速さで進みます。クロックが IMFRateControl インターフェイスを公開しない場合、レートは常に 1.0 です。

プレゼンテーションクロックの場合、クロック時刻はプレゼンテーション時刻であり、常に IMFPresentationClock::Start で指定された開始時刻を基準とします。プレゼンテーション時刻は、IMFPresentationClock::GetTime を呼び出して取得することもできます。

vtbl 5 HRESULT GetContinuityKey(DWORD* pdwContinuityKey)

クロックの継続性キーを取得します。(サポートされていません。)

pdwContinuityKeyDWORD*out継続性キーを受け取ります。

戻り値

このメソッドは HRESULT を返します。可能な値には、次の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。

解説(Remarks)

継続性キーは、現在 Media Foundation ではサポートされていません。クロックは pdwContinuityKey パラメーターに値ゼロを返す必要があります。

vtbl 6 HRESULT GetState(DWORD dwReserved, MFCLOCK_STATE* peClockState)

クロックの現在の状態を取得します。

dwReservedDWORDin予約されています。ゼロにする必要があります。
peClockStateMFCLOCK_STATE*outクロックの状態を、MFCLOCK_STATE 列挙体のメンバーとして受け取ります。

戻り値

このメソッドは HRESULT を返します。可能な値には、次の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。
vtbl 7 HRESULT GetProperties(MFCLOCK_PROPERTIES* pClockProperties)

クロックのプロパティを取得します。

pClockPropertiesMFCLOCK_PROPERTIES*outプロパティを受け取る MFCLOCK_PROPERTIES 構造体へのポインター。

戻り値

このメソッドは HRESULT を返します。可能な値には、次の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
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 方式にも切替可。