diff options
| author | Carl Hetherington <cth@carlh.net> | 2014-07-23 10:06:24 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2014-07-23 10:06:24 +0100 |
| commit | 3620abae2f1aee79e80c2d12bf3fa97b74cf77f8 (patch) | |
| tree | f8a7e4bec31aeb481d01e9e2dbf4cbae89f5c970 /src/lib/audio_decoder.cc | |
| parent | 56c89d5d7aa2ea910d00f775283cc1a2bb9ad831 (diff) | |
Fix excessive memory usage on long plays without audio.
Diffstat (limited to 'src/lib/audio_decoder.cc')
| -rw-r--r-- | src/lib/audio_decoder.cc | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/src/lib/audio_decoder.cc b/src/lib/audio_decoder.cc index e4f98c678..3d5698dfe 100644 --- a/src/lib/audio_decoder.cc +++ b/src/lib/audio_decoder.cc @@ -19,12 +19,9 @@ #include "audio_decoder.h" #include "audio_buffers.h" -#include "exceptions.h" -#include "log.h" +#include "audio_processor.h" #include "resampler.h" #include "util.h" -#include "film.h" -#include "audio_processor.h" #include "i18n.h" @@ -188,6 +185,15 @@ AudioDecoder::audio (shared_ptr<const AudioBuffers> data, ContentTime time) /* Copy new data in */ _decoded_audio.audio->copy_from (data.get(), data->frames(), 0, _audio_position.get() - _decoded_audio.frame); _audio_position = _audio_position.get() + data->frames (); + + /* Limit the amount of data we keep in case nobody is asking for it */ + int const max_frames = _audio_content->resampled_audio_frame_rate () * 10; + if (_decoded_audio.audio->frames() > max_frames) { + int const to_remove = _decoded_audio.audio->frames() - max_frames; + _decoded_audio.frame += to_remove; + _decoded_audio.audio->move (to_remove, 0, max_frames); + _decoded_audio.audio->set_frames (max_frames); + } } /* XXX: called? */ |
