X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fdisk_io.cc;h=427f3644041db6ceec5e5858835c89a2beb74b9c;hb=6bd583803ea1daf19a1c088766122b5cdf340171;hp=7275d5701b5ed46ec45a4e577fc24cb8ddbe22ca;hpb=a2703ea50314db9873c82d5d031066bede1441df;p=ardour.git diff --git a/libs/ardour/disk_io.cc b/libs/ardour/disk_io.cc index 7275d5701b..427f364404 100644 --- a/libs/ardour/disk_io.cc +++ b/libs/ardour/disk_io.cc @@ -50,9 +50,7 @@ DiskIOProcessor::DiskIOProcessor (Session& s, string const & str, Flag f) : Processor (s, str) , _flags (f) , i_am_the_modifier (false) - , _seek_required (false) , _slaved (false) - , loop_location (0) , in_set_state (false) , playback_sample (0) , _need_butler (false) @@ -64,6 +62,23 @@ DiskIOProcessor::DiskIOProcessor (Session& s, string const & str, Flag f) set_display_to_user (false); } +DiskIOProcessor::~DiskIOProcessor () +{ + { + RCUWriter writer (channels); + boost::shared_ptr c = writer.get_copy(); + + for (ChannelList::iterator chan = c->begin(); chan != c->end(); ++chan) { + delete *chan; + } + + c->clear(); + } + + channels.flush (); +} + + void DiskIOProcessor::init () { @@ -182,22 +197,6 @@ DiskIOProcessor::set_block_size (pframes_t nframes) return 0; } -int -DiskIOProcessor::set_loop (Location *location) -{ - if (location) { - if (location->start() >= location->end()) { - error << string_compose(_("Location \"%1\" not valid for track loop (start >= end)"), location->name()) << endl; - return -1; - } - } - - loop_location = location; - - LoopSet (location); /* EMIT SIGNAL */ - return 0; -} - void DiskIOProcessor::non_realtime_locate (samplepos_t location) { @@ -206,21 +205,6 @@ DiskIOProcessor::non_realtime_locate (samplepos_t location) seek (location, true); } -void -DiskIOProcessor::non_realtime_speed_change () -{ - if (_seek_required) { - seek (_session.transport_sample(), true); - _seek_required = false; - } -} - -bool -DiskIOProcessor::realtime_speed_change () -{ - return true; -} - int DiskIOProcessor::set_state (const XMLNode& node, int version) { @@ -235,21 +219,6 @@ DiskIOProcessor::set_state (const XMLNode& node, int version) return 0; } -int -DiskIOProcessor::add_channel_to (boost::shared_ptr c, uint32_t how_many) -{ - while (how_many--) { - c->push_back (new ChannelInfo (_session.butler()->audio_diskstream_playback_buffer_size())); - interpolation.add_channel_to (_session.butler()->audio_diskstream_playback_buffer_size(), speed_buffer_size); - DEBUG_TRACE (DEBUG::DiskIO, string_compose ("%1: new channel, write space = %2 read = %3\n", - name(), - c->back()->buf->write_space(), - c->back()->buf->read_space())); - } - - return 0; -} - int DiskIOProcessor::add_channel (uint32_t how_many) { @@ -265,7 +234,6 @@ DiskIOProcessor::remove_channel_from (boost::shared_ptr c, uint32_t while (how_many-- && !c->empty()) { delete c->back(); c->pop_back(); - interpolation.remove_channel_from (); } return 0; @@ -348,32 +316,20 @@ DiskIOProcessor::use_playlist (DataType dt, boost::shared_ptr playlist } DiskIOProcessor::ChannelInfo::ChannelInfo (samplecnt_t bufsize) - : buf (new RingBufferNPT (bufsize)) + : rbuf (0) + , wbuf (0) + , capture_transition_buf (0) + , curr_capture_cnt (0) { - /* touch the ringbuffer buffer, which will cause - them to be mapped into locked physical RAM if - we're running with mlockall(). this doesn't do - much if we're not. - */ - - memset (buf->buffer(), 0, sizeof (Sample) * buf->bufsize()); - capture_transition_buf = new RingBufferNPT (256); -} - -void -DiskIOProcessor::ChannelInfo::resize (samplecnt_t bufsize) -{ - delete buf; - buf = new RingBufferNPT (bufsize); - memset (buf->buffer(), 0, sizeof (Sample) * buf->bufsize()); } DiskIOProcessor::ChannelInfo::~ChannelInfo () { - delete buf; - buf = 0; - + delete rbuf; + delete wbuf; delete capture_transition_buf; + rbuf = 0; + wbuf = 0; capture_transition_buf = 0; }