13
0

update disk writer input latency at transport stop

This commit is contained in:
Paul Davis 2017-06-23 16:34:12 -04:00
parent 79abf3dfa6
commit c6bd033523
3 changed files with 14 additions and 9 deletions

View File

@ -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;

View File

@ -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"
*/

View File

@ -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