www.pudn.com > VOBSUB.rar > DirectVobSubInputPin.cpp
#include "stdafx.h"
#include "DirectVobSubFilter.h"
#include "DirectVobSubInputPin.h"
#include "misc.h"
CDirectVobSubInputPin::CDirectVobSubInputPin(CDirectVobSubFilter* pFilter, HRESULT* phr)
: CTransformInputPin(NAME("CDirectVobSubInputPin"), pFilter, phr, L"XForm In")
, m_pFilter(pFilter)
{
}
STDMETHODIMP CDirectVobSubInputPin::Disconnect()
{
if(m_pFilter->m_pOutput && m_pFilter->m_pOutput->IsConnected())
m_pFilter->m_pOutput->Disconnect();
return CTransformInputPin::Disconnect();
}
STDMETHODIMP CDirectVobSubInputPin::GetAllocator(IMemAllocator** ppAllocator)
{
CheckPointer(ppAllocator, E_POINTER);
if(m_pAllocator == NULL)
{
m_pAllocator = (IMemAllocator*)&m_pFilter->m_Allocator;
m_pAllocator->AddRef();
}
m_pAllocator->AddRef();
*ppAllocator = m_pAllocator;
return NOERROR;
}
STDMETHODIMP CDirectVobSubInputPin::NotifyAllocator(IMemAllocator* pAllocator, BOOL bReadOnly)
{
HRESULT hr = CBaseInputPin::NotifyAllocator(pAllocator, bReadOnly);
if(FAILED(hr)) return hr;
m_pFilter->m_fUsingOwnAllocator = (pAllocator == (IMemAllocator*)&m_pFilter->m_Allocator);
return NOERROR;
}