MFTranscodeGetAudioOutputAvailableTypes 函式 (mfidl.h)
從音訊編碼器取得輸出格式的清單。
語法
HRESULT MFTranscodeGetAudioOutputAvailableTypes(
[in] REFGUID guidSubType,
[in] DWORD dwMFTFlags,
[in] IMFAttributes *pCodecConfig,
[out] IMFCollection **ppAvailableTypes
);
參數
[in] guidSubType
指定輸出媒體的子類型。 編碼器在列舉可用的輸出類型時,會使用此值做為篩選。 如需音訊子類型的相關信息,請參閱 音訊子類型 GUID。
[in] dwMFTFlags
_MFT_ENUM_FLAG列舉中零個或多個旗標的位 OR。
[in] pCodecConfig
屬性存放區 之 IMFAttributes 介面的指標。 屬性存放區會指定編碼器組態設定。 此參數可以是 Null。 屬性存放區可以保存下列任何屬性。
值 | 意義 |
---|---|
將此屬性設定為解除鎖定具有使用字位描述的編碼器。 | |
指定 Windows 媒體編碼器的裝置一致性配置檔。 | |
設定編碼質量與編碼速度之間的取捨。 |
[out] ppAvailableTypes
接收集合物件 之IMFCollection 介面的指標,其中包含慣用音訊媒體類型的清單。 集合包含 IMFMediaType 指標。 呼叫端必須釋放介面指標。
傳回值
函式會傳回 HRESULT。 可能的值包括 (但不限於) 下表中的這些值。
傳回碼 | 描述 |
---|---|
|
函式呼叫成功。 |
|
找不到符合指定組態設定的編碼器。 |
備註
此函式假設編碼器將用於其預設編碼模式,這通常是固定的比特率 (CBR) 編碼。 因此,函式所傳回的類型可能無法與其他模式搭配使用,例如可變比特率 (VBR) 編碼。
在內部,此函式的運作方式是呼叫 MFTEnumEx 來尋找相符的編碼器,然後呼叫 IMFTransform::GetOutputAvailableType 以取得編碼器的輸出類型。
範例
下列範例會建立 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;
}
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 7 [僅限傳統型應用程式] |
最低支援的伺服器 | Windows Server 2008 R2 [僅限桌面應用程式] |
目標平台 | Windows |
標頭 | mfidl.h |
程式庫 | Mf.lib |
Dll | Mf.dll |