diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2017-03-08 19:46:24 +0100 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2017-09-18 11:40:52 -0400 |
commit | bcd7a21510a0ddd6d33ea96b6d70a8a20c784fc1 (patch) | |
tree | b72ea439fb8a4ac98cc200d7a294e0a374ed2a7e /libs/ardour/disk_io.cc | |
parent | 7fb6807ed32cbcf63cb4b3d9545310c668bbaaaa (diff) |
move ChannelInfo structure from DiskReader into DiskIOProcessor
Diffstat (limited to 'libs/ardour/disk_io.cc')
-rw-r--r-- | libs/ardour/disk_io.cc | 54 |
1 files changed, 53 insertions, 1 deletions
diff --git a/libs/ardour/disk_io.cc b/libs/ardour/disk_io.cc index f75178a5bd..d0e6b9dc35 100644 --- a/libs/ardour/disk_io.cc +++ b/libs/ardour/disk_io.cc @@ -20,11 +20,12 @@ #include "pbd/error.h" #include "pbd/i18n.h" -#include "ardour/rc_configuration.h" +#include "ardour/butler.h" #include "ardour/disk_io.h" #include "ardour/disk_reader.h" #include "ardour/disk_writer.h" #include "ardour/location.h" +#include "ardour/rc_configuration.h" #include "ardour/session.h" using namespace ARDOUR; @@ -51,6 +52,7 @@ DiskIOProcessor::DiskIOProcessor (Session& s, string const & str, Flag f) , in_set_state (false) , wrap_buffer_size (0) , speed_buffer_size (0) + , channels (new ChannelList) { } @@ -203,3 +205,53 @@ DiskIOProcessor::set_state (const XMLNode& node, int version) } return 0; } + +int +DiskIOProcessor::add_channel_to (boost::shared_ptr<ChannelList> c, uint32_t how_many) +{ + while (how_many--) { + c->push_back (new ChannelInfo( + _session.butler()->audio_diskstream_playback_buffer_size(), + speed_buffer_size, wrap_buffer_size)); + interpolation.add_channel_to ( + _session.butler()->audio_diskstream_playback_buffer_size(), + speed_buffer_size); + } + + _n_channels.set (DataType::AUDIO, c->size()); + + return 0; +} + +int +DiskIOProcessor::add_channel (uint32_t how_many) +{ + RCUWriter<ChannelList> writer (channels); + boost::shared_ptr<ChannelList> c = writer.get_copy(); + + return add_channel_to (c, how_many); +} + +int +DiskIOProcessor::remove_channel_from (boost::shared_ptr<ChannelList> c, uint32_t how_many) +{ + while (how_many-- && !c->empty()) { + delete c->back(); + c->pop_back(); + interpolation.remove_channel_from (); + } + + _n_channels.set(DataType::AUDIO, c->size()); + + return 0; +} + +int +DiskIOProcessor::remove_channel (uint32_t how_many) +{ + RCUWriter<ChannelList> writer (channels); + boost::shared_ptr<ChannelList> c = writer.get_copy(); + + return remove_channel_from (c, how_many); +} + |