비디오 캡처 디바이스 열거
이 항목에서는 사용자 시스템에서 비디오 캡처 디바이스를 열거하는 방법과 디바이스 인스턴스를 만드는 방법에 대해 설명합니다.
시스템에서 비디오 캡처 디바이스를 열거하려면 다음을 수행합니다.
- 속성 저장소를 만들려면 MFCreateAttributes 를 호출합니다. 이 함수는 IMFAttributes 포인터를 받습니다 .
- IMFAttributes::SetGUID를 호출하여 MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE 특성을 설정합니다. 특성 값을 MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_GUID 설정합니다.
- MFEnumDeviceSources를 호출 합니다. 이 함수는 IMFActivate 포인터의 배열과 배열 크기를 받습니다. 각 포인터는 고유한 비디오 캡처 디바이스를 나타냅니다.
캡처 디바이스의 인스턴스를 만들려면 IMFActivate::ActivateObject를 호출하여 IMFMediaSource 인터페이스에 대한 포인터를 가져옵니다.
참고 항목
Windows를 사용하면 사용자가 개인 정보 및 보안 -> 카메라 아래의 Windows 설정 앱에서 디바이스의 카메라에 대한 액세스 권한을 부여하거나 거부할 수 있습니다. 캡처 디바이스를 초기화할 때 앱은 카메라에 대한 액세스 권한이 있는지 확인하고 사용자가 액세스가 거부된 경우를 처리해야 합니다. 자세한 내용은 Windows 카메라 개인 정보 설정 처리를 참조하세요.
다음은 이러한 단계를 보여 주는 코드입니다.
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;
}
미디어 원본을 만든 후 인터페이스 포인터를 해제하고 배열에 대한 메모리를 해제합니다.
SafeRelease(&pAttributes);
for (DWORD i = 0; i < count; i++)
{
SafeRelease(&ppDevices[i]);
}
CoTaskMemFree(ppDevices);
관련 항목