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 でもかまいません。 属性ストアには、次のいずれかの属性を保持できます。

意味
MFT_FIELDOFUSE_UNLOCK_Attribute
この属性を設定して、フィールドの説明を含むエンコーダーのロックを解除します。
MF_TRANSCODE_ENCODINGPROFILE
Windows Media エンコーダーのデバイス準拠プロファイルを指定します。
MF_TRANSCODE_QUALITYVSSPEED
エンコード品質とエンコード速度のトレードオフを設定します。

[out] ppAvailableTypes

優先オーディオ メディアの種類の一覧を含むコレクション オブジェクトの IMFCollection インターフェイスへのポインターを受け取ります。 コレクションには IMFMediaType ポインターが含まれています。 呼び出し元は、インターフェイス ポインターを解放する必要があります。

戻り値

関数は HRESULT を返します。 有効な値を次の表に示しますが、これ以外にもあります。

リターン コード 説明
S_OK
関数呼び出しが成功しました。
MF_E_TRANSCODE_NO_MATCHING_ENCODER
指定した構成設定に一致するエンコーダーを見つけることができませんでした。

注釈

この関数は、エンコーダーが既定のエンコード モード (通常は一定のビット レート (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

こちらもご覧ください

IMFCollection::GetElement

MFCreateTranscodeProfile

メディア ファンデーション機能

チュートリアル: WMA ファイルのエンコード