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; 
}