Entfernen aller Filter im Diagramm
[Das dieser Seite zugeordnete Feature DirectShow ist ein Legacyfeature. Es wurde durch MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation ersetzt. Diese Features wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass neuer Code nach Möglichkeit MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation anstelle von DirectShow verwendet. Microsoft schlägt vor, vorhandenen Code, der die Legacy-APIs verwendet, um nach Möglichkeit die neuen APIs zu verwenden.]
Die einfachste Möglichkeit, alle Filter in einem Filterdiagramm zu entfernen, besteht darin, den Filtergraph-Manager zu freigeben und einen neuen zu erstellen. Stellen Sie sicher, dass Sie jeden Zeiger, über den Ihre Anwendung verfügt, auf alle Schnittstellen im Filterdiagramm-Manager sowie auf Objekte im Graphen freigeben, einschließlich Filtern, Pins, der Referenzuhr usw.
Alternativ können Sie die Filter einzeln mit der IFilterGraph::RemoveFilter-Methode entfernen:
// Stop the graph.
pControl->Stop();
// Enumerate the filters in the graph.
IEnumFilters *pEnum = NULL;
HRESULT hr = pGraph->EnumFilters(&pEnum);
if (SUCCEEDED(hr))
{
IBaseFilter *pFilter = NULL;
while (S_OK == pEnum->Next(1, &pFilter, NULL))
{
// Remove the filter.
pGraph->RemoveFilter(pFilter);
// Reset the enumerator.
pEnum->Reset();
pFilter->Release();
}
pEnum->Release();
}
In diesem Beispiel wird die IFilterGraph::EnumFilters-Methode verwendet, um die Filter im Diagramm aufzulisten. Das Entfernen eines Filters führt dazu, dass das Enumeratorobjekt nicht mehr mit dem Diagramm synchronisiert wird. Verwenden Sie die IEnumFilters::Reset-Methode , um den Enumerator zurückzusetzen. Andernfalls schlägt jeder nachfolgende Aufruf von IEnumFilters::Next fehl.