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.
[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 |
---|---|
|
L’appel de fonction a réussi. |
|
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 |