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로 설정합니다.
[out] ppclsidMFT
CLSID 배열에 대한 포인터를 받습니다. 이 목록에서 MFT를 만들려면 CLSID 중 하나를 사용하여 CoCreateInstance 를 호출합니다. CLSID에서 특정 MFT에 대한 정보를 얻으려면 MFTGetInfo를 호출합니다. 호출자는 CoTaskMemFree를 호출하여 배열에 대한 메모리를 해제해야 합니다.
[out] pcMFTs
ppclsidMFT 배열의 요소 수를 받습니다. 값은 0일 수 있습니다.
반환 값
이 함수가 성공하면 S_OK 반환합니다. 그러지 않으면 HRESULT 오류 코드를 반환합니다.
설명
이 함수는 pInputType, pOutputType 및 pAttributes 매개 변수에서 제공하는 검색 조건과 일치하는 지정된 범주의 모든 MFT 목록을 반환합니다. 이러한 매개 변수는 NULL일 수 있습니다.
조건과 일치하는 MFT가 없으면 메서드는 성공하지만 pcMFT에서 값 0을 반환합니다.
예제
디코더를 찾으려면 guidCategory 를 MFT_CATEGORY_AUDIO_DECODER 또는 MFT_CATEGORY_VIDEO_DECODER 설정하고 pInputType에서 인코딩 형식을 지정합니다. 이 경우 일반적으로 pOutputType 을 NULL 로 설정합니다.
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;
}
인코더를 찾으려면 guidCategory 를 MFT_CATEGORY_AUDIO_ENCODER 또는 MFT_CATEGORY_VIDEO_ENCODER 설정하고 pOutputType에서 인코딩 형식을 지정합니다. 이 경우 일반적으로 pInputType 을 NULL 로 설정합니다.
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 |