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 CMultiIOOutputPin : public CBaseOutputPin 00043 { 00044 friend class CMultiIOBaseFilter; 00045 friend class CMultiIOInputPin; 00046 public: 00047 CMultiIOOutputPin(CMultiIOBaseFilter* pFilter, CCritSec* pLock, HRESULT* phr, LPCWSTR pName, int nIndex); 00048 virtual ~CMultiIOOutputPin(void); 00049 00050 // lifetime management for pins is normally delegated to the filter, but 00051 // we need to be able to create and delete them independently, so keep 00052 // a separate refcount. 00053 STDMETHODIMP_(ULONG) NonDelegatingRelease() 00054 { 00055 return CUnknown::NonDelegatingRelease(); 00056 } 00057 STDMETHODIMP_(ULONG) NonDelegatingAddRef() 00058 { 00059 return CUnknown::NonDelegatingAddRef(); 00060 } 00061 00062 HRESULT CompleteConnect(IPin *pReceivePin); 00063 00064 // From CBaseOutputPin 00065 virtual HRESULT DecideBufferSize(IMemAllocator* pAlloc, ALLOCATOR_PROPERTIES* pRequestProperties); 00066 // From CBasePin 00067 virtual HRESULT CheckMediaType(const CMediaType* pMediaType); 00068 00069 HRESULT GetMediaType(int iPosition, CMediaType* pmt); 00070 00071 // inherited from IQualityControl via CBasePin 00072 STDMETHODIMP Notify(IBaseFilter * pSender, Quality q); 00073 00074 IMemAllocator* GetAllocator(){return m_pAllocator;} 00075 IMemInputPin* GetInputPin(){return m_pInputPin;} 00076 00077 // Overridden to create output queue's 00078 HRESULT Active(); 00079 HRESULT Inactive(); 00080 HRESULT Deliver(IMediaSample *pMediaSample); 00081 HRESULT DeliverEndOfStream(); 00082 HRESULT DeliverBeginFlush(); 00083 HRESULT DeliverEndFlush(); 00084 HRESULT DeliverNewSegment( 00085 REFERENCE_TIME tStart, 00086 REFERENCE_TIME tStop, 00087 double dRate); 00088 00089 protected: 00090 CMultiIOBaseFilter* m_pFilter; 00091 int m_nIndex; 00092 00093 COutputQueue* m_pOutputQueue; 00094 };