Mercurial > games > semicongine
diff 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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/fuhtark_test/include/winapi/mspstrm.h Wed Nov 26 21:36:48 2025 +0700 @@ -0,0 +1,93 @@ +#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) (long *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(long 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; + long m_lMyPersonalRefcount; + WINBOOL m_bFirstAddRef; +}; + +#endif
