summaryrefslogtreecommitdiff
path: root/libs/ardour
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2017-06-23 16:34:12 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2017-09-18 11:40:53 -0400
commitc6bd03352382094b9d8996c16c1a681c2cb495c3 (patch)
tree6a069c0baa1e2204b0778650a561c188229f612c /libs/ardour
parent79abf3dfa6d649fbf1fb6fd16cd489f434d0b909 (diff)
update disk writer input latency at transport stop
Diffstat (limited to 'libs/ardour')
-rw-r--r--libs/ardour/ardour/track.h3
-rw-r--r--libs/ardour/session.cc10
-rw-r--r--libs/ardour/track.cc10
3 files changed, 14 insertions, 9 deletions
diff --git a/libs/ardour/ardour/track.h b/libs/ardour/ardour/track.h
index 77755ab088..33903c2b91 100644
--- a/libs/ardour/ardour/track.h
+++ b/libs/ardour/ardour/track.h
@@ -83,7 +83,7 @@ class LIBARDOUR_API Track : public Route, public Recordable
bool can_record();
void set_latency_compensation (framecnt_t);
-
+ void update_latency_information ();
enum FreezeState {
NoFreeze,
Frozen,
@@ -146,7 +146,6 @@ class LIBARDOUR_API Track : public Route, public Recordable
void ensure_input_monitoring (bool);
bool destructive () const;
std::list<boost::shared_ptr<Source> > & last_capture_sources ();
- void set_capture_offset ();
std::string steal_write_source_name ();
void reset_write_sources (bool, bool force = false);
float playback_buffer_load () const;
diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc
index 87adc25275..01c8bfa62f 100644
--- a/libs/ardour/session.cc
+++ b/libs/ardour/session.cc
@@ -5737,7 +5737,7 @@ Session::graph_reordered ()
for (RouteList::iterator i = rl->begin(); i != rl->end(); ++i) {
boost::shared_ptr<Track> tr = boost::dynamic_pointer_cast<Track> (*i);
if (tr) {
- tr->set_capture_offset ();
+ tr->update_latency_information ();
}
}
}
@@ -6936,7 +6936,7 @@ Session::post_capture_latency ()
for (RouteList::iterator i = rl->begin(); i != rl->end(); ++i) {
boost::shared_ptr<Track> tr = boost::dynamic_pointer_cast<Track> (*i);
if (tr) {
- tr->set_capture_offset ();
+ tr->update_latency_information ();
}
}
}
@@ -7045,7 +7045,7 @@ Session::update_latency_compensation (bool force_whole_graph)
if (!tr) {
continue;
}
- tr->set_capture_offset ();
+ tr->update_latency_information ();
}
}
@@ -7378,8 +7378,8 @@ Session::auto_connect_thread_run ()
/* this is only used for updating plugin latencies, the
* graph does not change. so it's safe in general.
* BUT..
- * .. update_latency_compensation () entails set_capture_offset()
- * which calls Diskstream::set_capture_offset () which
+ * .. update_latency_compensation () entails Track::update_latency_information()
+ * which calls DiskWriter::set_capture_offset () which
* modifies the capture offset... which can be a proplem
* in "prepare_to_stop"
*/
diff --git a/libs/ardour/track.cc b/libs/ardour/track.cc
index d1f49fab63..c9f581add2 100644
--- a/libs/ardour/track.cc
+++ b/libs/ardour/track.cc
@@ -627,9 +627,15 @@ Track::last_capture_sources ()
}
void
-Track::set_capture_offset ()
+Track::update_latency_information ()
{
- _disk_writer->set_capture_offset ();
+ Glib::Threads::RWLock::ReaderLock lr (_processor_lock);
+ framecnt_t chain_latency = _input->latency ();
+
+ for (ProcessorList::iterator p = _processors.begin(); p != _processors.end(); ++p) {
+ (*p)->set_input_latency (chain_latency);
+ chain_latency += (*p)->signal_latency ();
+ }
}
std::string