Win32 API 日本語リファレンス
ホームMedia.WindowsMediaFormat › IWMWriterFileSink3

IWMWriterFileSink3

COM
IID3fea4feb-2945-47a7-a1dd-c53a8fc4c45c継承元IWMWriterFileSink2自前メソッド開始 vtbl16

公式ドキュメント

IWMWriterFileSink3 インターフェイスは、ファイルシンクオブジェクトに追加機能を提供します。このインターフェイスへのポインターを取得するには、ファイルシンクオブジェクトに対して QueryInterface を呼び出します。

メソッド 8

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 16 HRESULT SetAutoIndexing(BOOL fDoAutoIndexing)

SetAutoIndexing メソッドは、ファイルの自動インデックス作成を有効または無効にします。

fDoAutoIndexingBOOLinファイルを自動的にインデックス化する場合に True となるブール値です。

戻り値

このメソッドは HRESULT を返します。指定可能な値には次の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドが成功しました。
NS_E_INVALID_REQUEST
ヘッダーは既に受信されています。

解説(Remarks)

自動インデックス作成の状態は、ヘッダーが処理される前に設定する必要があります。ヘッダーが処理された後は、SetAutoIndexing を呼び出すとエラーになります。

ファイルは既定でインデックス化されます。インデックス作成を無効にするには、パラメーターに False を渡してこのメソッドを呼び出す必要があります。

オーディオコンテンツにビットレート相互排他(複数ビットレートオーディオ)を使用して ASF ファイルを生成すると、生成されたインデックス付きファイルは Windows Media Services バージョン 4.1 では動作しません。Windows Media Services 4.1 を使用してファイルをストリーミングする場合は、ファイルを書き込む前に自動インデックス作成を無効にする必要があります。

vtbl 17 HRESULT GetAutoIndexing(BOOL* pfAutoIndexing)

GetAutoIndexing メソッドは、ファイルの自動インデックス作成の現在の状態を取得します。

pfAutoIndexingBOOL*outファイルの自動インデックス作成が有効な場合に True となるブール値へのポインターです。

戻り値

このメソッドは HRESULT を返します。指定可能な値には次の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドが成功しました。
E_INVALIDARG
pfAutoIndexingNULL です。
vtbl 18 HRESULT SetControlStream(WORD wStreamNumber, BOOL fShouldControlStartAndStop)

SetControlStream メソッドを使用すると、あるストリームを制御ストリームとして使用するように指定できます。また、このメソッドを使用して、以前に指定した制御ストリームを制御ストリームとして使用しないように指示することもできます。

wStreamNumberWORDin構成するストリーム番号を指定する WORD です。ストリーム番号は 1 から 63 の範囲でなければなりません。
fShouldControlStartAndStopBOOLinストリームを制御ストリームとして使用するかどうかを指定する BOOL です。

戻り値

このメソッドは HRESULT を返します。指定可能な値には次の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドが成功しました。
E_INVALIDARG
wStreamNumber で指定されたストリーム番号が最大値を超えています。

解説(Remarks)

制御ストリームは、Start および Stop の呼び出しに正確さを追加します。ファイルシンクは、インターリーブされたストリーム内の時刻に基づいてファイルの最適な開始位置または停止位置を見つけようとするのではなく、制御ストリーム内で指定された時刻でファイルを正確に開始および停止します。その他のストリームは、その後、制御ストリームと同期されます。

このメソッドを複数回呼び出すことで、複数の制御ストリームを持つことができます。ファイルシンクは、目的の時刻が最初に検出された時点で開始または停止します。

vtbl 19 HRESULT GetMode(DWORD* pdwFileSinkMode)

GetMode メソッドは、サポートされているファイルシンクモードを取得します。複数のモードがサポートされる場合があります。

pdwFileSinkModeDWORD*outWMT_FILESINK_MODE 列挙型の値、または複数の値をビットごとの OR 演算子で結合した値を含む DWORD へのポインターです。

戻り値

このメソッドは HRESULT を返します。指定可能な値には次の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドが成功しました。
E_INVALIDARG
pdwFileSinkModeNULL です。
vtbl 20 HRESULT OnDataUnitEx(WMT_FILESINK_DATA_UNIT* pFileSinkDataUnit)

OnDataUnitEx メソッドは、ライターがデータユニットの送信を完了したときに呼び出されます。

pFileSinkDataUnitWMT_FILESINK_DATA_UNIT*inデータユニット情報を含む WMT_FILESINK_DATA_UNIT 構造体へのポインターです。

戻り値

このメソッドは常に S_OK を返します。

解説(Remarks)

アプリケーションはこのメソッドを呼び出しません。カスタムシンクに IWMWriterFileSink3 インターフェイスを実装する場合は、このメソッドを実装するかどうかを選択できます。実装する場合、GetMode の実装では WMT_FM_FILESINK_DATA_UNITS を返す必要があります。

vtbl 21 HRESULT SetUnbufferedIO(BOOL fUnbufferedIO, BOOL fRestrictMemUsage)

SetUnbufferedIO メソッドは、ファイルシンクでバッファリングなしの I/O を使用するかどうかを指定します。高ビットレートで実行時間が長いライターセッションでは、バッファリングなしの I/O を使用することでパフォーマンスを向上させることができます。

fUnbufferedIOBOOLinバッファリングなしの I/O を使用するかどうかを指定する BOOL です。
fRestrictMemUsageBOOLinメモリ使用量を制限するかどうかを指定する BOOL です。このパラメーターに True を渡すと、バッファリングなしの書き込み用にデータを準備するために使用されるバッファーのサイズが厳しく制限されます。この制限により、通常はバッファリングなしの I/O を使用することによるパフォーマンス上の利点が相殺されます。

戻り値

このメソッドは HRESULT を返します。指定可能な値には次の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドが成功しました。
NS_E_INVALID_REQUEST
ヘッダーは既に書き込まれています。

解説(Remarks)

このメソッドを使用すると、バッファリングなしの I/O を使用するかどうかについてのライターの判断をアプリケーションが上書きできます。

バッファリングなしの I/O を使用する場合は、ファイルのヘッダーを書き込む前にこのメソッドを呼び出す必要があります。

このメソッドは、バッファリングなしの書き込み用にデータを準備するための一連のバッファーを動的に割り当てます。これらのバッファーのサイズは、利用可能な物理メモリの量に依存します。

vtbl 22 HRESULT GetUnbufferedIO(BOOL* pfUnbufferedIO)

GetUnbufferedIO メソッドは、ファイルシンクでバッファリングなしの I/O が使用されているかどうかを確認します。

pfUnbufferedIOBOOL*outこのファイルシンクでバッファリングなしの I/O が使用されている場合に True に設定されるブール値へのポインターです。

戻り値

このメソッドは HRESULT を返します。指定可能な値には次の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドが成功しました。
E_POINTER
pfUnbufferedNULL です。
vtbl 23 HRESULT CompleteOperations()

CompleteOperations メソッドは、進行中のすべての操作を完了した後にライターシンクを停止します。このメソッドはバッファリングなしの I/O で使用されます。

戻り値

メソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。

解説(Remarks)

このメソッドは、IWMWriterSink::OnHeaderIWMWriterSink::OnDataUnit、および IWMWriterFileSink3::OnDataUnitEx の呼び出しの結果として書き込みが実行されるときに呼び出されます。アプリケーションはこのメソッドを呼び出しません。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
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 方式にも切替可。