IMFMediaSinkPreroll
COM公式ドキュメント
メディアシンクが、プレゼンテーションクロックが開始される前にサンプルを受け取れるようにします。
解説(Remarks)
メディアシンクは、シームレスな再生と遷移をサポートするためにこのインターフェイスを実装できます。メディアシンクがこのインターフェイスを公開している場合、プレゼンテーションクロックが開始される前にサンプルを受け取ることができます。そのサンプルを事前に処理しておくことで、クロックが開始されたときに直ちにレンダリングを開始できます。プリロールは、再生中のグリッチを回避するのに役立ちます。
メディアシンクがプリロールをサポートする場合、そのメディアシンクの IMFMediaSink::GetCharacteristics メソッドは MEDIASINK_CAN_PREROLL フラグを返す必要があります。
メソッド 1
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
プレゼンテーションクロックが間もなく開始されることをメディアシンクに通知します。
| hnsUpcomingStartTime | LONGLONG | in | プレゼンテーションクロックの今後の開始時刻(100ナノ秒単位)。この時刻は、プレゼンテーションクロックが開始されるときに IMFPresentationClock::Start メソッドに渡される値と同じです。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
このメソッドが呼び出された後、メディアシンクは十分なプリロールデータが得られるまで、任意の数の MEStreamSinkRequestSample イベントを送信してサンプルを要求します。十分なプリロールデータが得られると、メディアシンクは MEStreamSinkPrerolled イベントを送信します。このイベントは、クライアントがプレゼンテーションクロックを開始できることを示します。
プリロール中、メディアシンクは受け取ったサンプルをレンダリングできるように準備できます。実際にサンプルをレンダリングするのは、クロックが開始されてからです。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IMFMediaSinkPreroll "{5DFD4B2A-7674-4110-A4E6-8A68FD5F3688}"
#usecom global IMFMediaSinkPreroll IID_IMFMediaSinkPreroll "{}"
#comfunc global IMFMediaSinkPreroll_NotifyPreroll 3 int64
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。