123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- /**
- * 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 __MSPCALL_H_
- #define __MSPCALL_H_
- class ATL_NO_VTABLE CMSPCallBase : public CComObjectRootEx<CComMultiThreadModelNoCS>,public IDispatchImpl<ITStreamControl,&IID_ITStreamControl,&LIBID_TAPI3Lib> {
- public:
- DECLARE_POLY_AGGREGATABLE(CMSPCallBase)
- BEGIN_COM_MAP(CMSPCallBase)
- COM_INTERFACE_ENTRY(IDispatch)
- COM_INTERFACE_ENTRY(ITStreamControl)
- END_COM_MAP()
- DECLARE_GET_CONTROLLING_UNKNOWN()
- DECLARE_VQI()
- CMSPCallBase();
- virtual ~CMSPCallBase();
- virtual ULONG MSPCallAddRef (void) = 0;
- virtual ULONG MSPCallRelease (void) = 0;
- STDMETHOD (CreateStream) (__LONG32 lMediaType,TERMINAL_DIRECTION Direction,ITStream **ppStream);
- STDMETHOD (EnumerateStreams) (IEnumStream **ppEnumStream);
- STDMETHOD (RemoveStream) (ITStream *pStream) = 0;
- STDMETHOD (get_Streams) (VARIANT *pStreams);
- virtual HRESULT Init(CMSPAddress *pMSPAddress,MSP_HANDLE htCall,DWORD dwReserved,DWORD dwMediaType) = 0;
- virtual HRESULT ShutDown() = 0;
- virtual HRESULT ReceiveTSPCallData(PBYTE pBuffer,DWORD dwSize);
- HRESULT HandleStreamEvent(MSPEVENTITEM *EventItem) const;
- protected:
- virtual HRESULT InternalCreateStream(DWORD dwMediaType,TERMINAL_DIRECTION Direction,ITStream **ppStream) = 0;
- virtual HRESULT CreateStreamObject(DWORD dwMediaType,TERMINAL_DIRECTION Direction,IMediaEvent *pGraph,ITStream **ppStream) = 0;
- protected:
- CMSPAddress *m_pMSPAddress;
- MSP_HANDLE m_htCall;
- DWORD m_dwMediaType;
- CMSPArray <ITStream *> m_Streams;
- CMSPCritSection m_lock;
- };
- class ATL_NO_VTABLE CMSPCallMultiGraph : public CMSPCallBase {
- public:
- typedef struct {
- CMSPCallMultiGraph *pMSPCall;
- ITStream *pITStream;
- IMediaEvent *pIMediaEvent;
- } MSPSTREAMCONTEXT,*PMSPSTREAMCONTEXT;
- typedef struct _THREADPOOLWAITBLOCK {
- HANDLE hWaitHandle;
- MSPSTREAMCONTEXT *pContext;
- WINBOOL operator ==(struct _THREADPOOLWAITBLOCK &t) { return ((hWaitHandle==t.hWaitHandle) && (pContext==t.pContext)); }
- } THREADPOOLWAITBLOCK,*PTHREADPOOLWAITBLOCK;
- public:
- CMSPCallMultiGraph();
- virtual ~CMSPCallMultiGraph();
- STDMETHOD (RemoveStream) (ITStream *ppStream);
- HRESULT Init(CMSPAddress *pMSPAddress,MSP_HANDLE htCall,DWORD dwReserved,DWORD dwMediaType);
- HRESULT ShutDown();
- static VOID NTAPI DispatchGraphEvent(VOID *pContext,BOOLEAN bFlag);
- virtual VOID HandleGraphEvent(MSPSTREAMCONTEXT *pContext);
- virtual HRESULT ProcessGraphEvent(ITStream *pITStream,__LONG32 lEventCode,LONG_PTR lParam1,LONG_PTR lParam2);
- protected:
- HRESULT RegisterWaitEvent(IMediaEvent *pIMediaEvent,ITStream *pITStream);
- HRESULT UnregisterWaitEvent(int index);
- virtual HRESULT InternalCreateStream(DWORD dwMediaType,TERMINAL_DIRECTION Direction,ITStream **ppStream);
- protected:
- CMSPArray <THREADPOOLWAITBLOCK> m_ThreadPoolWaitBlocks;
- };
- struct MULTI_GRAPH_EVENT_DATA {
- CMSPCallMultiGraph *pCall;
- ITStream *pITStream;
- __LONG32 lEventCode;
- LONG_PTR lParam1;
- LONG_PTR lParam2;
- IMediaEvent *pIMediaEvent;
- MULTI_GRAPH_EVENT_DATA() : pIMediaEvent(NULL),pITStream(NULL),lEventCode(0),lParam1(0),lParam2(0) { }
- };
- DWORD WINAPI AsyncMultiGraphEvent(LPVOID pVoid);
- #endif
|