#include "ardour/panner.h"
#include "ardour/port.h"
#include "ardour/session.h"
+#include "ardour/audioengine.h"
#include "i18n.h"
using namespace PBD;
using namespace ARDOUR;
-PBD::Signal1<void,nframes_t> Delivery::CycleStart;
-PBD::Signal0<int> Delivery::PannersLegal;
-bool Delivery::panners_legal = false;
+PBD::Signal1<void, pframes_t> Delivery::CycleStart;
+PBD::Signal0<int> Delivery::PannersLegal;
+bool Delivery::panners_legal = false;
/* deliver to an existing IO object */
}
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;
}
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
*/
}
}
}
- }
+ }
+
if (!Processor::configure_io (in, out)) {
return false;
}
}
void
-Delivery::run (BufferSet& bufs, sframes_t start_frame, sframes_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);
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
void
-Delivery::start_pan_touch (uint32_t which)
+Delivery::start_pan_touch (uint32_t which, double when)
{
if (which < _panner->npanners()) {
- _panner->pan_control(which)->start_touch();
+ _panner->pan_control(which)->start_touch(when);
}
}
void
-Delivery::end_pan_touch (uint32_t which)
+Delivery::end_pan_touch (uint32_t which, bool mark, double when)
{
if (which < _panner->npanners()) {
- _panner->pan_control(which)->stop_touch();
+ _panner->pan_control(which)->stop_touch(mark, when);
}
}
-void
-Delivery::transport_stopped (sframes_t frame)
-{
- _panner->transport_stopped (frame);
-}
void
-Delivery::flush_buffers (nframes_t nframes, nframes64_t time)
+Delivery::flush_buffers (framecnt_t nframes, framepos_t time)
{
/* io_lock, not taken: function must be called from Session::process() calltree */
}
void
-Delivery::transport_stopped ()
+Delivery::transport_stopped (framepos_t now)
{
- /* turn off any notes that are on */
+ Processor::transport_stopped (now);
- PortSet& ports (_output->ports());
+ _panner->transport_stopped (now);
- for (PortSet::iterator i = ports.begin(); i != ports.end(); ++i) {
- (*i).transport_stopped ();
- }
+ if (_output) {
+ PortSet& ports (_output->ports());
+
+ for (PortSet::iterator i = ports.begin(); i != ports.end(); ++i) {
+ (*i).transport_stopped ();
+ }
+ }
}
gain_t
void
Delivery::output_changed (IOChange change, void* /*src*/)
{
- if (change & ARDOUR::ConfigurationChanged) {
+ if (change.type & IOChange::ConfigurationChanged) {
reset_panner ();
+ _output_buffers->attach_buffers (_output->ports ());
}
}
-