, _no_panner_reset (false)
{
if (pannable) {
- _panshell = boost::shared_ptr<PannerShell>(new PannerShell (_name, _session, pannable));
+ bool is_send = false;
+ if (r & (Delivery::Send|Delivery::Aux)) is_send = true;
+ _panshell = boost::shared_ptr<PannerShell>(new PannerShell (_name, _session, pannable, is_send));
}
_display_to_user = false;
/* deliver to a new IO object */
Delivery::Delivery (Session& s, boost::shared_ptr<Pannable> pannable, boost::shared_ptr<MuteMaster> mm, const string& name, Role r)
- : IOProcessor(s, false, (role_requires_output_ports (r) ? true : false), name)
+ : IOProcessor(s, false, (role_requires_output_ports (r) ? true : false), name, "", DataType::AUDIO, (r == Send))
, _role (r)
, _output_buffers (new BufferSet())
, _current_gain (1.0)
, _no_panner_reset (false)
{
if (pannable) {
- _panshell = boost::shared_ptr<PannerShell>(new PannerShell (_name, _session, pannable));
+ bool is_send = false;
+ if (r & (Delivery::Send|Delivery::Aux)) is_send = true;
+ _panshell = boost::shared_ptr<PannerShell>(new PannerShell (_name, _session, pannable, is_send));
}
_display_to_user = false;
}
bool
-Delivery::can_support_io_configuration (const ChanCount& in, ChanCount& out) const
+Delivery::can_support_io_configuration (const ChanCount& in, ChanCount& out)
{
if (_role == Main) {
bool
Delivery::configure_io (ChanCount in, ChanCount out)
{
- assert (!AudioEngine::instance()->process_lock().trylock());
+#ifndef NDEBUG
+ bool r = AudioEngine::instance()->process_lock().trylock();
+ assert (!r && "trylock inside Delivery::configure_io");
+#endif
/* check configuration by comparison with our I/O port configuration, if appropriate.
see ::can_support_io_configuration() for comments
processing pathway that wants to use this->output_buffers() for some reason.
*/
- output_buffers().get_jack_port_addresses (ports, nframes);
+ // TODO delayline -- latency-compensation
+ output_buffers().get_backend_port_addresses (ports, nframes);
// this Delivery processor is not a derived type, and thus we assume
// we really can modify the buffers passed in (it is almost certainly
if (_panshell) {
node.add_child_nocopy (_panshell->get_state ());
+ if (_panshell->pannable()) {
+ node.add_child_nocopy (_panshell->pannable()->get_state ());
+ }
}
return node;
reset_panner ();
+ XMLNode* pannnode = node.child (X_("Pannable"));
+ if (_panshell && _panshell->panner() && pannnode) {
+ _panshell->pannable()->set_state (*pannnode, version);
+ }
+
return 0;
}
if (panners_legal) {
if (!_no_panner_reset) {
- if (_panshell) {
+ if (_panshell && _role != Insert && _role != Listen) {
_panshell->configure_io (ChanCount (DataType::AUDIO, pans_required()), ChanCount (DataType::AUDIO, pan_outs()));
-
- if (_role == Main) {
- _panshell->pannable()->set_panner (_panshell->panner());
- }
}
}
void
Delivery::panners_became_legal ()
{
- if (_panshell) {
+ if (_panshell && _role != Insert) {
_panshell->configure_io (ChanCount (DataType::AUDIO, pans_required()), ChanCount (DataType::AUDIO, pan_outs()));
-
- if (_role == Main) {
- _panshell->pannable()->set_panner (_panshell->panner());
- }
}
panner_legal_c.disconnect ();
{
bool ret = IOProcessor::set_name (name);
- if (ret) {
+ if (ret && _panshell) {
ret = _panshell->set_name (name);
}