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

IWMCodecInfo3

COM
IID7e51f487-4d93-4f98-8ab4-27d0565adc51継承元IWMCodecInfo2自前メソッド開始 vtbl8

公式ドキュメント

IWMCodecInfo3 インターフェイスは、コーデックからプロパティを取得します。IWMCodecInfo3 へのポインターは、プロファイルマネージャーオブジェクトの他の任意のインターフェイスの QueryInterface メソッドを呼び出すことで取得できます。

メソッド 4

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

vtbl 8 HRESULT GetCodecFormatProp(GUID* guidType, DWORD dwCodecIndex, DWORD dwFormatIndex, LPWSTR pszName, WMT_ATTR_DATATYPE* pType, BYTE* pValue, DWORD* pdwSize)

GetCodecFormatProp メソッドは、コーデックの 1 つのフォーマットからプロパティを取得します。

guidTypeGUID*in

デジタルメディアのメジャータイプを識別する GUID です。次の定数のいずれかである必要があります。

定数 説明
WMMEDIATYPE_Video ビデオコーデックを指定します。
WMMEDIATYPE_Audio オーディオコーデックを指定します。
dwCodecIndexDWORDinコーデックのインデックスを格納する DWORD です。値は 0 から、guidType で指定された種類のサポートされるコーデック数より 1 小さい値までの範囲です。メジャータイプをサポートする個々のコーデックの数を取得するには、IWMCodecInfo::GetCodecInfoCount メソッドを使用します。
dwFormatIndexDWORDinフォーマットのインデックスを格納する DWORD です。値は 0 から、サポートされるフォーマット数より 1 小さい値までの範囲です。コーデックがサポートする個々のフォーマットの数を取得するには、IWMCodecInfo::GetCodecFormatCount メソッドを使用します。
pszNameLPWSTRin

取得するプロパティの名前を格納する、ワイド文字の null 終端文字列へのポインターです。

現在サポートされているコーデックフォーマットプロパティは 1 つだけで、次の表に示します。フォーマットプロパティはプロパティのデータ型と値を決定し、この情報は表に含まれています。

グローバル定数 データ型 説明
g_wszSpeechCaps WMT_TYPE_DWORD 値は WMT_MUSICSPEECH_CLASS_MODE 列挙型のメンバーの 1 つで、フォーマットがサポートするモードを示します。このプロパティは Windows Media Audio 9 Voice コーデックにのみ適用されます。
pTypeWMT_ATTR_DATATYPE*outWMT_ATTR_DATATYPE 列挙型のメンバーを受け取る変数へのポインターです。この値は、pValue が指すバッファーに返される情報の型を指定します。
pValueBYTE*outプロパティの値を受け取るバッファーへのポインターです。返されるデータの型は pType で指定されます。
pdwSizeDWORD*inoutpValue が指すバッファーの長さを指定する DWORD 値へのポインターです。

戻り値

このメソッドは HRESULT を返します。取り得る値には次の表のものが含まれますが、これらに限定されません。

リターンコード 説明
S_OK
メソッドは成功しました。
E_INVALIDARG
pszNamepType、または pdwSizeNULL です。

または

guidType が無効な入力型を指定しています。

または

pszName が無効なプロパティ名を指定しています。

解説(Remarks)

取得したいプロパティごとに、GetCodecFormatProp を 2 回呼び出す必要があります。1 回目の呼び出しでは、pValueNULL を渡します。戻り値として、pdwSize には指定したプロパティの値を保持するために必要なバッファーサイズが設定されます。その後、必要な量のメモリをバッファーに割り当て、2 回目の呼び出しでそのポインターを pValue として渡します。

vtbl 9 HRESULT GetCodecProp(GUID* guidType, DWORD dwCodecIndex, LPWSTR pszName, WMT_ATTR_DATATYPE* pType, BYTE* pValue, DWORD* pdwSize)

GetCodecProp メソッドは、コーデックのプロパティを取得します。

