summaryrefslogtreecommitdiff
path: root/libs/ardour/midi_port.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2007-10-16 21:01:12 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2007-10-16 21:01:12 +0000
commitf3cf31009a3b52fa126356b6f826958393c6a956 (patch)
treefa5e9af4e1537acfa11dfd3b4f29b0c7463c5ad1 /libs/ardour/midi_port.cc
parent14dcc3f0170f8c723bcef0a59562adce0e8e7596 (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.cc77
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;
-}