From 9885f04fe6e69bce59271aaa98998b7331153bc0 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Fri, 21 Jul 2017 14:29:35 -0400 Subject: tweaks to disk io point mechanisms --- libs/ardour/ardour/track.h | 1 + libs/ardour/disk_io.cc | 2 ++ libs/ardour/disk_reader.cc | 1 + libs/ardour/track.cc | 44 +++++++++++++++++++++++++++++++++++--------- 4 files changed, 39 insertions(+), 9 deletions(-) (limited to 'libs/ardour') diff --git a/libs/ardour/ardour/track.h b/libs/ardour/ardour/track.h index 1bd65a984c..d14ccdc938 100644 --- a/libs/ardour/ardour/track.h +++ b/libs/ardour/ardour/track.h @@ -186,6 +186,7 @@ class LIBARDOUR_API Track : public Route, public Recordable void adjust_capture_buffering (); void set_disk_io_position (DiskIOPoint); + DiskIOPoint disk_io_point() const { return _disk_io_point; } PBD::Signal0 FreezeChange; PBD::Signal0 PlaylistChanged; diff --git a/libs/ardour/disk_io.cc b/libs/ardour/disk_io.cc index 64c645bdc3..2411f18bd3 100644 --- a/libs/ardour/disk_io.cc +++ b/libs/ardour/disk_io.cc @@ -65,6 +65,7 @@ DiskIOProcessor::DiskIOProcessor (Session& s, string const & str, Flag f) , _frames_read_from_ringbuffer (0) { midi_interpolation.add_channel_to (0,0); + set_display_to_user (false); } void @@ -428,3 +429,4 @@ DiskIOProcessor::get_location_times(const Location* location, *length = *end - *start; } } + diff --git a/libs/ardour/disk_reader.cc b/libs/ardour/disk_reader.cc index c7221ad90f..0994b4c03d 100644 --- a/libs/ardour/disk_reader.cc +++ b/libs/ardour/disk_reader.cc @@ -1479,3 +1479,4 @@ DiskReader::set_no_disk_output (bool yn) */ no_disk_output = yn; } + diff --git a/libs/ardour/track.cc b/libs/ardour/track.cc index 481da6f22c..72948b4a98 100644 --- a/libs/ardour/track.cc +++ b/libs/ardour/track.cc @@ -1522,25 +1522,51 @@ Track::use_captured_audio_sources (SourceList& srcs, CaptureInfos const & captur __attribute__((annotate("realtime"))) #endif void -Track::setup_invisible_processors_oh_children_of_mine (ProcessorList& new_processors) +Track::setup_invisible_processors_oh_children_of_mine (ProcessorList& processors) { ProcessorList::iterator insert_pos; switch (_disk_io_point) { case DiskIOPreFader: - insert_pos = find (new_processors.begin(), new_processors.end(), _trim); - if (insert_pos != new_processors.end()) { - insert_pos = new_processors.insert (insert_pos, _disk_writer); - new_processors.insert (insert_pos, _disk_reader); + insert_pos = find (processors.begin(), processors.end(), _trim); + if (insert_pos != processors.end()) { + insert_pos = processors.insert (insert_pos, _disk_writer); + processors.insert (insert_pos, _disk_reader); } break; case DiskIOPostFader: - insert_pos = find (new_processors.begin(), new_processors.end(), _main_outs); - if (insert_pos != new_processors.end()) { - insert_pos = new_processors.insert (insert_pos, _disk_writer); - new_processors.insert (insert_pos, _disk_reader); + insert_pos = find (processors.begin(), processors.end(), _main_outs); + if (insert_pos != processors.end()) { + insert_pos = processors.insert (insert_pos, _disk_writer); + processors.insert (insert_pos, _disk_reader); } case DiskIOCustom: break; } } + +void +Track::set_disk_io_position (DiskIOPoint diop) +{ + bool display = false; + + switch (diop) { + case DiskIOCustom: + display = true; + break; + default: + display = false; + } + + _disk_writer->set_display_to_user (display); + _disk_reader->set_display_to_user (display); + + const bool changed = (diop != _disk_io_point); + + _disk_io_point = diop; + + if (changed) { + Glib::Threads::Mutex::Lock lx (AudioEngine::instance()->process_lock ()); + configure_processors (0); + } +} -- cgit v1.2.3