Fix MIDI playback.
authorDavid Robillard <d@drobilla.net>
Sun, 13 Jan 2008 00:27:13 +0000 (00:27 +0000)
committerDavid Robillard <d@drobilla.net>
Sun, 13 Jan 2008 00:27:13 +0000 (00:27 +0000)
git-svn-id: svn://localhost/ardour2/trunk@2905 d708f5d6-7413-0410-9779-e7cbd77b26cf

libs/ardour/ardour/midi_port.h
libs/ardour/audioengine.cc
libs/ardour/jack_midi_port.cc
libs/ardour/midi_port.cc

index c9bcb056f44412fb6de789d7f1186fa8241fc1e4..485834aaffb0d7d7dc0c6ab47af88e72e1174e41 100644 (file)
@@ -34,6 +34,7 @@ class MidiPort : public BaseMidiPort, public PortFacade {
        void reset ();
 
        void cycle_start (nframes_t nframes, nframes_t offset);
+       void cycle_end (nframes_t nframes, nframes_t offset);
 
   protected:
        friend class AudioEngine;
index 08d18c7cab9dd38b631d8edcee2265897d32bce1..8ec97debd48dd2024dd813d3f53d04f0fc67ce0f 100644 (file)
@@ -337,11 +337,6 @@ AudioEngine::process_callback (nframes_t nframes)
        if (session) {
                session->process (nframes);
        }
-
-       if (!_running) {
-               _processed_frames = next_processed_frames;
-               return 0;
-       }
        
        // Finalize ports (ie write data if necessary)
 
@@ -349,6 +344,11 @@ AudioEngine::process_callback (nframes_t nframes)
                (*i)->cycle_end (nframes, 0);
        }
 
+       if (!_running) {
+               _processed_frames = next_processed_frames;
+               return 0;
+       }
+
        if (last_monitor_check + monitor_check_interval < next_processed_frames) {
 
                boost::shared_ptr<Ports> p = ports.reader();
index c9471c9d0c49542227f1d9a5c75fbfc55166141c..0b8d96f4db2507772a0b2c1d1c692ef75639524d 100644 (file)
@@ -25,31 +25,22 @@ JackMidiPort::JackMidiPort (const std::string& name, Flags flgs, MidiBuffer* buf
        , JackPort (name, DataType::MIDI, flgs)
        , BaseMidiPort (name, flgs) 
 {
-       if (buf) {
+       // MIDI ports always need a buffer since jack buffer format is different
+       assert(buf);
 
-               cout << name << " BUFFER" << endl;
-
-               _buffer = buf;
-               _own_buffer = false;
-
-       } else {
-
-               cout << name << " NO BUFFER" << endl;
-
-               /* data space will be provided by JACK */
-               _buffer = new MidiBuffer (0);
-               _own_buffer = true;
-       }
+       _buffer = buf;
+       _own_buffer = false;
 }
 
 void
-JackMidiPort::cycle_start (nframes_t nframes, nframes_t offset_ignored_but_probably_should_not_be)
+JackMidiPort::cycle_start (nframes_t nframes, nframes_t offset)
 {
+       /* FIXME: offset */
+
        _buffer->clear();
        assert(_buffer->size() == 0);
 
        if (_flags & IsOutput) {
-               // no buffer, nothing to do
                return;
        }
 
@@ -76,8 +67,10 @@ JackMidiPort::cycle_start (nframes_t nframes, nframes_t offset_ignored_but_proba
 }
 
 void
-JackMidiPort::cycle_end (nframes_t nframes, nframes_t offset_ignored_but_probably_should_not_be)
+JackMidiPort::cycle_end (nframes_t nframes, nframes_t offset)
 {
+       /* FIXME: offset */
+
        if (_flags & IsInput) {
                return;
        }
index 3e8dea4f62a6df04f4a104af92bd3046fa116066..7a045dc8290d23949e103a598697005b93c7d2bc 100644 (file)
@@ -67,8 +67,6 @@ MidiPort::reset()
 void
 MidiPort::cycle_start (nframes_t nframes, nframes_t offset)
 {
-       /* caller must hold process lock */
-       
        if (_ext_port) {
                _ext_port->cycle_start (nframes, offset);
        }
@@ -99,3 +97,13 @@ MidiPort::cycle_start (nframes_t nframes, nframes_t offset)
                _buffer->silence (nframes, offset);
        }
 }
+
+       
+void
+MidiPort::cycle_end (nframes_t nframes, nframes_t offset)
+{
+       if (_ext_port) {
+               _ext_port->cycle_end (nframes, offset);
+       }
+}
+