summaryrefslogtreecommitdiff
path: root/libs/ardour/midi_buffer.cc
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2009-05-04 15:50:51 +0000
committerDavid Robillard <d@drobilla.net>2009-05-04 15:50:51 +0000
commitca10cc82a4374a5b413c06ead6cc89c53f8881ee (patch)
tree3d44716ed02d80bd1256609631c77a730d04e169 /libs/ardour/midi_buffer.cc
parent9b06b1da0cec57a6848cf1f7920691ae022b30e7 (diff)
Preliminary MIDI plugin support.
git-svn-id: svn://localhost/ardour2/branches/3.0@5036 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/midi_buffer.cc')
-rw-r--r--libs/ardour/midi_buffer.cc32
1 files changed, 29 insertions, 3 deletions
diff --git a/libs/ardour/midi_buffer.cc b/libs/ardour/midi_buffer.cc
index 2a1426ab61..fd42c45fe7 100644
--- a/libs/ardour/midi_buffer.cc
+++ b/libs/ardour/midi_buffer.cc
@@ -124,11 +124,37 @@ MidiBuffer::push_back(const Evoral::MIDIEvent<TimeType>& ev)
return false;
}
+ push_back(ev.time(), ev.size(), ev.buffer());
+
+ return true;
+}
+
+
+/** Push an event into the buffer.
+ * @return false if operation failed (not enough room)
+ */
+bool
+MidiBuffer::push_back(TimeType time, size_t size, const uint8_t* data)
+{
+ const size_t stamp_size = sizeof(TimeType);
+ /*cerr << "MidiBuffer: pushing event @ " << ev.time()
+ << " size = " << ev.size() << endl;*/
+
+ if (_size + stamp_size + size >= _capacity) {
+ cerr << "MidiBuffer::push_back failed (buffer is full)" << endl;
+ return false;
+ }
+
+ if (!Evoral::midi_event_is_valid(data, size)) {
+ cerr << "WARNING: MidiBuffer ignoring illegal MIDI event" << endl;
+ return false;
+ }
+
uint8_t* const write_loc = _data + _size;
- *((TimeType*)write_loc) = ev.time();
- memcpy(write_loc + stamp_size, ev.buffer(), ev.size());
+ *((TimeType*)write_loc) = time;
+ memcpy(write_loc + stamp_size, data, size);
- _size += stamp_size + ev.size();
+ _size += stamp_size + size;
_silent = false;
return true;