summaryrefslogtreecommitdiff
path: root/libs/ardour
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2019-11-18 12:01:26 -0700
committerPaul Davis <paul@linuxaudiosystems.com>2019-11-18 12:01:43 -0700
commita8d62ce056fe260792d4e72bf8cf2fbff0e8b39b (patch)
treed735059a8009a0a3ffa1279f05cf02cba6ac26f7 /libs/ardour
parent725a6fc67fccde089423be05c89494db5910e91f (diff)
use reverse-reading of MIDI data in DiskReader
Diffstat (limited to 'libs/ardour')
-rw-r--r--libs/ardour/disk_reader.cc21
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) {