* refactor Session::follow_slave to be easier to read and understand
[ardour.git] / libs / ardour / audio_diskstream.cc
index 091e1df30f01b920521fab6c91149dd84c93170e..8ba1825759de5ba8f59cf83427625e2843655e20 100644 (file)
@@ -205,6 +205,18 @@ AudioDiskstream::non_realtime_input_change ()
        }
 }
 
+void
+AudioDiskstream::non_realtime_locate (nframes_t location)
+{
+       /* now refill channel buffers */
+
+       if (speed() != 1.0f || speed() != -1.0f) {
+               seek ((nframes_t) (location * (double) speed()));
+       } else {
+               seek (location);
+       }
+}
+
 void
 AudioDiskstream::get_input_sources ()
 {
@@ -399,7 +411,7 @@ AudioDiskstream::check_record_status (nframes_t transport_frame, nframes_t nfram
        /* if per-track or global rec-enable turned on while the other was already on, we've started recording */
 
        if (((change & track_rec_enabled) && record_enabled() && (!(change & global_rec_enabled) && can_record)) || 
-           (((change & global_rec_enabled) && can_record && (!(change & track_rec_enabled) && record_enabled())))) {
+           ((change & global_rec_enabled) && can_record && (!(change & track_rec_enabled) && record_enabled()))) {
                
                /* starting to record: compute first+last frames */
 
@@ -524,7 +536,7 @@ AudioDiskstream::process (nframes_t transport_frame, nframes_t nframes, nframes_
 
        commit_should_unlock = false;
 
-       if (!_io->active()) {
+       if (!_io || !_io->active()) {
                _processed = true;
                return 0;
        }
@@ -643,8 +655,8 @@ AudioDiskstream::process (nframes_t transport_frame, nframes_t nframes, nframes_
 
                                AudioPort* const ap = _io->audio_input(n);
                                assert(ap);
-                               assert(rec_nframes <= ap->get_audio_buffer().capacity());
-                               memcpy (chaninfo->current_capture_buffer, ap->get_audio_buffer().data(rec_nframes, offset + rec_offset), sizeof (Sample) * rec_nframes);
+                               assert(rec_nframes <= ap->get_audio_buffer( nframes, offset ).capacity());
+                               memcpy (chaninfo->current_capture_buffer, ap->get_audio_buffer( nframes, offset ).data(rec_nframes, offset + rec_offset), sizeof (Sample) * rec_nframes);
 
                        } else {
 
@@ -658,7 +670,7 @@ AudioDiskstream::process (nframes_t transport_frame, nframes_t nframes, nframes_
                                AudioPort* const ap = _io->audio_input(n);
                                assert(ap);
 
-                               Sample* buf = ap->get_audio_buffer().data(nframes, offset);
+                               Sample* buf = ap->get_audio_buffer( nframes, offset ).data(nframes, offset);
                                nframes_t first = chaninfo->capture_vector.len[0];
 
                                memcpy (chaninfo->capture_wrap_buffer, buf, sizeof (Sample) * first);
@@ -835,7 +847,7 @@ AudioDiskstream::commit (nframes_t nframes)
 {
        bool need_butler = false;
 
-       if (!_io->active()) {
+       if (!_io || !_io->active()) {
                return false;
        }
 
@@ -2458,33 +2470,21 @@ AudioDiskstream::ChannelInfo::~ChannelInfo ()
                write_source.reset ();
        }
                
-       if (speed_buffer) {
-               delete [] speed_buffer;
-               speed_buffer = 0;
-       }
+       delete [] speed_buffer;
+       speed_buffer = 0;
 
-       if (playback_wrap_buffer) {
-               delete [] playback_wrap_buffer;
-               playback_wrap_buffer = 0;
-       }
+       delete [] playback_wrap_buffer;
+       playback_wrap_buffer = 0;
 
-       if (capture_wrap_buffer) {
-               delete [] capture_wrap_buffer;
-               capture_wrap_buffer = 0;
-       }
+       delete [] capture_wrap_buffer;
+       capture_wrap_buffer = 0;
        
-       if (playback_buf) {
-               delete playback_buf;
-               playback_buf = 0;
-       }
+       delete playback_buf;
+       playback_buf = 0;
 
-       if (capture_buf) {
-               delete capture_buf;
-               capture_buf = 0;
-       }
+       delete capture_buf;
+       capture_buf = 0;
 
-       if (capture_transition_buf) {
-               delete capture_transition_buf;
-               capture_transition_buf = 0;
-       }
+       delete capture_transition_buf;
+       capture_transition_buf = 0;
 }