mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-16 11:46:25 +01:00
Refactor port change handling part of PA Backend process function into new method
This commit is contained in:
parent
684701427e
commit
7b23f80b03
2 changed files with 35 additions and 29 deletions
|
|
@ -1601,35 +1601,7 @@ PortAudioBackend::main_blocking_process_thread ()
|
||||||
Glib::usleep (100); // don't hog cpu
|
Glib::usleep (100); // don't hog cpu
|
||||||
}
|
}
|
||||||
|
|
||||||
bool connections_changed = false;
|
process_port_connection_changes();
|
||||||
bool ports_changed = false;
|
|
||||||
if (!pthread_mutex_trylock (&_port_callback_mutex)) {
|
|
||||||
if (_port_change_flag) {
|
|
||||||
ports_changed = true;
|
|
||||||
_port_change_flag = false;
|
|
||||||
}
|
|
||||||
if (!_port_connection_queue.empty ()) {
|
|
||||||
connections_changed = true;
|
|
||||||
}
|
|
||||||
while (!_port_connection_queue.empty ()) {
|
|
||||||
PortConnectData *c = _port_connection_queue.back ();
|
|
||||||
manager.connect_callback (c->a, c->b, c->c);
|
|
||||||
_port_connection_queue.pop_back ();
|
|
||||||
delete c;
|
|
||||||
}
|
|
||||||
pthread_mutex_unlock (&_port_callback_mutex);
|
|
||||||
}
|
|
||||||
if (ports_changed) {
|
|
||||||
manager.registration_callback();
|
|
||||||
}
|
|
||||||
if (connections_changed) {
|
|
||||||
manager.graph_order_callback();
|
|
||||||
}
|
|
||||||
if (connections_changed || ports_changed) {
|
|
||||||
engine.latency_callback(false);
|
|
||||||
engine.latency_callback(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
_pcmio->close_stream();
|
_pcmio->close_stream();
|
||||||
_active = false;
|
_active = false;
|
||||||
|
|
@ -1644,6 +1616,38 @@ PortAudioBackend::main_blocking_process_thread ()
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
PortAudioBackend::process_port_connection_changes ()
|
||||||
|
{
|
||||||
|
bool connections_changed = false;
|
||||||
|
bool ports_changed = false;
|
||||||
|
if (!pthread_mutex_trylock (&_port_callback_mutex)) {
|
||||||
|
if (_port_change_flag) {
|
||||||
|
ports_changed = true;
|
||||||
|
_port_change_flag = false;
|
||||||
|
}
|
||||||
|
if (!_port_connection_queue.empty ()) {
|
||||||
|
connections_changed = true;
|
||||||
|
}
|
||||||
|
while (!_port_connection_queue.empty ()) {
|
||||||
|
PortConnectData *c = _port_connection_queue.back ();
|
||||||
|
manager.connect_callback (c->a, c->b, c->c);
|
||||||
|
_port_connection_queue.pop_back ();
|
||||||
|
delete c;
|
||||||
|
}
|
||||||
|
pthread_mutex_unlock (&_port_callback_mutex);
|
||||||
|
}
|
||||||
|
if (ports_changed) {
|
||||||
|
manager.registration_callback();
|
||||||
|
}
|
||||||
|
if (connections_changed) {
|
||||||
|
manager.graph_order_callback();
|
||||||
|
}
|
||||||
|
if (connections_changed || ports_changed) {
|
||||||
|
engine.latency_callback(false);
|
||||||
|
engine.latency_callback(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -323,6 +323,8 @@ class PortAudioBackend : public AudioBackend {
|
||||||
bool start_blocking_process_thread ();
|
bool start_blocking_process_thread ();
|
||||||
bool stop_blocking_process_thread ();
|
bool stop_blocking_process_thread ();
|
||||||
|
|
||||||
|
void process_port_connection_changes ();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::string _instance_name;
|
std::string _instance_name;
|
||||||
PortAudioIO *_pcmio;
|
PortAudioIO *_pcmio;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue