Função MFTranscodeGetAudioOutputAvailableTypes (mfidl.h)
Obtém uma lista de formatos de saída de um codificador de áudio.
Sintaxe
HRESULT MFTranscodeGetAudioOutputAvailableTypes(
[in] REFGUID guidSubType,
[in] DWORD dwMFTFlags,
[in] IMFAttributes *pCodecConfig,
[out] IMFCollection **ppAvailableTypes
);
Parâmetros
[in] guidSubType
Especifica o subtipo da mídia de saída. O codificador usa esse valor como um filtro quando está enumerando os tipos de saída disponíveis. Para obter informações sobre os subtipos de áudio, consulte GUIDs de subtipo de áudio.
[in] dwMFTFlags
OR bit a bit de zero ou mais sinalizadores da enumeração _MFT_ENUM_FLAG.
[in] pCodecConfig
Um ponteiro para a interface IMFAttributes de um repositório de atributos. O repositório de atributos especifica as definições de configuração do codificador. Este parâmetro pode ser NULL. O repositório de atributos pode conter qualquer um dos atributos a seguir.
[out] ppAvailableTypes
Recebe um ponteiro para a interface IMFCollection de um objeto de coleção que contém uma lista de tipos de mídia de áudio preferenciais. A coleção contém ponteiros IMFMediaType . O chamador deve liberar o ponteiro da interface.
Retornar valor
A função retorna um HRESULT. Os possíveis valores incluem, mas sem limitação, aqueles na tabela a seguir.
Código de retorno | Descrição |
---|---|
|
A chamada de função foi bem-sucedida. |
|
Falha ao localizar um codificador que corresponda às definições de configuração especificadas. |
Comentários
Essa função pressupõe que o codificador será usado em seu modo de codificação padrão, que normalmente é a codificação CBR (taxa de bits constante). Portanto, os tipos retornados pela função podem não funcionar com outros modos, como a codificação de VBR (taxa de bits variável).
Internamente, essa função funciona chamando MFTEnumEx para localizar um codificador correspondente e, em seguida, chamando IMFTransform::GetOutputAvailableType para obter os tipos de saída do codificador.
Exemplos
O exemplo a seguir cria um perfil de transcodificação para o 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;
}
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Windows 7 [somente aplicativos da área de trabalho] |
Servidor mínimo com suporte | Windows Server 2008 R2 [somente aplicativos da área de trabalho] |
Plataforma de Destino | Windows |
Cabeçalho | mfidl.h |
Biblioteca | Mf.lib |
DLL | Mf.dll |