www.pudn.com > filterasfmuxer_2008_01_23.rar > CXRenderedPin.cpp
// // CXRenderedPin.cpp // /** ** Copyright (C) 2005 EnjoyView Inc., all rights reserved. ** Your View, Our Passion. Just Enjoy It! ** ** http://spaces.msn.com/members/jemylu ** **/ /*************************************************************************/ #include#include "CXRenderedPin.h" #include "CFilterASFMuxer.h" //////////////////////////////////////////////////////////////////////////// CXRenderedPin::CXRenderedPin(CFilterASFMuxer *pFilter, HRESULT *phr, LPCWSTR pPinName, TCHAR *pObjectName) : CRenderedInputPin(pObjectName, pFilter, &pFilter->mSyncFilter, phr, pPinName) { mFilter = pFilter; } CXRenderedPin::~CXRenderedPin() { } STDMETHODIMP CXRenderedPin::Receive(IMediaSample *pSample) { CheckPointer(pSample,E_POINTER); CAutoLock lockit(&mSyncRecv); HRESULT hr = CRenderedInputPin::Receive(pSample); if (SUCCEEDED(hr)) { hr = ReceiveXSample(pSample); } return hr; } HRESULT CXRenderedPin::ReceiveXSample(IMediaSample * pSample) { return NOERROR; } STDMETHODIMP CXRenderedPin::BeginFlush() { CAutoLock lck(&mFilter->mSyncFilter); return CRenderedInputPin::BeginFlush(); } STDMETHODIMP CXRenderedPin::EndFlush() { CAutoLock lck(&mFilter->mSyncFilter); return CRenderedInputPin::EndFlush(); } STDMETHODIMP CXRenderedPin::EndOfStream() { CAutoLock lockit(&mSyncRecv); HRESULT hr = CheckStreaming(); // Let the filter to do EC_COMPLETE handling for rendered pins if (S_OK == hr && !m_bAtEndOfStream) { m_bAtEndOfStream = TRUE; hr = mFilter->XEndOfStream(); } return hr; } BOOL CXRenderedPin::IsEOSReceived(void) { return m_bAtEndOfStream; } HRESULT CXRenderedPin::AfterCompleteHandling(void) { m_bCompleteNotified = TRUE; return S_OK; } // Notify of Run() from filter HRESULT CXRenderedPin::Run(REFERENCE_TIME tStart) { UNREFERENCED_PARAMETER(tStart); m_bCompleteNotified = FALSE; if (m_bAtEndOfStream) { mFilter->XEndOfStream(); } return S_OK; } STDMETHODIMP CXRenderedPin::ReceiveCanBlock(void) { return S_OK; }