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

IMFMediaEngine

COM
IID98a1b0bb-03eb-4935-ae7c-93c1fa0e1c93継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

アプリケーションがオーディオファイルやビデオファイルを再生できるようにします。

解説(Remarks)

Media Engine がこのインターフェイスを実装します。Media Engine のインスタンスを作成するには、IMFMediaEngineClassFactory::CreateInstance を呼び出します。

このインターフェイスは IMFMediaEngineEx によって拡張されています。

メソッド 42

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

vtbl 3 HRESULT GetError(IMFMediaError** ppError)

最新のエラー状態を取得します。

ppErrorIMFMediaError**outIMFMediaError インターフェイスへのポインター、または NULL のいずれかを受け取ります。値が NULL 以外の場合、呼び出し側はインターフェイスを解放する必要があります。

戻り値

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

このメソッドは、メディアソースの読み込みに起因して発生した最後のエラー状態(存在する場合)を返します。エラーが発生していない場合、ppErrorNULL を受け取ります。

このメソッドは、HTML5 の HTMLMediaElement インターフェイスの error 属性に対応します。

vtbl 4 HRESULT SetErrorCode(MF_MEDIA_ENGINE_ERR error)

現在のエラーコードを設定します。

errorMF_MEDIA_ENGINE_ERRinMF_MEDIA_ENGINE_ERR 値としてのエラーコード。

戻り値

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

vtbl 5 HRESULT SetSourceElements(IMFMediaEngineSrcElements* pSrcElements)

メディアソースのリストを設定します。

pSrcElementsIMFMediaEngineSrcElements*inIMFMediaEngineSrcElements インターフェイスへのポインター。呼び出し側はこのインターフェイスを実装する必要があります。

戻り値

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

このメソッドは、HTML5 でメディア要素に source 要素のリストを追加する操作に対応します。

Media Engine は、pSrcElements リスト内の各項目を、正常に読み込めるものが見つかるまで順に読み込もうとします。このメソッドを呼び出した後、アプリケーションはいつでも IMFMediaEngineSrcElements インターフェイスを使用してリストを更新できます。リストを再読み込みするには、IMFMediaEngine::Load を呼び出します。

このメソッドは非同期に完了します。操作が開始されると、Media Engine は MF_MEDIA_ENGINE_EVENT_LOADSTART イベントを送信します。Load 操作中にエラーが発生しなければ、以下を含むいくつかのイベントが生成されます。

Media Engine が URL を読み込めない場合は、MF_MEDIA_ENGINE_EVENT_ERROR イベントを送信します。

Media Engine でのイベント処理の詳細については、IMFMediaEngineNotify を参照してください。

アプリケーションが IMFMediaEngine::SetSource も呼び出した場合、SetSource に渡された URL が SetSourceElements に指定されたリストよりも優先されます。

vtbl 6 HRESULT SetSource(LPWSTR pUrl)

メディアリソースの URL を設定します。

pUrlLPWSTRinメディアリソースの URL。

戻り値

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

このメソッドは、HTML5 の HTMLMediaElement インターフェイスの src 属性を設定する操作に対応します。

このメソッドで指定した URL は、IMFMediaEngine::SetSourceElements メソッドで指定されたメディアリソースよりも優先されます。URL を読み込むには、IMFMediaEngine::Load を呼び出します。

このメソッドは URL を非同期に読み込みます。操作が開始されると、Media Engine は MF_MEDIA_ENGINE_EVENT_LOADSTART イベントを送信します。Load 操作中にエラーが発生しなければ、以下を含むいくつかのイベントが生成されます。

Media Engine が URL を読み込めない場合、Media Engine は MF_MEDIA_ENGINE_EVENT_ERROR イベントを送信します。

Media Engine でのイベント処理の詳細については、IMFMediaEngineNotify を参照してください。

vtbl 7 HRESULT GetCurrentSource(LPWSTR* ppUrl)

現在のメディアリソースの URL を取得します。メディアリソースが存在しない場合は空文字列を取得します。

