From 87b2c94759ab95c31bf0ba43e299eb78dcfd6385 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Tue, 22 May 2018 21:35:27 +0200 Subject: 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. --- libs/ardour/disk_reader.cc | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) (limited to 'libs/ardour/disk_reader.cc') 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 writer (channels); - boost::shared_ptr 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 (bufsize); + memset (buf->buffer(), 0, sizeof (Sample) * buf->bufsize()); +} - c->clear(); +int +DiskReader::add_channel_to (boost::shared_ptr 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 -- cgit v1.2.3