Поделиться через


Функция MFEnumDeviceSources (mfidl.h)

Перечисляет список устройств аудио- и видеозахвата.

Синтаксис

HRESULT MFEnumDeviceSources(
  [in]  IMFAttributes *pAttributes,
  [out] IMFActivate   ***pppSourceActivate,
  [out] UINT32        *pcSourceActivate
);

Параметры

[in] pAttributes

Указатель на хранилище атрибутов, содержащее условия поиска. Чтобы создать хранилище атрибутов, вызовите MFCreateAttributes. Задайте один или несколько следующих атрибутов в хранилище атрибутов:

Значение Значение
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE
Указывает, следует ли перечислять звуковые или видеоустройства. (Обязательно).
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_ROLE
Для устройств захвата звука указывает роль устройства. (Необязательно.)
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_CATEGORY
Для устройств захвата видео указывает категорию устройства. (Необязательно.)

[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

См. также раздел

Запись звука и видео в Media Foundation

Функции Media Foundation