Funzione MFTEnum (mfapi.h)
Enumera le trasformazioni di Media Foundation nel Registro di sistema.
A partire da Windows 7, le applicazioni devono usare invece la funzione MFTEnumEx .
Sintassi
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
);
Parametri
[in] guidCategory
GUID che specifica la categoria di MFT da enumerare. Per un elenco di categorie MFT, vedere MFT_CATEGORY.
[in] Flags
Riservato. Deve essere zero.
[in] pInputType
Puntatore a una struttura MFT_REGISTER_TYPE_INFO che specifica un tipo di supporto di input da corrispondere.
Questo parametro può essere NULL. Se NULL, tutti i tipi di input vengono corrispondenti.
[in] pOutputType
Puntatore a una struttura MFT_REGISTER_TYPE_INFO che specifica un tipo di supporto di output da corrispondere.
Questo parametro può essere NULL. Se NULL, tutti i tipi di output vengono corrispondenti.
[in] pAttributes
Riservato. Impostare su NULL.
[out] ppclsidMFT
Riceve un puntatore a una matrice di CLSID. Per creare un MFT da questo elenco, chiamare CoCreateInstance con uno dei CLSID. Per ottenere informazioni su un determinato MFT dal CLSID, chiamare MFTGetInfo. Il chiamante deve liberare la memoria per la matrice chiamando CoTaskMemFree.
[out] pcMFTs
Riceve il numero di elementi nella matrice ppclsidMFT . Il valore può essere zero.
Valore restituito
Se questa funzione ha esito positivo, restituisce S_OK. In caso contrario, restituisce un codice di errore HRESULT .
Commenti
Questa funzione restituisce un elenco di tutte le MFU nella categoria specificata che corrispondono ai criteri di ricerca specificati dai parametri pInputType, pOutputType e pAttributes. Uno di questi parametri può essere NULL.
Se non corrispondono ai criteri, il metodo ha esito positivo, ma restituisce il valore zero in pcMFTs.
Esempio
Per trovare un decodificatore, impostare guidCategory su MFT_CATEGORY_AUDIO_DECODER o MFT_CATEGORY_VIDEO_DECODER e specificare il formato di codifica in pInputType. In questo caso si imposta in genere pOutputType su 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;
}
Per trovare un codificatore, impostare guidCategory su MFT_CATEGORY_AUDIO_ENCODER o MFT_CATEGORY_VIDEO_ENCODER e specificare il formato di codifica in pOutputType. In questo caso, si imposta in genere pInputType su 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;
}
Requisiti
Client minimo supportato | Windows Vista [solo app desktop] |
Server minimo supportato | Windows Server 2008 [solo app desktop] |
Piattaforma di destinazione | Windows |
Intestazione | mfapi.h |
Libreria | Mfplat.lib |
DLL | Mfplat.dll |
Vedi anche
Aggiunta di un decodificatore a una topologia