summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2020-02-20 00:19:22 -0700
committerPaul Davis <paul@linuxaudiosystems.com>2020-02-20 00:19:22 -0700
commit1e9af51f368561af1c4a129d313ee5df1c4bc987 (patch)
tree1db32d11ca946387f44ac1116cb5aec993bed8e7 /libs
parent7ca068f8d5260521330d93ae8408c47175b2a81c (diff)
correctly track is disk read (audio) should be forwards/backwards, and what was done last time we read from disk
Diffstat (limited to 'libs')
-rw-r--r--libs/ardour/ardour/disk_reader.h3
-rw-r--r--libs/ardour/disk_reader.cc8
2 files changed, 9 insertions, 2 deletions
diff --git a/libs/ardour/ardour/disk_reader.h b/libs/ardour/ardour/disk_reader.h
index 725fa4b2ce..980910b3aa 100644
--- a/libs/ardour/ardour/disk_reader.h
+++ b/libs/ardour/ardour/disk_reader.h
@@ -20,6 +20,8 @@
#ifndef __ardour_disk_reader_h__
#define __ardour_disk_reader_h__
+#include <boost/optional.hpp>
+
#include "pbd/i18n.h"
#include "evoral/Curve.h"
@@ -191,6 +193,7 @@ private:
DeclickAmp _declick_amp;
sampleoffset_t _declick_offs;
MidiStateTracker _tracker;
+ boost::optional<bool> _last_read_reversed;
int _do_refill_with_alloc (bool partial_fill);
diff --git a/libs/ardour/disk_reader.cc b/libs/ardour/disk_reader.cc
index eea5fc86a9..bd0cffc6ed 100644
--- a/libs/ardour/disk_reader.cc
+++ b/libs/ardour/disk_reader.cc
@@ -630,7 +630,7 @@ DiskReader::overwrite_existing_audio ()
return true;
}
- const bool reversed = _session.transport_speed() < 0.0f;
+ const bool reversed = !_session.transport_will_roll_forwards ();
sampleoffset_t chunk1_offset;
samplecnt_t chunk1_cnt;
@@ -739,6 +739,7 @@ DiskReader::seek (samplepos_t sample, bool complete_refill)
int ret = -1;
ChannelList::iterator chan;
boost::shared_ptr<ChannelList> c = channels.reader();
+ const bool read_reversed = !_session.transport_will_roll_forwards ();
if (c->empty()) {
return 0;
@@ -966,6 +967,7 @@ DiskReader::audio_read (Sample* sum_buffer,
sum_buffer += this_read;
}
+ _last_read_reversed = reversed;
return rcnt;
}
@@ -1021,12 +1023,14 @@ DiskReader::refill_audio (Sample* sum_buffer, Sample* mixdown_buffer, float* gai
}
int32_t ret = 0;
- bool const reversed = _session.transport_speed() < 0.0f;
+ bool const reversed = !_session.transport_will_roll_forwards ();
samplecnt_t zero_fill;
uint32_t chan_n;
ChannelList::iterator i;
boost::shared_ptr<ChannelList> c = channels.reader();
+ _last_read_reversed = !_session.transport_will_roll_forwards ();
+
if (c->empty()) {
return 0;
}