MFEnumDeviceSources 함수(mfidl.h)
오디오 또는 비디오 캡처 디바이스 목록을 열거합니다.
구문
HRESULT MFEnumDeviceSources(
[in] IMFAttributes *pAttributes,
[out] IMFActivate ***pppSourceActivate,
[out] UINT32 *pcSourceActivate
);
매개 변수
[in] pAttributes
검색 조건을 포함하는 특성 저장소에 대한 포인터입니다. 특성 저장소를 만들려면 MFCreateAttributes를 호출합니다. 특성 저장소에서 다음 특성 중 하나 이상을 설정합니다.
값 | 의미 |
---|---|
오디오 또는 비디오 디바이스를 열거할지 여부를 지정합니다. (필수) | |
오디오 캡처 디바이스의 경우 디바이스 역할을 지정합니다. 선택 사항입니다. | |
비디오 캡처 디바이스의 경우 디바이스 범주를 지정합니다. 선택 사항입니다. |
[out] pppSourceActivate
IMFActivate 인터페이스 포인터의 배열을 받습니다. 각 포인터는 미디어 원본에 대한 활성화 개체를 나타냅니다. 함수는 배열에 대한 메모리를 할당합니다. 호출자는 배열의 포인터를 해제하고 CoTaskMemFree 를 호출하여 배열에 대한 메모리를 해제해야 합니다.
[out] pcSourceActivate
pppSourceActivate 배열의 요소 수를 받습니다. 검색 조건과 일치하는 캡처 디바이스가 없으면 이 매개 변수는 값 0을 받습니다.
반환 값
이 함수가 성공하면 S_OK 반환합니다. 그러지 않으면 HRESULT 오류 코드를 반환합니다.
설명
반환된 각 IMFActivate 포인터는 캡처 디바이스를 나타내며 해당 디바이스에 대한 미디어 원본을 만드는 데 사용할 수 있습니다. IMFActivate 포인터를 사용하여 디바이스를 설명하는 특성을 쿼리할 수도 있습니다. 다음 특성을 설정할 수 있습니다.
attribute | Description |
---|---|
MF_DEVSOURCE_ATTRIBUTE_FRIENDLY_NAME | 디바이스의 표시 이름입니다. |
MF_DEVSOURCE_ATTRIBUTE_MEDIA_TYPE | 디바이스의 출력 형식을 설명하는 주 형식 및 하위 형식 GUID입니다. |
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE | 캡처 디바이스 유형(오디오 또는 비디오)입니다. |
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_ENDPOINT_ID | 오디오 엔드포인트 ID 문자열입니다. (오디오 디바이스만 해당) |
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_CATEGORY | 디바이스 범주입니다. (비디오 디바이스만 해당) |
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_HW_SOURCE | 디바이스가 하드웨어 또는 소프트웨어 디바이스인지 여부입니다. (비디오 디바이스만 해당) |
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_SYMBOLIC_LINK | 디바이스 드라이버에 대한 기호 링크입니다. (비디오 디바이스만 해당) |
IMFActivate 포인터에서 미디어 원본을 만들려면 IMFActivate::ActivateObject 메서드를 호출합니다.
예제
다음 예제에서는 시스템의 비디오 캡처 디바이스를 열거하고 목록의 첫 번째 디바이스에 대한 미디어 원본을 만듭니다.
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;
}
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 7 [데스크톱 앱만 해당] |
지원되는 최소 서버 | Windows Server 2008 R2 [데스크톱 앱만 해당] |
대상 플랫폼 | Windows |
헤더 | mfidl.h |
라이브러리 | Mf.lib |
DLL | Mf.dll |