summaryrefslogtreecommitdiff
path: root/libs/midi++2/midi++/jack.h
diff options
context:
space:
mode:
Diffstat (limited to 'libs/midi++2/midi++/jack.h')
-rw-r--r--libs/midi++2/midi++/jack.h25
1 files changed, 16 insertions, 9 deletions
diff --git a/libs/midi++2/midi++/jack.h b/libs/midi++2/midi++/jack.h
index a449a8c554..18a6f3df68 100644
--- a/libs/midi++2/midi++/jack.h
+++ b/libs/midi++2/midi++/jack.h
@@ -30,9 +30,13 @@
#include <glibmm/thread.h>
-#include "pbd/ringbuffer.h"
#include <jack/jack.h>
#include <jack/midiport.h>
+
+#include "pbd/ringbuffer.h"
+#include "pbd/crossthread.h"
+#include "evoral/EventRingBuffer.hpp"
+
#include "midi++/port.h"
#include "midi++/event.h"
@@ -49,16 +53,16 @@ public:
int write(byte *msg, size_t msglen, timestamp_t timestamp);
int read(byte *buf, size_t max);
- /* No select(2)/poll(2)-based I/O */
- virtual int selectable() const { return -1; }
+ int selectable() const { return xthread.selectable(); }
+ bool must_drain_selectable() const { return true; }
- virtual void cycle_start(nframes_t nframes);
- virtual void cycle_end();
+ void cycle_start(nframes_t nframes);
+ void cycle_end();
static std::string typestring;
- virtual XMLNode& get_state () const;
- virtual void set_state (const XMLNode&);
+ XMLNode& get_state () const;
+ void set_state (const XMLNode&);
static void set_process_thread (pthread_t);
static pthread_t get_process_thread () { return _process_thread; }
@@ -79,13 +83,16 @@ private:
jack_port_t* _jack_output_port;
nframes_t _last_read_index;
timestamp_t _last_write_timestamp;
+ CrossThreadChannel xthread;
void flush (void* jack_port_buffer);
static pthread_t _process_thread;
- RingBuffer< Evoral::Event<double> > non_process_thread_fifo;
- Glib::Mutex non_process_thread_fifo_lock;
+ RingBuffer< Evoral::Event<double> > output_fifo;
+ Evoral::EventRingBuffer<timestamp_t> input_fifo;
+
+ Glib::Mutex output_fifo_lock;
};