ppUrlLPWSTR*out現在のメディアリソースの URL を含む BSTR を受け取ります。メディアリソースが存在しない場合、ppUrl は空文字列を受け取ります。呼び出し側は SysFreeString を呼び出して BSTR を解放する必要があります。

戻り値

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

このメソッドは、HTML5 の HTMLMediaElement インターフェイスの currentSrc 属性に対応します。

初期状態では、現在のメディアリソースは空です。Media Engine がリソース選択アルゴリズムを実行すると更新されます。

vtbl 8 WORD GetNetworkState()

Media Engine の現在のネットワーク状態を取得します。

戻り値

MF_MEDIA_ENGINE_NETWORK 列挙値を返します。

解説(Remarks)

このメソッドは、HTML5 の HTMLMediaElement インターフェイスの networkState 属性に対応します。

vtbl 9 MF_MEDIA_ENGINE_PRELOAD GetPreload()

プリロードフラグを取得します。

戻り値

MF_MEDIA_ENGINE_PRELOAD 列挙値を返します。

解説(Remarks)

このメソッドは、HTML5 の HTMLMediaElement インターフェイスの preload 属性に対応します。この値は、メディアリソースをプリロードするかどうかについてユーザーエージェントに与えるヒントです。

vtbl 10 HRESULT SetPreload(MF_MEDIA_ENGINE_PRELOAD Preload)

プリロードフラグを設定します。

PreloadMF_MEDIA_ENGINE_PRELOADinプリロードフラグに相当する MF_MEDIA_ENGINE_PRELOAD 値。

戻り値

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

このメソッドは、HTML5 の HTMLMediaElement インターフェイスの preload 属性を設定する操作に対応します。この値は、メディアリソースをプリロードするかどうかについてユーザーエージェントに与えるヒントです。

vtbl 11 HRESULT GetBuffered(IMFMediaTimeRange** ppBuffered)

Media Engine がどれだけのリソースデータをバッファリングしたかを照会します。

ppBufferedIMFMediaTimeRange**outIMFMediaTimeRange インターフェイスへのポインターを受け取ります。呼び出し側はインターフェイスを解放する必要があります。

戻り値

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

このメソッドは、HTML5 の HTMLMediaElement インターフェイスの buffered 属性に対応します。

返される IMFMediaTimeRange インターフェイスは、時間範囲のリストを表します。これらの時間範囲は、メディアリソースのどの部分がダウンロード済みであるかを示します。時間範囲のリストは空の場合があります。

vtbl 12 HRESULT Load()

現在のメディアソースを読み込みます。

戻り値

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

このメソッドの主な目的は、ソース要素のリストを更新した後に再読み込みすることです。詳細については、SetSourceElements を参照してください。それ以外の場合、このメソッドを呼び出す必要は通常ありません。新しいメディアソースを読み込むには、IMFMediaEngine::SetSource または IMFMediaEngine::SetSourceElements を呼び出します。

Load メソッドは、Media Engine のメディアリソース読み込みアルゴリズムを明示的に呼び出します。このメソッドを呼び出す前に、IMFMediaEngine::SetSource または IMFMediaEngine::SetSourceElements を呼び出してメディアリソースを設定する必要があります。

このメソッドは非同期に完了します。Load 操作が開始されると、Media Engine は MF_MEDIA_ENGINE_EVENT_LOADSTART イベントを送信します。Load 操作中にエラーが発生しなければ、以下を含むいくつかのイベントが生成されます。

Media Engine がファイルを読み込めない場合、Media Engine は MF_MEDIA_ENGINE_EVENT_ERROR イベントを送信します。

Media Engine でのイベント処理の詳細については、IMFMediaEngineNotify を参照してください。

このメソッドは、HTML5 の HTMLMediaElement インターフェイスの load メソッドに対応します。

vtbl 13 HRESULT CanPlayType(LPWSTR type, MF_MEDIA_ENGINE_CANPLAY* pAnswer)

