IWMWriterFileSink3
COM公式ドキュメント
IWMWriterFileSink3 インターフェイスは、ファイルシンクオブジェクトに追加機能を提供します。このインターフェイスへのポインターを取得するには、ファイルシンクオブジェクトに対して QueryInterface を呼び出します。
メソッド 8
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
SetAutoIndexing メソッドは、ファイルの自動インデックス作成を有効または無効にします。
| fDoAutoIndexing | BOOL | in | ファイルを自動的にインデックス化する場合に True となるブール値です。 |
戻り値
このメソッドは HRESULT を返します。指定可能な値には次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドが成功しました。 | |
| ヘッダーは既に受信されています。 |
解説(Remarks)
自動インデックス作成の状態は、ヘッダーが処理される前に設定する必要があります。ヘッダーが処理された後は、SetAutoIndexing を呼び出すとエラーになります。
ファイルは既定でインデックス化されます。インデックス作成を無効にするには、パラメーターに False を渡してこのメソッドを呼び出す必要があります。
オーディオコンテンツにビットレート相互排他(複数ビットレートオーディオ)を使用して ASF ファイルを生成すると、生成されたインデックス付きファイルは Windows Media Services バージョン 4.1 では動作しません。Windows Media Services 4.1 を使用してファイルをストリーミングする場合は、ファイルを書き込む前に自動インデックス作成を無効にする必要があります。
GetAutoIndexing メソッドは、ファイルの自動インデックス作成の現在の状態を取得します。
| pfAutoIndexing | BOOL* | out | ファイルの自動インデックス作成が有効な場合に True となるブール値へのポインターです。 |
戻り値
このメソッドは HRESULT を返します。指定可能な値には次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドが成功しました。 | |
| pfAutoIndexing が NULL です。 |
SetControlStream メソッドを使用すると、あるストリームを制御ストリームとして使用するように指定できます。また、このメソッドを使用して、以前に指定した制御ストリームを制御ストリームとして使用しないように指示することもできます。
| wStreamNumber | WORD | in | 構成するストリーム番号を指定する WORD です。ストリーム番号は 1 から 63 の範囲でなければなりません。 |
| fShouldControlStartAndStop | BOOL | in | ストリームを制御ストリームとして使用するかどうかを指定する BOOL です。 |
戻り値
このメソッドは HRESULT を返します。指定可能な値には次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドが成功しました。 | |
| wStreamNumber で指定されたストリーム番号が最大値を超えています。 |
解説(Remarks)
制御ストリームは、Start および Stop の呼び出しに正確さを追加します。ファイルシンクは、インターリーブされたストリーム内の時刻に基づいてファイルの最適な開始位置または停止位置を見つけようとするのではなく、制御ストリーム内で指定された時刻でファイルを正確に開始および停止します。その他のストリームは、その後、制御ストリームと同期されます。
このメソッドを複数回呼び出すことで、複数の制御ストリームを持つことができます。ファイルシンクは、目的の時刻が最初に検出された時点で開始または停止します。
GetMode メソッドは、サポートされているファイルシンクモードを取得します。複数のモードがサポートされる場合があります。
| pdwFileSinkMode | DWORD* | out | WMT_FILESINK_MODE 列挙型の値、または複数の値をビットごとの OR 演算子で結合した値を含む DWORD へのポインターです。 |
戻り値
このメソッドは HRESULT を返します。指定可能な値には次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドが成功しました。 | |
| pdwFileSinkMode が NULL です。 |
OnDataUnitEx メソッドは、ライターがデータユニットの送信を完了したときに呼び出されます。
| pFileSinkDataUnit | WMT_FILESINK_DATA_UNIT* | in | データユニット情報を含む WMT_FILESINK_DATA_UNIT 構造体へのポインターです。 |
戻り値
このメソッドは常に S_OK を返します。
解説(Remarks)
アプリケーションはこのメソッドを呼び出しません。カスタムシンクに IWMWriterFileSink3 インターフェイスを実装する場合は、このメソッドを実装するかどうかを選択できます。実装する場合、GetMode の実装では WMT_FM_FILESINK_DATA_UNITS を返す必要があります。
SetUnbufferedIO メソッドは、ファイルシンクでバッファリングなしの I/O を使用するかどうかを指定します。高ビットレートで実行時間が長いライターセッションでは、バッファリングなしの I/O を使用することでパフォーマンスを向上させることができます。
| fUnbufferedIO | BOOL | in | バッファリングなしの I/O を使用するかどうかを指定する BOOL です。 |
| fRestrictMemUsage | BOOL | in | メモリ使用量を制限するかどうかを指定する BOOL です。このパラメーターに True を渡すと、バッファリングなしの書き込み用にデータを準備するために使用されるバッファーのサイズが厳しく制限されます。この制限により、通常はバッファリングなしの I/O を使用することによるパフォーマンス上の利点が相殺されます。 |
戻り値
このメソッドは HRESULT を返します。指定可能な値には次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドが成功しました。 | |
| ヘッダーは既に書き込まれています。 |
解説(Remarks)
このメソッドを使用すると、バッファリングなしの I/O を使用するかどうかについてのライターの判断をアプリケーションが上書きできます。
バッファリングなしの I/O を使用する場合は、ファイルのヘッダーを書き込む前にこのメソッドを呼び出す必要があります。
このメソッドは、バッファリングなしの書き込み用にデータを準備するための一連のバッファーを動的に割り当てます。これらのバッファーのサイズは、利用可能な物理メモリの量に依存します。
GetUnbufferedIO メソッドは、ファイルシンクでバッファリングなしの I/O が使用されているかどうかを確認します。
| pfUnbufferedIO | BOOL* | out | このファイルシンクでバッファリングなしの I/O が使用されている場合に True に設定されるブール値へのポインターです。 |
戻り値
このメソッドは HRESULT を返します。指定可能な値には次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドが成功しました。 | |
| pfUnbuffered が NULL です。 |
CompleteOperations メソッドは、進行中のすべての操作を完了した後にライターシンクを停止します。このメソッドはバッファリングなしの I/O で使用されます。
戻り値
メソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。
解説(Remarks)
このメソッドは、IWMWriterSink::OnHeader、IWMWriterSink::OnDataUnit、および IWMWriterFileSink3::OnDataUnitEx の呼び出しの結果として書き込みが実行されるときに呼び出されます。アプリケーションはこのメソッドを呼び出しません。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IWMWriterFileSink3 "{3FEA4FEB-2945-47A7-A1DD-C53A8FC4C45C}" #usecom global IWMWriterFileSink3 IID_IWMWriterFileSink3 "{}" #comfunc global IWMWriterFileSink3_SetAutoIndexing 16 int #comfunc global IWMWriterFileSink3_GetAutoIndexing 17 var #comfunc global IWMWriterFileSink3_SetControlStream 18 int,int #comfunc global IWMWriterFileSink3_GetMode 19 var #comfunc global IWMWriterFileSink3_OnDataUnitEx 20 var #comfunc global IWMWriterFileSink3_SetUnbufferedIO 21 int,int #comfunc global IWMWriterFileSink3_GetUnbufferedIO 22 var #comfunc global IWMWriterFileSink3_CompleteOperations 23 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。#define global IID_IWMWriterFileSink3 "{3FEA4FEB-2945-47A7-A1DD-C53A8FC4C45C}" #usecom global IWMWriterFileSink3 IID_IWMWriterFileSink3 "{}" #comfunc global IWMWriterFileSink3_SetAutoIndexing 16 int #comfunc global IWMWriterFileSink3_GetAutoIndexing 17 sptr #comfunc global IWMWriterFileSink3_SetControlStream 18 int,int #comfunc global IWMWriterFileSink3_GetMode 19 sptr #comfunc global IWMWriterFileSink3_OnDataUnitEx 20 sptr #comfunc global IWMWriterFileSink3_SetUnbufferedIO 21 int,int #comfunc global IWMWriterFileSink3_GetUnbufferedIO 22 sptr #comfunc global IWMWriterFileSink3_CompleteOperations 23 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。