Delayline: report if set_delay() actually changed the delay
authorRobin Gareus <robin@gareus.org>
Fri, 29 Sep 2017 02:07:20 +0000 (04:07 +0200)
committerRobin Gareus <robin@gareus.org>
Fri, 29 Sep 2017 03:03:48 +0000 (05:03 +0200)
libs/ardour/ardour/delayline.h
libs/ardour/delayline.cc

index eeeb2beea7ac4e2fde1aca23e269bd51b5f3ea30..80a032374ea93b0ab896cd15b0a41fa5209df69d 100644 (file)
@@ -43,7 +43,7 @@ public:
        bool display_to_user() const { return false; }
 
        void run (BufferSet&, samplepos_t, samplepos_t, double, pframes_t, bool);
-       void set_delay(samplecnt_t signal_delay);
+       bool set_delay(samplecnt_t signal_delay);
        samplecnt_t get_delay() { return _pending_delay; }
 
        bool configure_io (ChanCount in, ChanCount out);
index d92eec6a0aa674de0f361711cb155585c41a23b1..0416a9a0bb5ce9634ad1905d9b1ec93df5a3eab5 100644 (file)
@@ -283,7 +283,7 @@ DelayLine::run (BufferSet& bufs, samplepos_t /* start_sample */, samplepos_t /*
        _delay = pending_delay;
 }
 
-void
+bool
 DelayLine::set_delay(samplecnt_t signal_delay)
 {
        if (signal_delay < 0) {
@@ -291,13 +291,20 @@ DelayLine::set_delay(samplecnt_t signal_delay)
                cerr << "WARNING: latency compensation is not possible.\n";
        }
 
+       if (signal_delay == _pending_delay) {
+               DEBUG_TRACE (DEBUG::LatencyCompensation,
+                               string_compose ("%1 set_delay - no change: %2 samples for %3 channels\n",
+                                       name(), signal_delay, _configured_output.n_audio()));
+               return false;
+       }
+
        DEBUG_TRACE (DEBUG::LatencyCompensation,
                        string_compose ("%1 set_delay to %2 samples for %3 channels\n",
                                name(), signal_delay, _configured_output.n_audio()));
 
        if (signal_delay <= _bsiz) {
                _pending_delay = signal_delay;
-               return;
+               return true;
        }
 
        if (_pending_bsiz) {
@@ -306,7 +313,7 @@ DelayLine::set_delay(samplecnt_t signal_delay)
                } else {
                        _pending_delay = signal_delay;
                }
-               return;
+               return true;
        }
 
        allocate_pending_buffers (signal_delay);
@@ -316,6 +323,8 @@ DelayLine::set_delay(samplecnt_t signal_delay)
        DEBUG_TRACE (DEBUG::LatencyCompensation,
                        string_compose ("allocated buffer for %1 of size %2\n",
                                name(), signal_delay));
+
+       return true;
 }
 
 bool