call IO::prepare_for_reset() on BOTH IO nodes of a PortInsert's XML state, not just...
[ardour.git] / libs / ardour / engine_slave.cc
index eb55c9ba540dc51e1a445d20723e6e5f5a550f62..7ac767c3e84565054c99b0527353c9791b31207e 100644 (file)
@@ -21,6 +21,7 @@
 #include <cerrno>
 
 #include "ardour/audioengine.h"
+#include "ardour/audio_backend.h"
 #include "ardour/slave.h"
 
 using namespace std;
@@ -30,7 +31,7 @@ Engine_Slave::Engine_Slave (AudioEngine& e)
        : engine (e)
 {
        double x;
-       framepos_t p;
+       samplepos_t p;
        /* call this to initialize things */
        speed_and_position (x, p);
 }
@@ -52,28 +53,15 @@ Engine_Slave::ok() const
 }
 
 bool
-Engine_Slave::speed_and_position (double& sp, framepos_t& position)
+Engine_Slave::speed_and_position (double& sp, samplepos_t& position)
 {
-       switch (engine.transport_state()) {
-       case TransportStopped:
-               speed = 0;
-               _starting = false;
-               break;
-       case TransportRolling:
-               speed = 1.0;
-               _starting = false;
-               break;
-       case TransportLooping:
-               speed = 1.0;
+       boost::shared_ptr<AudioBackend> backend = engine.current_backend();
+
+       if (backend) {
+               _starting = backend->speed_and_position (sp, position);
+       } else {
                _starting = false;
-               break;
-       case TransportStarting:
-               _starting = true;
-               // don't adjust speed here, just leave it as it was
-               break;
        }
 
-       sp = speed;
-       position = engine.transport_frame();
        return true;
 }