STDMETHODIMP VideoFakeSrc::JoinFilterGraph(IFilterGraph* pGraph, LPCWSTR pName) { HRESULT hr; // The filter is joining the filter graph. if(NULL != pGraph) { IGraphConfig* pGraphConfig = NULL; hr = pGraph->QueryInterface(IID_IGraphConfig, (void**)&pGraphConfig); if(FAILED(hr)) return hr; hr = CBaseFilter::JoinFilterGraph(pGraph, pName); if(FAILED(hr)) { pGraphConfig->Release(); return hr; } m_pOutputPin->SetConfigInfo(pGraphConfig, m_evFilterStoppingEvent); pGraphConfig->Release(); } else { hr = CBaseFilter::JoinFilterGraph(pGraph, pName); if(FAILED(hr)) return hr; m_pOutputPin->SetConfigInfo(NULL, NULL); } return S_OK; }
STDMETHODIMP CDynamicSource::JoinFilterGraph(IFilterGraph* pGraph, LPCWSTR pName) { CAutoLock lock(&m_cStateLock); HRESULT hr; int nCurrentPin; CDynamicSourceStream* pOutputPin; // The filter is joining the filter graph. if(NULL != pGraph) { IGraphConfig* pGraphConfig = NULL; hr = pGraph->QueryInterface(IID_IGraphConfig, (void**)&pGraphConfig); if(FAILED(hr)) { return hr; } hr = CBaseFilter::JoinFilterGraph(pGraph, pName); if(FAILED(hr)) { pGraphConfig->Release(); return hr; } for(nCurrentPin = 0; nCurrentPin < GetPinCount(); nCurrentPin++) { pOutputPin = (CDynamicSourceStream*) GetPin(nCurrentPin); pOutputPin->SetConfigInfo(pGraphConfig, m_evFilterStoppingEvent); } pGraphConfig->Release(); } else { hr = CBaseFilter::JoinFilterGraph(pGraph, pName); if(FAILED(hr)) { return hr; } for(nCurrentPin = 0; nCurrentPin < GetPinCount(); nCurrentPin++) { pOutputPin = (CDynamicSourceStream*)GetPin(nCurrentPin); pOutputPin->SetConfigInfo(NULL, NULL); } } return S_OK; }