HRESULT CStreamSwitcherFilter::CompleteConnect(PIN_DIRECTION dir, CBasePin* pPin, IPin* pReceivePin) { if (dir == PINDIR_INPUT) { CAutoLock cAutoLock(&m_csPins); int nConnected = GetConnectedInputPinCount(); if (nConnected == 1) { m_pInput = static_cast<CStreamSwitcherInputPin*>(pPin); } if ((size_t)nConnected == m_pInputs.GetCount()) { CStringW name; name.Format(L"Channel %d", ++m_PinVersion); HRESULT hr = S_OK; CStreamSwitcherInputPin* pPin = DEBUG_NEW CStreamSwitcherInputPin(this, &hr, name); if (!pPin || FAILED(hr)) { delete pPin; return E_FAIL; } m_pInputs.AddTail(pPin); } } return S_OK; }
STDMETHODIMP CStreamSwitcherFilter::Count(DWORD* pcStreams) { if(!pcStreams) return E_POINTER; CAutoLock cAutoLock(&m_csPins); *pcStreams = GetConnectedInputPinCount(); return S_OK; }