split up session code that uses parts of the JACK API (timebase + session event handl...
[ardour.git] / libs / ardour / ardour / audioengine.h
index 4412faca2212fe1ae95b14b213b1c18e6ba1e954..f05944797d35fefafaf85c823593a83fd05cf249 100644 (file)
 #include "pbd/signals.h"
 #include "pbd/stacktrace.h"
 
-#include <jack/weakjack.h>
-#include <jack/jack.h>
-#include <jack/transport.h>
-#include <jack/thread.h>
+#include "midi++/mmc.h"
 
 #include "ardour/ardour.h"
-
 #include "ardour/data_type.h"
 #include "ardour/session_handle.h"
 #include "ardour/types.h"
@@ -74,7 +70,9 @@ public:
     int discover_backends();
     std::vector<const AudioBackendInfo*> available_backends() const;
     std::string current_backend_name () const;
-    int set_backend (const std::string&, const std::string& arg1, const std::string& arg2);
+    boost::shared_ptr<AudioBackend> set_backend (const std::string&, const std::string& arg1, const std::string& arg2);
+    boost::shared_ptr<AudioBackend> current_backend() const { return _backend; }
+    bool setup_required () const;
 
     ProcessThread* main_thread() const { return _main_thread; }
     
@@ -131,7 +129,8 @@ public:
     
     void set_session (Session *);
     void remove_session (); // not a replacement for SessionHandle::session_going_away()
-    
+    Session* session() const { return _session; }
+
     class NoBackendAvailable : public std::exception {
       public:
        virtual const char *what() const throw() { return "could not connect to engine backend"; }
@@ -150,12 +149,7 @@ public:
     PBD::Signal1<int, pframes_t> Freewheel;
     
     PBD::Signal0<void> Xrun;
-    
 
-#ifdef HAVE_JACK_SESSION
-    PBD::Signal1<void,jack_session_event_t *> JackSessionEvent;
-#endif
-    
     /* this signal is emitted if the sample rate changes */
     
     PBD::Signal1<void, framecnt_t> SampleRateChanged;
@@ -171,13 +165,6 @@ public:
     PBD::Signal0<void> Running;
     PBD::Signal0<void> Stopped;
 
-    /* these two are emitted as we create backends that
-       can actually be used to do stuff (e.g. register ports)
-    */
-    
-    PBD::Signal0<void> BackendAvailable;
-    PBD::Signal0<void> BackendRemoved;
-    
     static AudioEngine* instance() { return _instance; }
     static void destroy();
     void died ();
@@ -197,6 +184,8 @@ public:
     /* sets up the process callback thread */
     static void thread_init_callback (void *);
 
+    MIDI::MachineControl& mmc() { return _mmc; }
+
   private:
     AudioEngine ();
 
@@ -211,22 +200,17 @@ public:
     gain_t                     session_removal_gain;
     gain_t                     session_removal_gain_step;
     bool                      _running;
-    bool                      _has_run;
-    mutable framecnt_t        _buffer_size;
-    std::map<DataType,size_t> _raw_buffer_sizes;
-    mutable framecnt_t        _frame_rate;
+    bool                      _freewheeling;
     /// number of frames between each check for changes in monitor input
     framecnt_t                 monitor_check_interval;
     /// time of the last monitor check in frames
     framecnt_t                 last_monitor_check;
     /// the number of frames processed since start() was called
     framecnt_t                _processed_frames;
-    bool                      _freewheeling;
     bool                      _pre_freewheel_mmc_enabled;
-    int                       _usecs_per_cycle;
-    bool                       port_remove_in_progress;
     Glib::Threads::Thread*     m_meter_thread;
     ProcessThread*            _main_thread;
+    MIDI::MachineControl      _mmc;
     
     void meter_thread ();
     void start_metering_thread ();