Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1f5429ee43 | ||
|
|
0bb476d8dc | ||
|
|
e0b9ce6f48 | ||
|
|
9505c2e3a5 | ||
|
|
a552636034 |
3 changed files with 57 additions and 79 deletions
|
|
@ -6,40 +6,6 @@
|
||||||
|
|
||||||
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
|
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
|
||||||
|
|
||||||
# Check if the user is building PortAudio stand-alone or as part of a larger
|
|
||||||
# project. If this is part of a larger project (i.e. the CMakeLists.txt has
|
|
||||||
# been imported by some other CMakeLists.txt), we don't want to trump over
|
|
||||||
# the top of that project's global settings.
|
|
||||||
IF(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_LIST_DIR})
|
|
||||||
PROJECT(portaudio)
|
|
||||||
|
|
||||||
# CMAKE_CONFIGURATION_TYPES only exists for multi-config generators (like
|
|
||||||
# Visual Studio or Xcode). For these projects, we won't define
|
|
||||||
# CMAKE_BUILD_TYPE as it does not make sense.
|
|
||||||
IF(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
|
|
||||||
MESSAGE(STATUS "Setting CMAKE_BUILD_TYPE type to 'Debug' as none was specified.")
|
|
||||||
SET(CMAKE_BUILD_TYPE Debug CACHE STRING "Choose the type of build." FORCE)
|
|
||||||
SET_PROPERTY(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release")
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
SET_PROPERTY(GLOBAL PROPERTY USE_FOLDERS ON)
|
|
||||||
|
|
||||||
IF(WIN32 AND MSVC)
|
|
||||||
OPTION(PA_DLL_LINK_WITH_STATIC_RUNTIME "Link with static runtime libraries (minimizes runtime dependencies)" ON)
|
|
||||||
IF(PA_DLL_LINK_WITH_STATIC_RUNTIME)
|
|
||||||
FOREACH(flag_var
|
|
||||||
CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE
|
|
||||||
CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO
|
|
||||||
CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE
|
|
||||||
CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO)
|
|
||||||
IF(${flag_var} MATCHES "/MD")
|
|
||||||
STRING(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
|
|
||||||
ENDIF()
|
|
||||||
ENDFOREACH()
|
|
||||||
ENDIF()
|
|
||||||
ENDIF()
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
SET(PA_VERSION 19)
|
SET(PA_VERSION 19)
|
||||||
SET(PA_PKGCONFIG_VERSION ${PA_VERSION})
|
SET(PA_PKGCONFIG_VERSION ${PA_VERSION})
|
||||||
SET(PA_SOVERSION "${PA_VERSION}.0")
|
SET(PA_SOVERSION "${PA_VERSION}.0")
|
||||||
|
|
@ -215,7 +181,7 @@ IF(WIN32)
|
||||||
IF(PA_USE_WASAPI)
|
IF(PA_USE_WASAPI)
|
||||||
SET(PA_WASAPI_SOURCES src/hostapi/wasapi/pa_win_wasapi.c)
|
SET(PA_WASAPI_SOURCES src/hostapi/wasapi/pa_win_wasapi.c)
|
||||||
SOURCE_GROUP("hostapi\\wasapi" FILES ${PA_WASAPI_SOURCES})
|
SOURCE_GROUP("hostapi\\wasapi" FILES ${PA_WASAPI_SOURCES})
|
||||||
SET(PA_PUBLIC_INCLUDES ${PA_PUBLIC_INCLUDES} include/pa_win_wasapi.h)
|
SET(PA_PUBLIC_INCLUDES ${PA_PUBLIC_INCLUDES} include/pa_win_wasapi.h include/pa_win_waveformat.h)
|
||||||
SET(PA_SOURCES ${PA_SOURCES} ${PA_WASAPI_SOURCES})
|
SET(PA_SOURCES ${PA_SOURCES} ${PA_WASAPI_SOURCES})
|
||||||
SET(PA_LIBRARY_DEPENDENCIES ${PA_LIBRARY_DEPENDENCIES} ole32 uuid)
|
SET(PA_LIBRARY_DEPENDENCIES ${PA_LIBRARY_DEPENDENCIES} ole32 uuid)
|
||||||
ELSE()
|
ELSE()
|
||||||
|
|
@ -417,6 +383,8 @@ IF(WIN32 AND MSVC)
|
||||||
SET_TARGET_PROPERTIES(portaudio_static PROPERTIES OUTPUT_NAME portaudio)
|
SET_TARGET_PROPERTIES(portaudio_static PROPERTIES OUTPUT_NAME portaudio)
|
||||||
ENDIF()
|
ENDIF()
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
INSTALL(FILES ${PA_PUBLIC_INCLUDES} DESTINATION include)
|
||||||
|
INSTALL(TARGETS portaudio portaudio_static RUNTIME DESTINATION bin ARCHIVE DESTINATION lib LIBRARY DESTINATION lib)
|
||||||
ELSE()
|
ELSE()
|
||||||
IF(APPLE AND CMAKE_VERSION VERSION_GREATER 3.4.2)
|
IF(APPLE AND CMAKE_VERSION VERSION_GREATER 3.4.2)
|
||||||
OPTION(PA_OUTPUT_OSX_FRAMEWORK "Generate an OS X framework instead of the simple library" OFF)
|
OPTION(PA_OUTPUT_OSX_FRAMEWORK "Generate an OS X framework instead of the simple library" OFF)
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,29 @@ else(WIN32)
|
||||||
message(FATAL_ERROR "FindDXSDK.cmake: Unsupported platform ${CMAKE_SYSTEM_NAME}" )
|
message(FATAL_ERROR "FindDXSDK.cmake: Unsupported platform ${CMAKE_SYSTEM_NAME}" )
|
||||||
endif(WIN32)
|
endif(WIN32)
|
||||||
|
|
||||||
if(MSVC)
|
# Dsound.lib is statically linked (i.e. dsound.dll not required) and DXSDK_LIBRARY_DIR not used.
|
||||||
|
# In the environments supported by VCPKG we may as well avoid looking out for DX9 to avoid version
|
||||||
|
# mismatch in find.
|
||||||
|
|
||||||
|
if(MSVC AND MSVC_VERSION GREATER_EQUAL 1900)
|
||||||
|
|
||||||
|
# if the environment is set up properly, matching lib and header will be found
|
||||||
|
|
||||||
|
find_path(DXSDK_INCLUDE_DIR
|
||||||
|
dsound.h
|
||||||
|
)
|
||||||
|
find_library(DXSDK_DSOUND_LIBRARY
|
||||||
|
dsound.lib
|
||||||
|
)
|
||||||
|
|
||||||
|
INCLUDE(FindPackageHandleStandardArgs)
|
||||||
|
FIND_PACKAGE_HANDLE_STANDARD_ARGS(DXSDK DEFAULT_MSG DXSDK_INCLUDE_DIR DXSDK_DSOUND_LIBRARY)
|
||||||
|
|
||||||
|
MARK_AS_ADVANCED(
|
||||||
|
DXSDK_INCLUDE_DIR DXSDK_DSOUND_LIBRARY
|
||||||
|
)
|
||||||
|
|
||||||
|
else()
|
||||||
|
|
||||||
find_path(DXSDK_ROOT_DIR
|
find_path(DXSDK_ROOT_DIR
|
||||||
include/dxsdkver.h
|
include/dxsdkver.h
|
||||||
|
|
@ -34,27 +56,27 @@ if(MSVC)
|
||||||
|
|
||||||
find_path(DXSDK_INCLUDE_DIR
|
find_path(DXSDK_INCLUDE_DIR
|
||||||
dxsdkver.h
|
dxsdkver.h
|
||||||
PATHS
|
HINTS
|
||||||
${DXSDK_ROOT_DIR}/include
|
${DXSDK_ROOT_DIR}/include
|
||||||
)
|
)
|
||||||
|
|
||||||
IF(CMAKE_CL_64)
|
IF(CMAKE_CL_64)
|
||||||
find_path(DXSDK_LIBRARY_DIR
|
find_path(DXSDK_LIBRARY_DIR
|
||||||
dsound.lib
|
dsound.lib
|
||||||
PATHS
|
HINTS
|
||||||
${DXSDK_ROOT_DIR}/lib/x64
|
${DXSDK_ROOT_DIR}/lib/x64
|
||||||
)
|
)
|
||||||
ELSE(CMAKE_CL_64)
|
ELSE(CMAKE_CL_64)
|
||||||
find_path(DXSDK_LIBRARY_DIR
|
find_path(DXSDK_LIBRARY_DIR
|
||||||
dsound.lib
|
dsound.lib
|
||||||
PATHS
|
HINTS
|
||||||
${DXSDK_ROOT_DIR}/lib/x86
|
${DXSDK_ROOT_DIR}/lib/x86
|
||||||
)
|
)
|
||||||
ENDIF(CMAKE_CL_64)
|
ENDIF(CMAKE_CL_64)
|
||||||
|
|
||||||
find_library(DXSDK_DSOUND_LIBRARY
|
find_library(DXSDK_DSOUND_LIBRARY
|
||||||
dsound.lib
|
dsound.lib
|
||||||
PATHS
|
HINTS
|
||||||
${DXSDK_LIBRARY_DIR}
|
${DXSDK_LIBRARY_DIR}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -63,26 +85,9 @@ if(MSVC)
|
||||||
INCLUDE(FindPackageHandleStandardArgs)
|
INCLUDE(FindPackageHandleStandardArgs)
|
||||||
FIND_PACKAGE_HANDLE_STANDARD_ARGS(DXSDK DEFAULT_MSG DXSDK_ROOT_DIR DXSDK_INCLUDE_DIR)
|
FIND_PACKAGE_HANDLE_STANDARD_ARGS(DXSDK DEFAULT_MSG DXSDK_ROOT_DIR DXSDK_INCLUDE_DIR)
|
||||||
|
|
||||||
ELSEIF(MINGW)
|
|
||||||
|
|
||||||
GET_FILENAME_COMPONENT(MINGW_BIN_DIR ${CMAKE_C_COMPILER} DIRECTORY)
|
|
||||||
GET_FILENAME_COMPONENT(MINGW_SYSROOT ${MINGW_BIN_DIR} DIRECTORY)
|
|
||||||
# The glob expression below should only return a single folder:
|
|
||||||
FILE(GLOB MINGW_TOOLCHAIN_FOLDER ${MINGW_SYSROOT}/*mingw32)
|
|
||||||
|
|
||||||
find_library(DXSDK_DSOUND_LIBRARY
|
|
||||||
libdsound.a dsound
|
|
||||||
HINTS
|
|
||||||
"${MINGW_TOOLCHAIN_FOLDER}/lib"
|
|
||||||
"${MINGW_SYSROOT}/lib"
|
|
||||||
)
|
|
||||||
|
|
||||||
INCLUDE(FindPackageHandleStandardArgs)
|
|
||||||
FIND_PACKAGE_HANDLE_STANDARD_ARGS(DXSDK DEFAULT_MSG DXSDK_DSOUND_LIBRARY)
|
|
||||||
|
|
||||||
ENDIF(MSVC)
|
|
||||||
|
|
||||||
MARK_AS_ADVANCED(
|
MARK_AS_ADVANCED(
|
||||||
DXSDK_ROOT_DIR DXSDK_INCLUDE_DIR
|
DXSDK_ROOT_DIR DXSDK_INCLUDE_DIR
|
||||||
DXSDK_LIBRARY_DIR DXSDK_DSOUND_LIBRARY
|
DXSDK_LIBRARY_DIR DXSDK_DSOUND_LIBRARY
|
||||||
)
|
)
|
||||||
|
|
||||||
|
endif()
|
||||||
|
|
|
||||||
|
|
@ -1790,19 +1790,6 @@ static PaError CreateDeviceList(PaWasapiHostApiRepresentation *paWasapi, PaHostA
|
||||||
PA_DEBUG(("WASAPI:%d| name[%s]\n", i, deviceInfo->name));
|
PA_DEBUG(("WASAPI:%d| name[%s]\n", i, deviceInfo->name));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Default format
|
|
||||||
{
|
|
||||||
PROPVARIANT value;
|
|
||||||
PropVariantInit(&value);
|
|
||||||
hr = IPropertyStore_GetValue(pProperty, &PKEY_AudioEngine_DeviceFormat, &value);
|
|
||||||
// We need to set the result to a value otherwise we will return paNoError
|
|
||||||
// [IF_FAILED_JUMP(hResult, error);]
|
|
||||||
IF_FAILED_INTERNAL_ERROR_JUMP(hr, result, error);
|
|
||||||
memcpy(&paWasapi->devInfo[i].DefaultFormat, value.blob.pBlobData, min(sizeof(paWasapi->devInfo[i].DefaultFormat), value.blob.cbSize));
|
|
||||||
// cleanup
|
|
||||||
PropVariantClear(&value);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Formfactor
|
// Formfactor
|
||||||
{
|
{
|
||||||
PROPVARIANT value;
|
PROPVARIANT value;
|
||||||
|
|
@ -1855,6 +1842,24 @@ static PaError CreateDeviceList(PaWasapiHostApiRepresentation *paWasapi, PaHostA
|
||||||
// [IF_FAILED_JUMP(hResult, error);]
|
// [IF_FAILED_JUMP(hResult, error);]
|
||||||
IF_FAILED_INTERNAL_ERROR_JUMP(hr, result, error);
|
IF_FAILED_INTERNAL_ERROR_JUMP(hr, result, error);
|
||||||
|
|
||||||
|
// Get the default format.
|
||||||
|
//
|
||||||
|
// Note: this is using IAudioClient::GetMixFormat(), not
|
||||||
|
// PKEY_AudioEngine_DeviceFormat, because the latter has been shown to
|
||||||
|
// be unreliable - see:
|
||||||
|
// https://app.assembla.com/spaces/portaudio/tickets/286
|
||||||
|
// The downside of using GetMixFormat() is that the sample type reported
|
||||||
|
// by PaWasapi_GetDeviceDefaultFormat() will always be 32-bit float.
|
||||||
|
// That seems fine since PortAudio will automatically do any required
|
||||||
|
// conversions.
|
||||||
|
WAVEFORMATEXTENSIBLE *format;
|
||||||
|
hr = IAudioClient_GetMixFormat(tmpClient, &format);
|
||||||
|
if (SUCCEEDED(hr))
|
||||||
|
{
|
||||||
|
memcpy(&paWasapi->devInfo[i].DefaultFormat, format, sizeof(*format));
|
||||||
|
CoTaskMemFree(format);
|
||||||
|
}
|
||||||
|
|
||||||
// Get latency
|
// Get latency
|
||||||
hr = IAudioClient_GetDevicePeriod(tmpClient,
|
hr = IAudioClient_GetDevicePeriod(tmpClient,
|
||||||
&paWasapi->devInfo[i].DefaultDevicePeriod,
|
&paWasapi->devInfo[i].DefaultDevicePeriod,
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue