From d762ed8c22edb1007647b5540fa5059993f59f8c Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Wed, 3 Dec 2014 20:53:49 -0500 Subject: alter Async MIDI port implementation to use crossthreadchannel on all platforms --- libs/ardour/ardour/async_midi_port.h | 27 ++++++++++----------------- libs/ardour/async_midi_port.cc | 12 ++++++------ 2 files changed, 16 insertions(+), 23 deletions(-) diff --git a/libs/ardour/ardour/async_midi_port.h b/libs/ardour/ardour/async_midi_port.h index 7fab9e4186..fde8110c19 100644 --- a/libs/ardour/ardour/async_midi_port.h +++ b/libs/ardour/ardour/async_midi_port.h @@ -30,13 +30,13 @@ #include "pbd/ringbuffer.h" #include "evoral/Event.hpp" +#include "evoral/EventRingBuffer.hpp" #include "midi++/types.h" #include "midi++/parser.h" #include "midi++/port.h" #include "ardour/libardour_visibility.h" -#include "ardour/event_ring_buffer.h" #include "ardour/midi_port.h" namespace ARDOUR { @@ -62,20 +62,15 @@ class LIBARDOUR_API AsyncMIDIPort : public ARDOUR::MidiPort, public MIDI::Port { /* clears async request communication channel */ void clear () { -#ifndef PLATFORM_WINDOWS - return xthread.drain (); -#endif + _xthread.drain (); } + + CrossThreadChannel& xthread() { + return _xthread; + } + /* Not selectable; use ios() */ int selectable() const { return -1; } - - Glib::RefPtr ios() { -#ifndef PLATFORM_WINDOWS - return xthread.ios(); -#else - return Glib::RefPtr(0); -#endif - } void set_timer (boost::function&); static void set_process_thread (pthread_t); @@ -88,11 +83,9 @@ class LIBARDOUR_API AsyncMIDIPort : public ARDOUR::MidiPort, public MIDI::Port { bool have_timer; boost::function timer; RingBuffer< Evoral::Event > output_fifo; - EventRingBuffer input_fifo; + Evoral::EventRingBuffer input_fifo; Glib::Threads::Mutex output_fifo_lock; -#ifndef PLATFORM_WINDOWS - CrossThreadChannel xthread; -#endif + CrossThreadChannel _xthread; int create_port (); @@ -106,7 +99,7 @@ class LIBARDOUR_API AsyncMIDIPort : public ARDOUR::MidiPort, public MIDI::Port { void make_connections (); void init (std::string const &, Flags); - void flush_output_fifo (pframes_t); + void flush_output_fifo (pframes_t); static pthread_t _process_thread; }; diff --git a/libs/ardour/async_midi_port.cc b/libs/ardour/async_midi_port.cc index 4ce1bfefbe..f0a92b9594 100644 --- a/libs/ardour/async_midi_port.cc +++ b/libs/ardour/async_midi_port.cc @@ -37,6 +37,10 @@ using namespace ARDOUR; using namespace std; using namespace PBD; +namespace Evoral { + template class EventRingBuffer; +} + pthread_t AsyncMIDIPort::_process_thread; #define port_engine AudioEngine::instance()->port_engine() @@ -49,9 +53,7 @@ AsyncMIDIPort::AsyncMIDIPort (string const & name, PortFlags flags) , have_timer (false) , output_fifo (512) , input_fifo (1024) -#ifndef PLATFORM_WINDOWS - , xthread (true) -#endif + , _xthread (true) { } @@ -132,11 +134,9 @@ AsyncMIDIPort::cycle_start (MIDI::pframes_t nframes) input_fifo.write (when, (Evoral::EventType) 0, (*b).size(), (*b).buffer()); } -#ifndef PLATFORM_WINDOWS if (!mb.empty()) { - xthread.wakeup (); + _xthread.wakeup (); } -#endif } } -- cgit v1.2.3