Condividi tramite


Funzione MFTEnum (mfapi.h)

Enumera le trasformazioni di Media Foundation nel Registro di sistema.

A partire da Windows 7, le applicazioni devono usare invece la funzione MFTEnumEx .

Sintassi

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

Parametri

[in] guidCategory

GUID che specifica la categoria di MFT da enumerare. Per un elenco di categorie MFT, vedere MFT_CATEGORY.

[in] Flags

Riservato. Deve essere zero.

[in] pInputType

Puntatore a una struttura MFT_REGISTER_TYPE_INFO che specifica un tipo di supporto di input da corrispondere.

Questo parametro può essere NULL. Se NULL, tutti i tipi di input vengono corrispondenti.

[in] pOutputType

Puntatore a una struttura MFT_REGISTER_TYPE_INFO che specifica un tipo di supporto di output da corrispondere.

Questo parametro può essere NULL. Se NULL, tutti i tipi di output vengono corrispondenti.

[in] pAttributes

Riservato. Impostare su NULL.

Nota Windows Vista e Windows Server 2008: questo parametro può specificare un puntatore all'interfaccia IMFAttributes di un archivio attributi. La funzione MFTEnum corrisponde agli attributi in questo oggetto rispetto agli attributi archiviati nel Registro di sistema. Gli attributi del Registro di sistema vengono specificati nel parametro pAttributes della funzione MFTRegister . Nei risultati dell'enumerazione vengono restituiti solo le mft con attributi corrispondenti.
 
Nota Windows 7 e versioni successive: questo parametro viene ignorato.
 

[out] ppclsidMFT

Riceve un puntatore a una matrice di CLSID. Per creare un MFT da questo elenco, chiamare CoCreateInstance con uno dei CLSID. Per ottenere informazioni su un determinato MFT dal CLSID, chiamare MFTGetInfo. Il chiamante deve liberare la memoria per la matrice chiamando CoTaskMemFree.

[out] pcMFTs

Riceve il numero di elementi nella matrice ppclsidMFT . Il valore può essere zero.

Valore restituito

Se questa funzione ha esito positivo, restituisce S_OK. In caso contrario, restituisce un codice di errore HRESULT .

Commenti

Questa funzione restituisce un elenco di tutte le MFU nella categoria specificata che corrispondono ai criteri di ricerca specificati dai parametri pInputType, pOutputType e pAttributes. Uno di questi parametri può essere NULL.

Se non corrispondono ai criteri, il metodo ha esito positivo, ma restituisce il valore zero in pcMFTs.

Esempio

Per trovare un decodificatore, impostare guidCategory su MFT_CATEGORY_AUDIO_DECODER o MFT_CATEGORY_VIDEO_DECODER e specificare il formato di codifica in pInputType. In questo caso si imposta in genere pOutputType su NULL .

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

Per trovare un codificatore, impostare guidCategory su MFT_CATEGORY_AUDIO_ENCODER o MFT_CATEGORY_VIDEO_ENCODER e specificare il formato di codifica in pOutputType. In questo caso, si imposta in genere pInputType su NULL .

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

Requisiti

   
Client minimo supportato Windows Vista [solo app desktop]
Server minimo supportato Windows Server 2008 [solo app desktop]
Piattaforma di destinazione Windows
Intestazione mfapi.h
Libreria Mfplat.lib
DLL Mfplat.dll

Vedi anche

Aggiunta di un decodificatore a una topologia

MFTEnumEx

MFTRegister

Funzioni di Media Foundation

Trasformazioni di Media Foundation

Registrazione ed enumerazione delle schede multifunzione