diff --git a/libs/ardour/ardour/delivery.h b/libs/ardour/ardour/delivery.h index 5a3429f4e8..05db44f797 100644 --- a/libs/ardour/ardour/delivery.h +++ b/libs/ardour/ardour/delivery.h @@ -56,10 +56,14 @@ public: /* aux - internal send used to deliver to any bus, by user request */ Aux = 0x10, /* foldback - internal send used only to deliver to a personal monitor bus */ - Foldback = 0x20 + Foldback = 0x20, + /* direct outs - used only with LiveTrax, delivers to master bus */ + DirectOuts = 0x40 }; - static bool role_requires_output_ports (Role r) { return r == Main || r == Send || r == Insert; } + static bool role_from_xml (const XMLNode&, Role&); + + static bool role_requires_output_ports (Role r) { return r == Main || r == Send || r == Insert || r == DirectOuts; } bool does_routing() const { return true; } diff --git a/libs/ardour/delivery.cc b/libs/ardour/delivery.cc index 46d80f0d85..2d8eccf01d 100644 --- a/libs/ardour/delivery.cc +++ b/libs/ardour/delivery.cc @@ -411,6 +411,12 @@ Delivery::state () const return node; } +bool +Delivery::role_from_xml (const XMLNode& node, Role& role) +{ + return node.get_property ("role", role); +} + int Delivery::set_state (const XMLNode& node, int version) { diff --git a/libs/ardour/enums.cc b/libs/ardour/enums.cc index 2dae7613e4..2357c8d9b2 100644 --- a/libs/ardour/enums.cc +++ b/libs/ardour/enums.cc @@ -732,6 +732,7 @@ setup_enum_writer () REGISTER_CLASS_ENUM (Delivery, Main); REGISTER_CLASS_ENUM (Delivery, Aux); REGISTER_CLASS_ENUM (Delivery, Foldback); + REGISTER_CLASS_ENUM (Delivery, DirectOuts); REGISTER_BITS (_Delivery_Role); REGISTER_CLASS_ENUM (MuteMaster, PreFader); diff --git a/libs/ardour/route.cc b/libs/ardour/route.cc index 78b087502f..6869ec852f 100644 --- a/libs/ardour/route.cc +++ b/libs/ardour/route.cc @@ -3328,6 +3328,12 @@ Route::set_processor_state (XMLNode const& node, int version, XMLProperty const* processor->set_owner (this); } else if (prop->value() == "send") { +#ifndef LIVETRAX + Delivery::Role role; + if (Delivery::role_from_xml (node, role) && role == Delivery::DirectOuts) { + return true; + } +#endif processor.reset (new Send (_session, _pannable, _mute_master, Delivery::Send, true)); std::shared_ptr send = std::dynamic_pointer_cast (processor);