Media Engine が指定された種類のメディアリソースを再生できる可能性の高さを照会します。

typeLPWSTRinRFC 4281 で定義されている、任意の codecs パラメーターを含む MIME タイプを含む文字列。
pAnswerMF_MEDIA_ENGINE_CANPLAY*outMF_MEDIA_ENGINE_CANPLAY 列挙値を受け取ります。

戻り値

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

このメソッドは、HTML5 の HTMLMediaElement インターフェイスの canPlayType 属性に対応します。

canPlayType 属性は次の値を定義しています。

説明
"" (空文字列) ユーザーエージェントがそのリソースを再生できないか、リソースの種類が "application/octet-stream" です。
"probably" ユーザーエージェントがそのリソースをおそらく再生できます。
"maybe" 上記のいずれの値にも当てはまりません。

"probably" という値が使用されるのは、メディアリソースの MIME タイプが一般にリソースの完全な記述にはならないためです。たとえば "video/mp4" はビデオを含む MP4 ファイルを指定しますが、コーデックは記述しません。任意の codecs パラメーターを付けても、MIME タイプでは実際の符号化ビットレートなど一部の情報が省略されます。したがって、実際のメディアリソースを開くまで再生可能かどうかを確実に判断することは通常不可能です。

vtbl 14 WORD GetReadyState()

現在のメディアリソースをレンダリングできるかどうかを示すレディ状態を取得します。

戻り値

MF_MEDIA_ENGINE_READY 列挙値を返します。

解説(Remarks)

このメソッドは、HTML5 の HTMLMediaElement インターフェイスの readyState 属性に対応します。

vtbl 15 BOOL IsSeeking()

Media Engine が現在、新しい再生位置へのシークを行っているかどうかを照会します。

戻り値

Media Engine がシーク中の場合は TRUE を、それ以外の場合は FALSE を返します。

解説(Remarks)

このメソッドは、HTML5 の HTMLMediaElement インターフェイスの seeking 属性に対応します。

vtbl 16 DOUBLE GetCurrentTime()

現在の再生位置を取得します。(IMFMediaEngine.GetCurrentTime)

戻り値

再生位置を秒単位で返します。

解説(Remarks)

このメソッドは、HTML5 の HTMLMediaElement インターフェイスの currentTime 属性に対応します。

Pause を呼び出した後は、GetCurrentTime が返す時間が正確でない場合があることに注意してください。メディアエディターなど、フレーム単位で正確な位置の値を必要とするアプリは、Pause を呼び出した直後、GetCurrentTime を呼び出す前に FrameStep を呼び出す必要があります。

vtbl 17 HRESULT SetCurrentTime(DOUBLE seekTime)

新しい再生位置へシークします。

seekTimeDOUBLEin新しい再生位置(秒単位)。

戻り値

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

このメソッドは、HTML5 の HTMLMediaElement インターフェイスの currentTime 属性を設定する操作に対応します。

このメソッドは非同期に完了します。シーク操作が開始されると、Media Engine は MF_MEDIA_ENGINE_EVENT_SEEKING イベントを送信します。シーク操作が完了すると、Media Engine は MF_MEDIA_ENGINE_EVENT_SEEKED イベントを送信します。IMFMediaEventNotify::EventNotify を参照してください。

vtbl 18 DOUBLE GetStartTime()

初期再生位置を取得します。

戻り値

初期再生位置を秒単位で返します。

解説(Remarks)

このメソッドは、HTML5 の HTMLMediaElement インターフェイスの initialTime 属性に対応します。

vtbl 19 DOUBLE GetDuration()

メディアリソースの再生時間を取得します。

戻り値

再生時間を秒単位で返します。メディアデータが利用できない場合、このメソッドは非数(NaN)を返します。再生時間が無制限の場合、このメソッドは無限大の値を返します。

解説(Remarks)

このメソッドは、HTML5 の HTMLMediaElement インターフェイスの duration 属性に対応します。

