From 1da09a47065cea3dfb23f680c6ed1b2297f3895c Mon Sep 17 00:00:00 2001 From: ehofman Date: Wed, 9 Dec 2009 10:09:41 +0000 Subject: [PATCH] Don't assign the buffer data to the sample in case it is a file. Test for result when calling load() --- simgear/sound/sample_openal.cxx | 2 +- simgear/sound/sample_openal.hxx | 2 +- simgear/sound/soundmgr_openal.cxx | 20 ++++++++++---------- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/simgear/sound/sample_openal.cxx b/simgear/sound/sample_openal.cxx index db7cd465..6a4f7cb9 100644 --- a/simgear/sound/sample_openal.cxx +++ b/simgear/sound/sample_openal.cxx @@ -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() { diff --git a/simgear/sound/sample_openal.hxx b/simgear/sound/sample_openal.hxx index a4091d29..d2cb1824 100644 --- a/simgear/sound/sample_openal.hxx +++ b/simgear/sound/sample_openal.hxx @@ -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; } /** diff --git a/simgear/sound/soundmgr_openal.cxx b/simgear/sound/soundmgr_openal.cxx index 2cba9780..85f8b2ca 100644 --- a/simgear/sound/soundmgr_openal.cxx +++ b/simgear/sound/soundmgr_openal.cxx @@ -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); -- 2.39.5