diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2017-07-25 12:59:31 -0400 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2017-09-18 11:40:53 -0400 |
commit | 29d2754c9a7621eef531896ef3415eacb5758423 (patch) | |
tree | 703515f29906c8cd74eb940edbf5554428ac8d47 /libs | |
parent | 59be854f795fb874a7a14a4878817b493f829e48 (diff) |
subtle change to _need_butler logic to ensure correct result in mixed-type contexts
Diffstat (limited to 'libs')
-rw-r--r-- | libs/ardour/disk_reader.cc | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/libs/ardour/disk_reader.cc b/libs/ardour/disk_reader.cc index 4dea11bb9e..c0f31eabe3 100644 --- a/libs/ardour/disk_reader.cc +++ b/libs/ardour/disk_reader.cc @@ -259,8 +259,6 @@ DiskReader::run (BufferSet& bufs, framepos_t start_frame, framepos_t end_frame, } } - _need_butler = false; - if (speed == 0.0 && (ms == MonitoringDisk)) { /* stopped. Don't accidentally pass any data from disk * into our outputs (e.g. via interpolation) @@ -401,6 +399,8 @@ DiskReader::run (BufferSet& bufs, framepos_t start_frame, framepos_t end_frame, if (!still_locating) { + bool butler_required = false; + if (speed < 0.0) { playback_sample -= playback_distance; } else { @@ -413,13 +413,13 @@ DiskReader::run (BufferSet& bufs, framepos_t start_frame, framepos_t end_frame, if (c->front()->buf->write_space() >= c->front()->buf->bufsize() / 2) { DEBUG_TRACE (DEBUG::Butler, string_compose ("%1: slaved, write space = %2 of %3\n", name(), c->front()->buf->write_space(), c->front()->buf->bufsize())); - _need_butler = true; + butler_required = true; } } else { if ((framecnt_t) c->front()->buf->write_space() >= _chunk_frames) { DEBUG_TRACE (DEBUG::Butler, string_compose ("%1: write space = %2 of %3\n", name(), c->front()->buf->write_space(), _chunk_frames)); - _need_butler = true; + butler_required = true; } } } @@ -467,13 +467,15 @@ DiskReader::run (BufferSet& bufs, framepos_t start_frame, framepos_t end_frame, */ if (frames_read <= frames_written) { if ((frames_written - frames_read) + playback_distance < midi_readahead) { - _need_butler = true; + butler_required = true; } } else { - _need_butler = true; + butler_required = true; } } + + _need_butler = butler_required; } // DEBUG_TRACE (DEBUG::Butler, string_compose ("%1 reader run, needs butler = %2\n", name(), _need_butler)); |