Merge branch 'master' into windows
[ardour.git] / libs / ardour / midi_diskstream.cc
index d27c2fa9c75f44b3c49f386c196f3f24ebfded45..39932db8bf28b7ce87badf5c7983962dfafde680 100644 (file)
@@ -201,8 +201,8 @@ MidiDiskstream::non_realtime_input_change ()
                seek (_session.transport_frame());
        }
 
-       g_atomic_int_set(&_frames_pending_write, 0);
-       g_atomic_int_set(&_num_captured_loops, 0);
+       g_atomic_int_set(const_cast<gint*> (&_frames_pending_write), 0);
+       g_atomic_int_set(const_cast<gint*> (&_num_captured_loops), 0);
 }
 
 int
@@ -375,8 +375,8 @@ MidiDiskstream::process (BufferSet& bufs, framepos_t transport_frame, pframes_t
                        }
                        _write_source->mark_write_starting_now(
                                capture_start_frame, capture_captured, loop_length);
-                       g_atomic_int_set(&_frames_pending_write, 0);
-                       g_atomic_int_set(&_num_captured_loops, 0);
+                       g_atomic_int_set(const_cast<gint*> (&_frames_pending_write), 0);
+                       g_atomic_int_set(const_cast<gint*> (&_num_captured_loops), 0);
                        was_recording = true;
                }
        }
@@ -445,7 +445,7 @@ MidiDiskstream::process (BufferSet& bufs, framepos_t transport_frame, pframes_t
                                break;
                        }
                }
-               g_atomic_int_add(&_frames_pending_write, nframes);
+               g_atomic_int_add(const_cast<gint*> (&_frames_pending_write), nframes);
 
                if (buf.size() != 0) {
                        Glib::Threads::Mutex::Lock lm (_gui_feed_buffer_mutex, Glib::Threads::TRY_LOCK);
@@ -516,6 +516,20 @@ MidiDiskstream::process (BufferSet& bufs, framepos_t transport_frame, pframes_t
        return 0;
 }
 
+frameoffset_t
+MidiDiskstream::calculate_playback_distance (pframes_t nframes)
+{
+       frameoffset_t playback_distance = nframes;
+
+       /* XXX: should be doing varispeed stuff once it's implemented in ::process() above */
+
+       if (_actual_speed < 0.0) {
+               return -playback_distance;
+       } else {
+               return playback_distance;
+       }
+}
+
 bool
 MidiDiskstream::commit (framecnt_t playback_distance)
 {
@@ -784,7 +798,7 @@ MidiDiskstream::do_flush (RunContext /*context*/, bool force_flush)
                return 0;
        }
 
-       const framecnt_t total = g_atomic_int_get(&_frames_pending_write);
+       const framecnt_t total = g_atomic_int_get(const_cast<gint*> (&_frames_pending_write));
 
        if (total == 0 || 
            _capture_buf->read_space() == 0 || 
@@ -819,7 +833,7 @@ MidiDiskstream::do_flush (RunContext /*context*/, bool force_flush)
                        error << string_compose(_("MidiDiskstream %1: cannot write to disk"), id()) << endmsg;
                        return -1;
                } 
-               g_atomic_int_add(&_frames_pending_write, -to_write);
+               g_atomic_int_add(const_cast<gint*> (&_frames_pending_write), -to_write);
        }
 
 out:
@@ -1029,7 +1043,7 @@ MidiDiskstream::transport_looped (framepos_t)
           the Source and/or entirely after the capture is finished.
        */
        if (was_recording) {
-               g_atomic_int_add(&_num_captured_loops, 1);
+               g_atomic_int_add(const_cast<gint*> (&_num_captured_loops), 1);
        }
 }
 
@@ -1096,7 +1110,7 @@ MidiDiskstream::prep_record_enable ()
        boost::shared_ptr<MidiPort> sp = _source_port.lock ();
        
        if (sp && Config->get_monitoring_model() == HardwareMonitoring) {
-               sp->request_jack_monitors_input (!(_session.config.get_auto_input() && rolling));
+               sp->request_input_monitoring (!(_session.config.get_auto_input() && rolling));
        }
 
        return true;
@@ -1244,12 +1258,12 @@ MidiDiskstream::allocate_temporary_buffers ()
 }
 
 void
-MidiDiskstream::ensure_jack_monitors_input (bool yn)
+MidiDiskstream::ensure_input_monitoring (bool yn)
 {
        boost::shared_ptr<MidiPort> sp = _source_port.lock ();
        
        if (sp) {
-               sp->ensure_jack_monitors_input (yn);
+               sp->ensure_input_monitoring (yn);
        }
 }