[openal-soft] 01/03: Imported Upstream version 1.17.1
Bret Curtis
psi29a at gmail.com
Wed Dec 30 22:49:37 UTC 2015
This is an automated email from the git hooks/post-receive script.
psi29a-guest pushed a commit to branch master
in repository openal-soft.
commit f6c282fd738d0e66ea1f95d363d700db6903097c
Author: Bret Curtis <psi29a at gmail.com>
Date: Wed Dec 30 22:39:48 2015 +0100
Imported Upstream version 1.17.1
---
Alc/backends/alsa.c | 7 ++-
Alc/backends/coreaudio.c | 42 +++++++------
Alc/backends/dsound.c | 11 ++--
Alc/backends/mmdevapi.c | 25 ++++----
Alc/backends/winmm.c | 20 +++----
Alc/helpers.c | 120 ++++++++++++++++++++++++++++++++++++--
Alc/hrtf.c | 2 +-
CMakeLists.txt | 67 ++++++++++++---------
ChangeLog | 16 +++++
alsoftrc.sample | 3 +-
examples/alhrtf.c | 2 +-
examples/allatency.c | 2 +-
examples/alloopback.c | 2 +-
examples/alreverb.c | 2 +-
examples/alstream.c | 2 +-
examples/altonegen.c | 2 +-
examples/common/alhelpers.h | 10 +---
utils/alsoft-config/mainwindow.ui | 1 +
18 files changed, 240 insertions(+), 96 deletions(-)
diff --git a/Alc/backends/alsa.c b/Alc/backends/alsa.c
index 9a443c0..43c4648 100644
--- a/Alc/backends/alsa.c
+++ b/Alc/backends/alsa.c
@@ -677,6 +677,7 @@ static ALCboolean ALCplaybackAlsa_reset(ALCplaybackAlsa *self)
unsigned int rate;
const char *funcerr;
int allowmmap;
+ int dir;
int err;
switch(device->FmtType)
@@ -770,7 +771,7 @@ static ALCboolean ALCplaybackAlsa_reset(ALCplaybackAlsa *self)
}
CHECK(snd_pcm_hw_params_set_channels(self->pcmHandle, hp, ChannelsFromDevFmt(device->FmtChans)));
/* set rate (implicitly constrains period/buffer parameters) */
- if(GetConfigValueBool(al_string_get_cstr(device->DeviceName), "alsa", "allow-resampler", 0))
+ if(!GetConfigValueBool(al_string_get_cstr(device->DeviceName), "alsa", "allow-resampler", 0))
{
if(snd_pcm_hw_params_set_rate_resample(self->pcmHandle, hp, 0) < 0)
ERR("Failed to disable ALSA resampler\n");
@@ -787,7 +788,9 @@ static ALCboolean ALCplaybackAlsa_reset(ALCplaybackAlsa *self)
/* retrieve configuration info */
CHECK(snd_pcm_hw_params_get_access(hp, &access));
CHECK(snd_pcm_hw_params_get_period_size(hp, &periodSizeInFrames, NULL));
- CHECK(snd_pcm_hw_params_get_periods(hp, &periods, NULL));
+ CHECK(snd_pcm_hw_params_get_periods(hp, &periods, &dir));
+ if(dir != 0)
+ WARN("Inexact period count: %u (%d)\n", periods, dir);
snd_pcm_hw_params_free(hp);
hp = NULL;
diff --git a/Alc/backends/coreaudio.c b/Alc/backends/coreaudio.c
index 43e881d..d926421 100644
--- a/Alc/backends/coreaudio.c
+++ b/Alc/backends/coreaudio.c
@@ -137,8 +137,8 @@ static OSStatus ca_capture_callback(void *inRefCon, AudioUnitRenderActionFlags *
static ALCenum ca_open_playback(ALCdevice *device, const ALCchar *deviceName)
{
- ComponentDescription desc;
- Component comp;
+ AudioComponentDescription desc;
+ AudioComponent comp;
ca_data *data;
OSStatus err;
@@ -154,19 +154,19 @@ static ALCenum ca_open_playback(ALCdevice *device, const ALCchar *deviceName)
desc.componentFlags = 0;
desc.componentFlagsMask = 0;
- comp = FindNextComponent(NULL, &desc);
+ comp = AudioComponentFindNext(NULL, &desc);
if(comp == NULL)
{
- ERR("FindNextComponent failed\n");
+ ERR("AudioComponentFindNext failed\n");
return ALC_INVALID_VALUE;
}
data = calloc(1, sizeof(*data));
- err = OpenAComponent(comp, &data->audioUnit);
+ err = AudioComponentInstanceNew(comp, &data->audioUnit);
if(err != noErr)
{
- ERR("OpenAComponent failed\n");
+ ERR("AudioComponentInstanceNew failed\n");
free(data);
return ALC_INVALID_VALUE;
}
@@ -176,7 +176,7 @@ static ALCenum ca_open_playback(ALCdevice *device, const ALCchar *deviceName)
if(err != noErr)
{
ERR("AudioUnitInitialize failed\n");
- CloseComponent(data->audioUnit);
+ AudioComponentInstanceDispose(data->audioUnit);
free(data);
return ALC_INVALID_VALUE;
}
@@ -191,7 +191,7 @@ static void ca_close_playback(ALCdevice *device)
ca_data *data = (ca_data*)device->ExtraData;
AudioUnitUninitialize(data->audioUnit);
- CloseComponent(data->audioUnit);
+ AudioComponentInstanceDispose(data->audioUnit);
free(data);
device->ExtraData = NULL;
@@ -374,12 +374,13 @@ static ALCenum ca_open_capture(ALCdevice *device, const ALCchar *deviceName)
AudioStreamBasicDescription hardwareFormat; // The hardware format
AudioStreamBasicDescription outputFormat; // The AudioUnit output format
AURenderCallbackStruct input;
- ComponentDescription desc;
+ AudioComponentDescription desc;
AudioDeviceID inputDevice;
UInt32 outputFrameCount;
UInt32 propertySize;
+ AudioObjectPropertyAddress propertyAddress;
UInt32 enableIO;
- Component comp;
+ AudioComponent comp;
ca_data *data;
OSStatus err;
@@ -395,10 +396,10 @@ static ALCenum ca_open_capture(ALCdevice *device, const ALCchar *deviceName)
desc.componentFlagsMask = 0;
// Search for component with given description
- comp = FindNextComponent(NULL, &desc);
+ comp = AudioComponentFindNext(NULL, &desc);
if(comp == NULL)
{
- ERR("FindNextComponent failed\n");
+ ERR("AudioComponentFindNext failed\n");
return ALC_INVALID_VALUE;
}
@@ -406,10 +407,10 @@ static ALCenum ca_open_capture(ALCdevice *device, const ALCchar *deviceName)
device->ExtraData = data;
// Open the component
- err = OpenAComponent(comp, &data->audioUnit);
+ err = AudioComponentInstanceNew(comp, &data->audioUnit);
if(err != noErr)
{
- ERR("OpenAComponent failed\n");
+ ERR("AudioComponentInstanceNew failed\n");
goto error;
}
@@ -432,11 +433,16 @@ static ALCenum ca_open_capture(ALCdevice *device, const ALCchar *deviceName)
}
// Get the default input device
+
propertySize = sizeof(AudioDeviceID);
- err = AudioHardwareGetProperty(kAudioHardwarePropertyDefaultInputDevice, &propertySize, &inputDevice);
+ propertyAddress.mSelector = kAudioHardwarePropertyDefaultInputDevice;
+ propertyAddress.mScope = kAudioObjectPropertyScopeGlobal;
+ propertyAddress.mElement = kAudioObjectPropertyElementMaster;
+
+ err = AudioObjectGetPropertyData(kAudioObjectSystemObject, &propertyAddress, 0, NULL, &propertySize, &inputDevice);
if(err != noErr)
{
- ERR("AudioHardwareGetProperty failed\n");
+ ERR("AudioObjectGetPropertyData failed\n");
goto error;
}
@@ -596,7 +602,7 @@ error:
if(data->audioConverter)
AudioConverterDispose(data->audioConverter);
if(data->audioUnit)
- CloseComponent(data->audioUnit);
+ AudioComponentInstanceDispose(data->audioUnit);
free(data);
device->ExtraData = NULL;
@@ -613,7 +619,7 @@ static void ca_close_capture(ALCdevice *device)
destroy_buffer_list(data->bufferList);
AudioConverterDispose(data->audioConverter);
- CloseComponent(data->audioUnit);
+ AudioComponentInstanceDispose(data->audioUnit);
free(data);
device->ExtraData = NULL;
diff --git a/Alc/backends/dsound.c b/Alc/backends/dsound.c
index 4db4b55..f27ab37 100644
--- a/Alc/backends/dsound.c
+++ b/Alc/backends/dsound.c
@@ -60,7 +60,7 @@
DEFINE_GUID(KSDATAFORMAT_SUBTYPE_PCM, 0x00000001, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71);
DEFINE_GUID(KSDATAFORMAT_SUBTYPE_IEEE_FLOAT, 0x00000003, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71);
-#define DEVNAME_TAIL " on OpenAL Soft"
+#define DEVNAME_HEAD "OpenAL Soft on "
#ifdef HAVE_DYNLOAD
@@ -145,13 +145,12 @@ static BOOL CALLBACK DSoundEnumDevices(GUID *guid, const WCHAR *desc, const WCHA
{
const DevMap *iter;
- al_string_copy_wcstr(&entry.name, desc);
- if(count == 0)
- al_string_append_cstr(&entry.name, DEVNAME_TAIL);
- else
+ al_string_copy_cstr(&entry.name, DEVNAME_HEAD);
+ al_string_append_wcstr(&entry.name, desc);
+ if(count != 0)
{
char str[64];
- snprintf(str, sizeof(str), " #%d"DEVNAME_TAIL, count+1);
+ snprintf(str, sizeof(str), " #%d", count+1);
al_string_append_cstr(&entry.name, str);
}
diff --git a/Alc/backends/mmdevapi.c b/Alc/backends/mmdevapi.c
index e8563d3..0134a46 100644
--- a/Alc/backends/mmdevapi.c
+++ b/Alc/backends/mmdevapi.c
@@ -62,7 +62,7 @@ DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_FormFactor, 0x1da5d803, 0xd492, 0x4edd, 0x
#define X7DOT1 (SPEAKER_FRONT_LEFT|SPEAKER_FRONT_RIGHT|SPEAKER_FRONT_CENTER|SPEAKER_LOW_FREQUENCY|SPEAKER_BACK_LEFT|SPEAKER_BACK_RIGHT|SPEAKER_SIDE_LEFT|SPEAKER_SIDE_RIGHT)
#define X7DOT1_WIDE (SPEAKER_FRONT_LEFT|SPEAKER_FRONT_RIGHT|SPEAKER_FRONT_CENTER|SPEAKER_LOW_FREQUENCY|SPEAKER_BACK_LEFT|SPEAKER_BACK_RIGHT|SPEAKER_FRONT_LEFT_OF_CENTER|SPEAKER_FRONT_RIGHT_OF_CENTER)
-#define DEVNAME_TAIL " on OpenAL Soft"
+#define DEVNAME_HEAD "OpenAL Soft on "
typedef struct {
@@ -125,10 +125,13 @@ static void get_device_name(IMMDevice *device, al_string *name)
PROPVARIANT pvname;
HRESULT hr;
+ al_string_copy_cstr(name, DEVNAME_HEAD);
+
hr = IMMDevice_OpenPropertyStore(device, STGM_READ, &ps);
if(FAILED(hr))
{
WARN("OpenPropertyStore failed: 0x%08lx\n", hr);
+ al_string_append_cstr(name, "Unknown Device Name");
return;
}
@@ -136,11 +139,17 @@ static void get_device_name(IMMDevice *device, al_string *name)
hr = IPropertyStore_GetValue(ps, (const PROPERTYKEY*)&DEVPKEY_Device_FriendlyName, &pvname);
if(FAILED(hr))
+ {
WARN("GetValue Device_FriendlyName failed: 0x%08lx\n", hr);
+ al_string_append_cstr(name, "Unknown Device Name");
+ }
else if(pvname.vt == VT_LPWSTR)
- al_string_copy_wcstr(name, pvname.pwszVal);
+ al_string_append_wcstr(name, pvname.pwszVal);
else
+ {
WARN("Unexpected PROPVARIANT type: 0x%04x\n", pvname.vt);
+ al_string_append_cstr(name, "Unknown Device Name");
+ }
PropVariantClear(&pvname);
IPropertyStore_Release(ps);
@@ -193,12 +202,10 @@ static void add_device(IMMDevice *device, LPCWSTR devid, vector_DevMap *list)
const DevMap *iter;
al_string_copy(&entry.name, tmpname);
- if(count == 0)
- al_string_append_cstr(&entry.name, DEVNAME_TAIL);
- else
+ if(count != 0)
{
char str[64];
- snprintf(str, sizeof(str), " #%d"DEVNAME_TAIL, count+1);
+ snprintf(str, sizeof(str), " #%d", count+1);
al_string_append_cstr(&entry.name, str);
}
@@ -755,10 +762,7 @@ static HRESULT ALCmmdevPlayback_openProxy(ALCmmdevPlayback *self)
{
self->client = ptr;
if(al_string_empty(device->DeviceName))
- {
get_device_name(self->mmdev, &device->DeviceName);
- al_string_append_cstr(&device->DeviceName, DEVNAME_TAIL);
- }
}
if(FAILED(hr))
@@ -1412,10 +1416,7 @@ static HRESULT ALCmmdevCapture_openProxy(ALCmmdevCapture *self)
{
self->client = ptr;
if(al_string_empty(device->DeviceName))
- {
get_device_name(self->mmdev, &device->DeviceName);
- al_string_append_cstr(&device->DeviceName, DEVNAME_TAIL);
- }
}
if(FAILED(hr))
diff --git a/Alc/backends/winmm.c b/Alc/backends/winmm.c
index bf97ef2..3508ec4 100644
--- a/Alc/backends/winmm.c
+++ b/Alc/backends/winmm.c
@@ -37,7 +37,7 @@
#define WAVE_FORMAT_IEEE_FLOAT 0x0003
#endif
-#define DEVNAME_TAIL " on OpenAL Soft"
+#define DEVNAME_HEAD "OpenAL Soft on "
static vector_al_string PlaybackDevices;
@@ -71,13 +71,12 @@ static void ProbePlaybackDevices(void)
ALuint count = 0;
while(1)
{
- al_string_copy_wcstr(&dname, WaveCaps.szPname);
- if(count == 0)
- al_string_append_cstr(&dname, DEVNAME_TAIL);
- else
+ al_string_copy_cstr(&dname, DEVNAME_HEAD);
+ al_string_append_wcstr(&dname, WaveCaps.szPname);
+ if(count != 0)
{
char str[64];
- snprintf(str, sizeof(str), " #%d"DEVNAME_TAIL, count+1);
+ snprintf(str, sizeof(str), " #%d", count+1);
al_string_append_cstr(&dname, str);
}
count++;
@@ -115,13 +114,12 @@ static void ProbeCaptureDevices(void)
ALuint count = 0;
while(1)
{
- al_string_copy_wcstr(&dname, WaveCaps.szPname);
- if(count == 0)
- al_string_append_cstr(&dname, DEVNAME_TAIL);
- else
+ al_string_copy_cstr(&dname, DEVNAME_HEAD);
+ al_string_append_wcstr(&dname, WaveCaps.szPname);
+ if(count != 0)
{
char str[64];
- snprintf(str, sizeof(str), " #%d"DEVNAME_TAIL, count+1);
+ snprintf(str, sizeof(str), " #%d", count+1);
al_string_append_cstr(&dname, str);
}
count++;
diff --git a/Alc/helpers.c b/Alc/helpers.c
index 7b9e58e..e9efddf 100644
--- a/Alc/helpers.c
+++ b/Alc/helpers.c
@@ -549,6 +549,13 @@ FILE *OpenDataFile(const char *fname, const char *subdir)
}
+static size_t strlenW(const WCHAR *str)
+{
+ const WCHAR *end = str;
+ while(*end) ++end;
+ return end-str;
+}
+
static const WCHAR *strchrW(const WCHAR *str, WCHAR ch)
{
for(;*str != 0;++str)
@@ -570,9 +577,27 @@ static const WCHAR *strrchrW(const WCHAR *str, WCHAR ch)
return ret;
}
+static const WCHAR *strstrW(const WCHAR *haystack, const WCHAR *needle)
+{
+ size_t len = strlenW(needle);
+ while(*haystack != 0)
+ {
+ if(CompareStringW(GetThreadLocale(), NORM_IGNORECASE,
+ haystack, len, needle, len) == CSTR_EQUAL)
+ return haystack;
+
+ do {
+ ++haystack;
+ } while(((*haystack)&0xC000) == 0x8000);
+ }
+ return NULL;
+}
+
+
/* Compares the filename in the find data with the match string. The match
* string may contain the "%r" marker to signifiy a sample rate (really any
- * positive integer), or "%%" to signify a single '%'.
+ * positive integer), "%%" to signify a single '%', or "%s" for a (non-greedy)
+ * string.
*/
static int MatchFilter(const WCHAR *match, const WIN32_FIND_DATAW *fdata)
{
@@ -608,6 +633,40 @@ static int MatchFilter(const WCHAR *match, const WIN32_FIND_DATAW *fdata)
ret = l > 0;
++p;
}
+ else if(*p == 's')
+ {
+ const WCHAR *next = p+1;
+ if(*next != '\0' && *next != '%')
+ {
+ const WCHAR *next_p = strchrW(next, '%');
+ const WCHAR *m;
+
+ if(!next_p)
+ m = strstrW(name, next);
+ else
+ {
+ WCHAR *tmp = malloc((next_p - next + 1) * 2);
+ memcpy(tmp, next, (next_p - next) * 2);
+ tmp[next_p - next] = 0;
+
+ m = strstrW(name, tmp);
+
+ free(tmp);
+ }
+
+ ret = !!m;
+ if(ret)
+ {
+ size_t l;
+ if(next_p) l = next_p - next;
+ else l = strlenW(next);
+
+ name = m + l;
+ next += l;
+ }
+ }
+ p = next;
+ }
}
}
@@ -785,8 +844,17 @@ vector_al_string SearchDataFiles(const char *match, const char *subdir)
al_string path = AL_STRING_INIT_STATIC();
WCHAR *cwdbuf;
- /* Search the CWD. */
- if(!(cwdbuf=_wgetcwd(NULL, 0)))
+ /* Search the app-local directory. */
+ if((cwdbuf=_wgetenv(L"ALSOFT_LOCAL_PATH")) && *cwdbuf != '\0')
+ {
+ al_string_copy_wcstr(&path, cwdbuf);
+ if(is_slash(VECTOR_BACK(path)))
+ {
+ VECTOR_POP_BACK(path);
+ *VECTOR_ITER_END(path) = 0;
+ }
+ }
+ else if(!(cwdbuf=_wgetcwd(NULL, 0)))
al_string_copy_cstr(&path, ".");
else
{
@@ -798,6 +866,9 @@ vector_al_string SearchDataFiles(const char *match, const char *subdir)
}
free(cwdbuf);
}
+#define FIX_SLASH(i) do { if(*(i) == '/') *(i) = '\\'; } while(0)
+ VECTOR_FOR_EACH(char, path, FIX_SLASH);
+#undef FIX_SLASH
RecurseDirectorySearch(al_string_get_cstr(path), wmatch, &results);
/* Search the local and global data dirs. */
@@ -973,6 +1044,40 @@ static int MatchFilter(const struct dirent *dir)
if(ret) name = end;
++p;
}
+ else if(*p == 's')
+ {
+ const char *next = p+1;
+ if(*next != '\0' && *next != '%')
+ {
+ const char *next_p = strchr(next, '%');
+ const char *m;
+
+ if(!next_p)
+ m = strstr(name, next);
+ else
+ {
+ char *tmp = malloc(next_p - next + 1);
+ memcpy(tmp, next, next_p - next);
+ tmp[next_p - next] = 0;
+
+ m = strstr(name, tmp);
+
+ free(tmp);
+ }
+
+ ret = !!m;
+ if(ret)
+ {
+ size_t l;
+ if(next_p) l = next_p - next;
+ else l = strlen(next);
+
+ name = m + l;
+ next += l;
+ }
+ }
+ p = next;
+ }
}
}
@@ -1099,8 +1204,13 @@ vector_al_string SearchDataFiles(const char *match, const char *subdir)
const char *str, *next;
char cwdbuf[PATH_MAX];
- // Search CWD
- if(!getcwd(cwdbuf, sizeof(cwdbuf)))
+ /* Search the app-local directory. */
+ if((str=getenv("ALSOFT_LOCAL_PATH")) && *str != '\0')
+ {
+ strncpy(cwdbuf, str, sizeof(cwdbuf)-1);
+ cwdbuf[sizeof(cwdbuf)-1] = '\0';
+ }
+ else if(!getcwd(cwdbuf, sizeof(cwdbuf)))
strcpy(cwdbuf, ".");
RecurseDirectorySearch(cwdbuf, match, &results);
diff --git a/Alc/hrtf.c b/Alc/hrtf.c
index 71dd9d7..467232d 100644
--- a/Alc/hrtf.c
+++ b/Alc/hrtf.c
@@ -820,7 +820,7 @@ error:
vector_HrtfEntry EnumerateHrtf(const_al_string devname)
{
vector_HrtfEntry list = VECTOR_INIT_STATIC();
- const char *fnamelist = "default-%r.mhr";
+ const char *fnamelist = "%s.mhr";
ConfigValueStr(al_string_get_cstr(devname), NULL, "hrtf_tables", &fnamelist);
while(fnamelist && *fnamelist)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 9fe3e98..78059db 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -41,7 +41,9 @@ OPTION(ALSOFT_HRTF_DEFS "Install HRTF definition files" ON)
OPTION(ALSOFT_INSTALL "Install headers and libraries" ON)
-IF(WIN32)
+IF(NOT WIN32)
+ SET(LIBNAME openal)
+ELSE()
SET(LIBNAME OpenAL32)
ADD_DEFINITIONS("-D_WIN32 -D_WIN32_WINNT=0x0502")
@@ -60,23 +62,8 @@ IF(WIN32)
ENDIF()
ENDIF()
ENDIF()
-ELSE()
- SET(LIBNAME openal)
-
- # These are needed on non-Windows systems for extra features
- ADD_DEFINITIONS(-D_GNU_SOURCE=1 -D_POSIX_C_SOURCE=200809L -D_XOPEN_SOURCE=700)
- SET(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -D_GNU_SOURCE=1 -D_POSIX_C_SOURCE=200809L -D_XOPEN_SOURCE=700")
ENDIF()
-# Set defines for large file support
-CHECK_FILE_OFFSET_BITS()
-IF(_FILE_OFFSET_BITS)
- ADD_DEFINITIONS(-D_FILE_OFFSET_BITS=${_FILE_OFFSET_BITS})
- SET(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -D_FILE_OFFSET_BITS=${_FILE_OFFSET_BITS}")
-ENDIF()
-ADD_DEFINITIONS(-D_LARGEFILE_SOURCE -D_LARGE_FILES)
-SET(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -D_LARGEFILE_SOURCE -D_LARGE_FILES")
-
# QNX's gcc do not uses /usr/include and /usr/lib pathes by default
IF ("${CMAKE_C_PLATFORM_ID}" STREQUAL "QNX")
@@ -90,7 +77,7 @@ ENDIF()
SET(LIB_MAJOR_VERSION "1")
SET(LIB_MINOR_VERSION "17")
-SET(LIB_REVISION "0")
+SET(LIB_REVISION "1")
SET(LIB_VERSION "${LIB_MAJOR_VERSION}.${LIB_MINOR_VERSION}.${LIB_REVISION}")
SET(EXPORT_DECL "")
@@ -111,6 +98,29 @@ ELSE()
ENDIF()
ENDIF()
+# Check if _POSIX_C_SOURCE needs to be set for POSIX functions
+CHECK_SYMBOL_EXISTS(posix_memalign stdlib.h HAVE_POSIX_MEMALIGN_DEFAULT)
+IF(NOT HAVE_POSIX_MEMALIGN_DEFAULT)
+ SET(OLD_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS})
+ SET(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -D_POSIX_C_SOURCE=200809L")
+ CHECK_SYMBOL_EXISTS(posix_memalign stdlib.h HAVE_POSIX_MEMALIGN_POSIX)
+ IF(NOT HAVE_POSIX_MEMALIGN_POSIX)
+ SET(CMAKE_REQUIRED_FLAGS ${OLD_REQUIRED_FLAGS})
+ ELSE()
+ ADD_DEFINITIONS(-D_POSIX_C_SOURCE=200809L)
+ ENDIF()
+ UNSET(OLD_REQUIRED_FLAGS)
+ENDIF()
+
+# Set defines for large file support
+CHECK_FILE_OFFSET_BITS()
+IF(_FILE_OFFSET_BITS)
+ ADD_DEFINITIONS(-D_FILE_OFFSET_BITS=${_FILE_OFFSET_BITS})
+ SET(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -D_FILE_OFFSET_BITS=${_FILE_OFFSET_BITS}")
+ENDIF()
+ADD_DEFINITIONS(-D_LARGEFILE_SOURCE -D_LARGE_FILES)
+SET(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -D_LARGEFILE_SOURCE -D_LARGE_FILES")
+
# MSVC may need workarounds for C99 restrict and inline
IF(MSVC)
# TODO: Once we truly require C99, these restrict and inline checks should go
@@ -476,12 +486,12 @@ ENDIF()
# Check if we have Windows headers
CHECK_INCLUDE_FILE(windows.h HAVE_WINDOWS_H -D_WIN32_WINNT=0x0502)
IF(NOT HAVE_WINDOWS_H)
- CHECK_FUNCTION_EXISTS(gettimeofday HAVE_GETTIMEOFDAY)
+ CHECK_SYMBOL_EXISTS(gettimeofday sys/time.h HAVE_GETTIMEOFDAY)
IF(NOT HAVE_GETTIMEOFDAY)
MESSAGE(FATAL_ERROR "No timing function found!")
ENDIF()
- CHECK_FUNCTION_EXISTS(nanosleep HAVE_NANOSLEEP)
+ CHECK_SYMBOL_EXISTS(nanosleep time.h HAVE_NANOSLEEP)
IF(NOT HAVE_NANOSLEEP)
MESSAGE(FATAL_ERROR "No sleep function found!")
ENDIF()
@@ -924,7 +934,7 @@ IF(JACK_FOUND)
SET(HAVE_JACK 1)
SET(BACKENDS "${BACKENDS} JACK${IS_LINKED},")
SET(ALC_OBJS ${ALC_OBJS} Alc/backends/jack.c)
- ADD_BACKEND_LIBS(${PULSEAUDIO_LIBRARIES})
+ ADD_BACKEND_LIBS(${JACK_LIBRARIES})
IF(CMAKE_VERSION VERSION_LESS "2.8.8")
INCLUDE_DIRECTORIES(${JACK_INCLUDE_DIRS})
ENDIF()
@@ -1220,32 +1230,37 @@ IF(ALSOFT_EXAMPLES)
${SDL_SOUND_INCLUDE_DIR})
ADD_EXECUTABLE(alstream examples/alstream.c)
- TARGET_LINK_LIBRARIES(alstream ex-common ${SDL_SOUND_LIBRARIES} ${SDL2_LIBRARY} ${LIBNAME})
+ TARGET_LINK_LIBRARIES(alstream ex-common ${SDL_SOUND_LIBRARIES} ${SDL2_LIBRARY}
+ common ${LIBNAME})
SET_PROPERTY(TARGET alstream APPEND PROPERTY INCLUDE_DIRECTORIES ${SDL2_INCLUDE_DIR}
${SDL_SOUND_INCLUDE_DIR})
ADD_EXECUTABLE(alreverb examples/alreverb.c)
- TARGET_LINK_LIBRARIES(alreverb ex-common ${SDL_SOUND_LIBRARIES} ${SDL2_LIBRARY} ${LIBNAME})
+ TARGET_LINK_LIBRARIES(alreverb ex-common ${SDL_SOUND_LIBRARIES} ${SDL2_LIBRARY}
+ common ${LIBNAME})
SET_PROPERTY(TARGET alreverb APPEND PROPERTY INCLUDE_DIRECTORIES ${SDL2_INCLUDE_DIR}
${SDL_SOUND_INCLUDE_DIR})
ADD_EXECUTABLE(allatency examples/allatency.c)
- TARGET_LINK_LIBRARIES(allatency ex-common ${SDL_SOUND_LIBRARIES} ${SDL2_LIBRARY} ${LIBNAME})
+ TARGET_LINK_LIBRARIES(allatency ex-common ${SDL_SOUND_LIBRARIES} ${SDL2_LIBRARY}
+ common ${LIBNAME})
SET_PROPERTY(TARGET allatency APPEND PROPERTY INCLUDE_DIRECTORIES ${SDL2_INCLUDE_DIR}
${SDL_SOUND_INCLUDE_DIR})
ADD_EXECUTABLE(alloopback examples/alloopback.c)
- TARGET_LINK_LIBRARIES(alloopback ex-common ${SDL_SOUND_LIBRARIES} ${SDL2_LIBRARY} ${LIBNAME})
+ TARGET_LINK_LIBRARIES(alloopback ex-common ${SDL_SOUND_LIBRARIES} ${SDL2_LIBRARY}
+ common ${LIBNAME})
SET_PROPERTY(TARGET alloopback APPEND PROPERTY INCLUDE_DIRECTORIES ${SDL2_INCLUDE_DIR}
${SDL_SOUND_INCLUDE_DIR})
ADD_EXECUTABLE(alhrtf examples/alhrtf.c)
- TARGET_LINK_LIBRARIES(alhrtf ex-common ${SDL_SOUND_LIBRARIES} ${SDL2_LIBRARY} ${LIBNAME})
+ TARGET_LINK_LIBRARIES(alhrtf ex-common ${SDL_SOUND_LIBRARIES} ${SDL2_LIBRARY}
+ common ${LIBNAME})
SET_PROPERTY(TARGET alhrtf APPEND PROPERTY INCLUDE_DIRECTORIES ${SDL2_INCLUDE_DIR}
${SDL_SOUND_INCLUDE_DIR})
IF(ALSOFT_INSTALL)
- INSTALL(TARGETS alstream alreverb allatency alloopback
+ INSTALL(TARGETS alstream alreverb allatency alloopback alhrtf
RUNTIME DESTINATION bin
LIBRARY DESTINATION "lib${LIB_SUFFIX}"
ARCHIVE DESTINATION "lib${LIB_SUFFIX}"
diff --git a/ChangeLog b/ChangeLog
index 2f03725..a266164 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,19 @@
+openal-soft-1.17.1:
+
+ Fixed building with JACK and without PulseAudio.
+
+ Fixed building on FreeBSD.
+
+ Fixed the ALSA backend's allow-resampler option.
+
+ Fixed handling of inexact ALSA period counts.
+
+ Altered device naming scheme on Windows backends to better match other
+ drivers.
+
+ Updated the CoreAudio backend to use the AudioComponent API. This clears up
+ deprecation warnings for OSX 10.11, although requires OSX 10.6 or newer.
+
openal-soft-1.17.0:
Implemented a JACK playback backend.
diff --git a/alsoftrc.sample b/alsoftrc.sample
index eccc88b..039dba6 100644
--- a/alsoftrc.sample
+++ b/alsoftrc.sample
@@ -101,6 +101,7 @@
# format of the files are described in hrtf.txt. The filenames may contain
# these markers, which will be replaced as needed:
# %r - Device sampling rate
+# %s - Non-greedy string (up to the following matching characters)
# %% - Percent sign (%)
# The listed files are relative to system-dependant data directories. On
# Windows this is:
@@ -110,7 +111,7 @@
# $XDG_DATA_DIRS/openal/hrtf (defaults to /usr/local/share/openal/hrtf and
# /usr/share/openal/hrtf)
# An absolute path may also be specified, if the given file is elsewhere.
-#hrtf_tables = default-%r.mhr
+#hrtf_tables = %s.mhr
## cf_level:
# Sets the crossfeed level for stereo output. Valid values are:
diff --git a/examples/alhrtf.c b/examples/alhrtf.c
index 6dac530..b18a511 100644
--- a/examples/alhrtf.c
+++ b/examples/alhrtf.c
@@ -227,7 +227,7 @@ int main(int argc, char **argv)
angle = 0.0;
alSourcePlay(source);
do {
- Sleep(10);
+ al_nssleep(10000000);
/* Rotate the source around the listener by about 1/4 cycle per second.
* Only affects mono sounds.
diff --git a/examples/allatency.c b/examples/allatency.c
index deb13d3..afef43c 100644
--- a/examples/allatency.c
+++ b/examples/allatency.c
@@ -182,7 +182,7 @@ int main(int argc, char **argv)
/* Play the sound until it finishes. */
alSourcePlay(source);
do {
- Sleep(10);
+ al_nssleep(10000000);
alGetSourcei(source, AL_SOURCE_STATE, &state);
/* Get the source offset and latency. AL_SEC_OFFSET_LATENCY_SOFT will
diff --git a/examples/alloopback.c b/examples/alloopback.c
index 04c9281..c5dee36 100644
--- a/examples/alloopback.c
+++ b/examples/alloopback.c
@@ -216,7 +216,7 @@ int main(int argc, char *argv[])
/* Play the sound until it finishes. */
alSourcePlay(source);
do {
- Sleep(10);
+ al_nssleep(10000000);
alGetSourcei(source, AL_SOURCE_STATE, &state);
} while(alGetError() == AL_NO_ERROR && state == AL_PLAYING);
diff --git a/examples/alreverb.c b/examples/alreverb.c
index 420b1c5..7d2bb34 100644
--- a/examples/alreverb.c
+++ b/examples/alreverb.c
@@ -311,7 +311,7 @@ int main(int argc, char **argv)
/* Play the sound until it finishes. */
alSourcePlay(source);
do {
- Sleep(10);
+ al_nssleep(10000000);
alGetSourcei(source, AL_SOURCE_STATE, &state);
} while(alGetError() == AL_NO_ERROR && state == AL_PLAYING);
diff --git a/examples/alstream.c b/examples/alstream.c
index 2972d37..63478d6 100644
--- a/examples/alstream.c
+++ b/examples/alstream.c
@@ -318,7 +318,7 @@ int main(int argc, char **argv)
}
while(UpdatePlayer(player))
- Sleep(10);
+ al_nssleep(10000000);
/* All done with this file. Close it and go to the next */
ClosePlayerFile(player);
diff --git a/examples/altonegen.c b/examples/altonegen.c
index 6598052..74a04ee 100644
--- a/examples/altonegen.c
+++ b/examples/altonegen.c
@@ -246,7 +246,7 @@ int main(int argc, char *argv[])
alSourcePlay(source);
do {
ALint pos;
- Sleep(10);
+ al_nssleep(10000000);
alGetSourcei(source, AL_SAMPLE_OFFSET, &pos);
alGetSourcei(source, AL_SOURCE_STATE, &state);
if(pos < last_pos && state == AL_PLAYING)
diff --git a/examples/common/alhelpers.h b/examples/common/alhelpers.h
index 62ed5be..1b4d2fb 100644
--- a/examples/common/alhelpers.h
+++ b/examples/common/alhelpers.h
@@ -1,18 +1,12 @@
#ifndef ALHELPERS_H
#define ALHELPERS_H
-#ifndef _WIN32
-#include <unistd.h>
-#define Sleep(x) usleep((x)*1000)
-#else
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
-#endif
-
#include "AL/alc.h"
#include "AL/al.h"
#include "AL/alext.h"
+#include "threads.h"
+
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
diff --git a/utils/alsoft-config/mainwindow.ui b/utils/alsoft-config/mainwindow.ui
index 78564ad..ab575fe 100644
--- a/utils/alsoft-config/mainwindow.ui
+++ b/utils/alsoft-config/mainwindow.ui
@@ -224,6 +224,7 @@ to stereo output.</string>
are used in place of the default sets. The filenames may
contain these markers, which will be replaced as needed:
%r - Device sampling rate
+%s - Non-greedy string (up to the following matching characters)
%% - Percent sign (%)</string>
</property>
<property name="dragEnabled">
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/openal-soft.git
More information about the Pkg-games-commits
mailing list