Exemple #1
0
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;
}