IMFMediaSink::SetPresentationClock メソッド (mfidl.h)
メディア シンクのプレゼンテーション クロックを設定します。
構文
HRESULT SetPresentationClock(
[in] IMFPresentationClock *pPresentationClock
);
パラメーター
[in] pPresentationClock
プレゼンテーション クロックの IMFPresentationClock インターフェイスへのポインター、または NULL。 値が NULL の場合、メディア シンクは、以前に設定されたプレゼンテーション クロック (存在する場合) のリッスンを停止します。
戻り値
このメソッドは HRESULT を返します。 有効な値を次の表に示しますが、これ以外にもあります。
リターン コード | 説明 |
---|---|
|
メソッドが成功しました。 |
|
プレゼンテーション クロックにタイム ソースがありません。 プレゼンテーション クロックで SetTimeSource を呼び出します。 |
|
メディア シンクの Shutdown メソッドが呼び出されました。 |
解説
ストリーミング中に、メディア シンクはレートとプレゼンテーション クロックの照合を試みます。 理想的には、メディア シンクは、プレゼンテーション クロックに従って正しいタイミングでサンプルを提示し、後ろに落ちないようにします。 レートレス メディア シンクは、可能な限り迅速にサンプルを消費し、クロックを無視するため、このルールの例外です。 シンクがレートレスの場合、 IMFMediaSink::GetCharacteristics メソッドは MEDIASINK_RATELESS フラグを返します。
プレゼンテーション クロックにはタイム ソースが必要です。 このメソッドを呼び出す前に、プレゼンテーション クロックで IMFPresentationClock::SetTimeSource を呼び出して、プレゼンテーションのタイム ソースを設定します。 一部のメディア シンクでは、タイム ソースが提供されます。そのため、メディア シンクは、独自のプレゼンテーション クロックのタイム ソースである可能性があります。 ただし、タイム ソースを提供するオブジェクトに関係なく、メディア シンクは pPresentationClock で指定されたクロックとレートの照合を試みる必要があります。 メディア シンクが外部タイム ソースとレートを一致できない場合、メディア シンクの IMFMediaSink::GetCharacteristics メソッドはMEDIASINK_CANNOT_MATCH_CLOCK フラグを取得します。 この場合、 SetPresentationClock は引き続き成功しますが、結果は最適ではありません。 シンクは、プレゼンテーション クロックとレートを一致させるのに十分な速さでサンプルをレンダリングできない場合があります。
pPresentationClock が NULL 以外の場合、メディア シンクは、プレゼンテーション クロックで IMFPresentationClock::AddClockStateSink を呼び出すことによって、クロック状態通知に登録する必要があります。 メソッドが新しいプレゼンテーション クロックで再度呼び出される場合、または pPresentationClock が NULL の場合、メディア シンクは IMFPresentationClock::RemoveClockStateSink を呼び出して、前のクロックから自身を登録解除する必要があります。
すべてのメディア シンクでこのメソッドがサポートされている必要があります。
要件
サポートされている最小のクライアント | Windows Vista [デスクトップ アプリのみ | UWP アプリ] |
サポートされている最小のサーバー | Windows Server 2008 [デスクトップ アプリ | UWP アプリ] |
対象プラットフォーム | Windows |
ヘッダー | mfidl.h |
Library | Mfuuid.lib |