mirror of
https://github.com/mauiaaron/apple2.git
synced 2024-12-29 19:30:46 +00:00
Refactor : style and API cleanups
This commit is contained in:
parent
b5ebec1939
commit
7b0c5be7c8
@ -73,11 +73,9 @@ static long OpenALDestroySoundBuffer(INOUT AudioBuffer_s **soundbuf_struct);
|
|||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// uthash of OpenAL buffers
|
// uthash of OpenAL buffers
|
||||||
|
|
||||||
static ALPlayBuf *PlaylistEnqueue(ALVoice *voice, ALuint bytes)
|
static ALPlayBuf *PlaylistEnqueue(ALVoice *voice, ALuint bytes) {
|
||||||
{
|
|
||||||
ALPlayBuf *node = voice->avail_buffers;
|
ALPlayBuf *node = voice->avail_buffers;
|
||||||
if (node == NULL)
|
if (node == NULL) {
|
||||||
{
|
|
||||||
ERRLOG("OOPS, sound playback overflow!");
|
ERRLOG("OOPS, sound playback overflow!");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@ -85,8 +83,7 @@ static ALPlayBuf *PlaylistEnqueue(ALVoice *voice, ALuint bytes)
|
|||||||
|
|
||||||
ALPlayBuf *node2 = NULL;
|
ALPlayBuf *node2 = NULL;
|
||||||
HASH_FIND_INT(voice->queued_buffers, &node->bufid, node2);
|
HASH_FIND_INT(voice->queued_buffers, &node->bufid, node2);
|
||||||
if (node2 != NULL)
|
if (node2 != NULL) {
|
||||||
{
|
|
||||||
ERRLOG("OOPS, confused ... ALPlayBuf already added!");
|
ERRLOG("OOPS, confused ... ALPlayBuf already added!");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@ -106,8 +103,7 @@ static ALPlayBuf *PlaylistEnqueue(ALVoice *voice, ALuint bytes)
|
|||||||
ALPlayBuf *tmp = voice->queued_buffers;
|
ALPlayBuf *tmp = voice->queued_buffers;
|
||||||
unsigned int count = HASH_COUNT(voice->queued_buffers);
|
unsigned int count = HASH_COUNT(voice->queued_buffers);
|
||||||
LOG("\t(numqueued: %d)", count);
|
LOG("\t(numqueued: %d)", count);
|
||||||
for (unsigned int i = 0; i < count; i++, tmp = tmp->hh.next)
|
for (unsigned int i = 0; i < count; i++, tmp = tmp->hh.next) {
|
||||||
{
|
|
||||||
LOG("\t(bufid : %u)", tmp->bufid);
|
LOG("\t(bufid : %u)", tmp->bufid);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -115,15 +111,13 @@ static ALPlayBuf *PlaylistEnqueue(ALVoice *voice, ALuint bytes)
|
|||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
|
|
||||||
static ALPlayBuf *PlaylistGet(ALVoice *voice, ALuint bufid)
|
static ALPlayBuf *PlaylistGet(ALVoice *voice, ALuint bufid) {
|
||||||
{
|
|
||||||
ALPlayBuf *node = NULL;
|
ALPlayBuf *node = NULL;
|
||||||
HASH_FIND_INT(voice->queued_buffers, &bufid, node);
|
HASH_FIND_INT(voice->queued_buffers, &bufid, node);
|
||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void PlaylistDequeue(ALVoice *voice, ALPlayBuf *node)
|
static void PlaylistDequeue(ALVoice *voice, ALPlayBuf *node) {
|
||||||
{
|
|
||||||
//LOG("Dequeing OpenAL buffer %u", node->bufid);
|
//LOG("Dequeing OpenAL buffer %u", node->bufid);
|
||||||
|
|
||||||
// remove from hash / place on list
|
// remove from hash / place on list
|
||||||
@ -139,8 +133,7 @@ static void PlaylistDequeue(ALVoice *voice, ALPlayBuf *node)
|
|||||||
ALPlayBuf *tmp = voice->queued_buffers;
|
ALPlayBuf *tmp = voice->queued_buffers;
|
||||||
unsigned int count = HASH_COUNT(voice->queued_buffers);
|
unsigned int count = HASH_COUNT(voice->queued_buffers);
|
||||||
LOG("\t(numqueued: %d)", count);
|
LOG("\t(numqueued: %d)", count);
|
||||||
for (unsigned int i = 0; i < count; i++, tmp = tmp->hh.next)
|
for (unsigned int i = 0; i < count; i++, tmp = tmp->hh.next) {
|
||||||
{
|
|
||||||
LOG("\t(bufid : %u)", tmp->bufid);
|
LOG("\t(bufid : %u)", tmp->bufid);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -148,8 +141,7 @@ static void PlaylistDequeue(ALVoice *voice, ALPlayBuf *node)
|
|||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
static long openal_systemSetup(INOUT AudioContext_s **audio_context)
|
static long openal_systemSetup(INOUT AudioContext_s **audio_context) {
|
||||||
{
|
|
||||||
assert(*audio_context == NULL);
|
assert(*audio_context == NULL);
|
||||||
assert(voices == NULL);
|
assert(voices == NULL);
|
||||||
|
|
||||||
@ -157,23 +149,18 @@ static long openal_systemSetup(INOUT AudioContext_s **audio_context)
|
|||||||
|
|
||||||
do {
|
do {
|
||||||
|
|
||||||
if ((ctx = InitAL()) == NULL)
|
if ((ctx = InitAL()) == NULL) {
|
||||||
{
|
|
||||||
ERRLOG("OOPS, OpenAL initialize failed");
|
ERRLOG("OOPS, OpenAL initialize failed");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (alIsExtensionPresent("AL_SOFT_buffer_samples"))
|
if (alIsExtensionPresent("AL_SOFT_buffer_samples")) {
|
||||||
{
|
|
||||||
LOG("AL_SOFT_buffer_samples supported, good!");
|
LOG("AL_SOFT_buffer_samples supported, good!");
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
LOG("WARNING - AL_SOFT_buffer_samples extension not supported... Proceeding anyway...");
|
LOG("WARNING - AL_SOFT_buffer_samples extension not supported... Proceeding anyway...");
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((*audio_context = malloc(sizeof(AudioContext_s))) == NULL)
|
if ((*audio_context = malloc(sizeof(AudioContext_s))) == NULL) {
|
||||||
{
|
|
||||||
ERRLOG("OOPS, Not enough memory");
|
ERRLOG("OOPS, Not enough memory");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -186,16 +173,14 @@ static long openal_systemSetup(INOUT AudioContext_s **audio_context)
|
|||||||
} while(0);
|
} while(0);
|
||||||
|
|
||||||
// ERRQUIT
|
// ERRQUIT
|
||||||
if (*audio_context)
|
if (*audio_context) {
|
||||||
{
|
|
||||||
FREE(*audio_context);
|
FREE(*audio_context);
|
||||||
}
|
}
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static long openal_systemShutdown(INOUT AudioContext_s **audio_context)
|
static long openal_systemShutdown(INOUT AudioContext_s **audio_context) {
|
||||||
{
|
|
||||||
assert(*audio_context != NULL);
|
assert(*audio_context != NULL);
|
||||||
|
|
||||||
ALCcontext *ctx = (ALCcontext*) (*audio_context)->_internal;
|
ALCcontext *ctx = (ALCcontext*) (*audio_context)->_internal;
|
||||||
@ -243,18 +228,17 @@ static long openal_systemResume(void) {
|
|||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
/* Destroys a voice object, deleting the source and buffers. No error handling
|
/*
|
||||||
* since these calls shouldn't fail with a properly-made voice object. */
|
* Destroys a voice object, deleting the source and buffers. Minimal error
|
||||||
static void DeleteVoice(ALVoice *voice)
|
* handling since these calls shouldn't fail with a properly-made voice object.
|
||||||
{
|
*/
|
||||||
|
static void DeleteVoice(ALVoice *voice) {
|
||||||
alDeleteSources(1, &voice->source);
|
alDeleteSources(1, &voice->source);
|
||||||
if (alGetError() != AL_NO_ERROR)
|
if (alGetError() != AL_NO_ERROR) {
|
||||||
{
|
|
||||||
ERRLOG("OOPS, Failed to delete source");
|
ERRLOG("OOPS, Failed to delete source");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (voice->data)
|
if (voice->data) {
|
||||||
{
|
|
||||||
FREE(voice->data);
|
FREE(voice->data);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -264,12 +248,10 @@ static void DeleteVoice(ALVoice *voice)
|
|||||||
PlaylistDequeue(voice, node);
|
PlaylistDequeue(voice, node);
|
||||||
}
|
}
|
||||||
|
|
||||||
while (voice->avail_buffers)
|
while (voice->avail_buffers) {
|
||||||
{
|
|
||||||
node = voice->avail_buffers;
|
node = voice->avail_buffers;
|
||||||
alDeleteBuffers(1, &node->bufid);
|
alDeleteBuffers(1, &node->bufid);
|
||||||
if (alGetError() != AL_NO_ERROR)
|
if (alGetError() != AL_NO_ERROR) {
|
||||||
{
|
|
||||||
ERRLOG("OOPS, Failed to delete object IDs");
|
ERRLOG("OOPS, Failed to delete object IDs");
|
||||||
}
|
}
|
||||||
voice->avail_buffers = node->_avail_next;
|
voice->avail_buffers = node->_avail_next;
|
||||||
@ -280,72 +262,64 @@ static void DeleteVoice(ALVoice *voice)
|
|||||||
FREE(voice);
|
FREE(voice);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Creates a new voice object, and allocates the needed OpenAL source and
|
/*
|
||||||
|
* Creates a new voice object, and allocates the needed OpenAL source and
|
||||||
* buffer objects. Error checking is simplified for the purposes of this
|
* buffer objects. Error checking is simplified for the purposes of this
|
||||||
* example, and will cause an abort if needed. */
|
* example, and will cause an abort if needed.
|
||||||
static ALVoice *NewVoice(const AudioParams_s *params)
|
*/
|
||||||
{
|
static ALVoice *NewVoice(const AudioParams_s *params) {
|
||||||
ALVoice *voice = NULL;
|
ALVoice *voice = NULL;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
voice = calloc(1, sizeof(*voice));
|
voice = calloc(1, sizeof(*voice));
|
||||||
if (voice == NULL)
|
if (voice == NULL) {
|
||||||
{
|
|
||||||
ERRLOG("OOPS, Out of memory!");
|
ERRLOG("OOPS, Out of memory!");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
ALuint buffers[OPENAL_NUM_BUFFERS];
|
ALuint buffers[OPENAL_NUM_BUFFERS];
|
||||||
alGenBuffers(OPENAL_NUM_BUFFERS, buffers);
|
alGenBuffers(OPENAL_NUM_BUFFERS, buffers);
|
||||||
if (alGetError() != AL_NO_ERROR)
|
if (alGetError() != AL_NO_ERROR) {
|
||||||
{
|
|
||||||
ERRLOG("OOPS, Could not create buffers");
|
ERRLOG("OOPS, Could not create buffers");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
alGenSources(1, &voice->source);
|
alGenSources(1, &voice->source);
|
||||||
if (alGetError() != AL_NO_ERROR)
|
if (alGetError() != AL_NO_ERROR) {
|
||||||
{
|
|
||||||
ERRLOG("OOPS, Could not create source");
|
ERRLOG("OOPS, Could not create source");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set parameters so mono sources play out the front-center speaker and won't distance attenuate.
|
// Set parameters so mono sources play out the front-center speaker and won't distance attenuate.
|
||||||
alSource3i(voice->source, AL_POSITION, 0, 0, -1);
|
alSource3i(voice->source, AL_POSITION, 0, 0, -1);
|
||||||
if (alGetError() != AL_NO_ERROR)
|
if (alGetError() != AL_NO_ERROR) {
|
||||||
{
|
|
||||||
ERRLOG("OOPS, Could not set AL_POSITION source parameter");
|
ERRLOG("OOPS, Could not set AL_POSITION source parameter");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
alSourcei(voice->source, AL_SOURCE_RELATIVE, AL_TRUE);
|
alSourcei(voice->source, AL_SOURCE_RELATIVE, AL_TRUE);
|
||||||
if (alGetError() != AL_NO_ERROR)
|
if (alGetError() != AL_NO_ERROR) {
|
||||||
{
|
|
||||||
ERRLOG("OOPS, Could not set AL_SOURCE_RELATIVE source parameter");
|
ERRLOG("OOPS, Could not set AL_SOURCE_RELATIVE source parameter");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
alSourcei(voice->source, AL_ROLLOFF_FACTOR, 0);
|
alSourcei(voice->source, AL_ROLLOFF_FACTOR, 0);
|
||||||
if (alGetError() != AL_NO_ERROR)
|
if (alGetError() != AL_NO_ERROR) {
|
||||||
{
|
|
||||||
ERRLOG("OOPS, Could not set AL_ROLLOFF_FACTOR source parameter");
|
ERRLOG("OOPS, Could not set AL_ROLLOFF_FACTOR source parameter");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
alSourcei(voice->source, AL_STREAMING, AL_TRUE);
|
alSourcei(voice->source, AL_STREAMING, AL_TRUE);
|
||||||
if (alGetError() != AL_NO_ERROR)
|
if (alGetError() != AL_NO_ERROR) {
|
||||||
{
|
|
||||||
ERRLOG("OOPS, Could not set AL_STREAMING source parameter");
|
ERRLOG("OOPS, Could not set AL_STREAMING source parameter");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
voice->avail_buffers = NULL;
|
voice->avail_buffers = NULL;
|
||||||
for (unsigned int i=0; i<OPENAL_NUM_BUFFERS; i++)
|
for (unsigned int i=0; i<OPENAL_NUM_BUFFERS; i++) {
|
||||||
{
|
ALPlayBuf immutableNode = { /*const*/.bufid = buffers[i] };
|
||||||
ALPlayBuf immutableNode = { .bufid = buffers[i] };
|
|
||||||
ALPlayBuf *node = calloc(1, sizeof(ALPlayBuf));
|
ALPlayBuf *node = calloc(1, sizeof(ALPlayBuf));
|
||||||
if (!node)
|
if (!node) {
|
||||||
{
|
|
||||||
ERRLOG("OOPS, Not enough memory");
|
ERRLOG("OOPS, Not enough memory");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -357,20 +331,16 @@ static ALVoice *NewVoice(const AudioParams_s *params)
|
|||||||
voice->rate = (ALuint)params->nSamplesPerSec;
|
voice->rate = (ALuint)params->nSamplesPerSec;
|
||||||
|
|
||||||
// Emulator supports only mono and stereo
|
// Emulator supports only mono and stereo
|
||||||
if (params->nChannels == 2)
|
if (params->nChannels == 2) {
|
||||||
{
|
|
||||||
voice->format = AL_FORMAT_STEREO16;
|
voice->format = AL_FORMAT_STEREO16;
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
voice->format = AL_FORMAT_MONO16;
|
voice->format = AL_FORMAT_MONO16;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Allocate enough space for the temp buffer, given the format */
|
/* Allocate enough space for the temp buffer, given the format */
|
||||||
voice->buffersize = (ALsizei)params->dwBufferBytes;
|
voice->buffersize = (ALsizei)params->dwBufferBytes;
|
||||||
voice->data = malloc(voice->buffersize);
|
voice->data = malloc(voice->buffersize);
|
||||||
if (voice->data == NULL)
|
if (voice->data == NULL) {
|
||||||
{
|
|
||||||
ERRLOG("OOPS, Error allocating %d bytes", voice->buffersize);
|
ERRLOG("OOPS, Error allocating %d bytes", voice->buffersize);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -384,8 +354,7 @@ static ALVoice *NewVoice(const AudioParams_s *params)
|
|||||||
} while(0);
|
} while(0);
|
||||||
|
|
||||||
// ERR
|
// ERR
|
||||||
if (voice)
|
if (voice) {
|
||||||
{
|
|
||||||
DeleteVoice(voice);
|
DeleteVoice(voice);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -395,11 +364,11 @@ static ALVoice *NewVoice(const AudioParams_s *params)
|
|||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
static long _ALProcessPlayBuffers(ALVoice *voice, ALuint *bytes_queued) {
|
static long _ALProcessPlayBuffers(ALVoice *voice, ALuint *bytes_queued) {
|
||||||
ALint processed = 0;
|
|
||||||
long err = 0;
|
long err = 0;
|
||||||
*bytes_queued = 0;
|
*bytes_queued = 0;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
|
ALint processed = 0;
|
||||||
alGetSourcei(voice->source, AL_BUFFERS_PROCESSED, &processed);
|
alGetSourcei(voice->source, AL_BUFFERS_PROCESSED, &processed);
|
||||||
if ((err = alGetError()) != AL_NO_ERROR) {
|
if ((err = alGetError()) != AL_NO_ERROR) {
|
||||||
ERRLOG("OOPS, error in checking processed buffers : 0x%08lx", err);
|
ERRLOG("OOPS, error in checking processed buffers : 0x%08lx", err);
|
||||||
@ -457,12 +426,12 @@ static long _ALProcessPlayBuffers(ALVoice *voice, ALuint *bytes_queued) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// returns queued+working sound buffer size in bytes
|
// returns queued+working sound buffer size in bytes
|
||||||
static long ALGetPosition(AudioBuffer_s *_this, unsigned long *bytes_queued) {
|
static long ALGetPosition(AudioBuffer_s *_this, OUTPARM unsigned long *bytes_queued) {
|
||||||
|
*bytes_queued = 0;
|
||||||
long err = 0;
|
long err = 0;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
ALVoice *voice = (ALVoice*)_this->_internal;
|
ALVoice *voice = (ALVoice*)_this->_internal;
|
||||||
*bytes_queued = 0;
|
|
||||||
|
|
||||||
ALuint queued = 0;
|
ALuint queued = 0;
|
||||||
long err = _ALProcessPlayBuffers(voice, &queued);
|
long err = _ALProcessPlayBuffers(voice, &queued);
|
||||||
@ -481,7 +450,9 @@ static long ALGetPosition(AudioBuffer_s *_this, unsigned long *bytes_queued) {
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
static long ALLockBuffer(AudioBuffer_s *_this, unsigned long write_bytes, INOUT int16_t **audio_ptr, INOUT unsigned long *audio_bytes) {
|
static long ALLockBuffer(AudioBuffer_s *_this, unsigned long write_bytes, INOUT int16_t **audio_ptr, OUTPARM unsigned long *audio_bytes) {
|
||||||
|
*audio_bytes = 0;
|
||||||
|
*audio_ptr = NULL;
|
||||||
long err = 0;
|
long err = 0;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
@ -618,7 +589,8 @@ static long ALReplay(AudioBuffer_s *_this) {
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
static long ALGetStatus(AudioBuffer_s *_this, unsigned long *status) {
|
static long ALGetStatus(AudioBuffer_s *_this, OUTPARM unsigned long *status) {
|
||||||
|
*status = -1;
|
||||||
long err = 0;
|
long err = 0;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
@ -642,8 +614,7 @@ static long ALGetStatus(AudioBuffer_s *_this, unsigned long *status) {
|
|||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
static long OpenALCreateSoundBuffer(const AudioParams_s *params, INOUT AudioBuffer_s **soundbuf_struct, const AudioContext_s *audio_context)
|
static long OpenALCreateSoundBuffer(const AudioParams_s *params, INOUT AudioBuffer_s **soundbuf_struct, const AudioContext_s *audio_context) {
|
||||||
{
|
|
||||||
LOG("OpenALCreateSoundBuffer ...");
|
LOG("OpenALCreateSoundBuffer ...");
|
||||||
assert(*soundbuf_struct == NULL);
|
assert(*soundbuf_struct == NULL);
|
||||||
|
|
||||||
@ -654,16 +625,14 @@ static long OpenALCreateSoundBuffer(const AudioParams_s *params, INOUT AudioBuff
|
|||||||
|
|
||||||
do {
|
do {
|
||||||
|
|
||||||
if ((voice = NewVoice(params)) == NULL)
|
if ((voice = NewVoice(params)) == NULL) {
|
||||||
{
|
|
||||||
ERRLOG("OOPS, Cannot create new voice");
|
ERRLOG("OOPS, Cannot create new voice");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
ALVoices immutableNode = { .source = voice->source };
|
ALVoices immutableNode = { /*const*/.source = voice->source };
|
||||||
ALVoices *vnode = calloc(1, sizeof(ALVoices));
|
ALVoices *vnode = calloc(1, sizeof(ALVoices));
|
||||||
if (!vnode)
|
if (!vnode) {
|
||||||
{
|
|
||||||
ERRLOG("OOPS, Not enough memory");
|
ERRLOG("OOPS, Not enough memory");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -671,8 +640,7 @@ static long OpenALCreateSoundBuffer(const AudioParams_s *params, INOUT AudioBuff
|
|||||||
vnode->voice = voice;
|
vnode->voice = voice;
|
||||||
HASH_ADD_INT(voices, source, vnode);
|
HASH_ADD_INT(voices, source, vnode);
|
||||||
|
|
||||||
if ((*soundbuf_struct = malloc(sizeof(AudioBuffer_s))) == NULL)
|
if ((*soundbuf_struct = malloc(sizeof(AudioBuffer_s))) == NULL) {
|
||||||
{
|
|
||||||
ERRLOG("OOPS, Not enough memory");
|
ERRLOG("OOPS, Not enough memory");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -689,24 +657,21 @@ static long OpenALCreateSoundBuffer(const AudioParams_s *params, INOUT AudioBuff
|
|||||||
return 0;
|
return 0;
|
||||||
} while(0);
|
} while(0);
|
||||||
|
|
||||||
if (*soundbuf_struct)
|
if (*soundbuf_struct) {
|
||||||
{
|
|
||||||
OpenALDestroySoundBuffer(soundbuf_struct);
|
OpenALDestroySoundBuffer(soundbuf_struct);
|
||||||
}
|
} else if (voice) {
|
||||||
else if (voice)
|
|
||||||
{
|
|
||||||
DeleteVoice(voice);
|
DeleteVoice(voice);
|
||||||
}
|
}
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static long OpenALDestroySoundBuffer(INOUT AudioBuffer_s **soundbuf_struct)
|
static long OpenALDestroySoundBuffer(INOUT AudioBuffer_s **soundbuf_struct) {
|
||||||
{
|
|
||||||
if (!*soundbuf_struct) {
|
if (!*soundbuf_struct) {
|
||||||
// already dealloced
|
// already dealloced
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
LOG("OpenALDestroySoundBuffer ...");
|
LOG("OpenALDestroySoundBuffer ...");
|
||||||
ALVoice *voice = (ALVoice *)((*soundbuf_struct)->_internal);
|
ALVoice *voice = (ALVoice *)((*soundbuf_struct)->_internal);
|
||||||
ALint source = voice->source;
|
ALint source = voice->source;
|
||||||
@ -728,7 +693,7 @@ __attribute__((constructor(CTOR_PRIORITY_EARLY)))
|
|||||||
static void _init_openal(void) {
|
static void _init_openal(void) {
|
||||||
LOG("Initializing OpenAL sound system");
|
LOG("Initializing OpenAL sound system");
|
||||||
|
|
||||||
assert(audio_backend == NULL && "there can only be one!");
|
assert((audio_backend == NULL) && "there can only be one!");
|
||||||
|
|
||||||
openal_audio_backend.setup = &openal_systemSetup;
|
openal_audio_backend.setup = &openal_systemSetup;
|
||||||
openal_audio_backend.shutdown = &openal_systemShutdown;
|
openal_audio_backend.shutdown = &openal_systemShutdown;
|
||||||
|
@ -32,16 +32,16 @@ typedef struct AudioBuffer_s {
|
|||||||
PRIVATE void *_internal;
|
PRIVATE void *_internal;
|
||||||
|
|
||||||
// Get current number of queued bytes
|
// Get current number of queued bytes
|
||||||
long (*GetCurrentPosition)(struct AudioBuffer_s *_this, unsigned long *bytes_queued);
|
long (*GetCurrentPosition)(struct AudioBuffer_s *_this, OUTPARM unsigned long *bytes_queued);
|
||||||
|
|
||||||
// This method obtains a valid write pointer to the sound buffer's audio data
|
// This method obtains a valid write pointer to the sound buffer's audio data
|
||||||
long (*Lock)(struct AudioBuffer_s *_this, unsigned long write_bytes, INOUT int16_t **audio_ptr, INOUT unsigned long *audio_bytes);
|
long (*Lock)(struct AudioBuffer_s *_this, unsigned long write_bytes, INOUT int16_t **audio_ptr, OUTPARM unsigned long *audio_bytes);
|
||||||
|
|
||||||
// This method releases a locked sound buffer.
|
// This method releases a locked sound buffer.
|
||||||
long (*Unlock)(struct AudioBuffer_s *_this, unsigned long audio_bytes);
|
long (*Unlock)(struct AudioBuffer_s *_this, unsigned long audio_bytes);
|
||||||
|
|
||||||
// Get status (playing or not)
|
// Get status (playing or not)
|
||||||
long (*GetStatus)(struct AudioBuffer_s *_this, unsigned long *status);
|
long (*GetStatus)(struct AudioBuffer_s *_this, OUTPARM unsigned long *status);
|
||||||
|
|
||||||
// Mockingboard-specific buffer replay
|
// Mockingboard-specific buffer replay
|
||||||
long (*UnlockStaticBuffer)(struct AudioBuffer_s *_this, unsigned long audio_bytes);
|
long (*UnlockStaticBuffer)(struct AudioBuffer_s *_this, unsigned long audio_bytes);
|
||||||
|
Loading…
Reference in New Issue
Block a user