From 558ae4f2f453a8a3d77fad0a1aac9cfa81a643e6 Mon Sep 17 00:00:00 2001 From: dmitrykos Date: Tue, 16 Feb 2010 11:18:52 +0000 Subject: [PATCH] provided ability not to depend on ksguid.lib when using WDMKS as it may not be provided for x64 SDK by default, define PA_WDMKS_NO_KSGUID_LIB to use static declarations, x64 MSVC project corrected to define PA_WDMKS_NO_KSGUID_LIB for x64 compilations. added WASAPI symbols to portaudio.def. --- build/msvc/portaudio.def | 6 +++- build/msvc/portaudio.vcproj | 24 +++++++++++----- src/os/win/pa_win_wdmks_utils.c | 50 ++++++++++++++++++++++++++------- 3 files changed, 62 insertions(+), 18 deletions(-) diff --git a/build/msvc/portaudio.def b/build/msvc/portaudio.def index 08929d6..c57bdbf 100644 --- a/build/msvc/portaudio.def +++ b/build/msvc/portaudio.def @@ -40,4 +40,8 @@ PaAsio_ShowControlPanel @51 PaUtil_InitializeX86PlainConverters @52 PaAsio_GetInputChannelName @53 PaAsio_GetOutputChannelName @54 -PaUtil_SetDebugPrintFunction @55 \ No newline at end of file +PaUtil_SetDebugPrintFunction @55 +PaWasapi_GetDeviceDefaultFormat @56 +PaWasapi_GetDeviceRole @57 +PaWasapi_ThreadPriorityBoost @58 +PaWasapi_ThreadPriorityRevert @59 diff --git a/build/msvc/portaudio.vcproj b/build/msvc/portaudio.vcproj index 759f934..664b0c5 100644 --- a/build/msvc/portaudio.vcproj +++ b/build/msvc/portaudio.vcproj @@ -1,9 +1,10 @@ - @@ -945,6 +951,7 @@ > = 1200))) /* MSC version 6 and above */ #pragma comment( lib, "ksguid.lib" ) #endif +#define pa_KSDATAFORMAT_TYPE_AUDIO KSDATAFORMAT_TYPE_AUDIO +#define pa_KSDATAFORMAT_SUBTYPE_IEEE_FLOAT KSDATAFORMAT_SUBTYPE_IEEE_FLOAT +#define pa_KSDATAFORMAT_SUBTYPE_PCM KSDATAFORMAT_SUBTYPE_PCM +#define pa_KSDATAFORMAT_SUBTYPE_WAVEFORMATEX KSDATAFORMAT_SUBTYPE_WAVEFORMATEX +#define pa_KSMEDIUMSETID_Standard KSMEDIUMSETID_Standard +#define pa_KSINTERFACESETID_Standard KSINTERFACESETID_Standard +#define pa_KSPROPSETID_Pin KSPROPSETID_Pin + +#else + +static const GUID pa_KSDATAFORMAT_TYPE_AUDIO = { STATIC_KSDATAFORMAT_TYPE_AUDIO }; +static const GUID pa_KSDATAFORMAT_SUBTYPE_IEEE_FLOAT = { STATIC_KSDATAFORMAT_SUBTYPE_IEEE_FLOAT }; +static const GUID pa_KSDATAFORMAT_SUBTYPE_PCM = { STATIC_KSDATAFORMAT_SUBTYPE_PCM }; +static const GUID pa_KSDATAFORMAT_SUBTYPE_WAVEFORMATEX = { STATIC_KSDATAFORMAT_SUBTYPE_WAVEFORMATEX }; +static const GUID pa_KSMEDIUMSETID_Standard = { STATIC_KSMEDIUMSETID_Standard }; +static const GUID pa_KSINTERFACESETID_Standard = { STATIC_KSINTERFACESETID_Standard }; +static const GUID pa_KSPROPSETID_Pin = { STATIC_KSPROPSETID_Pin }; + +#endif + + +#define pa_IS_VALID_WAVEFORMATEX_GUID(Guid)\ + (!memcmp(((PUSHORT)&pa_KSDATAFORMAT_SUBTYPE_WAVEFORMATEX) + 1, ((PUSHORT)(Guid)) + 1, sizeof(GUID) - sizeof(USHORT))) + + + static PaError WdmGetPinPropertySimple( HANDLE handle, unsigned long pinId, @@ -58,7 +87,7 @@ static PaError WdmGetPinPropertySimple( { DWORD bytesReturned; KSP_PIN ksPProp; - ksPProp.Property.Set = KSPROPSETID_Pin; + ksPProp.Property.Set = pa_KSPROPSETID_Pin; ksPProp.Property.Id = property; ksPProp.Property.Flags = KSPROPERTY_TYPE_GET; ksPProp.PinId = pinId; @@ -88,7 +117,7 @@ static PaError WdmGetPinPropertyMulti( *ksMultipleItem = 0; - ksPProp.Property.Set = KSPROPSETID_Pin; + ksPProp.Property.Set = pa_KSPROPSETID_Pin; ksPProp.Property.Id = property; ksPProp.Property.Flags = KSPROPERTY_TYPE_GET; ksPProp.PinId = pinId; @@ -188,7 +217,8 @@ static int KSFilterPinPropertyIdentifiersInclude( int PaWin_WDMKS_QueryFilterMaximumChannelCount( void *wcharDevicePath, int isInput ) { HANDLE deviceHandle; - int pinCount, pinId, i; + ULONG i; + int pinCount, pinId; int result = 0; KSPIN_DATAFLOW requiredDataflowDirection = (isInput ? KSPIN_DATAFLOW_OUT : KSPIN_DATAFLOW_IN ); @@ -208,11 +238,11 @@ int PaWin_WDMKS_QueryFilterMaximumChannelCount( void *wcharDevicePath, int isInp (( communication == KSPIN_COMMUNICATION_SINK) || ( communication == KSPIN_COMMUNICATION_BOTH)) && ( KSFilterPinPropertyIdentifiersInclude( deviceHandle, pinId, - KSPROPERTY_PIN_INTERFACES, &KSINTERFACESETID_Standard, KSINTERFACE_STANDARD_STREAMING ) + KSPROPERTY_PIN_INTERFACES, &pa_KSINTERFACESETID_Standard, KSINTERFACE_STANDARD_STREAMING ) || KSFilterPinPropertyIdentifiersInclude( deviceHandle, pinId, - KSPROPERTY_PIN_INTERFACES, &KSINTERFACESETID_Standard, KSINTERFACE_STANDARD_LOOPED_STREAMING ) ) + KSPROPERTY_PIN_INTERFACES, &pa_KSINTERFACESETID_Standard, KSINTERFACE_STANDARD_LOOPED_STREAMING ) ) && KSFilterPinPropertyIdentifiersInclude( deviceHandle, pinId, - KSPROPERTY_PIN_MEDIUMS, &KSMEDIUMSETID_Standard, KSMEDIUM_STANDARD_DEVIO ) ) + KSPROPERTY_PIN_MEDIUMS, &pa_KSMEDIUMSETID_Standard, KSMEDIUM_STANDARD_DEVIO ) ) { KSMULTIPLE_ITEM* item = NULL; if( WdmGetPinPropertyMulti( deviceHandle, pinId, KSPROPERTY_PIN_DATARANGES, &item ) == paNoError ) @@ -221,10 +251,10 @@ int PaWin_WDMKS_QueryFilterMaximumChannelCount( void *wcharDevicePath, int isInp for( i=0; i < item->Count; ++i ){ - if( IS_VALID_WAVEFORMATEX_GUID(&dataRange->SubFormat) - || memcmp( (void*)&dataRange->SubFormat, (void*)&KSDATAFORMAT_SUBTYPE_PCM, sizeof(GUID) ) == 0 - || memcmp( (void*)&dataRange->SubFormat, (void*)&KSDATAFORMAT_SUBTYPE_IEEE_FLOAT, sizeof(GUID) ) == 0 - || ( ( memcmp( (void*)&dataRange->MajorFormat, (void*)&KSDATAFORMAT_TYPE_AUDIO, sizeof(GUID) ) == 0 ) + if( pa_IS_VALID_WAVEFORMATEX_GUID(&dataRange->SubFormat) + || memcmp( (void*)&dataRange->SubFormat, (void*)&pa_KSDATAFORMAT_SUBTYPE_PCM, sizeof(GUID) ) == 0 + || memcmp( (void*)&dataRange->SubFormat, (void*)&pa_KSDATAFORMAT_SUBTYPE_IEEE_FLOAT, sizeof(GUID) ) == 0 + || ( ( memcmp( (void*)&dataRange->MajorFormat, (void*)&pa_KSDATAFORMAT_TYPE_AUDIO, sizeof(GUID) ) == 0 ) && ( memcmp( (void*)&dataRange->SubFormat, (void*)&KSDATAFORMAT_SUBTYPE_WILDCARD, sizeof(GUID) ) == 0 ) ) ) { KSDATARANGE_AUDIO *dataRangeAudio = (KSDATARANGE_AUDIO*)dataRange; -- 2.43.0