Supprimer tous les filtres dans le graphique
[La fonctionnalité associée à cette page, DirectShow, est une fonctionnalité héritée. Il a été remplacé par MediaPlayer, IMFMediaEngine et Audio/Video Capture dans Media Foundation. Ces fonctionnalités ont été optimisées pour Windows 10 et Windows 11. Microsoft recommande vivement au nouveau code d’utiliser MediaPlayer, IMFMediaEngine et La capture audio/vidéo dans Media Foundation au lieu de DirectShow, lorsque cela est possible. Microsoft suggère que le code existant qui utilise les API héritées soit réécrit pour utiliser les nouvelles API si possible.]
Le moyen le plus simple de supprimer tous les filtres d’un graphe de filtre consiste simplement à libérer le Gestionnaire de graphes de filtre et à en créer un nouveau. Veillez à libérer chaque pointeur dont votre application dispose vers toutes les interfaces sur les gestionnaires de graphes de filtre, ainsi que les pointeurs vers les objets du graphe, y compris les filtres, les épingles, l’horloge de référence, etc.
Vous pouvez également supprimer les filtres un par un, à l’aide de la méthode IFilterGraph::RemoveFilter :
// 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();
}
Cet exemple utilise la méthode IFilterGraph::EnumFilters pour énumérer les filtres dans le graphique. La suppression d’un filtre entraîne la désynchronisation de l’objet énumérateur avec le graphique. Utilisez la méthode IEnumFilters::Reset pour réinitialiser l’énumérateur. Sinon, tout appel ultérieur à IEnumFilters::Next échoue.