From 8e510a0ea280354309f845ee902c60bafdbf504e Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Wed, 11 Nov 2009 20:43:58 +0000 Subject: [PATCH] - Fix building of cmidriver - Required a few hacks, which were documented as //HACK svn path=/trunk/; revision=44113 --- .../wdm/audio/drivers/CMIDriver/adapter.cpp | 96 ++++++++++++++++++- .../wdm/audio/drivers/CMIDriver/adapter.hpp | 4 +- .../audio/drivers/CMIDriver/cmidriver.rbuild | 10 ++ .../wdm/audio/drivers/CMIDriver/common.cpp | 8 +- .../wdm/audio/drivers/CMIDriver/common.hpp | 29 +++++- .../wdm/audio/drivers/CMIDriver/mintopo.cpp | 4 +- .../wdm/audio/drivers/CMIDriver/mintopo.hpp | 25 ++++- .../audio/drivers/CMIDriver/mintopotables.hpp | 6 +- .../wdm/audio/drivers/CMIDriver/minwave.cpp | 8 +- .../wdm/audio/drivers/CMIDriver/minwave.hpp | 49 ++++++++-- .../audio/drivers/CMIDriver/minwavetables.hpp | 2 +- .../wdm/audio/drivers/CMIDriver/property.h | 6 +- 12 files changed, 211 insertions(+), 36 deletions(-) diff --git a/reactos/drivers/wdm/audio/drivers/CMIDriver/adapter.cpp b/reactos/drivers/wdm/audio/drivers/CMIDriver/adapter.cpp index 7edf3a4602b..edf88bf746e 100644 --- a/reactos/drivers/wdm/audio/drivers/CMIDriver/adapter.cpp +++ b/reactos/drivers/wdm/audio/drivers/CMIDriver/adapter.cpp @@ -31,6 +31,84 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. //#pragma code_seg("PAGE") +const GUID KSNODETYPE_DAC = {0x507AE360L, 0xC554, 0x11D0, {0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1}}; +const GUID KSNODETYPE_ADC = {0x4D837FE0L, 0xC555, 0x11D0, {0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1}}; +const GUID KSNODETYPE_AGC = {0xE88C9BA0L, 0xC557, 0x11D0, {0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1}}; +const GUID KSNODETYPE_LOUDNESS = {0x41887440L, 0xC558, 0x11D0, {0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1}}; +const GUID KSNODETYPE_MUTE = {0x02B223C0L, 0xC557, 0x11D0, {0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1}}; +const GUID KSNODETYPE_TONE = {0x7607E580L, 0xC557, 0x11D0, {0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1}}; +const GUID KSNODETYPE_VOLUME = {0x3A5ACC00L, 0xC557, 0x11D0, {0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1}}; +const GUID KSNODETYPE_PEAKMETER = {0xa085651e, 0x5f0d, 0x4b36, {0xa8, 0x69, 0xd1, 0x95, 0xd6, 0xab, 0x4b, 0x9e}}; +const GUID KSNODETYPE_MUX = {0x2CEAF780, 0xC556, 0x11D0, {0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1}}; +const GUID KSNODETYPE_STEREO_WIDE = {0xA9E69800L, 0xC558, 0x11D0, {0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1}}; +const GUID KSNODETYPE_CHORUS = {0x20173F20L, 0xC559, 0x11D0, {0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1}}; +const GUID KSNODETYPE_REVERB = {0xEF0328E0L, 0xC558, 0x11D0, {0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1}}; +const GUID KSNODETYPE_SUPERMIX = {0xE573ADC0L, 0xC555, 0x11D0, {0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1}}; +const GUID KSNODETYPE_SUM = {0xDA441A60L, 0xC556, 0x11D0, {0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1}}; +const GUID KSNODETYPE_SRC = {0x9DB7B9E0L, 0xC555, 0x11D0, {0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1}}; +const GUID KSNODETYPE_3D_EFFECTS = {0x55515860L, 0xC559, 0x11D0, {0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1}}; +const GUID KSNODETYPE_SPDIF_INTERFACE = {0x0605+0xDFF219E0, 0xF70F, 0x11D0, {0xB9, 0x17, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}}; +const GUID KSNODETYPE_MICROPHONE = {0x0201+0xDFF219E0,0xF70F, 0x11D0, {0xB9, 0x17, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}}; +const GUID KSNODETYPE_CD_PLAYER = {0x0703+0xDFF219E0,0xF70F, 0x11D0, {0xB9, 0x17, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}}; +const GUID KSNODETYPE_LINE_CONNECTOR = {0x0603+0xDFF219E0,0xF70F, 0x11D0, {0xB9, 0x17, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}}; +const GUID KSNODETYPE_ANALOG_CONNECTOR = {0x601+0xDFF219E0,0xF70F, 0x11D0, {0xB9, 0x17, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}}; +const GUID KSNODETYPE_SPEAKER = {0x0301+0xDFF219E0,0xF70F, 0x11D0, {0xB9, 0x17, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}}; + +const GUID KSPROPTYPESETID_General = {0x97E99BA0L, 0xBDEA, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}}; +const GUID KSPROPSETID_General = {0x1464EDA5L, 0x6A8F, 0x11D1, {0x9A, 0xA7, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}}; +const GUID KSPROPSETID_Audio = {0x45FFAAA0L, 0x6E1B, 0x11D0, {0xBC, 0xF2, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}}; +const GUID GUID_NULL ={0x00000000L, 0x0000, 0x0000, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}; +const GUID KSCATEGORY_AUDIO = {0x6994AD04, 0x93EF, 0x11D0, {0xA3, 0xCC, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}}; + + +const GUID KSDATAFORMAT_TYPE_AUDIO = {0x73647561L, 0x0000, 0x0010, {0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}}; +const GUID KSDATAFORMAT_SUBTYPE_PCM = {0x00000001L, 0x0000, 0x0010, {0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}}; +const GUID KSDATAFORMAT_SPECIFIER_WAVEFORMATEX = {0x05589f81L, 0xc356, 0x11ce, {0xbf, 0x01, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a}}; +const GUID KSDATAFORMAT_SPECIFIER_DSOUND = {0x518590a2L, 0xa184, 0x11d0, {0x85, 0x22, 0x00, 0xc0, 0x4f, 0xd9, 0xba, 0xf3}}; +const GUID KSDATAFORMAT_SUBTYPE_WAVEFORMATEX = {0x00000000L, 0x0000, 0x0010, {0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}}; +const GUID KSDATAFORMAT_SUBTYPE_DOLBY_AC3_SPDIF = {0x00000092L, 0x0000, 0x0010, {0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}}; + + +const GUID KSAUDFNAME_WAVE_VOLUME = {0x185FEDE5L, 0x9905, 0x11D1, {0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3}}; +const GUID KSAUDFNAME_WAVE_MUTE = {0x185FEDE6L, 0x9905, 0x11D1, {0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3}}; +const GUID KSAUDFNAME_MIC_VOLUME = {0x185FEDEDL, 0x9905, 0x11D1, {0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3}}; +const GUID KSAUDFNAME_MASTER_VOLUME = {0x185FEDE3L, 0x9905, 0x11D1, {0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3}}; +const GUID KSAUDFNAME_RECORDING_SOURCE = {0x185FEDEFL, 0x9905, 0x11D1, {0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3}}; +const GUID KSAUDFNAME_CD_VOLUME = {0x185FEDE9L, 0x9905, 0x11D1, {0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3}}; +const GUID KSAUDFNAME_CD_IN_VOLUME = {0x185FEDF3L, 0x9905, 0x11D1, {0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3}}; +const GUID KSAUDFNAME_MIC_IN_VOLUME = {0x185FEDF5L, 0x9905, 0x11D1, {0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3}}; +const GUID KSAUDFNAME_MICROPHONE_BOOST = {0x2bc31d6aL, 0x96e3, 0x11d2, {0xac, 0x4c, 0x0, 0xc0, 0x4f, 0x8e, 0xfb, 0x68}}; +const GUID KSAUDFNAME_CD_MUTE = {0x185FEDEAL, 0x9905, 0x11D1, {0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3}}; +const GUID KSAUDFNAME_LINE_MUTE = {0x185FEDECL, 0x9905, 0x11D1, {0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3}}; +const GUID KSAUDFNAME_MIC_MUTE = {0x185FEDEEL, 0x9905, 0x11D1, {0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3}}; +const GUID KSAUDFNAME_AUX_MUTE = {0x185FEDFDL, 0x9905, 0x11D1, {0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3}}; +const GUID KSAUDFNAME_MASTER_MUTE = {0x185FEDE4L, 0x9905, 0x11D1, {0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3}}; +const GUID KSAUDFNAME_RECORDING_CONTROL = {0x185FEDFAL, 0x9905, 0x11D1, {0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3}}; +const GUID KSAUDFNAME_VOLUME_CONTROL = {0x185FEDF7L, 0x9905, 0x11D1, {0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3}}; +const GUID KSAUDFNAME_LINE_IN_VOLUME = {0x185FEDF4L, 0x9905, 0x11D1, {0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3}}; +const GUID KSAUDFNAME_AUX_VOLUME = {0x185FEDFCL, 0x9905, 0x11D1, {0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3}}; + +const GUID KSPROPSETID_CMI = {0x2B81CDBB, 0xEE6C, 0x4ECC, {0x8A, 0xA5, 0x9A, 0x18, 0x8B, 0x02, 0x3D, 0xFF}}; + + +const GUID CMINAME_IEC_5V = {0x2B81CDBB, 0xEE6C, 0x4ECC, {0x8A, 0xA5, 0x9A, 0x18, 0x8B, 0x02, 0x3D, 0xF0}}; +const GUID CMINAME_IEC_OUT = {0x2B81CDBB, 0xEE6C, 0x4ECC, {0x8A, 0xA5, 0x9A, 0x18, 0x8B, 0x02, 0x3D, 0xF1}}; +const GUID CMINAME_IEC_INVERSE = {0x2B81CDBB, 0xEE6C, 0x4ECC, {0x8A, 0xA5, 0x9A, 0x18, 0x8B, 0x02, 0x3D, 0xF2}}; +const GUID CMINAME_IEC_MONITOR = {0x2B81CDBB, 0xEE6C, 0x4ECC, {0x8A, 0xA5, 0x9A, 0x18, 0x8B, 0x02, 0x3D, 0xF3}}; +const GUID CMINAME_IEC_SELECT = {0x2B81CDBB, 0xEE6C, 0x4ECC, {0x8A, 0xA5, 0x9A, 0x18, 0x8B, 0x02, 0x3D, 0xF5}}; +const GUID CMINAME_XCHG_FB = {0x2B81CDBB, 0xEE6C, 0x4ECC, {0x8A, 0xA5, 0x9A, 0x18, 0x8B, 0x02, 0x3D, 0xF6}}; +const GUID CMINAME_BASS2LINE = {0x2B81CDBB, 0xEE6C, 0x4ECC, {0x8A, 0xA5, 0x9A, 0x18, 0x8B, 0x02, 0x3D, 0xF7}}; +const GUID CMINAME_CENTER2LINE = {0x2B81CDBB, 0xEE6C, 0x4ECC, {0x8A, 0xA5, 0x9A, 0x18, 0x8B, 0x02, 0x3D, 0xF8}}; +const GUID CMINAME_IEC_COPYRIGHT = {0x2B81CDBB, 0xEE6C, 0x4ECC, {0x8A, 0xA5, 0x9A, 0x18, 0x8B, 0x02, 0x3D, 0xF9}}; +const GUID CMINAME_IEC_POLVALID = {0x2B81CDBB, 0xEE6C, 0x4ECC, {0x8A, 0xA5, 0x9A, 0x18, 0x8B, 0x02, 0x3D, 0xFA}}; +const GUID CMINAME_IEC_LOOP = {0x2B81CDBB, 0xEE6C, 0x4ECC, {0x8A, 0xA5, 0x9A, 0x18, 0x8B, 0x02, 0x3D, 0xFB}}; +const GUID CMINAME_REAR2LINE = {0x2B81CDBB, 0xEE6C, 0x4ECC, {0x8A, 0xA5, 0x9A, 0x18, 0x8B, 0x02, 0x3D, 0xFC}}; +const GUID CMINAME_CENTER2MIC = {0x2B81CDBB, 0xEE6C, 0x4ECC, {0x8A, 0xA5, 0x9A, 0x18, 0x8B, 0x02, 0x3D, 0xFD}}; +const GUID CMINAME_DAC = {0x2B81CDBB, 0xEE6C, 0x4ECC, {0x8A, 0xA5, 0x9A, 0x18, 0x8B, 0x02, 0x3D, 0xF4}}; +const GUID PRODUCT_CM8738 = {0x9db14e9a, 0x7be7, 0x480d, {0xa2, 0xfa, 0x32, 0x93, 0x24, 0x89, 0xde, 0x9c}}; +const GUID COMPONENT_CM8738 = {0x9db14e9a, 0x7be7, 0x480d, {0xa2, 0xfa, 0x32, 0x93, 0x24, 0x89, 0xde, 0x9d}}; +const GUID MANUFACTURER_CM8738 = {0x9db14e9a, 0x7be7, 0x480d, {0xa2, 0xfa, 0x32, 0x93, 0x24, 0x89, 0xde, 0x9e}}; + NTSTATUS InstallSubdevice( PDEVICE_OBJECT DeviceObject, @@ -451,8 +529,24 @@ DriverEntry( return ntStatus; } + +#ifdef _MSC_VER + #pragma code_seg() int __cdecl _purecall (void) { - return 0; + return 0; } + +#else + +extern "C" { +void __cxa_pure_virtual() + { + // put error handling here + + DbgBreakPoint(); + + } +} +#endif diff --git a/reactos/drivers/wdm/audio/drivers/CMIDriver/adapter.hpp b/reactos/drivers/wdm/audio/drivers/CMIDriver/adapter.hpp index c457dc79a14..4f86166eb59 100644 --- a/reactos/drivers/wdm/audio/drivers/CMIDriver/adapter.hpp +++ b/reactos/drivers/wdm/audio/drivers/CMIDriver/adapter.hpp @@ -38,7 +38,7 @@ const ULONG MAX_MINIPORTS = 3; const ULONG MAX_MINIPORTS = 2; #endif -extern NTSTATUS CreateMiniportWaveCMI +extern HRESULT NTAPI CreateMiniportWaveCMI ( OUT PUNKNOWN * Unknown, IN REFCLSID, @@ -46,7 +46,7 @@ extern NTSTATUS CreateMiniportWaveCMI IN POOL_TYPE PoolType ); -extern NTSTATUS CreateMiniportTopologyCMI +extern HRESULT NTAPI CreateMiniportTopologyCMI ( OUT PUNKNOWN * Unknown, IN REFCLSID, diff --git a/reactos/drivers/wdm/audio/drivers/CMIDriver/cmidriver.rbuild b/reactos/drivers/wdm/audio/drivers/CMIDriver/cmidriver.rbuild index 82b9dc34dd3..7e00b457a13 100644 --- a/reactos/drivers/wdm/audio/drivers/CMIDriver/cmidriver.rbuild +++ b/reactos/drivers/wdm/audio/drivers/CMIDriver/cmidriver.rbuild @@ -1,6 +1,16 @@ + + + -fno-exceptions + -fno-rtti + + + + /GR- + + . ntoskrnl portcls diff --git a/reactos/drivers/wdm/audio/drivers/CMIDriver/common.cpp b/reactos/drivers/wdm/audio/drivers/CMIDriver/common.cpp index 27bbfc0e369..260f51d62e2 100644 --- a/reactos/drivers/wdm/audio/drivers/CMIDriver/common.cpp +++ b/reactos/drivers/wdm/audio/drivers/CMIDriver/common.cpp @@ -36,10 +36,10 @@ NewCMIAdapter( PUNKNOWN UnknownOuter, POOL_TYPE PoolType) { -#if 0 +#if 1 //PAGED_CODE(); DBGPRINT(("NewCMIAdapter()")); - //ASSERT (Unknown); + ASSERT (Unknown); #endif STD_CREATE_BODY_(CCMIAdapter, Unknown, UnknownOuter, PoolType, PCMIADAPTER); } @@ -129,7 +129,7 @@ CCMIAdapter::~CCMIAdapter() } } -STDMETHODIMP_(NTSTATUS) CCMIAdapter::NonDelegatingQueryInterface(REFIID Interface, PVOID* Object) +STDMETHODIMP_(NTSTATUS) CCMIAdapter::QueryInterface(REFIID Interface, PVOID* Object) { //PAGED_CODE(); @@ -449,7 +449,7 @@ STDMETHODIMP_(void) CCMIAdapter::clearMixerBit(UInt8 index, UInt8 flag) writeMixer(index, readMixer(index) & ~flag); } -NTSTATUS CCMIAdapter::InterruptServiceRoutine(PINTERRUPTSYNC InterruptSync, PVOID DynamicContext) +NTSTATUS NTAPI CCMIAdapter::InterruptServiceRoutine(PINTERRUPTSYNC InterruptSync, PVOID DynamicContext) { UInt32 status, mask = 0; diff --git a/reactos/drivers/wdm/audio/drivers/CMIDriver/common.hpp b/reactos/drivers/wdm/audio/drivers/CMIDriver/common.hpp index 3502662176e..594838151ab 100644 --- a/reactos/drivers/wdm/audio/drivers/CMIDriver/common.hpp +++ b/reactos/drivers/wdm/audio/drivers/CMIDriver/common.hpp @@ -41,8 +41,7 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "cmireg.hpp" class CCMIAdapter : public ICMIAdapter, - public IAdapterPowerManagement, - public CUnknown + public IAdapterPowerManagement { private: PDEVICE_OBJECT DeviceObject; @@ -56,8 +55,25 @@ private: void resetController(); public: - DECLARE_STD_UNKNOWN(); - DEFINE_STD_CONSTRUCTOR(CCMIAdapter); + STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface); + STDMETHODIMP_(ULONG) AddRef() + { + InterlockedIncrement(&m_Ref); + return m_Ref; + } + STDMETHODIMP_(ULONG) Release() + { + InterlockedDecrement(&m_Ref); + + if (!m_Ref) + { + delete this; + return 0; + } + return m_Ref; + } + + CCMIAdapter(IUnknown *OuterUnknown){} ~CCMIAdapter(); IMP_IAdapterPowerManagement; @@ -88,7 +104,7 @@ public: STDMETHODIMP_(void) resetMixer(); - static NTSTATUS InterruptServiceRoutine(PINTERRUPTSYNC InterruptSync, PVOID StaticContext); + static NTSTATUS NTAPI InterruptServiceRoutine(PINTERRUPTSYNC InterruptSync, PVOID StaticContext); STDMETHODIMP_(PCMI8738Info) getCMI8738Info(void) { @@ -105,6 +121,9 @@ public: }; friend NTSTATUS NewCCMIAdapter(PCMIADAPTER* OutCMIAdapter, PRESOURCELIST ResourceList); + + LONG m_Ref; + }; NTSTATUS NewCMIAdapter(PUNKNOWN* Unknown, REFCLSID, PUNKNOWN UnknownOuter, POOL_TYPE PoolType); diff --git a/reactos/drivers/wdm/audio/drivers/CMIDriver/mintopo.cpp b/reactos/drivers/wdm/audio/drivers/CMIDriver/mintopo.cpp index 364e508cf2c..7ced5096ce1 100644 --- a/reactos/drivers/wdm/audio/drivers/CMIDriver/mintopo.cpp +++ b/reactos/drivers/wdm/audio/drivers/CMIDriver/mintopo.cpp @@ -33,14 +33,14 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #pragma code_seg("PAGE") -NTSTATUS CreateMiniportTopologyCMI(PUNKNOWN* Unknown, REFCLSID, PUNKNOWN UnknownOuter, POOL_TYPE PoolType) +HRESULT NTAPI CreateMiniportTopologyCMI(PUNKNOWN* Unknown, REFCLSID, PUNKNOWN UnknownOuter, POOL_TYPE PoolType) { //PAGED_CODE(); //ASSERT(Unknown); STD_CREATE_BODY_(CCMITopology,Unknown,UnknownOuter,PoolType,PMINIPORTTOPOLOGY); } -STDMETHODIMP CCMITopology::NonDelegatingQueryInterface(REFIID Interface, PVOID* Object) +STDMETHODIMP CCMITopology::QueryInterface(REFIID Interface, PVOID* Object) { //PAGED_CODE(); //ASSERT(Object); diff --git a/reactos/drivers/wdm/audio/drivers/CMIDriver/mintopo.hpp b/reactos/drivers/wdm/audio/drivers/CMIDriver/mintopo.hpp index 3ce6f1b2eb7..5a4628ffc54 100644 --- a/reactos/drivers/wdm/audio/drivers/CMIDriver/mintopo.hpp +++ b/reactos/drivers/wdm/audio/drivers/CMIDriver/mintopo.hpp @@ -31,8 +31,7 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "common.hpp" #include "property.h" -class CCMITopology : public ICMITopology, - public CUnknown +class CCMITopology : public ICMITopology { private: PCMIADAPTER CMIAdapter; // Adapter common object. @@ -45,8 +44,24 @@ private: NTSTATUS ProcessResources(PRESOURCELIST ResourceList); public: - DECLARE_STD_UNKNOWN(); - DEFINE_STD_CONSTRUCTOR(CCMITopology); + STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface); + STDMETHODIMP_(ULONG) AddRef() + { + InterlockedIncrement(&m_Ref); + return m_Ref; + } + STDMETHODIMP_(ULONG) Release() + { + InterlockedDecrement(&m_Ref); + + if (!m_Ref) + { + delete this; + return 0; + } + return m_Ref; + } + CCMITopology(IUnknown * OuterUnknown){} ~CCMITopology(); STDMETHODIMP_(NTSTATUS) loadMixerSettingsFromRegistry(); STDMETHODIMP_(NTSTATUS) storeMixerSettingsToRegistry(); @@ -88,6 +103,8 @@ public: friend NTSTATUS NTAPI PropertyHandler_Mux(PPCPROPERTY_REQUEST PropertyRequest); static NTSTATUS NTAPI EventHandler(PPCEVENT_REQUEST EventRequest); + + LONG m_Ref; }; #endif //_MINTOPO_HPP_ diff --git a/reactos/drivers/wdm/audio/drivers/CMIDriver/mintopotables.hpp b/reactos/drivers/wdm/audio/drivers/CMIDriver/mintopotables.hpp index 922643ad334..96656d682f4 100644 --- a/reactos/drivers/wdm/audio/drivers/CMIDriver/mintopotables.hpp +++ b/reactos/drivers/wdm/audio/drivers/CMIDriver/mintopotables.hpp @@ -30,12 +30,14 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "mintopo.hpp" +#if 0 #ifndef STATIC_KSDATAFORMAT_SUBTYPE_DOLBY_AC3_SPDIF #define STATIC_KSDATAFORMAT_SUBTYPE_DOLBY_AC3_SPDIF\ DEFINE_WAVEFORMATEX_GUID(WAVE_FORMAT_DOLBY_AC3_SPDIF) DEFINE_GUIDSTRUCT("00000092-0000-0010-8000-00aa00389b71", KSDATAFORMAT_SUBTYPE_DOLBY_AC3_SPDIF); #define KSDATAFORMAT_SUBTYPE_DOLBY_AC3_SPDIF DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_DOLBY_AC3_SPDIF) #endif +#endif NTSTATUS NTAPI PropertyHandler_Level(PPCPROPERTY_REQUEST PropertyRequest); NTSTATUS NTAPI PropertyHandler_CpuResources(PPCPROPERTY_REQUEST PropertyRequest); @@ -352,13 +354,13 @@ static PCPROPERTY_ITEM PropertiesFilter[] = (PCPFNPROPERTY_HANDLER)PropertyHandler_ComponentId }, { - &KSPROPSETID_CMI, + &GUID_NULL,//&KSPROPSETID_CMI, //HACK KSPROPERTY_CMI_GET, KSPROPERTY_TYPE_GET, (PCPFNPROPERTY_HANDLER)PropertyHandler_Private }, { - &KSPROPSETID_CMI, + &GUID_NULL,//&KSPROPSETID_CMI, //HACK KSPROPERTY_CMI_SET, KSPROPERTY_TYPE_SET, (PCPFNPROPERTY_HANDLER)PropertyHandler_Private diff --git a/reactos/drivers/wdm/audio/drivers/CMIDriver/minwave.cpp b/reactos/drivers/wdm/audio/drivers/CMIDriver/minwave.cpp index 36bdef570e2..ddc9b588d19 100644 --- a/reactos/drivers/wdm/audio/drivers/CMIDriver/minwave.cpp +++ b/reactos/drivers/wdm/audio/drivers/CMIDriver/minwave.cpp @@ -31,7 +31,7 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #pragma code_seg("PAGE") -NTSTATUS CreateMiniportWaveCMI(PUNKNOWN *Unknown, REFCLSID, PUNKNOWN UnknownOuter, POOL_TYPE PoolType) +HRESULT NTAPI CreateMiniportWaveCMI(PUNKNOWN *Unknown, REFCLSID, PUNKNOWN UnknownOuter, POOL_TYPE PoolType) { //PAGED_CODE(); //ASSERT(Unknown); @@ -77,7 +77,7 @@ NTSTATUS CMiniportWaveCMI::newDMAChannel(PDMACHANNEL *dmaChannel, UInt32 bufferL #endif //generic crap -STDMETHODIMP CMiniportWaveCMI::NonDelegatingQueryInterface(REFIID Interface, PVOID *Object) +STDMETHODIMP CMiniportWaveCMI::QueryInterface(REFIID Interface, PVOID *Object) { //PAGED_CODE(); //ASSERT(Object); @@ -482,7 +482,7 @@ STDMETHODIMP CMiniportWaveCMI::DataRangeIntersection(ULONG PinId, PKSDATARANGE C } - if (!IsEqualGUIDAligned(ClientDataRange->SubFormat, KSDATAFORMAT_SUBTYPE_DOLBY_AC3_SPDIF) + if (!IsEqualGUIDAligned(ClientDataRange->SubFormat, GUID_NULL)//KSDATAFORMAT_SUBTYPE_DOLBY_AC3_SPDIF) //HACK && !IsEqualGUIDAligned(ClientDataRange->SubFormat, KSDATAFORMAT_SUBTYPE_WILDCARD)) { // check for Vista isAC3Pin = false; @@ -1215,7 +1215,7 @@ CMiniportWaveStreamCMI::~CMiniportWaveStreamCMI(void) } } -STDMETHODIMP CMiniportWaveStreamCMI::NonDelegatingQueryInterface(REFIID Interface, PVOID *Object) +STDMETHODIMP CMiniportWaveStreamCMI::QueryInterface(REFIID Interface, PVOID *Object) { //PAGED_CODE(); //ASSERT(Object); diff --git a/reactos/drivers/wdm/audio/drivers/CMIDriver/minwave.hpp b/reactos/drivers/wdm/audio/drivers/CMIDriver/minwave.hpp index 3b5f1d165df..7686c53390d 100644 --- a/reactos/drivers/wdm/audio/drivers/CMIDriver/minwave.hpp +++ b/reactos/drivers/wdm/audio/drivers/CMIDriver/minwave.hpp @@ -41,8 +41,7 @@ class CMiniportWaveCMI: #else public IMiniportWaveCyclic, #endif - public IMiniportWaveCMI, - public CUnknown + public IMiniportWaveCMI { private: PCMIADAPTER CMIAdapter; // Adapter common object. @@ -56,7 +55,7 @@ private: CMI8738Info *cm; UInt32 requestedChannelCount; UInt32 requestedChannelMask; - + LONG m_Ref; CMiniportWaveStreamCMI *stream[3]; bool isStreamRunning[3]; @@ -72,8 +71,24 @@ private: NTSTATUS loadChannelConfigFromRegistry(); NTSTATUS storeChannelConfigToRegistry(); public: - DECLARE_STD_UNKNOWN(); - DEFINE_STD_CONSTRUCTOR(CMiniportWaveCMI); + STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface); + STDMETHODIMP_(ULONG) AddRef() + { + InterlockedIncrement(&m_Ref); + return m_Ref; + } + STDMETHODIMP_(ULONG) Release() + { + InterlockedDecrement(&m_Ref); + + if (!m_Ref) + { + delete this; + return 0; + } + return m_Ref; + } + CMiniportWaveCMI(IUnknown * OuterUnknown){} ~CMiniportWaveCMI(); #ifdef WAVERT IMP_IMiniportWaveRT; @@ -96,8 +111,7 @@ class CMiniportWaveStreamCMI: #else public IMiniportWaveCyclicStream, #endif - public IDrmAudioStream, - public CUnknown + public IDrmAudioStream { private: CMiniportWaveCMI *Miniport; @@ -119,6 +133,7 @@ private: UInt32 dmaSize; // size of the DMA buffer in frames, NOT in bytes UInt32 currentChannelCount, currentSampleRate, currentResolution; bool enableAC3Passthru, enableSPDIF; + LONG m_Ref; NTSTATUS prepareStream(); NTSTATUS setDACChannels(); @@ -126,8 +141,24 @@ private: NTSTATUS setupAC3Passthru(); public: - DECLARE_STD_UNKNOWN(); - DEFINE_STD_CONSTRUCTOR(CMiniportWaveStreamCMI); + STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface); + STDMETHODIMP_(ULONG) AddRef() + { + InterlockedIncrement(&m_Ref); + return m_Ref; + } + STDMETHODIMP_(ULONG) Release() + { + InterlockedDecrement(&m_Ref); + + if (!m_Ref) + { + delete this; + return 0; + } + return m_Ref; + } + CMiniportWaveStreamCMI(IUnknown * OuterUnknown){} ~CMiniportWaveStreamCMI(); #ifdef WAVERT IMP_IMiniportWaveRTStream; diff --git a/reactos/drivers/wdm/audio/drivers/CMIDriver/minwavetables.hpp b/reactos/drivers/wdm/audio/drivers/CMIDriver/minwavetables.hpp index 0c0326ca21c..e380a1ce2fc 100644 --- a/reactos/drivers/wdm/audio/drivers/CMIDriver/minwavetables.hpp +++ b/reactos/drivers/wdm/audio/drivers/CMIDriver/minwavetables.hpp @@ -65,7 +65,7 @@ static KSDATARANGE_AUDIO WavePinDataRangesAC3Stream[] = 0, 0, STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO), - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_DOLBY_AC3_SPDIF), + STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO),//STATICGUIDOF(KSDATAFORMAT_SUBTYPE_DOLBY_AC3_SPDIF), //HACK STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX) }, MAX_CHANNELS_AC3, diff --git a/reactos/drivers/wdm/audio/drivers/CMIDriver/property.h b/reactos/drivers/wdm/audio/drivers/CMIDriver/property.h index 88e09691550..7e6593dfed2 100644 --- a/reactos/drivers/wdm/audio/drivers/CMIDriver/property.h +++ b/reactos/drivers/wdm/audio/drivers/CMIDriver/property.h @@ -30,10 +30,12 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. //GUID for the private property // {2B81CDBB-EE6C-4ECC-8AA5-9A188B023DFF} + #define STATIC_KSPROPSETID_CMI \ 0x2B81CDBB, 0xEE6C, 0x4ECC, 0x8A, 0xA5, 0x9A, 0x18, 0x8B, 0x02, 0x3D, 0xFF -DEFINE_GUIDSTRUCT("2B81CDBB-EE6C-4ECC-8AA5-9A188B023DFF", _STATIC_KSPROPSETID_CMI); -#define KSPROPSETID_CMI DEFINE_GUIDNAMED(_STATIC_KSPROPSETID_CMI) +DEFINE_GUIDSTRUCT("2B81CDBB-EE6C-4ECC-8AA5-9A188B023DFF", KSPROPSETID_CMI); +#define KSPROPSETID_CMI DEFINE_GUIDNAMED(KSPROPSETID_CMI) + //methods #define KSPROPERTY_CMI_GET 1