共用方式為


移除圖形中的所有篩選

[與此頁面相關的功能 DirectShow是舊版功能。 它已被 MediaPlayerIMFMediaEngineMedia Foundation 中的音訊/視訊擷取取代。 這些功能已針對Windows 10和Windows 11進行優化。 Microsoft 強烈建議新程式碼盡可能使用 MediaPlayerIMFMediaEngine音訊/視訊擷取 ,而不是 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 的任何後續呼叫都會失敗。