IStreamBufferSink
COM公式ドキュメント
IStreamBufferSink インターフェースは Stream Buffer Sink フィルターによって公開されます。このインターフェースを使用して、キャプチャ前にフィルターをロックしたり、新しい録画を作成したりします。
解説(Remarks)
このインターフェースのインターフェース識別子 (IID) を宣言するには、__uuidof 演算子を使用します: __uuidof(IStreamBufferSink)。
メソッド 3
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
LockProfile メソッドは Stream Buffer Sink フィルターのプロファイルをロックし、ストリーム数とそのメディアタイプを固定します。このメソッドでは、バッキングファイルを指すスタブファイルの名前と場所を指定することもできます。
| pszStreamBufferFilename | LPWSTR | in | スタブファイルのフルパス名を指定する、null で終わるワイド文字列へのポインター。指定したファイルが既に存在する場合、このメソッドは失敗します。pszFilename が NULL の場合、スタブファイルは既定のファイル名でカレントディレクトリに作成されます。 |
戻り値
このメソッドは HRESULT を返します。可能な値には、次の表に示すものが含まれますが、これらに限定されません。
| リターンコード | 説明 |
|---|---|
| メソッドは成功しました。(同じパラメーターでの複数回の呼び出し。) | |
| メソッドは成功しました。 | |
| 失敗しました。 | |
| プロファイルにストリームが存在しないため、呼び出しが失敗しました。 |
解説(Remarks)
プロファイルには、入力ストリームの数、そのメディアタイプ、および一時バッキングファイルを指すスタブファイルの場所が記述されます。Stream Buffer Source フィルターがバッキングファイルからデータを読み取れるようにするには、事前にプロファイルをロックしておく必要があります。アプリケーションは、LockProfile メソッドを呼び出すことで明示的に、または Stream Buffer Sink フィルターを含むフィルターグラフを実行することで暗黙的に、プロファイルをロックできます。
プロファイルがロックされると、Stream Buffer Sink フィルターは新しいピン接続を受け付けなくなります。既に接続されているピンは再接続できますが、同じメディアタイプでのみ可能です。プロファイルはグラフが停止するとロック解除されます。
スタブファイルは、最後のプロセスがファイルハンドルを閉じたときに自動的に削除されます。これは、キャプチャグラフが停止し、どのレンダーグラフもそのファイルを読み取っていない場合に発生します。
このメソッドの最初の呼び出しが成功した後、pszFileName に同じ値を指定した以降の呼び出しは S_FALSE を返します。pszFileName に異なる値を指定した以降の呼び出しは失敗し、E_UNEXPECTED を返します。
スタブファイルの名前は、Stream Buffer Source フィルターの IFileSourceFilter::Load メソッドを通じてそのフィルターに渡すことができます。
Windows Vista 以降
このメソッドには管理者権限が必要です。ただし、事前に IStreamBufferConfigure3::SetNamespace を値 NULL で呼び出した場合を除きます。このトピックは Windows XP Service Pack 1 以降にのみ適用されます。
| pszFilename | LPWSTR | in | 録画のファイル名を含む、null で終わるワイド文字列へのポインター。 | ||||||
| dwRecordType | DWORD | in | 作成する録画の種類 (参照録画またはコンテンツ録画) を示します。次のいずれかの値を指定します。
| ||||||
| pRecordingIUnknown | IUnknown** | out | Recording オブジェクトの IUnknown インターフェースへのポインターを受け取る変数のアドレス。 |
戻り値
HRESULT を返します。可能な値には次の表に示すものが含まれます。
| リターンコード | 説明 |
|---|---|
| メソッドは成功しました。 |
解説(Remarks)
このメソッドを呼び出す前に、Stream Buffer Sink フィルターのプロファイルを明示的または暗黙的にロックしておく必要があります。詳細については、IStreamBufferSink::LockProfile を参照してください。
返される IUnknown インターフェースは参照カウントが残っています。呼び出し側はインターフェースを解放する必要があります。
このトピックは Windows XP Service Pack 1 以降にのみ適用されます。
戻り値
HRESULT を返します。可能な値には次の表に示すものが含まれます。
| リターンコード | 説明 |
|---|---|
| プロファイルはロックされています。 | |
| プロファイルはロックされていません。 | |
| メソッドは失敗しました。 |
解説(Remarks)
フィルターのプロファイルがロックされると、ストリーム数とそのメディアタイプが固定されます。詳細については、IStreamBufferSink::LockProfile を参照してください。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IStreamBufferSink "{AFD1F242-7EFD-45EE-BA4E-407A25C9A77A}"
#usecom global IStreamBufferSink IID_IStreamBufferSink "{}"
#comfunc global IStreamBufferSink_LockProfile 3 wstr
#comfunc global IStreamBufferSink_CreateRecorder 4 wstr,int,sptr
#comfunc global IStreamBufferSink_IsProfileLocked 5
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。