IWMWriterAdvanced3
COM公式ドキュメント
IWMWriterAdvanced3 インターフェイスは、ライターオブジェクトに追加機能を提供します。IWMWriterAdvanced3 はライターオブジェクトのすべてのインスタンスに存在します。このインターフェイスへのポインターを取得するには、ライターオブジェクトに対して QueryInterface を呼び出します。
メソッド 2
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
GetStatisticsEx メソッドは、ライターの拡張統計情報を取得します。
| wStreamNum | WORD | in | 統計情報を取得したいストリーム番号を格納する WORD です。0 を渡すと、ファイル全体の拡張統計情報を取得できます。ストリーム番号は 1 から 63 の範囲です。 |
| pStats | WM_WRITER_STATISTICS_EX* | out | 統計情報を受け取る WM_WRITER_STATISTICS_EX 構造体へのポインターです。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドが成功しました。 | |
| ライターが構成状態にあり、その間はこのメソッドを呼び出せません。 |
解説(Remarks)
GetStatisticsEx は IWMWriterAdvanced::GetStatistics の改良版ではありません。GetStatistics で取得される統計情報は GetStatisticsEx では取得されません。利用可能なすべての統計情報を取得したい場合は、両方のメソッドを呼び出す必要があります。
SetNonBlocking メソッドは、サンプルの書き込み中に呼び出し元スレッドがブロックされないようにライターを構成します。
戻り値
このメソッドは常に S_OK を返します。
解説(Remarks)
このメソッドは、時間的制約の厳しいスレッドに対してのみ使用してください。SetNonBlocking を呼び出した後は、ライターにキューイングされるデータ量を制御するのは呼び出し元アプリケーションの責任となります。ライターが処理しきれないほど多くのデータをキューイングしたり、コンピューターのリソースを過剰に消費したりする可能性があります。極端な場合には、その結果としてエンコードセッションが予期せず停止することがあります。
このメソッドは、ライブソースから書き込む場合には効果がありません。ライブエンコードの状況では、ライターが呼び出し元のスレッドをブロックしないのが通常の動作です。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IWMWriterAdvanced3 "{2CD6492D-7C37-4E76-9D3B-59261183A22E}" #usecom global IWMWriterAdvanced3 IID_IWMWriterAdvanced3 "{}" #comfunc global IWMWriterAdvanced3_GetStatisticsEx 16 int,var #comfunc global IWMWriterAdvanced3_SetNonBlocking 17 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。#define global IID_IWMWriterAdvanced3 "{2CD6492D-7C37-4E76-9D3B-59261183A22E}" #usecom global IWMWriterAdvanced3 IID_IWMWriterAdvanced3 "{}" #comfunc global IWMWriterAdvanced3_GetStatisticsEx 16 int,sptr #comfunc global IWMWriterAdvanced3_SetNonBlocking 17 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。