Auflisten von Videoaufnahmegeräten
In diesem Thema wird beschrieben, wie Sie die Videoaufnahmegeräte auf dem System des Benutzers auflisten und eine instance eines Geräts erstellen.
Gehen Sie wie folgt vor, um die Videoaufnahmegeräte auf dem System aufzulisten:
- Rufen Sie MFCreateAttributes auf , um einen Attributspeicher zu erstellen. Diese Funktion empfängt einen IMFAttributes-Zeiger .
- Rufen Sie IMFAttributes::SetGUID auf, um das attribut MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE festzulegen. Legen Sie den Attributwert auf MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_GUID fest.
- Rufen Sie MFEnumDeviceSources auf. Diese Funktion empfängt ein Array von IMFActivate-Zeigern und die Arraygröße. Jeder Zeiger stellt ein unterschiedliches Videoaufnahmegerät dar.
So erstellen Sie eine instance eines Erfassungsgeräts:
- Rufen Sie IMFActivate::ActivateObject auf, um einen Zeiger auf die IMFMediaSource-Schnittstelle zu erhalten.
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 eine Medienquelle erstellt haben, lassen Sie die Schnittstellenzeiger frei, und geben Sie den Speicher für das Array frei:
SafeRelease(&pAttributes);
for (DWORD i = 0; i < count; i++)
{
SafeRelease(&ppDevices[i]);
}
CoTaskMemFree(ppDevices);
Zugehörige Themen
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für