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