Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Thema wird beschrieben, wie Sie die Videoaufnahmegeräte auf dem Benutzersystem auflisten und wie sie eine Instance eines Geräts erstellen.
Führen Sie zum Aufzählen der Videoaufnahmegeräte im System die folgenden Schritte aus:
- Rufen Sie MFCreateAttributes auf, um einen Attributspeicher zu erstellen. Diese Funktion empfängt einen IMFAttributes-Zeiger.
- Rufen Sie IMFAttributes::SetGUID auf, um das MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE-Attribut festzulegen. Legen Sie den Attributwert auf MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_GUID fest.
- Aufrufen von MFEnumDeviceSources. Diese Funktion empfängt ein Array von IMFActivate-Zeigern und die Arraygröße. Jeder Zeiger stellt ein unterschiedliches Videoaufnahmegerät dar.
Rufen Sie zum Erstellen einer Instance eines Aufnahmegeräts IMFActivate::ActivateObject auf, um einen Zeiger auf die IMFMediaSource-Schnittstelle abzurufen.
Hinweis
Windows ermöglicht Benutzern, unter "Datenschutz und Sicherheit –> Kamera" den Zugriff auf die Kamera des Geräts in den Windows-Einstellungen zu gewähren oder zu verweigern. Bei der Initialisierung des Aufnahmegeräts sollten Anwendungen prüfen, ob sie Zugriff auf die Kamera haben, und den Fall behandeln, dass der Zugriff vom Benutzer verweigert wird. Weitere Informationen finden Sie unter Behandeln der Datenschutzeinstellung der Windows-Kamera.
Diese Schritte sind im folgenden Code dargestellt:
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;
}
Nachdem Sie die Medienquelle erstellt haben, geben Sie die Schnittstellenzeiger frei und geben den Speicher für das Array frei:
SafeRelease(&pAttributes);
for (DWORD i = 0; i < count; i++)
{
SafeRelease(&ppDevices[i]);
}
CoTaskMemFree(ppDevices);
Zugehörige Themen