another unusued parameter fix
[ardour.git] / libs / ardour / audio_diskstream.cc
index 3345a00b423deedbb7217a9047c350c03db53f11..dc9f427e87bea04d5f13c081ac657214a5ba4619 100644 (file)
@@ -578,7 +578,7 @@ AudioDiskstream::process (framepos_t transport_frame, pframes_t nframes, framecn
                /* no varispeed playback if we're recording, because the output .... TBD */
 
                if (rec_nframes == 0 && _actual_speed != 1.0f) {
-                       necessary_samples = (framecnt_t) floor ((nframes * fabs (_actual_speed))) + 1;
+                       necessary_samples = (framecnt_t) ceil ((nframes * fabs (_actual_speed))) + 2;
                } else {
                        necessary_samples = nframes;
                }
@@ -618,6 +618,8 @@ AudioDiskstream::process (framepos_t transport_frame, pframes_t nframes, framecn
                                           as our current_playback_buffer.
                                        */
 
+                                       assert(wrap_buffer_size >= necessary_samples);
+
                                        /* Copy buf[0] from playback_buf */
                                        memcpy ((char *) chaninfo->playback_wrap_buffer,
                                                        chaninfo->playback_vector.buf[0],
@@ -1661,16 +1663,27 @@ AudioDiskstream::set_record_enabled (bool yn)
                } else {
                        disengage_record_enable ();
                }
+
+               RecordEnableChanged (); /* EMIT SIGNAL */
        }
 }
 
-void
-AudioDiskstream::engage_record_enable ()
+bool
+AudioDiskstream::prep_record_enable ()
 {
+       if (!recordable() || !_session.record_enabling_legal() || _io->n_ports().n_audio() == 0) {
+               return false;
+       }
+
+       /* can't rec-enable in destructive mode if transport is before start */
+
+       if (destructive() && _session.transport_frame() < _session.current_start_frame()) {
+               return false;
+       }
+
        bool rolling = _session.transport_speed() != 0.0f;
        boost::shared_ptr<ChannelList> c = channels.reader();
 
-       g_atomic_int_set (&_record_enabled, 1);
        capturing_sources.clear ();
 
        if (Config->get_monitoring_model() == HardwareMonitoring) {
@@ -1688,13 +1701,12 @@ AudioDiskstream::engage_record_enable ()
                }
        }
 
-       RecordEnableChanged (); /* EMIT SIGNAL */
+       return true;
 }
 
-void
-AudioDiskstream::disengage_record_enable ()
+bool
+AudioDiskstream::prep_record_disable ()
 {
-       g_atomic_int_set (&_record_enabled, 0);
        boost::shared_ptr<ChannelList> c = channels.reader();
        if (Config->get_monitoring_model() == HardwareMonitoring) {
                for (ChannelList::iterator chan = c->begin(); chan != c->end(); ++chan) {
@@ -1702,7 +1714,8 @@ AudioDiskstream::disengage_record_enable ()
                }
        }
        capturing_sources.clear ();
-       RecordEnableChanged (); /* EMIT SIGNAL */
+
+       return true;
 }
 
 XMLNode&
@@ -1941,7 +1954,7 @@ AudioDiskstream::allocate_temporary_buffers ()
        */
 
        double const sp = max (fabsf (_actual_speed), 1.2f);
-       framecnt_t required_wrap_size = (framecnt_t) floor (_session.get_block_size() * sp) + 1;
+       framecnt_t required_wrap_size = (framecnt_t) ceil (_session.get_block_size() * sp) + 2;
 
        if (required_wrap_size > wrap_buffer_size) {