spline interpolation: fix crash bugs on negative speed and NULL inputs
[ardour.git] / libs / ardour / session_process.cc
index e7f2ad416f79477341746f43e55f0e6a76c75732..2dd68744b4266c390e32a6e04a0791bcd5778d73 100644 (file)
@@ -325,10 +325,9 @@ Session::process_with_events (nframes_t nframes)
        if (_transport_speed == 1.0) {
                frames_moved = (long) nframes;
        } else {                
-               interpolation.set_target_speed (_target_transport_speed);
-               interpolation.set_speed (_transport_speed);
-               //FIXME frames_moved = (long) interpolation.interpolate (nframes, 0, 0);
-               frames_moved = _transport_speed * nframes;
+               interpolation.set_target_speed (fabs(_target_transport_speed));
+               interpolation.set_speed (fabs(_transport_speed));
+               frames_moved = (long) interpolation.interpolate (0, nframes, 0, 0);
        }
 
        end_frame = _transport_frame + (nframes_t)frames_moved;
@@ -847,10 +846,9 @@ Session::process_without_events (nframes_t nframes)
        if (_transport_speed == 1.0) {
                frames_moved = (long) nframes;
        } else {                
-               interpolation.set_target_speed (_target_transport_speed);
-               interpolation.set_speed (_transport_speed);
-               //FIXME frames_moved = (long) interpolation.interpolate (nframes, 0, 0);
-               frames_moved = _transport_speed * nframes;
+               interpolation.set_target_speed (fabs(_target_transport_speed));
+               interpolation.set_speed (fabs(_transport_speed));
+               frames_moved = (long) interpolation.interpolate (0, nframes, 0, 0);
        }
 
        if (process_routes (nframes)) {