ホーム › Media.DirectShow › IAsyncReader
IAsyncReader
COMメソッド 8
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
vtbl 3 HRESULT RequestAllocator(IMemAllocator* pPreferred, ALLOCATOR_PROPERTIES* pProps, IMemAllocator** ppActual)
| pPreferred | IMemAllocator* | in | 優先して使いたいアロケータを指定する。NULL可。 |
| pProps | ALLOCATOR_PROPERTIES* | in | 要求するアロケータ要件(ALLOCATOR_PROPERTIES)を指定する。 |
| ppActual | IMemAllocator** | out | 実際に使用するアロケータを受け取る出力先。 |
vtbl 4 HRESULT Request(IMediaSample* pSample, UINT_PTR dwUser)
| pSample | IMediaSample* | in | 読み取り先バッファを保持するメディアサンプルを指定する。時刻範囲で読取位置を表す。 |
| dwUser | UINT_PTR | in | 要求を識別するためのユーザ定義値。WaitForNextで返る。 |
vtbl 5 HRESULT WaitForNext(DWORD dwTimeout, IMediaSample** ppSample, UINT_PTR* pdwUser)
| dwTimeout | DWORD | in | 完了待ちの最大時間(ミリ秒)。INFINITEで無期限待機する。 |
| ppSample | IMediaSample** | outoptional | 完了したメディアサンプルを受け取る出力先。 |
| pdwUser | UINT_PTR* | out | Requestで渡したユーザ定義値を受け取る出力先。 |
vtbl 6 HRESULT SyncReadAligned(IMediaSample* pSample)
| pSample | IMediaSample* | in | アラインメント条件に従い同期読み取りするメディアサンプルを指定する。 |
| llPosition | LONGLONG | in | 読み取りを開始するバイト位置(オフセット)。 |
| lLength | INT | in | 読み取るバイト数。 |
| pBuffer | BYTE* | out | 読み取ったデータを格納するバッファへのポインタ。 |
| pTotal | LONGLONG* | out | ストリーム全体の長さ(バイト数)を受け取る出力先。 |
| pAvailable | LONGLONG* | out | 現時点で読み取り可能な長さ(バイト数)を受け取る出力先。 |
vtbl 9 HRESULT BeginFlush()
vtbl 10 HRESULT EndFlush()
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
出力引数:
#define global IID_IAsyncReader "{56A868AA-0AD4-11CE-B03A-0020AF0BA770}" #usecom global IAsyncReader IID_IAsyncReader "{}" #comfunc global IAsyncReader_RequestAllocator 3 sptr,var,sptr #comfunc global IAsyncReader_Request 4 sptr,sptr #comfunc global IAsyncReader_WaitForNext 5 int,sptr,var #comfunc global IAsyncReader_SyncReadAligned 6 sptr #comfunc global IAsyncReader_SyncRead 7 int64,int,var #comfunc global IAsyncReader_Length 8 var,var #comfunc global IAsyncReader_BeginFlush 9 #comfunc global IAsyncReader_EndFlush 10 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IAsyncReader "{56A868AA-0AD4-11CE-B03A-0020AF0BA770}" #usecom global IAsyncReader IID_IAsyncReader "{}" #comfunc global IAsyncReader_RequestAllocator 3 sptr,sptr,sptr #comfunc global IAsyncReader_Request 4 sptr,sptr #comfunc global IAsyncReader_WaitForNext 5 int,sptr,sptr #comfunc global IAsyncReader_SyncReadAligned 6 sptr #comfunc global IAsyncReader_SyncRead 7 int64,int,sptr #comfunc global IAsyncReader_Length 8 sptr,sptr #comfunc global IAsyncReader_BeginFlush 9 #comfunc global IAsyncReader_EndFlush 10 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。