void * _alutLoadMemoryFromInputStream (InputStream *stream, ALenum *format, ALsizei *size, ALfloat *frequency) { BufferData *bufferData; ALenum fmt; void *data; if (stream == NULL) { return NULL; } bufferData = loadFile (stream); if (bufferData == NULL) { _alutInputStreamDestroy (stream); return NULL; } _alutInputStreamDestroy (stream); if (!_alutGetFormat (bufferData, &fmt)) { _alutBufferDataDestroy (bufferData); return NULL; } if (size != NULL) { *size = (ALsizei) _alutBufferDataGetLength (bufferData); } if (format != NULL) { *format = fmt; } if (frequency != NULL) { *frequency = _alutBufferDataGetSampleFrequency (bufferData); } data = _alutBufferDataGetData (bufferData); _alutBufferDataDetachData (bufferData); _alutBufferDataDestroy (bufferData); return data; }
static ALboolean passBufferData (BufferData *bufferData, ALuint bid) { ALenum format; size_t size; ALfloat frequency; if (!_alutGetFormat (bufferData, &format)) { return AL_FALSE; } /* GCC is a bit picky about casting function calls, so we do it in two steps... */ size = _alutBufferDataGetLength (bufferData); frequency = _alutBufferDataGetSampleFrequency (bufferData); alBufferData (bid, format, _alutBufferDataGetData (bufferData), (ALsizei) size, (ALsizei) frequency); if (alGetError () != AL_NO_ERROR) { _alutSetError (ALUT_ERROR_BUFFER_DATA); return AL_FALSE; } return AL_TRUE; }