diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2020-02-20 00:19:22 -0700 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2020-02-20 00:19:22 -0700 |
commit | 1e9af51f368561af1c4a129d313ee5df1c4bc987 (patch) | |
tree | 1db32d11ca946387f44ac1116cb5aec993bed8e7 /libs | |
parent | 7ca068f8d5260521330d93ae8408c47175b2a81c (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.h | 3 | ||||
-rw-r--r-- | libs/ardour/disk_reader.cc | 8 |
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; } |