diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2019-12-14 19:34:13 -0700 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2019-12-14 19:34:24 -0700 |
commit | b2bc934e218a8ed05b6f37edc5585191e60ca288 (patch) | |
tree | 1429bd050b84c5a692a43f0f9184c35873ebe328 /libs | |
parent | 1881d73f43b64e4f84769b44d066835cb6f6e73b (diff) |
fix behavior of DiskReader when moved after an instrument
Diffstat (limited to 'libs')
-rw-r--r-- | libs/ardour/ardour/disk_reader.h | 2 | ||||
-rw-r--r-- | libs/ardour/disk_reader.cc | 31 |
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; +} |