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列挙体からの 0 個以上のフラグのビットごとの 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 |