00001 00034 #pragma once 00035 00036 #pragma warning(push) // disable for this header only 00037 #pragma warning(disable:4312) 00038 // DirectShow 00039 #include <streams.h> 00040 #pragma warning(pop) // restore original warning level 00041 00042 class CMultiIOInputPin : public CBaseInputPin 00043 { 00044 friend class CMultiIOBaseFilter; 00045 friend class CMultiIOOutputPin; 00046 00047 public: 00048 CMultiIOInputPin(CMultiIOBaseFilter* pFilter, CCritSec* pLock, HRESULT* phr, LPCWSTR pName, int nIndex); 00049 virtual ~CMultiIOInputPin(void); 00050 00051 // lifetime management for pins is normally delegated to the filter, but 00052 // we need to be able to create and delete them independently, so keep 00053 // a separate refcount. 00054 STDMETHODIMP_(ULONG) NonDelegatingRelease() 00055 { 00056 return CUnknown::NonDelegatingRelease(); 00057 } 00058 STDMETHODIMP_(ULONG) NonDelegatingAddRef() 00059 { 00060 return CUnknown::NonDelegatingAddRef(); 00061 } 00062 00063 // check that we can support this output type 00064 HRESULT CheckMediaType(const CMediaType* mtIn); 00065 00066 // connection management -- used to maintain one free pin 00067 HRESULT BreakConnect(); 00068 HRESULT CompleteConnect(IPin *pReceivePin); 00069 00070 // do something with this media sample 00071 STDMETHODIMP Receive(IMediaSample *pSample); 00072 00073 CMediaType& CurrentMediaType() { return m_mt; }; 00074 00075 // set the connection media type 00076 HRESULT SetMediaType(const CMediaType* mt); 00077 00078 // Pass through calls downstream 00079 STDMETHODIMP EndOfStream(); 00080 STDMETHODIMP BeginFlush(); 00081 STDMETHODIMP EndFlush(); 00082 STDMETHODIMP NewSegment( 00083 REFERENCE_TIME tStart, 00084 REFERENCE_TIME tStop, 00085 double dRate); 00086 protected: 00087 CMultiIOBaseFilter* m_pFilter; 00088 int m_nIndex; 00089 };