MFTEnum 函式 (mfapi.h)
列舉登錄中的媒體基礎轉換 (MFT) 。
從 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
GUID,指定要列舉的 MFT 類別。 如需 MFT 類別清單,請參閱 MFT_CATEGORY。
[in] Flags
保留的。 必須為零。
[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 陣列中的專案數目。 此值可以是零。
傳回值
如果此函式成功,則會傳回 S_OK。 否則,它會傳回 HRESULT 錯誤碼。
備註
此函式會傳回指定類別中所有符合pInputType、pOutputType和pAttributes參數所指定搜尋準則的清單。 任何這些參數都可以是 Null。
如果沒有符合準則的 MFT,方法會成功,但會傳回 pcMFT中的值零。
範例
若要尋找解碼器,請將 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 |