MFTEnum 함수(mfapi.h)

레지스트리에서 MFT(Media Foundation 변환)를 열거합니다.

Windows 7부터 애플리케이션은 MFTEnumEx 함수를 대신 사용해야 합니다.

구문

HRESULT MFTEnum(
  [in]  GUID                   guidCategory,
  [in]  UINT32                 Flags,
  [in]  MFT_REGISTER_TYPE_INFO *pInputType,
  [in]  MFT_REGISTER_TYPE_INFO *pOutputType,
  [in]  IMFAttributes          *pAttributes,
  [out] CLSID                  **ppclsidMFT,
  [out] UINT32                 *pcMFTs
);

매개 변수

[in] guidCategory

열거할 MFT의 범주를 지정하는 GUID입니다. MFT 범주 목록은 MFT_CATEGORY 참조하세요.

[in] Flags

예약되어 있습니다. 0이어야 합니다.

[in] pInputType

일치시킬 입력 미디어 형식을 지정하는 MFT_REGISTER_TYPE_INFO 구조체에 대한 포인터입니다.

이 매개 변수는 NULL일 수 있습니다. NULL이면 모든 입력 형식이 일치합니다.

[in] pOutputType

일치시킬 출력 미디어 형식을 지정하는 MFT_REGISTER_TYPE_INFO 구조체에 대한 포인터입니다.

이 매개 변수는 NULL일 수 있습니다. NULL이면 모든 출력 형식이 일치합니다.

[in] pAttributes

예약되어 있습니다. NULL로 설정합니다.

참고 Windows Vista 및 Windows Server 2008: 이 매개 변수는 특성 저장소의 IMFAttributes 인터페이스에 대한 포인터를 지정할 수 있습니다. MFTEnum 함수는 레지스트리에 저장된 특성과 이 개체의 특성과 일치합니다. (레지스트리 특성은 MFTRegister 함수의 pAttributes 매개 변수에 지정됩니다.) 일치하는 특성이 있는 MFT만 열거형 결과에 반환됩니다.
 
참고 Windows 7 이상: 이 매개 변수는 무시됩니다.
 

[out] ppclsidMFT

CLSID 배열에 대한 포인터를 받습니다. 이 목록에서 MFT를 만들려면 CLSID 중 하나를 사용하여 CoCreateInstance 를 호출합니다. CLSID에서 특정 MFT에 대한 정보를 얻으려면 MFTGetInfo를 호출합니다. 호출자는 CoTaskMemFree를 호출하여 배열에 대한 메모리를 해제해야 합니다.

[out] pcMFTs

ppclsidMFT 배열의 요소 수를 받습니다. 값은 0일 수 있습니다.

반환 값

이 함수가 성공하면 S_OK 반환합니다. 그러지 않으면 HRESULT 오류 코드를 반환합니다.

설명

이 함수는 pInputType, pOutputTypepAttributes 매개 변수에서 제공하는 검색 조건과 일치하는 지정된 범주의 모든 MFT 목록을 반환합니다. 이러한 매개 변수는 NULL일 수 있습니다.

조건과 일치하는 MFT가 없으면 메서드는 성공하지만 pcMFT에서 값 0을 반환합니다.

예제

디코더를 찾으려면 guidCategoryMFT_CATEGORY_AUDIO_DECODER 또는 MFT_CATEGORY_VIDEO_DECODER 설정하고 pInputType에서 인코딩 형식을 지정합니다. 이 경우 일반적으로 pOutputTypeNULL 로 설정합니다.

HRESULT FindDecoder(
    const GUID& subtype,        // Subtype
    BOOL bAudio,                // TRUE for audio, FALSE for video
    IMFTransform **ppDecoder    // Receives a pointer to the decoder.
    )
{
    HRESULT hr = S_OK;
    UINT32 count = 0;

    CLSID *ppCLSIDs = NULL;

    MFT_REGISTER_TYPE_INFO info = { 0 };

    info.guidMajorType = bAudio ? MFMediaType_Audio : MFMediaType_Video;
    info.guidSubtype = subtype;

    hr = MFTEnum(   
        bAudio ? MFT_CATEGORY_AUDIO_DECODER : MFT_CATEGORY_VIDEO_DECODER,
        0,      // Reserved
        &info,  // Input type
        NULL,   // Output type
        NULL,   // Reserved
        &ppCLSIDs,
        &count
        );

    if (SUCCEEDED(hr) && count == 0)
    {
        hr = MF_E_TOPO_CODEC_NOT_FOUND;
    }

    // Create the first decoder in the list.

    if (SUCCEEDED(hr))
    {
        hr = CoCreateInstance(ppCLSIDs[0], NULL,
            CLSCTX_INPROC_SERVER, IID_PPV_ARGS(ppDecoder));
    }

    CoTaskMemFree(ppCLSIDs);
    return hr;
}

인코더를 찾으려면 guidCategoryMFT_CATEGORY_AUDIO_ENCODER 또는 MFT_CATEGORY_VIDEO_ENCODER 설정하고 pOutputType에서 인코딩 형식을 지정합니다. 이 경우 일반적으로 pInputTypeNULL 로 설정합니다.

HRESULT FindEncoder(
    const GUID& subtype, 
    BOOL bAudio, 
    IMFTransform **ppEncoder
    )
{
    HRESULT hr = S_OK;
    UINT32 count = 0;

    CLSID *ppCLSIDs = NULL;

    MFT_REGISTER_TYPE_INFO info = { 0 };

    info.guidMajorType = bAudio ? MFMediaType_Audio : MFMediaType_Video;
    info.guidSubtype = subtype;

    hr = MFTEnum(   
        bAudio ? MFT_CATEGORY_AUDIO_ENCODER : MFT_CATEGORY_VIDEO_ENCODER,
        0,          // Reserved
        NULL,       // Input type
        &info,      // Output type
        NULL,       // Reserved
        &ppCLSIDs,
        &count
        );

    if (SUCCEEDED(hr) && count == 0)
    {
        hr = MF_E_TOPO_CODEC_NOT_FOUND;
    }

    // Create the first encoder in the list.

    if (SUCCEEDED(hr))
    {
        hr = CoCreateInstance(ppCLSIDs[0], NULL,
            CLSCTX_INPROC_SERVER, IID_PPV_ARGS(ppEncoder));
    }

    CoTaskMemFree(ppCLSIDs);
    return hr;
}

요구 사항

   
지원되는 최소 클라이언트 Windows Vista [데스크톱 앱만 해당]
지원되는 최소 서버 Windows Server 2008 [데스크톱 앱만 해당]
대상 플랫폼 Windows
헤더 mfapi.h
라이브러리 Mfplat.lib
DLL Mfplat.dll

참고 항목

토폴로지에 디코더 추가

MFTEnumEx

MFTRegister

미디어 파운데이션 함수

Media Foundation 변환

MFT 등록 및 열거