WMDM_FORMAT_CAPABILITY
The WMDM_FORMAT_CAPABILITY structure describes the capabilities of a device for a particular format. This structure contains a set of property configurations in an array of WMDM_PROP_CONFIG structures. Each property configuration represents a set of compatible property values across all the properties supported for a given format. The application can get this structure by calling the IWMDMDevice3::GetFormatCapability method and passing in the format code. For a list of format codes, see WMDM_FORMATCODE.
Syntax
typedef struct WMDM_FORMAT_CAPABILITY{UINT nPropConfig;[size_is(nPropConfig)] WMDM_PROP_CONFIG* pConfigs;};
Members
nPropConfig
Number of property configurations in the pConfigs array.
pConfigs
Pointer to an array of WMDM_PROP_CONFIG structures. The size of array is equal to the value of nPropConfig.
Remarks
The WMDM_FORMAT_CAPABILITY structure provides a flexible mechanism to express the capabilities of the device for a particular format.
If the content is meant to be rendered by the device (for example, an audio file to be played by the device), the properties of the content must match one of the property configurations returned by IWMDMDevice3::GetFormatCapability in the WMDM_FORMAT_CAPABILITY structure. For example, for an audio file, the bit rate and sample rate must satisfy one of the property configurations returned.
The caller is responsible for freeing the memory allocated for this structure. The following function demonstrates how to clear a WMDM_FORMAT_CAPABILITY structure.
void FreeFormatCapability(WMDM_FORMAT_CAPABILITY formatCap)
{
// Loop through all configurations.
for (UINT i=0; i < formatCap.nPropConfig; i++)
{
// Loop through all descriptions of a configuration and delete
// the values particular to that description type.
for (UINT j=0; j < formatCap.pConfigs[i].nPropDesc; j++)
{
switch (formatCap.pConfigs[i].pPropDesc[j].ValidValuesForm)
{
case WMDM_ENUM_PROP_VALID_VALUES_ENUM:
for (UINT k=0; k < formatCap.pConfigs[i].pPropDesc[j].ValidValues.EnumeratedValidValues.cEnumValues; k++)
{
PropVariantClear (&(formatCap.pConfigs[i].pPropDesc[j].ValidValues.EnumeratedValidValues.pValues[k]));
}
CoTaskMemFree(formatCap.pConfigs[i].pPropDesc[j].ValidValues.EnumeratedValidValues.pValues);
break;
case WMDM_ENUM_PROP_VALID_VALUES_RANGE:
PropVariantClear (&(formatCap.pConfigs[i].pPropDesc[j].ValidValues.ValidValuesRange.rangeMin));
PropVariantClear (&(formatCap.pConfigs[i].pPropDesc[j].ValidValues.ValidValuesRange.rangeMax));
PropVariantClear (&(formatCap.pConfigs[i].pPropDesc[j].ValidValues.ValidValuesRange.rangeStep));
break;
case WMDM_ENUM_PROP_VALID_VALUES_ANY:
// No dynamically allocated memory for this value.
default:
break;
}
// Free the memory for the description name.
CoTaskMemFree(formatCap.pConfigs[i].pPropDesc[j].pwszPropName);
}
// Free the memory holding the array of description items for this configuration.
CoTaskMemFree(formatCap.pConfigs[i].pPropDesc);
}
// Free the memory pointing to the array of configurations.
CoTaskMemFree(formatCap.pConfigs);
formatCap.nPropConfig = 0;
}
Requirements
Header: Defined in wmdm.idl.
Library: mssachlp.lib
See Also