移除圖形中的所有篩選
[與此頁面相關的功能 DirectShow是舊版功能。 它已被 MediaPlayer、 IMFMediaEngine和 Media Foundation 中的音訊/視訊擷取取代。 這些功能已針對Windows 10和Windows 11進行優化。 Microsoft 強烈建議新程式碼盡可能使用 MediaPlayer、 IMFMediaEngine 和 音訊/視訊擷取 ,而不是 DirectShow。 Microsoft 建議使用舊版 API 的現有程式碼盡可能重寫為使用新的 API。
移除篩選圖形中所有篩選準則最簡單的方式,就是釋放篩選圖形管理員並建立新的篩選。 請務必釋放應用程式對篩選圖形管理員上任何介面的所有指標,以及圖形中物件的指標,包括篩選、針腳、參考時鐘等等。
或者,您可以使用 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 的任何後續呼叫都會失敗。