Condividi tramite


Funzione MFEnumDeviceSources (mfidl.h)

Enumera un elenco di dispositivi di acquisizione audio o video.

Sintassi

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

Parametri

[in] pAttributes

Puntatore a un archivio attributi che contiene criteri di ricerca. Per creare l'archivio attributi, chiamare MFCreateAttributes. Impostare uno o più degli attributi seguenti nell'archivio attributi:

Valore Significato
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE
Specifica se enumerare i dispositivi audio o video. Obbligatorio.
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_ROLE
Per i dispositivi di acquisizione audio, specifica il ruolo del dispositivo. Facoltativo.
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_CATEGORY
Per i dispositivi di acquisizione video, specifica la categoria di dispositivi. Facoltativo.

[out] pppSourceActivate

Riceve una matrice di puntatori dell'interfaccia FMActivate . Ogni puntatore rappresenta un oggetto di attivazione per un'origine multimediale. La funzione alloca la memoria per la matrice. Il chiamante deve rilasciare i puntatori nella matrice e chiamare CoTaskMemFree per liberare la memoria per la matrice.

[out] pcSourceActivate

Riceve il numero di elementi nella matrice pppSourceActivate . Se i dispositivi di acquisizione non corrispondono ai criteri di ricerca, questo parametro riceve il valore 0.

Valore restituito

Se questa funzione ha esito positivo, restituisce S_OK. In caso contrario, restituisce un codice di errore HRESULT .

Commenti

Ogni puntatore FMActivate restituito rappresenta un dispositivo di acquisizione e può essere usato per creare un'origine multimediale per tale dispositivo. È anche possibile usare il puntatore FMActivate per eseguire query sugli attributi che descrivono il dispositivo. Gli attributi seguenti possono essere impostati:

Attributo Descrizione
MF_DEVSOURCE_ATTRIBUTE_FRIENDLY_NAME Nome visualizzato del dispositivo.
MF_DEVSOURCE_ATTRIBUTE_MEDIA_TYPE GUID di tipo principale e sottotipo che descrivono il formato di output del dispositivo.
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE Tipo di dispositivo di acquisizione (audio o video).
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_ENDPOINT_ID Stringa ID endpoint audio. (Solo dispositivi audio).
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_CATEGORY Categoria del dispositivo. (Solo dispositivi video).
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_HW_SOURCE Indica se un dispositivo è un dispositivo hardware o software. (Solo dispositivi video).
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_SYMBOLIC_LINK Collegamento simbolico per il driver di dispositivo. (Solo dispositivi video).
 

Per creare un'origine multimediale da un puntatore FMActivate , chiamare il metodo IMFActivate::ActivateObject .

Esempio

Nell'esempio seguente vengono enumerati i dispositivi di acquisizione video nel sistema e viene creata un'origine multimediale per il primo dispositivo nell'elenco.

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

Requisiti

Requisito Valore
Client minimo supportato Windows 7 [solo app desktop]
Server minimo supportato Windows Server 2008 R2 [solo app desktop]
Piattaforma di destinazione Windows
Intestazione mfidl.h
Libreria Mf.lib
DLL Mf.dll

Vedi anche

Acquisizione audio/video in Media Foundation

Funzioni di Media Foundation