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.
[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