dynamic playback & capture buffer resizing (though transport is stopped first)
[ardour.git] / libs / ardour / session_transport.cc
index 898af1fb59de44269594170549a7c765c6c539af..e6ff844404cb5551cf4044540f013b2e2dc7628f 100644 (file)
@@ -260,7 +260,28 @@ Session::butler_transport_work ()
        ptw = post_transport_work();
 
        DEBUG_TRACE (DEBUG::Transport, string_compose ("Butler transport work, todo = %1\n", enum_2_string (ptw)));
-                    
+
+        if (ptw & PostTransportAdjustPlaybackBuffering) {
+               for (RouteList::iterator i = r->begin(); i != r->end(); ++i) {
+                       boost::shared_ptr<Track> tr = boost::dynamic_pointer_cast<Track> (*i);
+                       if (tr) {
+                               tr->adjust_playback_buffering ();
+                                /* and refill those buffers ... */
+                                tr->non_realtime_locate (_transport_frame);
+                       }
+               }
+                
+        }
+
+        if (ptw & PostTransportAdjustCaptureBuffering) {
+               for (RouteList::iterator i = r->begin(); i != r->end(); ++i) {
+                       boost::shared_ptr<Track> tr = boost::dynamic_pointer_cast<Track> (*i);
+                       if (tr) {
+                               tr->adjust_capture_buffering ();
+                       }
+               }
+        }
+
        if (ptw & PostTransportCurveRealloc) {
                for (RouteList::iterator i = r->begin(); i != r->end(); ++i) {
                        (*i)->curve_reallocate();