summaryrefslogtreecommitdiff
path: root/Source/Core/AudioCommon/OpenALStream.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Core/AudioCommon/OpenALStream.cpp')
-rw-r--r--Source/Core/AudioCommon/OpenALStream.cpp76
1 files changed, 50 insertions, 26 deletions
diff --git a/Source/Core/AudioCommon/OpenALStream.cpp b/Source/Core/AudioCommon/OpenALStream.cpp
index 56cd2bf61e..8faef12da2 100644
--- a/Source/Core/AudioCommon/OpenALStream.cpp
+++ b/Source/Core/AudioCommon/OpenALStream.cpp
@@ -127,6 +127,42 @@ void OpenALStream::Clear(bool mute)
}
}
+static ALenum CheckALError(const char* desc)
+{
+ ALenum err = alGetError();
+
+ if (err != AL_NO_ERROR)
+ {
+ std::string type;
+
+ switch (err)
+ {
+ case AL_INVALID_NAME:
+ type = "AL_INVALID_NAME";
+ break;
+ case AL_INVALID_ENUM:
+ type = "AL_INVALID_ENUM";
+ break;
+ case AL_INVALID_VALUE:
+ type = "AL_INVALID_VALUE";
+ break;
+ case AL_INVALID_OPERATION:
+ type = "AL_INVALID_OPERATION";
+ break;
+ case AL_OUT_OF_MEMORY:
+ type = "AL_OUT_OF_MEMORY";
+ break;
+ default:
+ type = "UNKNOWN_ERROR";
+ break;
+ }
+
+ ERROR_LOG(AUDIO, "Error %s: %08x %s", desc, err, type.c_str());
+ }
+
+ return err;
+}
+
void OpenALStream::SoundLoop()
{
Common::SetCurrentThreadName("Audio thread - openal");
@@ -154,10 +190,16 @@ void OpenALStream::SoundLoop()
if (strstr(alGetString(AL_RENDERER), "X-Fi"))
float32_capable = false;
+ // Clear error state before querying or else we get false positives.
+ ALenum err = alGetError();
+
// Generate some AL Buffers for streaming
alGenBuffers(numBuffers, (ALuint*)uiBuffers);
+ err = CheckALError("generating buffers");
+
// Generate a Source to playback the Buffers
alGenSources(1, &uiSource);
+ err = CheckALError("generating sources");
// Set the default sound volume as saved in the config file.
alSourcef(uiSource, AL_GAIN, fVolume);
@@ -194,11 +236,8 @@ void OpenALStream::SoundLoop()
{
ALuint unqueuedBufferIds[OAL_MAX_BUFFERS];
alSourceUnqueueBuffers(uiSource, numBuffersProcessed, unqueuedBufferIds);
- ALenum err = alGetError();
- if (err != 0)
- {
- ERROR_LOG(AUDIO, "Error unqueuing buffers: %08x", err);
- }
+ err = CheckALError("unqueuing buffers");
+
numBuffersQueued -= numBuffersProcessed;
}
@@ -277,7 +316,7 @@ void OpenALStream::SoundLoop()
nSamples * FRAME_SURROUND_SHORT, ulFrequency);
}
- ALenum err = alGetError();
+ err = CheckALError("buffering data");
if (err == AL_INVALID_ENUM)
{
// 5.1 is not supported by the host, fallback to stereo
@@ -285,27 +324,19 @@ void OpenALStream::SoundLoop()
"Unable to set 5.1 surround mode. Updating OpenAL Soft might fix this issue.");
surround_capable = false;
}
- else if (err != 0)
- {
- ERROR_LOG(AUDIO, "Error occurred while buffering data: %08x", err);
- }
}
-
else
{
if (float32_capable)
{
alBufferData(uiBuffers[nextBuffer], AL_FORMAT_STEREO_FLOAT32, sampleBuffer,
nSamples * FRAME_STEREO_FLOAT, ulFrequency);
- ALenum err = alGetError();
+
+ err = CheckALError("buffering float32 data");
if (err == AL_INVALID_ENUM)
{
float32_capable = false;
}
- else if (err != 0)
- {
- ERROR_LOG(AUDIO, "Error occurred while buffering float32 data: %08x", err);
- }
}
else
{
@@ -320,11 +351,8 @@ void OpenALStream::SoundLoop()
}
alSourceQueueBuffers(uiSource, 1, &uiBuffers[nextBuffer]);
- ALenum err = alGetError();
- if (err != 0)
- {
- ERROR_LOG(AUDIO, "Error queuing buffers: %08x", err);
- }
+ err = CheckALError("queuing buffers");
+
numBuffersQueued++;
nextBuffer = (nextBuffer + 1) % numBuffers;
@@ -333,11 +361,7 @@ void OpenALStream::SoundLoop()
{
// Buffer underrun occurred, resume playback
alSourcePlay(uiSource);
- err = alGetError();
- if (err != 0)
- {
- ERROR_LOG(AUDIO, "Error occurred resuming playback: %08x", err);
- }
+ err = CheckALError("occurred resuming playback");
}
}
}