IWMSyncReader2
COM公式ドキュメント
IWMSyncReader2 インターフェイスは、同期リーダー向けの高度な機能を提供します。
メソッド 6
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
SetRangeByTimecode メソッドは、ファイルの再生について、SMPTE タイムコードに基づいて開始時刻と終了時刻を設定します。
| wStreamNum | WORD | in | ストリーム番号を格納する WORD。 |
| pStart | WMT_TIMECODE_EXTENSION_DATA* | in | 開始タイムコードを格納する WMT_TIMECODE_EXTENSION_DATA 構造体へのポインター。 |
| pEnd | WMT_TIMECODE_EXTENSION_DATA* | in | 終了タイムコードを格納する WMT_TIMECODE_EXTENSION_DATA 構造体へのポインター。 |
戻り値
メソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。
解説(Remarks)
メソッドが成功するには、ファイルが SMPTE タイムコードでインデックス付けされている必要があります。
呼び出しが成功すると、すべてのストリームがプレゼンテーション時刻に基づいて同じ位置に同期されます。
SetRangeByFrameEx メソッドは、開始ビデオフレーム番号と読み取るフレーム数で指定されたファイルの一部を読み取るように、同期リーダーを構成します。また、このメソッドは要求されたフレーム番号のプレゼンテーション時刻を取得します。
| wStreamNum | WORD | in | ストリーム番号。 |
| qwFrameNumber | ULONGLONG | in | 再生を開始するフレーム番号。ファイルの最初のフレームは番号 1 です。 |
| cFramesToRead | LONGLONG | in | 読み取るフレーム数。ファイルの末尾まで再生を続けるには 0 を渡します。 |
| pcnsStartTime | ULONGLONG* | out | 100 ナノ秒単位の開始時刻。 |
戻り値
メソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。
解説(Remarks)
要求されたフレーム番号のプレゼンテーション時刻を取得することで、デルタフレームへのシークによって生じる問題を回避できます。同期リーダーはキーフレームの境界からサンプルの配信を開始します。対象フレームのプレゼンテーション時刻に到達するまで、フレームを無視できます。
ファイルはフレームインデックス付けされている必要があります。呼び出しが成功すると、すべてのストリームが時刻に基づいて同じ位置に同期されます。
SetAllocateForOutput メソッドは、出力サンプルを割り当てるためのサンプル割り当てコールバックインターフェイスを設定します。
| dwOutputNum | DWORD | in | 出力番号を格納する DWORD。 |
| pAllocator | IWMReaderAllocatorEx* | in | アプリケーションで実装された IWMReaderAllocatorEx インターフェイスへのポインター。 |
戻り値
メソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。
GetAllocateForOutput メソッドは、出力サンプルを割り当てるためのインターフェイスを取得します。
| dwOutputNum | DWORD | in | 出力番号を格納する DWORD。 |
| ppAllocator | IWMReaderAllocatorEx** | out | IWMReaderAllocatorEx インターフェイスへのポインターへのポインター。 |
戻り値
メソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。
SetAllocateForStream メソッドは、ストリームサンプルを割り当てるためのサンプル割り当てコールバックインターフェイスを設定します。
| wStreamNum | WORD | in | ストリーム番号を格納する WORD。 |
| pAllocator | IWMReaderAllocatorEx* | in | アプリケーションで実装された IWMReaderAllocatorEx インターフェイスへのポインター。 |
戻り値
メソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。
GetAllocateForStream メソッドは、ストリームサンプルを割り当てるためのインターフェイスを取得します。
| dwSreamNum | WORD | in | ストリーム番号を格納する DWORD。 |
| ppAllocator | IWMReaderAllocatorEx** | out | IWMReaderAllocatorEx インターフェイスへのポインターへのポインター。 |
戻り値
メソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。
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 指定が可能。#define global IID_IWMSyncReader2 "{FAED3D21-1B6B-4AF7-8CB6-3E189BBC187B}" #usecom global IWMSyncReader2 IID_IWMSyncReader2 "{}" #comfunc global IWMSyncReader2_SetRangeByTimecode 24 int,sptr,sptr #comfunc global IWMSyncReader2_SetRangeByFrameEx 25 int,int64,int64,sptr #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が無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。