Partager via


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.

Note Windows Vista et Windows Server 2008 : ce paramètre peut spécifier un pointeur vers l’interface IMFAttributes d’un magasin d’attributs. La fonction MFTEnum fait correspondre les attributs de cet objet aux attributs stockés dans le Registre. (Les attributs de Registre sont spécifiés dans le paramètre pAttributes de la fonction MFTRegister .) Seuls les fichiers MFT avec des attributs correspondants sont retournés dans les résultats de l’énumération.
 
Note Windows 7 et versions ultérieures : ce paramètre est ignoré.
 

[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

MFTEnumEx

MFTRegister

Fonctions Media Foundation

Transformations de Media Foundation

Inscription et énumération de mfts