1 #include "alutInternal.h"
3 struct BufferData_struct
9 ALfloat sampleFrequency;
13 _alutBufferDataConstruct (ALvoid *data, size_t length, ALint numChannels,
14 ALint bitsPerSample, ALfloat sampleFrequency)
16 BufferData *bufferData = (BufferData *) _alutMalloc (sizeof (BufferData));
17 if (bufferData == NULL)
22 bufferData->data = data;
23 bufferData->length = length;
24 bufferData->numChannels = numChannels;
25 bufferData->bitsPerSample = bitsPerSample;
26 bufferData->sampleFrequency = sampleFrequency;
32 _alutBufferDataDestroy (BufferData *bufferData)
34 if (bufferData->data != NULL)
36 free (bufferData->data);
43 _alutBufferDataGetData (const BufferData *bufferData)
45 return bufferData->data;
49 _alutBufferDataDetachData (BufferData *bufferData)
51 bufferData->data = NULL;
55 _alutBufferDataGetLength (const BufferData *bufferData)
57 return bufferData->length;
61 getNumChannels (const BufferData *bufferData)
63 return bufferData->numChannels;
67 getBitsPerSample (const BufferData *bufferData)
69 return bufferData->bitsPerSample;
73 _alutBufferDataGetSampleFrequency (const BufferData *bufferData)
75 return bufferData->sampleFrequency;
78 /****************************************************************************
79 * The utility functions below do not know the internal BufferData
81 ****************************************************************************/
84 _alutGetFormat (const BufferData *bufferData, ALenum *format)
86 if (!_alutFormatConstruct
87 (getNumChannels (bufferData), getBitsPerSample (bufferData), format))
89 _alutSetError (ALUT_ERROR_UNSUPPORTED_FILE_SUBTYPE);
99 alGenBuffers (1, &buffer);
100 if (alGetError () != AL_NO_ERROR)
102 _alutSetError (ALUT_ERROR_GEN_BUFFERS);
109 passBufferData (BufferData *bufferData, ALuint bid)
114 if (!_alutGetFormat (bufferData, &format))
118 /* GCC is a bit picky about casting function calls, so we do it in two
120 size = _alutBufferDataGetLength (bufferData);
121 frequency = _alutBufferDataGetSampleFrequency (bufferData);
122 alBufferData (bid, format, _alutBufferDataGetData (bufferData),
123 (ALsizei) size, (ALsizei) frequency);
124 if (alGetError () != AL_NO_ERROR)
126 _alutSetError (ALUT_ERROR_BUFFER_DATA);
133 _alutPassBufferData (BufferData *bufferData)
135 ALuint buffer = generateBuffer ();
136 if (buffer == AL_NONE)
141 if (!passBufferData (bufferData, buffer))