MFEnumDeviceSources 함수(mfidl.h)

오디오 또는 비디오 캡처 디바이스 목록을 열거합니다.

구문

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

매개 변수

[in] pAttributes

검색 조건을 포함하는 특성 저장소에 대한 포인터입니다. 특성 저장소를 만들려면 MFCreateAttributes를 호출합니다. 특성 저장소에서 다음 특성 중 하나 이상을 설정합니다.

의미
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE
오디오 또는 비디오 디바이스를 열거할지 여부를 지정합니다. (필수)
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_ROLE
오디오 캡처 디바이스의 경우 디바이스 역할을 지정합니다. 선택 사항입니다.
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_CATEGORY
비디오 캡처 디바이스의 경우 디바이스 범주를 지정합니다. 선택 사항입니다.

[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

추가 정보

Media Foundation의 오디오/비디오 캡처

미디어 파운데이션 함수