![]() System : Linux absol.cf 5.4.0-198-generic #218-Ubuntu SMP Fri Sep 27 20:18:53 UTC 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.33 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, Directory : /usr/share/emscripten/tests/freealut/src/ |
Upload File : |
#include "alutInternal.h" struct BufferData_struct { ALvoid *data; size_t length; ALint numChannels; ALint bitsPerSample; ALfloat sampleFrequency; }; BufferData *_alutBufferDataConstruct(ALvoid * data, size_t length, ALint numChannels, ALint bitsPerSample, ALfloat sampleFrequency) { BufferData *bufferData = (BufferData *) _alutMalloc(sizeof(BufferData)); if (bufferData == NULL) { return NULL; } bufferData->data = data; bufferData->length = length; bufferData->numChannels = numChannels; bufferData->bitsPerSample = bitsPerSample; bufferData->sampleFrequency = sampleFrequency; return bufferData; } ALboolean _alutBufferDataDestroy(BufferData * bufferData) { if (bufferData->data != NULL) { free(bufferData->data); } free(bufferData); return AL_TRUE; } ALvoid *_alutBufferDataGetData(const BufferData * bufferData) { return bufferData->data; } void _alutBufferDataDetachData(BufferData * bufferData) { bufferData->data = NULL; } size_t _alutBufferDataGetLength(const BufferData * bufferData) { return bufferData->length; } static ALint getNumChannels(const BufferData * bufferData) { return bufferData->numChannels; } static ALint getBitsPerSample(const BufferData * bufferData) { return bufferData->bitsPerSample; } ALfloat _alutBufferDataGetSampleFrequency(const BufferData * bufferData) { return bufferData->sampleFrequency; } /**************************************************************************** * The utility functions below do not know the internal BufferData * representation. ****************************************************************************/ ALboolean _alutGetFormat(const BufferData * bufferData, ALenum * format) { if (!_alutFormatConstruct(getNumChannels(bufferData), getBitsPerSample(bufferData), format)) { _alutSetError(ALUT_ERROR_UNSUPPORTED_FILE_SUBTYPE); return AL_FALSE; } return AL_TRUE; } static ALuint generateBuffer(void) { ALuint buffer; alGenBuffers(1, &buffer); if (alGetError() != AL_NO_ERROR) { _alutSetError(ALUT_ERROR_GEN_BUFFERS); return AL_NONE; } return buffer; } 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; } ALuint _alutPassBufferData(BufferData * bufferData) { ALuint buffer = generateBuffer(); if (buffer == AL_NONE) { return AL_NONE; } if (!passBufferData(bufferData, buffer)) { return AL_NONE; } return buffer; }