Freigeben über


MFEnumDeviceSources-Funktion (mfidl.h)

Listet eine Liste von Audio- oder Videoaufnahmegeräten auf.

Syntax

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

Parameter

[in] pAttributes

Zeiger auf einen Attributspeicher, der Suchkriterien enthält. Um den Attributspeicher zu erstellen, rufen Sie MFCreateAttributes auf. Legen Sie mindestens eines der folgenden Attribute für den Attributspeicher fest:

Wert Bedeutung
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE
Gibt an, ob Audio- oder Videogeräte aufgelistet werden sollen. (Erforderlich.)
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_ROLE
Gibt für Audioaufnahmegeräte die Geräterolle an. (Optional.)
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_CATEGORY
Gibt für Videoaufnahmegeräte die Gerätekategorie an. (Optional.)

[out] pppSourceActivate

Empfängt ein Array von IMFActivate-Schnittstellenzeigern . Jeder Zeiger stellt ein Aktivierungsobjekt für eine Medienquelle dar. Die Funktion ordnet den Arbeitsspeicher für das Array zu. Der Aufrufer muss die Zeiger im Array freigeben und CoTaskMemFree aufrufen, um den Arbeitsspeicher für das Array freizugeben.

[out] pcSourceActivate

Empfängt die Anzahl der Elemente im pppSourceActivate-Array . Wenn keine Erfassungsgeräte den Suchkriterien entsprechen, erhält dieser Parameter den Wert 0.

Rückgabewert

Wenn diese Funktion erfolgreich ist, wird S_OK zurückgegeben. Andernfalls wird ein Fehlercode HRESULT zurückgegeben.

Hinweise

Jeder zurückgegebene IMFActivate-Zeiger stellt ein Erfassungsgerät dar und kann verwendet werden, um eine Medienquelle für dieses Gerät zu erstellen. Sie können auch den IMFActivate-Zeiger verwenden, um Attribute abzufragen, die das Gerät beschreiben. Die folgenden Attribute können festgelegt werden:

attribute BESCHREIBUNG
MF_DEVSOURCE_ATTRIBUTE_FRIENDLY_NAME Der Anzeigename des Geräts.
MF_DEVSOURCE_ATTRIBUTE_MEDIA_TYPE Die Haupttyp- und Untertyp-GUIDs, die das Ausgabeformat des Geräts beschreiben.
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE Der Typ des Aufnahmegeräts (Audio oder Video).
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_ENDPOINT_ID Die Zeichenfolge des Audioendpunkts. (Nur Audiogeräte.)
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_CATEGORY Die Gerätekategorie. (Nur Videogeräte.)
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_HW_SOURCE Gibt an, ob es sich bei einem Gerät um ein Hardware- oder Softwaregerät handelt. (Nur Videogeräte.)
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_SYMBOLIC_LINK Die symbolische Verknüpfung für den Gerätetreiber. (Nur Videogeräte.)
 

Um eine Medienquelle aus einem IMFActivate-Zeiger zu erstellen, rufen Sie die IMFActivate::ActivateObject-Methode auf.

Beispiele

Im folgenden Beispiel werden die Videoaufnahmegeräte im System aufgelistet und eine Medienquelle für das erste Gerät in der Liste erstellt.

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

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 7 [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows Server 2008 R2 [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile mfidl.h
Bibliothek Mf.lib
DLL Mf.dll

Weitere Informationen

Audio-/Videoaufnahme in Media Foundation

Media Foundation-Funktionen