Home | History | Annotate | Download | only in include
      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 __MSPCALL_H_
      7 #define __MSPCALL_H_
      8 
      9 class ATL_NO_VTABLE CMSPCallBase : public CComObjectRootEx<CComMultiThreadModelNoCS>,public IDispatchImpl<ITStreamControl,&IID_ITStreamControl,&LIBID_TAPI3Lib> {
     10 public:
     11   DECLARE_POLY_AGGREGATABLE(CMSPCallBase)
     12   BEGIN_COM_MAP(CMSPCallBase)
     13     COM_INTERFACE_ENTRY(IDispatch)
     14     COM_INTERFACE_ENTRY(ITStreamControl)
     15   END_COM_MAP()
     16   DECLARE_GET_CONTROLLING_UNKNOWN()
     17   DECLARE_VQI()
     18   CMSPCallBase();
     19   virtual ~CMSPCallBase();
     20   virtual ULONG MSPCallAddRef (void) = 0;
     21   virtual ULONG MSPCallRelease (void) = 0;
     22   STDMETHOD (CreateStream) (__LONG32 lMediaType,TERMINAL_DIRECTION Direction,ITStream **ppStream);
     23   STDMETHOD (EnumerateStreams) (IEnumStream **ppEnumStream);
     24   STDMETHOD (RemoveStream) (ITStream *pStream) = 0;
     25   STDMETHOD (get_Streams) (VARIANT *pStreams);
     26   virtual HRESULT Init(CMSPAddress *pMSPAddress,MSP_HANDLE htCall,DWORD dwReserved,DWORD dwMediaType) = 0;
     27   virtual HRESULT ShutDown() = 0;
     28   virtual HRESULT ReceiveTSPCallData(PBYTE pBuffer,DWORD dwSize);
     29   HRESULT HandleStreamEvent(MSPEVENTITEM *EventItem) const;
     30 protected:
     31   virtual HRESULT InternalCreateStream(DWORD dwMediaType,TERMINAL_DIRECTION Direction,ITStream **ppStream) = 0;
     32   virtual HRESULT CreateStreamObject(DWORD dwMediaType,TERMINAL_DIRECTION Direction,IMediaEvent *pGraph,ITStream **ppStream) = 0;
     33 protected:
     34   CMSPAddress *m_pMSPAddress;
     35   MSP_HANDLE m_htCall;
     36   DWORD m_dwMediaType;
     37   CMSPArray <ITStream *> m_Streams;
     38   CMSPCritSection m_lock;
     39 };
     40 
     41 class ATL_NO_VTABLE CMSPCallMultiGraph : public CMSPCallBase {
     42 public:
     43   typedef struct {
     44     CMSPCallMultiGraph *pMSPCall;
     45     ITStream *pITStream;
     46     IMediaEvent *pIMediaEvent;
     47   } MSPSTREAMCONTEXT,*PMSPSTREAMCONTEXT;
     48   typedef struct _THREADPOOLWAITBLOCK {
     49     HANDLE hWaitHandle;
     50     MSPSTREAMCONTEXT *pContext;
     51     WINBOOL operator ==(struct _THREADPOOLWAITBLOCK &t) { return ((hWaitHandle==t.hWaitHandle) && (pContext==t.pContext)); }
     52   } THREADPOOLWAITBLOCK,*PTHREADPOOLWAITBLOCK;
     53 public:
     54   CMSPCallMultiGraph();
     55   virtual ~CMSPCallMultiGraph();
     56   STDMETHOD (RemoveStream) (ITStream *ppStream);
     57   HRESULT Init(CMSPAddress *pMSPAddress,MSP_HANDLE htCall,DWORD dwReserved,DWORD dwMediaType);
     58   HRESULT ShutDown();
     59   static VOID NTAPI DispatchGraphEvent(VOID *pContext,BOOLEAN bFlag);
     60   virtual VOID HandleGraphEvent(MSPSTREAMCONTEXT *pContext);
     61   virtual HRESULT ProcessGraphEvent(ITStream *pITStream,__LONG32 lEventCode,LONG_PTR lParam1,LONG_PTR lParam2);
     62 protected:
     63   HRESULT RegisterWaitEvent(IMediaEvent *pIMediaEvent,ITStream *pITStream);
     64   HRESULT UnregisterWaitEvent(int index);
     65   virtual HRESULT InternalCreateStream(DWORD dwMediaType,TERMINAL_DIRECTION Direction,ITStream **ppStream);
     66 protected:
     67   CMSPArray <THREADPOOLWAITBLOCK> m_ThreadPoolWaitBlocks;
     68 };
     69 
     70 struct MULTI_GRAPH_EVENT_DATA {
     71   CMSPCallMultiGraph *pCall;
     72   ITStream *pITStream;
     73   __LONG32 lEventCode;
     74   LONG_PTR lParam1;
     75   LONG_PTR lParam2;
     76   IMediaEvent *pIMediaEvent;
     77   MULTI_GRAPH_EVENT_DATA() : pIMediaEvent(NULL),pITStream(NULL),lEventCode(0),lParam1(0),lParam2(0) { }
     78 };
     79 
     80 DWORD WINAPI AsyncMultiGraphEvent(LPVOID pVoid);
     81 #endif
     82