/** * This file has no copyright assigned and is placed in the Public Domain. * This file is part of the mingw-w64 runtime package. * No warranty is given; refer to the file DISCLAIMER.PD within this package. */ #ifndef _MSPTERM_H_ #define _MSPTERM_H_ template <class T> class ITTerminalVtblBase : public ITTerminal { }; class CBaseTerminal : virtual public CComObjectRootEx<CComMultiThreadModelNoCS>,public IDispatchImpl<ITTerminalVtblBase<CBaseTerminal>,&IID_ITTerminal,&LIBID_TAPI3Lib>,public ITTerminalControl { BEGIN_COM_MAP(CBaseTerminal) COM_INTERFACE_ENTRY(IDispatch) COM_INTERFACE_ENTRY(ITTerminal) COM_INTERFACE_ENTRY(ITTerminalControl) COM_INTERFACE_ENTRY_AGGREGATE(IID_IMarshal,m_pFTM) END_COM_MAP() DECLARE_VQI() DECLARE_GET_CONTROLLING_UNKNOWN() public: CBaseTerminal(); virtual ~CBaseTerminal(); public: STDMETHOD(get_TerminalClass)(BSTR *pVal); STDMETHOD(get_TerminalType)(TERMINAL_TYPE *pVal); STDMETHOD(get_State)(TERMINAL_STATE *pVal); STDMETHOD(get_Name)(BSTR *pVal); STDMETHOD(get_MediaType)(__LONG32 *plMediaType); STDMETHOD(get_Direction)(TERMINAL_DIRECTION *pDirection); public: virtual HRESULT Initialize(IID iidTerminalClass,DWORD dwMediaType,TERMINAL_DIRECTION Direction,MSP_HANDLE htAddress); public: STDMETHOD (get_AddressHandle)(MSP_HANDLE *phtAddress); STDMETHOD (ConnectTerminal)(IGraphBuilder *pGraph,DWORD dwTerminalDirection,DWORD *pdwNumPins,IPin **ppPins); STDMETHOD (CompleteConnectTerminal)(void); STDMETHOD (DisconnectTerminal)(IGraphBuilder *pGraph,DWORD dwReserved); STDMETHOD (RunRenderFilter)(void) = 0; STDMETHOD (StopRenderFilter)(void) = 0; protected: CMSPCritSection m_CritSec; public: TERMINAL_DIRECTION m_TerminalDirection; TERMINAL_TYPE m_TerminalType; TERMINAL_STATE m_TerminalState; TCHAR m_szName[MAX_PATH + 1]; IID m_TerminalClassID; DWORD m_dwMediaType; MSP_HANDLE m_htAddress; IUnknown *m_pFTM; CComPtr<IGraphBuilder> m_pGraph; virtual HRESULT AddFiltersToGraph() = 0; virtual HRESULT ConnectFilters() { return S_OK; } virtual HRESULT GetNumExposedPins(IGraphBuilder *pGraph,DWORD *pdwNumPins) = 0; virtual HRESULT GetExposedPins(IPin **ppPins) = 0; virtual DWORD GetSupportedMediaTypes(void) = 0; virtual HRESULT RemoveFiltersFromGraph() = 0; WINBOOL MediaTypeSupported(__LONG32 lMediaType); }; class CSingleFilterTerminal : public CBaseTerminal { public: CComPtr<IPin> m_pIPin; CComPtr<IBaseFilter> m_pIFilter; public: STDMETHOD(RunRenderFilter)(void); STDMETHOD(StopRenderFilter)(void); virtual HRESULT GetNumExposedPins(IGraphBuilder *pGraph,DWORD *pdwNumPins); virtual HRESULT GetExposedPins(IPin **ppPins); virtual HRESULT RemoveFiltersFromGraph(); }; class CSingleFilterStaticTerminal : public CSingleFilterTerminal { public: CComPtr<IMoniker> m_pMoniker; WINBOOL m_bMark; virtual HRESULT CompareMoniker(IMoniker *pMoniker); }; #endif