再生時間が変化すると、Media Engine は MF_MEDIA_ENGINE_EVENT_DURATIONCHANGE イベントを送信します。IMFMediaEngineNotify::EventNotify を参照してください。

vtbl 20 BOOL IsPaused()

現在、再生が一時停止しているかどうかを照会します。

戻り値

再生が一時停止している場合は TRUE を、それ以外の場合は FALSE を返します。

解説(Remarks)

このメソッドは、HTML5 の HTMLMediaElement インターフェイスの paused 属性に対応します。

vtbl 21 DOUBLE GetDefaultPlaybackRate()

既定の再生速度を取得します。

戻り値

既定の再生速度を、通常(1×)再生に対する倍率として返します。負の値は逆再生を示します。

解説(Remarks)

このメソッドは、HTML5 の HTMLMediaElement インターフェイスの defaultPlaybackRate 属性を取得する操作に対応します。

既定の再生速度は、次回の IMFMediaEngine::Play メソッド呼び出しで使用されます。現在の再生速度を変更するには、IMFMediaEngine::SetPlaybackRate を呼び出します。

vtbl 22 HRESULT SetDefaultPlaybackRate(DOUBLE Rate)

既定の再生速度を設定します。

RateDOUBLEin既定の再生速度を、通常(1×)再生に対する倍率で指定します。負の値は逆再生を示します。

戻り値

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

このメソッドは、HTML5 の HTMLMediaElement インターフェイスの defaultPlaybackRate 属性を設定する操作に対応します。

vtbl 23 DOUBLE GetPlaybackRate()

現在の再生速度を取得します。(IMFMediaEngine.GetPlaybackRate)

戻り値

再生速度を、通常(1×)再生に対する倍率として返します。負の値は逆再生を示します。

解説(Remarks)

このメソッドは、HTML5 の HTMLMediaElement インターフェイスの playbackRate 属性を取得する操作に対応します。

vtbl 24 HRESULT SetPlaybackRate(DOUBLE Rate)

現在の再生速度を設定します。

RateDOUBLEin再生速度を、通常(1×)再生に対する倍率で指定します。負の値は逆再生を示します。

戻り値

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

このメソッドは、HTML5 の HTMLMediaElement インターフェイスの playbackRate 属性を設定する操作に対応します。

vtbl 25 HRESULT GetPlayed(IMFMediaTimeRange** ppPlayed)

レンダリング済みの時間範囲を取得します。

ppPlayedIMFMediaTimeRange**outIMFMediaTimeRange インターフェイスへのポインターを受け取ります。呼び出し側はインターフェイスを解放する必要があります。

戻り値

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

このメソッドは、HTML5 の HTMLMediaElement インターフェイスの played 属性に対応します。

vtbl 26 HRESULT GetSeekable(IMFMediaTimeRange** ppSeekable)

Media Engine が現在シーク可能な時間範囲を取得します。

ppSeekableIMFMediaTimeRange**outIMFMediaTimeRange インターフェイスへのポインターを受け取ります。呼び出し側はインターフェイスを解放する必要があります。

戻り値

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

このメソッドは、HTML5 の HTMLMediaElement インターフェイスの seekable 属性に対応します。

メディアソースがシークをサポートしているかどうかを確認するには、IMFMediaEngineEx::GetResourceCharacteristics を呼び出します。

vtbl 27 BOOL IsEnded()

再生が終了したかどうかを照会します。

戻り値

再生方向が順方向で、かつ再生がメディアリソースの末尾に到達している場合は TRUE を返します。それ以外の場合は FALSE を返します。

解説(Remarks)

このメソッドは、HTML5 の HTMLMediaElement インターフェイスの ended 属性に対応します。

vtbl 28 BOOL GetAutoPlay()

Media Engine が自動的に再生を開始するかどうかを照会します。

戻り値

Media Engine が自動的に再生を開始する場合は TRUE を、それ以外の場合は FALSE を返します。

