treat VCA assign as a RouteGroup property.
[ardour.git] / libs / ardour / ardour / graph.h
index f1ebba698a70b05205b5cb3bd2f64207166e7bd4..239f9ad1abec406c2976e2d1dc48d83cdad47221 100644 (file)
 
 #include <boost/shared_ptr.hpp>
 
-#include <glib/gatomic.h>
-#include <cassert>
-
-#include <pthread.h>
+#include <glib.h>
 
 #include "pbd/semutils.h"
 
+#include "ardour/libardour_visibility.h"
 #include "ardour/types.h"
+#include "ardour/audio_backend.h"
 #include "ardour/session_handle.h"
 
 namespace ARDOUR
@@ -46,20 +45,18 @@ class Graph;
 
 class Route;
 class Session;
-class GraphEdges;      
+class GraphEdges;
 
 typedef boost::shared_ptr<GraphNode> node_ptr_t;
 
 typedef std::list< node_ptr_t > node_list_t;
 typedef std::set< node_ptr_t > node_set_t;
 
-class Graph : public SessionHandleRef
+class LIBARDOUR_API Graph : public SessionHandleRef
 {
 public:
        Graph (Session & session);
 
-       uint32_t threads_in_use () const { return _thread_list.size(); }
-
        void prep();
        void trigger (GraphNode * n);
        void rechain (boost::shared_ptr<RouteList>, GraphEdges const &);
@@ -92,11 +89,8 @@ protected:
        virtual void session_going_away ();
 
 private:
-       std::list<pthread_t> _thread_list;
-       volatile bool        _quit_threads;
-       PBD::ScopedConnection processor_usage_connection;
+       volatile bool        _threads_active;
 
-       void parameter_changed (std::string);
        void reset_thread_list ();
        void drop_threads ();
 
@@ -107,12 +101,12 @@ private:
        std::vector<GraphNode *> _trigger_queue;
        pthread_mutex_t          _trigger_mutex;
 
-       PBD::ProcessSemaphore _execution_sem;
+       PBD::Semaphore _execution_sem;
 
        /** Signalled to start a run of the graph for a process callback */
-       PBD::ProcessSemaphore _callback_start_sem;
-       PBD::ProcessSemaphore _callback_done_sem;
-       PBD::ProcessSemaphore _cleanup_sem;
+       PBD::Semaphore _callback_start_sem;
+       PBD::Semaphore _callback_done_sem;
+       PBD::Semaphore _cleanup_sem;
 
        /** The number of processing threads that are asleep */
        volatile gint _execution_tokens;
@@ -124,8 +118,8 @@ private:
        bool _graph_empty;
 
        // chain swapping
-       Glib::Mutex  _swap_mutex;
-       Glib::Cond   _cleanup_cond;
+       Glib::Threads::Mutex  _swap_mutex;
+        Glib::Threads::Cond   _cleanup_cond;
        volatile int _current_chain;
        volatile int _pending_chain;
        volatile int _setup_chain;
@@ -142,6 +136,10 @@ private:
        bool _process_noroll;
        int  _process_retval;
        bool _process_need_butler;
+
+       // enginer / thread connection
+       PBD::ScopedConnectionList engine_connections;
+       void engine_stopped ();
 };
 
 } // namespace