diff options
-rw-r--r-- | libs/ardour/midi_ui.cc | 5 | ||||
-rw-r--r-- | libs/midi++2/midi++/port.h | 40 | ||||
-rw-r--r-- | libs/midi++2/port.cc | 6 |
3 files changed, 30 insertions, 21 deletions
diff --git a/libs/ardour/midi_ui.cc b/libs/ardour/midi_ui.cc index b9271ccd49..770a371457 100644 --- a/libs/ardour/midi_ui.cc +++ b/libs/ardour/midi_ui.cc @@ -133,6 +133,11 @@ MidiControlUI::reset_ports () boost::shared_ptr<const MIDI::Manager::PortList> plist = MIDI::Manager::instance()->get_midi_ports (); for (MIDI::Manager::PortList::const_iterator i = plist->begin(); i != plist->end(); ++i) { + + if (!(*i)->centrally_parsed()) { + continue; + } + int fd; if ((fd = (*i)->selectable ()) >= 0) { diff --git a/libs/midi++2/midi++/port.h b/libs/midi++2/midi++/port.h index f7bef36b1f..6b4381d496 100644 --- a/libs/midi++2/midi++/port.h +++ b/libs/midi++2/midi++/port.h @@ -108,6 +108,9 @@ class Port { const char *name () const { return _tagname.c_str(); } bool ok () const { return _ok; } + bool centrally_parsed() const { return _centrally_parsed; } + void set_centrally_parsed(bool yn) { _centrally_parsed = yn; } + bool receives_input () const { return _flags == IsInput; } @@ -139,23 +142,28 @@ class Port { static PBD::Signal0<void> JackHalted; private: - bool _ok; - bool _currently_in_cycle; - pframes_t _nframes_this_cycle; - std::string _tagname; - size_t _number; - Channel *_channel[16]; - Parser *_parser; + bool _ok; + bool _currently_in_cycle; + pframes_t _nframes_this_cycle; + std::string _tagname; + size_t _number; + Channel* _channel[16]; + Parser* _parser; + jack_client_t* _jack_client; + jack_port_t* _jack_port; + framecnt_t _last_read_index; + timestamp_t _last_write_timestamp; + RingBuffer< Evoral::Event<double> > output_fifo; + Evoral::EventRingBuffer<timestamp_t> input_fifo; + Glib::Mutex output_fifo_lock; + CrossThreadChannel xthread; + Flags _flags; + bool _centrally_parsed; - int create_port (); - jack_client_t* _jack_client; - jack_port_t* _jack_port; - framecnt_t _last_read_index; - timestamp_t _last_write_timestamp; + int create_port (); /** Channel used to signal to the MidiControlUI that input has arrived */ - CrossThreadChannel xthread; std::string _connections; PBD::ScopedConnection connect_connection; @@ -167,12 +175,6 @@ private: static pthread_t _process_thread; - RingBuffer< Evoral::Event<double> > output_fifo; - Evoral::EventRingBuffer<timestamp_t> input_fifo; - - Glib::Mutex output_fifo_lock; - - Flags _flags; }; struct PortSet { diff --git a/libs/midi++2/port.cc b/libs/midi++2/port.cc index 378548ca03..b5a16eef01 100644 --- a/libs/midi++2/port.cc +++ b/libs/midi++2/port.cc @@ -51,10 +51,11 @@ Port::Port (string const & name, Flags flags, jack_client_t* jack_client) , _jack_client (jack_client) , _jack_port (0) , _last_read_index (0) - , xthread (true) , output_fifo (512) , input_fifo (1024) + , xthread (true) , _flags (flags) + , _centrally_parsed (true) { assert (jack_client); init (name, flags); @@ -66,9 +67,10 @@ Port::Port (const XMLNode& node, jack_client_t* jack_client) , _jack_client (jack_client) , _jack_port (0) , _last_read_index (0) - , xthread (true) , output_fifo (512) , input_fifo (1024) + , xthread (true) + , _centrally_parsed (true) { assert (jack_client); |