解説(Remarks)

このメソッドは、HTML5 の HTMLMediaElement インターフェイスの autoplay 属性に対応します。

このメソッドが TRUE を返す場合、IMFMediaEngine::Load メソッドの完了後に再生が自動的に開始されます。それ以外の場合、再生はアプリケーションが IMFMediaEngine::Play を呼び出したときに開始されます。

vtbl 29 HRESULT SetAutoPlay(BOOL AutoPlay)

Media Engine が自動的に再生を開始するかどうかを指定します。

AutoPlayBOOLinTRUE の場合、Media Engine はメディアソースの読み込み後に自動的に再生を開始します。それ以外の場合、再生はアプリケーションが IMFMediaEngine::Play を呼び出すまで開始されません。

戻り値

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

このメソッドは、HTML5 の HTMLMediaElement インターフェイスの autoplay 属性を設定する操作に対応します。

vtbl 30 BOOL GetLoop()

Media Engine が再生をループするかどうかを照会します。

戻り値

ループが有効な場合は TRUE を、それ以外の場合は FALSE を返します。

解説(Remarks)

このメソッドは、HTML5 の HTMLMediaElement インターフェイスの loop 属性を取得する操作に対応します。

ループが有効な場合、再生が末尾に到達すると Media Engine はコンテンツの先頭にシークします。

vtbl 31 HRESULT SetLoop(BOOL Loop)

Media Engine が再生をループするかどうかを指定します。

LoopBOOLinループを有効にするには TRUE を、無効にするには FALSE を指定します。

戻り値

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

LoopTRUE の場合、再生はソースの末尾に到達すると先頭に戻ってループします。

このメソッドは、HTML5 の HTMLMediaElement インターフェイスの loop 属性を設定する操作に対応します。

vtbl 32 HRESULT Play()

再生を開始します。(IMFMediaEngine.Play)

戻り値

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

このメソッドは、HTML5 の HTMLMediaElement インターフェイスの play メソッドに対応します。

このメソッドは非同期に完了します。操作が開始されると、Media Engine は MF_MEDIA_ENGINE_EVENT_PLAY イベントを送信します。再生が進行中になると、Media Engine は MF_MEDIA_ENGINE_EVENT_PLAYING イベントを送信します。IMFMediaEventNotify::EventNotify を参照してください。

vtbl 33 HRESULT Pause()

再生を一時停止します。(IMFMediaEngine.Pause)

戻り値

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

このメソッドは、HTML5 の HTMLMediaElement インターフェイスの pause メソッドに対応します。

このメソッドは非同期に完了します。一時停止状態への遷移が完了すると、Media Engine は MF_MEDIA_ENGINE_EVENT_PAUSE イベントを送信します。IMFMediaEventNotify::EventNotify を参照してください。

Pause を呼び出した後は、GetCurrentTime が返す時間が正確でない場合があることに注意してください。メディアエディターなど、フレーム単位で正確な位置の値を必要とするアプリは、Pause を呼び出した直後、GetCurrentTime を呼び出す前に FrameStep を呼び出す必要があります。

vtbl 34 BOOL GetMuted()

オーディオがミュートされているかどうかを照会します。(IMFMediaEngine.GetMuted)

戻り値

オーディオがミュートされている場合は TRUE を、それ以外の場合は FALSE を返します。

vtbl 35 HRESULT SetMuted(BOOL Muted)

オーディオをミュートまたはミュート解除します。(IMFMediaEngine.SetMuted)

MutedBOOLinオーディオをミュートするには TRUE を、ミュート解除するには FALSE を指定します。

戻り値

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

vtbl 36 DOUBLE GetVolume()

オーディオの音量レベルを取得します。

戻り値

音量レベルを返します。音量は減衰レベルとして表され、0.0 は無音を、1.0 は最大音量(減衰なし)を示します。

vtbl 37 HRESULT SetVolume(DOUBLE Volume)

オーディオの音量レベルを設定します。

