diff options
| author | Carl Hetherington <cth@carlh.net> | 2013-11-12 21:45:33 +0000 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2013-11-12 21:45:33 +0000 |
| commit | a02d443281f372cb247b1b48581a63c78db80402 (patch) | |
| tree | 6c0b7c0795c05c291f96f9de967f494ff8fbe459 /src/lib | |
| parent | ba003c2a760d0635c818fdc19114b85026df9d81 (diff) | |
Fix bad_alloc exception on audio analysis (and probably elsewhere).
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/player.cc | 12 |
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; |
