Route API to query all outputs (incl sends) and graph-feeds
authorRobin Gareus <robin@gareus.org>
Wed, 6 Apr 2016 00:01:17 +0000 (02:01 +0200)
committerRobin Gareus <robin@gareus.org>
Wed, 6 Apr 2016 00:01:17 +0000 (02:01 +0200)
libs/ardour/ardour/route.h
libs/ardour/route.cc

index 3cd225aa3398fde755c5fd694df3abf7c85616bb..5cda2f0d597f848fd7a9737fac5d0655d2b93607 100644 (file)
@@ -91,6 +91,7 @@ class LIBARDOUR_API Route : public SessionObject, public Automatable, public Rou
        boost::shared_ptr<IO> input() const { return _input; }
        boost::shared_ptr<IO> output() const { return _output; }
        IOVector all_inputs () const;
+       IOVector all_outputs () const;
 
        ChanCount n_inputs() const { return _input->n_ports(); }
        ChanCount n_outputs() const { return _output->n_ports(); }
@@ -371,6 +372,8 @@ class LIBARDOUR_API Route : public SessionObject, public Automatable, public Rou
         */
        bool direct_feeds_according_to_graph (boost::shared_ptr<Route>, bool* via_send_only = 0);
 
+       bool feeds_according_to_graph (boost::shared_ptr<Route>);
+
        struct FeedRecord {
                boost::weak_ptr<Route> r;
                bool sends_only;
index 01ab80f9dcfaaf3b1e1d3c84d21712e66749089b..ed23c0e23fa12233b54d5fce24ee17a9f538c424 100644 (file)
@@ -3628,6 +3628,21 @@ Route::all_inputs () const
        return ios;
 }
 
+IOVector
+Route::all_outputs () const
+{
+       IOVector ios;
+       // _output is included via Delivery
+       Glib::Threads::RWLock::ReaderLock lm (_processor_lock);
+       for (ProcessorList::const_iterator r = _processors.begin(); r != _processors.end(); ++r) {
+               boost::shared_ptr<IOProcessor> iop = boost::dynamic_pointer_cast<IOProcessor>(*r);
+               if (iop != 0 && iop->output()) {
+                       ios.push_back (iop->output());
+               }
+       }
+       return ios;
+}
+
 bool
 Route::direct_feeds_according_to_reality (boost::shared_ptr<Route> other, bool* via_send_only)
 {
@@ -3679,6 +3694,12 @@ Route::direct_feeds_according_to_graph (boost::shared_ptr<Route> other, bool* vi
        return _session._current_route_graph.has (shared_from_this (), other, via_send_only);
 }
 
+bool
+Route::feeds_according_to_graph (boost::shared_ptr<Route> other)
+{
+       return _session._current_route_graph.feeds (shared_from_this (), other);
+}
+
 /** Called from the (non-realtime) butler thread when the transport is stopped */
 void
 Route::nonrealtime_handle_transport_stopped (bool /*abort_ignored*/, bool /*did_locate*/, bool can_flush_processors)