删除图形中的所有筛选器
[与此页面关联的功能(DirectShow)是一项旧功能。 它已被 MediaPlayer、IMFMediaEngine取代,并在媒体基金会 音频/视频捕获。 这些功能已针对 Windows 10 和 Windows 11 进行了优化。 Microsoft强烈建议新代码尽可能使用 MediaPlayer、IMFMediaEngine 和 Media Foundation 中的音频/视频捕获,而不是 DirectShow。 Microsoft建议重写使用旧 API 的现有代码,以尽可能使用新 API。]
删除筛选器图中所有筛选器的最简单方法是释放 Filter Graph 管理器并创建新的筛选器。 请确保释放应用程序对筛选器图形管理器上任何接口的每个指针,以及指向图形中对象的指针,包括筛选器、引脚、引用时钟等。
或者,可以使用 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();
}
此示例使用 IFilterGraph::EnumFilters 方法枚举图形中的筛选器。 删除筛选器会导致枚举器对象与图形不同步。 使用 IEnumFilters::Reset 方法重置枚举器。 否则,对 IEnumFilters::Next 的任何后续调用都将失败。