summaryrefslogtreecommitdiff
path: root/libs/ardour/audio_unit.cc
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2016-07-16 18:43:10 +0200
committerRobin Gareus <robin@gareus.org>2016-07-16 18:43:10 +0200
commitfaefc3ba9a42417b133235e0a9efeaba467aad5f (patch)
tree2c86de3fb9c36b797ca26520bdab8bd19fcb9250 /libs/ardour/audio_unit.cc
parentb7d730433bb122387d6062bc59e6c96d0e72d4fa (diff)
improve AU Latency PropertyChange Events
Diffstat (limited to 'libs/ardour/audio_unit.cc')
-rw-r--r--libs/ardour/audio_unit.cc18
1 files changed, 10 insertions, 8 deletions
diff --git a/libs/ardour/audio_unit.cc b/libs/ardour/audio_unit.cc
index 3e6bdfb691..85a387e933 100644
--- a/libs/ardour/audio_unit.cc
+++ b/libs/ardour/audio_unit.cc
@@ -431,7 +431,7 @@ AUPlugin::AUPlugin (AudioEngine& engine, Session& session, boost::shared_ptr<CAC
, unit (new CAAudioUnit)
, initialized (false)
, _last_nframes (0)
- , _current_latency (-1)
+ , _current_latency (UINT_MAX)
, _requires_fixed_size_buffers (false)
, buffers (0)
, variable_inputs (false)
@@ -472,7 +472,7 @@ AUPlugin::AUPlugin (const AUPlugin& other)
, unit (new CAAudioUnit)
, initialized (false)
, _last_nframes (0)
- , _current_latency (-1)
+ , _current_latency (UINT_MAX)
, _requires_fixed_size_buffers (false)
, buffers (0)
, variable_inputs (false)
@@ -955,10 +955,12 @@ AUPlugin::default_value (uint32_t port)
framecnt_t
AUPlugin::signal_latency () const
{
- if (_current_latency < 0) {
- _current_latency = unit->Latency() * _session.frame_rate();
+ guint lat = g_atomic_int_get (&_current_latency);;
+ if (lat == UINT_MAX) {
+ lat = unit->Latency() * _session.frame_rate();
+ g_atomic_int_set (&_current_latency, lat);
}
- return _current_latency;
+ return lat;
}
void
@@ -3474,9 +3476,9 @@ AUPlugin::parameter_change_listener (void* /*arg*/, void* src, const AudioUnitEv
{
if (event->mEventType == kAudioUnitEvent_PropertyChange) {
if (event->mArgument.mProperty.mPropertyID == kAudioUnitProperty_Latency) {
- DEBUG_TRACE (DEBUG::AudioUnits, string_compose("AU Latency Change Event %1 <> %1\n", new_value, unit->Latency()));
- // TODO atomically set //_current_latency = -1;
- _current_latency = unit->Latency() * _session.frame_rate(); // TODO: check: new_value
+ DEBUG_TRACE (DEBUG::AudioUnits, string_compose("AU Latency Change Event %1 <> %2\n", new_value, unit->Latency()));
+ guint lat = unit->Latency() * _session.frame_rate();
+ g_atomic_int_set (&_current_latency, lat);
}
return;
}