tweaks to disk io point mechanisms
authorPaul Davis <paul@linuxaudiosystems.com>
Fri, 21 Jul 2017 18:29:35 +0000 (14:29 -0400)
committerPaul Davis <paul@linuxaudiosystems.com>
Mon, 18 Sep 2017 15:40:53 +0000 (11:40 -0400)
libs/ardour/ardour/track.h
libs/ardour/disk_io.cc
libs/ardour/disk_reader.cc
libs/ardour/track.cc

index 1bd65a984c05bb4cc01b4f7412ea39c5c83b59d3..d14ccdc938b126032a11ac481ac1493c86d9383c 100644 (file)
@@ -186,6 +186,7 @@ class LIBARDOUR_API Track : public Route, public Recordable
        void adjust_capture_buffering ();
 
        void set_disk_io_position (DiskIOPoint);
        void adjust_capture_buffering ();
 
        void set_disk_io_position (DiskIOPoint);
+       DiskIOPoint disk_io_point() const { return _disk_io_point; }
 
        PBD::Signal0<void> FreezeChange;
        PBD::Signal0<void> PlaylistChanged;
 
        PBD::Signal0<void> FreezeChange;
        PBD::Signal0<void> PlaylistChanged;
index 64c645bdc35110e3a5eb01322cd0f9831f1ae7c8..2411f18bd3214def42cb3f5c59877d99f13017b1 100644 (file)
@@ -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);
        , _frames_read_from_ringbuffer (0)
 {
        midi_interpolation.add_channel_to (0,0);
+       set_display_to_user (false);
 }
 
 void
 }
 
 void
@@ -428,3 +429,4 @@ DiskIOProcessor::get_location_times(const Location* location,
                *length = *end - *start;
        }
 }
                *length = *end - *start;
        }
 }
+
index c7221ad90fa7fc99bdc37d1558a75e37f425b030..0994b4c03d154471036c0c3d203e2500d3d62dfe 100644 (file)
@@ -1479,3 +1479,4 @@ DiskReader::set_no_disk_output (bool yn)
        */
        no_disk_output = yn;
 }
        */
        no_disk_output = yn;
 }
+
index 481da6f22cb4e8cedff7f4bae4b5d554b10c4e98..72948b4a98a5ffc90c9bae6a99ec3cf78c523146 100644 (file)
@@ -1522,25 +1522,51 @@ Track::use_captured_audio_sources (SourceList& srcs, CaptureInfos const & captur
 __attribute__((annotate("realtime")))
 #endif
 void
 __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:
 {
        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:
                }
                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;
        }
 }
                }
        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);
+       }
+}