guidTypeGUID*in

デジタルメディアのメジャータイプを識別する GUID です。次の定数のいずれかである必要があります。

定数 説明
WMMEDIATYPE_Video ビデオコーデックを指定します。
WMMEDIATYPE_Audio オーディオコーデックを指定します。
dwCodecIndexDWORDinコーデックのインデックスを格納する DWORD です。値は 0 から、guidType で指定された種類のサポートされるコーデック数より 1 小さい値までの範囲です。メジャータイプをサポートする個々のコーデックの数を取得するには、IWMCodecInfo::GetCodecInfoCount メソッドを使用します。
pszNameLPWSTRin

取得するプロパティの名前を格納する、null 終端文字列へのポインターです。

次の表に、取得できるコーデックプロパティの一覧を示します。プロパティはデータ型と値を規定し、この情報も表に含まれています。

グローバル定数 データ型 説明
g_wszComplexityMax WMT_TYPE_DWORD 値はコーデックの最大複雑度 (complexity) の値です。コーデックの複雑度はビデオコーデックにのみ適用されます。複雑度の値の範囲は 0 からこの値までです。
g_wszComplexityOffline WMT_TYPE_DWORD 値は、ローカル再生用にファイルをエンコードする際に推奨されるコーデックの複雑度の値です。コーデックの複雑度はビデオコーデックにのみ適用されます。複雑度の値の範囲は 0 から g_wszComplexityMax で取得した値までです。
g_wszComplexityLive WMT_TYPE_DWORD 値は、ストリーミング再生用にファイルをエンコードする際に推奨されるコーデックの複雑度の値です。コーデックの複雑度はビデオコーデックにのみ適用されます。複雑度の値の範囲は 0 から g_wszComplexityMax で取得した値までです。
g_wszIsVBRSupported WMT_TYPE_BOOL 値は、コーデックが VBR をサポートするかどうかを示します。
pTypeWMT_ATTR_DATATYPE*outWMT_ATTR_DATATYPE 列挙型のメンバーを受け取る変数へのポインターです。この値は、pValue のバッファーに返される情報の型を指定します。
pValueBYTE*outプロパティの値を受け取るバッファーへのポインターです。返されるデータの型は pType で指定されます。
pdwSizeDWORD*inoutpValue のバッファーの長さを指定する DWORD 値へのポインターです。

戻り値

このメソッドは HRESULT を返します。取り得る値には次の表のものが含まれますが、これらに限定されません。

リターンコード 説明
S_OK
メソッドは成功しました。
E_INVALIDARG
pszNamepType、または pdwSizeNULL です。

または

guidType が無効な入力型を指定しています。

または

pszName が無効なプロパティ名を指定しています。

解説(Remarks)

取得したいプロパティごとに、GetCodecProp を 2 回呼び出す必要があります。1 回目の呼び出しでは、pValueNULL を渡します。戻り値として、pdwSize には指定したプロパティの値を保持するために必要なバッファーサイズが設定されます。その後、必要な量のメモリをバッファーに割り当て、2 回目の呼び出しでそのポインターを pValue として渡します。

vtbl 10 HRESULT SetCodecEnumerationSetting(GUID* guidType, DWORD dwCodecIndex, LPWSTR pszName, WMT_ATTR_DATATYPE Type, BYTE* pValue, DWORD dwSize)

SetCodecEnumerationSetting メソッドは、1 つのコーデック列挙設定の値を設定します。コーデック列挙設定は、IWMCodecInfo のメソッドによって列挙できるコーデックフォーマットを規定します。

guidTypeGUID*in

デジタルメディアのメジャータイプを識別する GUID です。次の定数のいずれかである必要があります。

定数 説明
WMMEDIATYPE_Video ビデオコーデックを指定します。
WMMEDIATYPE_Audio オーディオコーデックを指定します。
dwCodecIndexDWORDinコーデックのインデックスを格納する DWORD です。値は 0 から、guidType で指定された種類のサポートされるコーデック数より 1 小さい値までの範囲です。メジャータイプをサポートする個々のコーデックの数を取得するには、IWMCodecInfo::GetCodecInfoCount メソッドを使用します。
pszNameLPWSTRin

