Bagikan melalui


Fungsi MFTranscodeGetAudioOutputAvailableTypes (mfidl.h)

Mendapatkan daftar format output dari encoder audio.

Sintaks

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

Parameter

[in] guidSubType

Menentukan subjenis media output. Encoder menggunakan nilai ini sebagai filter saat menghitung jenis output yang tersedia. Untuk informasi tentang subjenis audio, lihat Subjenis Audio GUID.

[in] dwMFTFlags

Bitwise OR dari nol atau lebih bendera dari enumerasi _MFT_ENUM_FLAG .

[in] pCodecConfig

Penunjuk ke antarmuka IMFAttributes dari penyimpanan atribut. Penyimpanan atribut menentukan pengaturan konfigurasi encoder. Parameter ini bisa NULL. Penyimpanan atribut dapat menyimpan salah satu atribut berikut.

Nilai Makna
MFT_FIELDOFUSE_UNLOCK_Attribute
Atur atribut ini untuk membuka kunci encoder yang memiliki deskripsi bidang penggunaan.
MF_TRANSCODE_ENCODINGPROFILE
Menentukan profil kesuaian perangkat untuk encoder Windows Media.
MF_TRANSCODE_QUALITYVSSPEED
Mengatur tradeoff antara kualitas pengodean dan kecepatan pengodean.

[out] ppAvailableTypes

Menerima penunjuk ke antarmuka IMFCollection dari objek koleksi yang berisi daftar jenis media audio pilihan. Koleksi berisi pointer IMFMediaType . Pemanggil harus melepaskan penunjuk antarmuka.

Mengembalikan nilai

Fungsi mengembalikan HRESULT. Nilai yang mungkin termasuk, tetapi tidak terbatas pada, yang ada dalam tabel berikut.

Menampilkan kode Deskripsi
S_OK
Panggilan fungsi berhasil.
MF_E_TRANSCODE_NO_MATCHING_ENCODER
Gagal menemukan encoder yang cocok dengan pengaturan konfigurasi yang ditentukan.

Keterangan

Fungsi ini mengasumsikan encoder akan digunakan dalam mode pengodean defaultnya, yang biasanya merupakan pengodean laju bit konstan (CBR). Oleh karena itu, jenis yang dikembalikan oleh fungsi mungkin tidak berfungsi dengan mode lain, seperti pengodean laju bit variabel (VBR).

Secara internal, fungsi ini bekerja dengan memanggil MFTEnumEx untuk menemukan encoder yang cocok, lalu memanggil IMFTransform::GetOutputAvailableType untuk mendapatkan jenis output encoder.

Contoh

Contoh berikut membuat profil transkode untuk 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;
}

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows 7 [hanya aplikasi desktop]
Server minimum yang didukung Windows Server 2008 R2 [hanya aplikasi desktop]
Target Platform Windows
Header mfidl.h
Pustaka Mf.lib
DLL Mf.dll

Lihat juga

IMFCollection::GetElement

MFCreateTranscodeProfile

Fungsi Media Foundation

Tutorial: Mengodekan File WMA