X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fardour%2Fbutler.h;h=3c254648ffa9ccb132e2f47bab878655b769994d;hb=79abf3dfa6d649fbf1fb6fd16cd489f434d0b909;hp=226aacbbaddae54b9a24d34b186f751b3d8e1602;hpb=4861eca97483128e5febb575b94688581abb0154;p=ardour.git diff --git a/libs/ardour/ardour/butler.h b/libs/ardour/ardour/butler.h index 226aacbbad..3c254648ff 100644 --- a/libs/ardour/ardour/butler.h +++ b/libs/ardour/ardour/butler.h @@ -24,12 +24,10 @@ #include -#ifdef PLATFORM_WINDOWS -#include "pbd/glib_semaphore.h" -#endif - +#include "pbd/crossthread.h" #include "pbd/ringbuffer.h" #include "pbd/pool.h" +#include "ardour/libardour_visibility.h" #include "ardour/types.h" #include "ardour/session_handle.h" @@ -44,7 +42,7 @@ namespace ARDOUR { * are empty they are deleted. */ -class Butler : public SessionHandleRef +class LIBARDOUR_API Butler : public SessionHandleRef { public: Butler (Session& session); @@ -59,10 +57,14 @@ class Butler : public SessionHandleRef bool transport_work_requested() const; void drop_references (); + void map_parameters (); + framecnt_t audio_diskstream_capture_buffer_size() const { return audio_dstream_capture_buffer_size; } framecnt_t audio_diskstream_playback_buffer_size() const { return audio_dstream_playback_buffer_size; } uint32_t midi_diskstream_buffer_size() const { return midi_dstream_buffer_size; } + bool flush_tracks_to_disk_after_locate (boost::shared_ptr, uint32_t& errors); + static void* _thread_work(void *arg); void* thread_work(); @@ -75,6 +77,7 @@ class Butler : public SessionHandleRef }; pthread_t thread; + bool have_thread; Glib::Threads::Mutex request_lock; Glib::Threads::Cond paused; bool should_run; @@ -82,40 +85,21 @@ class Butler : public SessionHandleRef framecnt_t audio_dstream_capture_buffer_size; framecnt_t audio_dstream_playback_buffer_size; uint32_t midi_dstream_buffer_size; - RingBuffer pool_trash; - -#ifdef PLATFORM_WINDOWS - PBD::atomic_counter m_request_state; - PBD::GlibSemaphore m_request_sem; -#else - int request_pipe[2]; -#endif + PBD::RingBuffer pool_trash; private: void empty_pool_trash (); void config_changed (std::string); -#ifndef PLATFORM_WINDOWS - int setup_request_pipe (); -#endif - - /** - * return true if there are requests to be processed - */ - bool wait_for_requests (); - - /** - * Remove request from butler request queue - * - * return true if there was another request and req is valid - */ - bool dequeue_request (Request::Type& req); + bool flush_tracks_to_disk_normal (boost::shared_ptr, uint32_t& errors); /** * Add request to butler thread request queue */ void queue_request (Request::Type r); + CrossThreadChannel _xthread; + }; } // namespace ARDOUR