diff --git a/libs/ardour/ardour/port_engine_shared.h b/libs/ardour/ardour/port_engine_shared.h index 6d1951881e..bd7dff0067 100644 --- a/libs/ardour/ardour/port_engine_shared.h +++ b/libs/ardour/ardour/port_engine_shared.h @@ -154,10 +154,8 @@ public: bool physically_connected (PortEngine::PortHandle, bool process_callback_safe); int get_connections (PortEngine::PortHandle, std::vector&, bool process_callback_safe); - virtual void port_connect_callback (const std::string& a, const std::string& b, bool conn) = 0; - virtual void port_connect_add_remove_callback () = 0; - protected: + friend class BackendPort; std::string _instance_name; std::vector _system_inputs; @@ -165,6 +163,31 @@ protected: std::vector _system_midi_in; std::vector _system_midi_out; + struct PortConnectData { + std::string a; + std::string b; + bool c; + + PortConnectData (const std::string& a, const std::string& b, bool c) + : a (a) , b (b) , c (c) {} + }; + + std::vector _port_connection_queue; + pthread_mutex_t _port_callback_mutex; + bool _port_change_flag; + + void port_connect_callback (const std::string& a, const std::string& b, bool conn) { + pthread_mutex_lock (&_port_callback_mutex); + _port_connection_queue.push_back(new PortConnectData(a, b, conn)); + pthread_mutex_unlock (&_port_callback_mutex); + } + + void port_connect_add_remove_callback () { + pthread_mutex_lock (&_port_callback_mutex); + _port_change_flag = true; + pthread_mutex_unlock (&_port_callback_mutex); + } + virtual void update_system_port_latencies (); void clear_ports (); diff --git a/libs/ardour/port_engine_shared.cc b/libs/ardour/port_engine_shared.cc index ad32762f0b..4de619497f 100644 --- a/libs/ardour/port_engine_shared.cc +++ b/libs/ardour/port_engine_shared.cc @@ -37,10 +37,13 @@ BackendPort::BackendPort (PortEngineSharedImpl &b, const std::string& name, Port _capture_latency_range.max = 0; _playback_latency_range.min = 0; _playback_latency_range.max = 0; + + _backend.port_connect_add_remove_callback (); // XXX -> RT } BackendPort::~BackendPort () { + _backend.port_connect_add_remove_callback (); // XXX -> RT assert (_connections.empty()); } @@ -186,14 +189,17 @@ BackendPort::update_connected_latency (bool for_playback) PortEngineSharedImpl::PortEngineSharedImpl (PortManager& mgr, std::string const & str) - : _instance_name (str) + : _instance_name (str) + , _port_change_flag (false) , _portmap (new PortMap) , _ports (new PortIndex) { + pthread_mutex_init (&_port_callback_mutex, 0); } PortEngineSharedImpl::~PortEngineSharedImpl () { + pthread_mutex_destroy (&_port_callback_mutex); } int diff --git a/libs/backends/alsa/alsa_audiobackend.cc b/libs/backends/alsa/alsa_audiobackend.cc index e02338ee04..f8e7d2a3dc 100644 --- a/libs/backends/alsa/alsa_audiobackend.cc +++ b/libs/backends/alsa/alsa_audiobackend.cc @@ -76,10 +76,8 @@ AlsaAudioBackend::AlsaAudioBackend (AudioEngine& e, AudioBackendInfo& info) , _midi_device_thread_active (false) , _dsp_load (0) , _processed_samples (0) - , _port_change_flag (false) { _instance_name = s_instance_name; - pthread_mutex_init (&_port_callback_mutex, 0); pthread_mutex_init (&_device_port_mutex, 0); _input_audio_device_info.valid = false; _output_audio_device_info.valid = false; @@ -91,7 +89,6 @@ AlsaAudioBackend::~AlsaAudioBackend () { clear_ports (); - pthread_mutex_destroy (&_port_callback_mutex); pthread_mutex_destroy (&_device_port_mutex); } @@ -2230,12 +2227,10 @@ AlsaAudioPort::AlsaAudioPort (AlsaAudioBackend &b, const std::string& name, Port { memset (_buffer, 0, sizeof (_buffer)); mlock (_buffer, sizeof (_buffer)); - _backend.port_connect_add_remove_callback (); // XXX -> RT } AlsaAudioPort::~AlsaAudioPort () { - _backend.port_connect_add_remove_callback (); // XXX -> RT } void* @@ -2277,13 +2272,10 @@ AlsaMidiPort::AlsaMidiPort (AlsaAudioBackend &b, const std::string& name, PortFl _buffer[0].reserve(256); _buffer[1].reserve(256); _buffer[2].reserve(256); - - _backend.port_connect_add_remove_callback (); // XXX -> RT } AlsaMidiPort::~AlsaMidiPort () { - _backend.port_connect_add_remove_callback (); // XXX -> RT } struct MidiEventSorter { diff --git a/libs/backends/alsa/alsa_audiobackend.h b/libs/backends/alsa/alsa_audiobackend.h index aa8486c1bd..921978c54a 100644 --- a/libs/backends/alsa/alsa_audiobackend.h +++ b/libs/backends/alsa/alsa_audiobackend.h @@ -119,7 +119,6 @@ class AlsaDeviceReservation class AlsaAudioBackend : public AudioBackend, public PortEngineSharedImpl { - friend class AlsaPort; public: AlsaAudioBackend (AudioEngine& e, AudioBackendInfo& info); ~AlsaAudioBackend (); @@ -375,31 +374,6 @@ class AlsaAudioBackend : public AudioBackend, public PortEngineSharedImpl std::vector _rmidi_out; std::vector _rmidi_in; - struct PortConnectData { - std::string a; - std::string b; - bool c; - - PortConnectData (const std::string& a, const std::string& b, bool c) - : a (a) , b (b) , c (c) {} - }; - - std::vector _port_connection_queue; - pthread_mutex_t _port_callback_mutex; - bool _port_change_flag; - - void port_connect_callback (const std::string& a, const std::string& b, bool conn) { - pthread_mutex_lock (&_port_callback_mutex); - _port_connection_queue.push_back(new PortConnectData(a, b, conn)); - pthread_mutex_unlock (&_port_callback_mutex); - } - - void port_connect_add_remove_callback () { - pthread_mutex_lock (&_port_callback_mutex); - _port_change_flag = true; - pthread_mutex_unlock (&_port_callback_mutex); - } - void update_systemic_audio_latencies (); void update_systemic_midi_latencies (); diff --git a/libs/backends/coreaudio/coreaudio_backend.cc b/libs/backends/coreaudio/coreaudio_backend.cc index 4d02151db9..e882283b34 100644 --- a/libs/backends/coreaudio/coreaudio_backend.cc +++ b/libs/backends/coreaudio/coreaudio_backend.cc @@ -107,10 +107,8 @@ CoreAudioBackend::CoreAudioBackend (AudioEngine& e, AudioBackendInfo& info) , _systemic_audio_output_latency (0) , _dsp_load (0) , _processed_samples (0) - , _port_change_flag (false) { _instance_name = s_instance_name; - pthread_mutex_init (&_port_callback_mutex, 0); pthread_mutex_init (&_port_registration_mutex, 0); pthread_mutex_init (&_process_callback_mutex, 0); pthread_mutex_init (&_freewheel_mutex, 0); @@ -132,7 +130,6 @@ CoreAudioBackend::~CoreAudioBackend () clear_ports (); - pthread_mutex_destroy (&_port_callback_mutex); pthread_mutex_destroy (&_port_registration_mutex); pthread_mutex_destroy (&_process_callback_mutex); pthread_mutex_destroy (&_freewheel_mutex); @@ -1605,13 +1602,10 @@ CoreAudioPort::CoreAudioPort (CoreAudioBackend &b, const std::string& name, Port memset (_buffer, 0, sizeof (_buffer)); mlock (_buffer, sizeof (_buffer)); - _backend.port_connect_add_remove_callback (); // XXX -> RT - } CoreAudioPort::~CoreAudioPort () { - _backend.port_connect_add_remove_callback (); // XXX -> RT } void* diff --git a/libs/backends/coreaudio/coreaudio_backend.h b/libs/backends/coreaudio/coreaudio_backend.h index 9421e20aae..299853f45b 100644 --- a/libs/backends/coreaudio/coreaudio_backend.h +++ b/libs/backends/coreaudio/coreaudio_backend.h @@ -155,7 +155,6 @@ class CoreMidiPort : public BackendPort { }; // class CoreMidiPort class CoreAudioBackend : public AudioBackend, public PortEngineSharedImpl { - friend class CoreBackendPort; public: CoreAudioBackend (AudioEngine& e, AudioBackendInfo& info); ~CoreAudioBackend (); @@ -398,32 +397,6 @@ class CoreAudioBackend : public AudioBackend, public PortEngineSharedImpl { /* port engine */ int register_system_audio_ports (); - struct PortConnectData { - std::string a; - std::string b; - bool c; - - PortConnectData (const std::string& a, const std::string& b, bool c) - : a (a) , b (b) , c (c) {} - }; - - std::vector _port_connection_queue; - pthread_mutex_t _port_callback_mutex; - pthread_mutex_t _port_registration_mutex; - bool _port_change_flag; - - void port_connect_callback (const std::string& a, const std::string& b, bool conn) { - pthread_mutex_lock (&_port_callback_mutex); - _port_connection_queue.push_back(new PortConnectData(a, b, conn)); - pthread_mutex_unlock (&_port_callback_mutex); - } - - void port_connect_add_remove_callback () { - pthread_mutex_lock (&_port_callback_mutex); - _port_change_flag = true; - pthread_mutex_unlock (&_port_callback_mutex); - } - BackendPortPtr find_port_in (std::vector const & plist, const std::string& port_name) const { for (std::vector::const_iterator it = plist.begin (); it != plist.end (); ++it) { if ((*it)->name () == port_name) { diff --git a/libs/backends/dummy/dummy_audiobackend.cc b/libs/backends/dummy/dummy_audiobackend.cc index d4cf9c91a1..5c63376524 100644 --- a/libs/backends/dummy/dummy_audiobackend.cc +++ b/libs/backends/dummy/dummy_audiobackend.cc @@ -77,11 +77,9 @@ DummyAudioBackend::DummyAudioBackend (AudioEngine& e, AudioBackendInfo& info) , _systemic_input_latency (0) , _systemic_output_latency (0) , _processed_samples (0) - , _port_change_flag (false) { _instance_name = s_instance_name; _device = _("Silence"); - pthread_mutex_init (&_port_callback_mutex, 0); if (_driver_speed.empty()) { _driver_speed.push_back (DriverSpeed (_("Half Speed"), 2.0f)); @@ -99,7 +97,6 @@ DummyAudioBackend::DummyAudioBackend (AudioEngine& e, AudioBackendInfo& info) DummyAudioBackend::~DummyAudioBackend () { clear_ports (); - pthread_mutex_destroy (&_port_callback_mutex); } /* AUDIOBACKEND API */ @@ -1113,12 +1110,10 @@ DummyPort::DummyPort (DummyAudioBackend &b, const std::string& name, PortFlags f , _gen_cycle (false) , _engine (b) { - _backend.port_connect_add_remove_callback(); } DummyPort::~DummyPort () { - _backend.port_connect_add_remove_callback(); } void DummyPort::setup_random_number_generator () diff --git a/libs/backends/dummy/dummy_audiobackend.h b/libs/backends/dummy/dummy_audiobackend.h index f1517998f0..65bd5a8c8b 100644 --- a/libs/backends/dummy/dummy_audiobackend.h +++ b/libs/backends/dummy/dummy_audiobackend.h @@ -187,7 +187,6 @@ class DummyMidiPort : public DummyPort { }; // class DummyMidiPort class DummyAudioBackend : public AudioBackend, public PortEngineSharedImpl { - friend class DummyPort; public: DummyAudioBackend (AudioEngine& e, AudioBackendInfo& info); ~DummyAudioBackend (); @@ -405,31 +404,6 @@ class DummyAudioBackend : public AudioBackend, public PortEngineSharedImpl { /* port engine */ int register_system_ports (); - struct PortConnectData { - std::string a; - std::string b; - bool c; - - PortConnectData (const std::string& a, const std::string& b, bool c) - : a (a) , b (b) , c (c) {} - }; - - std::vector _port_connection_queue; - pthread_mutex_t _port_callback_mutex; - bool _port_change_flag; - - void port_connect_callback (const std::string& a, const std::string& b, bool conn) { - pthread_mutex_lock (&_port_callback_mutex); - _port_connection_queue.push_back(new PortConnectData(a, b, conn)); - pthread_mutex_unlock (&_port_callback_mutex); - } - - void port_connect_add_remove_callback () { - pthread_mutex_lock (&_port_callback_mutex); - _port_change_flag = true; - pthread_mutex_unlock (&_port_callback_mutex); - } - BackendPort* port_factory (std::string const & name, ARDOUR::DataType type, ARDOUR::PortFlags); }; // class DummyAudioBackend diff --git a/libs/backends/portaudio/portaudio_backend.cc b/libs/backends/portaudio/portaudio_backend.cc index 01e0c3ecf1..c7a1bb5b4c 100644 --- a/libs/backends/portaudio/portaudio_backend.cc +++ b/libs/backends/portaudio/portaudio_backend.cc @@ -88,10 +88,8 @@ PortAudioBackend::PortAudioBackend (AudioEngine& e, AudioBackendInfo& info) , _systemic_audio_output_latency (0) , _dsp_load (0) , _processed_samples (0) - , _port_change_flag (false) { _instance_name = s_instance_name; - pthread_mutex_init (&_port_callback_mutex, 0); pthread_mutex_init (&_freewheel_mutex, 0); pthread_cond_init (&_freewheel_signal, 0); @@ -108,7 +106,6 @@ PortAudioBackend::~PortAudioBackend () clear_ports (); - pthread_mutex_destroy (&_port_callback_mutex); pthread_mutex_destroy (&_freewheel_mutex); pthread_cond_destroy (&_freewheel_signal); } diff --git a/libs/backends/portaudio/portaudio_backend.h b/libs/backends/portaudio/portaudio_backend.h index 63d1d1f0fb..b4c56b29c9 100644 --- a/libs/backends/portaudio/portaudio_backend.h +++ b/libs/backends/portaudio/portaudio_backend.h @@ -94,7 +94,6 @@ class PortMidiPort : public BackendPort { }; // class PortMidiPort class PortAudioBackend : public AudioBackend, public PortEngineSharedImpl { - friend class PamPort; public: PortAudioBackend (AudioEngine& e, AudioBackendInfo& info); ~PortAudioBackend (); @@ -373,31 +372,6 @@ class PortAudioBackend : public AudioBackend, public PortEngineSharedImpl { int register_system_audio_ports (); int register_system_midi_ports (); - struct PortConnectData { - std::string a; - std::string b; - bool c; - - PortConnectData (const std::string& a, const std::string& b, bool c) - : a (a) , b (b) , c (c) {} - }; - - std::vector _port_connection_queue; - pthread_mutex_t _port_callback_mutex; - bool _port_change_flag; - - void port_connect_callback (const std::string& a, const std::string& b, bool conn) { - pthread_mutex_lock (&_port_callback_mutex); - _port_connection_queue.push_back(new PortConnectData(a, b, conn)); - pthread_mutex_unlock (&_port_callback_mutex); - } - - void port_connect_add_remove_callback () { - pthread_mutex_lock (&_port_callback_mutex); - _port_change_flag = true; - pthread_mutex_unlock (&_port_callback_mutex); - } - }; // class PortAudioBackend } // namespace diff --git a/libs/backends/pulseaudio/pulseaudio_backend.cc b/libs/backends/pulseaudio/pulseaudio_backend.cc index 6b07c45f69..3eb91c0c73 100644 --- a/libs/backends/pulseaudio/pulseaudio_backend.cc +++ b/libs/backends/pulseaudio/pulseaudio_backend.cc @@ -61,17 +61,13 @@ PulseAudioBackend::PulseAudioBackend (AudioEngine& e, AudioBackendInfo& info) , _systemic_audio_output_latency (0) , _dsp_load (0) , _processed_samples (0) - , _port_change_flag (false) { _instance_name = s_instance_name; - pthread_mutex_init (&_port_callback_mutex, 0); } PulseAudioBackend::~PulseAudioBackend () { clear_ports (); - - pthread_mutex_destroy (&_port_callback_mutex); } /* Pulseaudio */ @@ -1214,12 +1210,10 @@ PulseAudioPort::PulseAudioPort (PulseAudioBackend& b, const std::string& name, P { memset (_buffer, 0, sizeof (_buffer)); mlock (_buffer, sizeof (_buffer)); - _backend.port_connect_add_remove_callback (); // XXX -> RT } PulseAudioPort::~PulseAudioPort () { - _backend.port_connect_add_remove_callback (); // XXX -> RT } void* @@ -1254,12 +1248,10 @@ PulseMidiPort::PulseMidiPort (PulseAudioBackend& b, const std::string& name, Por { _buffer.clear (); _buffer.reserve (256); - _backend.port_connect_add_remove_callback (); // XXX -> RT } PulseMidiPort::~PulseMidiPort () { - _backend.port_connect_add_remove_callback (); // XXX -> RT } struct MidiEventSorter { diff --git a/libs/backends/pulseaudio/pulseaudio_backend.h b/libs/backends/pulseaudio/pulseaudio_backend.h index c8b7686496..22561db41d 100644 --- a/libs/backends/pulseaudio/pulseaudio_backend.h +++ b/libs/backends/pulseaudio/pulseaudio_backend.h @@ -97,8 +97,6 @@ private: class PulseAudioBackend : public AudioBackend, public PortEngineSharedImpl { - friend class PulsePort; - public: PulseAudioBackend (AudioEngine& e, AudioBackendInfo& info); ~PulseAudioBackend (); @@ -296,35 +294,6 @@ private: BackendPort* port_factory (std::string const & name, ARDOUR::DataType dt, ARDOUR::PortFlags flags); int register_system_ports (); - struct PortConnectData { - std::string a; - std::string b; - bool c; - - PortConnectData (const std::string& a, const std::string& b, bool c) - : a (a), b (b), c (c) {} - }; - - std::vector _port_connection_queue; - pthread_mutex_t _port_callback_mutex; - bool _port_change_flag; - - void - port_connect_callback (const std::string& a, const std::string& b, bool conn) - { - pthread_mutex_lock (&_port_callback_mutex); - _port_connection_queue.push_back (new PortConnectData (a, b, conn)); - pthread_mutex_unlock (&_port_callback_mutex); - } - - void - port_connect_add_remove_callback () - { - pthread_mutex_lock (&_port_callback_mutex); - _port_change_flag = true; - pthread_mutex_unlock (&_port_callback_mutex); - } - }; // class PulseAudioBackend } // namespace