Merge with trunk R2978.
[ardour.git] / libs / ardour / track.cc
index f84b53cacb137f3d6763952449d86e8f919f4436..052105cc855148d3c9dd18ad01d6fedee17a3354 100644 (file)
 #include <ardour/track.h>
 #include <ardour/diskstream.h>
 #include <ardour/session.h>
-#include <ardour/redirect.h>
+#include <ardour/io_processor.h>
 #include <ardour/audioregion.h>
 #include <ardour/audiosource.h>
 #include <ardour/route_group_specialized.h>
-#include <ardour/insert.h>
+#include <ardour/processor.h>
 #include <ardour/audioplaylist.h>
 #include <ardour/panner.h>
 #include <ardour/utils.h>
@@ -40,7 +40,7 @@ using namespace PBD;
 
 Track::Track (Session& sess, string name, Route::Flag flag, TrackMode mode, DataType default_type)
        : Route (sess, name, 1, -1, -1, -1, flag, default_type)
-       , _rec_enable_control (*this)
+       , _rec_enable_control (new RecEnableControllable(*this))
 {
        _declickable = true;
        _freeze_record.state = NoFreeze;
@@ -50,7 +50,7 @@ Track::Track (Session& sess, string name, Route::Flag flag, TrackMode mode, Data
 
 Track::Track (Session& sess, const XMLNode& node, DataType default_type)
        : Route (sess, node)
-       , _rec_enable_control (*this)
+       , _rec_enable_control (new RecEnableControllable(*this))
 {
        _freeze_record.state = NoFreeze;
        _declickable = true;
@@ -90,23 +90,32 @@ Track::toggle_monitor_input ()
 ARDOUR::nframes_t
 Track::update_total_latency ()
 {
-       _own_latency = 0;
+       nframes_t old = _own_latency;
 
-       for (InsertList::iterator i = _inserts.begin(); i != _inserts.end(); ++i) {
-               if ((*i)->active ()) {
-                       _own_latency += (*i)->latency ();
+       if (_user_latency) {
+               _own_latency = _user_latency;
+       } else {
+               _own_latency = 0;
+
+               for (ProcessorList::iterator i = _processors.begin(); i != _processors.end(); ++i) {
+                       if ((*i)->active ()) {
+                               _own_latency += (*i)->signal_latency ();
+                       }
                }
        }
 
        set_port_latency (_own_latency);
 
+       if (old != _own_latency) {
+               signal_latency_changed (); /* EMIT SIGNAL */
+       }
+
        return _own_latency;
 }
 
-
 Track::FreezeRecord::~FreezeRecord ()
 {
-       for (vector<FreezeRecordInsertInfo*>::iterator i = insert_info.begin(); i != insert_info.end(); ++i) {
+       for (vector<FreezeRecordProcessorInfo*>::iterator i = processor_info.begin(); i != processor_info.end(); ++i) {
                delete *i;
        }
 }
@@ -179,7 +188,7 @@ Track::set_record_enable (bool yn, void *src)
                set_meter_point (_saved_meter_point, this);
        }
 
-       _rec_enable_control.Changed ();
+       _rec_enable_control->Changed ();
 }