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.
[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 |
---|---|
|
Panggilan fungsi berhasil. |
|
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
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk