Don't assign the buffer data to the sample in case it is a file. Test for result when calling load()
This commit is contained in:
@@ -192,7 +192,7 @@ SGSoundSample::SGSoundSample( void** data, int len, int freq, int format ) :
|
||||
|
||||
// destructor
|
||||
SGSoundSample::~SGSoundSample() {
|
||||
if (_data) free(_data);
|
||||
if ( _data != NULL ) free(_data);
|
||||
}
|
||||
|
||||
void SGSoundSample::update_pos_and_orientation() {
|
||||
|
||||
@@ -172,7 +172,7 @@ public:
|
||||
* Free the data associated with this audio sample
|
||||
*/
|
||||
void free_data() {
|
||||
if ( _data ) free( _data ); _data = NULL;
|
||||
if ( _data != NULL ) free( _data ); _data = NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -437,6 +437,7 @@ unsigned int SGSoundMgr::request_buffer(SGSoundSample *sample)
|
||||
if ( !sample->is_valid_buffer() ) {
|
||||
// sample was not yet loaded or removed again
|
||||
string sample_name = sample->get_sample_name();
|
||||
void *sample_data == NULL;
|
||||
|
||||
// see if the sample name is already cached
|
||||
buffer_map_iterator buffer_it = _buffers.find( sample_name );
|
||||
@@ -449,32 +450,31 @@ unsigned int SGSoundMgr::request_buffer(SGSoundSample *sample)
|
||||
|
||||
// sample name was not found in the buffer cache.
|
||||
if ( sample->is_file() ) {
|
||||
size_t size;
|
||||
int freq, format;
|
||||
void *data;
|
||||
size_t size;
|
||||
bool res;
|
||||
|
||||
res = load(sample_name, &sample_data, &format, &size, &freq);
|
||||
if (res == false) return buffer;
|
||||
|
||||
load(sample_name, &data, &format, &size, &freq);
|
||||
sample->set_data( &data );
|
||||
sample->set_frequency( freq );
|
||||
sample->set_format( format );
|
||||
sample->set_size( size );
|
||||
}
|
||||
else
|
||||
sample_data = sample->get_data();
|
||||
|
||||
// create an OpenAL buffer handle
|
||||
alGenBuffers(1, &buffer);
|
||||
if ( !testForALError("generate buffer") ) {
|
||||
// Copy data to the internal OpenAL buffer
|
||||
|
||||
const ALvoid *data = sample->get_data();
|
||||
ALenum format = sample->get_format();
|
||||
ALsizei size = sample->get_size();
|
||||
ALsizei freq = sample->get_frequency();
|
||||
alBufferData( buffer, format, data, size, freq );
|
||||
alBufferData( buffer, format, sample_data, size, freq );
|
||||
|
||||
// If this sample was read from a file we have all the information
|
||||
// needed to read it again. For data buffers provided by the
|
||||
// program we don't; so don't delete it's data.
|
||||
if ( sample->is_file() ) sample->free_data();
|
||||
if ( sample->is_file() ) free(sample_data);
|
||||
|
||||
if ( !testForALError("buffer add data") ) {
|
||||
sample->set_buffer(buffer);
|
||||
|
||||
Reference in New Issue
Block a user