forward propagate solo-isolated status to everything fed by a route by something...
[ardour.git] / libs / ardour / ardour / butler.h
index 524651ba28f61c6f0cff29e7f0e7df5ddc30ff19..b88b82073605385a3dcc3d8dc6a6ba49500ea34e 100644 (file)
 
 namespace ARDOUR {
 
+class Session;
+
 class Butler {
 public:
-       Butler();
+       Butler(Session* session);
        ~Butler();
 
+       int  start_thread();
+       void terminate_thread();
+       void schedule_transport_work();
+       void summon();
+       void stop();
+       void wait_until_finished();
+       bool transport_work_requested() const;
+
+       float read_data_rate() const; ///< in usec
+       float write_data_rate() const;
+
+       uint32_t audio_diskstream_buffer_size() const { return audio_dstream_buffer_size; }
+       uint32_t midi_diskstream_buffer_size()  const { return midi_dstream_buffer_size; }
+
+       static void* _thread_work(void *arg);
+       void*         thread_work();
+
+       struct Request {
+               enum Type {
+                       Wake,
+                       Run,
+                       Pause,
+                       Quit
+               };
+       };
+
+       Session*     session;
        pthread_t    thread;
        Glib::Mutex  request_lock;
        Glib::Cond   paused;
        bool         should_run;
        mutable gint should_do_transport_work;
        int          request_pipe[2];
+       uint32_t     audio_dstream_buffer_size;
+       uint32_t     midi_dstream_buffer_size;
 };
 
 } // namespace ARDOUR