Merge remote-tracking branch 'remotes/origin/cairocanvas' into windows
[ardour.git] / libs / ardour / midi_diskstream.cc
index 26cd43aec415a2f0c1fd44e6c0d7366bb7b6a339..a1a640cd1c08475391d3ab34c44464f2a2dfc63b 100644 (file)
 #include <fcntl.h>
 #include <cstdlib>
 #include <ctime>
-#include <strings.h> // for ffs(3)
 #include <sys/stat.h>
-#include <sys/mman.h>
 
 #include "pbd/error.h"
+#include "pbd/ffs.h"
 #include "pbd/basename.h"
 #include <glibmm/threads.h>
 #include "pbd/xml++.h"
@@ -202,8 +201,8 @@ MidiDiskstream::non_realtime_input_change ()
                seek (_session.transport_frame());
        }
 
-       g_atomic_int_set(const_cast<gint*>(&_frames_pending_write), 0);
-       g_atomic_int_set(const_cast<gint*>(&_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
@@ -376,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(const_cast<gint*>(&_frames_pending_write), 0);
-                       g_atomic_int_set(const_cast<gint*>(&_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;
                }
        }
@@ -439,7 +438,7 @@ MidiDiskstream::process (BufferSet& bufs, framepos_t transport_frame, pframes_t
                                break;
                        case ForceChannel:
                                if (ev.is_channel_event()) {
-                                       ev.set_channel (ffs(mask) - 1);
+                                       ev.set_channel (PBD::ffs(mask) - 1);
                                }
                                _capture_buf->write(transport_frame + loop_offset + ev.time(),
                                                    ev.type(), ev.size(), ev.buffer());
@@ -517,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)
 {
@@ -785,7 +798,7 @@ MidiDiskstream::do_flush (RunContext /*context*/, bool force_flush)
                return 0;
        }
 
-       const framecnt_t total = g_atomic_int_get(const_cast<gint*>(&_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 || 
@@ -820,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(const_cast<gint*>(&_frames_pending_write), -to_write);
+               g_atomic_int_add(const_cast<gint*> (&_frames_pending_write), -to_write);
        }
 
 out:
@@ -1030,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(const_cast<gint*>(&_num_captured_loops), 1);
+               g_atomic_int_add(const_cast<gint*> (&_num_captured_loops), 1);
        }
 }
 
@@ -1097,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;
@@ -1245,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);
        }
 }