列挙設定の名前を格納する、ワイド文字の null 終端文字列へのポインターです。次の定数のいずれかを使用します。

定数 説明
g_wszVBREnabled 可変ビットレート (VBR) エンコードを使用する、サポートされたコーデックフォーマットを列挙するために使用します。pValue に返される値は BOOL です。
g_wszNumPasses pValue の値に等しいパス数を使用する、サポートされたコーデックフォーマットを列挙するために使用します。pValue に返される値は、パス数を指定する DWORD です。
TypeWMT_ATTR_DATATYPEinpValue の値のデータ型を指定する WMT_ATTR_DATATYPE 値です。
pValueBYTE*in設定値を格納する BYTE 配列へのポインターです。
dwSizeDWORDinpValueBYTE 配列のサイズを格納する DWORD です。

戻り値

このメソッドは HRESULT を返します。取り得る値には次の表のものが含まれますが、これらに限定されません。

リターンコード 説明
S_OK
メソッドは成功しました。この機能はコーデックによってサポートされています。
NS_E_UNSUPPORTED_PROPERTY
指定された列挙設定は、このコーデックに対して有効ではありません。

解説(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 を返しません。

vtbl 11 HRESULT GetCodecEnumerationSetting(GUID* guidType, DWORD dwCodecIndex, LPWSTR pszName, WMT_ATTR_DATATYPE* pType, BYTE* pValue, DWORD* pdwSize)

GetCodecEnumerationSetting メソッドは、1 つのコーデック列挙設定の現在の値を取得します。

guidTypeGUID*in

デジタルメディアのメジャータイプを識別する GUID です。次の定数のいずれかである必要があります。

定数 説明
WMMEDIATYPE_Video ビデオコーデックを指定します。
WMMEDIATYPE_Audio オーディオコーデックを指定します。
dwCodecIndexDWORDinコーデックのインデックスを格納する DWORD です。値は 0 から、guidType で指定された種類のサポートされるコーデック数より 1 小さい値までの範囲です。メジャータイプをサポートする個々のコーデックの数を取得するには、IWMCodecInfo::GetCodecInfoCount メソッドを使用します。
pszNameLPWSTRin

列挙設定の名前を格納する、ワイド文字の null 終端文字列へのポインターです。次の定数のいずれかを使用します。

定数 説明
g_wszVBREnabled 可変ビットレート (VBR) エンコードを使用する、サポートされたコーデックフォーマットを列挙するために使用します。pValue に返される値は BOOL です。
g_wszNumPasses pValue の値に等しいパス数を使用する、サポートされたコーデックフォーマットを列挙するために使用します。pValue に返される値は、パス数を指定する DWORD です。
pTypeWMT_ATTR_DATATYPE*outpValue に返される値のデータ型を指定する WMT_ATTR_DATATYPE 列挙値へのポインターです。
pValueBYTE*outコーデック列挙データを格納する BYTE 配列へのポインターです。この配列に返されるデータの型と意味は、pszName で指定された設定によって異なります。この値を NULL に設定すると、必要な配列サイズを pdwSize に取得できます。
pdwSizeDWORD*inout設定値のサイズ (バイト単位) を格納する DWORD へのポインターです。pValueNULL に設定した場合、この値には設定値を保持するために必要なサイズが設定されます。

戻り値

このメソッドは HRESULT を返します。取り得る値には次の表のものが含まれますが、これらに限定されません。

リターンコード 説明
S_OK
メソッドは成功しました。
NS_E_UNSUPPORTED_PROPERTY
指定された列挙設定は、このコーデックに対して有効ではありません。
出典・ライセンス: 上記「公式ドキュメント」の内容は 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_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 方式にも切替可。