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

IPersistMediaPropertyBag

COM
IID5738e040-b67f-11d0-bd4d-00a0c911ce86継承元IPersist自前メソッド開始 vtbl4

公式ドキュメント

IPersistMediaPropertyBag インターフェイスは、Audio-Video Interleaved (AVI) ストリーム内の INFO チャンクおよび DISP チャンクの設定と取得を行います。

メソッド 3

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

vtbl 4 HRESULT InitNew()

InitNew メソッドは、新しいプロパティを受け取れるようにオブジェクトを初期化します。

戻り値

S_OK を返します。

解説(Remarks)

AVI Mux フィルターに対してこのメソッドを呼び出すと、Load メソッドを使用して以前に設定されたプロパティがすべてクリアされます。

AVI Splitter フィルターまたは WAVE Parser フィルターに対してこのメソッドを呼び出しても、何の効果もありません。

vtbl 5 HRESULT Load(IMediaPropertyBag* pPropBag, IErrorLog* pErrorLog)

Load メソッドは、メディアプロパティバッグからプロパティを読み込んでフィルターに反映します。

pPropBagIMediaPropertyBag*in呼び出し側が作成したメディアプロパティバッグの IMediaPropertyBag インターフェイスへのポインター。
pErrorLogIErrorLog*in予約済み。値を NULL に設定してください。

戻り値

HRESULT 値を返します。取り得る値には次のものがあります。

Return code Description
S_OK
成功しました。
E_POINTER
NULL ポインター引数です。
STG_E_ACCESSDENIED
アクセスが拒否されました。
VFW_E_WRONG_STATE
フィルターグラフが停止状態ではありません。

解説(Remarks)

プロパティを AVI ストリームに書き込むには、AVI Mux フィルターに対してこのメソッドを呼び出します。フィルターが停止しているとき、つまりファイルを作成するためにフィルターグラフを実行する前にこのメソッドを呼び出してください。グラフが実行されると、フィルターは INFO チャンクを AVI ヘッダーに書き込みます。

次のコード例は、ファイルに IART (作成者名) INFO チャンクを追加します。

C++
IPersistMediaPropertyBag *pPersist = NULL;
IMediaPropertyBag *pBag = NULL;
VARIANT val;

// Query the AVI Mux filter for IPersistMediaPropertyBag (not shown).

CoCreateInstance(CLSID_MediaPropertyBag, NULL, CLSCTX_INPROC, IID_IMediaPropertyBag, (LPVOID *)&pBag);

val.vt = VT_BSTR; val.bstrVal = SysAllocString(OLESTR("Author Name")); pBag->Write(OLESTR("INFO/IART"), &val); pPersist->Load(pBag, NULL); VariantClear(&val);

AVI Splitter フィルターおよび WAVE Parser は、このメソッドをサポートしていません。
vtbl 6 HRESULT Save(IMediaPropertyBag* pPropBag, BOOL fClearDirty, BOOL fSaveAllProperties)

Save メソッドは、フィルターのプロパティをメディアプロパティバッグに保存します。

pPropBagIMediaPropertyBag*in呼び出し側が作成したメディアプロパティバッグの IMediaPropertyBag インターフェイスへのポインター。
fClearDirtyBOOLin予約済み。任意の値を指定できます。
fSaveAllPropertiesBOOLin予約済み。任意の値を指定できます。

戻り値

HRESULT 値を返します。取り得る値には次のものがあります。

Return code Description
S_OK
成功しました。
E_NOTIMPL
実装されていません。
E_OUTOFMEMORY
メモリが不足しています。
HRESULT_FROM_WIN32(ERROR_INVALID_DATA)
無効なデータです。

解説(Remarks)

AVI Splitter フィルターまたは WAVE Parser に対してこのメソッドを呼び出すと、フィルターはファイルから INFO チャンクおよび DISP チャンクを読み取り、メディアプロパティバッグに格納します。IMediaPropertyBag::EnumProperty メソッドを使用してチャンクを取得できます。

AVI Mux フィルターは、このメソッドを実装していません。

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_IPersistMediaPropertyBag "{5738E040-B67F-11D0-BD4D-00A0C911CE86}"
#usecom global IPersistMediaPropertyBag IID_IPersistMediaPropertyBag "{}"
#comfunc global IPersistMediaPropertyBag_InitNew  4
#comfunc global IPersistMediaPropertyBag_Load     5 sptr,sptr
#comfunc global IPersistMediaPropertyBag_Save     6 sptr,int,int
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。