summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2013-11-12 21:45:33 +0000
committerCarl Hetherington <cth@carlh.net>2013-11-12 21:45:33 +0000
commita02d443281f372cb247b1b48581a63c78db80402 (patch)
tree6c0b7c0795c05c291f96f9de967f494ff8fbe459 /src/lib
parentba003c2a760d0635c818fdc19114b85026df9d81 (diff)
Fix bad_alloc exception on audio analysis (and probably elsewhere).
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/player.cc12
1 files changed, 7 insertions, 5 deletions
diff --git a/src/lib/player.cc b/src/lib/player.cc
index 97d2cbdc0..b5a961631 100644
--- a/src/lib/player.cc
+++ b/src/lib/player.cc
@@ -221,20 +221,22 @@ Player::pass ()
}
if (_audio) {
- Time audio_done_up_to = TIME_MAX;
+ boost::optional<Time> audio_done_up_to;
for (list<shared_ptr<Piece> >::iterator i = _pieces.begin(); i != _pieces.end(); ++i) {
if ((*i)->decoder->done ()) {
continue;
}
if (dynamic_pointer_cast<AudioDecoder> ((*i)->decoder)) {
- audio_done_up_to = min (audio_done_up_to, (*i)->audio_position);
+ audio_done_up_to = min (audio_done_up_to.get_value_or (TIME_MAX), (*i)->audio_position);
}
}
- TimedAudioBuffers<Time> tb = _audio_merger.pull (audio_done_up_to);
- Audio (tb.audio, tb.time);
- _audio_position += _film->audio_frames_to_time (tb.audio->frames ());
+ if (audio_done_up_to) {
+ TimedAudioBuffers<Time> tb = _audio_merger.pull (audio_done_up_to.get ());
+ Audio (tb.audio, tb.time);
+ _audio_position += _film->audio_frames_to_time (tb.audio->frames ());
+ }
}
return false;