Fonction MFTranscodeGetAudioOutputAvailableTypes (mfidl.h)

Obtient la liste des formats de sortie d’un encodeur audio.

Syntaxe

HRESULT MFTranscodeGetAudioOutputAvailableTypes(
  [in]  REFGUID       guidSubType,
  [in]  DWORD         dwMFTFlags,
  [in]  IMFAttributes *pCodecConfig,
  [out] IMFCollection **ppAvailableTypes
);

Paramètres

[in] guidSubType

Spécifie le sous-type du média de sortie. L’encodeur utilise cette valeur comme filtre lorsqu’il énumére les types de sortie disponibles. Pour plus d’informations sur les sous-types audio, consultez GUID de sous-types audio.

[in] dwMFTFlags

OR au niveau du bit de zéro ou plusieurs indicateurs de l’énumération _MFT_ENUM_FLAG.

[in] pCodecConfig

Pointeur vers l’interface IMFAttributes d’un magasin d’attributs. Le magasin d’attributs spécifie les paramètres de configuration de l’encodeur. Ce paramètre peut être NULL. Le magasin d’attributs peut contenir l’un des attributs suivants.

Valeur Signification
MFT_FIELDOFUSE_UNLOCK_Attribute
Définissez cet attribut pour déverrouiller un encodeur qui a des descriptions de champ d’utilisation.
MF_TRANSCODE_ENCODINGPROFILE
Spécifie un profil de conformité d’appareil pour un encodeur Windows Media.
MF_TRANSCODE_QUALITYVSSPEED
Définit le compromis entre la qualité d’encodage et la vitesse d’encodage.

[out] ppAvailableTypes

Reçoit un pointeur vers l’interface IMFCollection d’un objet de collection qui contient une liste des types de médias audio préférés. La collection contient des pointeurs IMFMediaType . L’appelant doit libérer le pointeur d’interface.

Valeur retournée

La fonction retourne un HRESULT. Les valeurs possibles sont notamment celles figurant dans le tableau suivant.

Code de retour Description
S_OK
L’appel de fonction a réussi.
MF_E_TRANSCODE_NO_MATCHING_ENCODER
Impossible de trouver un encodeur qui correspond aux paramètres de configuration spécifiés.

Remarques

Cette fonction suppose que l’encodeur sera utilisé dans son mode d’encodage par défaut, qui est généralement l’encodage À débit constant (CBR). Par conséquent, les types retournés par la fonction peuvent ne pas fonctionner avec d’autres modes, tels que l’encodage À débit variable (VBR).

En interne, cette fonction fonctionne en appelant MFTEnumEx pour trouver un encodeur correspondant, puis en appelant IMFTransform ::GetOutputAvailableType pour obtenir les types de sortie de l’encodeur.

Exemples

L’exemple suivant crée un profil de transcode pour Windows Media Audio (WMA).

template <class Q>
HRESULT GetCollectionObject(IMFCollection *pCollection, DWORD index, Q **ppObj)
{
    IUnknown *pUnk;
    HRESULT hr = pCollection->GetElement(index, &pUnk);
    if (SUCCEEDED(hr))
    {
        hr = pUnk->QueryInterface(IID_PPV_ARGS(ppObj));
        pUnk->Release();
    }
    return hr;
}

HRESULT CreateTranscodeProfile(IMFTranscodeProfile **ppProfile)
{
    IMFTranscodeProfile *pProfile = NULL;     // Transcode profile.
    IMFCollection   *pAvailableTypes = NULL;  // List of audio media types.
    IMFMediaType    *pAudioType = NULL;       // Audio media type.
    IMFAttributes   *pAudioAttrs = NULL;      // Copy of the audio media type.
    IMFAttributes   *pContainer = NULL;       // Container attributes.

    DWORD dwMTCount = 0;
    
    // Create an empty transcode profile.
    HRESULT hr = MFCreateTranscodeProfile(&pProfile);
    if (FAILED(hr))
    {
        goto done;
    }

    // Get output media types for the Windows Media audio encoder.

    // Enumerate all codecs except for codecs with field-of-use restrictions.
    // Sort the results.

    DWORD dwFlags = 
        (MFT_ENUM_FLAG_ALL & (~MFT_ENUM_FLAG_FIELDOFUSE)) | 
        MFT_ENUM_FLAG_SORTANDFILTER;

    hr = MFTranscodeGetAudioOutputAvailableTypes(MFAudioFormat_WMAudioV9, 
        dwFlags, NULL, &pAvailableTypes);
    if (FAILED(hr))
    {
        goto done;
    }

    hr = pAvailableTypes->GetElementCount(&dwMTCount);
    if (FAILED(hr))
    {
        goto done;
    }
    if (dwMTCount == 0)
    {
        hr = E_FAIL;
        goto done;
    }

    // Get the first audio type in the collection and make a copy.
    hr = GetCollectionObject(pAvailableTypes, 0, &pAudioType);
    if (FAILED(hr))
    {
        goto done;
    }

    hr = MFCreateAttributes(&pAudioAttrs, 0);       
    if (FAILED(hr))
    {
        goto done;
    }

    hr = pAudioType->CopyAllItems(pAudioAttrs);
    if (FAILED(hr))
    {
        goto done;
    }

    // Set the audio attributes on the profile.
    hr = pProfile->SetAudioAttributes(pAudioAttrs);
    if (FAILED(hr))
    {
        goto done;
    }

    // Set the container attributes.
    hr = MFCreateAttributes(&pContainer, 1);
    if (FAILED(hr))
    {
        goto done;
    }

    hr = pContainer->SetGUID(MF_TRANSCODE_CONTAINERTYPE, MFTranscodeContainerType_ASF);
    if (FAILED(hr))
    {
        goto done;
    }

    hr = pProfile->SetContainerAttributes(pContainer);
    if (FAILED(hr))
    {
        goto done;
    }

    *ppProfile = pProfile;
    (*ppProfile)->AddRef();

done:
    SafeRelease(&pProfile);
    SafeRelease(&pAvailableTypes);
    SafeRelease(&pAudioType);
    SafeRelease(&pAudioAttrs);
    SafeRelease(&pContainer);
    return hr;
}

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 7 [applications de bureau uniquement]
Serveur minimal pris en charge Windows Server 2008 R2 [applications de bureau uniquement]
Plateforme cible Windows
En-tête mfidl.h
Bibliothèque Mf.lib
DLL Mf.dll

Voir aussi

IMFCollection ::GetElement

MFCreateTranscodeProfile

Fonctions Media Foundation

Tutoriel : Encodage d’un fichier WMA