Bagikan melalui


Fungsi MFTEnum (mfapi.h)

Menghitung transformasi Media Foundation (MFTs) dalam registri.

Mulai windows 7, aplikasi harus menggunakan fungsi MFTEnumEx sebagai gantinya.

Sintaks

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
);

Parameter

[in] guidCategory

GUID yang menentukan kategori MFTs untuk dijumlahkan. Untuk daftar kategori MFT, lihat MFT_CATEGORY.

[in] Flags

Dicadangkan. Harus nol.

[in] pInputType

Penunjuk ke struktur MFT_REGISTER_TYPE_INFO yang menentukan jenis media input yang cocok.

Parameter ini bisa NULL. Jika NULL, semua jenis input dicocokkan.

[in] pOutputType

Penunjuk ke struktur MFT_REGISTER_TYPE_INFO yang menentukan jenis media output yang cocok.

Parameter ini bisa NULL. Jika NULL, semua jenis output dicocokkan.

[in] pAttributes

Dicadangkan. Atur ke NULL.

Catatan Windows Vista dan Windows Server 2008: Parameter ini dapat menentukan penunjuk ke antarmuka IMFAttributes dari penyimpanan atribut. Fungsi MFTEnum cocok dengan atribut dalam objek ini dengan atribut yang disimpan dalam registri. (Atribut registri ditentukan dalam parameter pAttributes dari fungsi MFTRegister .) Hanya MFT dengan atribut yang cocok yang dikembalikan dalam hasil enumerasi.
 
Catatan Windows 7 dan yang lebih baru: Parameter ini diabaikan.
 

[out] ppclsidMFT

Menerima pointer ke array CLSID. Untuk membuat MFT dari daftar ini, panggil CoCreateInstance dengan salah satu CLSID. Untuk mendapatkan informasi tentang MFT tertentu dari CLSID-nya, panggil MFTGetInfo. Pemanggil harus membebaskan memori untuk array dengan memanggil CoTaskMemFree.

[out] pcMFTs

Menerima jumlah elemen dalam array ppclsidMFT . Nilainya bisa nol.

Nilai kembali

Jika fungsi ini berhasil, fungsi akan mengembalikan S_OK. Jika tidak, kode kesalahan HRESULT akan dikembalikan.

Keterangan

Fungsi ini mengembalikan daftar semua MFTs dalam kategori yang ditentukan yang cocok dengan kriteria pencarian yang diberikan oleh parameter pInputType, pOutputType, dan pAttributes . Salah satu parameter tersebut dapat berupa NULL.

Jika tidak ada MFT yang cocok dengan kriteria, metode berhasil tetapi mengembalikan nilai nol di pcMFTs.

Contoh

Untuk menemukan dekoder, atur guidCategory ke MFT_CATEGORY_AUDIO_DECODER atau MFT_CATEGORY_VIDEO_DECODER dan tentukan format pengodean dalam pInputType. Anda biasanya akan mengatur pOutputType ke NULL dalam kasus ini.

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;
}

Untuk menemukan encoder, atur guidCategory ke MFT_CATEGORY_AUDIO_ENCODER atau MFT_CATEGORY_VIDEO_ENCODER dan tentukan format pengodean dalam pOutputType. Anda biasanya akan mengatur pInputType ke NULL dalam kasus ini.

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;
}

Persyaratan

   
Klien minimum yang didukung Windows Vista [hanya aplikasi desktop]
Server minimum yang didukung Windows Server 2008 [hanya aplikasi desktop]
Target Platform Windows
Header mfapi.h
Pustaka Mfplat.lib
DLL Mfplat.dll

Lihat juga

Menambahkan Dekoder ke Topologi

MFTEnumEx

MFTRegister

Fungsi Media Foundation

Transformasi Media Foundation

Mendaftar dan Menghitung MFTs