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