summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2019-12-14 19:34:13 -0700
committerPaul Davis <paul@linuxaudiosystems.com>2019-12-14 19:34:24 -0700
commitb2bc934e218a8ed05b6f37edc5585191e60ca288 (patch)
tree1429bd050b84c5a692a43f0f9184c35873ebe328 /libs
parent1881d73f43b64e4f84769b44d066835cb6f6e73b (diff)
fix behavior of DiskReader when moved after an instrument
Diffstat (limited to 'libs')
-rw-r--r--libs/ardour/ardour/disk_reader.h2
-rw-r--r--libs/ardour/disk_reader.cc31
2 files changed, 32 insertions, 1 deletions
diff --git a/libs/ardour/ardour/disk_reader.h b/libs/ardour/ardour/disk_reader.h
index 725fa4b2ce..3116435606 100644
--- a/libs/ardour/ardour/disk_reader.h
+++ b/libs/ardour/ardour/disk_reader.h
@@ -50,6 +50,8 @@ public:
static samplecnt_t default_chunk_samples ();
static void set_chunk_samples (samplecnt_t n) { _chunk_samples = n; }
+ bool can_support_io_configuration (const ChanCount& in, ChanCount& out);
+
void run (BufferSet& /*bufs*/, samplepos_t /*start_sample*/, samplepos_t /*end_sample*/, double speed, pframes_t /*nframes*/, bool /*result_required*/);
void realtime_handle_transport_stopped ();
void realtime_locate (bool);
diff --git a/libs/ardour/disk_reader.cc b/libs/ardour/disk_reader.cc
index ea363061d6..fa8a063407 100644
--- a/libs/ardour/disk_reader.cc
+++ b/libs/ardour/disk_reader.cc
@@ -536,7 +536,7 @@ DiskReader::overwrite_existing_audio ()
{
boost::shared_ptr<ChannelList> c = channels.reader();
- if (c->empty ()) {
+ if (c->empty () || !_playlists[DataType::AUDIO]) {
return true;
}
@@ -1683,3 +1683,32 @@ DiskReader::reload_loop ()
}
}
+
+bool
+DiskReader::can_support_io_configuration (const ChanCount& in, ChanCount& out)
+{
+ if (!DiskIOProcessor::can_support_io_configuration (in, out)) {
+ return false;
+ }
+
+ /* DiskIO might have done this too, but do it again anyway as a
+ * starting point.
+ */
+
+ out == in;
+
+ if (_playlists[DataType::AUDIO]) {
+ ChannelList::size_type naudio = max (ChannelList::size_type (1), channels.reader()->size());
+ if (out.n_audio() < naudio) {
+ out.set (DataType::AUDIO, naudio);
+ }
+ }
+
+ if (_playlists[DataType::MIDI]) {
+ if (out.n_midi() != 1) {
+ out.set (DataType::MIDI, 1);
+ }
+ }
+
+ return true;
+}