Fonction MFTEnum (mfapi.h)
Énumère les transformations Media Foundation (MFT) dans le registre.
À partir de Windows 7, les applications doivent utiliser la fonction MFTEnumEx à la place.
Syntaxe
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
);
Paramètres
[in] guidCategory
GUID qui spécifie la catégorie de mfts à énumérer. Pour obtenir la liste des catégories MFT, consultez MFT_CATEGORY.
[in] Flags
Réservé. Doit être zéro.
[in] pInputType
Pointeur vers une structure MFT_REGISTER_TYPE_INFO qui spécifie un type de média d’entrée à correspondre.
Ce paramètre peut être NULL. Si la valeur est NULL, tous les types d’entrée sont mis en correspondance.
[in] pOutputType
Pointeur vers une structure MFT_REGISTER_TYPE_INFO qui spécifie un type de média de sortie à correspondre.
Ce paramètre peut être NULL. Si la valeur est NULL, tous les types de sortie sont mis en correspondance.
[in] pAttributes
Réservé. Défini sur NULL.
[out] ppclsidMFT
Reçoit un pointeur vers un tableau de CLSID. Pour créer un MFT à partir de cette liste, appelez CoCreateInstance avec l’un des CLSID. Pour obtenir des informations sur un MFT particulier à partir de son CLSID, appelez MFTGetInfo. L’appelant doit libérer la mémoire du tableau en appelant CoTaskMemFree.
[out] pcMFTs
Reçoit le nombre d’éléments dans le tableau ppclsidMFT . La valeur peut être égale à zéro.
Valeur retournée
Si cette fonction réussit, elle retourne S_OK. Sinon, elle retourne un code d’erreur HRESULT.
Notes
Cette fonction retourne une liste de tous les mfts de la catégorie spécifiée qui correspondent aux critères de recherche donnés par les paramètres pInputType, pOutputType et pAttributes . L’un de ces paramètres peut avoir la valeur NULL.
Si aucun mft ne correspond aux critères, la méthode réussit, mais retourne la valeur zéro dans les pcMFT.
Exemples
Pour rechercher un décodeur, définissez guidCategory sur MFT_CATEGORY_AUDIO_DECODER ou MFT_CATEGORY_VIDEO_DECODER et spécifiez le format d’encodage dans pInputType. Dans ce cas, vous définissez généralement pOutputType sur 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;
}
Pour rechercher un encodeur, définissez guidCategory sur MFT_CATEGORY_AUDIO_ENCODER ou MFT_CATEGORY_VIDEO_ENCODER et spécifiez le format d’encodage dans pOutputType. Dans ce cas, vous définissez généralement pInputType sur 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;
}
Spécifications
Client minimal pris en charge | Windows Vista [applications de bureau uniquement] |
Serveur minimal pris en charge | Windows Server 2008 [applications de bureau uniquement] |
Plateforme cible | Windows |
En-tête | mfapi.h |
Bibliothèque | Mfplat.lib |
DLL | Mfplat.dll |
Voir aussi
Ajout d’un décodeur à une topologie