diff --git a/libs/ardour/ardour/port.h b/libs/ardour/ardour/port.h index a9fcd0f0ac..d8b2af26b2 100644 --- a/libs/ardour/ardour/port.h +++ b/libs/ardour/ardour/port.h @@ -139,6 +139,7 @@ public: static PBD::Signal0 PortDrop; static PBD::Signal0 PortSignalDrop; + static PBD::Signal0 ResamplerQualityChanged; static void set_varispeed_ratio (double s); //< varispeed playback static bool set_engine_ratio (double session, double engine); //< SR mismatch diff --git a/libs/ardour/port.cc b/libs/ardour/port.cc index dc3d8b328b..fae4cf8ad1 100644 --- a/libs/ardour/port.cc +++ b/libs/ardour/port.cc @@ -41,6 +41,7 @@ using namespace PBD; PBD::Signal0 Port::PortDrop; PBD::Signal0 Port::PortSignalDrop; +PBD::Signal0 Port::ResamplerQualityChanged; bool Port::_connecting_blocked = false; pframes_t Port::_global_port_buffer_offset = 0; @@ -729,10 +730,13 @@ Port::setup_resampler (uint32_t q) _resampler_latency = q - 1; } - if (port_manager && cur_quality != _resampler_quality) { - Glib::Threads::Mutex::Lock lm (port_manager->process_lock ()); - port_manager->reinit (true); - return false; + if (cur_quality != _resampler_quality) { + ResamplerQualityChanged (); /* EMIT SIGNAL */ + if (port_manager) { + Glib::Threads::Mutex::Lock lm (port_manager->process_lock ()); + port_manager->reinit (true); + return false; + } } return true; }