comparison fuhtark_test/include/winapi/mspcall.h @ 1500:91c8c3b7cbf0

add: futhark tests for generating vulkan api
author sam <sam@basx.dev>
date Wed, 26 Nov 2025 21:36:48 +0700
parents
children
comparison
equal deleted inserted replaced
1499:1f58458b7ef7 1500:91c8c3b7cbf0
1 #ifndef __MSPCALL_H_
2 #define __MSPCALL_H_
3
4 class ATL_NO_VTABLE CMSPCallBase : public CComObjectRootEx<CComMultiThreadModelNoCS>,public IDispatchImpl<ITStreamControl,&IID_ITStreamControl,&LIBID_TAPI3Lib> {
5 public:
6 DECLARE_POLY_AGGREGATABLE(CMSPCallBase)
7 BEGIN_COM_MAP(CMSPCallBase)
8 COM_INTERFACE_ENTRY(IDispatch)
9 COM_INTERFACE_ENTRY(ITStreamControl)
10 END_COM_MAP()
11 DECLARE_GET_CONTROLLING_UNKNOWN()
12 DECLARE_VQI()
13 CMSPCallBase();
14 virtual ~CMSPCallBase();
15 virtual ULONG MSPCallAddRef (void) = 0;
16 virtual ULONG MSPCallRelease (void) = 0;
17 STDMETHOD (CreateStream) (long lMediaType,TERMINAL_DIRECTION Direction,ITStream **ppStream);
18 STDMETHOD (EnumerateStreams) (IEnumStream **ppEnumStream);
19 STDMETHOD (RemoveStream) (ITStream *pStream) = 0;
20 STDMETHOD (get_Streams) (VARIANT *pStreams);
21 virtual HRESULT Init(CMSPAddress *pMSPAddress,MSP_HANDLE htCall,DWORD dwReserved,DWORD dwMediaType) = 0;
22 virtual HRESULT ShutDown() = 0;
23 virtual HRESULT ReceiveTSPCallData(PBYTE pBuffer,DWORD dwSize);
24 HRESULT HandleStreamEvent(MSPEVENTITEM *EventItem) const;
25 protected:
26 virtual HRESULT InternalCreateStream(DWORD dwMediaType,TERMINAL_DIRECTION Direction,ITStream **ppStream) = 0;
27 virtual HRESULT CreateStreamObject(DWORD dwMediaType,TERMINAL_DIRECTION Direction,IMediaEvent *pGraph,ITStream **ppStream) = 0;
28 protected:
29 CMSPAddress *m_pMSPAddress;
30 MSP_HANDLE m_htCall;
31 DWORD m_dwMediaType;
32 CMSPArray <ITStream *> m_Streams;
33 CMSPCritSection m_lock;
34 };
35
36 class ATL_NO_VTABLE CMSPCallMultiGraph : public CMSPCallBase {
37 public:
38 typedef struct {
39 CMSPCallMultiGraph *pMSPCall;
40 ITStream *pITStream;
41 IMediaEvent *pIMediaEvent;
42 } MSPSTREAMCONTEXT,*PMSPSTREAMCONTEXT;
43 typedef struct _THREADPOOLWAITBLOCK {
44 HANDLE hWaitHandle;
45 MSPSTREAMCONTEXT *pContext;
46 WINBOOL operator ==(struct _THREADPOOLWAITBLOCK &t) { return ((hWaitHandle==t.hWaitHandle) && (pContext==t.pContext)); }
47 } THREADPOOLWAITBLOCK,*PTHREADPOOLWAITBLOCK;
48 public:
49 CMSPCallMultiGraph();
50 virtual ~CMSPCallMultiGraph();
51 STDMETHOD (RemoveStream) (ITStream *ppStream);
52 HRESULT Init(CMSPAddress *pMSPAddress,MSP_HANDLE htCall,DWORD dwReserved,DWORD dwMediaType);
53 HRESULT ShutDown();
54 static VOID NTAPI DispatchGraphEvent(VOID *pContext,BOOLEAN bFlag);
55 virtual VOID HandleGraphEvent(MSPSTREAMCONTEXT *pContext);
56 virtual HRESULT ProcessGraphEvent(ITStream *pITStream,long lEventCode,LONG_PTR lParam1,LONG_PTR lParam2);
57 protected:
58 HRESULT RegisterWaitEvent(IMediaEvent *pIMediaEvent,ITStream *pITStream);
59 HRESULT UnregisterWaitEvent(int index);
60 virtual HRESULT InternalCreateStream(DWORD dwMediaType,TERMINAL_DIRECTION Direction,ITStream **ppStream);
61 protected:
62 CMSPArray <THREADPOOLWAITBLOCK> m_ThreadPoolWaitBlocks;
63 };
64
65 struct MULTI_GRAPH_EVENT_DATA {
66 CMSPCallMultiGraph *pCall;
67 ITStream *pITStream;
68 long lEventCode;
69 LONG_PTR lParam1;
70 LONG_PTR lParam2;
71 IMediaEvent *pIMediaEvent;
72 MULTI_GRAPH_EVENT_DATA() : pIMediaEvent(NULL),pITStream(NULL),lEventCode(0),lParam1(0),lParam2(0) { }
73 };
74
75 DWORD WINAPI AsyncMultiGraphEvent(LPVOID pVoid);
76 #endif