source: Daodan/MSYS2/mingw32/i686-w64-mingw32/include/mspstrm.h@ 1180

Last change on this file since 1180 was 1166, checked in by rossy, 3 years ago

Daodan: Replace MinGW build env with an up-to-date MSYS2 env

File size: 3.3 KB
Line 
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 _MSPSTRM_H_
7#define _MSPSTRM_H_
8
9#define STRM_INITIAL 0x00000000
10#define STRM_TERMINALSELECTED 0x00000001
11#define STRM_CONFIGURED 0x00000002
12#define STRM_RUNNING 0x00000004
13#define STRM_PAUSED 0x00000008
14#define STRM_STOPPED 0x00000010
15
16class CMSPStream;
17
18class ATL_NO_VTABLE CPTEventSink : public CComObjectRootEx<CComMultiThreadModel>,public ITPluggableTerminalEventSink {
19public:
20 CPTEventSink();
21 ~CPTEventSink();
22 BEGIN_COM_MAP(CPTEventSink)
23 COM_INTERFACE_ENTRY(ITPluggableTerminalEventSink)
24 END_COM_MAP()
25public:
26 STDMETHOD(FireEvent)(const MSP_EVENT_INFO *pMspEventInfo);
27public:
28 HRESULT SetSinkStream(CMSPStream *pStream);
29private:
30 struct AsyncEventStruct {
31 CMSPStream *pMSPStream;
32 MSPEVENTITEM *pEventItem;
33 AsyncEventStruct() : pMSPStream(NULL),pEventItem(NULL) {
34 LOG((MSP_TRACE,"AsyncEventStruct::AsyncEventStruct[%p]",this));
35 }
36 ~AsyncEventStruct() {
37 pMSPStream = NULL;
38 pEventItem = NULL;
39 LOG((MSP_TRACE,"AsyncEventStruct::~AsyncEventStruct[%p]",this));
40 }
41 };
42 static DWORD WINAPI FireEventCallBack(LPVOID pEventStructure);
43private:
44 CMSPStream *m_pMSPStream;
45};
46
47class ATL_NO_VTABLE CMSPStream : public CComObjectRootEx<CComMultiThreadModelNoCS>,public IDispatchImpl<ITStream,&IID_ITStream,&LIBID_TAPI3Lib> {
48public:
49 BEGIN_COM_MAP(CMSPStream)
50 COM_INTERFACE_ENTRY(IDispatch)
51 COM_INTERFACE_ENTRY(ITStream)
52 COM_INTERFACE_ENTRY_AGGREGATE(IID_IMarshal,m_pFTM)
53 END_COM_MAP()
54 DECLARE_GET_CONTROLLING_UNKNOWN()
55 CMSPStream();
56 ~CMSPStream();
57 virtual void FinalRelease();
58 STDMETHOD (get_MediaType) (__LONG32 *plMediaType);
59 STDMETHOD (get_Direction) (TERMINAL_DIRECTION *pTerminalDirection);
60 STDMETHOD (get_Name) (BSTR *ppName) = 0;
61 STDMETHOD (SelectTerminal) (ITTerminal *pTerminal);
62 STDMETHOD (UnselectTerminal) (ITTerminal *pTerminal);
63 STDMETHOD (EnumerateTerminals) (IEnumTerminal **ppEnumTerminal);
64 STDMETHOD (get_Terminals) (VARIANT *pTerminals);
65 STDMETHOD (StartStream) ();
66 STDMETHOD (PauseStream) ();
67 STDMETHOD (StopStream) ();
68 virtual HRESULT Init(HANDLE hAddress,CMSPCallBase *pMSPCall,IMediaEvent *pGraph,DWORD dwMediaType,TERMINAL_DIRECTION Direction);
69 virtual HRESULT ShutDown();
70 virtual HRESULT GetState(DWORD *pdwStatus) { return E_NOTIMPL; }
71 virtual HRESULT HandleTSPData(BYTE *pData,DWORD dwSize);
72 virtual HRESULT ProcessGraphEvent(__LONG32 lEventCode,LONG_PTR lParam1,LONG_PTR lParam2);
73protected:
74 HRESULT RegisterPluggableTerminalEventSink(ITTerminal *pTerminal);
75 HRESULT UnregisterPluggableTerminalEventSink(ITTerminal *pTerminal);
76 HRESULT ReleaseSink();
77 ULONG InternalAddRef();
78 ULONG InternalRelease();
79public:
80 HRESULT HandleSinkEvent(MSPEVENTITEM *pEventItem);
81protected:
82 IUnknown *m_pFTM;
83 DWORD m_dwState;
84 DWORD m_dwMediaType;
85 TERMINAL_DIRECTION m_Direction;
86 HANDLE m_hAddress;
87 CMSPCallBase *m_pMSPCall;
88 IGraphBuilder *m_pIGraphBuilder;
89 IMediaControl *m_pIMediaControl;
90 CMSPArray <ITTerminal *> m_Terminals;
91 CMSPCritSection m_lock;
92 CMSPCritSection m_lockRefCount;
93 ITPluggableTerminalEventSink *m_pPTEventSink;
94 __LONG32 m_lMyPersonalRefcount;
95 WINBOOL m_bFirstAddRef;
96};
97
98#endif
Note: See TracBrowser for help on using the repository browser.