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

IWMPropertyVault

COM
IID72995a79-5090-42a4-9c8c-d9d0b6d34be5継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

IWMPropertyVault インターフェイスは、プロパティを格納および取得するためのメソッドを提供します。

メソッド 6

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

vtbl 3 HRESULT GetPropertyCount(DWORD* pdwCount)

GetPropertyCount メソッドは、プロパティボールト内のすべてのプロパティの数を取得します。

pdwCountDWORD*inプロパティ数を受け取る DWORD へのポインター。

戻り値

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

戻り値 説明
S_OK
メソッドが成功しました。
E_INVALIDARG
pdwCount が NULL です。
vtbl 4 HRESULT GetPropertyByName(LPWSTR pszName, WMT_ATTR_DATATYPE* pType, BYTE* pValue, DWORD* pdwSize)

GetPropertyByName メソッドは、名前を指定してボールトからプロパティを取得します。

pszNameLPWSTRin取得するプロパティの名前を格納した null 終端文字列へのポインター。
pTypeWMT_ATTR_DATATYPE*outWMT_ATTR_DATATYPE 列挙型のメンバーへのポインター。このパラメーターは、pValue が指すデータの型を指定します。
pValueBYTE*outプロパティの値を格納したデータバッファーへのポインター。この値は、複数の型のいずれかになります。出力時にバッファーが格納するデータの型は、pType の値によって指定されます。
pdwSizeDWORD*inoutpValue のデータのサイズ(バイト単位)を格納した DWORD へのポインター。

戻り値

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

戻り値 説明
S_OK
メソッドが成功しました。
E_INVALIDARG
pszNamepdwSize、または pTypeNULL です。

または

pszName に無効なプロパティ名が含まれています。

ASF_E_BUFFERTOOSMALL
pdwSize に指定された pValue のサイズが、データを保持するのに十分な大きさではありません。

解説(Remarks)

プロパティの値を正しく取得するには、GetPropertyByName を 2 回呼び出す必要があります。1 回目の呼び出しでは、pValueNULL を渡します。呼び出しが戻ると、pdwSize はバッファーの正しいサイズを指します。次に 2 回目の呼び出しで、適切なサイズのバッファーを pValue として渡し、データを受け取ります。

vtbl 5 HRESULT SetProperty(LPWSTR pszName, WMT_ATTR_DATATYPE pType, BYTE* pValue, DWORD dwSize)

SetProperty メソッドは、プロパティの値を設定します。指定した名前のプロパティがプロパティボールトに既に存在する場合、SetProperty はその値を指定どおりに変更します。指定した名前のプロパティが存在しない場合、SetProperty はそれをプロパティボールトに追加します。

pszNameLPWSTRin

設定するプロパティの名前を格納した null 終端文字列へのポインター。

次の表に、IWMPropertyVault インターフェイスがサポートするプロパティ名を示します。使用するプロパティによって、pValue が指すデータの型と意味が決まります。これらの値も表に示されています。これらの値はすべて、ストリーム構成オブジェクトに適用されます。

グローバル定数 データ型 説明
g_wszOriginalSourceFormatTag WMT_TYPE_WORD スマート再圧縮でトランスコードする場合、元のエンコードで使用された WAVEFORMATEX.wFormatTag に設定します。この値は現在は廃止されており、代わりに g_wszOriginalWaveFormat を使用してください。
g_wszOriginalWaveFormat WMT_TYPE_BINARY スマート再圧縮でトランスコードする場合、元のエンコードで使用された WAVEFORMATEX 構造体に設定します。
g_wszEDL WMT_TYPE_STRING Windows Media Audio 9 Voice ストリームの場合、音楽を含むストリームのセクションを手動で指定するために使用します。このプロパティは、コーデックによる自動選択が低品質のストリームを生成する場合にのみ使用してください。
g_wszComplexity WMT_TYPE_WORD 目的の複雑度設定に設定します。コーデックがサポートする複雑度レベルは、IWMCodecInfo3::GetCodecProp を呼び出すことで確認できます。
g_wszDecoderComplexityRequested WMT_TYPE_STRING ストリームをエンコードするデバイス適合テンプレートの文字列値に設定します。オーディオの場合は文字列値は 1 つだけです。ビデオの場合は、アンパサンドの前の 2 文字の指定を使用します。詳細については、Device Conformance Template Parameters を参照してください。
g_wszPeakValue WMT_TYPE_DWORD オーディオコーデックによってピーク音量レベルに設定されます。正規化に使用されます。手動で設定しないでください。
g_wszAverageLevel WMT_TYPE_DWORD オーディオコーデックによって平均音量レベルに設定されます。正規化に使用されます。手動で設定しないでください。
g_wszFold6To2Channels3 WMT_TYPE_STRING 6 チャンネルから 2 チャンネルへのフォールドダウンの値に設定します。マルチチャンネルオーディオに使用します。
g_wszFoldToChannelsTemplate WMT_TYPE_STRING 他のフォールドダウン値を作成するためのテンプレート文字列。
g_wszMusicSpeechClassMode WMT_TYPE_STRING Windows Media Audio 9 Voice コーデックで使用するエンコードの種類に設定します。次のいずれかに設定できます。g_wszMusicClassMode

g_wszSpeechClassMode

g_wszMixedClassMode

