Функция MFEnumDeviceSources (mfidl.h)
Перечисляет список устройств аудио- и видеозахвата.
Синтаксис
HRESULT MFEnumDeviceSources(
[in] IMFAttributes *pAttributes,
[out] IMFActivate ***pppSourceActivate,
[out] UINT32 *pcSourceActivate
);
Параметры
[in] pAttributes
Указатель на хранилище атрибутов, содержащее условия поиска. Чтобы создать хранилище атрибутов, вызовите MFCreateAttributes. Задайте один или несколько следующих атрибутов в хранилище атрибутов:
[out] pppSourceActivate
Получает массив указателей интерфейса IMFActivate . Каждый указатель представляет объект активации для источника мультимедиа. Функция выделяет память для массива. Вызывающий объект должен освободить указатели в массиве и вызвать CoTaskMemFree , чтобы освободить память для массива.
[out] pcSourceActivate
Получает количество элементов в массиве pppSourceActivate . Если никакие устройства записи не соответствуют условиям поиска, этот параметр получает значение 0.
Возвращаемое значение
Если эта функция завершается успешно, она возвращает S_OK. В противном случае возвращается код ошибки HRESULT .
Комментарии
Каждый возвращенный указатель IMFActivate представляет устройство захвата и может использоваться для создания источника мультимедиа для этого устройства. Вы также можете использовать указатель IMFActivate для запроса атрибутов, описывающих устройство. Могут быть заданы следующие атрибуты:
attribute | Описание |
---|---|
MF_DEVSOURCE_ATTRIBUTE_FRIENDLY_NAME | Отображаемое имя для этого устройства. |
MF_DEVSOURCE_ATTRIBUTE_MEDIA_TYPE | Идентификаторы GUID основного типа и подтипа, описывающие формат вывода устройства. |
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE | Тип устройства захвата (аудио или видео). |
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_ENDPOINT_ID | Строка идентификатора конечной точки аудио. (Только звуковые устройства.) |
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_CATEGORY | Категория устройства. (Только видеоустройства.) |
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_HW_SOURCE | Является ли устройство аппаратным или программным устройством. (Только видеоустройства.) |
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_SYMBOLIC_LINK | Символьная ссылка для драйвера устройства. (Только видеоустройства.) |
Чтобы создать источник мультимедиа из указателя IMFActivate , вызовите метод IMFActivate::ActivateObject .
Примеры
В следующем примере перечисляются устройства записи видео в системе и создается источник мультимедиа для первого устройства в списке.
HRESULT CreateVideoDeviceSource(IMFMediaSource **ppSource)
{
*ppSource = NULL;
IMFMediaSource *pSource = NULL;
IMFAttributes *pAttributes = NULL;
IMFActivate **ppDevices = NULL;
// Create an attribute store to specify the enumeration parameters.
HRESULT hr = MFCreateAttributes(&pAttributes, 1);
if (FAILED(hr))
{
goto done;
}
// Source type: video capture devices
hr = pAttributes->SetGUID(
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE,
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_GUID
);
if (FAILED(hr))
{
goto done;
}
// Enumerate devices.
UINT32 count;
hr = MFEnumDeviceSources(pAttributes, &ppDevices, &count);
if (FAILED(hr))
{
goto done;
}
if (count == 0)
{
hr = E_FAIL;
goto done;
}
// Create the media source object.
hr = ppDevices[0]->ActivateObject(IID_PPV_ARGS(&pSource));
if (FAILED(hr))
{
goto done;
}
*ppSource = pSource;
(*ppSource)->AddRef();
done:
SafeRelease(&pAttributes);
for (DWORD i = 0; i < count; i++)
{
SafeRelease(&ppDevices[i]);
}
CoTaskMemFree(ppDevices);
SafeRelease(&pSource);
return hr;
}
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows 7 [только классические приложения] |
Минимальная версия сервера | Windows Server 2008 R2 [только классические приложения] |
Целевая платформа | Windows |
Header | mfidl.h |
Библиотека | Mf.lib |
DLL | Mf.dll |