1 /**
2  * This file has no copyright assigned and is placed in the Public Domain.
3  * This file is part of the mingw-w64 runtime package.
4  * No warranty is given; refer to the file DISCLAIMER.PD within this package.
5  */
6 #ifndef _MSPTERM_H_
7 #define _MSPTERM_H_
8 
9 template <class T> class ITTerminalVtblBase : public ITTerminal {
10 };
11 
12 class CBaseTerminal : virtual public CComObjectRootEx<CComMultiThreadModelNoCS>,public IDispatchImpl<ITTerminalVtblBase<CBaseTerminal>,&IID_ITTerminal,&LIBID_TAPI3Lib>,public ITTerminalControl
13 {
14   BEGIN_COM_MAP(CBaseTerminal)
15     COM_INTERFACE_ENTRY(IDispatch)
16     COM_INTERFACE_ENTRY(ITTerminal)
17     COM_INTERFACE_ENTRY(ITTerminalControl)
18     COM_INTERFACE_ENTRY_AGGREGATE(IID_IMarshal,m_pFTM)
19   END_COM_MAP()
20   DECLARE_VQI()
21   DECLARE_GET_CONTROLLING_UNKNOWN()
22 public:
23   CBaseTerminal();
24   virtual ~CBaseTerminal();
25 public:
26   STDMETHOD(get_TerminalClass)(BSTR *pVal);
27   STDMETHOD(get_TerminalType)(TERMINAL_TYPE *pVal);
28   STDMETHOD(get_State)(TERMINAL_STATE *pVal);
29   STDMETHOD(get_Name)(BSTR *pVal);
30   STDMETHOD(get_MediaType)(__LONG32 *plMediaType);
31   STDMETHOD(get_Direction)(TERMINAL_DIRECTION *pDirection);
32 public:
33   virtual HRESULT Initialize(IID iidTerminalClass,DWORD dwMediaType,TERMINAL_DIRECTION Direction,MSP_HANDLE htAddress);
34 public:
35   STDMETHOD (get_AddressHandle)(MSP_HANDLE *phtAddress);
36   STDMETHOD (ConnectTerminal)(IGraphBuilder *pGraph,DWORD dwTerminalDirection,DWORD *pdwNumPins,IPin **ppPins);
37   STDMETHOD (CompleteConnectTerminal)(void);
38   STDMETHOD (DisconnectTerminal)(IGraphBuilder *pGraph,DWORD dwReserved);
39   STDMETHOD (RunRenderFilter)(void) = 0;
40   STDMETHOD (StopRenderFilter)(void) = 0;
41 protected:
42   CMSPCritSection m_CritSec;
43 public:
44   TERMINAL_DIRECTION m_TerminalDirection;
45   TERMINAL_TYPE m_TerminalType;
46   TERMINAL_STATE m_TerminalState;
47   TCHAR m_szName[MAX_PATH + 1];
48   IID m_TerminalClassID;
49   DWORD m_dwMediaType;
50   MSP_HANDLE m_htAddress;
51   IUnknown *m_pFTM;
52   CComPtr<IGraphBuilder> m_pGraph;
53   virtual HRESULT AddFiltersToGraph() = 0;
ConnectFilters()54   virtual HRESULT ConnectFilters() { return S_OK; }
55   virtual HRESULT GetNumExposedPins(IGraphBuilder *pGraph,DWORD *pdwNumPins) = 0;
56   virtual HRESULT GetExposedPins(IPin **ppPins) = 0;
57   virtual DWORD GetSupportedMediaTypes(void) = 0;
58   virtual HRESULT RemoveFiltersFromGraph() = 0;
59   WINBOOL MediaTypeSupported(__LONG32 lMediaType);
60 };
61 
62 class CSingleFilterTerminal : public CBaseTerminal {
63 public:
64   CComPtr<IPin> m_pIPin;
65   CComPtr<IBaseFilter> m_pIFilter;
66 public:
67   STDMETHOD(RunRenderFilter)(void);
68   STDMETHOD(StopRenderFilter)(void);
69   virtual HRESULT GetNumExposedPins(IGraphBuilder *pGraph,DWORD *pdwNumPins);
70   virtual HRESULT GetExposedPins(IPin **ppPins);
71   virtual HRESULT RemoveFiltersFromGraph();
72 };
73 
74 class CSingleFilterStaticTerminal : public CSingleFilterTerminal {
75 public:
76   CComPtr<IMoniker> m_pMoniker;
77   WINBOOL m_bMark;
78   virtual HRESULT CompareMoniker(IMoniker *pMoniker);
79 };
80 #endif
81