Freigeben über


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.

Wert Bedeutung
MFT_FIELDOFUSE_UNLOCK_Attribute
Legen Sie dieses Attribut fest, um einen Encoder zu entsperren, der über Beschreibungen für das Verwendungsfeld verfügt.
MF_TRANSCODE_ENCODINGPROFILE
Gibt ein Gerätekonformitätsprofil für einen Windows Media-Encoder an.
MF_TRANSCODE_QUALITYVSSPEED
Legt den Kompromiss zwischen Codierungsqualität und Codierungsgeschwindigkeit fest.

[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
S_OK
Der Funktionsaufruf war erfolgreich.
MF_E_TRANSCODE_NO_MATCHING_ENCODER
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

Weitere Informationen

IMFCollection::GetElement

MFCreateTranscodeProfile

Media Foundation-Funktionen

Tutorial: Codieren einer WMA-Datei