aboutsummaryrefslogtreecommitdiff
path: root/tests/freealut/src/alutUtil.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/freealut/src/alutUtil.c')
-rw-r--r--tests/freealut/src/alutUtil.c141
1 files changed, 141 insertions, 0 deletions
diff --git a/tests/freealut/src/alutUtil.c b/tests/freealut/src/alutUtil.c
new file mode 100644
index 00000000..09be66e5
--- /dev/null
+++ b/tests/freealut/src/alutUtil.c
@@ -0,0 +1,141 @@
+#include "alutInternal.h"
+
+#if HAVE_NANOSLEEP && HAVE_TIME_H
+#include <time.h>
+#include <errno.h>
+#elif HAVE_USLEEP && HAVE_UNISTD_H
+#include <unistd.h>
+#elif HAVE_SLEEP && HAVE_WINDOWS_H
+#include <windows.h>
+#else
+#error No way to sleep on this platform
+#endif
+
+ALboolean alutSleep(ALfloat duration)
+{
+ if (duration < 0)
+ {
+ _alutSetError(ALUT_ERROR_INVALID_VALUE);
+ return AL_FALSE;
+ }
+
+ {
+ ALuint seconds = (ALuint) duration;
+ ALfloat rest = duration - (ALfloat) seconds;
+
+#if HAVE_NANOSLEEP && HAVE_TIME_H
+
+ ALuint microSecs = (ALuint) (rest * 1000000);
+ struct timespec t, remainingTime;
+
+ t.tv_sec = (time_t) seconds;
+ t.tv_nsec = ((long)microSecs) * 1000;
+
+ /* At least the interaction of nanosleep and signals is specified! */
+ while (nanosleep(&t, &remainingTime) < 0)
+ {
+ if (errno != EINTR)
+ {
+ return AL_FALSE;
+ }
+ /* If we received a signal, let's try again with the remaining time. */
+ t.tv_sec = remainingTime.tv_sec;
+ t.tv_nsec = remainingTime.tv_nsec;
+ }
+
+#elif HAVE_USLEEP && HAVE_UNISTD_H
+
+ while (seconds > 0)
+ {
+ usleep(1000000);
+ seconds--;
+ }
+ usleep((unsigned int)(rest * 1000000));
+
+#elif HAVE_SLEEP && HAVE_WINDOWS_H
+
+ while (seconds > 0)
+ {
+ Sleep(1000);
+ seconds--;
+ }
+ Sleep((DWORD) (rest * 1000));
+
+#endif
+
+ }
+ return AL_TRUE;
+}
+
+ALvoid *_alutMalloc(size_t size)
+{
+ ALvoid *ptr = malloc(size == 0 ? 1 : size);
+
+ if (ptr == NULL)
+ {
+ _alutSetError(ALUT_ERROR_OUT_OF_MEMORY);
+ }
+ return ptr;
+}
+
+ALboolean _alutFormatConstruct(ALint numChannels, ALint bitsPerSample, ALenum * format)
+{
+ switch (numChannels)
+ {
+ case 1:
+ switch (bitsPerSample)
+ {
+ case 8:
+ *format = AL_FORMAT_MONO8;
+ return AL_TRUE;
+ case 16:
+ *format = AL_FORMAT_MONO16;
+ return AL_TRUE;
+ }
+ break;
+ case 2:
+ switch (bitsPerSample)
+ {
+ case 8:
+ *format = AL_FORMAT_STEREO8;
+ return AL_TRUE;
+ case 16:
+ *format = AL_FORMAT_STEREO16;
+ return AL_TRUE;
+ }
+ break;
+ }
+ return AL_FALSE;
+}
+
+ALboolean _alutFormatGetNumChannels(ALenum format, ALint * numChannels)
+{
+ switch (format)
+ {
+ case AL_FORMAT_MONO8:
+ case AL_FORMAT_MONO16:
+ *numChannels = 1;
+ return AL_TRUE;
+ case AL_FORMAT_STEREO8:
+ case AL_FORMAT_STEREO16:
+ *numChannels = 2;
+ return AL_TRUE;
+ }
+ return AL_FALSE;
+}
+
+ALboolean _alutFormatGetBitsPerSample(ALenum format, ALint * bitsPerSample)
+{
+ switch (format)
+ {
+ case AL_FORMAT_MONO8:
+ case AL_FORMAT_STEREO8:
+ *bitsPerSample = 8;
+ return AL_TRUE;
+ case AL_FORMAT_MONO16:
+ case AL_FORMAT_STEREO16:
+ *bitsPerSample = 16;
+ return AL_TRUE;
+ }
+ return AL_FALSE;
+}