#ifndef INPUTPIN_H #define INPUTPIN_H #include "interfaces.h" #include "guids.h" #include "iunk.h" class CBaseFilter2; class CBaseFilter: public IBaseFilter { IPin* pin; IPin* unused_pin; static GUID interfaces[]; DECLARE_IUNKNOWN(CBaseFilter) public: CBaseFilter(const AM_MEDIA_TYPE& vhdr, CBaseFilter2* parent); ~CBaseFilter(){delete vt;pin->vt->Release((IUnknown*)pin);unused_pin->vt->Release((IUnknown*)unused_pin);} IPin* GetPin() {pin->vt->AddRef((IUnknown*)pin);return pin;} IPin* GetUnusedPin() {unused_pin->vt->AddRef((IUnknown*)unused_pin);return unused_pin;} // static HRESULT STDCALL QueryInterface(IUnknown* This, GUID* iid, void** ppv); // static HRESULT STDCALL AddRef(IUnknown* This); // static HRESULT STDCALL Release(IUnknown* This); static HRESULT STDCALL GetClassID ( IBaseFilter * This, /* [out] */ CLSID *pClassID); static HRESULT STDCALL Stop ( IBaseFilter * This); static HRESULT STDCALL Pause ( IBaseFilter * This); static HRESULT STDCALL Run ( IBaseFilter * This, REFERENCE_TIME tStart); static HRESULT STDCALL GetState ( IBaseFilter * This, /* [in] */ DWORD dwMilliSecsTimeout, // /* [out] */ FILTER_STATE *State); void* State); static HRESULT STDCALL SetSyncSource ( IBaseFilter * This, /* [in] */ IReferenceClock *pClock); static HRESULT STDCALL GetSyncSource ( IBaseFilter * This, /* [out] */ IReferenceClock **pClock); static HRESULT STDCALL EnumPins ( IBaseFilter * This, /* [out] */ IEnumPins **ppEnum); static HRESULT STDCALL FindPin ( IBaseFilter * This, /* [string][in] */ LPCWSTR Id, /* [out] */ IPin **ppPin); static HRESULT STDCALL QueryFilterInfo ( IBaseFilter * This, // /* [out] */ FILTER_INFO *pInfo); void* pInfo); static HRESULT STDCALL JoinFilterGraph ( IBaseFilter * This, /* [in] */ IFilterGraph *pGraph, /* [string][in] */ LPCWSTR pName); static HRESULT STDCALL QueryVendorInfo ( IBaseFilter * This, /* [string][out] */ LPWSTR *pVendorInfo); }; class CInputPin: public IPin { AM_MEDIA_TYPE type; CBaseFilter* parent; static GUID interfaces[]; DECLARE_IUNKNOWN(CInputPin) public: CInputPin(CBaseFilter* parent, const AM_MEDIA_TYPE& vhdr); ~CInputPin(){delete vt;} // IPin* GetPin(); // static HRESULT STDCALL QueryInterface(IUnknown* This, GUID* iid, void** ppv); // static HRESULT STDCALL AddRef(IUnknown* This); // static HRESULT STDCALL Release(IUnknown* This); static HRESULT STDCALL Connect ( IPin * This, /* [in] */ IPin *pReceivePin, /* [in] */ AM_MEDIA_TYPE *pmt); static HRESULT STDCALL ReceiveConnection ( IPin * This, /* [in] */ IPin *pConnector, /* [in] */ const AM_MEDIA_TYPE *pmt); static HRESULT STDCALL Disconnect ( IPin * This); static HRESULT STDCALL ConnectedTo ( IPin * This, /* [out] */ IPin **pPin); static HRESULT STDCALL ConnectionMediaType ( IPin * This, /* [out] */ AM_MEDIA_TYPE *pmt); static HRESULT STDCALL QueryPinInfo ( IPin * This, /* [out] */ PIN_INFO *pInfo); static HRESULT STDCALL QueryDirection ( IPin * This, /* [out] */ PIN_DIRECTION *pPinDir); static HRESULT STDCALL QueryId ( IPin * This, /* [out] */ LPWSTR *Id); static HRESULT STDCALL QueryAccept ( IPin * This, /* [in] */ const AM_MEDIA_TYPE *pmt); static HRESULT STDCALL EnumMediaTypes ( IPin * This, /* [out] */ IEnumMediaTypes **ppEnum); static HRESULT STDCALL QueryInternalConnections ( IPin * This, /* [out] */ IPin **apPin, /* [out][in] */ ULONG *nPin); static HRESULT STDCALL EndOfStream ( IPin * This); static HRESULT STDCALL BeginFlush ( IPin * This); static HRESULT STDCALL EndFlush ( IPin * This); static HRESULT STDCALL NewSegment ( IPin * This, /* [in] */ REFERENCE_TIME tStart, /* [in] */ REFERENCE_TIME tStop, /* [in] */ double dRate); }; class CBaseFilter2: public IBaseFilter { IPin* pin; static GUID interfaces[]; DECLARE_IUNKNOWN(CBaseFilter2) public: CBaseFilter2(); ~CBaseFilter2(){delete vt;pin->vt->Release((IUnknown*)pin);} IPin* GetPin() {pin->vt->AddRef((IUnknown*)pin);return pin;} // static HRESULT STDCALL QueryInterface(IUnknown* This, GUID* iid, void** ppv); // static HRESULT STDCALL AddRef(IUnknown* This); // static HRESULT STDCALL Release(IUnknown* This); static HRESULT STDCALL GetClassID ( IBaseFilter * This, /* [out] */ CLSID *pClassID); static HRESULT STDCALL Stop ( IBaseFilter * This); static HRESULT STDCALL Pause ( IBaseFilter * This); static HRESULT STDCALL Run ( IBaseFilter * This, REFERENCE_TIME tStart); static HRESULT STDCALL GetState ( IBaseFilter * This, /* [in] */ DWORD dwMilliSecsTimeout, // /* [out] */ FILTER_STATE *State); void* State); static HRESULT STDCALL SetSyncSource ( IBaseFilter * This, /* [in] */ IReferenceClock *pClock); static HRESULT STDCALL GetSyncSource ( IBaseFilter * This, /* [out] */ IReferenceClock **pClock); static HRESULT STDCALL EnumPins ( IBaseFilter * This, /* [out] */ IEnumPins **ppEnum); static HRESULT STDCALL FindPin ( IBaseFilter * This, /* [string][in] */ LPCWSTR Id, /* [out] */ IPin **ppPin); static HRESULT STDCALL QueryFilterInfo ( IBaseFilter * This, // /* [out] */ FILTER_INFO *pInfo); void* pInfo); static HRESULT STDCALL JoinFilterGraph ( IBaseFilter * This, /* [in] */ IFilterGraph *pGraph, /* [string][in] */ LPCWSTR pName); static HRESULT STDCALL QueryVendorInfo ( IBaseFilter * This, /* [string][out] */ LPWSTR *pVendorInfo); }; class CRemotePin: public IPin { CBaseFilter* parent; IPin* remote_pin; static GUID interfaces[]; DECLARE_IUNKNOWN(CRemotePin) public: CRemotePin(CBaseFilter* pt, IPin* rpin); ~CRemotePin(){delete vt;} // static HRESULT STDCALL QueryInterface(IUnknown* This, GUID* iid, void** ppv); // static HRESULT STDCALL AddRef(IUnknown* This); // static HRESULT STDCALL Release(IUnknown* This); static HRESULT STDCALL ConnectedTo ( IPin * This, /* [out] */ IPin **pPin); static HRESULT STDCALL QueryDirection ( IPin * This, /* [out] */ PIN_DIRECTION *pPinDir); static HRESULT STDCALL ConnectionMediaType ( IPin * This, /* [out] */ AM_MEDIA_TYPE *pmt); static HRESULT STDCALL QueryPinInfo ( IPin * This, /* [out] */ PIN_INFO *pInfo); }; class CRemotePin2: public IPin { CBaseFilter2* parent; static GUID interfaces[]; DECLARE_IUNKNOWN(CRemotePin2) public: CRemotePin2(CBaseFilter2* parent); ~CRemotePin2(){delete vt;} static HRESULT STDCALL QueryPinInfo ( IPin * This, /* [out] */ PIN_INFO *pInfo); }; #endif