MFTEnum 関数 (mfapi.h)

レジストリ内の Media Foundation 変換 (MFT) を列挙します。

Windows 7 以降では、アプリケーションでは代わりに MFTEnumEx 関数を使用する必要があります。

構文

HRESULT MFTEnum(
  [in]  GUID                   guidCategory,
  [in]  UINT32                 Flags,
  [in]  MFT_REGISTER_TYPE_INFO *pInputType,
  [in]  MFT_REGISTER_TYPE_INFO *pOutputType,
  [in]  IMFAttributes          *pAttributes,
  [out] CLSID                  **ppclsidMFT,
  [out] UINT32                 *pcMFTs
);

パラメーター

[in] guidCategory

列挙する MFT のカテゴリを指定する GUID。 MFT カテゴリの一覧については、「 MFT_CATEGORY」を参照してください。

[in] Flags

予約済み。 ゼロを指定してください。

[in] pInputType

一致する入力メディアの種類を指定する MFT_REGISTER_TYPE_INFO 構造体へのポインター。

このパラメーターは、NULL でもかまいません。 NULL の場合、すべての入力型が一致します。

[in] pOutputType

一致する出力メディアの種類を指定する MFT_REGISTER_TYPE_INFO 構造体へのポインター。

このパラメーターは、NULL でもかまいません。 NULL の場合、すべての出力型が一致します。

[in] pAttributes

予約済み。 NULL に設定します。

メモ Windows Vista および Windows Server 2008: このパラメーターは、属性ストアの IMFAttributes インターフェイスへのポインターを指定できます。 MFTEnum 関数は、このオブジェクト内の属性をレジストリに格納されている属性と照合します。 (レジストリ属性は、MFTRegister 関数の pAttributes パラメーターで指定されます)。列挙結果には、一致する属性を持つ MFT のみが返されます。
 
メモ Windows 7 以降: このパラメーターは無視されます。
 

[out] ppclsidMFT

CLSID の配列へのポインターを受け取ります。 この一覧から MFT を作成するには、CLSID のいずれかを使用して CoCreateInstance を呼び出します。 CLSID から特定の MFT に関する情報を取得するには、 MFTGetInfo を呼び出します。 呼び出し元は 、CoTaskMemFree を呼び出して、配列のメモリを解放する必要があります。

[out] pcMFTs

ppclsidMFT 配列内の要素の数を受け取ります。 値には 0 を指定できます。

戻り値

この関数が成功すると、 S_OKが返されます。 そうでない場合は、HRESULT エラー コードを返します。

解説

この関数は、pInputType、pOutputType、および pAttributes パラメーターによって指定された検索条件に一致する、指定されたカテゴリ内のすべての MFT の一覧を返します。 これらのパラメーターは、 いずれも NULL にすることができます

条件に一致する MFT がない場合、メソッドは成功しますが、 pcMFT では値 0 を返します。

デコーダーを検索するには、 guidCategoryMFT_CATEGORY_AUDIO_DECODER または MFT_CATEGORY_VIDEO_DECODER に設定し、 pInputType でエンコード形式を指定します。 この場合、通常 、pOutputTypeNULL に設定します。

HRESULT FindDecoder(
    const GUID& subtype,        // Subtype
    BOOL bAudio,                // TRUE for audio, FALSE for video
    IMFTransform **ppDecoder    // Receives a pointer to the decoder.
    )
{
    HRESULT hr = S_OK;
    UINT32 count = 0;

    CLSID *ppCLSIDs = NULL;

    MFT_REGISTER_TYPE_INFO info = { 0 };

    info.guidMajorType = bAudio ? MFMediaType_Audio : MFMediaType_Video;
    info.guidSubtype = subtype;

    hr = MFTEnum(   
        bAudio ? MFT_CATEGORY_AUDIO_DECODER : MFT_CATEGORY_VIDEO_DECODER,
        0,      // Reserved
        &info,  // Input type
        NULL,   // Output type
        NULL,   // Reserved
        &ppCLSIDs,
        &count
        );

    if (SUCCEEDED(hr) && count == 0)
    {
        hr = MF_E_TOPO_CODEC_NOT_FOUND;
    }

    // Create the first decoder in the list.

    if (SUCCEEDED(hr))
    {
        hr = CoCreateInstance(ppCLSIDs[0], NULL,
            CLSCTX_INPROC_SERVER, IID_PPV_ARGS(ppDecoder));
    }

    CoTaskMemFree(ppCLSIDs);
    return hr;
}

エンコーダーを検索するには、 guidCategoryMFT_CATEGORY_AUDIO_ENCODER または MFT_CATEGORY_VIDEO_ENCODER に設定し、エンコード形式を pOutputType で指定します。 この場合、通常 、pInputTypeNULL に設定します。

HRESULT FindEncoder(
    const GUID& subtype, 
    BOOL bAudio, 
    IMFTransform **ppEncoder
    )
{
    HRESULT hr = S_OK;
    UINT32 count = 0;

    CLSID *ppCLSIDs = NULL;

    MFT_REGISTER_TYPE_INFO info = { 0 };

    info.guidMajorType = bAudio ? MFMediaType_Audio : MFMediaType_Video;
    info.guidSubtype = subtype;

    hr = MFTEnum(   
        bAudio ? MFT_CATEGORY_AUDIO_ENCODER : MFT_CATEGORY_VIDEO_ENCODER,
        0,          // Reserved
        NULL,       // Input type
        &info,      // Output type
        NULL,       // Reserved
        &ppCLSIDs,
        &count
        );

    if (SUCCEEDED(hr) && count == 0)
    {
        hr = MF_E_TOPO_CODEC_NOT_FOUND;
    }

    // Create the first encoder in the list.

    if (SUCCEEDED(hr))
    {
        hr = CoCreateInstance(ppCLSIDs[0], NULL,
            CLSCTX_INPROC_SERVER, IID_PPV_ARGS(ppEncoder));
    }

    CoTaskMemFree(ppCLSIDs);
    return hr;
}

要件

   
サポートされている最小のクライアント Windows Vista [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows Server 2008 [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー mfapi.h
Library Mfplat.lib
[DLL] Mfplat.dll

関連項目

トポロジへのデコーダーの追加

MFTEnumEx

MFTRegister

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

Media Foundation の変換

MFT の登録と列挙