From b2bc934e218a8ed05b6f37edc5585191e60ca288 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Sat, 14 Dec 2019 19:34:13 -0700 Subject: fix behavior of DiskReader when moved after an instrument --- libs/ardour/ardour/disk_reader.h | 2 ++ libs/ardour/disk_reader.cc | 31 ++++++++++++++++++++++++++++++- 2 files changed, 32 insertions(+), 1 deletion(-) (limited to 'libs') 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 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; +} -- cgit v1.2.3