Fungsi MFTEnum (mfapi.h)
Menghitung transformasi Media Foundation (MFTs) dalam registri.
Mulai windows 7, aplikasi harus menggunakan fungsi MFTEnumEx sebagai gantinya.
Sintaks
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
);
Parameter
[in] guidCategory
GUID yang menentukan kategori MFTs untuk dijumlahkan. Untuk daftar kategori MFT, lihat MFT_CATEGORY.
[in] Flags
Dicadangkan. Harus nol.
[in] pInputType
Penunjuk ke struktur MFT_REGISTER_TYPE_INFO yang menentukan jenis media input yang cocok.
Parameter ini bisa NULL. Jika NULL, semua jenis input dicocokkan.
[in] pOutputType
Penunjuk ke struktur MFT_REGISTER_TYPE_INFO yang menentukan jenis media output yang cocok.
Parameter ini bisa NULL. Jika NULL, semua jenis output dicocokkan.
[in] pAttributes
Dicadangkan. Atur ke NULL.
[out] ppclsidMFT
Menerima pointer ke array CLSID. Untuk membuat MFT dari daftar ini, panggil CoCreateInstance dengan salah satu CLSID. Untuk mendapatkan informasi tentang MFT tertentu dari CLSID-nya, panggil MFTGetInfo. Pemanggil harus membebaskan memori untuk array dengan memanggil CoTaskMemFree.
[out] pcMFTs
Menerima jumlah elemen dalam array ppclsidMFT . Nilainya bisa nol.
Nilai kembali
Jika fungsi ini berhasil, fungsi akan mengembalikan S_OK. Jika tidak, kode kesalahan HRESULT akan dikembalikan.
Keterangan
Fungsi ini mengembalikan daftar semua MFTs dalam kategori yang ditentukan yang cocok dengan kriteria pencarian yang diberikan oleh parameter pInputType, pOutputType, dan pAttributes . Salah satu parameter tersebut dapat berupa NULL.
Jika tidak ada MFT yang cocok dengan kriteria, metode berhasil tetapi mengembalikan nilai nol di pcMFTs.
Contoh
Untuk menemukan dekoder, atur guidCategory ke MFT_CATEGORY_AUDIO_DECODER atau MFT_CATEGORY_VIDEO_DECODER dan tentukan format pengodean dalam pInputType. Anda biasanya akan mengatur pOutputType ke NULL dalam kasus ini.
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;
}
Untuk menemukan encoder, atur guidCategory ke MFT_CATEGORY_AUDIO_ENCODER atau MFT_CATEGORY_VIDEO_ENCODER dan tentukan format pengodean dalam pOutputType. Anda biasanya akan mengatur pInputType ke NULL dalam kasus ini.
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;
}
Persyaratan
Klien minimum yang didukung | Windows Vista [hanya aplikasi desktop] |
Server minimum yang didukung | Windows Server 2008 [hanya aplikasi desktop] |
Target Platform | Windows |
Header | mfapi.h |
Pustaka | Mfplat.lib |
DLL | Mfplat.dll |