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 Media 编码器的设备一致性配置文件。 | |
设置编码质量和编码速度之间的权衡。 |
[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 |
Library | Mf.lib |
DLL | Mf.dll |