表内の値に加えて、可変ビットレートエンコードの設定もこのメソッドを使用して設定します。詳細については、Configuring VBR Streams を参照してください。

pTypeWMT_ATTR_DATATYPEinWMT_ATTR_DATATYPE 列挙型のメンバーへのポインター。このパラメーターは、pValue が指すデータの型を指定します。
pValueBYTE*inプロパティの値を格納したデータバッファーへのポインター。この値は、複数の型のいずれかになります。出力時にバッファーが格納するデータの型は、pType の値によって指定されます。
dwSizeDWORDinpValue のデータのサイズ(バイト単位)を格納した DWORD

戻り値

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

戻り値 説明
S_OK
メソッドが成功しました。
E_INVALIDARG
pszNameNULL であるか、長さ 0 の文字列を指しています。

または

pValue で指定された型が、dwSize で指定されたサイズ(バイト単位)と一致しません。

または

プロパティボールトに存在しないプロパティを削除しようとしています。

E_OUTOFMEMORY
新しいプロパティのためのメモリを割り当てられません。

または

新しい値のためのメモリを割り当てられません。

解説(Remarks)

このメソッドを使用してストリーム構成オブジェクトに設定されたプロパティは、そのストリーム構成が追加されるプロファイルに永続化されます。ただし、そのプロファイルを使用して作成されたファイルには、これらのプロパティはヘッダー情報に含まれません。

SetProperty は、影響を受けたプロパティのインデックスを返しません。新しいプロパティには、順番にインデックスが割り当てられます。

pValueNULL を渡すか、dwSize に 0 を渡すことで、SetProperty を使用してプロパティを削除できます。

vtbl 6 HRESULT GetPropertyByIndex(DWORD dwIndex, LPWSTR pszName, DWORD* pdwNameLen, WMT_ATTR_DATATYPE* pType, BYTE* pValue, DWORD* pdwSize)

GetPropertyByIndex メソッドは、インデックス値を指定してボールトからプロパティを取得します。

dwIndexDWORDinプロパティインデックスを格納した DWORD
pszNameLPWSTRoutプロパティの名前を格納したワイド文字の null 終端文字列へのポインター。
pdwNameLenDWORD*inout入力時には、pszName の文字列の長さ(ワイド文字単位)を格納した DWORD へのポインター。出力時には、プロパティ名を保持するために必要な文字数(終端の null 文字を含む)を指定します。
pTypeWMT_ATTR_DATATYPE*outWMT_ATTR_DATATYPE 列挙型のメンバーへのポインター。このパラメーターは、pValue が指すデータの型を指定します。
pValueBYTE*outプロパティの値を格納したデータバッファーへのポインター。この値は、複数の型のいずれかになります。出力時にバッファーが格納するデータの型は、pType の値によって指定されます。
pdwSizeDWORD*inoutpValue のデータのサイズ(バイト単位)を格納した DWORD へのポインター。

戻り値

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

戻り値 説明
S_OK
メソッドが成功しました。
E_INVALIDARG
pdwNameLenpdwSize、または pTypeNULL です。

または

指定されたインデックスが無効です。

ASF_E_BUFFERTOOSMALL
バッファー(pszName または pValue)のいずれかが、プロパティ情報を保持するのに十分な大きさではありません。

解説(Remarks)

すべての情報を正しく取得するには、GetPropertyByIndex を 2 回呼び出す必要があります。1 回目の呼び出しでは、pszNamepValue の両方に NULL を渡します。呼び出しが戻ると、pdwNameLenpdwSize はそれぞれのバッファーの正しいサイズを指します。次に 2 回目の呼び出しで、適切なサイズのバッファーを pszNamepValue として渡し、データを受け取ります。

vtbl 7 HRESULT CopyPropertiesFrom(IWMPropertyVault* pIWMPropertyVault)

CopyPropertiesFrom メソッドは、別のプロパティボールトからこのプロパティボールトにすべてのプロパティをコピーします。

pIWMPropertyVaultIWMPropertyVault*inIWMPropertyVault インターフェイスへのポインター。

戻り値

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

戻り値 説明
S_OK
メソッドが成功しました。
E_OUTOFMEMORY
コピーに必要なメモリを割り当てられません。

解説(Remarks)

pIWMPropertyVaultNULL を渡すと、予期しないエラーが発生します。

CopyPropertiesFrom は、IWMPropertyVault の他のメソッドを呼び出します。すべてのデータはオブジェクト自体から取得されるため、他のメソッドからエラーが返されることはありません。表に記載されていない戻りコードは、コピー元のプロパティボールト内のデータが破損していることを示します。

vtbl 8 HRESULT Clear()

Clear メソッドは、プロパティボールトからすべての項目を削除します。

戻り値

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

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_IWMPropertyVault "{72995A79-5090-42A4-9C8C-D9D0B6D34BE5}"
#usecom global IWMPropertyVault IID_IWMPropertyVault "{}"
#comfunc global IWMPropertyVault_GetPropertyCount    3 var
#comfunc global IWMPropertyVault_GetPropertyByName   4 wstr,var,var,var
#comfunc global IWMPropertyVault_SetProperty         5 wstr,int,var,int
#comfunc global IWMPropertyVault_GetPropertyByIndex  6 int,var,var,var,var,var
#comfunc global IWMPropertyVault_CopyPropertiesFrom  7 sptr
#comfunc global IWMPropertyVault_Clear               8
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。