diff options
| author | Carl Hetherington <cth@carlh.net> | 2017-02-22 13:40:17 +0000 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2017-04-19 23:04:32 +0100 |
| commit | b20c4b11abff0bd57dab03174070ec8571bbe4d5 (patch) | |
| tree | 305ac5e9e346a644743348173caefc7422fe179f /src/lib/player.cc | |
| parent | 8edc349253daf5eb0d9ceb75f467cdbbc668f27a (diff) | |
Fix pull timing; fix units of ReelWriter::total_written_audio_frames.
Diffstat (limited to 'src/lib/player.cc')
| -rw-r--r-- | src/lib/player.cc | 26 |
1 files changed, 11 insertions, 15 deletions
diff --git a/src/lib/player.cc b/src/lib/player.cc index 7b1b08250..eeeef2cb3 100644 --- a/src/lib/player.cc +++ b/src/lib/player.cc @@ -548,24 +548,14 @@ Player::pass () /* Emit any audio that is ready */ - optional<DCPTime> earliest_audio; - BOOST_FOREACH (shared_ptr<Piece> i, _pieces) { - if (i->decoder->audio) { - DCPTime t = i->content->position() - + DCPTime (i->decoder->audio->position(), i->frc) - + DCPTime::from_seconds (i->content->audio->delay() / 1000.0); - - if (t < DCPTime()) { - t = DCPTime(); - } - - if (!earliest_audio || t < *earliest_audio) { - earliest_audio = t; - } + DCPTime pull_from = _playlist->length (); + for (map<AudioStreamPtr, StreamState>::const_iterator i = _stream_states.begin(); i != _stream_states.end(); ++i) { + if (!i->second.piece->done && i->second.last_push_end < pull_from) { + pull_from = i->second.last_push_end; } } - pair<shared_ptr<AudioBuffers>, DCPTime> audio = _audio_merger.pull (earliest_audio.get_value_or(DCPTime())); + pair<shared_ptr<AudioBuffers>, DCPTime> audio = _audio_merger.pull (pull_from); if (audio.first->frames() > 0) { DCPOMATIC_ASSERT (audio.second >= _last_audio_time); DCPTime t = _last_audio_time; @@ -751,6 +741,12 @@ Player::audio (weak_ptr<Piece> wp, AudioStreamPtr stream, ContentAudio content_a } _audio_merger.push (content_audio.audio, time); + + if (_stream_states.find (stream) == _stream_states.end ()) { + _stream_states[stream] = StreamState (piece, time); + } else { + _stream_states[stream].last_push_end = time + DCPTime::from_frames (content_audio.audio->frames(), _film->audio_frame_rate()); + } } void |
