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

IWMSyncReader2

COM
IIDfaed3d21-1b6b-4af7-8cb6-3e189bbc187b継承元IWMSyncReader自前メソッド開始 vtbl24

公式ドキュメント

IWMSyncReader2 インターフェイスは、同期リーダー向けの高度な機能を提供します。

メソッド 6

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

vtbl 24 HRESULT SetRangeByTimecode(WORD wStreamNum, WMT_TIMECODE_EXTENSION_DATA* pStart, WMT_TIMECODE_EXTENSION_DATA* pEnd)

SetRangeByTimecode メソッドは、ファイルの再生について、SMPTE タイムコードに基づいて開始時刻と終了時刻を設定します。

wStreamNumWORDinストリーム番号を格納する WORD
pStartWMT_TIMECODE_EXTENSION_DATA*in開始タイムコードを格納する WMT_TIMECODE_EXTENSION_DATA 構造体へのポインター。
pEndWMT_TIMECODE_EXTENSION_DATA*in終了タイムコードを格納する WMT_TIMECODE_EXTENSION_DATA 構造体へのポインター。

戻り値

メソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。

解説(Remarks)

メソッドが成功するには、ファイルが SMPTE タイムコードでインデックス付けされている必要があります。

呼び出しが成功すると、すべてのストリームがプレゼンテーション時刻に基づいて同じ位置に同期されます。

vtbl 25 HRESULT SetRangeByFrameEx(WORD wStreamNum, ULONGLONG qwFrameNumber, LONGLONG cFramesToRead, ULONGLONG* pcnsStartTime)

SetRangeByFrameEx メソッドは、開始ビデオフレーム番号と読み取るフレーム数で指定されたファイルの一部を読み取るように、同期リーダーを構成します。また、このメソッドは要求されたフレーム番号のプレゼンテーション時刻を取得します。

wStreamNumWORDinストリーム番号。
qwFrameNumberULONGLONGin再生を開始するフレーム番号。ファイルの最初のフレームは番号 1 です。
cFramesToReadLONGLONGin読み取るフレーム数。ファイルの末尾まで再生を続けるには 0 を渡します。
pcnsStartTimeULONGLONG*out100 ナノ秒単位の開始時刻。

戻り値

メソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。

解説(Remarks)

要求されたフレーム番号のプレゼンテーション時刻を取得することで、デルタフレームへのシークによって生じる問題を回避できます。同期リーダーはキーフレームの境界からサンプルの配信を開始します。対象フレームのプレゼンテーション時刻に到達するまで、フレームを無視できます。

ファイルはフレームインデックス付けされている必要があります。呼び出しが成功すると、すべてのストリームが時刻に基づいて同じ位置に同期されます。

vtbl 26 HRESULT SetAllocateForOutput(DWORD dwOutputNum, IWMReaderAllocatorEx* pAllocator)

SetAllocateForOutput メソッドは、出力サンプルを割り当てるためのサンプル割り当てコールバックインターフェイスを設定します。

dwOutputNumDWORDin出力番号を格納する DWORD
pAllocatorIWMReaderAllocatorEx*inアプリケーションで実装された IWMReaderAllocatorEx インターフェイスへのポインター。

戻り値

メソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。

vtbl 27 HRESULT GetAllocateForOutput(DWORD dwOutputNum, IWMReaderAllocatorEx** ppAllocator)

GetAllocateForOutput メソッドは、出力サンプルを割り当てるためのインターフェイスを取得します。

dwOutputNumDWORDin出力番号を格納する DWORD
ppAllocatorIWMReaderAllocatorEx**outIWMReaderAllocatorEx インターフェイスへのポインターへのポインター。

戻り値

メソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。

vtbl 28 HRESULT SetAllocateForStream(WORD wStreamNum, IWMReaderAllocatorEx* pAllocator)

SetAllocateForStream メソッドは、ストリームサンプルを割り当てるためのサンプル割り当てコールバックインターフェイスを設定します。

wStreamNumWORDinストリーム番号を格納する WORD
pAllocatorIWMReaderAllocatorEx*inアプリケーションで実装された IWMReaderAllocatorEx インターフェイスへのポインター。

戻り値

メソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。

vtbl 29 HRESULT GetAllocateForStream(WORD dwSreamNum, IWMReaderAllocatorEx** ppAllocator)

GetAllocateForStream メソッドは、ストリームサンプルを割り当てるためのインターフェイスを取得します。

dwSreamNumWORDinストリーム番号を格納する DWORD
ppAllocatorIWMReaderAllocatorEx**outIWMReaderAllocatorEx インターフェイスへのポインターへのポインター。

戻り値

メソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_IWMSyncReader2 "{FAED3D21-1B6B-4AF7-8CB6-3E189BBC187B}"
#usecom global IWMSyncReader2 IID_IWMSyncReader2 "{}"
#comfunc global IWMSyncReader2_SetRangeByTimecode    24 int,var,var
#comfunc global IWMSyncReader2_SetRangeByFrameEx     25 int,int64,int64,var
#comfunc global IWMSyncReader2_SetAllocateForOutput  26 int,sptr
#comfunc global IWMSyncReader2_GetAllocateForOutput  27 int,sptr
#comfunc global IWMSyncReader2_SetAllocateForStream  28 int,sptr
#comfunc global IWMSyncReader2_GetAllocateForStream  29 int,sptr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。