IWMCodecInfo3
COM公式ドキュメント
IWMCodecInfo3 インターフェイスは、コーデックからプロパティを取得します。IWMCodecInfo3 へのポインターは、プロファイルマネージャーオブジェクトの他の任意のインターフェイスの QueryInterface メソッドを呼び出すことで取得できます。
メソッド 4
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
GetCodecFormatProp メソッドは、コーデックの 1 つのフォーマットからプロパティを取得します。
| guidType | GUID* | in | デジタルメディアのメジャータイプを識別する GUID です。次の定数のいずれかである必要があります。
| ||||||
| dwCodecIndex | DWORD | in | コーデックのインデックスを格納する DWORD です。値は 0 から、guidType で指定された種類のサポートされるコーデック数より 1 小さい値までの範囲です。メジャータイプをサポートする個々のコーデックの数を取得するには、IWMCodecInfo::GetCodecInfoCount メソッドを使用します。 | ||||||
| dwFormatIndex | DWORD | in | フォーマットのインデックスを格納する DWORD です。値は 0 から、サポートされるフォーマット数より 1 小さい値までの範囲です。コーデックがサポートする個々のフォーマットの数を取得するには、IWMCodecInfo::GetCodecFormatCount メソッドを使用します。 | ||||||
| pszName | LPWSTR | in | 取得するプロパティの名前を格納する、ワイド文字の null 終端文字列へのポインターです。 現在サポートされているコーデックフォーマットプロパティは 1 つだけで、次の表に示します。フォーマットプロパティはプロパティのデータ型と値を決定し、この情報は表に含まれています。
| ||||||
| pType | WMT_ATTR_DATATYPE* | out | WMT_ATTR_DATATYPE 列挙型のメンバーを受け取る変数へのポインターです。この値は、pValue が指すバッファーに返される情報の型を指定します。 | ||||||
| pValue | BYTE* | out | プロパティの値を受け取るバッファーへのポインターです。返されるデータの型は pType で指定されます。 | ||||||
| pdwSize | DWORD* | inout | pValue が指すバッファーの長さを指定する DWORD 値へのポインターです。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には次の表のものが含まれますが、これらに限定されません。
| リターンコード | 説明 |
|---|---|
| メソッドは成功しました。 | |
|
pszName、pType、または pdwSize が NULL です。
または guidType が無効な入力型を指定しています。 または pszName が無効なプロパティ名を指定しています。 |
解説(Remarks)
取得したいプロパティごとに、GetCodecFormatProp を 2 回呼び出す必要があります。1 回目の呼び出しでは、pValue に NULL を渡します。戻り値として、pdwSize には指定したプロパティの値を保持するために必要なバッファーサイズが設定されます。その後、必要な量のメモリをバッファーに割り当て、2 回目の呼び出しでそのポインターを pValue として渡します。
GetCodecProp メソッドは、コーデックのプロパティを取得します。
| guidType | GUID* | in | デジタルメディアのメジャータイプを識別する GUID です。次の定数のいずれかである必要があります。
| |||||||||||||||
| dwCodecIndex | DWORD | in | コーデックのインデックスを格納する DWORD です。値は 0 から、guidType で指定された種類のサポートされるコーデック数より 1 小さい値までの範囲です。メジャータイプをサポートする個々のコーデックの数を取得するには、IWMCodecInfo::GetCodecInfoCount メソッドを使用します。 | |||||||||||||||
| pszName | LPWSTR | in | 取得するプロパティの名前を格納する、null 終端文字列へのポインターです。 次の表に、取得できるコーデックプロパティの一覧を示します。プロパティはデータ型と値を規定し、この情報も表に含まれています。
| |||||||||||||||
| pType | WMT_ATTR_DATATYPE* | out | WMT_ATTR_DATATYPE 列挙型のメンバーを受け取る変数へのポインターです。この値は、pValue のバッファーに返される情報の型を指定します。 | |||||||||||||||
| pValue | BYTE* | out | プロパティの値を受け取るバッファーへのポインターです。返されるデータの型は pType で指定されます。 | |||||||||||||||
| pdwSize | DWORD* | inout | pValue のバッファーの長さを指定する DWORD 値へのポインターです。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には次の表のものが含まれますが、これらに限定されません。
| リターンコード | 説明 |
|---|---|
| メソッドは成功しました。 | |
|
pszName、pType、または pdwSize が NULL です。
または guidType が無効な入力型を指定しています。 または pszName が無効なプロパティ名を指定しています。 |
解説(Remarks)
取得したいプロパティごとに、GetCodecProp を 2 回呼び出す必要があります。1 回目の呼び出しでは、pValue に NULL を渡します。戻り値として、pdwSize には指定したプロパティの値を保持するために必要なバッファーサイズが設定されます。その後、必要な量のメモリをバッファーに割り当て、2 回目の呼び出しでそのポインターを pValue として渡します。
SetCodecEnumerationSetting メソッドは、1 つのコーデック列挙設定の値を設定します。コーデック列挙設定は、IWMCodecInfo のメソッドによって列挙できるコーデックフォーマットを規定します。
| guidType | GUID* | in | デジタルメディアのメジャータイプを識別する GUID です。次の定数のいずれかである必要があります。
| ||||||
| dwCodecIndex | DWORD | in | コーデックのインデックスを格納する DWORD です。値は 0 から、guidType で指定された種類のサポートされるコーデック数より 1 小さい値までの範囲です。メジャータイプをサポートする個々のコーデックの数を取得するには、IWMCodecInfo::GetCodecInfoCount メソッドを使用します。 | ||||||
| pszName | LPWSTR | in | 列挙設定の名前を格納する、ワイド文字の null 終端文字列へのポインターです。次の定数のいずれかを使用します。
| ||||||
| Type | WMT_ATTR_DATATYPE | in | pValue の値のデータ型を指定する WMT_ATTR_DATATYPE 値です。 | ||||||
| pValue | BYTE* | in | 設定値を格納する BYTE 配列へのポインターです。 | ||||||
| dwSize | DWORD | in | pValue の BYTE 配列のサイズを格納する DWORD です。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には次の表のものが含まれますが、これらに限定されません。
| リターンコード | 説明 |
|---|---|
| メソッドは成功しました。この機能はコーデックによってサポートされています。 | |
| 指定された列挙設定は、このコーデックに対して有効ではありません。 |
解説(Remarks)
Windows Media Audio および Video 9 Series コーデックは、次の表に示すように、4 種類の異なるコーデックフォーマットのセットを列挙できる可能性があります。
| 固定ビットレート (CBR) ストリーム | 2 パス CBR ストリーム | 品質ベースの可変ビットレート (VBR) ストリーム | ビットレートベースの VBR ストリーム (制約あり、または制約なし) | |
|---|---|---|---|---|
| g_wszVBREnabled | FALSE | FALSE | TRUE | TRUE |
| g_wszNumPasses | 1 | 2 | 1 | 2 |
すべてのコーデックがすべてのフォーマットをサポートするわけではありません。
このメソッドを呼び出して NS_E_UNSUPPORTED_PROPERTY エラーコードが返された場合、そのコーデックはその機能をサポートしていません。たとえば、g_wszNumPasses の設定を試みて NS_E_UNSUPPORTED_PROPERTY が返された場合、そのコーデックは複数のエンコードパスをサポートしていません。
このメソッドの呼び出しの戻り値は、コーデック機能のサポートを保証するものではありません。たとえば、Windows Media Audio 9 Lossless コーデックは 2 パスエンコードをサポートしていないにもかかわらず、パス数を設定する呼び出しに対して NS_E_UNSUPPORTED_PROPERTY を返しません。
GetCodecEnumerationSetting メソッドは、1 つのコーデック列挙設定の現在の値を取得します。
| guidType | GUID* | in | デジタルメディアのメジャータイプを識別する GUID です。次の定数のいずれかである必要があります。
| ||||||
| dwCodecIndex | DWORD | in | コーデックのインデックスを格納する DWORD です。値は 0 から、guidType で指定された種類のサポートされるコーデック数より 1 小さい値までの範囲です。メジャータイプをサポートする個々のコーデックの数を取得するには、IWMCodecInfo::GetCodecInfoCount メソッドを使用します。 | ||||||
| pszName | LPWSTR | in | 列挙設定の名前を格納する、ワイド文字の null 終端文字列へのポインターです。次の定数のいずれかを使用します。
| ||||||
| pType | WMT_ATTR_DATATYPE* | out | pValue に返される値のデータ型を指定する WMT_ATTR_DATATYPE 列挙値へのポインターです。 | ||||||
| pValue | BYTE* | out | コーデック列挙データを格納する BYTE 配列へのポインターです。この配列に返されるデータの型と意味は、pszName で指定された設定によって異なります。この値を NULL に設定すると、必要な配列サイズを pdwSize に取得できます。 | ||||||
| pdwSize | DWORD* | inout | 設定値のサイズ (バイト単位) を格納する DWORD へのポインターです。pValue を NULL に設定した場合、この値には設定値を保持するために必要なサイズが設定されます。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には次の表のものが含まれますが、これらに限定されません。
| リターンコード | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 指定された列挙設定は、このコーデックに対して有効ではありません。 |
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IWMCodecInfo3 "{7E51F487-4D93-4F98-8AB4-27D0565ADC51}" #usecom global IWMCodecInfo3 IID_IWMCodecInfo3 "{}" #comfunc global IWMCodecInfo3_GetCodecFormatProp 8 var,int,int,wstr,var,var,var #comfunc global IWMCodecInfo3_GetCodecProp 9 var,int,wstr,var,var,var #comfunc global IWMCodecInfo3_SetCodecEnumerationSetting 10 var,int,wstr,int,var,int #comfunc global IWMCodecInfo3_GetCodecEnumerationSetting 11 var,int,wstr,var,var,var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。#define global IID_IWMCodecInfo3 "{7E51F487-4D93-4F98-8AB4-27D0565ADC51}" #usecom global IWMCodecInfo3 IID_IWMCodecInfo3 "{}" #comfunc global IWMCodecInfo3_GetCodecFormatProp 8 sptr,int,int,wstr,sptr,sptr,sptr #comfunc global IWMCodecInfo3_GetCodecProp 9 sptr,int,wstr,sptr,sptr,sptr #comfunc global IWMCodecInfo3_SetCodecEnumerationSetting 10 sptr,int,wstr,int,sptr,int #comfunc global IWMCodecInfo3_GetCodecEnumerationSetting 11 sptr,int,wstr,sptr,sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。