diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2019-11-18 12:01:26 -0700 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2019-11-18 12:01:43 -0700 |
commit | a8d62ce056fe260792d4e72bf8cf2fbff0e8b39b (patch) | |
tree | d735059a8009a0a3ffa1279f05cf02cba6ac26f7 | |
parent | 725a6fc67fccde089423be05c89494db5910e91f (diff) |
use reverse-reading of MIDI data in DiskReader
-rw-r--r-- | libs/ardour/disk_reader.cc | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/libs/ardour/disk_reader.cc b/libs/ardour/disk_reader.cc index 5766f450bd..42986f7fa4 100644 --- a/libs/ardour/disk_reader.cc +++ b/libs/ardour/disk_reader.cc @@ -778,10 +778,15 @@ DiskReader::_do_refill_with_alloc (bool partial_fill) int DiskReader::refill (Sample* sum_buffer, Sample* mixdown_buffer, float* gain_buffer, samplecnt_t fill_level) { - /* nothing to do here for MIDI - the entire playlist has been rendered - * into RAM already. - */ - return refill_audio (sum_buffer, mixdown_buffer, gain_buffer, fill_level); + if (refill_audio (sum_buffer, mixdown_buffer, gain_buffer, fill_level)) { + return -1; + } + + if ((_session.transport_speed() < 0.0f) != rt_midibuffer()->reversed()) { + rt_midibuffer()->reverse (); + } + + return 0; } @@ -1090,13 +1095,9 @@ DiskReader::get_midi_playback (MidiBuffer& dst, samplepos_t start_sample, sample target = &dst; } - /* Note: do not fetch any data from disk if we're moving - * backwards. TODO: reverse MIDI - */ - - if (!pending_overwrite() && !_no_disk_output && (end_sample >= start_sample)) { + if (!pending_overwrite() && !_no_disk_output) { - const samplecnt_t nframes = end_sample - start_sample; + const samplecnt_t nframes = abs (end_sample - start_sample); if (ms & MonitoringDisk) { |