Función MFEnumDeviceSources (mfidl.h)

Enumera una lista de dispositivos de captura de audio o vídeo.

Sintaxis

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

Parámetros

[in] pAttributes

Puntero a un almacén de atributos que contiene criterios de búsqueda. Para crear el almacén de atributos, llame a MFCreateAttributes. Establezca uno o varios de los atributos siguientes en el almacén de atributos:

Valor Significado
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE
Especifica si se van a enumerar los dispositivos de audio o vídeo. (Requerido)
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_ROLE
En el caso de los dispositivos de captura de audio, especifica el rol de dispositivo. (Opcional).
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_CATEGORY
En el caso de los dispositivos de captura de vídeo, especifica la categoría de dispositivo. (Opcional).

[out] pppSourceActivate

Recibe una matriz de punteros de interfaz IMFActivate . Cada puntero representa un objeto de activación para un origen multimedia. La función asigna la memoria de la matriz. El llamador debe liberar los punteros de la matriz y llamar a CoTaskMemFree para liberar la memoria de la matriz.

[out] pcSourceActivate

Recibe el número de elementos de la matriz pppSourceActivate . Si ningún dispositivo de captura coincide con los criterios de búsqueda, este parámetro recibe el valor 0.

Valor devuelto

Si esta función se realiza correctamente, devuelve S_OK. De lo contrario, devuelve un código de error de HRESULT.

Comentarios

Cada puntero IMFActivate devuelto representa un dispositivo de captura y se puede usar para crear un origen multimedia para ese dispositivo. También puede usar el puntero IMFActivate para consultar los atributos que describen el dispositivo. Es posible que se establezcan los siguientes atributos:

Atributo Descripción
MF_DEVSOURCE_ATTRIBUTE_FRIENDLY_NAME Nombre para mostrar del dispositivo.
MF_DEVSOURCE_ATTRIBUTE_MEDIA_TYPE Guid de tipo principal y subtipo que describen el formato de salida del dispositivo.
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE Tipo de dispositivo de captura (audio o vídeo).
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_ENDPOINT_ID Cadena de identificador de punto de conexión de audio. (Solo dispositivos de audio).
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_CATEGORY Categoría del dispositivo. (Solo dispositivos de vídeo).
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_HW_SOURCE Si un dispositivo es un dispositivo de hardware o software. (Solo dispositivos de vídeo).
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_SYMBOLIC_LINK Vínculo simbólico para el controlador de dispositivo. (Solo dispositivos de vídeo).
 

Para crear una fuente de medios a partir de un puntero IMFActivate , llame al método IMFActivate::ActivateObject .

Ejemplos

En el ejemplo siguiente se enumeran los dispositivos de captura de vídeo en el sistema y se crea un origen multimedia para el primer dispositivo de la 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 Value
Cliente mínimo compatible Windows 7 [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2008 R2 [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado mfidl.h
Library Mf.lib
Archivo DLL Mf.dll

Consulte también

Captura de audio y vídeo en Media Foundation

Funciones de Media Foundation