Compartilhar via


Função MFEnumDeviceSources (mfidl.h)

Enumera uma lista de dispositivos de captura de áudio ou vídeo.

Sintaxe

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

Parâmetros

[in] pAttributes

Ponteiro para um repositório de atributos que contém critérios de pesquisa. Para criar o repositório de atributos, chame MFCreateAttributes. Defina um ou mais dos seguintes atributos no repositório de atributos:

Valor Significado
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE
Especifica se os dispositivos de áudio ou vídeo devem ser enumerados. (Obrigatório.)
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_ROLE
Para dispositivos de captura de áudio, especifica a função do dispositivo. (Opcional).
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_CATEGORY
Para dispositivos de captura de vídeo, especifica a categoria do dispositivo. (Opcional).

[out] pppSourceActivate

Recebe uma matriz de ponteiros de interface IMFActivate . Cada ponteiro representa um objeto de ativação para uma fonte de mídia. A função aloca a memória para a matriz. O chamador deve liberar os ponteiros na matriz e chamar CoTaskMemFree para liberar a memória da matriz.

[out] pcSourceActivate

Recebe o número de elementos na matriz pppSourceActivate . Se nenhum dispositivo de captura corresponder aos critérios de pesquisa, esse parâmetro receberá o valor 0.

Retornar valor

Se essa função for bem-sucedida, ela retornará S_OK. Caso contrário, ele retornará um código de erro HRESULT.

Comentários

Cada ponteiro IMFActivate retornado representa um dispositivo de captura e pode ser usado para criar uma fonte de mídia para esse dispositivo. Você também pode usar o ponteiro IMFActivate para consultar atributos que descrevem o dispositivo. Os seguintes atributos podem ser definidos:

Atributo Descrição
MF_DEVSOURCE_ATTRIBUTE_FRIENDLY_NAME O nome de exibição do dispositivo.
MF_DEVSOURCE_ATTRIBUTE_MEDIA_TYPE O tipo principal e os GUIDs de subtipo que descrevem o formato de saída do dispositivo.
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE O tipo de dispositivo de captura (áudio ou vídeo).
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_ENDPOINT_ID A cadeia de caracteres de ID do ponto de extremidade de áudio. (Somente dispositivos de áudio.)
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_CATEGORY A categoria do dispositivo. (Somente dispositivos de vídeo.)
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_HW_SOURCE Se um dispositivo é um dispositivo de hardware ou software. (Somente dispositivos de vídeo.)
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_SYMBOLIC_LINK O link simbólico para o driver de dispositivo. (Somente dispositivos de vídeo.)
 

Para criar uma fonte de mídia de um ponteiro IMFActivate , chame o método IMFActivate::ActivateObject .

Exemplos

O exemplo a seguir enumera os dispositivos de captura de vídeo no sistema e cria uma fonte de mídia para o primeiro dispositivo na lista.

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;
}

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 7 [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows Server 2008 R2 [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho mfidl.h
Biblioteca Mf.lib
DLL Mf.dll

Confira também

Captura de áudio/vídeo na Media Foundation

Funções do Media Foundation