Freigeben über


MFTEnum-Funktion (mfapi.h)

Listet Media Foundation-Transformationen (MFTs) in der Registrierung auf.

Ab Windows 7 sollten Anwendungen stattdessen die MFTEnumEx-Funktion verwenden.

Syntax

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, die die Kategorie der aufzuzählenden MFTs angibt. Eine Liste der MFT-Kategorien finden Sie unter MFT_CATEGORY.

[in] Flags

Reserviert. Muss Null sein.

[in] pInputType

Zeiger auf eine MFT_REGISTER_TYPE_INFO-Struktur , die einen zu übereinstimmenden Eingabemedientyp angibt.

Dieser Parameter kann NULL sein. Wenn NULL, werden alle Eingabetypen abgeglichen.

[in] pOutputType

Zeiger auf eine MFT_REGISTER_TYPE_INFO-Struktur , die einen Ausgabemedientyp angibt, der übereinstimmen soll.

Dieser Parameter kann NULL sein. Wenn NULL, werden alle Ausgabetypen abgeglichen.

[in] pAttributes

Reserviert. Auf NULL festgelegt.

Hinweis Windows Vista und Windows Server 2008: Dieser Parameter kann einen Zeiger auf die IMFAttributes-Schnittstelle eines Attributspeichers angeben. Die MFTEnum-Funktion gleicht die Attribute in diesem Objekt mit den in der Registrierung gespeicherten Attributen ab. (Registrierungsattribute werden im pAttributes-Parameter der MFTRegister-Funktion angegeben.) Nur MFTs mit übereinstimmenden Attributen werden in den Enumerationsergebnissen zurückgegeben.
 
Hinweis Windows 7 und höher: Dieser Parameter wird ignoriert.
 

[out] ppclsidMFT

Empfängt einen Zeiger auf ein Array von CLSIDs. Um ein MFT aus dieser Liste zu erstellen, rufen Sie CoCreateInstance mit einer der CLSIDs auf. Rufen Sie MFTGetInfo auf, um Informationen zu einem bestimmten MFT aus seiner CLSID abzurufen. Der Aufrufer muss den Arbeitsspeicher für das Array durch Aufrufen von CoTaskMemFree freigeben.

[out] pcMFTs

Empfängt die Anzahl der Elemente im ppclsidMFT-Array . Der Wert kann null sein.

Rückgabewert

Wenn diese Funktion erfolgreich ist, wird S_OK zurückgegeben. Andernfalls wird ein Fehlercode HRESULT zurückgegeben.

Hinweise

Diese Funktion gibt eine Liste aller MFTs in der angegebenen Kategorie zurück, die den Suchkriterien der Parameter pInputType, pOutputType und pAttributes entsprechen. Jeder dieser Parameter kann NULL sein.

Wenn keine MFTs den Kriterien entsprechen, ist die Methode erfolgreich, gibt jedoch den Wert 0 (null) in pcMFTs zurück.

Beispiele

Um einen Decoder zu finden, legen Sie guidCategory auf MFT_CATEGORY_AUDIO_DECODER oder MFT_CATEGORY_VIDEO_DECODER fest, und geben Sie das Codierungsformat in pInputType an. In diesem Fall würden Sie pOutputType in der Regel auf NULL festlegen.

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

Um einen Encoder zu finden, legen Sie guidCategory auf MFT_CATEGORY_AUDIO_ENCODER oder MFT_CATEGORY_VIDEO_ENCODER fest, und geben Sie das Codierungsformat in pOutputType an. In diesem Fall würden Sie pInputType in der Regel auf NULL festlegen.

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

Anforderungen

   
Unterstützte Mindestversion (Client) Windows Vista [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows Server 2008 [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile mfapi.h
Bibliothek Mfplat.lib
DLL Mfplat.dll

Weitere Informationen

Hinzufügen eines Decoders zu einer Topologie

MFTEnumEx

MFTRegister

Media Foundation-Funktionen

Media Foundation-Transformationen

Registrieren und Aufzählen von MFTs