From: Paul Davis Date: Fri, 23 Jun 2017 20:34:12 +0000 (-0400) Subject: update disk writer input latency at transport stop X-Git-Tag: 6.0-pre0~97 X-Git-Url: https://main.carlh.net/gitweb/?p=ardour.git;a=commitdiff_plain;h=c6bd03352382094b9d8996c16c1a681c2cb495c3 update disk writer input latency at transport stop --- 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 > & 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 tr = boost::dynamic_pointer_cast (*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 tr = boost::dynamic_pointer_cast (*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