1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- /**
- * 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 _MSPSTRM_H_
- #define _MSPSTRM_H_
- #define STRM_INITIAL 0x00000000
- #define STRM_TERMINALSELECTED 0x00000001
- #define STRM_CONFIGURED 0x00000002
- #define STRM_RUNNING 0x00000004
- #define STRM_PAUSED 0x00000008
- #define STRM_STOPPED 0x00000010
- class CMSPStream;
- class ATL_NO_VTABLE CPTEventSink : public CComObjectRootEx<CComMultiThreadModel>,public ITPluggableTerminalEventSink {
- public:
- CPTEventSink();
- ~CPTEventSink();
- BEGIN_COM_MAP(CPTEventSink)
- COM_INTERFACE_ENTRY(ITPluggableTerminalEventSink)
- END_COM_MAP()
- public:
- STDMETHOD(FireEvent)(const MSP_EVENT_INFO *pMspEventInfo);
- public:
- HRESULT SetSinkStream(CMSPStream *pStream);
- private:
- struct AsyncEventStruct {
- CMSPStream *pMSPStream;
- MSPEVENTITEM *pEventItem;
- AsyncEventStruct() : pMSPStream(NULL),pEventItem(NULL) {
- LOG((MSP_TRACE,"AsyncEventStruct::AsyncEventStruct[%p]",this));
- }
- ~AsyncEventStruct() {
- pMSPStream = NULL;
- pEventItem = NULL;
- LOG((MSP_TRACE,"AsyncEventStruct::~AsyncEventStruct[%p]",this));
- }
- };
- static DWORD WINAPI FireEventCallBack(LPVOID pEventStructure);
- private:
- CMSPStream *m_pMSPStream;
- };
- class ATL_NO_VTABLE CMSPStream : public CComObjectRootEx<CComMultiThreadModelNoCS>,public IDispatchImpl<ITStream,&IID_ITStream,&LIBID_TAPI3Lib> {
- public:
- BEGIN_COM_MAP(CMSPStream)
- COM_INTERFACE_ENTRY(IDispatch)
- COM_INTERFACE_ENTRY(ITStream)
- COM_INTERFACE_ENTRY_AGGREGATE(IID_IMarshal,m_pFTM)
- END_COM_MAP()
- DECLARE_GET_CONTROLLING_UNKNOWN()
- CMSPStream();
- ~CMSPStream();
- virtual void FinalRelease();
- STDMETHOD (get_MediaType) (__LONG32 *plMediaType);
- STDMETHOD (get_Direction) (TERMINAL_DIRECTION *pTerminalDirection);
- STDMETHOD (get_Name) (BSTR *ppName) = 0;
- STDMETHOD (SelectTerminal) (ITTerminal *pTerminal);
- STDMETHOD (UnselectTerminal) (ITTerminal *pTerminal);
- STDMETHOD (EnumerateTerminals) (IEnumTerminal **ppEnumTerminal);
- STDMETHOD (get_Terminals) (VARIANT *pTerminals);
- STDMETHOD (StartStream) ();
- STDMETHOD (PauseStream) ();
- STDMETHOD (StopStream) ();
- virtual HRESULT Init(HANDLE hAddress,CMSPCallBase *pMSPCall,IMediaEvent *pGraph,DWORD dwMediaType,TERMINAL_DIRECTION Direction);
- virtual HRESULT ShutDown();
- virtual HRESULT GetState(DWORD *pdwStatus) { return E_NOTIMPL; }
- virtual HRESULT HandleTSPData(BYTE *pData,DWORD dwSize);
- virtual HRESULT ProcessGraphEvent(__LONG32 lEventCode,LONG_PTR lParam1,LONG_PTR lParam2);
- protected:
- HRESULT RegisterPluggableTerminalEventSink(ITTerminal *pTerminal);
- HRESULT UnregisterPluggableTerminalEventSink(ITTerminal *pTerminal);
- HRESULT ReleaseSink();
- ULONG InternalAddRef();
- ULONG InternalRelease();
- public:
- HRESULT HandleSinkEvent(MSPEVENTITEM *pEventItem);
- protected:
- IUnknown *m_pFTM;
- DWORD m_dwState;
- DWORD m_dwMediaType;
- TERMINAL_DIRECTION m_Direction;
- HANDLE m_hAddress;
- CMSPCallBase *m_pMSPCall;
- IGraphBuilder *m_pIGraphBuilder;
- IMediaControl *m_pIMediaControl;
- CMSPArray <ITTerminal *> m_Terminals;
- CMSPCritSection m_lock;
- CMSPCritSection m_lockRefCount;
- ITPluggableTerminalEventSink *m_pPTEventSink;
- __LONG32 m_lMyPersonalRefcount;
- WINBOOL m_bFirstAddRef;
- };
- #endif
|