Funzione MFTranscodeGetAudioOutputAvailableTypes (mfidl.h)

Ottiene un elenco di formati di output da un codificatore audio.

Sintassi

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

Parametri

[in] guidSubType

Specifica il sottotipo del supporto di output. Il codificatore usa questo valore come filtro quando enumera i tipi di output disponibili. Per informazioni sui sottotipi audio, vedi GUID sottotipo audio.

[in] dwMFTFlags

OR bit per bit pari a zero o più flag dall'enumerazione _MFT_ENUM_FLAG.

[in] pCodecConfig

Puntatore all'interfaccia IMFAttributes di un archivio attributi. L'archivio attributi specifica le impostazioni di configurazione del codificatore. Questo parametro può essere NULL. L'archivio attributi può contenere uno degli attributi seguenti.

Valore Significato
MFT_FIELDOFUSE_UNLOCK_Attribute
Impostare questo attributo per sbloccare un codificatore con descrizioni di campo d'uso.
MF_TRANSCODE_ENCODINGPROFILE
Specifica un profilo di conformità del dispositivo per un codificatore Windows Media.
MF_TRANSCODE_QUALITYVSSPEED
Imposta il compromesso tra la qualità della codifica e la velocità di codifica.

[out] ppAvailableTypes

Riceve un puntatore all'interfaccia IMFCollection di un oggetto raccolta che contiene un elenco di tipi di supporti audio preferiti. L'insieme contiene puntatori IMFMediaType . Il chiamante deve rilasciare il puntatore dell'interfaccia.

Valore restituito

La funzione restituisce un valore HRESULT. I valori possibili includono, ma non sono limitati a, quelli indicati nella tabella seguente.

Codice restituito Descrizione
S_OK
Chiamata di funzione riuscita.
MF_E_TRANSCODE_NO_MATCHING_ENCODER
Impossibile trovare un codificatore corrispondente alle impostazioni di configurazione specificate.

Commenti

Questa funzione presuppone che il codificatore venga usato nella modalità di codifica predefinita, che in genere è la codifica CBR (Bit Rate costante). Pertanto, i tipi restituiti dalla funzione potrebbero non funzionare con altre modalità, ad esempio la codifica VBR (Variable Bit Rate).

Internamente, questa funzione funziona chiamando MFTEnumEx per trovare un codificatore corrispondente e quindi chiamando IMFTransform::GetOutputAvailableType per ottenere i tipi di output del codificatore.

Esempio

L'esempio seguente crea un profilo transcodifica per 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;
}

Requisiti

Requisito Valore
Client minimo supportato Windows 7 [solo app desktop]
Server minimo supportato Windows Server 2008 R2 [solo app desktop]
Piattaforma di destinazione Windows
Intestazione mfidl.h
Libreria Mf.lib
DLL Mf.dll

Vedi anche

IMFCollection::GetElement

MFCreateTranscodeProfile

Funzioni di Media Foundation

Esercitazione: Codifica di un file WMA