X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fmidi_ui.cc;h=eb7d1cf7634a1e036a2952a80c76bdd2e85d195e;hb=9775c5c9f1b81340f3177ede038f02faed71c887;hp=8d924350bf680b55050c7b43d8a50af6a91edaee;hpb=97f180c432fb250fe5683cc88f2112c14414a483;p=ardour.git diff --git a/libs/ardour/midi_ui.cc b/libs/ardour/midi_ui.cc index 8d924350bf..eb7d1cf763 100644 --- a/libs/ardour/midi_ui.cc +++ b/libs/ardour/midi_ui.cc @@ -37,7 +37,7 @@ using namespace ARDOUR; using namespace PBD; using namespace Glib; -#include "i18n.h" +#include "pbd/i18n.h" MidiControlUI* MidiControlUI::_instance = 0; @@ -82,12 +82,16 @@ MidiControlUI::do_request (MidiUIRequest* req) } bool -MidiControlUI::midi_input_handler (IOCondition ioc, boost::shared_ptr port) +MidiControlUI::midi_input_handler (IOCondition ioc, boost::weak_ptr wport) { + boost::shared_ptr port = wport.lock (); + if (!port) { + return false; + } + DEBUG_TRACE (DEBUG::MidiIO, string_compose ("something happend on %1\n", boost::shared_ptr (port)->name())); - cerr << "Something happened on " << boost::shared_ptr (port)->name() << " ioc = " << hex << ioc << dec << endl; + if (ioc & ~IO_IN) { - cerr << "....no input ... do nothing\n"; return false; } @@ -95,8 +99,7 @@ MidiControlUI::midi_input_handler (IOCondition ioc, boost::shared_ptrclear (); DEBUG_TRACE (DEBUG::MidiIO, string_compose ("data available on %1\n", boost::shared_ptr(port)->name())); - cerr << "....input appears ready\n"; - framepos_t now = _session.engine().sample_time(); + samplepos_t now = _session.engine().sample_time(); port->parse (now); } @@ -132,7 +135,8 @@ MidiControlUI::reset_ports () } for (vector >::const_iterator pi = ports.begin(); pi != ports.end(); ++pi) { - (*pi)->xthread().set_receive_handler (sigc::bind (sigc::mem_fun (this, &MidiControlUI::midi_input_handler), *pi)); + (*pi)->xthread().set_receive_handler (sigc::bind ( + sigc::mem_fun (this, &MidiControlUI::midi_input_handler), boost::weak_ptr(*pi))); (*pi)->xthread().attach (_main_loop->get_context()); } } @@ -140,19 +144,12 @@ MidiControlUI::reset_ports () void MidiControlUI::thread_init () { - struct sched_param rtparam; - pthread_set_name (X_("midiUI")); PBD::notify_event_loops_about_thread_creation (pthread_self(), X_("midiUI"), 2048); SessionEvent::create_per_thread_pool (X_("midiUI"), 128); - memset (&rtparam, 0, sizeof (rtparam)); - rtparam.sched_priority = 9; /* XXX should be relative to audio (JACK) thread */ - - if (pthread_setschedparam (pthread_self(), SCHED_FIFO, &rtparam) != 0) { - // do we care? not particularly. - } + set_thread_priority (); reset_ports (); }