STDMETHODIMP CBaseMuxerFilter::SetPositions(LONGLONG* pCurrent, DWORD dwCurrentFlags, LONGLONG* pStop, DWORD dwStopFlags) { FILTER_STATE fs; if(SUCCEEDED(GetState(0, &fs)) && fs == State_Stopped) { POSITION pos = m_pInputs.GetHeadPosition(); while(pos) { CBasePin* pPin = m_pInputs.GetNext(pos); CComQIPtr<IMediaSeeking> pMS = pPin->GetConnected(); if(!pMS) pMS = GetFilterFromPin(pPin->GetConnected()); if(pMS) pMS->SetPositions(pCurrent, dwCurrentFlags, pStop, dwStopFlags); } return S_OK; } return VFW_E_WRONG_STATE; }
// if bSet, only accept settable pins SeekingCollection(CBaseFilter* pFilter) { for (int i = 0; i < pFilter->GetPinCount(); i++) { CBasePin* pPin = pFilter->GetPin(i); PIN_DIRECTION pindir; pPin->QueryDirection(&pindir); if (pindir == PINDIR_INPUT) { IMediaSeekingPtr pSeek = pPin->GetConnected(); if (pSeek != NULL) { m_Pins.push_back(pSeek.Detach()); } } } }