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