IMFSourceBuffer
COM公式ドキュメント
IMFMediaSourceExtension のメディアデータを格納するバッファを表します。
解説(Remarks)
IMFSourceBuffer は IMFMediaSourceExtension と組み合わせて使用します。
メソッド 12
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
Append、AppendByteStream、または Remove が処理中かどうかを示す値を取得します。
戻り値
Append、AppendByteStream、または Remove が処理中の場合は true。それ以外の場合は false。
バッファリングされている時間範囲を取得します。
| ppBuffered | IMFMediaTimeRange** | out | バッファリングされている時間範囲。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
IMFSourceBuffer に追加されるメディアセグメントのタイムスタンプオフセットを取得します。
戻り値
タイムスタンプオフセット。
IMFSourceBuffer に追加されるメディアセグメントのタイムスタンプオフセットを設定します。
| offset | DOUBLE | in | 追加メディアのタイムスタンプに加算するオフセット。秒単位。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
追加ウィンドウの開始位置のタイムスタンプを取得します。
戻り値
追加ウィンドウの開始位置のタイムスタンプ。
追加ウィンドウの開始位置のタイムスタンプを設定します。
| time | DOUBLE | in | 追加ウィンドウの開始位置のタイムスタンプ。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
追加ウィンドウの終了位置のタイムスタンプを取得します。
戻り値
追加ウィンドウの終了位置のタイムスタンプ。
追加ウィンドウの終了位置のタイムスタンプを設定します。
| time | DOUBLE | in | 追加ウィンドウの終了時刻。これより後のサンプルは破棄される。秒単位。 |
戻り値
追加ウィンドウの終了位置のタイムスタンプ。
指定したメディアセグメントを IMFSourceBuffer に追加します。
| pData | BYTE* | in | 追加するメディアデータ。 |
| len | DWORD | in | pData に格納されているメディアデータの長さ。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
指定したバイトストリームのメディアセグメントを IMFSourceBuffer に追加します。
| pStream | IMFByteStream* | in | メディアセグメントのデータ。 |
| pMaxLen | ULONGLONG* | inoptional | メディアセグメントデータの最大長。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
現在のメディアセグメントの処理を中止します。
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
指定した時間範囲で定義されるメディアセグメントを IMFSourceBuffer から削除します。
| start | DOUBLE | in | 時間範囲の開始位置。 |
| end | DOUBLE | in | 時間範囲の終了位置。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IMFSourceBuffer "{E2CD3A4B-AF25-4D3D-9110-DA0E6F8EE877}" #usecom global IMFSourceBuffer IID_IMFSourceBuffer "{}" #comfunc global IMFSourceBuffer_GetUpdating 3 #comfunc global IMFSourceBuffer_GetBuffered 4 sptr #comfunc global IMFSourceBuffer_GetTimeStampOffset 5 #comfunc global IMFSourceBuffer_SetTimeStampOffset 6 double #comfunc global IMFSourceBuffer_GetAppendWindowStart 7 #comfunc global IMFSourceBuffer_SetAppendWindowStart 8 double #comfunc global IMFSourceBuffer_GetAppendWindowEnd 9 #comfunc global IMFSourceBuffer_SetAppendWindowEnd 10 double #comfunc global IMFSourceBuffer_Append 11 var,int #comfunc global IMFSourceBuffer_AppendByteStream 12 sptr,var #comfunc global IMFSourceBuffer_Abort 13 #comfunc global IMFSourceBuffer_Remove 14 double,double ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IMFSourceBuffer "{E2CD3A4B-AF25-4D3D-9110-DA0E6F8EE877}" #usecom global IMFSourceBuffer IID_IMFSourceBuffer "{}" #comfunc global IMFSourceBuffer_GetUpdating 3 #comfunc global IMFSourceBuffer_GetBuffered 4 sptr #comfunc global IMFSourceBuffer_GetTimeStampOffset 5 #comfunc global IMFSourceBuffer_SetTimeStampOffset 6 double #comfunc global IMFSourceBuffer_GetAppendWindowStart 7 #comfunc global IMFSourceBuffer_SetAppendWindowStart 8 double #comfunc global IMFSourceBuffer_GetAppendWindowEnd 9 #comfunc global IMFSourceBuffer_SetAppendWindowEnd 10 double #comfunc global IMFSourceBuffer_Append 11 sptr,int #comfunc global IMFSourceBuffer_AppendByteStream 12 sptr,sptr #comfunc global IMFSourceBuffer_Abort 13 #comfunc global IMFSourceBuffer_Remove 14 double,double ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。