Note: ImmDeviceCollection and IMMDevice are part of the MMDeviceAPI, which is new for Windows Vista. These interfaces are declared in Mmdeviceapi.h. Also note that the collection that is referenced by the IMMDeviceCollection object contains items that support the IMMDevice interface. This collection contains only one audio endpoint item that supports IMMEndpoint.
To find this item, the APO can traverse the list of items and call QueryInterface on each item until it finds the one that supports IMMEndpoint. Once the APO has identified the endpoint item, the APO can use IMMEndpoint::GetDataFlow to determine whether that endpoint is an input or an output. The APO can also access the property store to get more information about the PKEY_AudioEndpoint_FormFactor.
The number and types of other items in the collection depend on the underlying implementation of the audio endpoint. For typical audio devices that are supported by PortCls, AVStream, and other Kernel Streaming drivers, the collection items represent the KS filters that are implemented by the driver. If the APO needs to interact directly with the audio hardware driver, the APO can do so via the IDeviceTopolgy interface of one or more of the IMMDevice items (not the endpoint item) referenced by the IMMDeviceCollection object. To activate and use the IDeviceTopolgy interface for an IMMDevice item, the APO must call IMMDevice::Activate, and provide the REFIID for the IDeviceTopology interface for the item. However for most APOs, direct interaction with the hardware driver should not be necessary.
|