The function can connect any two filters.
HRESULT ConnectFilters( IBaseFilter *pSrc, IBaseFilter *pDest ){IPin *pIn = 0;IPin *pOut = 0;IEnumPins *pOutEnum;IEnumPins *pInEnum;PIN_DIRECTION ThisPinDir;HRESULT hr = pSrc->EnumPins( &pOutEnum );hr = pDest->EnumPins( &pInEnum );while (pOutEnum->Next( 1, &pOut, NULL) == S_OK ){hr = pOut->QueryDirection( &ThisPinDir );while( ThisPinDir==PINDIR_OUTPUT && pInEnum->Next( 1, &pIn, 0 ) == S_OK ){hr = pIn->QueryDirection( &ThisPinDir );if( ThisPinDir==PINDIR_INPUT ){// Try to connect them.hr = pigb->Connect( pOut, pIn);if(SUCCEEDED(hr)){hr = pOutEnum->Release();hr = pInEnum->Release();hr = pIn->Release();hr = pOut->Release();return S_OK;}}hr = pIn->Release();}//end whilehr = pInEnum->Reset();hr = pOut->Release(); }//end whilepOutEnum->Reset();hr = pOutEnum->Release();hr = pInEnum->Release(); return E_FAIL;}
The function can connect any two filters.