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:
parent
a8094bb49c
commit
893b468858
|
@ -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) {
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user