Don't allow _decoded_audio to grow to very large sizes during seek.
authorCarl Hetherington <cth@carlh.net>
Fri, 20 Jun 2014 09:04:25 +0000 (10:04 +0100)
committerCarl Hetherington <cth@carlh.net>
Fri, 20 Jun 2014 09:04:25 +0000 (10:04 +0100)
src/lib/audio_decoder.cc

index 4a543cea9351af00cf652b6bcfd755ad013d2860..2c0388fc39318851242b96a7a672b014ba5fca27 100644 (file)
@@ -132,7 +132,16 @@ AudioDecoder::audio (shared_ptr<const AudioBuffers> data, ContentTime time)
        assert (_audio_position.get() >= (_decoded_audio.frame + _decoded_audio.audio->frames()));
 
        /* Resize _decoded_audio to fit the new data */
-       int const new_size = _audio_position.get() + data->frames() - _decoded_audio.frame;
+       int new_size = 0;
+       if (_decoded_audio.audio->frames() == 0) {
+               /* There's nothing in there, so just store the new data */
+               new_size = data->frames ();
+               _decoded_audio.frame = _audio_position.get ();
+       } else {
+               /* Otherwise we need to extend _decoded_audio to include the new stuff */
+               new_size = _audio_position.get() + data->frames() - _decoded_audio.frame;
+       }
+       
        _decoded_audio.audio->ensure_size (new_size);
        _decoded_audio.audio->set_frames (new_size);