X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=libs%2Fardour%2Fdelivery.cc;h=80135baf28c0da2d77a49b5469369d7e53904eb8;hb=a406d9183adc67075a4e802fd8254c2560df9964;hp=4277ee4ed844144198cb39cab2fcfb1a0d8df134;hpb=ede4ecbb00ecc866c502454c81e711baea780ccd;p=ardour.git diff --git a/libs/ardour/delivery.cc b/libs/ardour/delivery.cc index 4277ee4ed8..80135baf28 100644 --- a/libs/ardour/delivery.cc +++ b/libs/ardour/delivery.cc @@ -35,6 +35,7 @@ #include "ardour/panner.h" #include "ardour/port.h" #include "ardour/session.h" +#include "ardour/audioengine.h" #include "i18n.h" @@ -42,9 +43,9 @@ using namespace std; using namespace PBD; using namespace ARDOUR; -PBD::Signal1 Delivery::CycleStart; -PBD::Signal0 Delivery::PannersLegal; -bool Delivery::panners_legal = false; +PBD::Signal1 Delivery::CycleStart; +PBD::Signal0 Delivery::PannersLegal; +bool Delivery::panners_legal = false; /* deliver to an existing IO object */ @@ -114,14 +115,14 @@ Delivery::display_name () const } void -Delivery::cycle_start (nframes_t /*nframes*/) +Delivery::cycle_start (pframes_t /*nframes*/) { _output_offset = 0; _no_outs_cuz_we_no_monitor = false; } void -Delivery::increment_output_offset (nframes_t n) +Delivery::increment_output_offset (framecnt_t n) { _output_offset += n; } @@ -178,9 +179,12 @@ Delivery::can_support_io_configuration (const ChanCount& in, ChanCount& out) con return false; } +/** Caller must hold process lock */ bool Delivery::configure_io (ChanCount in, ChanCount out) { + assert (!AudioEngine::instance()->process_lock().trylock()); + /* check configuration by comparison with our I/O port configuration, if appropriate. see ::can_support_io_configuration() for comments */ @@ -222,7 +226,7 @@ Delivery::configure_io (ChanCount in, ChanCount out) } void -Delivery::run (BufferSet& bufs, framepos_t start_frame, framepos_t end_frame, nframes_t nframes, bool result_required) +Delivery::run (BufferSet& bufs, framepos_t start_frame, framepos_t end_frame, pframes_t nframes, bool result_required) { assert (_output); @@ -242,7 +246,7 @@ Delivery::run (BufferSet& bufs, framepos_t start_frame, framepos_t end_frame, nf processing pathway that wants to use this->output_buffers() for some reason. */ - output_buffers().attach_buffers (ports, nframes, _output_offset); + output_buffers().get_jack_port_addresses (ports, nframes, _output_offset); // this Delivery processor is not a derived type, and thus we assume // we really can modify the buffers passed in (it is almost certainly @@ -437,7 +441,7 @@ Delivery::end_pan_touch (uint32_t which, bool mark, double when) void -Delivery::flush_buffers (nframes_t nframes, framepos_t time) +Delivery::flush_buffers (framecnt_t nframes, framepos_t time) { /* io_lock, not taken: function must be called from Session::process() calltree */ @@ -540,6 +544,6 @@ Delivery::output_changed (IOChange change, void* /*src*/) { if (change.type & IOChange::ConfigurationChanged) { reset_panner (); + _output_buffers->attach_buffers (_output->ports ()); } } -