VolumeDOUBLEin音量レベル。音量は減衰レベルとして表され、0.0 は無音を、1.0 は最大音量(減衰なし)を示します。

戻り値

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

オーディオバランスが変化すると、Media Engine は MF_MEDIA_ENGINE_EVENT_VOLUMECHANGE イベントを送信します。IMFMediaEventNotify::EventNotify を参照してください。

vtbl 38 BOOL HasVideo()

現在のメディアリソースがビデオストリームを含むかどうかを照会します。

戻り値

現在のメディアリソースがビデオストリームを含む場合は TRUE を返します。メディアリソースが存在しないか、メディアリソースがビデオストリームを含まない場合は FALSE を返します。

vtbl 39 BOOL HasAudio()

現在のメディアリソースがオーディオストリームを含むかどうかを照会します。

戻り値

現在のメディアリソースがオーディオストリームを含む場合は TRUE を返します。メディアリソースが存在しないか、メディアリソースがオーディオストリームを含まない場合は FALSE を返します。

vtbl 40 HRESULT GetNativeVideoSize(DWORD* cx, DWORD* cy)

アスペクト比を考慮して調整したビデオフレームのサイズを取得します。

cxDWORD*outoptional幅をピクセル単位で受け取ります。
cyDWORD*outoptional高さをピクセル単位で受け取ります。

戻り値

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

このメソッドは、正しいピクチャアスペクト比に合わせて調整します。 たとえば、エンコードされたフレームが 720 × 420 でピクチャアスペクト比が 4:3 の場合、このメソッドは 640 × 480 ピクセルに相当するサイズを返します。

vtbl 41 HRESULT GetVideoAspectRatio(DWORD* cx, DWORD* cy)

ビデオストリームのピクチャアスペクト比を取得します。

cxDWORD*outoptionalアスペクト比の x 成分を受け取ります。
cyDWORD*outoptionalアスペクト比の y 成分を受け取ります。

戻り値

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

Media Engine は、ピクセルアスペクト比を自動的に 1:1(正方形ピクセル)に変換します。

vtbl 42 HRESULT Shutdown()

Media Engine をシャットダウンし、使用しているリソースを解放します。

戻り値

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

vtbl 43 HRESULT TransferVideoFrame(IUnknown* pDstSurf, MFVideoNormalizedRect* pSrc, RECT* pDst, MFARGB* pBorderClr)

現在のビデオフレームを DXGI サーフェスまたは WIC ビットマップにコピーします。

pDstSurfIUnknown*inコピー先サーフェスの IUnknown インターフェイスへのポインター。
pSrcMFVideoNormalizedRect*inoptionalコピー元の矩形を指定する MFVideoNormalizedRect 構造体へのポインター。
pDstRECT*inコピー先の矩形を指定する RECT 構造体へのポインター。
pBorderClrMFARGB*inoptional境界色を指定する MFARGB 構造体へのポインター。

戻り値

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

フレームサーバーモードでは、このメソッドを呼び出してビデオフレームを DXGI または WIC サーフェスに転送(blit)します。アプリケーションは、Media Engine がビデオリソースを読み込んだ後であればいつでもこのメソッドを呼び出せます。ただし通常、アプリケーションはまず IMFMediaEngine::OnVideoStreamTick を呼び出して、新しいフレームが利用可能かどうかを判断します。OnVideoStreamTickS_OK を返した場合、アプリケーションは続いて TransferVideoFrame を呼び出します。

Media Engine は、ビデオをコピー先矩形に収まるようにスケーリングおよびレターボックス処理します。レターボックス領域は境界色で塗りつぶされます。

保護されたコンテンツの場合は、このメソッドの代わりに IMFMediaEngineProtectedContent::TransferVideoFrame メソッドを呼び出します。

vtbl 44 HRESULT OnVideoStreamTick(LONGLONG* pPts)

新しいビデオフレームの準備ができているかどうかを Media Engine に照会します。

