diff options
author | Robin Gareus <robin@gareus.org> | 2018-05-22 21:35:27 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2018-07-09 17:30:38 +0200 |
commit | 87b2c94759ab95c31bf0ba43e299eb78dcfd6385 (patch) | |
tree | d8e2b40750f2c4729b6adb09256027cf6ffd3a50 /libs/ardour/disk_reader.cc | |
parent | cf11764763c302242f4d803cae2c326a66c8f5d8 (diff) |
Separate ChannelInfo for disk reader and writer
This allows to use different types for write and read buffers, in
preparation for a dedicated reader-buffer.
Diffstat (limited to 'libs/ardour/disk_reader.cc')
-rw-r--r-- | libs/ardour/disk_reader.cc | 31 |
1 files changed, 20 insertions, 11 deletions
diff --git a/libs/ardour/disk_reader.cc b/libs/ardour/disk_reader.cc index 0abcbac3d7..2673da56b9 100644 --- a/libs/ardour/disk_reader.cc +++ b/libs/ardour/disk_reader.cc @@ -70,21 +70,30 @@ DiskReader::~DiskReader () _playlists[n]->release (); } } + delete _midi_buf; +} - { - RCUWriter<ChannelList> writer (channels); - boost::shared_ptr<ChannelList> c = writer.get_copy(); - - for (ChannelList::iterator chan = c->begin(); chan != c->end(); ++chan) { - delete *chan; - } +void +DiskReader::ReaderChannelInfo::resize (samplecnt_t bufsize) +{ + delete buf; + /* touch memory to lock it */ + buf = new RingBufferNPT<Sample> (bufsize); + memset (buf->buffer(), 0, sizeof (Sample) * buf->bufsize()); +} - c->clear(); +int +DiskReader::add_channel_to (boost::shared_ptr<ChannelList> c, uint32_t how_many) +{ + while (how_many--) { + c->push_back (new ReaderChannelInfo (_session.butler()->audio_diskstream_playback_buffer_size())); + DEBUG_TRACE (DEBUG::DiskIO, string_compose ("%1: new reader channel, write space = %2 read = %3\n", + name(), + c->back()->buf->write_space(), + c->back()->buf->read_space())); } - channels.flush (); - - delete _midi_buf; + return 0; } void |