add "centrally-parsed" property to MIDI::Port so that we can avoid the MidiUI loop from handling input for *all* MIDI ports created

git-svn-id: svn://localhost/ardour2/branches/3.0@11871 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Paul Davis 2012-04-10 16:27:01 +00:00
parent a8094bb49c
commit 893b468858
3 changed files with 30 additions and 21 deletions

View File

@ -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) {

View File

@ -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;
/** 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 {

View File

@ -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);