MFTranscodeGetAudioOutputAvailableTypes-Funktion (mfidl.h)
Ruft eine Liste der Ausgabeformate von einem Audioencoder ab.
Syntax
HRESULT MFTranscodeGetAudioOutputAvailableTypes(
[in] REFGUID guidSubType,
[in] DWORD dwMFTFlags,
[in] IMFAttributes *pCodecConfig,
[out] IMFCollection **ppAvailableTypes
);
Parameter
[in] guidSubType
Gibt den Untertyp des Ausgabemediums an. Der Encoder verwendet diesen Wert als Filter, wenn er die verfügbaren Ausgabetypen auflistet. Informationen zu den Audiountertypen finden Sie unter Audiountertyp-GUIDs.
[in] dwMFTFlags
Bitweise OR mit null oder mehr Flags aus der _MFT_ENUM_FLAG-Enumeration .
[in] pCodecConfig
Ein Zeiger auf die IMFAttributes-Schnittstelle eines Attributspeichers . Der Attributspeicher gibt die Encoderkonfigurationseinstellungen an. Dieser Parameter kann NULL sein. Der Attributspeicher kann eines der folgenden Attribute enthalten.
[out] ppAvailableTypes
Empfängt einen Zeiger auf die IMFCollection-Schnittstelle eines Auflistungsobjekts, das eine Liste der bevorzugten Audiomedientypen enthält. Die Auflistung enthält IMFMediaType-Zeiger . Der Aufrufer muss den Schnittstellenzeiger freigeben.
Rückgabewert
Die Funktion gibt ein HRESULT zurück. Mögliches Werte (aber nicht die Einzigen) sind die in der folgenden Tabelle.
Rückgabecode | BESCHREIBUNG |
---|---|
|
Der Funktionsaufruf war erfolgreich. |
|
Fehler beim Finden eines Encoders, der den angegebenen Konfigurationseinstellungen entspricht. |
Hinweise
Diese Funktion setzt voraus, dass der Encoder in seinem Standardcodierungsmodus verwendet wird, der in der Regel cbR-Codierung (Constant Bit-Rate) ist. Daher funktionieren die von der Funktion zurückgegebenen Typen möglicherweise nicht mit anderen Modi, z. B. der Codierung mit variabler Bitrate (VBR).
Intern funktioniert diese Funktion, indem MFTEnumEx aufgerufen wird, um einen übereinstimmenden Encoder zu finden, und dann IMFTransform::GetOutputAvailableType aufgerufen wird, um die Ausgabetypen des Encoders abzurufen.
Beispiele
Im folgenden Beispiel wird ein Transcodierungsprofil für Windows Media Audio (WMA) erstellt.
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;
}
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Windows 7 [nur Desktop-Apps] |
Unterstützte Mindestversion (Server) | Windows Server 2008 R2 [nur Desktop-Apps] |
Zielplattform | Windows |
Kopfzeile | mfidl.h |
Bibliothek | Mf.lib |
DLL | Mf.dll |