Partager via


Fonction MFEnumDeviceSources (mfidl.h)

Énumère les appareils de capture audio ou vidéo.

Syntaxe

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

Paramètres

[in] pAttributes

Pointeur vers un magasin d’attributs qui contient des critères de recherche. Pour créer le magasin d’attributs, appelez MFCreateAttributes. Définissez un ou plusieurs des attributs suivants sur le magasin d’attributs :

Valeur Signification
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE
Spécifie s’il faut énumérer les appareils audio ou vidéo. (Obligatoire.)
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_ROLE
Pour les appareils de capture audio, spécifie le rôle d’appareil. (Facultatif.)
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_CATEGORY
Pour les appareils de capture vidéo, spécifie la catégorie d’appareil. (Facultatif.)

[out] pppSourceActivate

Reçoit un tableau de pointeurs d’interface IMFActivate . Chaque pointeur représente un objet d’activation pour une source multimédia. La fonction alloue la mémoire pour le tableau. L’appelant doit libérer les pointeurs dans le tableau et appeler CoTaskMemFree pour libérer la mémoire du tableau.

[out] pcSourceActivate

Reçoit le nombre d’éléments dans le tableau pppSourceActivate . Si aucun appareil de capture ne correspond aux critères de recherche, ce paramètre reçoit la valeur 0.

Valeur retournée

Si cette fonction réussit, elle retourne S_OK. Sinon, elle retourne un code d’erreur HRESULT.

Remarques

Chaque pointeur IMFActivate retourné représente un appareil de capture et peut être utilisé pour créer une source multimédia pour cet appareil. Vous pouvez également utiliser le pointeur IMFActivate pour interroger les attributs qui décrivent l’appareil. Les attributs suivants peuvent être définis :

Attribut Description
MF_DEVSOURCE_ATTRIBUTE_FRIENDLY_NAME Nom complet de l’appareil.
MF_DEVSOURCE_ATTRIBUTE_MEDIA_TYPE GUID de type et de sous-type principaux qui décrivent le format de sortie de l’appareil.
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE Type de périphérique de capture (audio ou vidéo).
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_ENDPOINT_ID Chaîne d’ID de point de terminaison audio. (Appareils audio uniquement.)
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_CATEGORY Catégorie d’appareil. (Appareils vidéo uniquement.)
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_HW_SOURCE Indique si un appareil est un appareil matériel ou logiciel. (Appareils vidéo uniquement.)
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_SYMBOLIC_LINK Lien symbolique du pilote de périphérique. (Appareils vidéo uniquement.)
 

Pour créer une source multimédia à partir d’un pointeur IMFActivate , appelez la méthode IMFActivate ::ActivateObject .

Exemples

L’exemple suivant énumère les appareils de capture vidéo sur le système et crée une source multimédia pour le premier appareil de la liste.

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

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 7 [applications de bureau uniquement]
Serveur minimal pris en charge Windows Server 2008 R2 [applications de bureau uniquement]
Plateforme cible Windows
En-tête mfidl.h
Bibliothèque Mf.lib
DLL Mf.dll

Voir aussi

Capture audio/vidéo dans Media Foundation

Fonctions Media Foundation