projects
/
ardour.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fix clang compilation (include header ordering)
[ardour.git]
/
libs
/
ardour
/
midi_ui.cc
diff --git
a/libs/ardour/midi_ui.cc
b/libs/ardour/midi_ui.cc
index 96304fa05174b588d30ef6b51ae68fed2dcb7260..eb7d1cf7634a1e036a2952a80c76bdd2e85d195e 100644
(file)
--- 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;
using namespace PBD;
using namespace Glib;
-#include "i18n.h"
+#include "
pbd/
i18n.h"
MidiControlUI* MidiControlUI::_instance = 0;
MidiControlUI* MidiControlUI::_instance = 0;
@@
-60,6
+60,17
@@
MidiControlUI::~MidiControlUI ()
_instance = 0;
}
_instance = 0;
}
+void*
+MidiControlUI::request_factory (uint32_t num_requests)
+{
+ /* AbstractUI<T>::request_buffer_factory() is a template method only
+ instantiated in this source module. To provide something visible for
+ use when registering the factory, we have this static method that is
+ template-free.
+ */
+ return request_buffer_factory (num_requests);
+}
+
void
MidiControlUI::do_request (MidiUIRequest* req)
{
void
MidiControlUI::do_request (MidiUIRequest* req)
{
@@
-71,8
+82,13
@@
MidiControlUI::do_request (MidiUIRequest* req)
}
bool
}
bool
-MidiControlUI::midi_input_handler (IOCondition ioc, boost::
shared_ptr<AsyncMIDIPort>
port)
+MidiControlUI::midi_input_handler (IOCondition ioc, boost::
weak_ptr<AsyncMIDIPort> w
port)
{
{
+ boost::shared_ptr<AsyncMIDIPort> port = wport.lock ();
+ if (!port) {
+ return false;
+ }
+
DEBUG_TRACE (DEBUG::MidiIO, string_compose ("something happend on %1\n", boost::shared_ptr<ARDOUR::Port> (port)->name()));
if (ioc & ~IO_IN) {
DEBUG_TRACE (DEBUG::MidiIO, string_compose ("something happend on %1\n", boost::shared_ptr<ARDOUR::Port> (port)->name()));
if (ioc & ~IO_IN) {
@@
-83,7
+99,7
@@
MidiControlUI::midi_input_handler (IOCondition ioc, boost::shared_ptr<AsyncMIDIP
port->clear ();
DEBUG_TRACE (DEBUG::MidiIO, string_compose ("data available on %1\n", boost::shared_ptr<ARDOUR::Port>(port)->name()));
port->clear ();
DEBUG_TRACE (DEBUG::MidiIO, string_compose ("data available on %1\n", boost::shared_ptr<ARDOUR::Port>(port)->name()));
-
fram
epos_t now = _session.engine().sample_time();
+
sampl
epos_t now = _session.engine().sample_time();
port->parse (now);
}
port->parse (now);
}
@@
-119,7
+135,8
@@
MidiControlUI::reset_ports ()
}
for (vector<boost::shared_ptr<AsyncMIDIPort> >::const_iterator pi = ports.begin(); pi != ports.end(); ++pi) {
}
for (vector<boost::shared_ptr<AsyncMIDIPort> >::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<AsyncMIDIPort>(*pi)));
(*pi)->xthread().attach (_main_loop->get_context());
}
}
(*pi)->xthread().attach (_main_loop->get_context());
}
}
@@
-127,19
+144,12
@@
MidiControlUI::reset_ports ()
void
MidiControlUI::thread_init ()
{
void
MidiControlUI::thread_init ()
{
- struct sched_param rtparam;
-
pthread_set_name (X_("midiUI"));
pthread_set_name (X_("midiUI"));
- PBD::notify_
gui_about_thread_creation (X_("gui"),
pthread_self(), X_("midiUI"), 2048);
+ PBD::notify_
event_loops_about_thread_creation (
pthread_self(), X_("midiUI"), 2048);
SessionEvent::create_per_thread_pool (X_("midiUI"), 128);
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 ();
}
reset_ports ();
}