IWMWriterAdvanced2
COM公式ドキュメント
IWMWriterAdvanced2 インターフェースは、入力に対して名前付き設定を設定および取得する機能を提供します。IWMWriterAdvanced2 は、writer オブジェクトのすべてのインスタンスに対して存在します。このインターフェースへのポインターを取得するには、writer オブジェクトに対して QueryInterface を呼び出します。
メソッド 2
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
GetInputSetting メソッドは、特定の入力に対する設定を名前で取得します。
| dwInputNum | DWORD | in | 入力番号を格納する DWORD。 |
| pszName | LPWSTR | in | 設定名を格納するワイド文字の null 終端文字列へのポインター。有効な設定の一覧については、Input Settings を参照してください。 |
| pType | WMT_ATTR_DATATYPE* | out | WMT_ATTR_DATATYPE 列挙型の値へのポインター。 |
| pValue | BYTE* | out | 設定を格納するバイト配列へのポインター。データの型は pType によって決まります。必要な配列のサイズを取得するには NULL を渡します。 |
| pcbLength | WORD* | inout | 入力時は pValue の長さへのポインター。出力時は、このメソッドによって pValue に格納されたバイト数へのポインター。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には、以下の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 入力プロファイルがまだ設定されていません。 | |
|
dwInputNum が既存の入力の数より大きい
または pType、pcbLength、または pszName が NULL です。 |
解説(Remarks)
取得したい設定ごとに GetInputSetting を 2 回呼び出す必要があります。1 回目の呼び出しでは、pValue に NULL を渡します。呼び出しから戻ると、pcbLength が指す値に、設定値を保持するために必要なバッファーサイズが設定されます。その後、バッファー用に必要な量のメモリを割り当て、2 回目の呼び出しでそのポインターを pValue として渡します。
SetInputSetting メソッドは、特定の入力に対する名前付き設定を指定します。
| dwInputNum | DWORD | in | 入力番号を格納する DWORD。 |
| pszName | LPWSTR | in | 設定名を格納するワイド文字の null 終端文字列へのポインター。有効な設定の一覧については、Input Settings を参照してください。 |
| Type | WMT_ATTR_DATATYPE | in | WMT_ATTR_DATATYPE 列挙型の値へのポインター。 |
| pValue | BYTE* | in | 設定を格納するバイト配列へのポインター。 |
| cbLength | WORD | in | pValue のサイズ (バイト単位)。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には、以下の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 入力プロファイルがまだ設定されていません。 | |
|
dwInputNum が既存の入力の数より大きい
または pValue または pszName が NULL です。 |
|
| この設定は writer の実行中には変更できません。 | |
| 原因不明のエラーです。 |
解説(Remarks)
このメソッドで設定したエンコード設定は、出力ファイルには保存されません。カスタムプレーヤーからこの情報にアクセスできるようにするには、その値をファイルヘッダー内のカスタムメタデータ属性として保存する必要があります。
IWMWriter::BeginWriting が呼び出された後に設定できるのは、g_wszDeinterlaceMode、g_wszInitialPatternForInverseTelecine、g_wszInterlacedCoding、および g_wszJPEGCompressionQuality のみです。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IWMWriterAdvanced2 "{962DC1EC-C046-4DB8-9CC7-26CEAE500817}" #usecom global IWMWriterAdvanced2 IID_IWMWriterAdvanced2 "{}" #comfunc global IWMWriterAdvanced2_GetInputSetting 14 int,wstr,var,var,var #comfunc global IWMWriterAdvanced2_SetInputSetting 15 int,wstr,int,var,int ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。#define global IID_IWMWriterAdvanced2 "{962DC1EC-C046-4DB8-9CC7-26CEAE500817}" #usecom global IWMWriterAdvanced2 IID_IWMWriterAdvanced2 "{}" #comfunc global IWMWriterAdvanced2_GetInputSetting 14 int,wstr,sptr,sptr,sptr #comfunc global IWMWriterAdvanced2_SetInputSetting 15 int,wstr,int,sptr,int ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。