オブジェクトにキーと値の組み合わせを格納する方法が提供されます。
空のIMFAttributesを作成できます。
HRESULT MFCreateAttributes(
IMFAttributes **ppMFAttributes,
UINT32 cInitialSize // 属性ストアに割り当てる要素の最初の数。必要に応じて増加する
);
MFCreateAttributes function | Microsoft Learn
すべての属性を、他の属性ストアへコピーできます。
HRESULT CopyAllItems( [in] IMFAttributes *pDest );IMFAttributes::CopyAllItems (mfobjects.h) - Win32 apps | Microsoft Learn
IMFMediaType* pTo; HRESULT hr = MFCreateMediaType(&pTo); hr = pFrom->CopyAllItems(pTo);
HRESULT GetItemType( [in] REFGUID guidKey, [out] MF_ATTRIBUTE_TYPE *pType );IMFAttributes::GetItemType (mfobjects.h) - Win32 apps | Microsoft Learn
IMFMediaType* pType = ... UINT32 cAttrCount; HRESULT hr = pType->GetCount(&cAttrCount); for (UINT32 nIndex = 0; nIndex < cAttrCount; nIndex++) { GUID guidId; hr = pType->GetItemByIndex(nIndex, &guidId, NULL); MF_ATTRIBUTE_TYPE attrType; hr = pType->GetItemType(guidId, &attrType); switch (attrType) { case MF_ATTRIBUTE_GUID: GUID Val; hr = pType->GetGUID(guidId, &Val); break; case MF_ATTRIBUTE_STRING: UINT32 cchLength = 0; hr = pType->GetStringLength(guidId, &cchLength); WCHAR* pString = NULL; hr = pType->GetString(guidId, pString, cchLength + 1, &cchLength); break; } }
関数 | 機能 |
---|---|
SetUINT32 | UINT32値を、キーに関連付けられる |
SetUINT64 | UINT64値を、キーに関連付けられる |
SetDouble | double値を、キーに関連付けられる |
SetString | ワイド文字列を、キーに関連付けられる |
SetUnknown | IUnknownポインタを、キーに関連付けられる |
関数 | 機能 |
---|---|
SetBlob | byte配列を、キーに関連付けられる |
SetGUID | GUID値を、キーに関連付けられる |
GUIDで示すキーに、新しい値を設定できます。
HRESULT SetGUID( REFGUID guidKey, // 設定する値を識別するGUID REFGUID guidValue // キーの新しい値 );IMFAttributes::SetGUID | Microsoft Learn
guidKeyに指定するGUIDは、Media Foundation Attributesで確認できます。たとえば、
pMediaType->SetGUID(MF_MT_SUBTYPE, guidValue);
のように映像にサブタイプを設定するときには、guidValueにはVideo Subtype GUIDsにある値を指定します。
HRESULT SetUnknown( [in] REFGUID guidKey, [in] IUnknown *pUnknown );IMFAttributes::SetUnknown (mfobjects.h) - Win32 apps | Microsoft Learn
関数 | 機能 |
---|---|
GetUINT32 | キーに関連付けられているUINT32値を、取得できる |
GetUINT64 | キーに関連付けられているUINT64値を、取得できる |
GetDouble | キーに関連付けられているdouble値を、取得できる |
GetString | キーに関連付けられているワイド文字列を、取得できる |
GetUnknown | キーに関連付けられているインターフェイス ポインタを、取得できる |
関数 | 機能 |
---|---|
GetGUID | Retrieves a GUID value associated with a key. |
GetItem | Retrieves the value associated with a key. |
GetItemByIndex | Retrieves an attribute at the specified index. |
GetItemType | Retrieves the data type of the value associated with a key. |
関数 | 機能 |
---|---|
GetBlob | Retrieves a byte array associated with a key. This method copies the array into a caller-allocated buffer. |
GetAllocatedBlob | Retrieves a byte array associated with a key. This method allocates the memory for the array. |
GetAllocatedString | Gets a wide-character string associated with a key. This method allocates the memory for the string. |
HRESULT GetGUID( REFGUID guidKey, GUID *pguidValue );IMFAttributes::GetGUID | Microsoft Learn
guidKeyに一致する値が見つからなかったときは、pguidValueの値は変更されません。
キーに関連付けられている、インターフェイス ポインタを取得できます。
HRESULT GetUnknown( [in] REFGUID guidKey, [in] REFIID riid, [out] LPVOID *ppv );IMFAttributes::GetUnknown (mfobjects.h) - Win32 apps | Microsoft Learn
SetUnknown()とは異なり取得時にはGUIDが必要なため、それが指定された構造体などを継承している場合には、その継承元の型を指定してポインタを取得します。
オブジェクトに格納されているIMFAttributesオブジェクトの値は、下表の関数から取得できます。
関数 | 機能 | 代替 |
---|---|---|
MFGetAttributeRatio() | Retrieves an attribute whose value is a ratio. | MFGetAttribute2UINT32asUINT64() |
MFGetAttributeSize() | Retrieves an attribute whose value is a size, expressed as a width and height. | MFGetAttribute2UINT32asUINT64() |
MFGetAttributesAsBlob() | 属性ストアの内容を、バイト配列で取得できる | MFSerializeAttributesToStream() |
MFGetAttributesAsBlobSize() | MFGetAttributesAsBlob()で必要なバッファのサイズを取得できる | |
MFGetAttributeString() | Gets a string value from an attribute store. | IMFAttributes::GetAllocatedString() |
MFGetAttribute2UINT32asUINT64() | Gets an attribute whose value is two UINT32 values packed into a UINT64. | IMFAttributes::GetUINT64()で取得した値を、Unpack2UINT32AsUINT64()で分割 |
MFGetAttributeUINT32() | 属性があれば属性ストアから、なければ指定のUINT32値を取得できる | IMFAttributes::GetUINT32() |
MFGetAttributeUINT64() | 属性があれば属性ストアから、なければ指定のUINT64値を取得できる | IMFAttributes::GetUINT64() |
MFGetAttributeDouble() | 属性があれば属性ストアから、なければ指定のdouble値を取得できる | IMFAttributes::GetDouble() |
HRESULT hr = S_OK; IMFMediaType* pMediaType = NULL; hr = pSourceReader->GetCurrentMediaType(MF_SOURCE_READER_FIRST_VIDEO_STREAM, &pMediaType); // サブタイプを取得する GUID subtype; hr = pMediaType->GetGUID(MF_MT_SUBTYPE, &subtype); // ビデオフレームの幅と高さを取得する UINT32 width; UINT32 height; hr = MFGetAttributeSize(pMediaType, MF_MT_FRAME_SIZE, &width, &height); // 既定のストライド (次のピクセルの行へ移動するのに必要なバイト数) を取得する LONG lStride = 0; LONG unDefault = 1; // 属性がなかったときに戻される値 lStride = (LONG)MFGetAttributeUINT32(pMediaType, MF_MT_DEFAULT_STRIDE, unDefault); // ピクセルアスペクト比 (ピクセル縦横比) を取得する UINT32 numerator; UINT32 denominator; hr = MFGetAttributeRatio(pMediaType, MF_MT_PIXEL_ASPECT_RATIO, &numerator, &denominator);VideoThumbnail Sample - Win32 apps | Microsoft Learn
ビデオフレームの大きさを設定するときは、既定のストライドも設定します。
hr = MFSetAttributeSize(pMediaType, MF_MT_FRAME_SIZE, width, height); hr = pMediaType->SetUINT32(MF_MT_DEFAULT_STRIDE, width * 4);
HRESULT DeleteItem( [in] REFGUID guidKey );IMFAttributes::DeleteItem (mfobjects.h) - Win32 apps | Microsoft Learn