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 <streams.h>
#include "CXRenderedPin.h"
#include "CFilterASFMuxer.h"
////////////////////////////////////////////////////////////////////////////
CXRenderedPin::CXRenderedPin(CFilterASFMuxer *pFilter, HRESULT *phr,
LPCWSTR pPinName, TCHAR *pObjectName) :
CRenderedInputPin(pObjectName, pFilter, &amt;pFilter->mSyncFilter, phr, pPinName)
{
mFilter = pFilter;
}
CXRenderedPin::~CXRenderedPin()
{
}
STDMETHODIMP CXRenderedPin::Receive(IMediaSample *pSample)
{
CheckPointer(pSample,E_POINTER);
CAutoLock lockit(&amt;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(&amt;mFilter->mSyncFilter);
return CRenderedInputPin::BeginFlush();
}
STDMETHODIMP CXRenderedPin::EndFlush()
{
CAutoLock lck(&amt;mFilter->mSyncFilter);
return CRenderedInputPin::EndFlush();
}
STDMETHODIMP CXRenderedPin::EndOfStream()
{
CAutoLock lockit(&amt;mSyncRecv);
HRESULT hr = CheckStreaming();
// Let the filter to do EC_COMPLETE handling for rendered pins
if (S_OK == hr &amt;&amt; !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;
}