]> git.mxchange.org Git - simgear.git/commitdiff
Don't assign the buffer data to the sample in case it is a file. Test for result...
authorehofman <ehofman>
Wed, 9 Dec 2009 10:09:41 +0000 (10:09 +0000)
committerTim Moore <timoore@redhat.com>
Fri, 11 Dec 2009 23:03:40 +0000 (00:03 +0100)
simgear/sound/sample_openal.cxx
simgear/sound/sample_openal.hxx
simgear/sound/soundmgr_openal.cxx

index db7cd465dc3786560a1199d7341868e08cf16a69..6a4f7cb92dbe2603b35e5a5cb7d42c67a08920d3 100644 (file)
@@ -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() {
index a4091d293c6eb02ead902b57b9de38366c73f586..d2cb1824763a7a76b3769397bc80a0956c9464e0 100644 (file)
@@ -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;
     }
 
     /**
index 2cba97807b1924f1a38d48df5f250b5d36c02ea0..85f8b2ca9151cf2604fd2f0ba7973a774cc9f66e 100644 (file)
@@ -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);