diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2007-10-16 21:01:12 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2007-10-16 21:01:12 +0000 |
commit | f3cf31009a3b52fa126356b6f826958393c6a956 (patch) | |
tree | fa5e9af4e1537acfa11dfd3b4f29b0c7463c5ad1 /libs/ardour/midi_port.cc | |
parent | 14dcc3f0170f8c723bcef0a59562adce0e8e7596 (diff) |
virtualize Port object; clean up automation tracks from track deletion
git-svn-id: svn://localhost/ardour2/trunk@2556 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/midi_port.cc')
-rw-r--r-- | libs/ardour/midi_port.cc | 77 |
1 files changed, 3 insertions, 74 deletions
diff --git a/libs/ardour/midi_port.cc b/libs/ardour/midi_port.cc index 3f03cfe880..df4ab19008 100644 --- a/libs/ardour/midi_port.cc +++ b/libs/ardour/midi_port.cc @@ -25,87 +25,16 @@ using namespace ARDOUR; using namespace std; -MidiPort::MidiPort(jack_port_t* p) - : Port(p) - , _buffer(4096) // FIXME FIXME FIXME Jack needs to tell us this - , _nframes_this_cycle(0) +MidiPort::MidiPort (nframes_t bufsize) + : _buffer (bufsize) { - DataType dt(_type); - assert(dt == DataType::MIDI); - + _type = DataType::MIDI; reset(); } - MidiPort::~MidiPort() { } -void -MidiPort::cycle_start (nframes_t nframes) -{ - _buffer.clear(); - assert(_buffer.size() == 0); - - _nframes_this_cycle = nframes; - - if (_flags & JackPortIsOutput) { - _buffer.silence(nframes); - assert(_buffer.size() == 0); - return; - } - - // We're an input - copy Jack events to internal buffer - - void* jack_buffer = jack_port_get_buffer(_port, nframes); - - const nframes_t event_count - = jack_midi_get_event_count(jack_buffer); - - assert(event_count < _buffer.capacity()); - - jack_midi_event_t ev; - - for (nframes_t i=0; i < event_count; ++i) { - - jack_midi_event_get(&ev, jack_buffer, i); - - _buffer.push_back(ev); - } - - assert(_buffer.size() == event_count); - - //if (_buffer.size() > 0) - // cerr << "MIDIPort got " << event_count << " events." << endl; -} - -void -MidiPort::cycle_end() -{ - if (_flags & JackPortIsInput) { - _nframes_this_cycle = 0; - return; - } - - // We're an output - copy events from internal buffer to Jack buffer - - void* jack_buffer = jack_port_get_buffer(_port, _nframes_this_cycle); - - //const nframes_t event_count = _buffer.size(); - //if (event_count > 0) - // cerr << "MIDIPort writing " << event_count << " events." << endl; - - jack_midi_clear_buffer(jack_buffer); - - for (MidiBuffer::iterator i = _buffer.begin(); i != _buffer.end(); ++i) { - const MidiEvent& ev = *i; - // event times should be frames, relative to cycle start - assert(ev.time() >= 0); - assert(ev.time() < _nframes_this_cycle); - jack_midi_event_write(jack_buffer, (jack_nframes_t)ev.time(), ev.buffer(), ev.size()); - } - - _nframes_this_cycle = 0; -} |