/* Copyright (c) 1996-2000 Microsoft Corporation. All rights reserved. */ #ifndef _PRIVATE #define _PRIVATE_ #include "clist.h" #include "plclock.h" #define STATIC_CLSID_DDKWDMSynth\ 0x820DC38AL, 0x1F81, 0x11d3, 0xA8, 0x2E, 0x00, 0x60, 0x08, 0x33, 0x16, 0xC1 DEFINE_GUIDSTRUCT("820DC38A-1F81-11d3-A82E-0060083316C1", CLSID_DDKWDMSynth); #define CLSID_DDKWDMSynth DEFINE_GUIDNAMED(CLSID_DDKWDMSynth) #define STATIC_KSNODETYPE_DMDDKSYNTH\ 0xD2D37597L, 0xA312, 0x434C, 0xA2, 0xDD, 0x2B, 0x4C, 0x32, 0xE6, 0x65, 0x8A DEFINE_GUIDSTRUCT("D2D37597-A312-434C-A2DD-2B4C32E6658A", KSNODETYPE_DMDDKSYNTH); #define KSNODETYPE_DMDDKSYNTH DEFINE_GUIDNAMED(KSNODETYPE_DMDDKSYNTH) #ifdef USE_OBSOLETE_FUNCS NTSTATUS CreateMiniportDmSynth(OUT PUNKNOWN * Unknown, IN PUNKNOWN UnknownOuter OPTIONAL, IN POOL_TYPE PoolType); #else NTSTATUS CreateMiniportDmSynth(OUT PUNKNOWN * Unknown, IN PUNKNOWN UnknownOuter OPTIONAL, IN POOL_TYPE PoolType, IN PDEVICE_OBJECT pDeviceObject); #endif class CDmSynthStream; /***************************************************************************** * class CMiniportDmSynth ***************************************************************************** * Each miniport instance corresponds to a port instance of type DMus. * This miniport implements the standard IMP_IMiniportDMus. */ class CMiniportDmSynth : public IMiniportDMus, public CUnknown { friend class CDmSynthStream; public: IMP_IMiniportDMus; // IUnknown // DECLARE_STD_UNKNOWN(); DEFINE_STD_CONSTRUCTOR(CMiniportDmSynth); ~CMiniportDmSynth(); private: PPORTDMUS m_pPort; CList m_StreamList; CRITICAL_SECTION m_CriticalSection; #ifndef USE_OBSOLETE_FUNCS PDEVICE_OBJECT m_pDeviceObject; friend NTSTATUS CreateMiniportDmSynth(OUT PUNKNOWN * Unknown, IN PUNKNOWN UnknownOuter OPTIONAL, IN POOL_TYPE PoolType, IN PDEVICE_OBJECT pDeviceObject); #endif }; /***************************************************************************** * class CDmSynthStream ***************************************************************************** * The stream implements the standard MXF functions. This stream handles * DLS and running statistics on a per-stream basis. */ class CDmSynthStream : public ISynthSinkDMus, public CUnknown, public CListItem { friend class CMiniportDmSynth; public: IMP_ISynthSinkDMus; // IUnknown // DECLARE_STD_UNKNOWN(); DEFINE_STD_CONSTRUCTOR(CDmSynthStream); ~CDmSynthStream(); // Class // #ifdef USE_OBSOLETE_FUNCS NTSTATUS Init(CMiniportDmSynth * Miniport); #else NTSTATUS Init(CMiniportDmSynth * Miniport, PDEVICE_OBJECT pDeviceObject); #endif NTSTATUS InitMidiIn(PAllocatorMXF AllocatorMXF, PMASTERCLOCK MasterClock); NTSTATUS InitWaveOut(PKSDATAFORMAT DataFormat); NTSTATUS HandlePropertySupport(PPCPROPERTY_REQUEST pRequest); NTSTATUS HandlePropertyEffects(PPCPROPERTY_REQUEST pRequest); NTSTATUS HandlePropertySynth(PPCPROPERTY_REQUEST pRequest); NTSTATUS HandlePortParams(PPCPROPERTY_REQUEST pRequest); NTSTATUS HandleRunningStats(PPCPROPERTY_REQUEST pRequest); NTSTATUS HandlePropertySynthDls(PPCPROPERTY_REQUEST pRequest); NTSTATUS HandleDownload(PPCPROPERTY_REQUEST pRequest); NTSTATUS HandleUnload(PPCPROPERTY_REQUEST pRequest); void PutMessageInternal(void); private: CMiniportDmSynth * m_pMiniport; BOOL m_fWaveOutCreated; BOOL m_fMidiInCreated; PAllocatorMXF m_pAllocator; PMASTERCLOCK m_pMasterClock; CSynth * m_pSynth; SYNTH_PORTPARAMS m_PortParams; KSSTATE m_State; LONG m_lVolume; LONG m_lBoost; CSampleClock m_SampleClock; LONGLONG m_llStartPosition; LONGLONG m_llLastPosition; PDMUS_KERNEL_EVENT m_EventList; KSPIN_LOCK m_EventListLock; #ifdef USE_OBSOLETE_FUNCS WORK_QUEUE_ITEM m_EventListWorkItem; #else PIO_WORKITEM m_pEventListWorkItem; #endif }; typedef CDmSynthStream *PDMSYNTHSTREAM; #endif // _PRIVATE_