pPtsLONGLONG*out新しいフレームの準備ができている場合、そのフレームのプレゼンテーション時刻を受け取ります。

戻り値

このメソッドは次のいずれかの値を返します。

戻りコード 説明
S_FALSE
メソッドは成功しましたが、Media Engine に新しいフレームはありません。
S_OK
新しいビデオフレームが表示可能な状態になっています。

解説(Remarks)

フレームサーバーモードでは、アプリケーションは表示デバイスで垂直帰線が発生するたびにこのメソッドを呼び出す必要があります。メソッドが S_OK を返した場合は、IMFMediaEngine::TransferVideoFrame を呼び出してフレームをレンダーターゲットに転送(blit)します。メソッドが S_FALSE を返した場合は、次の垂直帰線を待ってから再度このメソッドを呼び出します。

レンダリングモードまたはオーディオのみモードでは、このメソッドを呼び出さないでください。

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_IMFMediaEngine "{98A1B0BB-03EB-4935-AE7C-93C1FA0E1C93}"
#usecom global IMFMediaEngine IID_IMFMediaEngine "{}"
#comfunc global IMFMediaEngine_GetError                3 sptr
#comfunc global IMFMediaEngine_SetErrorCode            4 int
#comfunc global IMFMediaEngine_SetSourceElements       5 sptr
#comfunc global IMFMediaEngine_SetSource               6 wstr
#comfunc global IMFMediaEngine_GetCurrentSource        7 var
#comfunc global IMFMediaEngine_GetNetworkState         8
#comfunc global IMFMediaEngine_GetPreload              9
#comfunc global IMFMediaEngine_SetPreload              10 int
#comfunc global IMFMediaEngine_GetBuffered             11 sptr
#comfunc global IMFMediaEngine_Load                    12
#comfunc global IMFMediaEngine_CanPlayType             13 wstr,var
#comfunc global IMFMediaEngine_GetReadyState           14
#comfunc global IMFMediaEngine_IsSeeking               15
#comfunc global IMFMediaEngine_GetCurrentTime          16
#comfunc global IMFMediaEngine_SetCurrentTime          17 double
#comfunc global IMFMediaEngine_GetStartTime            18
#comfunc global IMFMediaEngine_GetDuration             19
#comfunc global IMFMediaEngine_IsPaused                20
#comfunc global IMFMediaEngine_GetDefaultPlaybackRate  21
#comfunc global IMFMediaEngine_SetDefaultPlaybackRate  22 double
#comfunc global IMFMediaEngine_GetPlaybackRate         23
#comfunc global IMFMediaEngine_SetPlaybackRate         24 double
#comfunc global IMFMediaEngine_GetPlayed               25 sptr
#comfunc global IMFMediaEngine_GetSeekable             26 sptr
#comfunc global IMFMediaEngine_IsEnded                 27
#comfunc global IMFMediaEngine_GetAutoPlay             28
#comfunc global IMFMediaEngine_SetAutoPlay             29 int
#comfunc global IMFMediaEngine_GetLoop                 30
#comfunc global IMFMediaEngine_SetLoop                 31 int
#comfunc global IMFMediaEngine_Play                    32
#comfunc global IMFMediaEngine_Pause                   33
#comfunc global IMFMediaEngine_GetMuted                34
#comfunc global IMFMediaEngine_SetMuted                35 int
#comfunc global IMFMediaEngine_GetVolume               36
#comfunc global IMFMediaEngine_SetVolume               37 double
#comfunc global IMFMediaEngine_HasVideo                38
#comfunc global IMFMediaEngine_HasAudio                39
#comfunc global IMFMediaEngine_GetNativeVideoSize      40 var,var
#comfunc global IMFMediaEngine_GetVideoAspectRatio     41 var,var
#comfunc global IMFMediaEngine_Shutdown                42
#comfunc global IMFMediaEngine_TransferVideoFrame      43 sptr,var,var,var
#comfunc global IMFMediaEngine_OnVideoStreamTick       44 var
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。