projects
/
dcpomatic.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
56c89d5
)
Fix excessive memory usage on long plays without audio.
author
Carl Hetherington
<cth@carlh.net>
Wed, 23 Jul 2014 09:06:24 +0000
(10:06 +0100)
committer
Carl Hetherington
<cth@carlh.net>
Wed, 23 Jul 2014 09:06:24 +0000
(10:06 +0100)
src/lib/audio_decoder.cc
patch
|
blob
|
history
diff --git
a/src/lib/audio_decoder.cc
b/src/lib/audio_decoder.cc
index e4f98c678ad3a150987431f7f587428a07603b10..3d5698dfe52a63b21fac0166224d82ec3cc0c71c 100644
(file)
--- 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 "audio_decoder.h"
#include "audio_buffers.h"
-#include "exceptions.h"
-#include "log.h"
+#include "audio_processor.h"
#include "resampler.h"
#include "util.h"
#include "resampler.h"
#include "util.h"
-#include "film.h"
-#include "audio_processor.h"
#include "i18n.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 ();
/* 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? */
}
/* XXX: called? */