Improved AudioThread interface, added XAudio2 audio output

This commit is contained in:
Oil 2015-01-11 03:46:10 +04:00
parent e6e60795b7
commit b5c33ec26b
12 changed files with 289 additions and 70 deletions

View file

@ -15,7 +15,7 @@ static const ALenum g_audio_format = Ini.AudioConvertToU16.GetValue() ? AL_FORMA
void printAlError(ALenum err, const char* situation)
{
if(err != AL_NO_ERROR)
if (err != AL_NO_ERROR)
{
LOG_ERROR(HLE, "%s: OpenAL error 0x%04x", situation, err);
Emu.Pause();
@ -24,7 +24,7 @@ void printAlError(ALenum err, const char* situation)
void printAlcError(ALCenum err, const char* situation)
{
if(err != ALC_NO_ERROR)
if (err != ALC_NO_ERROR)
{
LOG_ERROR(HLE, "%s: OpenALC error 0x%04x", situation, err);
Emu.Pause();
@ -63,7 +63,7 @@ void OpenALThread::Play()
alGetSourcei(m_source, AL_SOURCE_STATE, &state);
checkForAlError("OpenALThread::Play -> alGetSourcei");
if(state != AL_PLAYING)
if (state != AL_PLAYING)
{
alSourcePlay(m_source);
checkForAlError("alSourcePlay");
@ -74,7 +74,7 @@ void OpenALThread::Close()
{
alSourceStop(m_source);
checkForAlError("alSourceStop");
if (alIsSource(m_source))
if (alIsSource(m_source))
alDeleteSources(1, &m_source);
alDeleteBuffers(g_al_buffers_count, m_buffers);
@ -87,7 +87,7 @@ void OpenALThread::Stop()
checkForAlError("alSourceStop");
}
void OpenALThread::Open(const void* src, ALsizei size)
void OpenALThread::Open(const void* src, int size)
{
alGenSources(1, &m_source);
checkForAlError("alGenSources");
@ -100,9 +100,10 @@ void OpenALThread::Open(const void* src, ALsizei size)
m_buffer_size = size;
for(uint i=0; i<g_al_buffers_count; ++i)
for (uint i = 0; i<g_al_buffers_count; ++i)
{
AddBlock(m_buffers[i], m_buffer_size, src);
alBufferData(m_buffers[i], g_audio_format, src, m_buffer_size, 48000);
checkForAlError("alBufferData");
}
alSourceQueueBuffers(m_source, g_al_buffers_count, m_buffers);
@ -110,7 +111,7 @@ void OpenALThread::Open(const void* src, ALsizei size)
Play();
}
void OpenALThread::AddData(const void* src, ALsizei size)
void OpenALThread::AddData(const void* src, int size)
{
const char* bsrc = (const char*)src;
ALuint buffer;
@ -118,16 +119,16 @@ void OpenALThread::AddData(const void* src, ALsizei size)
alGetSourcei(m_source, AL_BUFFERS_PROCESSED, &buffers_count);
checkForAlError("OpenALThread::AddData -> alGetSourcei");
while(size)
while (size)
{
if(buffers_count-- <= 0)
if (buffers_count-- <= 0)
{
Play();
alGetSourcei(m_source, AL_BUFFERS_PROCESSED, &buffers_count);
checkForAlError("OpenALThread::AddData(in loop) -> alGetSourcei");
continue;
}
@ -135,8 +136,9 @@ void OpenALThread::AddData(const void* src, ALsizei size)
checkForAlError("alSourceUnqueueBuffers");
int bsize = size < m_buffer_size ? size : m_buffer_size;
if (!AddBlock(buffer, bsize, bsrc))
LOG_ERROR(HLE, "OpenALThread::AddBlock: invalid block size: %d", bsize);
alBufferData(buffer, g_audio_format, bsrc, bsize, 48000);
checkForAlError("alBufferData");
alSourceQueueBuffers(m_source, 1, &buffer);
checkForAlError("alSourceQueueBuffers");
@ -146,14 +148,4 @@ void OpenALThread::AddData(const void* src, ALsizei size)
}
Play();
}
bool OpenALThread::AddBlock(const ALuint buffer_id, const ALsizei size, const void* src)
{
if (size < 1) return false;
alBufferData(buffer_id, g_audio_format, src, size, 48000);
checkForAlError("alBufferData");
return true;
}
}